Module: Embulk::Impl::IndifferentAccess
- Included in:
- DataSource
- Defined in:
- lib/embulk/data_source.rb
Overview
Class Method Summary collapse
- .included(base) ⇒ Object
-
.inject(hash) ⇒ Object
Injects indifferent access into a duplicate of the hash provided.
- .inject!(hash) ⇒ Object
Instance Method Summary collapse
- #convert! ⇒ Object
- #convert_key(key) ⇒ Object
- #indifferent_access? ⇒ Boolean
- #indifferent_default(key = nil) ⇒ Object
- #indifferent_delete(key) ⇒ Object
- #indifferent_fetch(key, *args, &block) ⇒ Object
- #indifferent_key?(key) ⇒ Boolean
- #indifferent_replace(other_hash) ⇒ Object
- #indifferent_update(other_hash) ⇒ Object
- #indifferent_value(value) ⇒ Object
- #indifferent_values_at(*indices) ⇒ Object
- #indifferent_writer(key, value) ⇒ Object
Class Method Details
.included(base) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/embulk/data_source.rb', line 7 def self.included(base) #Hashie::Extensions::Dash::IndifferentAccess::ClassMethods.tap do |extension| # base.extend(extension) if base <= Hashie::Dash && !base.singleton_class.included_modules.include?(extension) #end base.class_eval do alias_method :regular_writer, :[]= unless method_defined?(:regular_writer) alias_method :[]=, :indifferent_writer alias_method :store, :indifferent_writer %w(default update replace fetch delete key? values_at).each do |m| alias_method "regular_#{m}", m unless method_defined?("regular_#{m}") alias_method m, "indifferent_#{m}" end %w(include? member? has_key?).each do |key_alias| alias_method key_alias, :indifferent_key? end class << self def [](*) super.convert! end def try_convert(*) (hash = super) && self[hash] end end end end |
.inject(hash) ⇒ Object
Injects indifferent access into a duplicate of the hash provided. See #inject!
44 45 46 |
# File 'lib/embulk/data_source.rb', line 44 def self.inject(hash) inject!(hash.dup) end |
.inject!(hash) ⇒ Object
37 38 39 40 |
# File 'lib/embulk/data_source.rb', line 37 def self.inject!(hash) (class << hash; self; end).send :include, IndifferentAccess hash.convert! end |
Instance Method Details
#convert! ⇒ Object
52 53 54 55 56 57 |
# File 'lib/embulk/data_source.rb', line 52 def convert! keys.each do |k| regular_writer convert_key(k), indifferent_value(regular_delete(k)) end self end |
#convert_key(key) ⇒ Object
48 49 50 |
# File 'lib/embulk/data_source.rb', line 48 def convert_key(key) key.to_s end |
#indifferent_access? ⇒ Boolean
101 102 103 |
# File 'lib/embulk/data_source.rb', line 101 def indifferent_access? true end |
#indifferent_default(key = nil) ⇒ Object
69 70 71 72 |
# File 'lib/embulk/data_source.rb', line 69 def indifferent_default(key = nil) return self[convert_key(key)] if key?(key) regular_default(key) end |
#indifferent_delete(key) ⇒ Object
89 90 91 |
# File 'lib/embulk/data_source.rb', line 89 def indifferent_delete(key) regular_delete convert_key(key) end |
#indifferent_fetch(key, *args, &block) ⇒ Object
85 86 87 |
# File 'lib/embulk/data_source.rb', line 85 def indifferent_fetch(key, *args, &block) regular_fetch convert_key(key), *args, &block end |
#indifferent_key?(key) ⇒ Boolean
93 94 95 |
# File 'lib/embulk/data_source.rb', line 93 def indifferent_key?(key) regular_key? convert_key(key) end |
#indifferent_replace(other_hash) ⇒ Object
105 106 107 108 109 |
# File 'lib/embulk/data_source.rb', line 105 def indifferent_replace(other_hash) (keys - other_hash.keys).each { |key| delete(key) } other_hash.each { |key, value| self[key] = value } self end |
#indifferent_update(other_hash) ⇒ Object
74 75 76 77 78 79 |
# File 'lib/embulk/data_source.rb', line 74 def indifferent_update(other_hash) return regular_update(other_hash) if hash_with_indifference?(other_hash) other_hash.each_pair do |k, v| self[k] = v end end |
#indifferent_value(value) ⇒ Object
59 60 61 62 63 64 65 66 67 |
# File 'lib/embulk/data_source.rb', line 59 def indifferent_value(value) if hash_lacking_indifference?(value) IndifferentAccess.inject!(value) elsif value.is_a?(::Array) value.replace(value.map { |e| indifferent_value(e) }) else value end end |
#indifferent_values_at(*indices) ⇒ Object
97 98 99 |
# File 'lib/embulk/data_source.rb', line 97 def indifferent_values_at(*indices) indices.map { |i| self[i] } end |
#indifferent_writer(key, value) ⇒ Object
81 82 83 |
# File 'lib/embulk/data_source.rb', line 81 def indifferent_writer(key, value) regular_writer convert_key(key), indifferent_value(value) end |