Sha256: 643d2dd4de08af7561a8b00548ced52708eebe56fdc92adf36d0efe3ac7c2007
Contents?: true
Size: 1.15 KB
Versions: 2
Compression:
Stored size: 1.15 KB
Contents
module Attributes VERSION = '3.0.1' def attributes *a, &b unless a.empty? hashes, names = a.partition{|x| Hash === x} names_and_defaults = {} hashes.each{|h| names_and_defaults.update h} names.flatten.compact.each{|name| names_and_defaults.update name => nil} names_and_defaults.each do |name, default| init = b || lambda { default } ivar = "@#{ name }" getter = "#{ name }" setter = "#{ name }=" query = "#{ name }?" define_method(setter) do |value| instance_variable_set ivar, value end define_method(getter) do |*value| unless value.empty? send setter, value.shift else defined = instance_eval "defined? #{ ivar }" unless defined send setter, instance_eval(&init) end instance_variable_get ivar end end alias_method query, getter (attributes << name).uniq! attributes end else @attributes ||= [] end end def attribute *a, &b attributes *a, &b end end class Module include Attributes end
Version data entries
2 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
attributes-3.0.1 | lib/attributes-3.0.1.rb |
attributes-3.0.1 | lib/attributes.rb |