miscellany 0.1.20 → 0.1.22

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 31028be35ab95451d190d0a669321bd265bc82230f8c07ddab8c52a4e526fcf0
4
- data.tar.gz: ee7c51e33f2147ab49e05f3c0783dd5a8f938a931a33468d1289214233b34a4e
3
+ metadata.gz: cbc281a50690bfaa8e5745c43786179654ffd59a87a5df621d1f7423f8a1cb6c
4
+ data.tar.gz: 105181f0df9279f89e85ba59a35ddda7d390d2dc86068b8a5d2e28ee5cc4887e
5
5
  SHA512:
6
- metadata.gz: 9f94c830dc69bf00eb3b0c9e423741ce5d70caac4f7cad67e85e4df9c9b929fc60ad2034516ed9924c2f37ce2dab6cbb56f92d02a45b7cd6179b753479f278d8
7
- data.tar.gz: 7cfdc3d21e2c648c9031ce061a59529db42236734b50a00bfc058fafde17039ef7660def4f8e8a8775d4a0b65cf30317fc4bbd87a01900b61d6866823904ba19
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!(&:with_indifferent_access)
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!(&:with_indifferent_access)
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, key)
134
- if filters["#{key}_end"].present? && filters["#{key}_start"].present?
135
- "#{column} BETWEEN '#{DateTime.parse(filters["#{key}_start"]).beginning_of_day}' AND '#{DateTime.parse(filters["#{key}_end"]).end_of_day}'"
136
- elsif filters["#{key}_start"].present?
137
- "#{column} >= '#{DateTime.parse(filters["#{key}_start"]).beginning_of_day}'"
138
- elsif filters["#{key}_end"].present?
139
- "#{column} <= '#{DateTime.parse(filters["#{key}_end"]).end_of_day}'"
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
@@ -1,3 +1,3 @@
1
1
  module Miscellany
2
- VERSION = "0.1.20".freeze
2
+ VERSION = "0.1.22".freeze
3
3
  end
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.20
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-19 00:00:00.000000000 Z
11
+ date: 2023-10-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails