Class: BetterService::Result

Inherits:
Object
  • Object
show all
Defined in:
lib/better_service/result.rb

Overview

Result wrapper per le risposte dei service

Fornisce un modo standardizzato per restituire sia la risorsa che i metadata. BetterController può automaticamente unwrappare gli oggetti Result.

Examples:

Caso di successo

BetterService::Result.new(user, meta: { message: "Created" })

Caso di fallimento

BetterService::Result.new(user, meta: { success: false, message: "Validation failed" })

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(resource, meta: {}) ⇒ Result



20
21
22
23
# File 'lib/better_service/result.rb', line 20

def initialize(resource, meta: {})
  @resource = resource
  @meta     = meta.is_a?(Hash) ? meta.reverse_merge(success: true) : { success: true }
end

Instance Attribute Details

#metaObject (readonly)

Returns the value of attribute meta.



16
17
18
# File 'lib/better_service/result.rb', line 16

def meta
  @meta
end

#resourceObject (readonly)

Returns the value of attribute resource.



16
17
18
# File 'lib/better_service/result.rb', line 16

def resource
  @resource
end

Instance Method Details

#[](key) ⇒ Object?

Accesso Hash-like per compatibilità con BetterController



77
78
79
80
81
82
83
84
85
86
87
# File 'lib/better_service/result.rb', line 77

def [](key)
  case key
  when :resource then resource
  when :meta then meta
  when :success then success?
  when :message then message
  when :action then action
  else
    meta[key]
  end
end

#actionSymbol?



41
42
43
# File 'lib/better_service/result.rb', line 41

def action
  meta[:action]
end

#dig(*keys) ⇒ Object?

Accesso nested Hash-like (dig)



92
93
94
95
96
97
98
99
100
# File 'lib/better_service/result.rb', line 92

def dig(*keys)
  return nil if keys.empty?

  value = self[keys.first]
  return value if keys.size == 1
  return nil unless value.respond_to?(:dig)

  value.dig(*keys[1..])
end

#errorsActiveModel::Errors?



56
57
58
# File 'lib/better_service/result.rb', line 56

def errors
  resource.respond_to?(:errors) ? resource.errors : nil
end

#failure?Boolean



31
32
33
# File 'lib/better_service/result.rb', line 31

def failure?
  !success?
end

#full_messagesArray<String>?



51
52
53
# File 'lib/better_service/result.rb', line 51

def full_messages
  meta[:full_messages]
end

#key?(key) ⇒ Boolean Also known as: has_key?

Verifica esistenza chiave



105
106
107
# File 'lib/better_service/result.rb', line 105

def key?(key)
  i[resource meta success message action].include?(key) || meta.key?(key)
end

#messageString?



36
37
38
# File 'lib/better_service/result.rb', line 36

def message
  meta[:message]
end

#success?Boolean



26
27
28
# File 'lib/better_service/result.rb', line 26

def success?
  meta[:success] == true
end

#to_aryArray Also known as: deconstruct

Supporta destructuring: resource, meta = result



62
63
64
# File 'lib/better_service/result.rb', line 62

def to_ary
  [ resource, meta ]
end

#to_hHash



70
71
72
# File 'lib/better_service/result.rb', line 70

def to_h
  { resource: resource, meta: meta }
end

#validation_errorsHash?



46
47
48
# File 'lib/better_service/result.rb', line 46

def validation_errors
  meta[:validation_errors]
end