include_date_scopes 0.9.2 → 0.9.3

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
  SHA1:
3
- metadata.gz: 021ad778ab98e5426f71ce97ed4b1f775a7ed7b6
4
- data.tar.gz: 88b07877a83621f0e3635ecd6c5f56444dd2945f
3
+ metadata.gz: f330e8d591d974672921057798ad12d098f90a02
4
+ data.tar.gz: d8783be1a2fe911084a59a83cdbee7f1bea3e1b9
5
5
  SHA512:
6
- metadata.gz: fb4eba3ef62ae0fd8ed4c7f6b38f3cd3687a731ef9d9f5bdf31dc52819d48a1811358dfd0fe724d7022712b5bc8fe73ce52f1114f1136d0b85fd51cf7b69629b
7
- data.tar.gz: 275795d84b9139079aa45329190b8996ed812075856b82fbee4256fa28178c81974ca299f22b9e73e92a83d5dcbd557acb271e0d35ebef6eb5385293e107d7ef
6
+ metadata.gz: 56588927b8a6f4a1c1d56d174fbbe0cd50a40b8105faebbe4dae6479a3cde5b09bf48e1cb6204bd39584c1518e85ac6086b0f56cc9f99af65410347c22de57d5
7
+ data.tar.gz: 1e166a0ced92168dc5524ce2bcdf78f80b79cc25c574a77eb2c51ab24c14c4b11b20e7131a11b1db9ea218ca05ad8cf948b339b892e35a48fb47cdc94a216746
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.1.1
1
+ 2.1.2
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ 0.9.2
2
+ -----
3
+ Added a bunch of last_n and next_n scopes. Also fixed a bug in the Date column
4
+ scopes introduced in 0.9.1
5
+
1
6
  0.9.1
2
7
  -----
3
8
  Removed the Squeel dependency
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- include_date_scopes (0.9.1)
4
+ include_date_scopes (0.9.2)
5
5
  activerecord (< 4)
6
6
  railties
7
7
 
@@ -30,49 +30,17 @@ GEM
30
30
  i18n (~> 0.6, >= 0.6.4)
31
31
  multi_json (~> 1.0)
32
32
  arel (3.0.3)
33
- better_errors (1.1.0)
34
- coderay (>= 1.0.0)
35
- erubis (>= 2.6.6)
36
33
  builder (3.0.4)
37
- bullet (4.8.0)
38
- activesupport
39
- uniform_notifier (>= 1.4.0)
40
- coderay (1.1.0)
41
- columnize (0.3.6)
42
- daemons (1.1.9)
43
- debugger (1.6.6)
44
- columnize (>= 0.3.1)
45
- debugger-linecache (~> 1.2.0)
46
- debugger-ruby_core_source (~> 1.3.2)
47
- debugger-linecache (1.2.0)
48
- debugger-ruby_core_source (1.3.2)
49
34
  diff-lcs (1.2.5)
50
35
  erubis (2.7.0)
51
- eventmachine (1.0.3)
52
- ffi (1.9.3)
53
36
  hike (1.2.3)
54
37
  i18n (0.6.9)
55
- interactive_editor (0.0.10)
56
- spoon (>= 0.0.1)
57
38
  journey (1.0.4)
58
39
  json (1.8.1)
59
- method_source (0.8.2)
60
40
  multi_json (1.9.2)
61
- pry (0.9.12.6)
62
- coderay (~> 1.0)
63
- method_source (~> 0.8)
64
- slop (~> 3.4)
65
- pry-debugger (0.2.2)
66
- debugger (~> 1.3)
67
- pry (~> 0.9.10)
68
- pry-doc (0.6.0)
69
- pry (~> 0.9)
70
- yard (~> 0.8)
71
41
  rack (1.4.5)
72
42
  rack-cache (1.2)
73
43
  rack (>= 0.4)
74
- rack-mini-profiler (0.9.1)
75
- rack (>= 1.1.3)
76
44
  rack-ssl (1.3.4)
77
45
  rack
78
46
  rack-test (0.6.2)
@@ -99,40 +67,22 @@ GEM
99
67
  rspec-core (~> 2.14.0)
100
68
  rspec-expectations (~> 2.14.0)
101
69
  rspec-mocks (~> 2.14.0)
102
- slop (3.5.0)
103
- spoon (0.0.4)
104
- ffi
105
70
  sprockets (2.2.2)
106
71
  hike (~> 1.2)
107
72
  multi_json (~> 1.0)
108
73
  rack (~> 1.0)
109
74
  tilt (~> 1.1, != 1.3.0)
110
75
  sqlite3 (1.3.9)
111
- thin (1.6.2)
112
- daemons (>= 1.0.9)
113
- eventmachine (>= 1.0.0)
114
- rack (>= 1.0.0)
115
76
  thor (0.19.1)
116
77
  tilt (1.4.1)
117
78
  timecop (0.7.1)
118
79
  tzinfo (0.3.39)
119
- uniform_notifier (1.4.0)
120
- yard (0.8.7.4)
121
80
 
122
81
  PLATFORMS
123
82
  ruby
124
83
 
125
84
  DEPENDENCIES
126
- better_errors
127
- bullet
128
- debugger
129
85
  include_date_scopes!
130
- interactive_editor
131
- pry
132
- pry-debugger
133
- pry-doc
134
- rack-mini-profiler
135
86
  rspec-rails
136
87
  sqlite3
137
- thin
138
88
  timecop
@@ -4,7 +4,7 @@ require "include_date_scopes/version"
4
4
  Gem::Specification.new do |s|
5
5
  s.name = 'include_date_scopes'
6
6
  s.version = IncludeDateScopes::VERSION.dup
7
- s.authors = ['Sean Todd']
7
+ s.authors = ['Sean Todd', 'Katharina Peter']
8
8
  s.email = ['iphone.reply@gmail.com']
9
9
  s.homepage = 'http://github.com/descentintomael/include_date_scopes'
10
10
  s.summary = 'Include scopes for searching on a date column'
@@ -21,20 +21,29 @@
21
21
  # include_date_scopes_for :net_payment_settlement_date, true # prepend field name -- ex: Payment.net_payment_settlement_date_on(date)
22
22
  #
23
23
  #
24
+ require_relative 'define_timestamp_scopes'
25
+ require_relative 'define_date_scopes'
26
+ require_relative 'define_common_scopes'
24
27
 
25
28
  module IncludeDateScopes
26
29
  module DateScopes
27
30
  extend ActiveSupport::Concern
28
31
  module ClassMethods
32
+ include IncludeDateScopes::DefineTimestampScopes
33
+ include IncludeDateScopes::DefineDateScopes
34
+ include IncludeDateScopes::DefineCommonScopes
35
+
29
36
  def include_date_scopes
30
37
  include_date_scopes_for :created_at
31
38
  end
32
39
 
33
- def include_date_scopes_for(column, prepend_name = false)
40
+ def include_date_scopes_for(column,
41
+ prepend_name = false,
42
+ column_type = column_type_for(column))
34
43
  return unless self.table_exists?
35
- if self.columns_hash[column.to_s].type == :datetime
44
+ if column_type == :datetime
36
45
  define_timestamp_scopes_for column, prepend_name
37
- elsif self.columns_hash[column.to_s].type == :date
46
+ elsif column_type == :date
38
47
  define_date_scopes_for column, prepend_name
39
48
  end
40
49
  end
@@ -43,206 +52,8 @@ module IncludeDateScopes
43
52
  include_date_scopes_for column, true
44
53
  end
45
54
 
46
- protected
47
-
48
- def define_timestamp_scopes_for(column_name, prepend_name = false)
49
- prefix = prepend_name ? "#{column_name}_" : ""
50
- t = self.arel_table
51
-
52
- define_singleton_method :"#{prefix}between" do |start_date_or_time, stop_date_or_time|
53
- start_time = (start_date_or_time.is_a?(Date) ? start_date_or_time.to_time : start_date_or_time)
54
- stop_time = (stop_date_or_time.is_a?(Date) ? stop_date_or_time.to_time + 1.day : stop_date_or_time )
55
- where(t[column_name].gteq(start_time).and(t[column_name].lt stop_time))
56
- end
57
-
58
- define_singleton_method :"#{prefix}on_or_before_date" do |date|
59
- where( t[column_name].lt date.to_date.tomorrow.midnight.gmtime )
60
- end
61
-
62
- define_singleton_method :"#{prefix}on_or_before" do |time|
63
- where(t[column_name].lteq (time.is_a?(Date) ? time.to_time : time))
64
- end
65
-
66
- define_singleton_method :"#{prefix}before" do |time|
67
- where(t[column_name].lt (time.is_a?(Date) ? time.to_time : time))
68
- end
69
-
70
- define_singleton_method :"#{prefix}on_or_after_date" do |time|
71
- where(t[column_name].gteq time.to_date.midnight.gmtime )
72
- end
73
-
74
- define_singleton_method :"#{prefix}on_or_after" do |time|
75
- where(t[column_name].gteq (time.is_a?(Date) ? time.to_time + 1.day : time ))
76
- end
77
-
78
- define_singleton_method :"#{prefix}after" do |time|
79
- where(t[column_name].gt (time.is_a?(Date) ? time.to_time + 1.day : time ))
80
- end
81
-
82
- define_singleton_method :"#{prefix}on" do |day|
83
- __send__(:"#{prefix}between", day.beginning_of_day, day.end_of_day)
84
- end
85
-
86
- define_singleton_method :"#{prefix}day" do |day|
87
- __send__(:"#{prefix}on", day)
88
- end
89
-
90
- define_singleton_method :"#{prefix}last_24_hours" do
91
- __send__(:"#{prefix}after", 24.hours.ago)
92
- end
93
-
94
- define_singleton_method :"#{prefix}last_hour" do
95
- __send__(:"#{prefix}after", 1.hour.ago)
96
- end
97
-
98
- define_singleton_method :"#{prefix}last_n_seconds" do |count|
99
- __send__(:"#{prefix}on_or_after", count.seconds.ago)
100
- end
101
-
102
- define_singleton_method :"#{prefix}last_n_minutes" do |count|
103
- __send__(:"#{prefix}on_or_after", count.minutes.ago)
104
- end
105
-
106
- define_singleton_method :"#{prefix}last_n_hours" do |count|
107
- __send__(:"#{prefix}on_or_after", count.hours.ago)
108
- end
109
-
110
- define_singleton_method :"#{prefix}next_n_seconds" do |count|
111
- __send__(:"#{prefix}on_or_before", count.seconds.from_now)
112
- end
113
-
114
- define_singleton_method :"#{prefix}next_n_minutes" do |count|
115
- __send__(:"#{prefix}on_or_before", count.minutes.from_now)
116
- end
117
-
118
- define_singleton_method :"#{prefix}next_n_hours" do |count|
119
- __send__(:"#{prefix}on_or_before", count.hours.from_now)
120
- end
121
-
122
- define_singleton_method :"#{prefix}this_minute" do
123
- __send__(:"#{prefix}between", Time.now.change(sec: 0), Time.now.change(sec: 59, usec: Rational(999999999, 1000)))
124
- end
125
-
126
- define_singleton_method :"#{prefix}this_hour" do
127
- __send__(:"#{prefix}between", 1.hour.ago.end_of_hour, Time.now.end_of_hour)
128
- end
129
-
130
- define_singleton_method :"#{prefix}this_week" do
131
- __send__(:"#{prefix}between", 1.week.ago.end_of_week, Time.now.end_of_week)
132
- end
133
-
134
- define_singleton_method :"#{prefix}this_month" do
135
- __send__(:"#{prefix}between", 1.month.ago.end_of_month, Time.now.end_of_month)
136
- end
137
-
138
- define_singleton_method :"#{prefix}this_year" do
139
- __send__(:"#{prefix}between", 1.year.ago.end_of_year, Time.now.end_of_year)
140
- end
141
-
142
- define_common_scopes t, prefix, column_name
143
- end
144
-
145
- def define_date_scopes_for(column_name, prepend_name = false)
146
- prefix = prepend_name ? "#{column_name}_" : ""
147
- t = self.arel_table
148
-
149
- define_singleton_method :"#{prefix}between" do |start_date, stop_date|
150
- where(t[column_name].gteq(start_date).and(t[column_name].lteq stop_date))
151
- end
152
-
153
- define_singleton_method :"#{prefix}on_or_before" do |date|
154
- where( t[column_name].lteq date )
155
- end
156
-
157
- define_singleton_method :"#{prefix}before" do |date|
158
- where(t[column_name].lt date)
159
- end
160
-
161
- define_singleton_method :"#{prefix}on_or_after" do |date|
162
- where(t[column_name].gteq date)
163
- end
164
-
165
- define_singleton_method :"#{prefix}after" do |date|
166
- where(t[column_name].gt date)
167
- end
168
-
169
- define_singleton_method :"#{prefix}on" do |date|
170
- where(t[column_name].eq date)
171
- end
172
-
173
- define_singleton_method :"#{prefix}this_week" do
174
- __send__(:"#{prefix}between", Date.today.beginning_of_week, Date.today.end_of_week)
175
- end
176
-
177
- define_singleton_method :"#{prefix}this_month" do
178
- __send__(:"#{prefix}between", Date.today.beginning_of_month, Date.today.end_of_month)
179
- end
180
-
181
- define_singleton_method :"#{prefix}this_year" do
182
- __send__(:"#{prefix}between", Date.today.beginning_of_year, Date.today.end_of_year)
183
- end
184
-
185
- define_common_scopes t, prefix, column_name
186
- end
187
-
188
- def define_common_scopes(arel, prefix, column_name)
189
- t = arel
190
-
191
- define_singleton_method :"#{prefix}day" do |day|
192
- __send__(:"#{prefix}on", day)
193
- end
194
-
195
- define_singleton_method :"#{prefix}today" do
196
- __send__(:"#{prefix}on", Date.today)
197
- end
198
-
199
- define_singleton_method :"#{prefix}yesterday" do
200
- __send__(:"#{prefix}on", Date.yesterday)
201
- end
202
-
203
- define_singleton_method :"#{prefix}last_week" do
204
- __send__(:"#{prefix}after", 1.week.ago)
205
- end
206
-
207
- define_singleton_method :"#{prefix}last_month" do
208
- __send__(:"#{prefix}after", 1.month.ago)
209
- end
210
-
211
- define_singleton_method :"#{prefix}last_year" do
212
- __send__(:"#{prefix}after", 1.year.ago)
213
- end
214
-
215
- define_singleton_method :"#{prefix}last_n_days" do |count|
216
- __send__(:"#{prefix}on_or_after", count.days.ago)
217
- end
218
-
219
- define_singleton_method :"#{prefix}last_n_months" do |count|
220
- __send__(:"#{prefix}on_or_after", count.months.ago)
221
- end
222
-
223
- define_singleton_method :"#{prefix}last_n_years" do |count|
224
- __send__(:"#{prefix}on_or_after", count.years.ago)
225
- end
226
-
227
- define_singleton_method :"#{prefix}next_n_days" do |count|
228
- __send__(:"#{prefix}on_or_before", count.days.from_now)
229
- end
230
-
231
- define_singleton_method :"#{prefix}next_n_months" do |count|
232
- __send__(:"#{prefix}on_or_before", count.months.from_now)
233
- end
234
-
235
- define_singleton_method :"#{prefix}next_n_years" do |count|
236
- __send__(:"#{prefix}on_or_before", count.years.from_now)
237
- end
238
-
239
- define_singleton_method :"#{prefix}last_30days" do
240
- __send__(:"#{prefix}after", 30.days.ago)
241
- end
242
-
243
- define_singleton_method :"#{prefix}most_recent" do
244
- order("#{column_name} desc")
245
- end
55
+ def column_type_for(column)
56
+ self.columns_hash[column.to_s].type
246
57
  end
247
58
  end
248
59
  end
@@ -0,0 +1,45 @@
1
+
2
+ module IncludeDateScopes
3
+ module DefineCommonScopes
4
+ def define_common_scopes(prefix, column_name)
5
+ define_singleton_method :"#{prefix}day" do |day|
6
+ __send__(:"#{prefix}on", day)
7
+ end
8
+
9
+ define_singleton_method :"#{prefix}today" do
10
+ __send__(:"#{prefix}on", Date.today)
11
+ end
12
+
13
+ define_singleton_method :"#{prefix}yesterday" do
14
+ __send__(:"#{prefix}on", Date.yesterday)
15
+ end
16
+
17
+ define_singleton_method :"#{prefix}tomorrow" do
18
+ __send__(:"#{prefix}on", Date.tomorrow)
19
+ end
20
+
21
+ [:day, :week, :month, :year].each do |time_unit|
22
+ define_singleton_method :"#{prefix}next_#{time_unit}" do
23
+ __send__(:"#{prefix}between", Time.now, 1.send(time_unit).from_now)
24
+ end
25
+ define_singleton_method :"#{prefix}last_#{time_unit}" do
26
+ __send__(:"#{prefix}between", 1.send(time_unit).ago, Time.now)
27
+ end
28
+ define_singleton_method :"#{prefix}next_n_#{time_unit}s" do |count|
29
+ __send__(:"#{prefix}between", Time.now, count.send(time_unit).from_now)
30
+ end
31
+ define_singleton_method :"#{prefix}last_n_#{time_unit}s" do |count|
32
+ __send__(:"#{prefix}between", count.send(time_unit).ago, Time.now)
33
+ end
34
+ end
35
+
36
+ define_singleton_method :"#{prefix}last_30_days" do
37
+ __send__(:"#{prefix}last_n_days", 30)
38
+ end
39
+
40
+ define_singleton_method :"#{prefix}most_recent" do
41
+ order("#{column_name} desc")
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,31 @@
1
+
2
+ module IncludeDateScopes
3
+ module DefineDateScopes
4
+ def define_date_scopes_for(column_name, prepend_name = false)
5
+ prefix = prepend_name ? "#{column_name}_" : ""
6
+ t = self.arel_table
7
+
8
+ define_singleton_method :"#{prefix}between" do |start_date, stop_date|
9
+ where(t[column_name].gteq(start_date.to_date).and(t[column_name].lteq(stop_date.to_date)))
10
+ end
11
+
12
+ {:on_or_before => :lteq, :before => :lt, :on_or_after => :gteq, :after => :gt, :on => :eq}.each do |label, op|
13
+ define_singleton_method :"#{prefix}#{label}" do |date|
14
+ where t[column_name].send op, date.to_date
15
+ end
16
+ end
17
+
18
+ define_singleton_method :"#{prefix}this_day" do
19
+ __send__(:"#{prefix}today")
20
+ end
21
+
22
+ [:week, :month, :year].each do |time_unit|
23
+ define_singleton_method :"#{prefix}this_#{time_unit}" do
24
+ __send__(:"#{prefix}between", Date.today.send(:"beginning_of_#{time_unit}"), Date.today.send(:"end_of_#{time_unit}"))
25
+ end
26
+ end
27
+
28
+ define_common_scopes prefix, column_name
29
+ end
30
+ end
31
+ end