Class: Lucid::Shopify::Response
- Inherits:
-
Object
- Object
- Lucid::Shopify::Response
show all
- Extended by:
- Dry::Initializer
- Includes:
- Enumerable
- Defined in:
- lib/lucid/shopify/response.rb
Defined Under Namespace
Classes: Error, GraphQLClientError
Constant Summary
collapse
- ClientError =
Class.new(Error)
- ServerError =
Class.new(Error)
- ShopError =
Class.new(Error)
Instance Method Summary
collapse
Instance Method Details
#[](key) ⇒ Object
236
237
238
|
# File 'lib/lucid/shopify/response.rb', line 236
def [](key)
data_hash[key]
end
|
#as_json ⇒ Hash
243
244
245
|
# File 'lib/lucid/shopify/response.rb', line 243
def as_json(*)
to_h
end
|
#assert! ⇒ self
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
# File 'lib/lucid/shopify/response.rb', line 115
def assert!
case status_code
when 402
raise ShopError.new(request, self), 'Shop is frozen, awaiting payment'
when 423
raise ShopError.new(request, self), 'Shop is locked'
when 400..499
raise ClientError.new(request, self)
when 500..599
raise ServerError.new(request, self)
end
if request.is_a?(GraphQLPostRequest) && (errors? || user_errors?)
raise GraphQLClientError.new(request, self)
end
self
end
|
#build_link ⇒ Hash
63
64
65
|
# File 'lib/lucid/shopify/response.rb', line 63
def build_link
Container[:parse_link_header].(['Link'])
end
|
#data ⇒ String
57
|
# File 'lib/lucid/shopify/response.rb', line 57
param :data
|
#data_hash ⇒ Hash
Also known as:
to_h
The parsed response body.
98
99
100
101
102
|
# File 'lib/lucid/shopify/response.rb', line 98
def data_hash
return {} unless json?
@data_hash ||= JSON.parse(data)
end
|
#each(&block) ⇒ Object
229
230
231
|
# File 'lib/lucid/shopify/response.rb', line 229
def each(&block)
data_hash.each(&block)
end
|
#error_message?(messages) ⇒ Boolean
224
225
226
|
# File 'lib/lucid/shopify/response.rb', line 224
def error_message?(messages)
messages.any? { |message| error_messages.include?(message) }
end
|
#error_messages ⇒ Array<String>
208
209
210
211
212
|
# File 'lib/lucid/shopify/response.rb', line 208
def error_messages
errors.map do |field, message|
"#{field} #{message}"
end
end
|
#errors ⇒ Hash
A string rather than an object is returned by Shopify in the case of, e.g., ‘Not found’. In this case, we return it under the ‘resource’ key.
181
182
183
184
185
186
187
188
189
190
191
|
# File 'lib/lucid/shopify/response.rb', line 181
def errors
errors = data_hash['errors']
case
when errors.nil?
{}
when errors.is_a?(String)
{'resource' => errors}
else
errors
end
end
|
#errors? ⇒ Boolean
146
147
148
|
# File 'lib/lucid/shopify/response.rb', line 146
def errors?
data_hash.has_key?('errors') end
|
#failure? ⇒ Boolean
141
142
143
|
# File 'lib/lucid/shopify/response.rb', line 141
def failure?
!success?
end
|
55
|
# File 'lib/lucid/shopify/response.rb', line 55
param :headers
|
#link ⇒ Hash
60
|
# File 'lib/lucid/shopify/response.rb', line 60
param :link, default: -> { build_link }
|
#next(client: Container[:client], limit: nil) ⇒ Response?
Request the next page of a GET request, if any.
72
73
74
75
76
77
78
79
|
# File 'lib/lucid/shopify/response.rb', line 72
def next(client: Container[:client], limit: nil)
return nil unless link[:next]
limit = limit ||
request.options.dig(:params, :limit) ||
link[:next][:limit]
client.get(request.credentials, request.path, {**link[:next], limit: limit})
end
|
#previous(client: Container[:client], limit: nil) ⇒ Response?
Request the previous page of a GET request, if any.
86
87
88
89
90
91
92
93
|
# File 'lib/lucid/shopify/response.rb', line 86
def previous(client: Container[:client], limit: nil)
return nil unless link[:previous]
limit = limit ||
request.options.dig(:params, :limit) ||
link[:previous][:limit]
client.get(request.credentials, request.path, {**link[:previous], limit: limit})
end
|
Returns the original request.
51
|
# File 'lib/lucid/shopify/response.rb', line 51
param :request
|
#status_code ⇒ Integer
53
|
# File 'lib/lucid/shopify/response.rb', line 53
param :status_code
|
#success? ⇒ Boolean
136
137
138
|
# File 'lib/lucid/shopify/response.rb', line 136
def success?
status_code.between?(200, 299)
end
|
#to_json(*args) ⇒ String
248
249
250
|
# File 'lib/lucid/shopify/response.rb', line 248
def to_json(*args)
as_json.to_json(*args)
end
|
#user_error_messages ⇒ Array<String>
215
216
217
218
219
|
# File 'lib/lucid/shopify/response.rb', line 215
def user_error_messages
user_errors.map do |field, message|
"#{message} [#{field}]"
end
end
|
#user_errors ⇒ Hash
196
197
198
199
200
201
202
203
204
205
|
# File 'lib/lucid/shopify/response.rb', line 196
def user_errors
errors = find_user_errors
return {} if errors.nil? || errors.empty?
errors.map do |error|
[
error['field'].join('.'),
error['message'],
]
end.to_h
end
|
#user_errors? ⇒ Boolean
153
154
155
156
157
|
# File 'lib/lucid/shopify/response.rb', line 153
def user_errors?
errors = find_user_errors
!errors.nil? && !errors.empty?
end
|