query-interface-client 1.3.2 → 1.3.3

Sign up to get free protection for your applications and to get access to all the features.
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