associate_jsonb 0.0.9 → 0.0.10

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: 861ea54462a02137ede260085fdb80e49d0ea3d4286d09d2367cfaa9d140dcc3
4
- data.tar.gz: 1d6fd78832d2ddc7a3d503760b401ae97f453cd79f50dc1cd14314176d9d5fdb
3
+ metadata.gz: 847b6c8d5410dca5511a9ab2537ea3d2d9ba5c40e681ad42a63f0e752604d1ff
4
+ data.tar.gz: 935adff8c21a94b4d7593a236c9e56eec29c31340a897c82851b3662b0da880e
5
5
  SHA512:
6
- metadata.gz: dd8af89295273155cff22563212369930c15ff8bdcfece98e18a8f4c990d25037da443e2c345a0da99bb12d0b9ef447f7435a2c75ae1d7c62bc9e9a09bb3bac4
7
- data.tar.gz: 5e267f48ff719e521c7f04e7a702d807a43dacadff43223499fc3d9c638020730db6b3b3105f36b1e90d466689bf92ce3fcbdd5c78f5498ef95ce987164082bf
6
+ metadata.gz: c614936df446af3b0bd1301037954214e973cc4522637c3578f47f775065eb9085f08b668b11bf619ba3ca7968b14c078e192579be56eee489d5bf0780097552
7
+ data.tar.gz: 5243289a848da4cc15d03204a6d5bc6a502d810e6f839fb2b26aabc264bea63553b040a8508cf6f6d0722d82be5ea905c9bb75caa5e9ac1038b2e9d85e535122
@@ -20,64 +20,106 @@ loader.collapse("#{__dir__}/associate_jsonb/connection_adapters/schema_definitio
20
20
  loader.setup # ready!
21
21
 
22
22
  module AssociateJsonb
23
- mattr_accessor :jsonb_hash_types, default: []
24
- mattr_accessor :jsonb_set_removed, default: []
23
+ mattr_accessor :jsonb_hash_types, default: []
24
+ mattr_accessor :jsonb_set_added, default: [] # :nodoc:
25
+ mattr_accessor :jsonb_set_removed, default: [] # :nodoc:
25
26
  mattr_accessor :jsonb_set_enabled, default: false
26
- mattr_accessor :jsonb_delete_nil, default: false
27
+ mattr_accessor :jsonb_delete_nil, default: false
27
28
  private_class_method :jsonb_hash_types=
28
29
  private_class_method :jsonb_set_enabled=
29
30
 
31
+ def self.jsonb_oid_class # :nodoc:
32
+ :default
33
+ end
34
+ private_class_method :jsonb_oid_class
35
+
36
+ ##
37
+ # Enables the use of `jsonb_nested_set` for hash updates
38
+ #
39
+ # if passed a class, or a list of classes, those classes will be added todo
40
+ # the enabled classes. if no argument is given, and the enabled class list is
41
+ # empty, `ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Jsonb` is added
42
+ # to the list of enabled classes
30
43
  def self.enable_jsonb_set(klass = nil, *classes)
31
- add_hash_type(*Array(klass), *classes) unless klass.nil?
44
+ if klass.nil?
45
+ add_hash_type jsonb_oid_class if jsonb_hash_types.empty?
46
+ else
47
+ add_hash_type(*Array(klass), *classes)
48
+ end
32
49
  self.jsonb_set_enabled = true
33
50
  end
34
51
 
52
+ ##
53
+ # Disables the use of `jsonb_nested_set` for hash updates
54
+ #
55
+ # if passed a class, or a list of classes, those classes will be removed from
56
+ # the list of enabled classes
35
57
  def self.disable_jsonb_set(klass = nil, *classes)
36
58
  remove_hash_type(*Array(klass), *classes) unless klass.nil?
37
59
  self.jsonb_set_enabled = false
38
60
  end
39
61
 
62
+ ##
63
+ # Add class(es) to the list of classes that are able to be upated when
64
+ # `jsonb_set_enabled` is true
40
65
  def self.add_hash_type(*classes)
41
- self.jsonb_hash_types |= classes.flatten
66
+ self.jsonb_set_added |= classes.flatten
42
67
  end
43
68
 
69
+ ##
70
+ # Remove class(es) from the list of classes that are able to be upated when
71
+ # `jsonb_set_enabled` is true
44
72
  def self.remove_hash_type(*classes)
45
73
  self.jsonb_set_removed |= classes.flatten
46
74
  end
47
75
 
48
- def self.merge_hash?(v)
49
- return false unless jsonb_set_enabled && v
50
- self.jsonb_hash_types.any? { |type| v.is_a?(type) }
76
+ ##
77
+ # Returns true if `jsonb_set_enabled` is true and the value is an enabled hash
78
+ # type
79
+ def self.merge_hash?(value)
80
+ !!jsonb_set_enabled && is_hash?(value)
51
81
  end
52
82
 
53
- def self.is_hash?(v)
54
- self.jsonb_hash_types.any? { |type| v.is_a?(type) }
83
+ ##
84
+ # Returns true if the given value is a descendant of any of the classes
85
+ # in `jsonb_hash_types`
86
+ def self.is_hash?(value)
87
+ !!value && self.jsonb_hash_types.any? { |type| value.is_a?(type) }
55
88
  end
56
89
  end
57
90
 
58
-
59
91
  # rubocop:disable Metrics/BlockLength
60
92
  ActiveSupport.on_load :active_record do
61
93
  loader.eager_load
62
- AssociateJsonb.class_eval do
63
- def self.enable_jsonb_set(klass = nil, *classes)
64
- if klass.nil?
65
- add_hash_type ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Jsonb if jsonb_hash_types.empty?
66
- else
67
- add_hash_type |= [*Array(klass), *classes].flatten
94
+ AssociateJsonb.module_eval do
95
+ redefine_method = proc {|name, hide = false, &block|
96
+ method(name).owner.remove_method name
97
+ if block
98
+ define_singleton_method(name, &block)
99
+ private_class_method name if hide
68
100
  end
69
- self.jsonb_set_enabled = true
101
+ }
102
+
103
+ redefine_method.call(:jsonb_oid_class, true) do
104
+ ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Jsonb
70
105
  end
71
106
 
72
- self.enable_jsonb_set if jsonb_set_enabled
107
+ redefine_method.call(:add_hash_type) do |*classes|
108
+ self.jsonb_hash_types |= classes.flatten
109
+ end
73
110
 
74
- def self.remove_hash_type(*classes)
111
+ redefine_method.call(:remove_hash_type) do |*classes|
75
112
  self.jsonb_hash_types -= classes.flatten
76
113
  end
77
- removed = jsonb_set_removed
78
- self.remove_hash_type removed
79
- self.send :remove_method, :jsonb_set_removed
80
- self.send :remove_method, :jsonb_set_removed=
114
+
115
+ self.add_hash_type jsonb_set_added.map {|k| (k == :default) ? self.jsonb_oid_class : k}
116
+ self.remove_hash_type jsonb_set_removed
117
+
118
+ redefine_method.call(:jsonb_set_added)
119
+ redefine_method.call(:jsonb_set_added=)
120
+ redefine_method.call(:jsonb_set_removed)
121
+ redefine_method.call(:jsonb_set_removed=)
122
+ redefine_method = nil
81
123
  end
82
124
 
83
125
 
@@ -145,9 +187,6 @@ ActiveSupport.on_load :active_record do
145
187
  AssociateJsonb::Associations::Preloader::Association
146
188
  )
147
189
 
148
- # ActiveRecord::Associations::Preloader::HasMany.prepend(
149
- # AssociateJsonb::Associations::Preloader::HasMany
150
- # )
151
190
  %i[
152
191
  AlterTable
153
192
  ConstraintDefinition
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module AssociateJsonb
5
- VERSION = "0.0.9"
5
+ VERSION = "0.0.10"
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: associate_jsonb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sampson Crowley
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-13 00:00:00.000000000 Z
11
+ date: 2020-09-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -96,14 +96,14 @@ dependencies:
96
96
  requirements:
97
97
  - - "~>"
98
98
  - !ruby/object:Gem::Version
99
- version: 3.7.0
99
+ version: '3.9'
100
100
  type: :development
101
101
  prerelease: false
102
102
  version_requirements: !ruby/object:Gem::Requirement
103
103
  requirements:
104
104
  - - "~>"
105
105
  - !ruby/object:Gem::Version
106
- version: 3.7.0
106
+ version: '3.9'
107
107
  description: |
108
108
  This gem extends ActiveRecord to add additional functionality to JSONB
109
109
 
@@ -190,7 +190,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
190
190
  - !ruby/object:Gem::Version
191
191
  version: '0'
192
192
  requirements: []
193
- rubygems_version: 3.1.3
193
+ rubygems_version: 3.1.4
194
194
  signing_key:
195
195
  specification_version: 4
196
196
  summary: Store database references in PostgreSQL Jsonb columns