class WrapperBased::Casting

Public Class Methods

new() click to toggle source
# File lib/wrapper_based/casting.rb, line 5
def initialize
  include WrapperBased
end

Public Instance Methods

casts(role) { |value| ... } click to toggle source
# File lib/wrapper_based/casting.rb, line 9
def casts(role)
  role_writer = :"#{role}="

  define_method(:"with_#{role}!") do |value|
    send role_writer, yield(value)
    self
  end

  private_reader role
  private_writer role
end
casts_as(role, &recast) click to toggle source
# File lib/wrapper_based/casting.rb, line 21
def casts_as(role, &recast)
  role_player = :"@#{role}"

  define_method(:"with_#{role}!") do |actor|
    _components[role] = cast_as(role, actor, &recast)
    instance_variable_set(role_player, actor)
    self
  end

  private_reader role
  private_writer role
end

Private Instance Methods

private_reader(role) click to toggle source
# File lib/wrapper_based/casting.rb, line 36
def private_reader(role)
  define_method(role) do
    _components.fetch(role) { raise RoleValueMissing, "Role `#{role}' is missing.", caller }
  end

  private role
end
private_writer(role) click to toggle source
# File lib/wrapper_based/casting.rb, line 44
def private_writer(role)
  writer = :"#{role}="
  role_player = :"@#{role}"

  define_method(writer) do |value|
    _components[role] = value
    instance_variable_set(role_player, value)
  end

  private writer
end