include_date_scopes 0.9.0
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 +7 -0
- data/.gitignore +21 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +13 -0
- data/Gemfile.lock +145 -0
- data/README.md +4 -0
- data/include_date_scopes.gemspec +28 -0
- data/lib/include_date_scopes/active_record.rb +5 -0
- data/lib/include_date_scopes/date_scopes.rb +381 -0
- data/lib/include_date_scopes/version.rb +4 -0
- data/lib/include_date_scopes.rb +6 -0
- data/lib/railtie.rb +9 -0
- data/spec/config/database.yml +0 -0
- data/spec/lib/date_scopes_spec.rb +23 -0
- data/spec/spec_helper.rb +60 -0
- data/spec/support/date_scope_examples.rb +128 -0
- data/spec/support/post.rb +4 -0
- metadata +152 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: e0f891fa15dbec344fb06873f3a5642f41a5bd03
|
|
4
|
+
data.tar.gz: 31ab327e5716822e217f2ad00d009d284da1fd9d
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: f6dd984249e0aaa39f190487989c6ae63d0a4ac9a06d365507fe7428fa1b54546476e2c0a21becbde6fb2a053f25b81754fbee7657538b978f332ba4cbfb0b6b
|
|
7
|
+
data.tar.gz: ccc4476d4f40a75005b0ca3b67f711eceab8c694e03b559ddeb1ca6e4c8e2f3085447c3b832a3b5b4c46eab8aebb9109613d5ba1c50d7cb87c010a681e118170
|
data/.gitignore
ADDED
data/.ruby-gemset
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
include_date_scopes
|
data/.ruby-version
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2.1.1
|
data/Gemfile
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
source "http://rubygems.org"
|
|
2
|
+
|
|
3
|
+
gemspec
|
|
4
|
+
|
|
5
|
+
# *************************************
|
|
6
|
+
# * LOCAL GEMFILE IMPORT
|
|
7
|
+
# * If you have any local gems to include, create a new Gemfile at ~/.Gemfile
|
|
8
|
+
# * This code will import anything in there.
|
|
9
|
+
# *************************************
|
|
10
|
+
if File.exists? File.join(Dir.home,'.Gemfile')
|
|
11
|
+
eval File.read File.join(Dir.home,'.Gemfile')
|
|
12
|
+
end
|
|
13
|
+
|
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
include_date_scopes (0.0.0)
|
|
5
|
+
activerecord (< 4)
|
|
6
|
+
railties
|
|
7
|
+
squeel
|
|
8
|
+
|
|
9
|
+
GEM
|
|
10
|
+
remote: http://rubygems.org/
|
|
11
|
+
specs:
|
|
12
|
+
actionpack (3.2.17)
|
|
13
|
+
activemodel (= 3.2.17)
|
|
14
|
+
activesupport (= 3.2.17)
|
|
15
|
+
builder (~> 3.0.0)
|
|
16
|
+
erubis (~> 2.7.0)
|
|
17
|
+
journey (~> 1.0.4)
|
|
18
|
+
rack (~> 1.4.5)
|
|
19
|
+
rack-cache (~> 1.2)
|
|
20
|
+
rack-test (~> 0.6.1)
|
|
21
|
+
sprockets (~> 2.2.1)
|
|
22
|
+
activemodel (3.2.17)
|
|
23
|
+
activesupport (= 3.2.17)
|
|
24
|
+
builder (~> 3.0.0)
|
|
25
|
+
activerecord (3.2.17)
|
|
26
|
+
activemodel (= 3.2.17)
|
|
27
|
+
activesupport (= 3.2.17)
|
|
28
|
+
arel (~> 3.0.2)
|
|
29
|
+
tzinfo (~> 0.3.29)
|
|
30
|
+
activesupport (3.2.17)
|
|
31
|
+
i18n (~> 0.6, >= 0.6.4)
|
|
32
|
+
multi_json (~> 1.0)
|
|
33
|
+
arel (3.0.3)
|
|
34
|
+
better_errors (1.1.0)
|
|
35
|
+
coderay (>= 1.0.0)
|
|
36
|
+
erubis (>= 2.6.6)
|
|
37
|
+
builder (3.0.4)
|
|
38
|
+
bullet (4.8.0)
|
|
39
|
+
activesupport
|
|
40
|
+
uniform_notifier (>= 1.4.0)
|
|
41
|
+
coderay (1.1.0)
|
|
42
|
+
columnize (0.3.6)
|
|
43
|
+
daemons (1.1.9)
|
|
44
|
+
debugger (1.6.6)
|
|
45
|
+
columnize (>= 0.3.1)
|
|
46
|
+
debugger-linecache (~> 1.2.0)
|
|
47
|
+
debugger-ruby_core_source (~> 1.3.2)
|
|
48
|
+
debugger-linecache (1.2.0)
|
|
49
|
+
debugger-ruby_core_source (1.3.2)
|
|
50
|
+
diff-lcs (1.2.5)
|
|
51
|
+
erubis (2.7.0)
|
|
52
|
+
eventmachine (1.0.3)
|
|
53
|
+
ffi (1.9.3)
|
|
54
|
+
hike (1.2.3)
|
|
55
|
+
i18n (0.6.9)
|
|
56
|
+
interactive_editor (0.0.10)
|
|
57
|
+
spoon (>= 0.0.1)
|
|
58
|
+
journey (1.0.4)
|
|
59
|
+
json (1.8.1)
|
|
60
|
+
method_source (0.8.2)
|
|
61
|
+
multi_json (1.9.2)
|
|
62
|
+
polyamorous (0.6.4)
|
|
63
|
+
activerecord (>= 3.0)
|
|
64
|
+
pry (0.9.12.6)
|
|
65
|
+
coderay (~> 1.0)
|
|
66
|
+
method_source (~> 0.8)
|
|
67
|
+
slop (~> 3.4)
|
|
68
|
+
pry-debugger (0.2.2)
|
|
69
|
+
debugger (~> 1.3)
|
|
70
|
+
pry (~> 0.9.10)
|
|
71
|
+
pry-doc (0.6.0)
|
|
72
|
+
pry (~> 0.9)
|
|
73
|
+
yard (~> 0.8)
|
|
74
|
+
rack (1.4.5)
|
|
75
|
+
rack-cache (1.2)
|
|
76
|
+
rack (>= 0.4)
|
|
77
|
+
rack-mini-profiler (0.9.1)
|
|
78
|
+
rack (>= 1.1.3)
|
|
79
|
+
rack-ssl (1.3.4)
|
|
80
|
+
rack
|
|
81
|
+
rack-test (0.6.2)
|
|
82
|
+
rack (>= 1.0)
|
|
83
|
+
railties (3.2.17)
|
|
84
|
+
actionpack (= 3.2.17)
|
|
85
|
+
activesupport (= 3.2.17)
|
|
86
|
+
rack-ssl (~> 1.3.2)
|
|
87
|
+
rake (>= 0.8.7)
|
|
88
|
+
rdoc (~> 3.4)
|
|
89
|
+
thor (>= 0.14.6, < 2.0)
|
|
90
|
+
rake (10.2.2)
|
|
91
|
+
rdoc (3.12.2)
|
|
92
|
+
json (~> 1.4)
|
|
93
|
+
rspec-core (2.14.8)
|
|
94
|
+
rspec-expectations (2.14.5)
|
|
95
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
|
96
|
+
rspec-mocks (2.14.6)
|
|
97
|
+
rspec-rails (2.14.2)
|
|
98
|
+
actionpack (>= 3.0)
|
|
99
|
+
activemodel (>= 3.0)
|
|
100
|
+
activesupport (>= 3.0)
|
|
101
|
+
railties (>= 3.0)
|
|
102
|
+
rspec-core (~> 2.14.0)
|
|
103
|
+
rspec-expectations (~> 2.14.0)
|
|
104
|
+
rspec-mocks (~> 2.14.0)
|
|
105
|
+
slop (3.5.0)
|
|
106
|
+
spoon (0.0.4)
|
|
107
|
+
ffi
|
|
108
|
+
sprockets (2.2.2)
|
|
109
|
+
hike (~> 1.2)
|
|
110
|
+
multi_json (~> 1.0)
|
|
111
|
+
rack (~> 1.0)
|
|
112
|
+
tilt (~> 1.1, != 1.3.0)
|
|
113
|
+
sqlite3 (1.3.9)
|
|
114
|
+
squeel (1.1.1)
|
|
115
|
+
activerecord (>= 3.0)
|
|
116
|
+
activesupport (>= 3.0)
|
|
117
|
+
polyamorous (~> 0.6.0)
|
|
118
|
+
thin (1.6.2)
|
|
119
|
+
daemons (>= 1.0.9)
|
|
120
|
+
eventmachine (>= 1.0.0)
|
|
121
|
+
rack (>= 1.0.0)
|
|
122
|
+
thor (0.19.1)
|
|
123
|
+
tilt (1.4.1)
|
|
124
|
+
timecop (0.7.1)
|
|
125
|
+
tzinfo (0.3.39)
|
|
126
|
+
uniform_notifier (1.4.0)
|
|
127
|
+
yard (0.8.7.4)
|
|
128
|
+
|
|
129
|
+
PLATFORMS
|
|
130
|
+
ruby
|
|
131
|
+
|
|
132
|
+
DEPENDENCIES
|
|
133
|
+
better_errors
|
|
134
|
+
bullet
|
|
135
|
+
debugger
|
|
136
|
+
include_date_scopes!
|
|
137
|
+
interactive_editor
|
|
138
|
+
pry
|
|
139
|
+
pry-debugger
|
|
140
|
+
pry-doc
|
|
141
|
+
rack-mini-profiler
|
|
142
|
+
rspec-rails
|
|
143
|
+
sqlite3
|
|
144
|
+
thin
|
|
145
|
+
timecop
|
data/README.md
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
$:.push File.expand_path("../lib", __FILE__)
|
|
2
|
+
require "include_date_scopes/version"
|
|
3
|
+
|
|
4
|
+
Gem::Specification.new do |s|
|
|
5
|
+
s.name = 'include_date_scopes'
|
|
6
|
+
s.version = IncludeDateScopes::VERSION.dup
|
|
7
|
+
s.authors = ['Sean Todd']
|
|
8
|
+
s.email = ['iphone.reply@gmail.com']
|
|
9
|
+
s.homepage = 'http://github.com/descentintomael/include_date_scopes'
|
|
10
|
+
s.summary = 'Include scopes for searching on a date column'
|
|
11
|
+
s.description = <<-DESCRIPTION
|
|
12
|
+
Add in ActiveRelation scopes that are common across all models. You can also
|
|
13
|
+
add in a prefix to those scopes so you can have multiple per model. See README
|
|
14
|
+
for more info.
|
|
15
|
+
DESCRIPTION
|
|
16
|
+
|
|
17
|
+
s.files = `git ls-files`.split("\n")
|
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
|
20
|
+
s.require_paths = ["lib"]
|
|
21
|
+
|
|
22
|
+
s.add_dependency "squeel"
|
|
23
|
+
s.add_dependency "activerecord", '< 4'
|
|
24
|
+
s.add_dependency "railties"
|
|
25
|
+
s.add_development_dependency "rspec-rails"
|
|
26
|
+
s.add_development_dependency "sqlite3"
|
|
27
|
+
s.add_development_dependency 'timecop'
|
|
28
|
+
end
|
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
# Add the below date based scopes to a model.
|
|
2
|
+
#
|
|
3
|
+
# between(start_date_or_time, stop_date_or_time)
|
|
4
|
+
# on_or_before(date)
|
|
5
|
+
# before(date)
|
|
6
|
+
# on_or_after(date)
|
|
7
|
+
# after(date)
|
|
8
|
+
# on(date)
|
|
9
|
+
# day(date)
|
|
10
|
+
# last_24_hours() * DateTime only
|
|
11
|
+
# last_hour() * DateTime only
|
|
12
|
+
# last_week()
|
|
13
|
+
# last_month()
|
|
14
|
+
# today()
|
|
15
|
+
# yesterday()
|
|
16
|
+
# most_recent() * this is an order by, not a filter
|
|
17
|
+
#
|
|
18
|
+
# Example usage (from Payment):
|
|
19
|
+
#
|
|
20
|
+
# include_date_scopes_for :payment_date # default date scope -- ex: Payment.on(date)
|
|
21
|
+
# include_date_scopes_for :net_payment_settlement_date, true # prepend field name -- ex: Payment.net_payment_settlement_date_on(date)
|
|
22
|
+
#
|
|
23
|
+
#
|
|
24
|
+
require 'squeel'
|
|
25
|
+
|
|
26
|
+
module IncludeDateScopes
|
|
27
|
+
module DateScopes
|
|
28
|
+
extend ActiveSupport::Concern
|
|
29
|
+
module ClassMethods
|
|
30
|
+
def include_date_scopes
|
|
31
|
+
include_date_scopes_for :created_at
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def include_date_scopes_for(column, prepend_name = false)
|
|
35
|
+
return unless self.table_exists?
|
|
36
|
+
if self.columns_hash[column.to_s].type == :datetime
|
|
37
|
+
define_timestamp_scopes_for column, prepend_name
|
|
38
|
+
elsif self.columns_hash[column.to_s].type == :date
|
|
39
|
+
define_date_scopes_for column, prepend_name
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def include_named_date_scopes_for(column)
|
|
44
|
+
include_date_scopes_for column, true
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
protected
|
|
48
|
+
|
|
49
|
+
def define_timestamp_scopes_for(column_name, prepend_name = false)
|
|
50
|
+
prefix = prepend_name ? "#{column_name}_" : ""
|
|
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{(__send__(column_name).gte start_time) & (__send__(column_name).lt stop_time)}
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
define_singleton_method :"#{prefix}on_or_before_date" do |date|
|
|
59
|
+
where{ __send__(column_name).lt date.to_date.tomorrow.midnight.gmtime }
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
define_singleton_method :"#{prefix}on_or_before" do |time|
|
|
63
|
+
where{__send__(column_name).lte (time.is_a?(Date) ? time.to_time : time)}
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
define_singleton_method :"#{prefix}before" do |time|
|
|
67
|
+
where{__send__(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{__send__(column_name).gte time.to_date.midnight.gmtime }
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
define_singleton_method :"#{prefix}on_or_after" do |time|
|
|
75
|
+
where{__send__(column_name).gte (time.is_a?(Date) ? time.to_time + 1.day : time )}
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
define_singleton_method :"#{prefix}after" do |time|
|
|
79
|
+
where{__send__(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.midnight, (day + 1.day).midnight)
|
|
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_week" do
|
|
99
|
+
__send__(:"#{prefix}after", 1.week.ago)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
define_singleton_method :"#{prefix}last_30days" do
|
|
103
|
+
__send__(:"#{prefix}after", 30.days.ago)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
define_singleton_method :"#{prefix}today" do
|
|
107
|
+
__send__(:"#{prefix}on", Date.today)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
define_singleton_method :"#{prefix}this_week" do
|
|
111
|
+
__send__(:"#{prefix}between", (Date.today - Date.today.wday.days).midnight, (Date.today + 1.day).midnight)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
define_singleton_method :"#{prefix}this_month" do
|
|
115
|
+
__send__(:"#{prefix}between", (Date.today.at_beginning_of_month).midnight, (Date.today + 1.day).midnight)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
define_singleton_method :"#{prefix}yesterday" do
|
|
119
|
+
__send__(:"#{prefix}on", Date.yesterday)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
define_singleton_method :"#{prefix}most_recent" do
|
|
123
|
+
order("#{column_name} desc")
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def define_date_scopes_for(column_name, prepend_name = false)
|
|
129
|
+
prefix = prepend_name ? "#{column_name}_" : ""
|
|
130
|
+
|
|
131
|
+
define_singleton_method :"#{prefix}between" do |start_date, stop_date|
|
|
132
|
+
where{(__send__(column_name).gte start_date) & (__send__(column_name).lte stop_date)}
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
define_singleton_method :"#{prefix}on_or_before" do |date|
|
|
136
|
+
where{ __send__(column_name).lte date }
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
define_singleton_method :"#{prefix}before" do |date|
|
|
140
|
+
where{__send__(column_name).lt date}
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
define_singleton_method :"#{prefix}on_or_after" do |date|
|
|
144
|
+
where{__send__(column_name).gte date}
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
define_singleton_method :"#{prefix}after" do |date|
|
|
148
|
+
where{__send__(column_name).gt date}
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
define_singleton_method :"#{prefix}on" do |date|
|
|
152
|
+
where{__send__(column_name).eq date}
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
define_singleton_method :"#{prefix}day" do |day|
|
|
156
|
+
__send__(:"#{prefix}on", day)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
define_singleton_method :"#{prefix}today" do
|
|
160
|
+
__send__(:"#{prefix}on", Date.today)
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
define_singleton_method :"#{prefix}last_week" do
|
|
164
|
+
__send__(:"#{prefix}after", 1.week.ago)
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
define_singleton_method :"#{prefix}last_30days" do
|
|
168
|
+
__send__(:"#{prefix}after", 30.days.ago)
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
define_singleton_method :"#{prefix}yesterday" do
|
|
172
|
+
__send__(:"#{prefix}on", Date.yesterday)
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
define_singleton_method :"#{prefix}most_recent" do
|
|
176
|
+
order("#{column_name} desc")
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
#
|
|
184
|
+
# module DateScopes
|
|
185
|
+
# extend ActiveSupport::Concern
|
|
186
|
+
#
|
|
187
|
+
# module ClassMethods
|
|
188
|
+
# def include_date_scopes
|
|
189
|
+
# include_date_scopes_for :created_at
|
|
190
|
+
# end
|
|
191
|
+
#
|
|
192
|
+
# def include_date_scopes_for(column, prepend_name = false)
|
|
193
|
+
# return unless self.table_exists?
|
|
194
|
+
# if self.columns_hash[column.to_s].try(:type) == :datetime
|
|
195
|
+
# define_timestamp_scopes_for column, prepend_name
|
|
196
|
+
# elsif self.columns_hash[column.to_s].try(:type) == :date
|
|
197
|
+
# define_date_scopes_for column, prepend_name
|
|
198
|
+
# end
|
|
199
|
+
# end
|
|
200
|
+
#
|
|
201
|
+
# def include_named_date_scopes_for(column)
|
|
202
|
+
# include_date_scopes_for column, true
|
|
203
|
+
# end
|
|
204
|
+
#
|
|
205
|
+
# protected
|
|
206
|
+
#
|
|
207
|
+
# def process_timestamp_argument(arg, inclusive_range = false)
|
|
208
|
+
# if arg.is_a?(Time) || arg.is_a?(DateTime)
|
|
209
|
+
# return arg
|
|
210
|
+
# elsif arg.is_a?(Date) && inclusive_range
|
|
211
|
+
# return arg + 1.day
|
|
212
|
+
# elsif arg.is_a?(Date) && !inclusive_range
|
|
213
|
+
# return arg
|
|
214
|
+
# else
|
|
215
|
+
# raise ArgumentError, "Unexpected argument class for timestamp scope: #{arg.class.name}"
|
|
216
|
+
# end
|
|
217
|
+
# end
|
|
218
|
+
#
|
|
219
|
+
# def process_date_argument(arg)
|
|
220
|
+
# if arg.is_a?(Time) || arg.is_a?(DateTime)
|
|
221
|
+
# return arg.to_date
|
|
222
|
+
# elsif arg.is_a?(Date)
|
|
223
|
+
# return arg
|
|
224
|
+
# else
|
|
225
|
+
# raise ArgumentError, "Unexpected argument class for timestamp scope: #{arg.class.name}"
|
|
226
|
+
# end
|
|
227
|
+
# end
|
|
228
|
+
#
|
|
229
|
+
# def define_timestamp_scopes_for(column_name, prepend_name = false)
|
|
230
|
+
# prefix = prepend_name ? "#{column_name}_" : ""
|
|
231
|
+
#
|
|
232
|
+
# define_singleton_method :"#{prefix}before" do |time,inclusive=false|
|
|
233
|
+
# time = process_timestamp_argument(time, inclusive)
|
|
234
|
+
# if inclusive
|
|
235
|
+
# where{__send__(column_name).lte time}
|
|
236
|
+
# else
|
|
237
|
+
# where{__send__(column_name).lt time}
|
|
238
|
+
# end
|
|
239
|
+
# end
|
|
240
|
+
#
|
|
241
|
+
# define_singleton_method :"#{prefix}after" do |time, inclusive=false|
|
|
242
|
+
# time = process_timestamp_argument(time, inclusive)
|
|
243
|
+
# if inclusive
|
|
244
|
+
# where{__send__(column_name).gte time}
|
|
245
|
+
# else
|
|
246
|
+
# where{__send__(column_name).gt time}
|
|
247
|
+
# end
|
|
248
|
+
# end
|
|
249
|
+
#
|
|
250
|
+
# define_singleton_method :"#{prefix}between" do |start_time, stop_time|
|
|
251
|
+
# on_or_after(start_time).on_or_before(stop_time)
|
|
252
|
+
# end
|
|
253
|
+
#
|
|
254
|
+
# define_singleton_method :"#{prefix}on_or_after" do |time|
|
|
255
|
+
# after(time,true)
|
|
256
|
+
# end
|
|
257
|
+
#
|
|
258
|
+
# define_singleton_method :"#{prefix}on_or_before" do |time|
|
|
259
|
+
# before(time,true)
|
|
260
|
+
# end
|
|
261
|
+
#
|
|
262
|
+
# define_singleton_method :"#{prefix}on_or_before_date" do |time|
|
|
263
|
+
# on_or_before(time.to_date)
|
|
264
|
+
# end
|
|
265
|
+
#
|
|
266
|
+
# define_singleton_method :"#{prefix}on_or_after_date" do |time|
|
|
267
|
+
# on_or_after(time)
|
|
268
|
+
# end
|
|
269
|
+
#
|
|
270
|
+
# define_singleton_method :"#{prefix}on" do |day|
|
|
271
|
+
# between(day.midnight, (day + 1.day).midnight)
|
|
272
|
+
# end
|
|
273
|
+
#
|
|
274
|
+
# define_singleton_method :"#{prefix}day" do |day|
|
|
275
|
+
# on(day)
|
|
276
|
+
# end
|
|
277
|
+
#
|
|
278
|
+
# define_singleton_method :"#{prefix}last_24_hours" do
|
|
279
|
+
# after(24.hours.ago)
|
|
280
|
+
# end
|
|
281
|
+
#
|
|
282
|
+
# define_singleton_method :"#{prefix}last_hour" do
|
|
283
|
+
# after(1.hour.ago)
|
|
284
|
+
# end
|
|
285
|
+
#
|
|
286
|
+
# define_singleton_method :"#{prefix}last_week" do
|
|
287
|
+
# after(1.week.ago)
|
|
288
|
+
# end
|
|
289
|
+
#
|
|
290
|
+
# define_singleton_method :"#{prefix}last_30days" do
|
|
291
|
+
# after(30.days.ago)
|
|
292
|
+
# end
|
|
293
|
+
#
|
|
294
|
+
# define_singleton_method :"#{prefix}today" do
|
|
295
|
+
# on(Date.today)
|
|
296
|
+
# end
|
|
297
|
+
#
|
|
298
|
+
# define_singleton_method :"#{prefix}this_week" do
|
|
299
|
+
# between((Date.today - Date.today.wday.days).midnight, (Date.today + 1.day).midnight)
|
|
300
|
+
# end
|
|
301
|
+
#
|
|
302
|
+
# define_singleton_method :"#{prefix}this_month" do
|
|
303
|
+
# between((Date.today.at_beginning_of_month).midnight, (Date.today + 1.day).midnight)
|
|
304
|
+
# end
|
|
305
|
+
#
|
|
306
|
+
# define_singleton_method :"#{prefix}yesterday" do
|
|
307
|
+
# on(Date.yesterday)
|
|
308
|
+
# end
|
|
309
|
+
#
|
|
310
|
+
# define_singleton_method :"#{prefix}most_recent" do
|
|
311
|
+
# order("#{column_name} desc")
|
|
312
|
+
# end
|
|
313
|
+
#
|
|
314
|
+
# end
|
|
315
|
+
#
|
|
316
|
+
# def define_date_scopes_for(column_name, prepend_name = false)
|
|
317
|
+
# prefix = prepend_name ? "#{column_name}_" : ""
|
|
318
|
+
#
|
|
319
|
+
# define_singleton_method :"#{prefix}before" do |date,inclusive=false|
|
|
320
|
+
# date = process_date_argument(date)
|
|
321
|
+
# if inclusive
|
|
322
|
+
# where{__send__(column_name).lte date}
|
|
323
|
+
# else
|
|
324
|
+
# where{__send__(column_name).lt date}
|
|
325
|
+
# end
|
|
326
|
+
# end
|
|
327
|
+
#
|
|
328
|
+
# define_singleton_method :"#{prefix}after" do |date, inclusive=false|
|
|
329
|
+
# date = process_date_argument(date)
|
|
330
|
+
# if inclusive
|
|
331
|
+
# where{__send__(column_name).gte date}
|
|
332
|
+
# else
|
|
333
|
+
# where{__send__(column_name).gt date}
|
|
334
|
+
# end
|
|
335
|
+
# end
|
|
336
|
+
#
|
|
337
|
+
# define_singleton_method :"#{prefix}on" do |date|
|
|
338
|
+
# date = process_date_argument(date)
|
|
339
|
+
# where{__send__(column_name).eq date}
|
|
340
|
+
# end
|
|
341
|
+
#
|
|
342
|
+
# define_singleton_method :"#{prefix}between" do |start_date, stop_date|
|
|
343
|
+
# on_or_after(start_date).on_or_before(stop_date)
|
|
344
|
+
# end
|
|
345
|
+
#
|
|
346
|
+
# define_singleton_method :"#{prefix}on_or_before" do |date|
|
|
347
|
+
# before(date,true)
|
|
348
|
+
# end
|
|
349
|
+
#
|
|
350
|
+
# define_singleton_method :"#{prefix}on_or_after" do |date|
|
|
351
|
+
# after(date,true)
|
|
352
|
+
# end
|
|
353
|
+
#
|
|
354
|
+
# define_singleton_method :"#{prefix}day" do |day|
|
|
355
|
+
# on(day)
|
|
356
|
+
# end
|
|
357
|
+
#
|
|
358
|
+
# define_singleton_method :"#{prefix}today" do
|
|
359
|
+
# on(Date.today)
|
|
360
|
+
# end
|
|
361
|
+
#
|
|
362
|
+
# define_singleton_method :"#{prefix}last_week" do
|
|
363
|
+
# after(1.week.ago)
|
|
364
|
+
# end
|
|
365
|
+
#
|
|
366
|
+
# define_singleton_method :"#{prefix}last_30days" do
|
|
367
|
+
# after(30.days.ago)
|
|
368
|
+
# end
|
|
369
|
+
#
|
|
370
|
+
# define_singleton_method :"#{prefix}yesterday" do
|
|
371
|
+
# on(Date.yesterday)
|
|
372
|
+
# end
|
|
373
|
+
#
|
|
374
|
+
# define_singleton_method :"#{prefix}most_recent" do
|
|
375
|
+
# order("#{column_name} desc")
|
|
376
|
+
# end
|
|
377
|
+
#
|
|
378
|
+
# end
|
|
379
|
+
# end
|
|
380
|
+
# end
|
|
381
|
+
|
data/lib/railtie.rb
ADDED
|
File without changes
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "Post" do
|
|
4
|
+
describe 'default date scopes' do
|
|
5
|
+
before(:all) do
|
|
6
|
+
define_model_class do
|
|
7
|
+
include_date_scopes
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it_behaves_like "with basic date scopes"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
describe 'date scopes on another column' do
|
|
15
|
+
before(:all) do
|
|
16
|
+
define_model_class do
|
|
17
|
+
include_date_scopes_for :updated_at
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it_behaves_like "with basic date scopes", :updated_at
|
|
22
|
+
end
|
|
23
|
+
end
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'timecop'
|
|
3
|
+
require 'rails/all'
|
|
4
|
+
require 'active_record'
|
|
5
|
+
require 'active_support'
|
|
6
|
+
require 'include_date_scopes'
|
|
7
|
+
|
|
8
|
+
if ActiveSupport::VERSION::MAJOR < 4
|
|
9
|
+
require 'active_support/core_ext/logger'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
Dir.glob(File.join(File.dirname(__FILE__), '{fixtures,matchers,support}', '*')) do |file|
|
|
13
|
+
require file
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
if RUBY_PLATFORM == "java"
|
|
17
|
+
database_adapter = "jdbcsqlite3"
|
|
18
|
+
else
|
|
19
|
+
database_adapter = "sqlite3"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
ActiveRecord::Base.default_timezone = :local
|
|
23
|
+
ActiveRecord::Base.logger = Logger.new(STDERR)
|
|
24
|
+
ActiveRecord::Base.logger.level = Logger::WARN
|
|
25
|
+
ActiveRecord::Base.establish_connection(
|
|
26
|
+
:adapter => database_adapter,
|
|
27
|
+
:database => ':memory:'
|
|
28
|
+
)
|
|
29
|
+
ActiveRecord::Base.connection.create_table(:posts, :force => true) do |t|
|
|
30
|
+
t.string :body
|
|
31
|
+
t.timestamp :show_at
|
|
32
|
+
t.timestamp :created_at
|
|
33
|
+
t.timestamp :updated_at
|
|
34
|
+
t.boolean :flag
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
require "#{File.dirname(__FILE__)}/../lib/include_date_scopes/active_record"
|
|
38
|
+
|
|
39
|
+
RSpec.configure do |config|
|
|
40
|
+
|
|
41
|
+
config.mock_with :rspec
|
|
42
|
+
|
|
43
|
+
config.after :each do
|
|
44
|
+
Post.delete_all
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def define_model_class(name = "Post", parent_class_name = "ActiveRecord::Base", &block)
|
|
49
|
+
Object.send(:remove_const, name) rescue nil
|
|
50
|
+
eval("class #{name} < #{parent_class_name}; end", TOPLEVEL_BINDING)
|
|
51
|
+
klass = eval(name, TOPLEVEL_BINDING)
|
|
52
|
+
klass.class_eval do
|
|
53
|
+
if respond_to?(:table_name=)
|
|
54
|
+
self.table_name = 'posts'
|
|
55
|
+
else
|
|
56
|
+
set_table_name 'posts'
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
klass.class_eval(&block) if block_given?
|
|
60
|
+
end
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
|
|
2
|
+
shared_examples "with basic date scopes" do |date_column = :created_at |
|
|
3
|
+
let!(:test_class) { Post }
|
|
4
|
+
describe "date scopes" do
|
|
5
|
+
before(:each) { Timecop.freeze Time.local(2013,02,01,06,30) }
|
|
6
|
+
|
|
7
|
+
let!(:last_week_obj) { test_class.create! date_column.to_sym => 1.week.ago }
|
|
8
|
+
let!(:yesterday_obj) { test_class.create! date_column.to_sym => 24.hours.ago }
|
|
9
|
+
let!(:hour_ago_obj) { test_class.create! date_column.to_sym => 1.hour.ago }
|
|
10
|
+
let!(:five_minute_ago_obj) { test_class.create! date_column.to_sym => 5.minutes.ago }
|
|
11
|
+
let!(:after_midnight_ago_obj) { test_class.create! date_column.to_sym => Date.today.midnight + 5.minutes }
|
|
12
|
+
let!(:before_midnight_ago_obj) { test_class.create! date_column.to_sym => Date.today.midnight - 5.minutes }
|
|
13
|
+
|
|
14
|
+
describe ":between" do
|
|
15
|
+
context "with DateTime" do
|
|
16
|
+
subject {test_class.between(2.hours.ago, 1.minute.ago).all}
|
|
17
|
+
|
|
18
|
+
it { should_not include last_week_obj }
|
|
19
|
+
it { should_not include yesterday_obj }
|
|
20
|
+
it { should include hour_ago_obj }
|
|
21
|
+
it { should include five_minute_ago_obj }
|
|
22
|
+
end
|
|
23
|
+
context "with Date" do
|
|
24
|
+
subject {test_class.between(2.days.ago.to_date, Date.today).all}
|
|
25
|
+
|
|
26
|
+
it { should_not include last_week_obj }
|
|
27
|
+
it { should include yesterday_obj }
|
|
28
|
+
it { should include hour_ago_obj }
|
|
29
|
+
it { should include five_minute_ago_obj }
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
describe ":after" do
|
|
34
|
+
context "with DateTime" do
|
|
35
|
+
subject {test_class.after(2.hours.ago).all}
|
|
36
|
+
|
|
37
|
+
it { should_not include last_week_obj }
|
|
38
|
+
it { should_not include yesterday_obj }
|
|
39
|
+
it { should include hour_ago_obj }
|
|
40
|
+
it { should include five_minute_ago_obj }
|
|
41
|
+
end
|
|
42
|
+
context "with Date" do
|
|
43
|
+
subject {test_class.after(2.days.ago.to_date).all}
|
|
44
|
+
|
|
45
|
+
it { should_not include last_week_obj }
|
|
46
|
+
it { should include yesterday_obj }
|
|
47
|
+
it { should include hour_ago_obj }
|
|
48
|
+
it { should include five_minute_ago_obj }
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
describe ":on_or_after_date" do
|
|
53
|
+
context "with DateTime" do
|
|
54
|
+
subject {test_class.on_or_after_date(2.hours.ago).all}
|
|
55
|
+
|
|
56
|
+
it { should_not include last_week_obj }
|
|
57
|
+
it { should_not include yesterday_obj }
|
|
58
|
+
it { should include hour_ago_obj }
|
|
59
|
+
it { should include five_minute_ago_obj }
|
|
60
|
+
end
|
|
61
|
+
context "with Date" do
|
|
62
|
+
subject {test_class.on_or_after_date(2.days.ago.to_date).all}
|
|
63
|
+
|
|
64
|
+
it { should_not include last_week_obj }
|
|
65
|
+
it { should include yesterday_obj }
|
|
66
|
+
it { should include hour_ago_obj }
|
|
67
|
+
it { should include five_minute_ago_obj }
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
describe ":before" do
|
|
72
|
+
context "with DateTime" do
|
|
73
|
+
subject {test_class.before(2.hours.ago).all}
|
|
74
|
+
|
|
75
|
+
it { should include last_week_obj }
|
|
76
|
+
it { should include yesterday_obj }
|
|
77
|
+
it { should_not include hour_ago_obj }
|
|
78
|
+
it { should_not include five_minute_ago_obj }
|
|
79
|
+
end
|
|
80
|
+
context "with Date" do
|
|
81
|
+
subject {test_class.before(Date.today).all}
|
|
82
|
+
|
|
83
|
+
it { should include last_week_obj }
|
|
84
|
+
it { should include yesterday_obj }
|
|
85
|
+
it { should_not include hour_ago_obj }
|
|
86
|
+
it { should_not include five_minute_ago_obj }
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
describe ":on_or_before_date" do
|
|
91
|
+
context "with DateTime" do
|
|
92
|
+
subject {test_class.on_or_before_date(25.hours.ago).all}
|
|
93
|
+
|
|
94
|
+
it { should include last_week_obj }
|
|
95
|
+
it { should include yesterday_obj }
|
|
96
|
+
it { should_not include hour_ago_obj }
|
|
97
|
+
it { should_not include five_minute_ago_obj }
|
|
98
|
+
end
|
|
99
|
+
context "with Date" do
|
|
100
|
+
subject {test_class.on_or_before_date(Date.yesterday).all}
|
|
101
|
+
|
|
102
|
+
it { should include last_week_obj }
|
|
103
|
+
it { should include yesterday_obj }
|
|
104
|
+
it { should_not include hour_ago_obj }
|
|
105
|
+
it { should_not include five_minute_ago_obj }
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
describe ":today" do
|
|
110
|
+
subject {test_class.today.all}
|
|
111
|
+
|
|
112
|
+
it { should_not include last_week_obj }
|
|
113
|
+
it { should_not include yesterday_obj }
|
|
114
|
+
it { should include hour_ago_obj }
|
|
115
|
+
it { should include five_minute_ago_obj }
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
describe ":yesterday" do
|
|
119
|
+
subject {test_class.yesterday.all}
|
|
120
|
+
|
|
121
|
+
it { should_not include last_week_obj }
|
|
122
|
+
it { should include yesterday_obj }
|
|
123
|
+
it { should_not include hour_ago_obj }
|
|
124
|
+
it { should_not include five_minute_ago_obj }
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
metadata
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: include_date_scopes
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.9.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Sean Todd
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2014-04-11 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: squeel
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ">="
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - ">="
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '0'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: activerecord
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "<"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '4'
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "<"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '4'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: railties
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - ">="
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '0'
|
|
48
|
+
type: :runtime
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - ">="
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: rspec-rails
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - ">="
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '0'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - ">="
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '0'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: sqlite3
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - ">="
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '0'
|
|
76
|
+
type: :development
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - ">="
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '0'
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: timecop
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - ">="
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: '0'
|
|
90
|
+
type: :development
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - ">="
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: '0'
|
|
97
|
+
description: "Add in ActiveRelation scopes that are common across all models. You
|
|
98
|
+
can also \nadd in a prefix to those scopes so you can have multiple per model. See
|
|
99
|
+
README\nfor more info.\n"
|
|
100
|
+
email:
|
|
101
|
+
- iphone.reply@gmail.com
|
|
102
|
+
executables: []
|
|
103
|
+
extensions: []
|
|
104
|
+
extra_rdoc_files: []
|
|
105
|
+
files:
|
|
106
|
+
- ".gitignore"
|
|
107
|
+
- ".ruby-gemset"
|
|
108
|
+
- ".ruby-version"
|
|
109
|
+
- Gemfile
|
|
110
|
+
- Gemfile.lock
|
|
111
|
+
- README.md
|
|
112
|
+
- include_date_scopes.gemspec
|
|
113
|
+
- lib/include_date_scopes.rb
|
|
114
|
+
- lib/include_date_scopes/active_record.rb
|
|
115
|
+
- lib/include_date_scopes/date_scopes.rb
|
|
116
|
+
- lib/include_date_scopes/version.rb
|
|
117
|
+
- lib/railtie.rb
|
|
118
|
+
- spec/config/database.yml
|
|
119
|
+
- spec/lib/date_scopes_spec.rb
|
|
120
|
+
- spec/spec_helper.rb
|
|
121
|
+
- spec/support/date_scope_examples.rb
|
|
122
|
+
- spec/support/post.rb
|
|
123
|
+
homepage: http://github.com/descentintomael/include_date_scopes
|
|
124
|
+
licenses: []
|
|
125
|
+
metadata: {}
|
|
126
|
+
post_install_message:
|
|
127
|
+
rdoc_options: []
|
|
128
|
+
require_paths:
|
|
129
|
+
- lib
|
|
130
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
131
|
+
requirements:
|
|
132
|
+
- - ">="
|
|
133
|
+
- !ruby/object:Gem::Version
|
|
134
|
+
version: '0'
|
|
135
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
136
|
+
requirements:
|
|
137
|
+
- - ">="
|
|
138
|
+
- !ruby/object:Gem::Version
|
|
139
|
+
version: '0'
|
|
140
|
+
requirements: []
|
|
141
|
+
rubyforge_project:
|
|
142
|
+
rubygems_version: 2.2.2
|
|
143
|
+
signing_key:
|
|
144
|
+
specification_version: 4
|
|
145
|
+
summary: Include scopes for searching on a date column
|
|
146
|
+
test_files:
|
|
147
|
+
- spec/config/database.yml
|
|
148
|
+
- spec/lib/date_scopes_spec.rb
|
|
149
|
+
- spec/spec_helper.rb
|
|
150
|
+
- spec/support/date_scope_examples.rb
|
|
151
|
+
- spec/support/post.rb
|
|
152
|
+
has_rdoc:
|