Module: Tumugi::Mixin::Parameterizable::ClassMethods

Defined in:
lib/tumugi/mixin/parameterizable.rb

Instance Method Summary collapse

Instance Method Details

#dumpObject



95
96
97
# File 'lib/tumugi/mixin/parameterizable.rb', line 95

def dump
  parameter_proxy(proxy_id).dump
end

#merged_parameter_proxyObject



90
91
92
93
# File 'lib/tumugi/mixin/parameterizable.rb', line 90

def merged_parameter_proxy
  parameterizables = ancestors.reverse.select{ |a| a.respond_to?(:parameter_proxy) }
  parameterizables.map { |a| a.parameter_proxy(a.proxy_id) }.reduce(:merge)
end

#param(name, opts = {}) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/tumugi/mixin/parameterizable.rb', line 59

def param(name, opts={})
  if instance_methods.include?(name)
    raise Tumugi::ParameterError.new("Parameter '#{name}' cannot use, because it is already defined or override instance method.")
  end
  parameter_proxy(proxy_id).param(name, opts)
  attr_writer name
  define_method(name) do
    val = self.instance_variable_get("@#{name}")
    if val.instance_of?(Proc)
      v = self.instance_exec(&val)
      self.instance_variable_set("@#{name}", v)
      v
    else
      val
    end
  end
end

#param_auto_bind_enabled(v) ⇒ Object



86
87
88
# File 'lib/tumugi/mixin/parameterizable.rb', line 86

def param_auto_bind_enabled(v)
  parameter_proxy(proxy_id).param_auto_bind_enabled = v
end

#param_set(name, value) ⇒ Object



81
82
83
84
# File 'lib/tumugi/mixin/parameterizable.rb', line 81

def param_set(name, value)
  Tumugi::Logger.instance.warn("'param_set' is deprecated and will be removed in a future release. Use 'set' instead.")
  set(name, value)
end

#parameter_proxy(mod_name) ⇒ Object



50
51
52
53
54
55
56
57
# File 'lib/tumugi/mixin/parameterizable.rb', line 50

def parameter_proxy(mod_name)
  map = parameter_proxy_map
  unless map[mod_name]
    proxy = Tumugi::Parameter::ParameterProxy.new(mod_name)
    map[mod_name] = proxy
  end
  map[mod_name]
end

#parameter_proxy_mapObject



44
45
46
47
48
# File 'lib/tumugi/mixin/parameterizable.rb', line 44

def parameter_proxy_map
  map = {}
  self.define_singleton_method(:parameter_proxy_map) { map }
  map
end

#proxy_idObject



99
100
101
# File 'lib/tumugi/mixin/parameterizable.rb', line 99

def proxy_id
  self.name || self.object_id.to_s
end

#set(name, value) ⇒ Object



77
78
79
# File 'lib/tumugi/mixin/parameterizable.rb', line 77

def set(name, value)
  parameter_proxy(proxy_id).set(name, value)
end