lib/attributes.rb in ThiagoLelis-backgroundjob-1.0.4 vs lib/attributes.rb in ThiagoLelis-backgroundjob-1.0.5

- old
+ new

@@ -1,118 +1,118 @@ -module Attributes - Attributes::VERSION = '5.0.0' unless defined? Attributes::VERSION - def self.version() Attributes::VERSION end - - class List < ::Array - def << element - super - self - ensure - uniq! - index! - end - def index! - @index ||= Hash.new - each{|element| @index[element] = true} - end - def include? element - @index ||= Hash.new - @index[element] ? true : false - end - def initializers - @initializers ||= Hash.new - end - end - - def attributes *a, &b - unless a.empty? - returned = Hash.new - - 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} - - initializers = __attributes__.initializers - - names_and_defaults.each do |name, default| - raise NameError, "bad instance variable name '@#{ name }'" if "@#{ name }" =~ %r/[!?=]$/o - name = name.to_s - - initialize = b || lambda { default } - initializer = lambda do |this| - Object.instance_method('instance_eval').bind(this).call &initialize - end - initializer_id = initializer.object_id - __attributes__.initializers[name] = initializer - - module_eval <<-code - def #{ name }=(*value, &block) - value.unshift block if block - @#{ name } = value.first - end - code - - module_eval <<-code - def #{ name }(*value, &block) - value.unshift block if block - return self.send('#{ name }=', value.first) unless value.empty? - #{ name }! unless defined? @#{ name } - @#{ name } - end - code - - module_eval <<-code - def #{ name }! - initializer = ObjectSpace._id2ref #{ initializer_id } - self.#{ name } = initializer.call(self) - @#{ name } - end - code - - module_eval <<-code - def #{ name }? - #{ name } - end - code - - attributes << name - returned[name] = initializer - end - - returned - else - begin - __attribute_list__ - rescue NameError - singleton_class = - class << self - self - end - klass = self - singleton_class.module_eval do - attribute_list = List.new - define_method('attribute_list'){ klass == self ? attribute_list : raise(NameError) } - alias_method '__attribute_list__', 'attribute_list' - end - __attribute_list__ - end - end - end - - %w( __attributes__ __attribute__ attribute ).each{|dst| alias_method dst, 'attributes'} -end - -class Object - def attributes *a, &b - sc = - class << self - self - end - sc.attributes *a, &b - end - %w( __attributes__ __attribute__ attribute ).each{|dst| alias_method dst, 'attributes'} -end - -class Module - include Attributes -end +module Attributes + Attributes::VERSION = '5.0.0' unless defined? Attributes::VERSION + def self.version() Attributes::VERSION end + + class List < ::Array + def << element + super + self + ensure + uniq! + index! + end + def index! + @index ||= Hash.new + each{|element| @index[element] = true} + end + def include? element + @index ||= Hash.new + @index[element] ? true : false + end + def initializers + @initializers ||= Hash.new + end + end + + def attributes *a, &b + unless a.empty? + returned = Hash.new + + 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} + + initializers = __attributes__.initializers + + names_and_defaults.each do |name, default| + raise NameError, "bad instance variable name '@#{ name }'" if "@#{ name }" =~ %r/[!?=]$/o + name = name.to_s + + initialize = b || lambda { default } + initializer = lambda do |this| + Object.instance_method('instance_eval').bind(this).call &initialize + end + initializer_id = initializer.object_id + __attributes__.initializers[name] = initializer + + module_eval <<-code + def #{ name }=(*value, &block) + value.unshift block if block + @#{ name } = value.first + end + code + + module_eval <<-code + def #{ name }(*value, &block) + value.unshift block if block + return self.send('#{ name }=', value.first) unless value.empty? + #{ name }! unless defined? @#{ name } + @#{ name } + end + code + + module_eval <<-code + def #{ name }! + initializer = ObjectSpace._id2ref #{ initializer_id } + self.#{ name } = initializer.call(self) + @#{ name } + end + code + + module_eval <<-code + def #{ name }? + #{ name } + end + code + + attributes << name + returned[name] = initializer + end + + returned + else + begin + __attribute_list__ + rescue NameError + singleton_class = + class << self + self + end + klass = self + singleton_class.module_eval do + attribute_list = List.new + define_method('attribute_list'){ klass == self ? attribute_list : raise(NameError) } + alias_method '__attribute_list__', 'attribute_list' + end + __attribute_list__ + end + end + end + + %w( __attributes__ __attribute__ attribute ).each{|dst| alias_method dst, 'attributes'} +end + +class Object + def attributes *a, &b + sc = + class << self + self + end + sc.attributes *a, &b + end + %w( __attributes__ __attribute__ attribute ).each{|dst| alias_method dst, 'attributes'} +end + +class Module + include Attributes +end