Module: Vault::Properties

Defined in:
lib/vault/properties.rb

Defined Under Namespace

Classes: Property

Instance Method Summary collapse

Instance Method Details

#define_property_methods(name) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
# File 'lib/vault/properties.rb', line 29

def define_property_methods(name)
  class_eval <<-ruby, __FILE__, __LINE__
    def #{name}
      read_attribute(:#{name})
    end

    def #{name}=(value)
      write_attribute(:#{name}, value)
    end
  ruby
end

#key(key = nil) ⇒ Object



3
4
5
6
# File 'lib/vault/properties.rb', line 3

def key(key=nil)
  return @_key if key.nil?
  @_key = property(key, true).name
end

#propertiesObject



21
22
23
# File 'lib/vault/properties.rb', line 21

def properties
  @_properties ||= Set.new
end

#property(name, primary = false, &block) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/vault/properties.rb', line 8

def property(name, primary=false, &block)
  Property.new(name, primary, &block).tap do |prop|
    properties << prop
    define_property_methods(prop.name)

    # FIXME: Ugh, ActiveModel fails with this, I can't do incremental method
    # definition, you have to define them all at once (so undefine/define
    # each time if you don't know all the properties upfront, like here.)
    undefine_attribute_methods
    define_attribute_methods(property_names)
  end
end

#property_namesObject



25
26
27
# File 'lib/vault/properties.rb', line 25

def property_names
  properties.map(&:name)
end