Module: Ceres::Children

Includes:
AttributeModule, Enumerable
Defined in:
lib/ceres/children.rb

Instance Method Summary collapse

Methods included from AttributeModule

included

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
    message = "overwriting #{key.inspect} is not allowed"
    message += "\n  new value: #{child.inspect}"
    message += "\n  old value: #{@children[key].inspect}"

    raise ArgumentError, message
  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

Returns:

  • (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