Module: UmbrellioUtils::Misc
Instance Method Summary collapse
-
#build_infinite_hash ⇒ Hash
Builds empty hash which recursively returns empty hash, if key is not found.
-
#merge_ranges(*ranges) ⇒ Object
Ranges go from high to low priority.
-
#reset_defaults_for_hash(hash) ⇒ Hash
Deeply sets #default and #default_proc values to nil.
- #table_sync(scope, delay: 1, routing_key: nil) ⇒ Object
Instance Method Details
#build_infinite_hash ⇒ Hash
Builds empty hash which recursively returns empty hash, if key is not found. Also note, that this hash and all subhashes has set #default_proc. To reset this attribute use #reset_defaults_for_hash
43 44 45 |
# File 'lib/umbrellio_utils/misc.rb', line 43 def build_infinite_hash Hash.new { |hash, key| hash[key] = Hash.new(&hash.default_proc) } end |
#merge_ranges(*ranges) ⇒ Object
Ranges go from high to low priority
26 27 28 29 |
# File 'lib/umbrellio_utils/misc.rb', line 26 def merge_ranges(*ranges) ranges = ranges.map { |x| x.present? && x.size == 2 ? x : [nil, nil] } ranges.first.zip(*ranges[1..]).map { |x| x.find(&:present?) } end |
#reset_defaults_for_hash(hash) ⇒ Hash
Deeply sets #default and #default_proc values to nil.
54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/umbrellio_utils/misc.rb', line 54 def reset_defaults_for_hash(hash) hash.dup.tap do |dup_hash| dup_hash.default = nil dup_hash.default_proc = nil dup_hash.transform_values! do |obj| next obj.deep_dup unless obj.is_a?(Hash) reset_defaults_for_hash(obj) end end end |
#table_sync(scope, delay: 1, routing_key: nil) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# File 'lib/umbrellio_utils/misc.rb', line 7 def table_sync(scope, delay: 1, routing_key: nil) scope.in_batches do |batch| batch_for_sync = batch.all.reject { |model| model.try(:skip_table_sync?) } next if batch_for_sync.empty? model_class = batch_for_sync.first.class.name TableSync::Publishing::Batch.new( object_class: model_class, original_attributes: batch_for_sync.map(&:values), routing_key:, ).publish_now sleep delay end end |