miscellany 0.1.20 → 0.1.22
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 +4 -4
- data/lib/miscellany/active_record/complex_query.rb +35 -9
- data/lib/miscellany/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cbc281a50690bfaa8e5745c43786179654ffd59a87a5df621d1f7423f8a1cb6c
|
4
|
+
data.tar.gz: 105181f0df9279f89e85ba59a35ddda7d390d2dc86068b8a5d2e28ee5cc4887e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f393bac71597cef4b0879b0a8d9a21003d5e36355887706951880f4cac5ea769ffc8088f5b4d523ea2cdbe7c0b2552d56a4a759db0a9ae4acf69134a2e4e15b8
|
7
|
+
data.tar.gz: a9265249c223ebd121fe8189aacfd462376250b3fb13726ea1878e2b2931317604cec856d6db7f457ecefb77e645bc178a07d45e7a3b95b7347cb8e9eda9515c
|
@@ -47,7 +47,7 @@ module Miscellany
|
|
47
47
|
end
|
48
48
|
psql += " LIMIT #{length} OFFSET #{start}"
|
49
49
|
records = ActiveRecord::Base.connection.exec_query(psql).to_a
|
50
|
-
records.map
|
50
|
+
records = records.map(&:with_indifferent_access)
|
51
51
|
augment_batch(records)
|
52
52
|
records
|
53
53
|
end
|
@@ -63,7 +63,7 @@ module Miscellany
|
|
63
63
|
batch = ActiveRecord::Base.connection.exec_query(
|
64
64
|
"SELECT * FROM #{tbl} LIMIT #{of} OFFSET #{offset}",
|
65
65
|
)
|
66
|
-
batch.map
|
66
|
+
batch = batch.map(&:with_indifferent_access)
|
67
67
|
augment_batch(batch)
|
68
68
|
yield batch
|
69
69
|
offset += of
|
@@ -130,14 +130,40 @@ module Miscellany
|
|
130
130
|
filters.flatten.select(&:present?).map { |q| "(#{q})" }.join(' AND ').presence || '1=1'
|
131
131
|
end
|
132
132
|
|
133
|
-
def date_filter(column,
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
133
|
+
def date_filter(column, range, timezone: nil)
|
134
|
+
range = _parse_datetime_range(range)
|
135
|
+
|
136
|
+
range = range.map{|dt| dt&.in_time_zone(timezone) } if timezone.present?
|
137
|
+
range[0] = range[0]&.beginning_of_day
|
138
|
+
range[1] = range[1]&.end_of_day
|
139
|
+
|
140
|
+
datetime_filter(column, range)
|
141
|
+
end
|
142
|
+
|
143
|
+
def datetime_filter(column, range)
|
144
|
+
range = _parse_datetime_range(range)
|
145
|
+
|
146
|
+
start_date = range[0]
|
147
|
+
end_date = range[1]
|
148
|
+
|
149
|
+
if end_date.present? && start_date.present?
|
150
|
+
"#{column} BETWEEN '#{start_date}' AND '#{end_date}'"
|
151
|
+
elsif start_date.present?
|
152
|
+
"#{column} >= '#{start_date}'"
|
153
|
+
elsif end_date.present?
|
154
|
+
"#{column} <= '#{end_date}'"
|
140
155
|
end
|
141
156
|
end
|
157
|
+
|
158
|
+
def _parse_datetime_range(range)
|
159
|
+
range = [filters["#{key}_start"], filters["#{key}_end"]] if range.is_a?(String) || range.is_a?(Symbol)
|
160
|
+
range = range.map{|v| _parse_datetime(v)}
|
161
|
+
range
|
162
|
+
end
|
163
|
+
|
164
|
+
def _parse_datetime(value)
|
165
|
+
return DateTime.parse(value) if value.is_a?(String)
|
166
|
+
value
|
167
|
+
end
|
142
168
|
end
|
143
169
|
end
|
data/lib/miscellany/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: miscellany
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.22
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ethan Knapp
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-10-
|
11
|
+
date: 2023-10-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|