Module: Scriptorium::Contract

Included in:
API, BannerSVG, Post, Repo, Repo, Theme, Theme, View, Widget, Widget::FeaturedPosts, Widget::Links, Widget::ListWidget, Widget::Pages
Defined in:
lib/scriptorium/contract.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.enabled?Boolean

Returns:

  • (Boolean)


2
3
4
# File 'lib/scriptorium/contract.rb', line 2

def self.enabled?
  !ENV['DBC_DISABLED']
end

Instance Method Details

#assume(condition = nil, message = nil, &block) ⇒ Object



6
7
8
9
10
11
12
13
14
# File 'lib/scriptorium/contract.rb', line 6

def assume(condition = nil, message = nil, &block)
  return unless Scriptorium::Contract.enabled?
  if block_given?
    result = instance_eval(&block)
    raise "Precondition violated: #{message || 'block condition failed'}" unless result
  else
    raise "Precondition violated: #{message || condition}" unless condition
  end
end

#check_invariantsObject



30
31
32
33
# File 'lib/scriptorium/contract.rb', line 30

def check_invariants
  return unless Scriptorium::Contract.enabled?
  @invariants&.each { |invariant| raise "Invariant violated" unless instance_eval(&invariant) }
end

#invariant(&block) ⇒ Object



25
26
27
28
# File 'lib/scriptorium/contract.rb', line 25

def invariant(&block)
  @invariants ||= []
  @invariants << block
end

#verify(condition = nil, message = nil, &block) ⇒ Object



16
17
18
19
20
21
22
23
# File 'lib/scriptorium/contract.rb', line 16

def verify(condition = nil, message = nil, &block)
  return unless Scriptorium::Contract.enabled?
  if block_given?
    raise "Postcondition violated: #{message}" unless instance_eval(&block)
  else
    raise "Postcondition violated: #{message}" unless condition
  end
end