query-interface-client 1.3.1 → 1.3.2

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: 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