Class: Object
- Inherits:
- BasicObject
- Defined in:
- lib/trax/core/ext/object.rb
Instance Method Summary collapse
- #as! {|_self| ... } ⇒ Object
-
#configuration_for(target, as = :configuration, run_configuration = false, &blk) ⇒ Object
Defines a Configuration Class within a target module namespace, or nested class i.e.
- #define_configuration_options(as = :configuration, run_configuration = false, &block) ⇒ Object (also: #define_configuration, #has_configuration, #has_configurable_options)
- #define_configuration_options!(as = :configuration, &block) ⇒ Object (also: #has_configurable_options!)
- #remove_instance_variables(*args) ⇒ Object (also: #reset_instance_variables)
- #set_fully_qualified_constant(const_name, value) ⇒ Object
-
#try_chain(*symbols) ⇒ Object
following method stolen from abrandoned rubygems.org/gems/try_chain.
Instance Method Details
#as! {|_self| ... } ⇒ Object
3 4 5 |
# File 'lib/trax/core/ext/object.rb', line 3 def as! yield self end |
#configuration_for(target, as = :configuration, run_configuration = false, &blk) ⇒ Object
Defines a Configuration Class within a target module namespace, or nested class i.e. configuration_for(::Ecommerce::Cart) will define Ecommerce::Cart::Configuration class, inherited form Trax::Core::Configuration And we can then define specific configuration options, for that class, on that class
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/trax/core/ext/object.rb', line 11 def configuration_for(target, as = :configuration, run_configuration = false, &blk) configuration_ivar_name = (as == :configuration) ? :configuration : :"#{as}_configuration" configuration_ivar_name_shortcut = (as == :configuration) ? :config : :"#{as}_config" target.const_set(configuration_ivar_name.to_s.classify, ::Class.new(::Trax::Core::Configuration)) configuration_klass = target.const_get(configuration_ivar_name.to_s.classify) configuration_klass.source = target configurer_method_name = (as == :configuration) ? :configure : :"configure_#{as}" target.singleton_class.__send__(:attr_accessor, configuration_ivar_name) target.singleton_class.instance_variable_set("@#{configuration_ivar_name}", configuration_klass.instance_eval(&blk)) target.singleton_class.__send__(:alias_method, configuration_ivar_name_shortcut, configuration_ivar_name) target.define_singleton_method(configurer_method_name) do |&block| if block return instance_variable_set("@#{configuration_ivar_name}", configuration_klass.new(&block)) if !instance_variable_get("@#{configuration_ivar_name}") return instance_variable_get("@#{configuration_ivar_name}").instance_eval(&block) else return instance_variable_set("@#{configuration_ivar_name}", configuration_klass.new) if !instance_variable_get("@#{configuration_ivar_name}") return instance_variable_get("@#{configuration_ivar_name}") end end target.__send__(configurer_method_name) if run_configuration end |
#define_configuration_options(as = :configuration, run_configuration = false, &block) ⇒ Object Also known as: define_configuration, has_configuration, has_configurable_options
36 37 38 |
# File 'lib/trax/core/ext/object.rb', line 36 def (as=:configuration, run_configuration = false, &block) configuration_for(self, as, run_configuration, &block) end |
#define_configuration_options!(as = :configuration, &block) ⇒ Object Also known as: has_configurable_options!
40 41 42 |
# File 'lib/trax/core/ext/object.rb', line 40 def (as=:configuration, &block) (as, true, &block) end |
#remove_instance_variables(*args) ⇒ Object Also known as: reset_instance_variables
49 50 51 52 53 54 55 56 |
# File 'lib/trax/core/ext/object.rb', line 49 def remove_instance_variables(*args) args.map{ |ivar_name| ivar_name = ivar_name.ivar? ? ivar_name : :"@#{ivar_name}" remove_instance_variable(ivar_name) if instance_variable_defined?(ivar_name) } self end |
#set_fully_qualified_constant(const_name, value) ⇒ Object
59 60 61 62 63 64 65 66 |
# File 'lib/trax/core/ext/object.rb', line 59 def set_fully_qualified_constant(const_name, value) segs = const_name.split("::") raise(::StandardError.new("Set fully qualified constant requires a preexisting namespace to set under")) unless segs.length > 1 as, on = segs.pop, segs.join("::").constantize on.const_set(as, value) end |
#try_chain(*symbols) ⇒ Object
following method stolen from abrandoned rubygems.org/gems/try_chain
69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/trax/core/ext/object.rb', line 69 def try_chain(*symbols) return nil if self.nil? symbols = symbols.flatten symbols.compact! symbols.reduce(self) do |result, symbol| result = result.try(symbol) break nil if result.nil? result end end |