ncore 3.3.1 → 3.4.0

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
  SHA256:
3
- metadata.gz: 07e96bdc957fc537987137e4029761a2783ddc947de794cf95e90234fa9adda3
4
- data.tar.gz: eace234486547704df6dcdad2963fb4f2d7cab5de6effbdb7f47a9889fc73737
3
+ metadata.gz: c66806c855a5d52a9461e2bc48542dff6b5f9d7628c5bc3a850dbd3a99fdef11
4
+ data.tar.gz: eeee6c280d80ab935925e883c39d493b8d9dafa39c4d1c6019055781ecf6ce77
5
5
  SHA512:
6
- metadata.gz: 6cff9f32d5f2eb0c79bb15e05e1e60384e4a13ebb9eaf8dc750ada0cb4d49e093ffb0692ef6530f8be672bf53280816f725095496911c00453fefcc19d771309
7
- data.tar.gz: c4099d3db77792c8775e3ce1ba215203f896f03ca549401c70d3f95ee0bf4877eaa3b9a6404929b55f2d48dfafb6f562c64cf3f85b19f7cd3a9b26084b58fc86
6
+ metadata.gz: 9c9d20b236e6dd742ee5863a6bcfff5908993354cef3944ba1d17c930278400df01099ac957d40421bd63d2c7384cadfe8414126d14abe5471b97350d1f3e2b3
7
+ data.tar.gz: da4473efcb0e5796d9eedf65b0edf1e438c3e5a67a813f0d69f62770e95dbd0cf2e4473349a5e560d030e513c532f07d8d9fb815151c35ded21586547e5ee6de
data/CHANGELOG.md CHANGED
@@ -1,3 +1,19 @@
1
+ #### 3.4.0
2
+
3
+ - Add SomeResource#wait_for and WaitTimeout
4
+
5
+ #### 3.3.4
6
+
7
+ - Fix :cache option on Ruby 3.0
8
+
9
+ #### 3.3.3
10
+
11
+ - Handle recursion in #inspect
12
+
13
+ #### 3.3.2
14
+
15
+ - Ruby 3.0 compatibility
16
+
1
17
  #### 3.3.1
2
18
 
3
19
  - Fix module_parent when using ActiveSupport 5.2
@@ -160,10 +160,14 @@ module NCore
160
160
  end
161
161
 
162
162
 
163
- def load(data:, errors: nil, metadata: nil)
164
- self.metadata = metadata || {}.with_indifferent_access
165
- self.errors = parse_errors(errors)
166
- data.each do |k,v|
163
+ def load(args={})
164
+ raise ArgumentError, "Missing :data" unless args.key?(:data)
165
+ extra_keys = args.keys - %i(data errors metadata)
166
+ raise ArgumentError, "Unexpected keys: #{extra_keys.inpsect}" if extra_keys.any?
167
+
168
+ self.metadata = args[:metadata] || {}.with_indifferent_access
169
+ self.errors = parse_errors(args[:errors])
170
+ args[:data].each do |k,v|
167
171
  if respond_to? "#{k}="
168
172
  send "#{k}=", self.class.interpret_type(v, api_creds)
169
173
  else
data/lib/ncore/base.rb CHANGED
@@ -11,6 +11,7 @@ module NCore
11
11
  include Identity
12
12
  include Lifecycle
13
13
  include Util
14
+ include Wait
14
15
  end
15
16
 
16
17
  module ClassMethods
@@ -26,7 +26,7 @@ module NCore
26
26
  end
27
27
 
28
28
  if store && req[:method] == :get
29
- store.fetch request_cache_key(req.slice(:url, :headers)), cache_opts do
29
+ store.fetch request_cache_key(**req.slice(:url, :headers)), cache_opts do
30
30
  super
31
31
  end
32
32
  else
@@ -15,22 +15,41 @@ module NCore
15
15
  class RecordNotFound < Error ; end
16
16
  class UnsavedObjectError < Error ; end
17
17
 
18
- class RecordInvalid < Error
18
+ class RecordError < Error
19
19
  attr_reader :object
20
20
 
21
- def initialize(object)
21
+ def initialize(object, msg: nil)
22
22
  @object = object
23
- cl_name = object.class_name if object.respond_to?(:class_name)
24
- cl_name ||= object.class.class_name if object.class.respond_to?(:class_name)
25
- cl_name ||= object.name if object.respond_to?(:name)
26
- cl_name ||= object.class.name
27
- msg = "\#{cl_name} Invalid: \#{object.errors.to_a.join(' ')}"
23
+ msg ||= "Error on \#{class_name_for(object)}"
28
24
  super msg
29
25
  end
30
26
 
31
27
  def errors
32
28
  object&.errors
33
29
  end
30
+
31
+ private
32
+
33
+ def class_name_for(object)
34
+ n = object.class_name if object.respond_to?(:class_name)
35
+ n ||= object.class.class_name if object.class.respond_to?(:class_name)
36
+ n ||= object.name if object.respond_to?(:name)
37
+ n ||= object.class.name
38
+ end
39
+ end
40
+
41
+ class RecordInvalid < RecordError
42
+ def initialize(object)
43
+ msg = "\#{class_name_for(object)} Invalid: \#{object.errors.to_a.join(' ')}"
44
+ super object, msg: msg
45
+ end
46
+ end
47
+
48
+ class WaitTimeout < RecordError
49
+ def initialize(object)
50
+ msg = "Timeout waiting for condition on \#{class_name_for(object)}"
51
+ super object, msg: msg
52
+ end
34
53
  end
35
54
 
36
55
  class QueryError < Error
@@ -10,6 +10,7 @@ module NCore
10
10
  include Identity
11
11
  include Lifecycle
12
12
  include Util
13
+ include Wait
13
14
  end
14
15
 
15
16
  module ClassMethods
data/lib/ncore/util.rb CHANGED
@@ -62,7 +62,15 @@ module NCore
62
62
 
63
63
 
64
64
  def inspect
65
- "#<#{self.class}:0x#{'%016x'%self.object_id} id: #{id.inspect}, attribs: #{@attribs.except(:id).inspect}, metadata: #{metadata.inspect}>"
65
+ base = "#{self.class}:0x#{'%016x'%self.object_id} id: #{id.inspect}"
66
+ @@inspect_chain ||= []
67
+ return "#<#{base}, ...>" if @@inspect_chain.include? self
68
+ begin
69
+ @@inspect_chain.push self
70
+ "#<#{base}, attribs: #{@attribs.except(:id).inspect}, metadata: #{metadata.inspect}>"
71
+ ensure
72
+ @@inspect_chain.pop
73
+ end
66
74
  end
67
75
 
68
76
  end
data/lib/ncore/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module NCore
2
- VERSION = '3.3.1'
2
+ VERSION = '3.4.0'
3
3
  end
data/lib/ncore/wait.rb ADDED
@@ -0,0 +1,27 @@
1
+ module NCore
2
+ module Wait
3
+ extend ActiveSupport::Concern
4
+
5
+ private
6
+
7
+ def wait_for(seconds, &block)
8
+ return unless seconds
9
+ seconds = 45 if seconds == true
10
+ end_by = seconds.seconds.from_now
11
+ cnt = 0
12
+ until Time.current > end_by
13
+ wait = [end_by-Time.current, retry_in(cnt)].min
14
+ cnt += 1
15
+ sleep wait
16
+ reload
17
+ return true if block.call
18
+ end
19
+ raise self.class.module_parent::WaitTimeout, self
20
+ end
21
+
22
+ def retry_in(count)
23
+ (count**1.7).round + 1
24
+ end
25
+
26
+ end
27
+ end
data/lib/ncore.rb CHANGED
@@ -16,6 +16,7 @@ require 'pp'
16
16
  identity
17
17
  lifecycle
18
18
  util
19
+ wait
19
20
  base
20
21
  singleton_base
21
22
  ).each do |f|
data/ncore.gemspec CHANGED
@@ -21,6 +21,6 @@ Gem::Specification.new do |spec|
21
21
  spec.add_dependency 'activemodel', '>= 5.2', '< 6.2'
22
22
  spec.add_dependency 'excon', '~> 0.32'
23
23
 
24
- spec.add_development_dependency "bundler", "~> 1.3"
24
+ spec.add_development_dependency "bundler"
25
25
  spec.add_development_dependency "rake"
26
26
  end
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: 3.3.1
4
+ version: 3.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Notioneer Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-18 00:00:00.000000000 Z
11
+ date: 2021-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -48,16 +48,16 @@ dependencies:
48
48
  name: bundler
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - "~>"
51
+ - - ">="
52
52
  - !ruby/object:Gem::Version
53
- version: '1.3'
53
+ version: '0'
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
- - - "~>"
58
+ - - ">="
59
59
  - !ruby/object:Gem::Version
60
- version: '1.3'
60
+ version: '0'
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: rake
63
63
  requirement: !ruby/object:Gem::Requirement
@@ -121,6 +121,7 @@ files:
121
121
  - lib/ncore/singleton_base.rb
122
122
  - lib/ncore/util.rb
123
123
  - lib/ncore/version.rb
124
+ - lib/ncore/wait.rb
124
125
  - ncore.gemspec
125
126
  homepage: https://notioneer.com/
126
127
  licenses:
@@ -141,7 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
141
142
  - !ruby/object:Gem::Version
142
143
  version: '0'
143
144
  requirements: []
144
- rubygems_version: 3.0.9
145
+ rubygems_version: 3.2.15
145
146
  signing_key:
146
147
  specification_version: 4
147
148
  summary: NCore - Gem for building REST API clients