Class: Declarative::Definitions

Inherits:
Hash
  • Object
show all
Defined in:
lib/declarative/definitions.rb

Defined Under Namespace

Modules: Inspect Classes: Definition

Instance Method Summary collapse

Constructor Details

#initialize(definition_class) ⇒ Definitions

Returns a new instance of Definitions.



24
25
26
27
# File 'lib/declarative/definitions.rb', line 24

def initialize(definition_class)
  @definition_class = definition_class
  super()
end

Instance Method Details

#add(name, options = {}, &block) ⇒ Object

#add is high-level behavior for Definitions#[]=. reserved options:

:_features
:_defaults
:_base
:_nested_builder


39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/declarative/definitions.rb', line 39

def add(name, options={}, &block)
  options = options[:_defaults].(name, options) if options[:_defaults] # FIXME: pipeline?
  base    = options[:_base]

  if options.delete(:inherit) and parent_property = get(name)
    base    = parent_property[:nested]
    options = parent_property.merge(options) # TODO: Definition#merge
  end

  if options[:_nested_builder]
    options[:nested] = build_nested(
      options.merge(
        _base: base,
        _name: name,
        _block: block,
      )
    )
  end

  # clean up, we don't want that stored in the Definition instance.
  [:_defaults, :_base, :_nested_builder, :_features].each { |key| options.delete(key) }

  self[name.to_s] = @definition_class.new(name, options)
end

#each(&block) ⇒ Object

TODO : test me!



29
30
31
# File 'lib/declarative/definitions.rb', line 29

def each(&block) # TODO : test me!
  values.each(&block)
end

#get(name) ⇒ Object



64
65
66
# File 'lib/declarative/definitions.rb', line 64

def get(name)
  self[name.to_s]
end