Class: FunctionalLightService::Context

Inherits:
Hash
  • Object
show all
Includes:
Prelude::Option, Prelude::Result
Defined in:
lib/functional-light-service/context.rb,
lib/functional-light-service/context/key_verifier.rb

Overview

rubocop:disable ClassLength

Defined Under Namespace

Classes: ExpectedKeyVerifier, KeyVerifier, PromisedKeyVerifier, ReservedKeysVerifier

Constant Summary

Constants included from Prelude::Option

Prelude::Option::None, Prelude::Option::Option

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Prelude::Result

#Failure, #Success, #try!

Methods included from Prelude::Option

#None, #Option, #Some

Constructor Details

#initialize(context = {}, outcome = Success(:message => '', :error => nil)) ⇒ Context

Returns a new instance of Context.



8
9
10
11
12
# File 'lib/functional-light-service/context.rb', line 8

def initialize(context = {}, outcome = Success(:message => '', :error => nil))
  @outcome = outcome
  @skip_remaining = false
  context.to_hash.each { |k, v| self[k] = v }
end

Instance Attribute Details

#current_actionObject

Returns the value of attribute current_action.



6
7
8
# File 'lib/functional-light-service/context.rb', line 6

def current_action
  @current_action
end

#outcomeObject

Returns the value of attribute outcome.



6
7
8
# File 'lib/functional-light-service/context.rb', line 6

def outcome
  @outcome
end

Class Method Details

.make(context = {}) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
# File 'lib/functional-light-service/context.rb', line 14

def self.make(context = {})
  unless context.is_a?(Hash) || context.is_a?(FunctionalLightService::Context)
    msg = 'Argument must be Hash or FunctionalLightService::Context'
    raise ArgumentError, msg
  end

  context = new(context) unless context.is_a?(Context)

  context.assign_aliases(context.delete(:_aliases)) if context[:_aliases]
  context
end

Instance Method Details

#[](key) ⇒ Object



122
123
124
125
# File 'lib/functional-light-service/context.rb', line 122

def [](key)
  key = aliases.key(key) || key
  return super(key)
end

#add_to_context(values) ⇒ Object



26
27
28
# File 'lib/functional-light-service/context.rb', line 26

def add_to_context(values)
  merge! values
end

#aliasesObject



118
119
120
# File 'lib/functional-light-service/context.rb', line 118

def aliases
  @aliases ||= {}
end

#assign_aliases(aliases) ⇒ Object



110
111
112
113
114
115
116
# File 'lib/functional-light-service/context.rb', line 110

def assign_aliases(aliases)
  @aliases = aliases

  aliases.each_pair do |key, key_alias|
    self[key_alias] = self[key]
  end
end

#define_accessor_methods_for_keys(keys) ⇒ Object



99
100
101
102
103
104
105
106
107
108
# File 'lib/functional-light-service/context.rb', line 99

def define_accessor_methods_for_keys(keys)
  return if keys.nil?

  keys.each do |key|
    next if respond_to?(key.to_sym)

    define_singleton_method(key.to_s) { fetch(key) }
    define_singleton_method("#{key}=") { |value| self[key] = value }
  end
end

#error_codeObject



51
52
53
# File 'lib/functional-light-service/context.rb', line 51

def error_code
  @outcome.value.dig(:error)
end

#fail!(message = nil, options_or_error_code = {}) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/functional-light-service/context.rb', line 62

def fail!(message = nil, options_or_error_code = {})
  options_or_error_code ||= {}

  if options_or_error_code.is_a?(Hash)
    error_code = options_or_error_code.delete(:error_code)
    options = options_or_error_code
  else
    error_code = options_or_error_code
    options = {}
  end

  message = Configuration.localization_adapter.failure(message,
                                                       current_action,
                                                       options)

  @outcome = Failure(:message => message, :error => error_code)
end

#fail_and_return!(*args) ⇒ Object



80
81
82
83
# File 'lib/functional-light-service/context.rb', line 80

def fail_and_return!(*args)
  fail!(*args)
  throw(:jump_when_failed)
end

#fail_with_rollback!(message = nil, error_code = nil) ⇒ Object



85
86
87
88
# File 'lib/functional-light-service/context.rb', line 85

def fail_with_rollback!(message = nil, error_code = nil)
  fail!(message, error_code)
  raise FailWithRollbackError
end

#failure?Boolean

Returns:

  • (Boolean)


34
35
36
# File 'lib/functional-light-service/context.rb', line 34

def failure?
  @outcome.failure?
end

#fetch(key, default = nil, &blk) ⇒ Object



127
128
129
130
131
132
133
# File 'lib/functional-light-service/context.rb', line 127

def fetch(key, default = nil, &blk)
  self[key] ||= if block_given?
                  super(key, &blk)
                else
                  super
                end
end

#inspectObject



135
136
137
138
139
140
141
142
143
# File 'lib/functional-light-service/context.rb', line 135

def inspect
  "#{self.class}(#{self}, " \
  + "success: #{success?}, " \
  + "message: #{check_nil(message)}, " \
  + "error_code: #{check_nil(error_code)}, " \
  + "skip_remaining: #{@skip_remaining}, " \
  + "aliases: #{@aliases}" \
  + ")"
end

#messageObject



47
48
49
# File 'lib/functional-light-service/context.rb', line 47

def message
  @outcome.value.dig(:message)
end

#reset_skip_remaining!Object



42
43
44
45
# File 'lib/functional-light-service/context.rb', line 42

def reset_skip_remaining!
  @outcome = Success(:message => '', :error => nil)
  @skip_remaining = false
end

#skip_remaining!(message = nil) ⇒ Object



90
91
92
93
# File 'lib/functional-light-service/context.rb', line 90

def skip_remaining!(message = nil)
  @outcome = Success(:message => message)
  @skip_remaining = true
end

#skip_remaining?Boolean

Returns:

  • (Boolean)


38
39
40
# File 'lib/functional-light-service/context.rb', line 38

def skip_remaining?
  @skip_remaining
end

#stop_processing?Boolean

Returns:

  • (Boolean)


95
96
97
# File 'lib/functional-light-service/context.rb', line 95

def stop_processing?
  failure? || skip_remaining?
end

#succeed!(message = nil, options = {}) ⇒ Object



55
56
57
58
59
60
# File 'lib/functional-light-service/context.rb', line 55

def succeed!(message = nil, options = {})
  message = Configuration.localization_adapter.success(message,
                                                       current_action,
                                                       options)
  @outcome = Success(:message => message)
end

#success?Boolean

Returns:

  • (Boolean)


30
31
32
# File 'lib/functional-light-service/context.rb', line 30

def success?
  @outcome.success?
end