haveapi-client 0.28.2 → 0.28.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/haveapi/client/resource_instance.rb +16 -9
- data/lib/haveapi/client/version.rb +1 -1
- data/spec/integration/client_spec.rb +17 -0
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5d5b9a0b6a02e5392f62d84bdaf6f963a2d44849e3ab85796f00bb020d6a2d64
|
|
4
|
+
data.tar.gz: 97266ac6c8f294605b2675220ad132e9a9dd4da4ea85fe86c4e18df0db3d2cf4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0f541b66f23eb38fd7b25fd0940263beadfe394459706ab4e50c6015f0d742e72de193670355cc91608868638e5e0114b0858056959901d52c11f44fa2a00ba2
|
|
7
|
+
data.tar.gz: 733ce6a8d34dbfa4db2055eb1b6007a1e79aa6efc2ee3cb0a0609ca4beca5a35f8e9183409659ed3f9d14b4d16e3f57e277d820809576f0739fcf04ce3be75db
|
|
@@ -23,16 +23,15 @@ module HaveAPI::Client
|
|
|
23
23
|
if response
|
|
24
24
|
if response.is_a?(Hash)
|
|
25
25
|
@params = response
|
|
26
|
-
@
|
|
27
|
-
@meta ||= response[:_meta]
|
|
26
|
+
@meta ||= response[:_meta] || {}
|
|
28
27
|
|
|
29
28
|
else
|
|
30
29
|
@response = response
|
|
31
30
|
@params = response.response
|
|
32
|
-
@
|
|
33
|
-
@meta ||= response.meta
|
|
31
|
+
@meta ||= response.meta || {}
|
|
34
32
|
end
|
|
35
33
|
|
|
34
|
+
@prepared_args = path_params_from(@meta)
|
|
36
35
|
setup_from_clone(resource)
|
|
37
36
|
define_attributes
|
|
38
37
|
end
|
|
@@ -79,14 +78,16 @@ module HaveAPI::Client
|
|
|
79
78
|
def resolve
|
|
80
79
|
return self if @resolved
|
|
81
80
|
|
|
82
|
-
@action.provide_args(
|
|
81
|
+
@action.provide_args(*path_params_from(@meta))
|
|
82
|
+
raise ArgumentError, 'one or more object ids missing' if @action.unresolved_args?
|
|
83
|
+
|
|
83
84
|
@response = Response.new(@action, @action.execute({}))
|
|
84
85
|
@params = @response.response
|
|
85
86
|
|
|
86
87
|
setup_from_clone(@resource)
|
|
87
88
|
define_attributes
|
|
88
89
|
|
|
89
|
-
@prepared_args = @response.meta
|
|
90
|
+
@prepared_args = path_params_from(@response.meta)
|
|
90
91
|
@resolved = true
|
|
91
92
|
self
|
|
92
93
|
end
|
|
@@ -167,6 +168,10 @@ module HaveAPI::Client
|
|
|
167
168
|
define_singleton_method(name, &block) unless respond_to?(name)
|
|
168
169
|
end
|
|
169
170
|
|
|
171
|
+
def path_params_from(meta)
|
|
172
|
+
meta&.fetch(:path_params, []) || []
|
|
173
|
+
end
|
|
174
|
+
|
|
170
175
|
# Define nil references to resource attributes.
|
|
171
176
|
# Used only for not-persistent objects.
|
|
172
177
|
def define_implicit_attributes
|
|
@@ -207,14 +212,16 @@ module HaveAPI::Client
|
|
|
207
212
|
end
|
|
208
213
|
|
|
209
214
|
# FIXME: read _meta namespace from description
|
|
215
|
+
meta = res_val[:_meta] || {}
|
|
216
|
+
|
|
210
217
|
ResourceInstance.new(
|
|
211
218
|
@client,
|
|
212
219
|
@api,
|
|
213
220
|
tmp,
|
|
214
221
|
action: tmp.actions[:show],
|
|
215
|
-
resolved:
|
|
216
|
-
response:
|
|
217
|
-
meta:
|
|
222
|
+
resolved: meta[:resolved],
|
|
223
|
+
response: meta[:resolved] ? res_val : nil,
|
|
224
|
+
meta: meta
|
|
218
225
|
)
|
|
219
226
|
end
|
|
220
227
|
|
|
@@ -58,6 +58,23 @@ RSpec.describe HaveAPI::Client::Client do
|
|
|
58
58
|
expect(task.label).to eq('Do it')
|
|
59
59
|
end
|
|
60
60
|
|
|
61
|
+
it 'handles project responses without path params' do
|
|
62
|
+
client = described_class.new(base_url)
|
|
63
|
+
client.authenticate(:basic, user: 'user', password: 'pass')
|
|
64
|
+
|
|
65
|
+
project = client.project.list.first
|
|
66
|
+
|
|
67
|
+
public_project = client.project.public_show(project.id)
|
|
68
|
+
expect(public_project.name).to eq('Alpha')
|
|
69
|
+
|
|
70
|
+
public_projects = client.project.public_list
|
|
71
|
+
expect(public_projects.size).to be >= 2
|
|
72
|
+
expect(public_projects.first.name).to eq('Alpha')
|
|
73
|
+
|
|
74
|
+
expect { public_projects.first.find }
|
|
75
|
+
.to raise_error(ArgumentError, /object ids missing/)
|
|
76
|
+
end
|
|
77
|
+
|
|
61
78
|
it 'raises validation error on missing required params' do
|
|
62
79
|
client = described_class.new(base_url)
|
|
63
80
|
client.authenticate(:basic, user: 'user', password: 'pass')
|