class Interactor::Schema::Context

Attributes

table[R]

Public Class Methods

build(context = {}, schema = []) click to toggle source
# File lib/interactor/schema/context.rb, line 4
def self.build(context = {}, schema = [])
  self === context ? context : new(schema).tap do |instance|
    instance.assign(context)
  end
end
new(schema = []) click to toggle source
# File lib/interactor/schema/context.rb, line 10
def initialize(schema = [])
  @schema = schema
  @table = {}
  define_schema_methods(schema)
end

Public Instance Methods

[](key) click to toggle source
# File lib/interactor/schema/context.rb, line 16
def [](key)
  @table[key]
end
_called() click to toggle source
# File lib/interactor/schema/context.rb, line 49
def _called
  @called ||= []
end
_schema() click to toggle source
# File lib/interactor/schema/context.rb, line 53
def _schema
  @schema
end
assign(context) click to toggle source
# File lib/interactor/schema/context.rb, line 20
def assign(context)
  filtered_context = context.to_h.select { |k, _| _schema.include?(k) }
  @table.merge!(filtered_context)
end
called!(interactor) click to toggle source
# File lib/interactor/schema/context.rb, line 39
def called!(interactor)
  _called << interactor
end
fail!(context = {}) click to toggle source
# File lib/interactor/schema/context.rb, line 33
def fail!(context = {})
  @table.merge!(context)
  @failure = true
  raise Interactor::Failure, self
end
failure?() click to toggle source
# File lib/interactor/schema/context.rb, line 29
def failure?
  @failure || false
end
rollback!() click to toggle source
# File lib/interactor/schema/context.rb, line 43
def rollback!
  return false if @rolled_back
  _called.reverse_each(&:rollback)
  @rolled_back = true
end
success?() click to toggle source
# File lib/interactor/schema/context.rb, line 25
def success?
  !failure?
end
to_h() click to toggle source
# File lib/interactor/schema/context.rb, line 57
def to_h
  @table
end

Private Instance Methods

define_schema_methods(schema) click to toggle source
# File lib/interactor/schema/context.rb, line 65
def define_schema_methods(schema)
  singleton_class.class_exec(schema) do |names|
    names.each do |name|
      define_method(name) do
        @table[name]
      end

      define_method("#{name}=") do |value|
        @table[name] = value
      end
    end
  end
end