miscellany 0.1.21 → 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: 7ec30930b46e2c70b23b56abcf878afe159e0f18ffb3233c7ab1e87de6483573
4
- data.tar.gz: b4eea0d8cb2ea1dfc0b3d52351f63fd54dcb9581ed877967ea78beb5cbc96a2f
3
+ metadata.gz: cbc281a50690bfaa8e5745c43786179654ffd59a87a5df621d1f7423f8a1cb6c
4
+ data.tar.gz: 105181f0df9279f89e85ba59a35ddda7d390d2dc86068b8a5d2e28ee5cc4887e
5
5
  SHA512:
6
- metadata.gz: 53a2d235b7ea3e209b0249eab4964eb3f2426e2de48c7ac6594a06fb077bae34f7df160ff9f7b8bd797fc2a1d47a2cf8f63cf223f45ef71e4899884fd43dd0c6
7
- data.tar.gz: ee1e2a42ce1376ecd3a182e0aa228b248e154b554fcd9fdf6126a4c42855db20e83063b6a71ecd291c7a3fedfc6aa409b001a5d998e78ec8357c0e50d24f6941
6
+ metadata.gz: f393bac71597cef4b0879b0a8d9a21003d5e36355887706951880f4cac5ea769ffc8088f5b4d523ea2cdbe7c0b2552d56a4a759db0a9ae4acf69134a2e4e15b8
7
+ data.tar.gz: a9265249c223ebd121fe8189aacfd462376250b3fb13726ea1878e2b2931317604cec856d6db7f457ecefb77e645bc178a07d45e7a3b95b7347cb8e9eda9515c
@@ -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.21".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.21
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