Class: Porch::Context

Inherits:
Hash
  • Object
show all
Includes:
GuardRail
Defined in:
lib/porch/context.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from GuardRail

#guard

Constructor Details

#initialize(context = {}, success = true) ⇒ Context

Returns a new instance of Context.



9
10
11
12
13
14
# File 'lib/porch/context.rb', line 9

def initialize(context={}, success=true)
  @message = nil
  @success = success
  @skip_remaining = false
  deep_duplicate(context)
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args, &block) ⇒ Object



42
43
44
45
# File 'lib/porch/context.rb', line 42

def method_missing(name, *args, &block)
  return fetch(name) if key?(name)
  super
end

Instance Attribute Details

#messageObject (readonly)

Returns the value of attribute message.



7
8
9
# File 'lib/porch/context.rb', line 7

def message
  @message
end

Instance Method Details

#deep_dupObject



16
17
18
# File 'lib/porch/context.rb', line 16

def deep_dup
  self.class.new(self, self.success?)
end

#fail!(message = "") ⇒ Object



20
21
22
23
24
# File 'lib/porch/context.rb', line 20

def fail!(message="")
  @message = message
  @success = false
  raise Porch::ContextStoppedError.new(self)
end

#failure?Boolean

Returns:

  • (Boolean)


26
27
28
# File 'lib/porch/context.rb', line 26

def failure?
  !success?
end

#guard_with_failure(&block) ⇒ Object



36
37
38
39
40
# File 'lib/porch/context.rb', line 36

def guard_with_failure(&block)
  result = guard &block
  fail!(HumanError.new(result.errors).message) if result.failure?
  result
end

#guard_with_skipping(&block) ⇒ Object



30
31
32
33
34
# File 'lib/porch/context.rb', line 30

def guard_with_skipping(&block)
  result = guard &block
  skip_remaining! if result.failure?
  result
end

#skip_next(&block) ⇒ Object



47
48
49
50
51
# File 'lib/porch/context.rb', line 47

def skip_next(&block)
  result = Guard.new(self).against(&block)
  raise Porch::ContextStoppedError.new(self) if result.failure?
  result
end

#skip_remaining!Object



57
58
59
60
# File 'lib/porch/context.rb', line 57

def skip_remaining!
  @skip_remaining = true
  raise Porch::ContextStoppedError.new(self)
end

#skip_remaining?Boolean

Returns:

  • (Boolean)


53
54
55
# File 'lib/porch/context.rb', line 53

def skip_remaining?
  !!@skip_remaining
end

#stop_processing?Boolean

Returns:

  • (Boolean)


66
67
68
# File 'lib/porch/context.rb', line 66

def stop_processing?
  failure? || skip_remaining?
end

#success?Boolean

Returns:

  • (Boolean)


62
63
64
# File 'lib/porch/context.rb', line 62

def success?
  @success
end