query-interface-client 1.3.2 → 1.3.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
  SHA1:
3
- metadata.gz: bd54e88c610df20cb66799bd6f6c319006c04ad4
4
- data.tar.gz: a8343318ddf04e18209350f160c485618cc12eb3
3
+ metadata.gz: 487a8eca13eb1048c6da5ada59a3433fbf064e7c
4
+ data.tar.gz: bcdd0bb35c96fe7eaf6002633d24bb59ebf0172e
5
5
  SHA512:
6
- metadata.gz: 00ab57aee8ed655b64752287a6c088500a5f86a94b0a64f4573c4f4e41d27c157f6c7935af24ba66a750477964fb730c9898f5f0a3438cfaed70f8e357a0af17
7
- data.tar.gz: 30a0e9f60fe92cf9d4ea08a313dd5ee4cbee714753cf47c823db40bf21116696f82c70c2dc168626f8e4a71981ee08f3f79b5479929d4204481c758ea47a290d
6
+ metadata.gz: fa864ca9695e4285c62ec28c362840ae49dd107b8fdf738874d7ed1c2f7b64457e75ee79fd04e6b657d32b5cc06acfad40d2192f1d056ef1d0bf1988e97bc0a1
7
+ data.tar.gz: 37eaed9f0a9264490af219e931ceb8570dbcdf10ef6c262bdc94a398873f876bdaf7cc78cf595e17a0f38f7488b25170d04eaf56a0095ed855f901a55dbda9b6
@@ -28,7 +28,8 @@ module QueryInterface
28
28
  def run_set_conversion(value)
29
29
  if self.array
30
30
  value ||= []
31
- value.map { |item| self.type.apply_set(item) }
31
+ value.map { |item| self.type.apply_set(item) unless item.blank? }
32
+ .compact
32
33
  else
33
34
  self.type.apply_set(value) unless value.nil?
34
35
  end
@@ -43,7 +44,7 @@ module QueryInterface
43
44
  base.include(ActiveModel::Validations::Callbacks)
44
45
  base.include(ActiveModel::Conversion)
45
46
  base.instance_variable_set(:@properties, {})
46
- base.send(:attr_accessor, :_property_values, :_additional_values, :_property_changes)
47
+ base.send(:attr_accessor, :_property_values, :_additional_values, :_original_values, :_destroyed)
47
48
  base.extend(ClassMethods)
48
49
  base.include(InstanceMethods)
49
50
  end
@@ -58,12 +59,7 @@ module QueryInterface
58
59
 
59
60
  unless property.primary || !property.update
60
61
  define_method "#{name}=".to_sym do |value|
61
- if self.get_value(name) != value
62
- self.property_changes << name unless self.property_changes.include?(name)
63
- self.set_value(name, value)
64
- else
65
- value
66
- end
62
+ self.set_value(name, value)
67
63
  end
68
64
  end
69
65
 
@@ -94,6 +90,7 @@ module QueryInterface
94
90
  def new_from_hash(data={})
95
91
  instance = self.new
96
92
  instance.assign_attributes(data)
93
+ instance._original_values = instance._property_values.deep_dup
97
94
  instance
98
95
  end
99
96
  end
@@ -105,6 +102,7 @@ module QueryInterface
105
102
  self.set_value(name, default)
106
103
  end
107
104
  self.assign_attributes(data, run_conversions: false)
105
+ self._original_values = self._property_values.deep_dup
108
106
  end
109
107
 
110
108
  def properties
@@ -112,7 +110,6 @@ module QueryInterface
112
110
  end
113
111
 
114
112
  def assign_attributes(data, options={})
115
- self.errors.clear()
116
113
  run_conversions = options.delete(:run_conversions) {true}
117
114
  data.each do |name, value|
118
115
  name = name.to_sym
@@ -122,8 +119,8 @@ module QueryInterface
122
119
  begin
123
120
  converted = property.run_set_conversion(value)
124
121
  rescue
125
- self.errors.add(name, "Type conversion failed")
126
122
  self.set_value(name, value)
123
+ self.errors.add(name, "Type conversion failed")
127
124
  else
128
125
  self.set_value(name, converted)
129
126
  end
@@ -147,20 +144,21 @@ module QueryInterface
147
144
 
148
145
  def save(additional_data={})
149
146
  return false unless (self.errors.empty? && self.valid?)
150
- if self.persisted? && self.dirty?
147
+ return true if self.persisted? && !self.dirty?
148
+
149
+ if self.persisted?
151
150
  result = self.put_raw(params: self.to_attributes(additional_data))
152
- return result[:response].success?
153
- elsif !self.persisted?
151
+ else
154
152
  result = self.class.post_raw(params: self.to_attributes(additional_data))
155
153
  if result[:response].success?
156
154
  self.assign_attributes(result[:parsed_data][:data])
157
- return true
158
- else
159
- return false
160
155
  end
161
- else
162
- return true
163
156
  end
157
+ assign_errors(result)
158
+ status = result[:response].success?
159
+ self._original_values = self._property_values.deep_dup if status
160
+
161
+ status
164
162
  end
165
163
 
166
164
  def update_attributes(attributes)
@@ -176,8 +174,18 @@ module QueryInterface
176
174
  self._additional_values ||= {}
177
175
  end
178
176
 
177
+ def destroyed?
178
+ self._destroyed ||= false
179
+ end
180
+
179
181
  def property_changes
180
- self._property_changes ||= []
182
+ self.properties.map do |name, property|
183
+ if self.get_value(name) != self._original_values[name]
184
+ [name, {original: self._original_values[name], new: self.get_value(name)}]
185
+ else
186
+ next
187
+ end
188
+ end.compact.to_h
181
189
  end
182
190
 
183
191
  def dirty?
@@ -185,6 +193,7 @@ module QueryInterface
185
193
  end
186
194
 
187
195
  def set_value(name, value)
196
+ self.errors.delete(name)
188
197
  self.property_values[name] = value
189
198
  end
190
199
 
@@ -209,8 +218,18 @@ module QueryInterface
209
218
 
210
219
  def destroy
211
220
  result = self.delete_raw()[:parsed_data]
212
- # TODO: handle errors and destroyed flag
221
+ assign_errors(result)
222
+ self._destroyed = !self.errors.any?
213
223
  end
224
+
225
+ private
226
+
227
+ def assign_errors(result)
228
+ (result[:errors] || {}).each do |name, values|
229
+ values.each { |value| self.errors.add(name, value) }
230
+ end
231
+ end
232
+
214
233
  end
215
234
  end
216
235
  end
@@ -41,7 +41,7 @@ module QueryInterface
41
41
  def member_path(path=nil, keys={})
42
42
  fragments = self.resource_path_fragments.map do |fragment|
43
43
  if fragment.is_a?(Symbol)
44
- if keys.has_key?(fragment)
44
+ if keys.has_key?(fragment)
45
45
  keys[fragment]
46
46
  else
47
47
  nil
@@ -67,7 +67,7 @@ module QueryInterface
67
67
  params[:_headers] = self.default_api.options[:headers]
68
68
  end
69
69
  result = self.default_api.request(params)
70
- {parsed_data: result[:parsed_data], response: result[:response]}
70
+ {parsed_data: result[:parsed_data], response: result[:response], errors: result[:errors]}
71
71
  end
72
72
 
73
73
  [:get, :post, :put, :delete].each do |method|
@@ -75,7 +75,7 @@ module QueryInterface
75
75
  params = options.delete(:params) { {} }
76
76
  keys = options.delete(:keys) { {} }
77
77
  path = options.delete(:path)
78
- self.raw_request(method, params, keys, path)
78
+ self.raw_request(method, params, keys, path)
79
79
  end
80
80
  end
81
81
  end
@@ -41,11 +41,15 @@ module QueryInterface
41
41
  end
42
42
 
43
43
  register_type :integer do
44
- set { |value| value.to_i }
44
+ set do |value|
45
+ value.blank? ? nil : value.to_i
46
+ end
45
47
  end
46
48
 
47
49
  register_type :float do
48
- set { |value| value.to_f }
50
+ set do |value|
51
+ value.blank? ? nil : value.to_f
52
+ end
49
53
  end
50
54
 
51
55
  register_type :ip do
@@ -69,7 +73,13 @@ module QueryInterface
69
73
  end
70
74
 
71
75
  register_type :boolean do
72
- set { |value| !!value }
76
+ set do |value|
77
+ if [true, 1, '1', 't', 'T', 'true', 'TRUE', 'on'].include?(value)
78
+ true
79
+ else
80
+ false
81
+ end
82
+ end
73
83
  end
74
84
 
75
85
  register_type :raw
@@ -1,7 +1,7 @@
1
1
  module QueryInterface
2
2
  module Client
3
3
 
4
- VERSION = '1.3.2'
4
+ VERSION = '1.3.3'
5
5
 
6
6
  end
7
7
  end
@@ -227,7 +227,7 @@ describe QueryInterface::Client::LazyQuery do
227
227
  query = subject.new(model)
228
228
  expect(query).to receive(:copy).and_return(query)
229
229
  objects = (1..10).to_a
230
- allow(model).to receive(:new).and_return(*objects)
230
+ allow(model).to receive(:new_from_hash).and_return(*objects)
231
231
  expect(query).to receive(:do_raw_query).and_return({parsed_data: {data: {objects: objects, total: 15}, errors: []}})
232
232
  result = query.paginate
233
233
  expect(query.transformations).to eq(self.transformations)
@@ -272,24 +272,6 @@ describe QueryInterface::Client::LazyQuery do
272
272
 
273
273
  end
274
274
 
275
- context "parsing" do
276
- let(:result_model) { double("result model") }
277
- let(:data) { double("data") }
278
-
279
- it "parses the data via result model if set" do
280
- query = subject.new(model)
281
- query.result_model = result_model
282
- expect(result_model).to receive(:parse).with(data)
283
- query.parse(data)
284
- end
285
-
286
- it "parses the data via model if no result model set" do
287
- query = subject.new(model)
288
- expect(model).to receive(:parse).with(data)
289
- query.parse(data)
290
- end
291
- end
292
-
293
275
  context "to_json" do
294
276
  let(:transformations) {[]}
295
277
  let(:result) { double("result") }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: query-interface-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.2
4
+ version: 1.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Kopecky <andreas.kopecky@radarservices.com>
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-10-20 00:00:00.000000000 Z
13
+ date: 2014-10-22 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rs_paginator