class Attribs

Attributes

defaults[R]
names[R]

Public Class Methods

new(*attrs) click to toggle source
# File lib/attribs.rb, line 6
def initialize(*attrs)
  @defaults   = attrs.last.instance_of?(Hash) ? attrs.pop : {}
  @names = (attrs + @defaults.keys).uniq
end

Public Instance Methods

add(*attrs) click to toggle source
# File lib/attribs.rb, line 11
def add(*attrs)
  defaults = attrs.last.instance_of?(Hash) ? attrs.pop : {}
  self.class.new(*[*(names+attrs), @defaults.merge(defaults)])
end
included(descendant) click to toggle source
# File lib/attribs.rb, line 20
def included(descendant)
  descendant.module_exec(self) do |this|
    include InstanceMethods,
            Anima.new(*this.names)

    define_singleton_method(:attributes) { this }
  end
end
remove(*attrs) click to toggle source
# File lib/attribs.rb, line 16
def remove(*attrs)
  self.class.new(*[*(names-attrs), @defaults.reject {|k| attrs.include?(k) }])
end