Class: CubanLinx::Payload

Inherits:
Object
  • Object
show all
Defined in:
lib/cuban_linx/payload.rb

Constant Summary collapse

InvalidStatusError =
Class.new(StandardError)
VALID_STATUSES =
%i[ok no_op error].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(status, messages = {}, errors = {}) ⇒ Payload

Returns a new instance of Payload.



8
9
10
11
12
# File 'lib/cuban_linx/payload.rb', line 8

def initialize(status, messages = {}, errors = {})
  @status = determine_and_validate(status)
  @messages = messages.merge({ warnings: Set.new }, &merge_block)
  @errors = errors
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, &block) ⇒ Object



60
61
62
63
64
# File 'lib/cuban_linx/payload.rb', line 60

def method_missing(method_name, *, &block)
  super unless respond_to_missing?(method_name)

  messages.fetch(method_name)
end

Instance Attribute Details

#errorsObject (readonly)

Returns the value of attribute errors.



70
71
72
# File 'lib/cuban_linx/payload.rb', line 70

def errors
  @errors
end

#messagesObject (readonly)

Returns the value of attribute messages.



70
71
72
# File 'lib/cuban_linx/payload.rb', line 70

def messages
  @messages
end

#statusObject (readonly)

Returns the value of attribute status.



70
71
72
# File 'lib/cuban_linx/payload.rb', line 70

def status
  @status
end

Instance Method Details

#add(new_messages) ⇒ Object



38
39
40
# File 'lib/cuban_linx/payload.rb', line 38

def add(new_messages)
  messages.merge(new_messages, &merge_block)
end

#add_errors(error_messages) ⇒ Object



42
43
44
# File 'lib/cuban_linx/payload.rb', line 42

def add_errors(error_messages)
  errors.merge(error_messages, &merge_block)
end

#add_warning(message) ⇒ Object



46
47
48
# File 'lib/cuban_linx/payload.rb', line 46

def add_warning(message)
  add(warnings: message)
end

#as_resultObject



34
35
36
# File 'lib/cuban_linx/payload.rb', line 34

def as_result
  [status, { messages: messages, errors: errors }]
end

#delete(key) ⇒ Object

Raises:

  • (KeyError)


54
55
56
57
58
# File 'lib/cuban_linx/payload.rb', line 54

def delete(key)
  raise KeyError unless messages.key?(key)

  messages.delete(key)
end

#error?Boolean

Returns:

  • (Boolean)


26
27
28
# File 'lib/cuban_linx/payload.rb', line 26

def error?
  status == :error
end

#fetch(*args, &block) ⇒ Object



14
15
16
17
18
19
20
# File 'lib/cuban_linx/payload.rb', line 14

def fetch(*args, &block)
  if block_given?
    messages.fetch(*args, &block)
  else
    messages.fetch(*args)
  end
end

#ok?Boolean

Returns:

  • (Boolean)


22
23
24
# File 'lib/cuban_linx/payload.rb', line 22

def ok?
  status == :ok
end

#respond_to_missing?(method_name, include_private = false) ⇒ Boolean

Returns:

  • (Boolean)


66
67
68
# File 'lib/cuban_linx/payload.rb', line 66

def respond_to_missing?(method_name, include_private = false)
  messages.key?(method_name) || super
end

#tupleObject



30
31
32
# File 'lib/cuban_linx/payload.rb', line 30

def tuple
  [status, messages, errors]
end

#warningsObject



50
51
52
# File 'lib/cuban_linx/payload.rb', line 50

def warnings
  messages.fetch(:warnings)
end