sequel-tstzrange-fields 0.2.1 → 0.3.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: 602f1c9282af7052d0c4b5131a2f9872a383a51783f8f43bfd601066c5121136
4
- data.tar.gz: 9d3594a668a50adb1ab8f88a33db59d4fc779d4012f281f01791f98ae74c302d
3
+ metadata.gz: ec8083564a067989885ce28a4df1ea40f771bc9e9dc0629391d2029c92e0192a
4
+ data.tar.gz: '048514b958e7a5f84cab268c3f3e3da5a380378001a780f763f11ca680a66aa3'
5
5
  SHA512:
6
- metadata.gz: 327f56f8a6e62c01fd7c86620859a375fa3243f2019ce20e466f9e0651277803070618f4573f3272571c23b1defbee1a599826d2406507358e50e7c1d58c47b0
7
- data.tar.gz: 18b71bc1c26e4913d4fb9f81f88ca2368c12f5bc9ff38ae483f8482566d67a9a080f7109abd4d8e36863897132a02c9cc5e7a28af09d6a690c20e205e0aa2a00
6
+ metadata.gz: ccff8dea73d55454198dd75875c82c7a05c201404bd757d2d2d5b1559619635806a2ca31bbb1f442223f3ed1ce59f2c8f4e7265625e934ee8ae0d9468de38b39
7
+ data.tar.gz: 7a44746f3b61f8338f3e3dd3335efeef8bf6ac00a19bb742359ffb87a63b5f57b16c152f3f1d90630396982610d8bcc1808e33a4d56122d681502ccf837cdb67
@@ -35,6 +35,10 @@ module Sequel
35
35
  module TstzrangeFields
36
36
  VERSION = SequelTstzrangeFields::VERSION
37
37
 
38
+ def self.apply(_model, _opts={})
39
+ Sequel.extension :pg_range_ops
40
+ end
41
+
38
42
  def self.configure(model, *args)
39
43
  unless model.db.schema_type_class(:tstzrange)
40
44
  msg = "tstzrange_fields plugin requires pg_range db extension to be installed. " \
@@ -45,8 +49,8 @@ module Sequel
45
49
  args = args.flatten
46
50
 
47
51
  setup_model(model)
48
-
49
- args.flatten.each do |column|
52
+ model.tstzrange_columns = args.flatten
53
+ model.tstzrange_columns.each do |column|
50
54
  create_accessors(model, column)
51
55
  end
52
56
  end
@@ -70,11 +74,11 @@ module Sequel
70
74
 
71
75
  def self.create_accessors(model, column)
72
76
  get_column_method = column.to_sym
73
- set_column_method = "#{column}=".to_sym
74
- get_begin_method = "#{column}_begin".to_sym
75
- set_begin_method = "#{column}_begin=".to_sym
76
- get_end_method = "#{column}_end".to_sym
77
- set_end_method = "#{column}_end=".to_sym
77
+ set_column_method = :"#{column}="
78
+ get_begin_method = :"#{column}_begin"
79
+ set_begin_method = :"#{column}_begin="
80
+ get_end_method = :"#{column}_end"
81
+ set_end_method = :"#{column}_end="
78
82
 
79
83
  model.define_method(get_column_method) do
80
84
  self[column]
@@ -87,7 +91,7 @@ module Sequel
87
91
  when Float::INFINITY
88
92
  range = Sequel::Postgres::PGRange.new(nil, nil, empty: false, db_type: :tstzrange)
89
93
  self[column] = range
90
- when "empty"
94
+ when "empty", nil
91
95
  self[column] = Sequel::Postgres::PGRange.empty(:tstzrange)
92
96
  else
93
97
  beg = value.respond_to?(:begin) ? value.begin : (value[:begin] || value["begin"])
@@ -97,7 +101,8 @@ module Sequel
97
101
  end
98
102
 
99
103
  model.define_method(get_begin_method) do
100
- send(get_column_method).begin
104
+ r = send(get_column_method)
105
+ return r&.begin
101
106
  end
102
107
 
103
108
  model.define_method(set_begin_method) do |new_time|
@@ -115,6 +120,21 @@ module Sequel
115
120
  send(set_column_method, new_range)
116
121
  end
117
122
  end
123
+
124
+ module ClassMethods
125
+ # The Array of fields which are tstzrange columns.
126
+ attr_accessor :tstzrange_columns
127
+ end
128
+
129
+ module DatasetMethods
130
+ # Limit the dataset to the rows where the tstzrange column contains the given value.
131
+ # val is cast into a timestamptz.
132
+ # column is the default/first tstzrange column if not given.
133
+ def tztsrange_contains(val, column: nil)
134
+ column ||= self.model.tstzrange_columns.first
135
+ self.where(Sequel.pg_range(column).contains(Sequel.cast(val, :timestamptz)))
136
+ end
137
+ end
118
138
  end
119
139
  end
120
140
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SequelTstzrangeFields
4
- VERSION = "0.2.1"
4
+ VERSION = "0.3.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequel-tstzrange-fields
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lithic Tech
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-02 00:00:00.000000000 Z
11
+ date: 2026-05-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pg
@@ -118,7 +118,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
118
118
  requirements:
119
119
  - - ">="
120
120
  - !ruby/object:Gem::Version
121
- version: 2.7.0
121
+ version: 3.1.0
122
122
  required_rubygems_version: !ruby/object:Gem::Requirement
123
123
  requirements:
124
124
  - - ">="