Class: Draisine::Importer
- Inherits:
-
Object
- Object
- Draisine::Importer
- Defined in:
- lib/draisine/importer.rb
Instance Attribute Summary collapse
-
#model_class ⇒ Object
readonly
Returns the value of attribute model_class.
Instance Method Summary collapse
- #import(start_id: nil, start_date: nil, batch_size: 500) ⇒ Object
- #import_fields(batch_size: 500, fields:) ⇒ Object
- #import_new(batch_size: 500, start_date_window_size: 20.minutes) ⇒ Object
-
#initialize(model_class) ⇒ Importer
constructor
A new instance of Importer.
Constructor Details
#initialize(model_class) ⇒ Importer
Returns a new instance of Importer.
5 6 7 |
# File 'lib/draisine/importer.rb', line 5 def initialize(model_class) @model_class = model_class end |
Instance Attribute Details
#model_class ⇒ Object (readonly)
Returns the value of attribute model_class.
3 4 5 |
# File 'lib/draisine/importer.rb', line 3 def model_class @model_class end |
Instance Method Details
#import(start_id: nil, start_date: nil, batch_size: 500) ⇒ Object
9 10 11 12 13 14 15 16 |
# File 'lib/draisine/importer.rb', line 9 def import(start_id: nil, start_date: nil, batch_size: 500) find_each(batch_size: batch_size, start_id: start_id, start_date: start_date) do |sobj| attrs = sobj.attributes model_class.import_with_attrs( attrs.fetch("Id"), attrs.slice(*model_class.salesforce_synced_attributes)) end end |
#import_fields(batch_size: 500, fields:) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/draisine/importer.rb', line 27 def import_fields(batch_size: 500, fields:) model_class.find_in_batches(batch_size: batch_size) do |batch| attempt do sobjs = client.fetch_multiple(model_class.salesforce_object_name, batch.map(&:salesforce_id), batch_size, fields) sobjs_map = sobjs.map {|sobj| [sobj.Id, sobj] }.to_h batch.each do |model| sobject = sobjs_map[model.salesforce_id] next unless sobject model.salesforce_assign_attributes(sobject.attributes.slice(*fields)) model.salesforce_skipping_sync { model.save! } end end end end |
#import_new(batch_size: 500, start_date_window_size: 20.minutes) ⇒ Object
18 19 20 21 22 23 24 25 |
# File 'lib/draisine/importer.rb', line 18 def import_new(batch_size: 500, start_date_window_size: 20.minutes) last_model = model_class.order("salesforce_id DESC").first start_id = last_model.try(:salesforce_id) start_date = last_model.try(:CreatedDate) start_date -= start_date_window_size if start_date import(start_id: start_id, batch_size: batch_size, start_date: start_date) end |