datetime-scopes 1.0.0.alpha1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 75b2ecf33e5ba50fe1ed72e304e9bec585582159
4
+ data.tar.gz: 2b468452b20e581866d4df006b659e72a4110e1e
5
+ SHA512:
6
+ metadata.gz: a1e4ea76089c638563bb62e7fe0eedca6eb69dd962cf6adc6eafa1908401b76f580d3c4522d024c7fee4fc21fc02c1c352ac59a3f82c9b97f0f84fe9fe925545
7
+ data.tar.gz: 51e7f73f17bea88420b2853633ef75b528a71f13d7827d792ec38c988b7652280973cc2b973c732df28c94fc40c4b6567e271e485b9ba59181320b824d27018c
@@ -0,0 +1,16 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
15
+ .ruby-version
16
+ .ruby-gemset
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format=doc
@@ -0,0 +1,15 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 2.3.0
5
+
6
+ addons:
7
+ code_climate:
8
+ repo_token: ca3a5a1d9af873ba0b6c6fa198a1e9e10c12c738211243d279181f58ca2c73ea
9
+
10
+ matrix:
11
+ - RAILS_VERSION=4.0.0
12
+ - RAILS_VERSION=4.1.0
13
+ - RAILS_VERSION=4.2.0
14
+
15
+ script: "bundle exec rspec --format=progress --no-color"
data/Gemfile ADDED
@@ -0,0 +1,13 @@
1
+ source "https://rubygems.org"
2
+
3
+ if ENV["RAILS_VERSION"]
4
+ gem "activerecord", "~> #{ENV["RAILS_VERSION"]}"
5
+ gem "activesupport", "~> #{ENV["RAILS_VERSION"]}"
6
+ end
7
+
8
+ gem "sqlite3"
9
+ gem "rspec", "~> 3.4.0"
10
+ gem "database_cleaner"
11
+ gem "codeclimate-test-reporter"
12
+
13
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Alexey Chernenkov
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,139 @@
1
+ # Date/time scopes for ActiveRecord models
2
+
3
+ [![Build Status](https://travis-ci.org/907th/datetime-scopes.svg?branch=master)](https://travis-ci.org/907th/datetime-scopes)
4
+ [![Code Climate](https://codeclimate.com/github/907th/datetime-scopes/badges/gpa.svg)](https://codeclimate.com/github/907th/datetime-scopes)
5
+ [![Test Coverage](https://codeclimate.com/github/907th/datetime-scopes/badges/coverage.svg)](https://codeclimate.com/github/907th/datetime-scopes/coverage)
6
+
7
+ Date/time scopes for ActiveRecord models you always missed! With proper time-zones support.
8
+
9
+ ## Quick start
10
+
11
+ ```ruby
12
+ # Gemfile
13
+ gem "datetime-scopes"
14
+ ```
15
+
16
+ ```ruby
17
+ # app/models/my_model.rb
18
+ class MyModel < ActiveRecord::Base
19
+ datetime_scopes :created_at # with 'datetime' typed attribute
20
+ date_scopes :birthday # with 'date' typed attribute
21
+ end
22
+ ```
23
+
24
+ Now your model has these scopes:
25
+
26
+ <table>
27
+ <tr>
28
+ <td>
29
+ for <b>created_at</b>
30
+ </td>
31
+ <td>
32
+ for <b>birthday</b>
33
+ </td>
34
+ </tr>
35
+ <tr>
36
+ <td valign="top">
37
+ <ul>
38
+ <li>created_within(from, to)</li>
39
+ <li>created_within_days(from, to)</li>
40
+ <li>created_within_months(from, to)</li>
41
+ <li>created_within_years(from, to)</li>
42
+ <li>created_on_day(t)</li>
43
+ <li>created_on_month(t)</li>
44
+ <li>created_on_year(t)</li>
45
+ <li>created_before(t)</li>
46
+ <li>created_before_day(t)</li>
47
+ <li>created_before_month(t)</li>
48
+ <li>created_before_year(t)</li>
49
+ <li>created_after(t)</li>
50
+ <li>created_after_day(t)</li>
51
+ <li>created_after_month(t)</li>
52
+ <li>created_after_year(t)</li>
53
+ <li>created_on_or_before(t)</li>
54
+ <li>created_on_or_before_day(t)</li>
55
+ <li>created_on_or_before_month(t)</li>
56
+ <li>created_on_or_before_year(t)</li>
57
+ <li>created_on_or_after(t)</li>
58
+ <li>created_on_or_after_day(t)</li>
59
+ <li>created_on_or_after_month(t)</li>
60
+ <li>created_on_or_after_year(t)</li>
61
+ </ul>
62
+ </td>
63
+ <td valign="top">
64
+ <ul>
65
+ <li>birthday_within_days(from, to)</li>
66
+ <li>birthday_within_months(from, to)</li>
67
+ <li>birthday_within_years(from, to)</li>
68
+ <li>birthday_on_day(t)</li>
69
+ <li>birthday_on_month(t)</li>
70
+ <li>birthday_on_year(t)</li>
71
+ <li>birthday_before_day(t)</li>
72
+ <li>birthday_before_month(t)</li>
73
+ <li>birthday_before_year(t)</li>
74
+ <li>birthday_after_day(t)</li>
75
+ <li>birthday_after_month(t)</li>
76
+ <li>birthday_after_year(t)</li>
77
+ <li>birthday_on_or_before_day(t)</li>
78
+ <li>birthday_on_or_before_month(t)</li>
79
+ <li>birthday_on_or_before_year(t)</li>
80
+ <li>birthday_on_or_after_day(t)</li>
81
+ <li>birthday_on_or_after_month(t)</li>
82
+ <li>birthday_on_or_after_year(t)</li>
83
+ </ul>
84
+ </td>
85
+ </tr>
86
+ </table>
87
+
88
+ Examples:
89
+
90
+ ```ruby
91
+ # All records created yesterday (in current `::Time.zone`)
92
+ MyModel.created_on_day(Date.yesterday)
93
+
94
+ # Records created since 11 Sep 2001 (in current `::Time.zone`)
95
+ MyModel.created_on_or_after("2001.09.11")
96
+
97
+ # Records create since 11 Sep 2001 (in New York). Yes, the result may differ to previous example!
98
+ MyModel.created_on_or_after("2001.09.11", time_zone: "Eastern Time (US & Canada)")
99
+
100
+ # Records with birthday in 2015
101
+ MyModel.birthday_on_year(Date.new 2015)
102
+ ```
103
+
104
+ ## Time-zone support
105
+
106
+ You know, when it is Sunday in San Francisco, it is Monday in Manila!
107
+ All parameters passed to a date/time scopes are first converted to a
108
+ project-specific (`::Time.zone`) or specified (`time_zone: "XXX"` param) time-zone with the help
109
+ of magic ActiveSupport's `#in_time_zone` helper. See `rake time:zones:all` for
110
+ all supported time-zones.
111
+
112
+ ## Additional options
113
+
114
+ You can pass a default time-zone and custom scopes' prefix to a `date(time)_scopes` method:
115
+
116
+ ```ruby
117
+ # app/models/my_model.rb
118
+ class MyModel < ActiveRecord::Base
119
+ datetime_scopes :created_at, prefix: "issued", time_zone: "Ekaterinburg"
120
+ end
121
+
122
+ # All records created yesterday (in Ekaterinburg)
123
+ MyModel.issued_on_day(Date.yesterday)
124
+ ```
125
+
126
+ ## TODO
127
+
128
+ - Complete pending tests!
129
+ - ...
130
+
131
+ ## Contributing
132
+
133
+ Any feedback is welcome!
134
+
135
+ ## License
136
+
137
+ Distributed under the MIT License (see LICENSE.txt).
138
+
139
+ Copyright &copy; 2015. Alexey Chernenkov
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,25 @@
1
+ lib = File.expand_path("../lib", __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require "datetime-scopes/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "datetime-scopes"
7
+ spec.version = DateTimeScopes::VERSION
8
+ spec.authors = ["Alexey Chernenkov"]
9
+ spec.email = ["laise@pisem.net"]
10
+ spec.summary = "Date/time scopes for ActiveRecord models you always missed!"
11
+ spec.description = spec.summary
12
+ spec.homepage = "https://github.com/907th/datetime-scopes"
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files -z`.split("\x0")
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_development_dependency "bundler", "~> 1.11.2"
21
+ spec.add_development_dependency "rake", "~> 10.4.2"
22
+
23
+ spec.add_dependency "activerecord", ">= 4.0"
24
+ spec.add_dependency "activesupport", ">= 4.0"
25
+ end
@@ -0,0 +1,8 @@
1
+ require "active_record"
2
+ require "active_support/core_ext/date"
3
+ require "active_support/core_ext/time"
4
+ require "active_support/core_ext/date_time"
5
+
6
+ require "datetime-scopes/active_record_extension"
7
+
8
+ ActiveRecord::Base.send :include, DateTimeScopes::ActiveRecordExtension
@@ -0,0 +1,13 @@
1
+ module DateTimeScopes
2
+ class AbstractProxy
3
+ def initialize(klass:, attribute:, time_zone:)
4
+ @klass = klass
5
+ @attribute = attribute
6
+ @time_zone = time_zone
7
+ end
8
+
9
+ def proxy_methods
10
+ raise "Must be implemented in sub-class"
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,45 @@
1
+ require_relative "datetime_proxy"
2
+ require_relative "date_proxy"
3
+
4
+ module DateTimeScopes
5
+ module ActiveRecordExtension
6
+ def self.included(base)
7
+ base.extend ClassMethods
8
+ end
9
+
10
+ module ClassMethods
11
+ def datetime_scopes(attr, prefix: nil, time_zone: ::Time.zone)
12
+ proxy = DateTimeProxy.new(
13
+ klass: self,
14
+ attribute: "#{table_name}.#{attr}",
15
+ time_zone: time_zone
16
+ )
17
+ prefix = datetime_scope_prefix(attr) if prefix.nil?
18
+ declare_datetime_scopes prefix, proxy
19
+ end
20
+
21
+ def date_scopes(attr, prefix: nil, time_zone: nil)
22
+ proxy = DateProxy.new(
23
+ klass: self,
24
+ attribute: "#{table_name}.#{attr}",
25
+ time_zone: time_zone
26
+ )
27
+ prefix = datetime_scope_prefix(attr) if prefix.nil?
28
+ declare_datetime_scopes prefix, proxy
29
+ end
30
+
31
+ private
32
+
33
+ def declare_datetime_scopes(prefix, proxy)
34
+ proxy.proxy_methods.each do |method_name|
35
+ scope_name = "#{prefix}_#{method_name}"
36
+ scope scope_name, -> (*attrs) { proxy.send method_name, *attrs }
37
+ end
38
+ end
39
+
40
+ def datetime_scope_prefix(attr)
41
+ attr.to_s.sub /_(at|on|time|date)$/, ""
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,82 @@
1
+ require_relative "abstract_proxy"
2
+
3
+ module DateTimeScopes
4
+ class DateProxy < AbstractProxy
5
+ PROXY_METHODS = %w[
6
+ within_days
7
+ within_months
8
+ within_years
9
+ on_day
10
+ on_month
11
+ on_year
12
+ before_day
13
+ before_month
14
+ before_year
15
+ after_day
16
+ after_month
17
+ after_year
18
+ on_or_before_day
19
+ on_or_before_month
20
+ on_or_before_year
21
+ on_or_after_day
22
+ on_or_after_month
23
+ on_or_after_year
24
+ ].freeze
25
+
26
+ def proxy_methods
27
+ PROXY_METHODS
28
+ end
29
+
30
+ # Intervals
31
+
32
+ def within_days(from, to, time_zone: @time_zone)
33
+ @klass.where(
34
+ "#{@attribute}) >= ? AND #{@attribute} <= ?",
35
+ from.in_time_zone(time_zone).to_date,
36
+ to.in_time_zone(time_zone).to_date
37
+ )
38
+ end
39
+
40
+ def within_months(from, to, time_zone: @time_zone)
41
+ within_days(
42
+ from.in_time_zone(time_zone).beginning_of_month,
43
+ to.in_time_zone(time_zone).end_of_month,
44
+ time_zone: time_zone
45
+ )
46
+ end
47
+
48
+ def within_years(from, to, time_zone: @time_zone)
49
+ within_days(
50
+ from.in_time_zone(time_zone).beginning_of_year,
51
+ to.in_time_zone(time_zone).end_of_year,
52
+ time_zone: time_zone
53
+ )
54
+ end
55
+
56
+ # Specific day/month/year
57
+
58
+ def on_day(day, time_zone: @time_zone) ; within_days day, day, time_zone: time_zone ; end
59
+ def on_month(month, time_zone: @time_zone) ; within_months month, month, time_zone: time_zone ; end
60
+ def on_year(year, time_zone: @time_zone) ; within_years year, year, time_zone: time_zone ; end
61
+
62
+ # Strict equations
63
+
64
+ def before_day(day, time_zone: @time_zone) ; @klass.where "#{@attribute} < ?", day.in_time_zone(time_zone).to_date ; end
65
+ def before_month(month, time_zone: @time_zone) ; before_day month.in_time_zone(time_zone).beginning_of_month, time_zone: time_zone ; end
66
+ def before_year(year, time_zone: @time_zone) ; before_day year.in_time_zone(time_zone).beginning_of_year, time_zone: time_zone ; end
67
+
68
+ def after_day(day, time_zone: @time_zone) ; @klass.where "#{@attribute} > ?", day.in_time_zone(time_zone).to_date ; end
69
+ def after_month(month, time_zone: @time_zone) ; after_day month.in_time_zone(time_zone).end_of_month, time_zone: time_zone ; end
70
+ def after_year(year, time_zone: @time_zone) ; after_day year.in_time_zone(time_zone).end_of_year, time_zone: time_zone ; end
71
+
72
+ # Non-strict equations
73
+
74
+ def on_or_before_day(day, time_zone: @time_zone) ; @klass.where "#{@attribute} <= ?", day.in_time_zone(time_zone).to_date ; end
75
+ def on_or_before_month(month, time_zone: @time_zone) ; on_or_before_day month.in_time_zone(time_zone).end_of_month, time_zone: time_zone ; end
76
+ def on_or_before_year(year, time_zone: @time_zone) ; on_or_before_day year.in_time_zone(time_zone).end_of_year, time_zone: time_zone ; end
77
+
78
+ def on_or_after_day(day, time_zone: @time_zone) ; @klass.where "#{@attribute} >= ?", day.in_time_zone(time_zone).to_date ; end
79
+ def on_or_after_month(month, time_zone: @time_zone) ; on_or_after_day month.in_time_zone(time_zone).beginning_of_month, time_zone: time_zone ; end
80
+ def on_or_after_year(year, time_zone: @time_zone) ; on_or_after_day year.in_time_zone(time_zone).beginning_of_year, time_zone: time_zone ; end
81
+ end
82
+ end
@@ -0,0 +1,99 @@
1
+ require_relative "abstract_proxy"
2
+
3
+ module DateTimeScopes
4
+ class DateTimeProxy < AbstractProxy
5
+ PROXY_METHODS = %w[
6
+ within
7
+ within_days
8
+ within_months
9
+ within_years
10
+ on_day
11
+ on_month
12
+ on_year
13
+ before
14
+ before_day
15
+ before_month
16
+ before_year
17
+ after
18
+ after_day
19
+ after_month
20
+ after_year
21
+ on_or_before
22
+ on_or_before_day
23
+ on_or_before_month
24
+ on_or_before_year
25
+ on_or_after
26
+ on_or_after_day
27
+ on_or_after_month
28
+ on_or_after_year
29
+ ].freeze
30
+
31
+ def proxy_methods
32
+ PROXY_METHODS
33
+ end
34
+
35
+ # Intervals
36
+
37
+ def within(from, to, time_zone: @time_zone)
38
+ @klass.where(
39
+ "#{@attribute} >= ? AND #{@attribute} <= ?",
40
+ from.in_time_zone(time_zone),
41
+ to.in_time_zone(time_zone)
42
+ )
43
+ end
44
+
45
+ def within_days(from, to, time_zone: @time_zone)
46
+ within(
47
+ from.in_time_zone(time_zone).beginning_of_day,
48
+ to.in_time_zone(time_zone).end_of_day,
49
+ time_zone: time_zone
50
+ )
51
+ end
52
+
53
+ def within_months(from, to, time_zone: @time_zone)
54
+ within(
55
+ from.in_time_zone(time_zone).beginning_of_month,
56
+ to.in_time_zone(time_zone).end_of_month,
57
+ time_zone: time_zone
58
+ )
59
+ end
60
+
61
+ def within_years(from, to, time_zone: @time_zone)
62
+ within(
63
+ from.in_time_zone(time_zone).beginning_of_year,
64
+ to.in_time_zone(time_zone).end_of_year,
65
+ time_zone: time_zone
66
+ )
67
+ end
68
+
69
+ # Specific day/month/year
70
+
71
+ def on_day(day, time_zone: @time_zone) ; within_days day, day, time_zone: time_zone ; end
72
+ def on_month(month, time_zone: @time_zone) ; within_months month, month, time_zone: time_zone ; end
73
+ def on_year(year, time_zone: @time_zone) ; within_years year, year, time_zone: time_zone ; end
74
+
75
+ # Strict equations
76
+
77
+ def before(time, time_zone: @time_zone) ; @klass.where "#{@attribute} < ?", time.in_time_zone(time_zone) ; end
78
+ def before_day(day, time_zone: @time_zone) ; before day.in_time_zone(time_zone).beginning_of_day, time_zone: time_zone ; end
79
+ def before_month(month, time_zone: @time_zone) ; before month.in_time_zone(time_zone).beginning_of_month, time_zone: time_zone ; end
80
+ def before_year(year, time_zone: @time_zone) ; before year.in_time_zone(time_zone).beginning_of_year, time_zone: time_zone ; end
81
+
82
+ def after(time, time_zone: @time_zone) ; @klass.where "#{@attribute} > ?", time.in_time_zone(time_zone) ; end
83
+ def after_day(day, time_zone: @time_zone) ; after day.in_time_zone(time_zone).end_of_day, time_zone: time_zone ; end
84
+ def after_month(month, time_zone: @time_zone) ; after month.in_time_zone(time_zone).end_of_month, time_zone: time_zone ; end
85
+ def after_year(year, time_zone: @time_zone) ; after year.in_time_zone(time_zone).end_of_year, time_zone: time_zone ; end
86
+
87
+ # Non-strict equations
88
+
89
+ def on_or_before(time, time_zone: @time_zone) ; @klass.where "#{@attribute} <= ?", time.in_time_zone(time_zone) ; end
90
+ def on_or_before_day(day, time_zone: @time_zone) ; on_or_before day.in_time_zone(time_zone).end_of_day, time_zone: time_zone ; end
91
+ def on_or_before_month(month, time_zone: @time_zone) ; on_or_before month.in_time_zone(time_zone).end_of_month, time_zone: time_zone ; end
92
+ def on_or_before_year(year, time_zone: @time_zone) ; on_or_before year.in_time_zone(time_zone).end_of_year, time_zone: time_zone ; end
93
+
94
+ def on_or_after(time, time_zone: @time_zone) ; @klass.where "#{@attribute} >= ?", time.in_time_zone(time_zone) ; end
95
+ def on_or_after_day(day, time_zone: @time_zone) ; on_or_after day.in_time_zone(time_zone).beginning_of_day, time_zone: time_zone ; end
96
+ def on_or_after_month(month, time_zone: @time_zone) ; on_or_after month.in_time_zone(time_zone).beginning_of_month, time_zone: time_zone ; end
97
+ def on_or_after_year(year, time_zone: @time_zone) ; on_or_after year.in_time_zone(time_zone).beginning_of_year, time_zone: time_zone ; end
98
+ end
99
+ end
@@ -0,0 +1,3 @@
1
+ module DateTimeScopes
2
+ VERSION = "1.0.0.alpha1"
3
+ end
@@ -0,0 +1,43 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe FooBar do
4
+ describe "::datetime_scopes" do
5
+ let!(:proxy_methods) { DateTimeScopes::DateTimeProxy::PROXY_METHODS }
6
+
7
+ it "defines datetime scopes" do
8
+ proxy_methods.each do |method_name|
9
+ expect(FooBar).to respond_to "foo_#{method_name}"
10
+ end
11
+ end
12
+
13
+ it "delegates a scope call to a proxy" do
14
+ proxy_methods.each do |method_name|
15
+ dbl = double("result")
16
+ expect_any_instance_of(DateTimeScopes::DateTimeProxy).to receive(method_name).with(1, 2, 3).and_return(dbl)
17
+ res = FooBar.send("foo_#{method_name}", 1, 2, 3)
18
+ expect(res).to eq(dbl)
19
+ end
20
+ end
21
+ end
22
+
23
+ describe "::date_scopes" do
24
+ def proxy_methods
25
+ DateTimeScopes::DateProxy::PROXY_METHODS
26
+ end
27
+
28
+ it "defines date scopes" do
29
+ proxy_methods.each do |method_name|
30
+ expect(FooBar).to respond_to "bar_#{method_name}"
31
+ end
32
+ end
33
+
34
+ it "delegates a scope call to a proxy" do
35
+ proxy_methods.each do |method_name|
36
+ dbl = double("result")
37
+ expect_any_instance_of(DateTimeScopes::DateProxy).to receive(method_name).with(1, 2, 3).and_return(dbl)
38
+ res = FooBar.send("bar_#{method_name}", 1, 2, 3)
39
+ expect(res).to eq(dbl)
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,7 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe DateTimeScopes::DateProxy do
4
+ subject { described_class.new klass: FooBar, attribute: "bar", time_zone: "Moscow" }
5
+
6
+ pending "TODO"
7
+ end
@@ -0,0 +1,7 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe DateTimeScopes::DateTimeProxy do
4
+ subject { described_class.new klass: FooBar, attribute: "foo", time_zone: "Moscow" }
5
+
6
+ pending "TODO"
7
+ end
@@ -0,0 +1,32 @@
1
+ require "codeclimate-test-reporter"
2
+ CodeClimate::TestReporter.start
3
+
4
+ require "rspec/core"
5
+ require "database_cleaner"
6
+ require "datetime-scopes"
7
+
8
+ ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:"
9
+ DatabaseCleaner.strategy = :truncation
10
+
11
+ RSpec.configure do |c|
12
+ c.before :suite do
13
+ DatabaseCleaner.clean
14
+ end
15
+ c.after :example do
16
+ DatabaseCleaner.clean
17
+ end
18
+ end
19
+
20
+
21
+ # Create table and declare AR model
22
+
23
+ ActiveRecord::Migration.verbose = false
24
+ ActiveRecord::Migration.create_table :foo_bar do |t|
25
+ t.datetime :foo
26
+ t.date :bar
27
+ end
28
+
29
+ class FooBar < ActiveRecord::Base
30
+ datetime_scopes :foo
31
+ date_scopes :bar
32
+ end
metadata ADDED
@@ -0,0 +1,122 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: datetime-scopes
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0.alpha1
5
+ platform: ruby
6
+ authors:
7
+ - Alexey Chernenkov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-02-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.11.2
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.11.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 10.4.2
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 10.4.2
41
+ - !ruby/object:Gem::Dependency
42
+ name: activerecord
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '4.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '4.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: activesupport
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '4.0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '4.0'
69
+ description: Date/time scopes for ActiveRecord models you always missed!
70
+ email:
71
+ - laise@pisem.net
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - ".gitignore"
77
+ - ".rspec"
78
+ - ".travis.yml"
79
+ - Gemfile
80
+ - LICENSE.txt
81
+ - README.md
82
+ - Rakefile
83
+ - datetime-scopes.gemspec
84
+ - lib/datetime-scopes.rb
85
+ - lib/datetime-scopes/abstract_proxy.rb
86
+ - lib/datetime-scopes/active_record_extension.rb
87
+ - lib/datetime-scopes/date_proxy.rb
88
+ - lib/datetime-scopes/datetime_proxy.rb
89
+ - lib/datetime-scopes/version.rb
90
+ - spec/datetime-scopes/active_record_extension_spec.rb
91
+ - spec/datetime-scopes/date_proxy_spec.rb
92
+ - spec/datetime-scopes/datetime_proxy_spec.rb
93
+ - spec/spec_helper.rb
94
+ homepage: https://github.com/907th/datetime-scopes
95
+ licenses:
96
+ - MIT
97
+ metadata: {}
98
+ post_install_message:
99
+ rdoc_options: []
100
+ require_paths:
101
+ - lib
102
+ required_ruby_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ required_rubygems_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">"
110
+ - !ruby/object:Gem::Version
111
+ version: 1.3.1
112
+ requirements: []
113
+ rubyforge_project:
114
+ rubygems_version: 2.4.8
115
+ signing_key:
116
+ specification_version: 4
117
+ summary: Date/time scopes for ActiveRecord models you always missed!
118
+ test_files:
119
+ - spec/datetime-scopes/active_record_extension_spec.rb
120
+ - spec/datetime-scopes/date_proxy_spec.rb
121
+ - spec/datetime-scopes/datetime_proxy_spec.rb
122
+ - spec/spec_helper.rb