Module: Setsy::DSL::ClassMethods

Defined in:
lib/setsy/dsl.rb

Instance Method Summary collapse

Instance Method Details

#setsy(attribute_name, options = {}) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/setsy/dsl.rb', line 7

def setsy(attribute_name, options = {})
  readers = {}
  options[:column] ||= "#{attribute_name}_data".to_sym
  options[:defaults] ||= self.const_defined?(:SETSY_DEFAULTS) ? self.const_get(:SETSY_DEFAULTS) : {}
  readers = yield(Setsy::Configuration) if block_given?
  class_eval do
    define_method(:setsy_configuration) do
      options[:defaults] || {}
    end
    define_singleton_method(:setsy_default) do
      options[:defaults] || {}
    end
  end
  instance_eval do
    define_method(:setsy_configuration) do
      if send(options[:column]).try(:empty?)
        self.class.setsy_default
      else
        send(options[:column])
      end
    end
    define_method(:setsy_default) do
      self.class.setsy_default
    end
    define_method(attribute_name) do
      Setsy::Configuration.from_set(self, setsy_configuration, readers)
    end
  end
end