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