Class: Object
- Inherits:
- BasicObject
- Defined in:
- lib/trax/core/ext/object.rb
Instance Method Summary collapse
- #__smartsend__(method_name, *args, **options) ⇒ Object
- #as!(h) ⇒ 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
#__smartsend__(method_name, *args, **options) ⇒ Object
3 4 5 6 |
# File 'lib/trax/core/ext/object.rb', line 3 def __smartsend__(method_name, *args, **) target = method(method_name) target.execute_call_strategy(*args, **) end |
#as!(h) ⇒ Object
8 9 10 |
# File 'lib/trax/core/ext/object.rb', line 8 def as!(h) h.to_transformer.call(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
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/trax/core/ext/object.rb', line 16 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
41 42 43 |
# File 'lib/trax/core/ext/object.rb', line 41 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!
45 46 47 |
# File 'lib/trax/core/ext/object.rb', line 45 def (as=:configuration, &block) (as, true, &block) end |
#remove_instance_variables(*args) ⇒ Object Also known as: reset_instance_variables
54 55 56 57 58 59 60 61 |
# File 'lib/trax/core/ext/object.rb', line 54 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
64 65 66 67 68 69 70 71 |
# File 'lib/trax/core/ext/object.rb', line 64 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
74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/trax/core/ext/object.rb', line 74 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 |