class Yasd::Dataloader
Constants
- BATCH_SIZE
Attributes
client[RW]
Public Class Methods
new(config)
click to toggle source
# File lib/yasd/dataloader.rb, line 15 def initialize(config) @client = Soapforce::Client.new @client.authenticate(username: config.username, password: config.password) @success_logger = Logger.new(config.success_log_path || "./results/#{Time.now.strftime("%Y-%m-%d")}_success.log") @error_logger = Logger.new(config.success_log_path || "./results/#{Time.now.strftime("%Y-%m-%d")}_error.log") @mapper = Mapper.new(config.mapping) @converter = Converter.new(config.convert) @batch_size = config.batch_size || BATCH_SIZE end
Public Instance Methods
delete(object, filename)
click to toggle source
# File lib/yasd/dataloader.rb, line 77 def delete(object, filename) delete_records = [] total_record_size = 0 CSV.foreach(filename, headers: true) do |data| total_record_size += 1 delete_records << data[:Id] if delete_records.length == @batch_size delete_results = client.delete(object, delete_records) log(delete_results) delete_records = [] end end if delete_records.length > 0 delete_results = client.delete(object, delete_records) log(delete_results) end end
export(query)
click to toggle source
# File lib/yasd/dataloader.rb, line 25 def export(query) query_result = client.query(query) return if query_result.size == 0 CSV do |csv_out| header = create_csv_header(query_result) csv_out << header query_result.each do |record| csv_out << header.map {|field| record[field] } end end end
insert(object, filename)
click to toggle source
# File lib/yasd/dataloader.rb, line 39 def insert(object, filename) insert_records = [] total_record_size = 0 CSV.foreach(filename, headers: true) do |data| total_record_size += 1 insert_records << convert_and_mapping(data) if insert_records.length == @batch_size insert_results = client.create!(object, insert_records) log(insert_results) insert_records = [] end end if insert_records.length > 0 insert_results = client.create!(object, insert_records) log(insert_results) end end
update(object, filename)
click to toggle source
# File lib/yasd/dataloader.rb, line 58 def update(object, filename) update_records = [] total_record_size = 0 CSV.foreach(filename, headers: true) do |data| total_record_size += 1 update_records << convert_and_mapping(data) if update_records.length == @batch_size update_results = client.update(object, update_records) log(update_results) update_records = [] end end if update_records.length > 0 update_results = client.update(object, update_records) log(update_results) end end
upsert(object, upsert_key, filename)
click to toggle source
# File lib/yasd/dataloader.rb, line 96 def upsert(object, upsert_key, filename) upsert_records = [] total_record_size = 0 CSV.foreach(filename, headers: true) do |data| total_record_size += 1 upsert_records << convert_and_mapping(data) if upsert_records.length == @batch_size upsert_results = client.upsert(object, upsert_key, upsert_records) log(upsert_results) upsert_records = [] end end if upsert_records.length > 0 upsert_results = client.upsert(object, upsert_key, upsert_records) log(upsert_results) end end
Private Instance Methods
convert_and_mapping(data)
click to toggle source
# File lib/yasd/dataloader.rb, line 127 def convert_and_mapping(data) converted_data = @converter.call(data) @mapper.call(converted_data) end
create_csv_header(query_result)
click to toggle source
# File lib/yasd/dataloader.rb, line 132 def create_csv_header(query_result) query_result.first.to_h.reject {|k, _v| %i[type @xsi:type].include?(k) }.keys end
log(results)
click to toggle source
# File lib/yasd/dataloader.rb, line 117 def log(results) results.each do |result| if result[:success] @success_logger.info(result.values.join(',')) else @error_logger.info(result.values.join(',')) end end end