Class: Assertion::Guard

Inherits:
Object
  • Object
show all
Extended by:
DSL::Attribute, DSL::Caller
Defined in:
lib/assertion/guard.rb

Overview

The base class for object guards

The guard defines a desired state for the object and checks if that state is valid.

Its ‘call` method either returns the guarded object, or (when its state is invalid) raises an exception

The class DSL also defines a ‘.[]` shortcut to initialize and call the guard for given object immediately.

Examples:

class AdultOnly < Assertion::Guard
  alias_method :user, :object

  def state
    IsAdult[user.attributes]
  end
end

jack = User.new name: "Jack", age: 10
john = User.new name: "John", age: 59

AdultOnly[jack]
# => #<Assertion::InvalidError @messages=["Jack is a child (age 10)"]>
AdultOnly[john]
# => #<User @name="John", @age=59>

Instance Attribute Summary collapse

Class Method Summary collapse

Methods included from DSL::Attribute

attribute

Methods included from DSL::Caller

[]

Instance Attribute Details

#objectObject (readonly)

Returns The object to be guarded.

Returns:

  • (Object)

    The object to be guarded



42
43
44
# File 'lib/assertion/guard.rb', line 42

def object
  @object
end

Class Method Details

.callObject

Validates the state of the [#object] and returns valid object back

Returns:

  • (Object)

    The object to be guarded

Raises:



64
65
66
67
# File 'lib/assertion/guard.rb', line 64

def call
  state.validate!
  object
end

.initialize(object) ⇒ Object



53
54
55
56
# File 'lib/assertion/guard.rb', line 53

def initialize(object)
  @object = object
  IceNine.deep_freeze(self)
end

.new(object) ⇒ Assertion::Guard

Creates the guard instance for the provided object

Parameters:

  • object (Object)

Returns:



# File 'lib/assertion/guard.rb', line 44