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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2dbe0c45c2f130042f4882ad7d488e4de383d23c02eb80149d868a39474daa8f
4
- data.tar.gz: 938ab9d040c489e4a31692b7ef768ed05a6632759e131695e6cde6d7400cd508
3
+ metadata.gz: 5d5b9a0b6a02e5392f62d84bdaf6f963a2d44849e3ab85796f00bb020d6a2d64
4
+ data.tar.gz: 97266ac6c8f294605b2675220ad132e9a9dd4da4ea85fe86c4e18df0db3d2cf4
5
5
  SHA512:
6
- metadata.gz: 5c92027518f591bf86d59ab85bded78de04980b2d1eefb36851f7156356f1d298ff61501625174c207eb3ab24312dce64130f9107e94c2f01f256590c3fd98eb
7
- data.tar.gz: 627ace71f67b2a410d0c363c7177b8f1f3a262495102652a87c146a4ab4d1fa5a1afb0bfa4fdb693023e02042a5db1cb1fb066e2e6290a799912c49ebaf04182
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
- @prepared_args = response[:_meta][:path_params]
27
- @meta ||= response[:_meta]
26
+ @meta ||= response[:_meta] || {}
28
27
 
29
28
  else
30
29
  @response = response
31
30
  @params = response.response
32
- @prepared_args = response.meta[:path_params]
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(*@meta[:path_params])
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[:path_params]
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: res_val[:_meta][:resolved],
216
- response: res_val[:_meta][:resolved] ? res_val : nil,
217
- meta: res_val[:_meta]
222
+ resolved: meta[:resolved],
223
+ response: meta[:resolved] ? res_val : nil,
224
+ meta: meta
218
225
  )
219
226
  end
220
227
 
@@ -1,6 +1,6 @@
1
1
  module HaveAPI
2
2
  module Client
3
3
  PROTOCOL_VERSION = '2.0'.freeze
4
- VERSION = '0.28.2'.freeze
4
+ VERSION = '0.28.3'.freeze
5
5
  end
6
6
  end
@@ -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')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: haveapi-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.28.2
4
+ version: 0.28.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jakub Skokan