class Rietveld::Context

The Context class supplies a simple DSL for creating roles and interaction between those roles

An example:

class MoneyTransferContext < Rietveld::Context
  role :source_account do
    def withdraw(amount)
      if balance >= amount
        decrease_balance(amount)
        amount
      else
        raise 'Insufficient funds'
      end
    end

    def transfer(amount)
      destination_account.deposit(withdraw(amount))
    end
  end

  role :destination_account do
    def deposit(amount)
      increase_balance(amount)
    end
  end

  def transfer(amount)
    source_account.transfer(amount)
  end
end

Public Class Methods

new(**args) click to toggle source
# File lib/rietveld/context.rb, line 59
def initialize(**args)
  roles.each do |role_name, role_klass|
    role_object = role_klass.new(args[role_name], self)
    instance_variable_set("@#{role_name}", role_object)
  end
end
role(role_name, &block) click to toggle source
# File lib/rietveld/context.rb, line 42
def role(role_name, &block)
  roles[role_name] = Class.new(Rietveld::Role, &block)

  define_method(role_name) do
    instance_variable_get("@#{role_name}")
  end
end
roles() click to toggle source
# File lib/rietveld/context.rb, line 38
def roles
  @roles ||= {}
end

Public Instance Methods

role?(name) click to toggle source
# File lib/rietveld/context.rb, line 55
def role?(name)
  roles.key?(name)
end
roles() click to toggle source
# File lib/rietveld/context.rb, line 51
def roles
  self.class.roles
end