Class: Literal::Lift
- Inherits:
-
Object
- Object
- Literal::Lift
- Defined in:
- lib/literal/lift.rb
Instance Method Summary collapse
- #ensure_failure_case! ⇒ Object private
- #ensure_success_case! ⇒ Object private
- #failure(*types, &block) ⇒ Object
-
#initialize(*required_failure_cases, &block) ⇒ Lift
constructor
A new instance of Lift.
- #success(&block) ⇒ Object
- #with_failure(value) ⇒ Object
- #with_failure!(value) ⇒ Object
- #with_success(value) ⇒ Object
- #with_success!(value) ⇒ Object
Constructor Details
#initialize(*required_failure_cases, &block) ⇒ Lift
Returns a new instance of Lift.
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/literal/lift.rb', line 4 def initialize(*required_failure_cases, &block) @success_case = nil @failure_case = nil @required_failure_cases = required_failure_cases @handled_failure_cases = {} if block.arity == 0 instance_exec(&block) else yield(self) end keys = @handled_failure_cases.keys excess_cases = keys - @required_failure_cases missing_cases = @required_failure_cases - keys if excess_cases.any? raise ArgumentError, "Excess case(s): #{excess_cases.map(&:inspect).join(', ')}." end if missing_cases.any? raise ArgumentError, "Missing case(s): #{missing_cases.map(&:inspect).join(', ')}." end end |
Instance Method Details
#ensure_failure_case! ⇒ Object (private)
85 86 87 |
# File 'lib/literal/lift.rb', line 85 def ensure_failure_case! @failure_case ? true : raise(ArgumentError, "You need to define a failure case.") end |
#ensure_success_case! ⇒ Object (private)
81 82 83 |
# File 'lib/literal/lift.rb', line 81 def ensure_success_case! @success_case ? true : raise(ArgumentError, "You need to define a success case.") end |
#failure(*types, &block) ⇒ Object
69 70 71 72 73 74 75 76 77 |
# File 'lib/literal/lift.rb', line 69 def failure(*types, &block) if types.length == 0 @failure_case = block else types.each do |type| @handled_failure_cases[type] = block || proc { |it| it } end end end |
#success(&block) ⇒ Object
65 66 67 |
# File 'lib/literal/lift.rb', line 65 def success(&block) @success_case = block end |
#with_failure(value) ⇒ Object
43 44 45 46 47 48 49 50 51 |
# File 'lib/literal/lift.rb', line 43 def with_failure(value) ensure_success_case! and ensure_failure_case! @handled_failure_cases.each do |condition, block| return block.call(value) if condition === value end @failure_case.call(value) end |
#with_failure!(value) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/literal/lift.rb', line 53 def with_failure!(value) ensure_success_case! @handled_failure_cases.each do |condition, block| return block.call(value) if condition === value end return @failure_case.call(value) if @failure_case raise(value) end |
#with_success(value) ⇒ Object
31 32 33 34 35 |
# File 'lib/literal/lift.rb', line 31 def with_success(value) ensure_success_case! and ensure_failure_case! @success_case.call(value) end |
#with_success!(value) ⇒ Object
37 38 39 40 41 |
# File 'lib/literal/lift.rb', line 37 def with_success!(value) ensure_success_case! @success_case.call(value) end |