activerecord-multirange 1.2.1 → 1.3.1

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: 2e8ec13d27ae216e0f400e1624b05c71e9276a450e53622aba243f181443213a
4
- data.tar.gz: 1ee4ac085770e7711541f70eccebaf8fc6e3fb11c45f6e49ebaece4536d29420
3
+ metadata.gz: 01b0a99ebb0d7a15d32f5d996e88d630dc789864c5cbd9012c2ec6c49a1519ba
4
+ data.tar.gz: d28cfa56518683a3b56908292dd30dbf370a9c7d6abe7ad5a517d93d3892a1dd
5
5
  SHA512:
6
- metadata.gz: efa82b9f56b823dafa589c40de04d072aa9c6d7e6deefb4933e3460fecee039ec77952108709803647a77d7d9a42eac3805ed3a8637dcf64c2ed07bca31a65cb
7
- data.tar.gz: 2aaf66267a719ae95509a1a8ce50eb78b476734c74ad15f7ee8ca0c778b59fbbfcf490c08974421deda75aa94a0b2c17527d008b52f664ddbb7976a842449b47
6
+ metadata.gz: 908e20aa94b0da2fc6e4d47135827efceb83aff7d51487e6361a179c924e471289773e501ef025decd232051887d7b0ca0d04b17551246de7f28cc3a983d2572
7
+ data.tar.gz: 8288c8305b5c0f6d7011450cecdd1236f040a33333f2d5a1e598195dfc311c64c5a76f801d3e2128cfc1b6f3087c40ee3a504c5082b06d4ac88d0feb1d72a7ee
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- activerecord-multirange (1.2.1)
4
+ activerecord-multirange (1.3.1)
5
5
  pg (>= 1)
6
6
  rails (>= 6)
7
7
 
@@ -105,6 +105,7 @@ GEM
105
105
  marcel (1.0.2)
106
106
  method_source (1.0.0)
107
107
  mini_mime (1.1.5)
108
+ mini_portile2 (2.8.9)
108
109
  minitest (5.19.0)
109
110
  net-imap (0.3.7)
110
111
  date
@@ -116,11 +117,8 @@ GEM
116
117
  net-smtp (0.3.3)
117
118
  net-protocol
118
119
  nio4r (2.5.9)
119
- nokogiri (1.15.4-arm64-darwin)
120
- racc (~> 1.4)
121
- nokogiri (1.15.4-x86_64-darwin)
122
- racc (~> 1.4)
123
- nokogiri (1.15.4-x86_64-linux)
120
+ nokogiri (1.15.4)
121
+ mini_portile2 (~> 2.8.2)
124
122
  racc (~> 1.4)
125
123
  parallel (1.23.0)
126
124
  parser (3.2.2.1)
@@ -203,6 +201,7 @@ GEM
203
201
 
204
202
  PLATFORMS
205
203
  arm64-darwin-23
204
+ arm64-darwin-24
206
205
  x86_64-darwin-22
207
206
  x86_64-linux
208
207
 
@@ -23,17 +23,15 @@ module Activerecord
23
23
  SELECT m.oid, m.typname, m.typelem, m.typdelim, m.typinput::varchar,
24
24
  pr.rngsubtype, m.typtype, m.typbasetype
25
25
  FROM pg_type m
26
- JOIN pg_type r ON REPLACE(m.typname, 'multirange', 'range') = r.typname
27
- JOIN pg_range pr ON r.oid = pr.rngtypid
26
+ JOIN pg_range pr ON m.oid = pr.rngmultitypid
28
27
  WHERE m.typtype = 'm';
29
28
  QUERY
30
29
 
31
30
  # Use exec_query for all Rails versions since execute_and_clear is private
32
31
  result = exec_query(query, 'SCHEMA', [])
32
+
33
33
  # Convert rows to hash format with column names as keys
34
- records = result.rows.map do |row|
35
- result.columns.zip(row).to_h
36
- end
34
+ records = result.rows.map { |row| result.columns.zip(row).to_h }
37
35
  initializer.register_multirange_type(records)
38
36
  end
39
37
  end
@@ -35,7 +35,9 @@ module Activerecord
35
35
  end
36
36
 
37
37
  def cast_value(value)
38
- return nil if value.blank?
38
+ return nil if value.nil?
39
+ return [] if value.is_a?(::Array) && value.empty?
40
+ return value if value.is_a?(::Array)
39
41
  return value unless value.is_a?(::String)
40
42
 
41
43
  ranges = scan_ranges(value)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Activerecord
4
4
  module Multirange
5
- VERSION = '1.2.1'
5
+ VERSION = '1.3.1'
6
6
  end
7
7
  end
@@ -16,12 +16,24 @@ module Activerecord
16
16
 
17
17
  # Multirange types that need to be registered
18
18
  MULTIRANGE_TYPES = {
19
- tsmultirange: { name: "tsmultirange" },
20
- datemultirange: { name: "datemultirange" },
21
- tstzmultirange: { name: "tstzmultirange" },
22
- nummultirange: { name: "nummultirange" },
23
- int8multirange: { name: "int8multirange" },
24
- int4multirange: { name: "int4multirange" }
19
+ tsmultirange: {
20
+ name: 'tsmultirange'
21
+ },
22
+ datemultirange: {
23
+ name: 'datemultirange'
24
+ },
25
+ tstzmultirange: {
26
+ name: 'tstzmultirange'
27
+ },
28
+ nummultirange: {
29
+ name: 'nummultirange'
30
+ },
31
+ int8multirange: {
32
+ name: 'int8multirange'
33
+ },
34
+ int4multirange: {
35
+ name: 'int4multirange'
36
+ }
25
37
  }.freeze
26
38
 
27
39
  def self.add_multirange_column_type
@@ -29,6 +41,13 @@ module Activerecord
29
41
  # Register multirange types in NATIVE_DATABASE_TYPES for Rails 8 compatibility
30
42
  Activerecord::Multirange.register_native_database_types
31
43
 
44
+ # Register multirange modifier for ActiveRecord attribute API
45
+ ActiveRecord::Type.add_modifier(
46
+ { multirange: true },
47
+ Activerecord::Multirange::OID::MultiRange,
48
+ adapter: :postgresql
49
+ )
50
+
32
51
  ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.prepend(Adapter)
33
52
  ActiveRecord::ConnectionAdapters::PostgreSQL::OID::TypeMapInitializer
34
53
  .prepend(TypeMap)
@@ -45,19 +64,21 @@ module Activerecord
45
64
 
46
65
  def self.register_native_database_types
47
66
  # Ensure the PostgreSQL adapter is loaded
48
- return unless defined?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter)
67
+ unless defined?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter)
68
+ return
69
+ end
49
70
 
50
71
  adapter_class = ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
51
72
 
52
73
  # Check if NATIVE_DATABASE_TYPES is already defined and modifiable
53
74
  if adapter_class.const_defined?(:NATIVE_DATABASE_TYPES)
54
75
  current_types = adapter_class::NATIVE_DATABASE_TYPES
55
-
76
+
56
77
  # Only modify if our types aren't already registered
57
78
  unless current_types.key?(:tsmultirange)
58
79
  # Create a new hash with existing types plus our multirange types
59
80
  new_types = current_types.merge(MULTIRANGE_TYPES)
60
-
81
+
61
82
  # Replace the constant with the updated hash
62
83
  adapter_class.send(:remove_const, :NATIVE_DATABASE_TYPES)
63
84
  adapter_class.const_set(:NATIVE_DATABASE_TYPES, new_types.freeze)
metadata CHANGED
@@ -1,13 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-multirange
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gustavo Warmling Teixeira
8
+ autorequire:
8
9
  bindir: exe
9
10
  cert_chain: []
10
- date: 2025-08-19 00:00:00.000000000 Z
11
+ date: 2025-08-29 00:00:00.000000000 Z
11
12
  dependencies:
12
13
  - !ruby/object:Gem::Dependency
13
14
  name: pg
@@ -141,6 +142,7 @@ licenses:
141
142
  metadata:
142
143
  homepage_uri: https://github.com/gustavowt/activerecord-multirange
143
144
  source_code_uri: https://github.com/gustavowt/activerecord-multirange
145
+ post_install_message:
144
146
  rdoc_options: []
145
147
  require_paths:
146
148
  - lib
@@ -155,7 +157,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
155
157
  - !ruby/object:Gem::Version
156
158
  version: '0'
157
159
  requirements: []
158
- rubygems_version: 3.6.6
160
+ rubygems_version: 3.5.22
161
+ signing_key:
159
162
  specification_version: 4
160
163
  summary: PostgreSQL multiranges support
161
164
  test_files: []