Class: Object

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

Instance Method Summary collapse

Instance Method Details

#as! {|_self| ... } ⇒ Object

Yields:

  • (_self)

Yield Parameters:

  • _self (Object)

    the object that the method was called on



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 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!



40
41
42
# File 'lib/trax/core/ext/object.rb', line 40

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



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

Raises:

  • (::StandardError)


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