Sha256: e2980669aa480e64a6532272e7874a3484f4ff36847a1f7a365fe6ecb3ce5485
Contents?: true
Size: 1.33 KB
Versions: 1
Compression:
Stored size: 1.33 KB
Contents
# encoding: utf-8 module ActiveRecordJsonImporter class Importer attr_reader :active_record_class, :options, :bulk_input_file attr_accessor :records_at_once RECORDS_AT_ONCE = 5000 def initialize(options = {}) @options = options initialize_active_record_class initialize_bulk_input_file initialize_records_at_once end def import records = [] bulk_input_file.each_with_index do |line, index| records << JSON.parse(line) if (index % records_at_once == 0) import_records records records = [] end end bulk_input_file.close import_records records if records.any? return true end private def initialize_active_record_class obj = options[:active_record_class] msg = "invalid active_record_class." if obj.present? and obj.ancestors.include? ActiveRecord::Base @active_record_class = obj else fail RuntimeError, "#{msg} #{obj}" end rescue raise RuntimeError, "#{msg} #{obj}" end def initialize_records_at_once @records_at_once = options[:records_at_once] || RECORDS_AT_ONCE end def initialize_bulk_input_file @bulk_input_file = File.open(options[:file], "r") end def import_records records active_records = records.map{|record| active_record_class.new record} active_record_class.import(active_records, validate: false) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
active_record_json_importer-0.0.1 | lib/active_record_json_importer.rb |