Module: PropertyBagged::ClassMethods

Defined in:
lib/property_bagged.rb

Instance Method Summary collapse

Instance Method Details

#bagged_property(property_name, options = {}) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/property_bagged.rb', line 24

def bagged_property(property_name, options = {})
  default = options[:default]
  class_eval <<-END
    def #{property_name}
      self.property_bag['#{property_name.to_s}'] ||= #{default.inspect}
    end

    def #{property_name}=(val)
      self.property_bag ||= {}
      self.property_bag = self.property_bag.merge('#{property_name}' => val)
    end
  END
end

#property_bag_with_name(property_bag_name) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/property_bagged.rb', line 7

def property_bag_with_name(property_bag_name)
  class_eval <<-END
    def property_bag
      r = read_attribute #{property_bag_name.to_sym.inspect}
      if String === r
        YAML.load(r)
      else
        r || {}
      end
    end

    def property_bag=(val)
      write_attribute(#{property_bag_name.to_sym.inspect}, val)
    end
  END
end