Module: Support::Attributes::ClassMethods

Defined in:
lib/support/attributes.rb

Instance Method Summary collapse

Instance Method Details

#attr_fields(*args) ⇒ Object



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/support/attributes.rb', line 73

def attr_fields(*args)
  args.flatten.each do |field|
    field, default = (field.is_a?(Hash) ? field.to_a.flatten : [field]).map(&:to_s)
    method_id = field.downcase.gsub(/[-\s]+/, '_')
  
    define_method method_id do; self[field] ||= default; end unless self.respond_to?(method_id)
  
    writer_id = [method_id, '='].join
    define_method writer_id do |value|
      self[field] = value
    end unless self.respond_to?(writer_id)

    predicate = [method_id, '?'].join  
    unless self.respond_to?(predicate)
      define_method predicate do
        ![nil, false, '', [], 'false', 'no', 'never'].include?(self[field])
      end     
      has_predicate = ['has_', predicate].join
      alias_method(has_predicate, predicate) unless self.respond_to?(has_predicate)
    end
  end
end

#create(parameters) ⇒ Object



69
70
71
# File 'lib/support/attributes.rb', line 69

def create(parameters)
  new.merge(parameters)
end