Class: Mon::Contract::MonadContract

Inherits:
Contracts::CallableClass
  • Object
show all
Defined in:
lib/contracts/monad_contract.rb

Direct Known Subclasses

Future, Lazy, List, Maybe, Monad, React, Try

Instance Method Summary collapse

Constructor Details

#initialize(*vals) ⇒ MonadContract

Returns a new instance of MonadContract.



10
11
12
13
14
15
# File 'lib/contracts/monad_contract.rb', line 10

def initialize(*vals)
  if vals.length != 1
    throw ArgumentError.new("Incorrect usage of #{ self.class.name } contract, should be #{ self.class.name }[<contract>]")
  end
  @nested_contract = vals[0]
end

Instance Method Details

#nested_contractObject



17
18
19
# File 'lib/contracts/monad_contract.rb', line 17

def nested_contract
  @nested_contract
end

#to_sObject



30
31
32
# File 'lib/contracts/monad_contract.rb', line 30

def to_s
  "#{ self.class.name }[#{@nested_contract.to_s}]"
end

#valid?(val) ⇒ Boolean

Returns:

  • (Boolean)


21
22
23
# File 'lib/contracts/monad_contract.rb', line 21

def valid?(val)
  throw RuntimeError.new("MonadContract is abstract, #valid? must be overridden!")
end

#valid_nested_contract?(val) ⇒ Boolean

Returns:

  • (Boolean)


25
26
27
28
# File 'lib/contracts/monad_contract.rb', line 25

def valid_nested_contract?(val)
  nested_validator = Object::Contract::make_validator(@nested_contract)
  nested_validator.call(val)
end