module UmbrellioUtils::Misc
Public Instance Methods
build_infinite_hash()
click to toggle source
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}
@example Dig to key
h = UmbrellioUtils::Misc.build_infinite_hash => {} h.dig(:kek, :pek) => {} h => { kek: { pek: {} } }
@return [Hash] empty infinite hash.
# File lib/umbrellio_utils/misc.rb, line 42 def build_infinite_hash Hash.new { |hash, key| hash[key] = Hash.new(&hash.default_proc) } end
merge_ranges(*ranges)
click to toggle source
Ranges go from high to low priority
# File lib/umbrellio_utils/misc.rb, line 25 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)
click to toggle source
Deeply sets default and default_proc values to nil.
@param hash [Hash] hash for which you want to reset defaults.
@return [Hash] reset hash.
# File lib/umbrellio_utils/misc.rb, line 53 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)
click to toggle source
# File lib/umbrellio_utils/misc.rb, line 7 def table_sync(scope, delay: 1, routing_key: nil) scope.in_batches do |batch| batch.each do |model| next if model.try(:skip_table_sync?) values = [model.class.name, model.values] publisher = TableSync::Publishing::Publisher.new(*values, confirm: false) publisher.routing_key = routing_key if routing_key publisher.publish_now end sleep delay end end