Module: LinkedRails::CallableVariable::ClassMethods

Defined in:
lib/linked_rails/callable_variable.rb

Instance Method Summary collapse

Instance Method Details

#callable_variable(method, opts = {}) ⇒ Object

rubocop:disable Metrics/AbcSize, Metrics/MethodLength



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/linked_rails/callable_variable.rb', line 8

def callable_variable(method, opts = {}) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
  variable ||= opts[:variable] || method
  default ||= opts[:default]

  define_method method do
    value = instance_variable_get("@#{variable}")
    if value.respond_to?(:call)
      instance = opts[:instance] ? send(opts[:instance]) : self
      value = instance_variable_set("@#{variable}", instance.instance_exec(&value))
    end
    return value if !value.nil? || default.blank?

    instance_exec(&default)
  end
end