Module: Coactive::Initializer

Extended by:
ActiveSupport::Concern
Includes:
Coactive::Initializers::Contexts
Defined in:
lib/coactive/initializer.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.resolve(instance, value) ⇒ Object



32
33
34
35
36
37
38
39
40
# File 'lib/coactive/initializer.rb', line 32

def resolve(instance, value)
  if value.respond_to?(:call)
    instance.instance_exec(&value)
  elsif value.is_a?(Symbol) && instance.respond_to?(value, true)
    instance.send(value)
  else
    value.deep_dup
  end
end

Instance Method Details

#initialize(args = {}, &block) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/coactive/initializer.rb', line 17

def initialize(args = {}, &block)
  @context = self.class.context_class.new(args, &block)
  @context.define_accessors!(self.class._contexts.map(&:name))

  self.class._contexts.each do |var|
    if var.required? && !@context.key?(var.name)
      raise MissingContextError.new("missing required context: #{var.name}")
    end
    if var.default && !@context.key?(var.name)
      @context[var.name] = Initializer.resolve(self, var.default)
    end
  end
end