module Condensable::GravityAbsorber
handle when an instance variable is not defined, absorber will create one on the fly
Public Instance Methods
condensable_missing_attribute(method_name, *args)
click to toggle source
# File lib/condensable/gravity_absorber.rb, line 71 def condensable_missing_attribute(method_name, *args) default_handle_arg = Condensable::DEFAULT_VALUES[self.class.to_s] if default_handle_arg == :raise_error raise NoMethodError, "#{method_name} is undefined" elsif default_handle_arg == nil return nil elsif default_handle_arg.is_a?(Symbol) if method(default_handle_arg).arity == 0 send(default_handle_arg) else send(default_handle_arg, method_name, *args) end elsif default_handle_arg.is_a?(String) return default_handle_arg end end
condensed_values()
click to toggle source
all condensed variables’ value
# File lib/condensable/gravity_absorber.rb, line 21 def condensed_values values = [] condensed_variables.each do |var| values << send(var) end values end
condensed_variables()
click to toggle source
list all condensed variables
# File lib/condensable/gravity_absorber.rb, line 10 def condensed_variables @condensed_variables = [] if @condensed_variables.nil? @condensed_variables end
each() { |var, send(var)| ... }
click to toggle source
iterating all condensed variables and its value
# File lib/condensable/gravity_absorber.rb, line 30 def each condensed_variables.each do |var| yield var, send(var) end end
included(base)
click to toggle source
# File lib/condensable/gravity_absorber.rb, line 5 def included(base) base.extend(GravityAbsorber::ClassLevelMethods) end
is_condensed?(variable_name)
click to toggle source
check whether a variable is a result of condensation
# File lib/condensable/gravity_absorber.rb, line 16 def is_condensed?(variable_name) @condensed_variables.include?(variable_name.to_sym) end
method_missing(method_name, *args, &block)
click to toggle source
# File lib/condensable/gravity_absorber.rb, line 36 def method_missing(method_name, *args, &block) if method_name.to_s[-1] == '=' @condensed_variables = [] if @condensed_variables.nil? # get proper attribute name, by removing "=" attribute_name = method_name[0..-2] setter_name = "#{attribute_name}=" getter_name = attribute_name unless respond_to?(setter_name) instance_eval do eval %Q{ def #{attribute_name}=(arg) @#{attribute_name} = arg end } end end unless respond_to?(getter_name) instance_eval do eval %Q{ def #{attribute_name} @#{attribute_name} end } end # instance eval @condensed_variables << getter_name.to_sym end send(setter_name, *args) else condensable_missing_attribute(method_name, *args) end end