ncore 3.3.2 → 3.4.1

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: e01099b869ce4be69bdcd101bfa51241372f3618074547f58b417140505468d1
4
- data.tar.gz: 762499cfa2d0527e628f54acf3c541850dfc430cc96b8ed45d6a7fe2e813dea4
3
+ metadata.gz: 4ad09fd322d7d12373a6546e276cf7d350c4425b273a864c705fc580c10a269c
4
+ data.tar.gz: 6fd560c150a0ef389ac40b989c71f8c092f5d88802a1d35851d2bff06ca44d8c
5
5
  SHA512:
6
- metadata.gz: bac55e24257dbfc697ff3c529aab817d851aa89e3439ccf74b79d4c199ec1877c5aadf93d1c50bb0e44bfed21c2ad29b5a411f13ff8282f4f9869db147639c30
7
- data.tar.gz: df661b5e833cbcb166d737515888de893e829984be45b760e3b6bcd99d1a0215f269fa6f1b971b3ec7542b0a40c91a9d22e606e6f70840c82a7f045dfc09ea0a
6
+ metadata.gz: c33362a9a2553c073d449aa58c97d850763e73b15a08fc34e5cf399c7c0043961ecb371fed29df917235fc482e62f8d1a3f944e05c36292253c65d5f5398d426
7
+ data.tar.gz: ebdd0b5a3cf136fbce954bbcda99cd2f0fd8cdeedb52347da76f5acf076aac57865d9bf77cc65fcfcb88a48f3390a9722bb9d8704ed24d20c84c7891f88e4a32
data/CHANGELOG.md CHANGED
@@ -1,3 +1,19 @@
1
+ #### 3.4.1
2
+
3
+ - Allow ActiveModel 7.0
4
+
5
+ #### 3.4.0
6
+
7
+ - Add SomeResource#wait_for and WaitTimeout
8
+
9
+ #### 3.3.4
10
+
11
+ - Fix :cache option on Ruby 3.0
12
+
13
+ #### 3.3.3
14
+
15
+ - Handle recursion in #inspect
16
+
1
17
  #### 3.3.2
2
18
 
3
19
  - Ruby 3.0 compatibility
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.2'
2
+ VERSION = '3.4.1'
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 self 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
@@ -18,9 +18,9 @@ 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 'activemodel', '>= 5.2', '< 6.2'
21
+ spec.add_dependency 'activemodel', '>= 5.2', '< 7.1'
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.2
4
+ version: 3.4.1
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-23 00:00:00.000000000 Z
11
+ date: 2021-10-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: '5.2'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '6.2'
22
+ version: '7.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: '5.2'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '6.2'
32
+ version: '7.1'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: excon
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -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