ncore 1.2.1 → 2.0.0

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: ec1bdffa679ca20445f4b48c4f7dd4cfcf6b2076
4
- data.tar.gz: 7403cc773dc32014c0b9717fcb8d8fac6c433eb3
3
+ metadata.gz: 48412aecbd99b296c719895d2bbd4337d509be4e
4
+ data.tar.gz: f0aae8fdd116df4efa17f2796622de842a2d972a
5
5
  SHA512:
6
- metadata.gz: 4d98693b19a89b725457faf351417e64d150964a8dfddb17d49535479f7b4410836dd47f6c90da96d2ea18b8073ab172ff9d5e7a2c022f2283caa6c55eb36318
7
- data.tar.gz: b187d445f6273acc6b777a0adad97dfaeb41541573c3566f3d7c4d78fcbfe3f3e519df4d90dc9a178676e3e13a33af05d43ef2947b7a75f1de46fdce84be5687
6
+ metadata.gz: 016a83badb0134a32217d94da2293d9c80f7de47d31cc8ce16a749d695943b6cd35cce140a16c123dc9053d784d0b35c800b2b13afe4faeaeff486c741677d7f
7
+ data.tar.gz: a71630c646664844ddbf54733978fea894a1aa79dfc915574e8acf88538e0dd1551a9d0052e3ae89df3fa851baf95e18a8f69d94085406f5331e84392fe1e70d
@@ -1,3 +1,22 @@
1
+ #### 2.0.0
2
+
3
+ - NOTE: This version includes breaking changes.
4
+ - Change params and credentials parsing
5
+ This changes the signatures for request() and all crud methods:
6
+ request(method, url, credentials, params, headers)
7
+ => request(method, url, params: {}, headers: {}, credentials: {})
8
+ all(), find(), create(), update(), delete(), etc
9
+ => pass credentials: {} instead of the final api_creds param
10
+ - find(nil) now raises RecordNotFound instead of returning nil
11
+ - Make <:assoc>_id=() writers private; shouldn't have been exposed to begin with.
12
+ - Treat 409 like 422 and add error messages instead of raising an exception.
13
+ - Add default error message for 409,422 if none received.
14
+ - Make MultiJson optional - use it if present, otherwise default to stdlib JSON.
15
+ If using MultiJson, requires v1.9+.
16
+ - Improve header handling for requests
17
+ - Add #update!(), #delete!()
18
+ - Add AccountInactive exception for 402 errors
19
+
1
20
  #### 1.2.1
2
21
 
3
22
  - Connection errors should raise NCore::ConnectionError
data/README.md CHANGED
@@ -3,8 +3,10 @@
3
3
  NCore is a Ruby gem designed to help build REST API clients. It is not an API
4
4
  client by itself, but provides several useful building blocks to build one.
5
5
 
6
- It relies on `rest-client` for HTTP handling, `multi_json` for JSON parsing
7
- (and supports only JSON), and `activesupport`.
6
+ It relies on `excon` for HTTP handling and `activesupport`.
7
+
8
+ If present, uses `multi_json`. Otherwise, the stdlib 'json' is used.
9
+ 'multi_json' with an accelerated json gem is recommended.
8
10
 
9
11
  See `example/` for the beginning of an actual api client.
10
12
 
@@ -9,59 +9,74 @@ module NCore
9
9
  def #{assoc}(params={})
10
10
  return [] unless id
11
11
  reload = params.delete :reload
12
- if params.empty?
12
+ params = parse_request_params(params).reverse_merge credentials: api_creds
13
+ cacheable = params.except(:credentials, :request).empty?
14
+ params.merge! #{key}: id
15
+ if cacheable
13
16
  # only cache unfiltered, default api call
14
- @attribs[:#{assoc}] = (!reload && @attribs[:#{assoc}]) || #{klass}.all({#{key}: id}, api_creds)
17
+ @attribs[:#{assoc}] = (!reload && @attribs[:#{assoc}]) || #{klass}.all(params)
15
18
  else
16
- #{klass}.all(params.merge(#{key}: id), api_creds)
19
+ #{klass}.all(params)
17
20
  end
18
21
  end
19
22
  M1
20
23
  class_eval <<-M2, __FILE__, __LINE__+1
21
24
  def find_#{assoc.singularize}(aid, params={})
22
25
  raise UnsavedObjectError unless id
23
- #{klass}.find(aid, {#{key}: id}.reverse_merge(params), api_creds)
26
+ params = parse_request_params(params).reverse_merge credentials: api_creds
27
+ params.merge! #{key}: id
28
+ #{klass}.find(aid, params)
24
29
  end
25
30
  M2
26
31
  # will always return the object; check .errors? or .valid? to see how it went
27
32
  class_eval <<-M3, __FILE__, __LINE__+1
28
33
  def create_#{assoc.singularize}(params={})
29
34
  raise UnsavedObjectError unless id
30
- #{klass}.create(params.merge(#{key}: id), api_creds)
35
+ params = parse_request_params(params).reverse_merge credentials: api_creds
36
+ params.merge! #{key}: id
37
+ #{klass}.create(params)
31
38
  end
32
39
  M3
33
40
  # will always return the object; check .errors? or .valid? to see how it went
34
41
  class_eval <<-M4, __FILE__, __LINE__+1
35
42
  def update_#{assoc.singularize}(aid, params={})
36
- obj = find_#{assoc.singularize}(aid)
37
- obj.update(params)
38
- obj
43
+ raise UnsavedObjectError unless id
44
+ params = parse_request_params(params).reverse_merge credentials: api_creds
45
+ params.merge! #{key}: id
46
+ #{klass}.update(aid, params)
39
47
  end
40
48
  M4
41
49
  class_eval <<-M5, __FILE__, __LINE__+1
42
50
  def create_#{assoc.singularize}!(params={})
43
51
  raise UnsavedObjectError unless id
44
- #{klass}.create!(params.merge(#{key}: id), api_creds)
52
+ params = parse_request_params(params).reverse_merge credentials: api_creds
53
+ params.merge! #{key}: id
54
+ #{klass}.create!(params)
45
55
  end
46
56
  M5
47
57
  class_eval <<-M6, __FILE__, __LINE__+1
48
58
  def update_#{assoc.singularize}!(aid, params={})
49
- obj = find_#{assoc.singularize}(aid)
50
- obj.save!(params)
59
+ raise UnsavedObjectError unless id
60
+ params = parse_request_params(params).reverse_merge credentials: api_creds
61
+ params.merge! #{key}: id
62
+ #{klass}.update!(aid, params)
51
63
  end
52
64
  M6
53
65
  # will always return the object; check .errors? or .valid? to see how it went
54
66
  class_eval <<-M7, __FILE__, __LINE__+1
55
67
  def delete_#{assoc.singularize}(aid, params={})
56
- obj = find_#{assoc.singularize}(aid)
57
- obj.delete(params)
58
- obj
68
+ raise UnsavedObjectError unless id
69
+ params = parse_request_params(params).reverse_merge credentials: api_creds
70
+ params.merge! #{key}: id
71
+ #{klass}.delete(aid, params)
59
72
  end
60
73
  M7
61
74
  class_eval <<-M8, __FILE__, __LINE__+1
62
75
  def delete_#{assoc.singularize}!(aid, params={})
63
76
  raise UnsavedObjectError unless id
64
- #{klass}.delete!(aid, {#{key}: id}.reverse_merge(params), api_creds)
77
+ params = parse_request_params(params).reverse_merge credentials: api_creds
78
+ params.merge! #{key}: id
79
+ #{klass}.delete!(aid, params)
65
80
  end
66
81
  M8
67
82
  end
@@ -73,11 +88,12 @@ module NCore
73
88
  attr :#{assoc}_id
74
89
  def #{assoc}(params={})
75
90
  return nil unless #{assoc}_id
76
- if params.empty?
91
+ params = parse_request_params(params).reverse_merge credentials: api_creds
92
+ if params.except(:credentials, :request).empty?
77
93
  # only cache unfiltered, default api call
78
- @attribs[:#{assoc}] ||= #{klass}.find(#{assoc}_id, {}, api_creds)
94
+ @attribs[:#{assoc}] ||= #{klass}.find(#{assoc}_id, params)
79
95
  else
80
- #{klass}.find(#{assoc}_id, params, api_creds)
96
+ #{klass}.find(#{assoc}_id, params)
81
97
  end
82
98
  end
83
99
  M1
@@ -86,6 +102,7 @@ module NCore
86
102
  @attribs[:#{assoc}] = nil unless @attribs[:#{assoc}_id] == v
87
103
  @attribs[:#{assoc}_id] = v
88
104
  end
105
+ private :#{assoc}_id=
89
106
  M2
90
107
  end
91
108
 
@@ -51,6 +51,28 @@ module NCore
51
51
  AD
52
52
  end
53
53
  end
54
+
55
+ def parse_request_params(params={}, opts={})
56
+ params = params.with_indifferent_access
57
+ req = params.delete(:request)
58
+ creds = params.delete(:credentials)
59
+ if opts[:json_root]
60
+ if params.key?(opts[:json_root])
61
+ o = params
62
+ else
63
+ o = {opts[:json_root] => params}.with_indifferent_access
64
+ end
65
+ else
66
+ o = params
67
+ end
68
+ o[:request] = req if req
69
+ o[:credentials] = creds if creds
70
+ o
71
+ end
72
+ end
73
+
74
+ def parse_request_params(params, opts={})
75
+ self.class.parse_request_params(params, opts)
54
76
  end
55
77
 
56
78
 
@@ -1,10 +1,19 @@
1
+ require 'json'
2
+
1
3
  module NCore
2
4
  module Client
3
5
  extend ActiveSupport::Concern
4
6
 
5
7
  module ClassMethods
6
8
 
7
- def request(method, url, request_credentials, params={}, headers={})
9
+ # opts - {params: {}, headers: {}, credentials: {}}
10
+ # unknown keys assumed to be :params if :params is missing
11
+ def request(method, url, opts={})
12
+ opts = opts.with_indifferent_access
13
+ request_credentials = opts.delete 'credentials'
14
+ headers = opts.delete('headers') || {}
15
+ params = opts['params'] || opts
16
+
8
17
  request_credentials ||= retrieve_credentials
9
18
  request_credentials = parse_credentials(request_credentials)
10
19
 
@@ -21,7 +30,11 @@ module NCore
21
30
  path += qs
22
31
  payload = nil
23
32
  else
24
- payload = MultiJson.encode params
33
+ if defined? MultiJson
34
+ payload = MultiJson.encode params
35
+ else
36
+ payload = JSON.generate params
37
+ end
25
38
  end
26
39
 
27
40
  rest_opts = {
@@ -65,8 +78,8 @@ module NCore
65
78
  h = {}
66
79
  [default_headers, auth_headers(req_credentials), headers].each do |set|
67
80
  set.each do |k,v|
68
- k = k.to_s.titlecase.gsub(/ /,'-')
69
- h[k] = v
81
+ k = k.to_s.tr('_','-').gsub(%r{(^|-)\w}){$&.upcase}
82
+ h[k] = v.respond_to?(:call) ? v.call : v
70
83
  end
71
84
  end
72
85
  h
@@ -199,11 +212,13 @@ module NCore
199
212
  case response.status
200
213
  when 401 # API auth valid; API call itself is an auth-related call and failed
201
214
  raise parent::AuthenticationFailed
215
+ when 402
216
+ raise parent::AccountInactive, "Account inactive; login to portal to check account status."
202
217
  when 403 # API auth failed or insufficient permissions
203
218
  raise parent::AccessDenied, "Access denied; check your API credentials and permissions."
204
219
  when 404
205
220
  raise parent::RecordNotFound
206
- when 422
221
+ when 409, 422
207
222
  # pass through
208
223
  when 429
209
224
  raise parent::RateLimited
@@ -216,16 +231,24 @@ module NCore
216
231
  end
217
232
 
218
233
  def parse_response(response)
219
- if [202, 204].include?(response.status) && response.body.blank?
220
- return {data: {}, errors: {}, metadata: {}}
221
- end
222
-
223
- begin
224
- json = MultiJson.load(response.body||'', symbolize_keys: false) || {}
225
- json = json.with_indifferent_access
226
- rescue MultiJson::DecodeError, MultiJson::LoadError
227
- raise parent::Error, "Unable to parse API response; HTTP status: #{response.status}; body: #{response.body.inspect}"
234
+ if response.body.blank?
235
+ json = {}
236
+ else
237
+ if defined? MultiJson
238
+ begin
239
+ json = MultiJson.load(response.body, symbolize_keys: false) || {}
240
+ rescue MultiJson::ParseError
241
+ raise parent::Error, "Unable to parse API response; HTTP status: #{response.status}; body: #{response.body.inspect}"
242
+ end
243
+ else
244
+ begin
245
+ json = JSON.parse(response.body, symbolize_names: false) || {}
246
+ rescue JSON::ParserError
247
+ raise parent::Error, "Unable to parse API response; HTTP status: #{response.status}; body: #{response.body.inspect}"
248
+ end
249
+ end
228
250
  end
251
+ json = json.with_indifferent_access
229
252
  errors = json.delete(:errors) || []
230
253
  if errors.any?
231
254
  errors = errors.values.flatten
@@ -239,6 +262,9 @@ module NCore
239
262
  metadata = nil
240
263
  end
241
264
  end
265
+ if [409, 422].include?(response.status) && errors.empty?
266
+ errors.push 'Validation error'
267
+ end
242
268
  {data: json, errors: errors, metadata: metadata}
243
269
  end
244
270
 
@@ -283,11 +309,15 @@ DBG
283
309
 
284
310
  def debug_response(response)
285
311
  return unless logger.debug?
286
- json = MultiJson.load(response.body||'', symbolize_keys: false) rescue response.body
312
+ if defined? MultiJson
313
+ json = MultiJson.load(response.body||'', symbolize_keys: false) rescue response.body
314
+ else
315
+ json = JSON.parse(response.body||'', symbolize_names: false) rescue response.body
316
+ end
287
317
  logger << <<-DBG
288
318
  RESPONSE:
289
319
  #{response.headers['Status']} | #{response.headers['Content-Type']} | #{response.body.size} bytes
290
- #{response.headers.except('Status', 'Connection', 'Content-Type', 'X-Request-Id').map{|h,d| "#{h}: #{d}"}.join("\n ")}
320
+ #{response.headers.except('Status', 'Connection', 'Content-Type').map{|h,d| "#{h}: #{d}"}.join("\n ")}
291
321
  #{json.pretty_inspect.split("\n").join("\n ")}
292
322
  #{'-=- '*18}
293
323
  DBG
@@ -7,6 +7,7 @@ module NCore
7
7
  class Error < StandardError ; end
8
8
 
9
9
  class AccessDenied < Error ; end
10
+ class AccountInactive < Error ; end
10
11
  class AuthenticationFailed < Error ; end
11
12
  class ConnectionError < Error ; end
12
13
  class RateLimited < Error ; end
@@ -3,8 +3,9 @@ module NCore
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  module ClassMethods
6
- def all(params={}, api_creds=nil)
7
- parsed, creds = request(:get, url, api_creds, params)
6
+ def all(params={})
7
+ params = parse_request_params(params)
8
+ parsed, creds = request(:get, url, params)
8
9
  if parsed[:errors].any?
9
10
  raise parent::QueryError, parsed[:errors]
10
11
  end
@@ -20,9 +21,9 @@ module NCore
20
21
  end
21
22
  end
22
23
 
23
- def first(params={}, api_creds=nil)
24
+ def first(params={})
24
25
  params = params.with_indifferent_access.merge(max_results: 1)
25
- all(params, api_creds).first
26
+ all(params).first
26
27
  end
27
28
  end
28
29
 
@@ -3,8 +3,9 @@ module NCore
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  module ClassMethods
6
- def build(params={}, api_creds=nil)
7
- parsed, creds = request(:get, url+'/new', api_creds, params)
6
+ def build(params={})
7
+ params = parse_request_params(params)
8
+ parsed, creds = request(:get, url+'/new', params)
8
9
  if parsed[:errors].any?
9
10
  raise parent::QueryError, parsed[:errors]
10
11
  end
@@ -3,8 +3,9 @@ module NCore
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  module ClassMethods
6
- def count(params={}, api_creds=nil)
7
- parsed, _ = request(:get, "#{url}/count", api_creds, params)
6
+ def count(params={})
7
+ params = parse_request_params(params)
8
+ parsed, _ = request(:get, "#{url}/count", params)
8
9
  parsed[:data][:count]
9
10
  end
10
11
  end
@@ -3,28 +3,29 @@ module NCore
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  module ClassMethods
6
- def create!(attribs={}, api_creds=nil)
7
- obj = create(attribs, api_creds)
8
- if obj.errors.any?
6
+ def create!(attribs={})
7
+ obj = create(attribs)
8
+ if obj.errors?
9
9
  raise parent::RecordInvalid, obj
10
10
  end
11
11
  obj
12
12
  end
13
13
 
14
14
  # always returns a new object; check .errors? or .valid? to see how it went
15
- def create(attribs={}, api_creds=nil)
16
- params = {json_root => attribs}
17
- parsed, creds = request(:post, url, api_creds, params)
18
- new(attribs, creds).send(:load, parsed)
15
+ def create(attribs={})
16
+ params = parse_request_params(attribs)
17
+ obj = new({}, params[:credentials])
18
+ obj.send :create, params
19
+ obj
19
20
  end
20
21
  end
21
22
 
22
23
  private
23
24
 
24
25
  def create(attribs={})
25
- params = {json_root => attribs}
26
- parsed, @api_creds = request(:post, self.class.url, api_creds, params)
27
- load(data: attribs) if parsed[:errors].any?
26
+ params = parse_request_params(attribs, json_root: json_root).reverse_merge credentials: api_creds
27
+ parsed, @api_creds = request(:post, self.class.url, params)
28
+ load(data: params[json_root]) if parsed[:errors].any?
28
29
  load(parsed)
29
30
  errors.empty? ? self : false
30
31
  end
@@ -3,24 +3,34 @@ module NCore
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  module ClassMethods
6
- def delete!(id, params={}, api_creds=nil)
7
- obj = new({id: id}, api_creds)
8
- obj.delete(params) || raise(parent::RecordInvalid, obj)
6
+ def delete!(id, params={})
7
+ obj = delete(id, attribs)
8
+ if obj.errors?
9
+ raise parent::RecordInvalid, obj
10
+ end
11
+ obj
9
12
  end
10
13
 
11
14
  # always returns a new object; check .errors? or .valid? to see how it went
12
- def delete(id, params={}, api_creds=nil)
13
- obj = new({id: id}, api_creds)
15
+ def delete(id, params={})
16
+ raise(parent::RecordNotFound, "Cannot delete id=nil") if id.blank?
17
+ params = parse_request_params(params)
18
+ obj = new({id: id}, params[:credentials])
14
19
  obj.delete(params)
15
20
  obj
16
21
  end
17
22
  end
18
23
 
19
24
  def delete(params={})
20
- parsed, @api_creds = request(:delete, url, api_creds, params)
25
+ params = parse_request_params(params).reverse_merge credentials: api_creds
26
+ parsed, @api_creds = request(:delete, url, params)
21
27
  load(parsed)
22
28
  errors.empty? ? self : false
23
29
  end
24
30
 
31
+ def delete!(params={})
32
+ delete(params) || raise(self.class.parent::RecordInvalid, self)
33
+ end
34
+
25
35
  end
26
36
  end
@@ -3,17 +3,23 @@ module NCore
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  module ClassMethods
6
- def delete(params={}, api_creds=nil)
7
- obj = new({}, api_creds)
6
+ def delete(params={})
7
+ params = parse_request_params(params)
8
+ obj = new({}, params[:credentials])
8
9
  obj.delete(params) || raise(parent::RecordInvalid, obj)
9
10
  end
10
11
  end
11
12
 
12
13
  def delete(params={})
13
- parsed, @api_creds = request(:delete, url, api_creds, params)
14
+ params = parse_request_params(params).reverse_merge credentials: api_creds
15
+ parsed, @api_creds = request(:delete, url, params)
14
16
  load(parsed)
15
17
  errors.empty? ? self : false
16
18
  end
17
19
 
20
+ def delete!(params={})
21
+ delete(params) || raise(self.class.parent::RecordInvalid, self)
22
+ end
23
+
18
24
  end
19
25
  end
@@ -3,13 +3,15 @@ module NCore
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  module ClassMethods
6
- def find(id, params={}, api_creds=nil)
7
- o = new({id: id}, api_creds)
6
+ def find(id, params={})
7
+ raise(parent::RecordNotFound, "Cannot find id=nil") if id.blank?
8
+ params = parse_request_params(params)
9
+ o = new({id: id}, params[:credentials])
8
10
  o.reload(params)
9
11
  end
10
12
 
11
- def retrieve(id, params={}, api_creds=nil)
12
- find id, params, api_creds
13
+ def retrieve(id, params={})
14
+ find id, params
13
15
  rescue parent::RecordNotFound
14
16
  false
15
17
  end
@@ -17,7 +19,8 @@ module NCore
17
19
 
18
20
  def reload(find_params={})
19
21
  return if id.blank?
20
- parsed, @api_creds = request(:get, url, api_creds, find_params)
22
+ params = parse_request_params(find_params).reverse_merge credentials: api_creds
23
+ parsed, @api_creds = request(:get, url, params)
21
24
  @attribs = {}.with_indifferent_access
22
25
  load(parsed)
23
26
  end
@@ -3,16 +3,17 @@ module NCore
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  module ClassMethods
6
- def find(params={}, api_creds=nil)
7
- parsed, creds = request(:get, url, api_creds, params)
6
+ def find(params={})
7
+ params = parse_request_params(params)
8
+ parsed, creds = request(:get, url, params)
8
9
  if parsed[:errors].any?
9
10
  raise parent::QueryError, parsed[:errors]
10
11
  end
11
12
  new(parsed, creds)
12
13
  end
13
14
 
14
- def retrieve(params={}, api_creds=nil)
15
- find params, api_creds
15
+ def retrieve(params={})
16
+ find params
16
17
  rescue parent::RecordNotFound
17
18
  false
18
19
  end
@@ -25,7 +26,8 @@ module NCore
25
26
  private
26
27
 
27
28
  def reload(find_params={})
28
- parsed, @api_creds = request(:get, url, api_creds, find_params)
29
+ params = parse_request_params(find_params).reverse_merge credentials: api_creds
30
+ parsed, @api_creds = request(:get, url, params)
29
31
  @attribs = {}.with_indifferent_access
30
32
  load(parsed)
31
33
  end
@@ -3,29 +3,35 @@ module NCore
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  module ClassMethods
6
- def update!(id, attribs, api_creds=nil)
7
- obj = new({id: id}, api_creds)
8
- obj.save!(attribs)
6
+ def update!(id, attribs)
7
+ obj = update(id, attribs)
8
+ if obj.errors?
9
+ raise parent::RecordInvalid, obj
10
+ end
11
+ obj
9
12
  end
10
13
 
11
14
  # always returns a new object; check .errors? or .valid? to see how it went
12
- def update(id, attribs, api_creds=nil)
13
- obj = new({id: id}, api_creds)
14
- obj.save(attribs)
15
+ def update(id, attribs)
16
+ raise(parent::RecordNotFound, "Cannot update id=nil") if id.blank?
17
+ params = parse_request_params(attribs)
18
+ obj = new({id: id}, params[:credentials])
19
+ obj.update params
15
20
  obj
16
21
  end
17
22
  end
18
23
 
19
-
20
- private
21
-
22
24
  def update(attribs={})
23
- params = {json_root => attribs}
24
- parsed, @api_creds = request(:put, url, api_creds, params)
25
- load(data: attribs) if parsed[:errors].any?
25
+ params = parse_request_params(attribs, json_root: json_root).reverse_merge credentials: api_creds
26
+ parsed, @api_creds = request(:put, url, params)
27
+ load(data: params[json_root]) if parsed[:errors].any?
26
28
  load(parsed)
27
29
  errors.empty? ? self : false
28
30
  end
29
31
 
32
+ def update!(params={})
33
+ update(params) || raise(self.class.parent::RecordInvalid, self)
34
+ end
35
+
30
36
  end
31
37
  end
@@ -1,3 +1,3 @@
1
1
  module NCore
2
- VERSION = '1.2.1'
2
+ VERSION = '2.0.0'
3
3
  end
@@ -6,7 +6,7 @@ require 'ncore/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "ncore"
8
8
  spec.version = NCore::VERSION
9
- spec.authors = ["thomas morgan"]
9
+ spec.authors = ["Notioneer Team"]
10
10
  spec.email = ["hello@notioneer.com"]
11
11
  spec.description = %q{NCore - Ruby gem useful for building REST API clients}
12
12
  spec.summary = %q{NCore - Gem for building REST API clients}
@@ -18,9 +18,8 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency 'activesupport', '>= 3.2', '< 5.0'
21
+ spec.add_dependency 'activesupport', '>= 3.2', '< 5.1'
22
22
  spec.add_dependency 'excon', '~> 0.32'
23
- spec.add_dependency 'multi_json', '~> 1.7'
24
23
 
25
24
  spec.add_development_dependency "bundler", "~> 1.3"
26
25
  spec.add_development_dependency "rake"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ncore
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
- - thomas morgan
7
+ - Notioneer Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-22 00:00:00.000000000 Z
11
+ date: 2016-02-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: '3.2'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '5.0'
22
+ version: '5.1'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: '3.2'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '5.0'
32
+ version: '5.1'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: excon
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -44,20 +44,6 @@ dependencies:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
46
  version: '0.32'
47
- - !ruby/object:Gem::Dependency
48
- name: multi_json
49
- requirement: !ruby/object:Gem::Requirement
50
- requirements:
51
- - - "~>"
52
- - !ruby/object:Gem::Version
53
- version: '1.7'
54
- type: :runtime
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - "~>"
59
- - !ruby/object:Gem::Version
60
- version: '1.7'
61
47
  - !ruby/object:Gem::Dependency
62
48
  name: bundler
63
49
  requirement: !ruby/object:Gem::Requirement
@@ -152,7 +138,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
152
138
  version: '0'
153
139
  requirements: []
154
140
  rubyforge_project:
155
- rubygems_version: 2.4.3
141
+ rubygems_version: 2.4.8
156
142
  signing_key:
157
143
  specification_version: 4
158
144
  summary: NCore - Gem for building REST API clients