ncore 3.8.0 → 3.9.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
  SHA256:
3
- metadata.gz: 5c93d49d552806a8439994a201a54ae1550be771c5ba3e855131317267492efb
4
- data.tar.gz: a20b77b20173293816a3a2f753561b3cfc0a962644db0696f4a2f5d7dedf024d
3
+ metadata.gz: b9823810517052d731b6290cf93b9bd942f25164aed98940860be7c37b7514b5
4
+ data.tar.gz: 851945716245d8308d5b14a7fc17afb4207ea25f4dff049779ab8e9f2d1a5a3e
5
5
  SHA512:
6
- metadata.gz: 9ef44487b9cc0def0b5dc9be8f34bac4a13ae3fd1226f5e2d87d1a02cc111d52565a142a92e7619493b9d236eb68837832b9eee62e6fdae86b0bc2c0cf64d44f
7
- data.tar.gz: 9337020d9f962ef43852d859981fa2f67a198fd51f6ad3ced23ecbc4aeafea6ff4b67b651abf41e0868ede636490383dd4e7746c2607ed0bf4b4f01c9c03ab0f
6
+ metadata.gz: 02103dd4eb28433b6311192c37f727e31708a2d5b4ccd2c46888d13a661f6916c906dbd90ad42e03f00592ab6c267fd46d560c69636070a6ee7ddf50c4f4c037
7
+ data.tar.gz: ee2d1391f5042222d448aebb3ef96f521eb535d3d0e1d23f6bb715bd2cf836f64d6d8a72527d95efd0af05a2881556111000acb5e65082fa8289f605a90ed51d
data/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ #### 3.9.0
2
+
3
+ - Add inspection filter for attributes
4
+ - Fix generation of query params when values are Hashes
5
+
6
+ #### 3.8.1
7
+
8
+ - Add option to disable some_attr?() definition
9
+
1
10
  #### 3.8.0
2
11
 
3
12
  - Add has_one association helper
@@ -11,25 +11,22 @@ module NCore
11
11
  # attr(:name, ...)
12
12
  # adds: obj.name => raw json type
13
13
  # obj.name? => bool
14
- def attr(*attrs)
14
+ def attr(*attrs, predicate: true)
15
15
  attrs.each do |attr|
16
16
  check_existing_method(attr)
17
17
  class_eval <<-AR, __FILE__, __LINE__+1
18
18
  def #{attr}
19
19
  self[:#{attr}]
20
20
  end
21
-
22
- def #{attr}?
23
- !! self[:#{attr}]
24
- end
25
21
  AR
22
+ attr_boolean :"#{attr}?" if predicate
26
23
  end
27
24
  end
28
25
 
29
26
  # attr_datetime(:updated_at, ...)
30
27
  # adds: obj.updated_at => Time, or raw json type if not parseable
31
28
  # obj.updated_at? => bool
32
- def attr_datetime(*attrs)
29
+ def attr_datetime(*attrs, predicate: true)
33
30
  attrs.each do |attr|
34
31
  check_existing_method(attr)
35
32
  class_eval <<-AD, __FILE__, __LINE__+1
@@ -45,18 +42,15 @@ module NCore
45
42
  rescue ArgumentError, TypeError
46
43
  self[:#{attr}]
47
44
  end
48
-
49
- def #{attr}?
50
- !! self[:#{attr}]
51
- end
52
45
  AD
46
+ attr_boolean :"#{attr}?" if predicate
53
47
  end
54
48
  end
55
49
 
56
50
  # attr_decimal(:amount, ...)
57
51
  # adds: obj.amount => BigMoney if String, else raw json type
58
52
  # obj.amount? => bool
59
- def attr_decimal(*attrs)
53
+ def attr_decimal(*attrs, predicate: true)
60
54
  attrs.each do |attr|
61
55
  check_existing_method(attr)
62
56
  class_eval <<-AD, __FILE__, __LINE__+1
@@ -68,11 +62,22 @@ module NCore
68
62
  self[:#{attr}]
69
63
  end
70
64
  end
65
+ AD
66
+ attr_boolean :"#{attr}?" if predicate
67
+ end
68
+ end
71
69
 
72
- def #{attr}?
73
- !! self[:#{attr}]
70
+ # attr_boolean(:active, :active?, ...)
71
+ # adds: obj.active
72
+ # adds: obj.active? - in attrs hash, this looks for the key :active, not :active?
73
+ def attr_boolean(*attrs)
74
+ attrs.each do |attr|
75
+ check_existing_method(attr)
76
+ class_eval <<-AB, __FILE__, __LINE__+1
77
+ def #{attr}
78
+ !! self[:#{attr.to_s.sub(/\?$/,'')}]
74
79
  end
75
- AD
80
+ AB
76
81
  end
77
82
  end
78
83
 
data/lib/ncore/base.rb CHANGED
@@ -1,17 +1,20 @@
1
1
  module NCore
2
2
  module Base
3
3
  extend ActiveSupport::Concern
4
-
4
+
5
5
  included do
6
6
  extend Associations
7
7
  include ActiveModel
8
8
  include Attributes
9
9
  include Client
10
10
  include Client::Cache
11
+ include FilterAttributes
11
12
  include Identity
12
13
  include Lifecycle
13
14
  include Util
14
15
  include Wait
16
+
17
+ self.filter_attributes = []
15
18
  end
16
19
 
17
20
  module ClassMethods
data/lib/ncore/client.rb CHANGED
@@ -88,17 +88,26 @@ module NCore
88
88
 
89
89
  def build_query_string(params)
90
90
  if params.any?
91
- query_string = params.sort.map do |k,v|
92
- if v.is_a?(Array)
91
+ query_string = params.sort.filter_map do |k,v|
92
+ case v
93
+ when Array
93
94
  if v.empty?
94
- "#{k.to_s}[]="
95
+ "#{CGI::escape(k.to_s)}[]"
95
96
  else
96
97
  v.sort.map do |v2|
97
- "#{k.to_s}[]=#{CGI::escape(v2.to_s)}"
98
+ "#{CGI::escape(k.to_s)}[]=#{CGI::escape(v2.to_s)}"
99
+ end.join('&')
100
+ end
101
+ when Hash
102
+ if v.empty?
103
+ nil
104
+ else
105
+ v.sort.map do |k2, v2|
106
+ "#{CGI::escape(k.to_s)}[#{k2}]=#{CGI::escape(v2.to_s)}"
98
107
  end.join('&')
99
108
  end
100
109
  else
101
- "#{k.to_s}=#{CGI::escape(v.to_s)}"
110
+ "#{CGI::escape(k.to_s)}=#{CGI::escape(v.to_s)}"
102
111
  end
103
112
  end.join('&')
104
113
  "?#{query_string}"
@@ -0,0 +1,43 @@
1
+ module NCore
2
+ module FilterAttributes
3
+ extend ActiveSupport::Concern
4
+
5
+ module ClassMethods
6
+
7
+ def filter_attributes
8
+ @filter_attributes || superclass.filter_attributes
9
+ end
10
+
11
+ def filter_attributes=(filter_attributes)
12
+ @inspection_filter = nil
13
+ @filter_attributes = filter_attributes
14
+ end
15
+
16
+ def inspection_filter
17
+ if @filter_attributes
18
+ @inspection_filter ||= ActiveSupport::ParameterFilter.new @filter_attributes
19
+ else
20
+ superclass.inspection_filter
21
+ end
22
+ end
23
+
24
+ end
25
+
26
+
27
+ def inspect
28
+ base = "#{self.class}:0x#{'%016x'%self.object_id} id: #{id.inspect}"
29
+ inspect_chain = Thread.current[:inspect_chain] ||= []
30
+ return "#<#{base}, ...>" if inspect_chain.include? self
31
+ begin
32
+ inspect_chain.push self
33
+ attribs = @attribs.except(:id).each.with_object({}) do |(k,v),h|
34
+ h[k] = v.nil? ? nil : self.class.inspection_filter.filter_param(k,v)
35
+ end
36
+ "#<#{base}, attribs: #{attribs.inspect}, metadata: #{metadata.inspect}>"
37
+ ensure
38
+ inspect_chain.pop
39
+ end
40
+ end
41
+
42
+ end
43
+ end
@@ -7,10 +7,13 @@ module NCore
7
7
  include ActiveModel
8
8
  include Attributes
9
9
  include Client
10
+ include FilterAttributes
10
11
  include Identity
11
12
  include Lifecycle
12
13
  include Util
13
14
  include Wait
15
+
16
+ self.filter_attributes = []
14
17
  end
15
18
 
16
19
  module ClassMethods
data/lib/ncore/util.rb CHANGED
@@ -63,18 +63,5 @@ module NCore
63
63
 
64
64
  delegate :factory, to: :class
65
65
 
66
-
67
- def inspect
68
- base = "#{self.class}:0x#{'%016x'%self.object_id} id: #{id.inspect}"
69
- @@inspect_chain ||= []
70
- return "#<#{base}, ...>" if @@inspect_chain.include? self
71
- begin
72
- @@inspect_chain.push self
73
- "#<#{base}, attribs: #{@attribs.except(:id).inspect}, metadata: #{metadata.inspect}>"
74
- ensure
75
- @@inspect_chain.pop
76
- end
77
- end
78
-
79
66
  end
80
67
  end
data/lib/ncore/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module NCore
2
- VERSION = '3.8.0'
2
+ VERSION = '3.9.0'
3
3
  end
data/lib/ncore.rb CHANGED
@@ -15,6 +15,7 @@ require 'pp'
15
15
  exceptions
16
16
  identity
17
17
  lifecycle
18
+ filter_attributes
18
19
  util
19
20
  wait
20
21
  base
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.8.0
4
+ version: 3.9.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: 2024-01-31 00:00:00.000000000 Z
11
+ date: 2024-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -101,6 +101,7 @@ files:
101
101
  - lib/ncore/collection.rb
102
102
  - lib/ncore/configuration.rb
103
103
  - lib/ncore/exceptions.rb
104
+ - lib/ncore/filter_attributes.rb
104
105
  - lib/ncore/identity.rb
105
106
  - lib/ncore/lifecycle.rb
106
107
  - lib/ncore/methods/all.rb
@@ -142,7 +143,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
142
143
  - !ruby/object:Gem::Version
143
144
  version: '0'
144
145
  requirements: []
145
- rubygems_version: 3.4.10
146
+ rubygems_version: 3.5.3
146
147
  signing_key:
147
148
  specification_version: 4
148
149
  summary: NCore - Gem for building REST API clients