discourse/lib/import/json_decoder.rb

44 lines
975 B
Ruby

module Import
class JsonDecoder
def initialize(filenames, loader = nil)
@filemap = Hash[*
filenames.map do |filename|
[File.basename(filename, '.*'), filename]
end.flatten
]
@loader = loader || lambda{|filename| Oj.load_file(filename)}
end
def load_schema
@loader.call(@filemap['schema'])
end
def each_table
@filemap.each do |name, filename|
next if name == 'schema'
yield name, @loader.call(filename)
end
end
def input_stream
@input_stream ||= begin
end
end
def start( opts )
schema = load_schema
opts[:callbacks][:schema_info].call( source: schema['schema']['source'], version: schema['schema']['version'], table_count: schema.keys.size - 1)
each_table do |name, data|
info = schema[name]
opts[:callbacks][:table_data].call( name, info['fields'], data, info['row_count'] )
end
end
end
end