active_record_date_range_scopes 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/.rspec +3 -0
- data/.travis.yml +7 -0
- data/Changelog.md +10 -0
- data/Gemfile +6 -0
- data/License +18 -0
- data/Rakefile +6 -0
- data/Readme.md +152 -0
- data/active_record_date_range_scopes.gemspec +34 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/active_record/date_range_scopes.rb +162 -0
- data/lib/active_record/date_range_scopes/version.rb +7 -0
- data/lib/active_record_date_range_scopes.rb +2 -0
- metadata +129 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 1909e880a4c222561ba32c51bfc9c7d9ef2b1569d2406753288b3ee1620e0987
|
4
|
+
data.tar.gz: 7b7c06039f49a79f3ec2b64ee10a6f1771ac23095406f11398429b48ef4f70e7
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 619b3fc50ed3cdb62f060b9b8a562d103ca4f0f5084af741d8391e8f9db67d575c436727aec700b41a3518f8236ab500b8dbfc5b20713e17fe857e3a6871b746
|
7
|
+
data.tar.gz: 0d9835c95dc6ff11fea13203d33e9980479282f8c8ed5eac90570f26b3db612876b1b0388b5213d70ca236d8b66dc1b8ba8af4c8a1978d01c406e7b9e39e916e
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Changelog.md
ADDED
data/Gemfile
ADDED
data/License
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
Copyright (c) 2020 Tyler Rick
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
4
|
+
associated documentation files (the "Software"), to deal in the Software without restriction,
|
5
|
+
including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
6
|
+
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
|
7
|
+
furnished to do so, subject to the following conditions:
|
8
|
+
|
9
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial
|
10
|
+
portions of the Software.
|
11
|
+
|
12
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
13
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
14
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
15
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
16
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
17
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
18
|
+
SOFTWARE.
|
data/Rakefile
ADDED
data/Readme.md
ADDED
@@ -0,0 +1,152 @@
|
|
1
|
+
# ActiveRecord Date Range Scopes
|
2
|
+
|
3
|
+
Simply add a line like this within your ActiveRecord model:
|
4
|
+
```ruby
|
5
|
+
date_range_scopes :created
|
6
|
+
```
|
7
|
+
|
8
|
+
… and it will defines 3 date range scopes named after the given scope `name`:
|
9
|
+
- `{name}_between`
|
10
|
+
- `{name}_after`
|
11
|
+
- `{name}_before`
|
12
|
+
|
13
|
+
## Usage
|
14
|
+
|
15
|
+
### date_range_scopes
|
16
|
+
|
17
|
+
Simple example:
|
18
|
+
|
19
|
+
```ruby
|
20
|
+
class Book < ActiveRecord::Base
|
21
|
+
# This defines created_between, created_after, created_before scopes
|
22
|
+
date_range_scopes :created
|
23
|
+
|
24
|
+
# This defines updated_between, updated_after, updated_before scopes
|
25
|
+
date_range_scopes :updated
|
26
|
+
end
|
27
|
+
|
28
|
+
Book.created_between(3.years.ago, 1.year.ago)
|
29
|
+
Book.created_between('2020-01-01', '2020-01-31')
|
30
|
+
Book.created_after(1.week.ago)
|
31
|
+
Book.created_before(1.day.ago)
|
32
|
+
```
|
33
|
+
|
34
|
+
By default, uses `{name}_at` as the column name. Column should be a `:datetime` (timestamp) column.
|
35
|
+
|
36
|
+
But if the defaults aren't what you need, it is fully customizable:
|
37
|
+
- You can give the scopes any name prefix you want
|
38
|
+
- You can specify a different column name to use for the scopes
|
39
|
+
- You can optionally add any joins or other clauses you need to add to the relation.
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
class Book < ActiveRecord::Base
|
43
|
+
# This creates is_between, is_after, is_before scopes
|
44
|
+
date_range_scopes :is, ->{ arel_table[:created_at] },
|
45
|
+
end
|
46
|
+
```
|
47
|
+
|
48
|
+
```ruby
|
49
|
+
class Author < ActiveRecord::Base
|
50
|
+
date_range_scopes :with_any_books_created,
|
51
|
+
->{ Book.arel_table[:created_at] },
|
52
|
+
->(_) { joins(:books) }
|
53
|
+
end
|
54
|
+
```
|
55
|
+
|
56
|
+
# This would be the same as writing it out long-hand:
|
57
|
+
```ruby
|
58
|
+
class Author < ActiveRecord::Base
|
59
|
+
scope :with_any_books_created_between, ->(after, before) {
|
60
|
+
with_any_books_created_after(after).
|
61
|
+
with_any_books_created_before(before)
|
62
|
+
}
|
63
|
+
scope :with_any_books_created_after, ->(date_or_time) {
|
64
|
+
next unless date_or_time
|
65
|
+
|
66
|
+
joins(:books).
|
67
|
+
where(
|
68
|
+
Book.arel_table[:created_at].gteq( time_or_beginning_of_day(date_or_time) )
|
69
|
+
)
|
70
|
+
}
|
71
|
+
scope :with_any_books_created_before, ->(date_or_time) {
|
72
|
+
…
|
73
|
+
}
|
74
|
+
end
|
75
|
+
```
|
76
|
+
|
77
|
+
### delegate_date_range_scopes
|
78
|
+
|
79
|
+
Delegates the date filter scopes to an association (requires the scopes to already be
|
80
|
+
defined there in the `to` model using `date_range_scopes`).
|
81
|
+
|
82
|
+
This uses `Relation.merge` to merge the scope on the associated model, allowing you to reuse
|
83
|
+
existing scopes on other models. But since these scopes are local (to the model in which you
|
84
|
+
call `delegate_date_range_scopes`), the query returns instances of the local model rather than
|
85
|
+
instances of the associated model.
|
86
|
+
|
87
|
+
Unlike date_range_scopes, where you specify which *column* to operate on, this lets you specify
|
88
|
+
which *scope* to delegate to in the target (`to`) model. If `scope` not specified, uses the
|
89
|
+
same scope name as in the source model, removing `{target}s_` prefix if there is one.
|
90
|
+
|
91
|
+
Example:
|
92
|
+
|
93
|
+
```ruby
|
94
|
+
class Book < ActiveRecord::Base
|
95
|
+
date_range_scopes :created
|
96
|
+
end
|
97
|
+
|
98
|
+
class Author < ActiveRecord::Base
|
99
|
+
# Delegates to Book.created* scopes by default
|
100
|
+
delegate_date_range_scopes :books_created, ->(_) { joins(:books) }, to: Book
|
101
|
+
# Explicitly tells it to delegate Author.with_any_books_written_* to Book.created_
|
102
|
+
delegate_date_range_scopes :with_any_books_written, ->(_) { joins(:books) }, to: Book, scope: :created
|
103
|
+
end
|
104
|
+
|
105
|
+
Author.with_any_books_written_before('1970-01-01')
|
106
|
+
```
|
107
|
+
|
108
|
+
|
109
|
+
|
110
|
+
## Features
|
111
|
+
|
112
|
+
- Makes it very easy to define date range scopes
|
113
|
+
- Lets you add scopes that are based on associated (join) records
|
114
|
+
- If `nil` is passed to any of these scopes, the scope simply has no effect, rather than raising an error. This is useful if you have lots of filters that your users may or may not provide any value for.
|
115
|
+
- Handles time zones correctly: calls `in_time_zone` on strings/dates that are passed in
|
116
|
+
- If a date is passed in, it is converted to `beginning_of_day`/`end_of_day` depending on whether it is used in an `_after`/`_before` scope, respectively
|
117
|
+
- It even lets you mix dates and times in an intuitive way: `Model.created_between(1.week.ago, Date.today)`
|
118
|
+
|
119
|
+
## Comparison with other date range gems
|
120
|
+
|
121
|
+
### [date_supercharger](https://github.com/simon0191/date_supercharger) ([meat](https://github.com/simon0191/date_supercharger/blob/master/lib/date_supercharger/method_definer.rb))
|
122
|
+
- It [_automatically_ adds scopes](https://github.com/simon0191/date_supercharger/blob/master/lib/date_supercharger/matcher.rb#L25) for every `datetime`/`date` column (PR welcome for an optional module that you can include to get this behavior); `active_record_date_range_scopes` requires explicitly adding scopes, provides a macro that makes it easy to add scopes for the columns you care about, give them meaningful/custom names, and even add scopes that are based on associated (join) records
|
123
|
+
- =: It defines separate `between` and `between_inclusive` scopes; `active_record_date_range_scopes` provides an `inclusive:` option that can be passed to any scope
|
124
|
+
|
125
|
+
### [date_range_scopes](https://github.com/nragaz/date_range_scopes) ([meat](https://github.com/nragaz/date_range_scopes/blob/master/lib/date_range_scopes.rb))
|
126
|
+
- +: It [supports](https://github.com/nragaz/date_range_scopes/blob/master/lib/date_range_scopes.rb#L28) `date` (`_on`) fields; `active_record_date_range_scopes` currently only supports `datetime` (`_at`) fields (PR welcome!)
|
127
|
+
- +: It provides `_on`, `_in_week`, `_in_month`, `_in_year` scopes (PR welcome!)
|
128
|
+
- -: It doesn't provides `_between`/`_after`/`_before` scopes
|
129
|
+
- -: It uses strings (`"column >="`) for `where` clause; `active_record_date_range_scopes` uses Arel (`arel_table[:column].gteq()`)
|
130
|
+
|
131
|
+
### [https://github.com/kevinkaske/readable_date_ranges](https://github.com/kevinkaske/readable_date_ranges) ([meat](https://github.com/kevinkaske/readable_date_ranges/blob/master/lib/readable_date_ranges.rb))
|
132
|
+
- Its main focus appears to be adding readable range scopes like `created_this_week`, which is nice to have as presets but means it is pretty inflexible (can't specify custom ranges like you can in `active_record_date_range_scopes` and the other similar gems)
|
133
|
+
- +: It provides `_this_week`, `_this_month`, `_this_year`; `_last_week`, etc. scopes (PR welcome!)
|
134
|
+
|
135
|
+
## Installation
|
136
|
+
|
137
|
+
Add this line to your application's `Gemfile`:
|
138
|
+
|
139
|
+
```ruby
|
140
|
+
gem 'active_record_date_range_scopes'
|
141
|
+
```
|
142
|
+
|
143
|
+
|
144
|
+
## Development
|
145
|
+
|
146
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
147
|
+
|
148
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
149
|
+
|
150
|
+
## Contributing
|
151
|
+
|
152
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/TylerRick/active_record_date_range_scopes.
|
@@ -0,0 +1,34 @@
|
|
1
|
+
lib = File.expand_path("../lib", __FILE__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
require "active_record/date_range_scopes/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "active_record_date_range_scopes"
|
7
|
+
spec.version = ActiveRecord::DateRangeScopes.version
|
8
|
+
spec.authors = ["Tyler Rick"]
|
9
|
+
spec.email = ["tyler@tylerrick.com"]
|
10
|
+
|
11
|
+
spec.summary = %q{Easily create ActiveRecord date range scopes}
|
12
|
+
spec.description = spec.summary
|
13
|
+
spec.homepage = "http://github.com/TylerRick/active_record_date_range_scopes"
|
14
|
+
|
15
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
16
|
+
spec.metadata["source_code_uri"] = spec.homepage
|
17
|
+
spec.metadata["changelog_uri"] = "#{spec.metadata["source_code_uri"]}/blob/master/Changelog.md"
|
18
|
+
|
19
|
+
# Specify which files should be added to the gem when it is released.
|
20
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
21
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
22
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
23
|
+
end
|
24
|
+
spec.bindir = "exe"
|
25
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
26
|
+
spec.require_paths = ["lib"]
|
27
|
+
|
28
|
+
spec.add_dependency "activesupport", [">= 4.2"]
|
29
|
+
spec.add_dependency "activerecord", [">= 4.2"]
|
30
|
+
|
31
|
+
spec.add_development_dependency "bundler", "~> 1.17"
|
32
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
33
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
34
|
+
end
|
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "active_record_date_range_scopes"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start(__FILE__)
|
data/bin/setup
ADDED
@@ -0,0 +1,162 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
require 'active_support'
|
3
|
+
|
4
|
+
module ActiveRecord
|
5
|
+
module DateRangeScopes
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
module ClassMethods
|
9
|
+
##
|
10
|
+
# Defines 3 date range scopes named after the given `name`:
|
11
|
+
# - {name}_between
|
12
|
+
# - {name}_after
|
13
|
+
# - {name}_before
|
14
|
+
#
|
15
|
+
# By default, uses {name}_at as the column name. Column should be a :datetime (timestamp) column.
|
16
|
+
#
|
17
|
+
# Examples:
|
18
|
+
#
|
19
|
+
# class Book < ActiveRecord::Base
|
20
|
+
# # This defines created_between, created_after, created_before scopes
|
21
|
+
# date_range_scopes :created
|
22
|
+
#
|
23
|
+
# # This defines updated_between, updated_after, updated_before scopes
|
24
|
+
# date_range_scopes :updated
|
25
|
+
# end
|
26
|
+
#
|
27
|
+
# class Author < ActiveRecord::Base
|
28
|
+
# # You can specify a different column name to use for the scopes, and optionally, any joins
|
29
|
+
# # or other clauses you need to add to the relation.
|
30
|
+
# date_range_scopes :with_any_books_created, ->{ Book.arel_table[:created_at] }, ->(_) { joins(:books) }
|
31
|
+
# end
|
32
|
+
#
|
33
|
+
# # This would be the same as:
|
34
|
+
# class Author < ActiveRecord::Base
|
35
|
+
# scope :with_any_books_created_between, ->(after, before) {
|
36
|
+
# with_any_books_created_after(after).
|
37
|
+
# with_any_books_created_before(before)
|
38
|
+
# }
|
39
|
+
# scope :with_any_books_created_after, ->(date_or_time) {
|
40
|
+
# next unless date_or_time
|
41
|
+
#
|
42
|
+
# joins(:books).
|
43
|
+
# where(
|
44
|
+
# Book.arel_table[:created_at].gteq( time_or_beginning_of_day(date_or_time) )
|
45
|
+
# )
|
46
|
+
# }
|
47
|
+
# scope :with_any_books_created_before, ->(date_or_time) {
|
48
|
+
# …
|
49
|
+
# }
|
50
|
+
# end
|
51
|
+
#
|
52
|
+
def date_range_scopes(
|
53
|
+
name,
|
54
|
+
arel_attr = -> { arel_table[:"#{name}_at"] },
|
55
|
+
relation = :itself
|
56
|
+
)
|
57
|
+
relation = relation.to_proc
|
58
|
+
|
59
|
+
scope :"#{name}_between", ->(after, before) {
|
60
|
+
public_send(:"#{name}_after", after).
|
61
|
+
public_send(:"#{name}_before", before)
|
62
|
+
}
|
63
|
+
scope :"#{name}_after", ->(date_or_time) {
|
64
|
+
next unless date_or_time
|
65
|
+
|
66
|
+
instance_eval(&relation).
|
67
|
+
where(
|
68
|
+
arel_attr.().gteq( time_or_beginning_of_day(date_or_time) )
|
69
|
+
)
|
70
|
+
}
|
71
|
+
scope :"#{name}_before", ->(date_or_time) {
|
72
|
+
next unless date_or_time
|
73
|
+
|
74
|
+
instance_eval(&relation).
|
75
|
+
where(
|
76
|
+
arel_attr.().lteq( time_or_end_of_day(date_or_time) )
|
77
|
+
)
|
78
|
+
}
|
79
|
+
end
|
80
|
+
|
81
|
+
def time_or_end_of_day(date_or_time)
|
82
|
+
if date_or_time.is_a?(Date)
|
83
|
+
date_or_time.in_time_zone.end_of_day
|
84
|
+
else
|
85
|
+
date_or_time.in_time_zone
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def time_or_beginning_of_day(date_or_time)
|
90
|
+
if date_or_time.is_a?(Date)
|
91
|
+
date_or_time.in_time_zone.beginning_of_day
|
92
|
+
else
|
93
|
+
date_or_time.in_time_zone
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
##
|
98
|
+
# Delegates the date filter scopes to an association (requires the scopes to already be
|
99
|
+
# defined there in the `to` model using `date_range_scopes`).
|
100
|
+
#
|
101
|
+
# This uses `Relation.merge` to merge the scope on the associated model, allowing you to reuse
|
102
|
+
# existing scopes on other models. But since these scopes are local (to the model in which you
|
103
|
+
# call `delegate_date_range_scopes`), the query returns instances of the local model rather than
|
104
|
+
# instances of the associated model.
|
105
|
+
#
|
106
|
+
# Unlike date_range_scopes, where you specify which *column* to operate on, this lets you specify
|
107
|
+
# which *scope* to delegate to in the target (`to`) model. If `scope` not specified, uses the
|
108
|
+
# same scope name as in the source model, removing `{target}s_` prefix if there is one.
|
109
|
+
#
|
110
|
+
# Example:
|
111
|
+
#
|
112
|
+
# class Book < ActiveRecord::Base
|
113
|
+
# date_range_scopes :created
|
114
|
+
# end
|
115
|
+
#
|
116
|
+
# class Author < ActiveRecord::Base
|
117
|
+
# # Delegates to Book.created* scopes by default
|
118
|
+
# delegate_date_range_scopes :books_created, ->(_) { joins(:books) }, to: Book
|
119
|
+
# # Explicitly tells it to delegate Author.with_any_books_written_* to Book.created_
|
120
|
+
# delegate_date_range_scopes :with_any_books_written, ->(_) { joins(:books) }, to: Book, scope: :created
|
121
|
+
# end
|
122
|
+
#
|
123
|
+
# Author.with_any_books_written_before('1970-01-01')
|
124
|
+
#
|
125
|
+
def delegate_date_range_scopes(
|
126
|
+
local_name,
|
127
|
+
relation = :itself,
|
128
|
+
to:,
|
129
|
+
scope: nil
|
130
|
+
)
|
131
|
+
relation = relation.to_proc
|
132
|
+
target_model = to
|
133
|
+
name_on_target = scope || local_name.to_s.sub(/^#{target_model.model_name.plural}_/, '')
|
134
|
+
|
135
|
+
scope(:"#{local_name}_between", ->(after, before) {
|
136
|
+
public_send(:"#{local_name}_after", after).
|
137
|
+
public_send(:"#{local_name}_before", before)
|
138
|
+
})
|
139
|
+
scope(:"#{local_name}_after", ->(date_or_time) {
|
140
|
+
next unless date_or_time
|
141
|
+
|
142
|
+
instance_eval(&relation).
|
143
|
+
merge(
|
144
|
+
target_model.public_send(:"#{name_on_target}_after", date_or_time)
|
145
|
+
)
|
146
|
+
})
|
147
|
+
scope(:"#{local_name}_before", ->(date_or_time) {
|
148
|
+
next unless date_or_time
|
149
|
+
|
150
|
+
instance_eval(&relation).
|
151
|
+
merge(
|
152
|
+
target_model.public_send(:"#{name_on_target}_before", date_or_time)
|
153
|
+
)
|
154
|
+
})
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
ActiveRecord::Base.class_eval do
|
161
|
+
include ActiveRecord::DateRangeScopes
|
162
|
+
end
|
metadata
ADDED
@@ -0,0 +1,129 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: active_record_date_range_scopes
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Tyler Rick
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-01-31 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.2'
|
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.2'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '4.2'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.17'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.17'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '10.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '10.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '3.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '3.0'
|
83
|
+
description: Easily create ActiveRecord date range scopes
|
84
|
+
email:
|
85
|
+
- tyler@tylerrick.com
|
86
|
+
executables: []
|
87
|
+
extensions: []
|
88
|
+
extra_rdoc_files: []
|
89
|
+
files:
|
90
|
+
- ".gitignore"
|
91
|
+
- ".rspec"
|
92
|
+
- ".travis.yml"
|
93
|
+
- Changelog.md
|
94
|
+
- Gemfile
|
95
|
+
- License
|
96
|
+
- Rakefile
|
97
|
+
- Readme.md
|
98
|
+
- active_record_date_range_scopes.gemspec
|
99
|
+
- bin/console
|
100
|
+
- bin/setup
|
101
|
+
- lib/active_record/date_range_scopes.rb
|
102
|
+
- lib/active_record/date_range_scopes/version.rb
|
103
|
+
- lib/active_record_date_range_scopes.rb
|
104
|
+
homepage: http://github.com/TylerRick/active_record_date_range_scopes
|
105
|
+
licenses: []
|
106
|
+
metadata:
|
107
|
+
homepage_uri: http://github.com/TylerRick/active_record_date_range_scopes
|
108
|
+
source_code_uri: http://github.com/TylerRick/active_record_date_range_scopes
|
109
|
+
changelog_uri: http://github.com/TylerRick/active_record_date_range_scopes/blob/master/Changelog.md
|
110
|
+
post_install_message:
|
111
|
+
rdoc_options: []
|
112
|
+
require_paths:
|
113
|
+
- lib
|
114
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0'
|
124
|
+
requirements: []
|
125
|
+
rubygems_version: 3.0.3
|
126
|
+
signing_key:
|
127
|
+
specification_version: 4
|
128
|
+
summary: Easily create ActiveRecord date range scopes
|
129
|
+
test_files: []
|