include_date_scopes 0.9.2 → 0.9.3

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
  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