Class: Draisine::Partitioner
- Inherits:
-
Object
- Object
- Draisine::Partitioner
- Defined in:
- lib/draisine/partitioner.rb
Instance Attribute Summary collapse
-
#mechanism ⇒ Object
readonly
Returns the value of attribute mechanism.
-
#model_class ⇒ Object
readonly
Returns the value of attribute model_class.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(model_class, mechanism = :default) ⇒ Partitioner
constructor
A new instance of Partitioner.
- #partition(start_date, end_date, partition_size: 100) ⇒ Object
Constructor Details
#initialize(model_class, mechanism = :default) ⇒ Partitioner
Returns a new instance of Partitioner.
24 25 26 27 |
# File 'lib/draisine/partitioner.rb', line 24 def initialize(model_class, mechanism = :default) @model_class = model_class @mechanism = QueryMechanisms.fetch(mechanism).new(model_class) end |
Instance Attribute Details
#mechanism ⇒ Object (readonly)
Returns the value of attribute mechanism.
23 24 25 |
# File 'lib/draisine/partitioner.rb', line 23 def mechanism @mechanism end |
#model_class ⇒ Object (readonly)
Returns the value of attribute model_class.
23 24 25 |
# File 'lib/draisine/partitioner.rb', line 23 def model_class @model_class end |
Class Method Details
.partition(model_class:, start_date:, end_date:, partition_size: 100, mechanism: :default) ⇒ Object
19 20 21 |
# File 'lib/draisine/partitioner.rb', line 19 def self.partition(model_class:, start_date:, end_date:, partition_size: 100, mechanism: :default) new(model_class, mechanism).partition(start_date, end_date, partition_size: partition_size) end |
Instance Method Details
#partition(start_date, end_date, partition_size: 100) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/draisine/partitioner.rb', line 29 def partition(start_date, end_date, partition_size: 100) updated_ids = get_updated_ids(start_date, end_date) deleted_ids = get_deleted_ids(start_date, end_date) unpersisted_ids = get_unpersisted_ids(start_date, end_date) # if anyone knows how to do this packing procedure better, please tell me all_ids = updated_ids.map {|id| [:updated, id] } + deleted_ids.map {|id| [:deleted, id] } + unpersisted_ids.map {|id| [:unpersisted, id] } if all_ids.present? all_ids.each_slice(partition_size).map do |slice| part = slice.group_by(&:first).map {|k,v| [k, v.map(&:last)] }.to_h Partition.new(model_class.name, start_date, end_date, part[:updated], part[:deleted], part[:unpersisted]) end else [Partition.new(model_class.name, start_date, end_date)] end end |