Class: Object

Inherits:
BasicObject
Defined in:
lib/trax/core/ext/object.rb

Instance Method Summary collapse

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, **options)
  target = method(method_name)
  target.execute_call_strategy(*args, **options)
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 define_configuration_options(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 define_configuration_options!(as=:configuration, &block)
  define_configuration_options(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

Raises:

  • (::StandardError)


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