query-interface-client 1.3.1 → 1.3.2

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: 2fa79e05e41ffe7dbb942f8a1be9cd4f22fd3987
4
- data.tar.gz: 0499bcd0f94c128e47e0494a6d9cf76ec7d56d33
3
+ metadata.gz: bd54e88c610df20cb66799bd6f6c319006c04ad4
4
+ data.tar.gz: a8343318ddf04e18209350f160c485618cc12eb3
5
5
  SHA512:
6
- metadata.gz: 9258e75aa86fe482716fdaf521c4636ed57308a9d42c6d37d33e82eedf05bf775876a44d019833014f80232171e607575c9919f59bc972d4fefcdcd340760768
7
- data.tar.gz: c01f0e4925fdd13eb7f6d05a5d99b73f531e2e576db44aa49e4b6739a6744135538c793a96db24724c2c0e098efc6ae1bd4d4fa9067a1bca648bdd5f0095af14
6
+ metadata.gz: 00ab57aee8ed655b64752287a6c088500a5f86a94b0a64f4573c4f4e41d27c157f6c7935af24ba66a750477964fb730c9898f5f0a3438cfaed70f8e357a0af17
7
+ data.tar.gz: 30a0e9f60fe92cf9d4ea08a313dd5ee4cbee714753cf47c823db40bf21116696f82c70c2dc168626f8e4a71981ee08f3f79b5479929d4204481c758ea47a290d
@@ -16,7 +16,7 @@ module QueryInterface
16
16
  end
17
17
 
18
18
  def instantiate(data)
19
- (self.result_model ? self.result_model.new(data) : self.model.new(data))
19
+ (self.result_model ? self.result_model.new_from_hash(data) : self.model.new_from_hash(data))
20
20
  end
21
21
 
22
22
  def instantiate_collection(parsed_data)
@@ -124,7 +124,11 @@ module QueryInterface
124
124
  if parsed_data[:data].is_a?(Array)
125
125
  self.instantiate_collection(parsed_data)
126
126
  else
127
- self.instantiate(parsed_data[:data])
127
+ unless parsed_data[:data].empty?
128
+ self.instantiate(parsed_data[:data])
129
+ else
130
+ nil
131
+ end
128
132
  end
129
133
  end
130
134
 
@@ -10,10 +10,10 @@ module QueryInterface
10
10
  raise "Unknown Type #{type}"
11
11
  end
12
12
  self.type = conversion
13
- self.primary = options.delete(:primary) {false}
14
- self.update = options.delete(:update) {true}
15
- self.array = options.delete(:array) {false}
16
- self.default = options.delete(:default) {nil}
13
+ self.primary = options.delete(:primary) { false }
14
+ self.update = options.delete(:update) { true }
15
+ self.array = options.delete(:array) { false }
16
+ self.default = options.delete(:default) { lambda { nil } }
17
17
  end
18
18
 
19
19
  def run_get_conversion(value)
@@ -82,41 +82,58 @@ module QueryInterface
82
82
 
83
83
  def new_collection(collection)
84
84
  collection[:data].map do |data|
85
- self.new(data)
85
+ self.new_from_hash(data)
86
86
  end
87
87
  end
88
88
 
89
89
  def get(path, params={})
90
90
  data = self.get_raw(path: path, params: params)[:parsed_data][:data]
91
- self.new(data)
91
+ self.new_from_hash(data)
92
+ end
93
+
94
+ def new_from_hash(data={})
95
+ instance = self.new
96
+ instance.assign_attributes(data)
97
+ instance
92
98
  end
93
99
  end
94
100
 
95
101
  module InstanceMethods
96
102
  def initialize(data={})
97
- self.set_data(data)
103
+ self.properties.each do |name, property|
104
+ default = self.instance_exec(&property.default)
105
+ self.set_value(name, default)
106
+ end
107
+ self.assign_attributes(data, run_conversions: false)
98
108
  end
99
109
 
100
110
  def properties
101
111
  self.class.instance_variable_get(:@properties)
102
112
  end
103
113
 
104
- def set_data(data)
114
+ def assign_attributes(data, options={})
115
+ self.errors.clear()
116
+ run_conversions = options.delete(:run_conversions) {true}
105
117
  data.each do |name, value|
106
118
  name = name.to_sym
107
119
  if self.properties.has_key?(name)
108
120
  property = self.properties[name]
109
- self.set_value(name, property.run_set_conversion(value))
121
+ if run_conversions
122
+ begin
123
+ converted = property.run_set_conversion(value)
124
+ rescue
125
+ self.errors.add(name, "Type conversion failed")
126
+ self.set_value(name, value)
127
+ else
128
+ self.set_value(name, converted)
129
+ end
130
+ else
131
+ self.set_value(name, value)
132
+ end
110
133
  else
111
134
  self.additional_values[name] = value
112
135
  end
113
136
  end
114
- # Initialize missing fields to whatever their default is
115
- (self.properties.keys - data.keys.map(&:to_sym)).each do |name|
116
- property = self.properties[name]
117
- default = property.default
118
- self.set_value(name, default.is_a?(Enumerable) ? default.dup : default)
119
- end
120
137
  end
121
138
 
122
139
  def to_attributes(additional_data={})
@@ -129,13 +146,14 @@ module QueryInterface
129
146
  end
130
147
 
131
148
  def save(additional_data={})
149
+ return false unless (self.errors.empty? && self.valid?)
132
150
  if self.persisted? && self.dirty?
133
151
  result = self.put_raw(params: self.to_attributes(additional_data))
134
152
  return result[:response].success?
135
153
  elsif !self.persisted?
136
154
  result = self.class.post_raw(params: self.to_attributes(additional_data))
137
155
  if result[:response].success?
138
- self.set_data(result[:parsed_data][:data])
156
+ self.assign_attributes(result[:parsed_data][:data])
139
157
  return true
140
158
  else
141
159
  return false
@@ -150,15 +168,6 @@ module QueryInterface
150
168
  self.save
151
169
  end
152
170
 
153
- def assign_attributes(attributes)
154
- attributes.each do |name, value|
155
- method = "#{name}=".to_sym
156
- if self.respond_to?(method)
157
- self.send(method, value)
158
- end
159
- end
160
- end
161
-
162
171
  def property_values
163
172
  self._property_values ||= {}
164
173
  end
@@ -1,7 +1,7 @@
1
1
  module QueryInterface
2
2
  module Client
3
3
 
4
- VERSION = '1.3.1'
4
+ VERSION = '1.3.2'
5
5
 
6
6
  end
7
7
  end
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.1
4
+ version: 1.3.2
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-15 00:00:00.000000000 Z
13
+ date: 2014-10-20 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rs_paginator