Class: Draisine::Importer

Inherits:
Object
  • Object
show all
Defined in:
lib/draisine/importer.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

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_classObject (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