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
# File 'lib/scriptorium/contract.rb', line 6

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

#check_invariantsObject



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

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

#invariant(&block) ⇒ Object



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

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

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



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

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