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