Module: Ceres::Children
- Includes:
- AttributeModule, Enumerable
- Defined in:
- lib/ceres/children.rb
Instance Method Summary collapse
- #[](key) ⇒ Object
- #add_child(child, replace: false) ⇒ Object
- #dig(key, *argv, &block) ⇒ Object
- #each_child(&block) ⇒ Object
- #fetch(key, *argv, &block) ⇒ Object
- #fetch_values(*keys, &block) ⇒ Object
- #has_key?(key) ⇒ Boolean
- #initialize(*args, &block) ⇒ Object
- #remove_child(key, &block) ⇒ Object
- #select_children(&block) ⇒ Object
Methods included from AttributeModule
Instance Method Details
#[](key) ⇒ Object
63 64 65 |
# File 'lib/ceres/children.rb', line 63 def [](key) @children[key] end |
#add_child(child, replace: false) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/ceres/children.rb', line 26 def add_child(child, replace: false) key = child_key_from_object(child) if replace || !@children.has_key?(key) @children[key] = child_value_from_object(child) else = "overwriting #{key.inspect} is not allowed" += "\n new value: #{child.inspect}" += "\n old value: #{@children[key].inspect}" raise ArgumentError, end end |
#dig(key, *argv, &block) ⇒ Object
90 91 92 93 94 95 96 |
# File 'lib/ceres/children.rb', line 90 def dig(key, *argv, &block) if self.has_key?(key) object = self[key] argv.count > 0 ? object.dig(*argv) : object end end |
#each_child(&block) ⇒ Object
53 54 55 56 57 |
# File 'lib/ceres/children.rb', line 53 def each_child(&block) @children.each_value(&block) self end |
#fetch(key, *argv, &block) ⇒ Object
71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/ceres/children.rb', line 71 def fetch(key, *argv, &block) if self.has_key?(key) @children[key] elsif argv.count > 0 argv[0] elsif block block.call(key) else raise KeyError.new("key not found #{key.inspect}") # TODO (ruby 2.6) # raise KeyError.new("key not found #{key.inspect}", key: name, receiver: self) end end |
#fetch_values(*keys, &block) ⇒ Object
86 87 88 |
# File 'lib/ceres/children.rb', line 86 def fetch_values(*keys, &block) keys.map { |k| self.fetch(k, &block) } end |
#has_key?(key) ⇒ Boolean
67 68 69 |
# File 'lib/ceres/children.rb', line 67 def has_key?(key) @children.has_key?(key) end |
#initialize(*args, &block) ⇒ Object
12 13 14 15 16 |
# File 'lib/ceres/children.rb', line 12 def initialize(*args, &block) super(*args, &block) @children = {} end |
#remove_child(key, &block) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/ceres/children.rb', line 40 def remove_child(key, &block) if result = @children.delete(key) result elsif block block.call(key) else raise KeyError.new("key not found #{key.inspect}") # TODO (ruby 2.6) # raise KeyError.new("key not found #{key.inspect}", key: name, receiver: self) end end |
#select_children(&block) ⇒ Object
59 60 61 |
# File 'lib/ceres/children.rb', line 59 def select_children(&block) @children.values.select(&block) end |