mongoid-time_range 0.0.1 → 0.1.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.
- data/Gemfile +4 -0
- data/README.md +8 -2
- data/lib/enumerable/associate.rb +1 -1
- data/lib/mongoid/time_range.rb +33 -23
- data/lib/mongoid/time_range/global.rb +3 -0
- data/lib/mongoid/time_range/version.rb +6 -2
- data/mongoid-time_range.gemspec +2 -6
- data/spec/global_spec.rb +10 -0
- data/spec/integration_spec.rb +41 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/support/document.rb +1 -5
- data/spec/support/mongoid.yml +1 -1
- data/spec/time_range_spec.rb +7 -7
- metadata +5 -50
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -10,6 +10,12 @@ In your Gemfile:
|
|
10
10
|
gem 'mongoid-time_range'
|
11
11
|
```
|
12
12
|
|
13
|
+
If you want to use ::TimeRange instead of Mongoid::TimeRange, your Gemfile must include a additional require statement:
|
14
|
+
|
15
|
+
```ruby
|
16
|
+
gem 'mongoid-time_range', require: 'mongoid/time_range/global'
|
17
|
+
```
|
18
|
+
|
13
19
|
## Usage
|
14
20
|
|
15
21
|
```ruby
|
@@ -22,10 +28,10 @@ end
|
|
22
28
|
|
23
29
|
```ruby
|
24
30
|
document = Document.create
|
25
|
-
document.range # =>
|
31
|
+
document.range # => { from: 2013-01-01 00:00:00 +0100, to: nil }
|
26
32
|
|
27
33
|
year2013 = Document.create(range: { from: Time.now.at_beginning_of_year, to: Time.now.end_of_year })
|
28
|
-
year2013.range # =>
|
34
|
+
year2013.range # => { from: 2013-01-01 00:00:00 +0100, to: 2013-12-31 23:59:59 +0100 }
|
29
35
|
```
|
30
36
|
|
31
37
|
## Contributing
|
data/lib/enumerable/associate.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
module Enumerable # Remove
|
1
|
+
module Enumerable # Remove this as soon as it is integrated into ActiveSupport.
|
2
2
|
# Associates keys with values and returns a Hash.
|
3
3
|
#
|
4
4
|
# If you have an enumerable of keys and want to associate them with values,
|
data/lib/mongoid/time_range.rb
CHANGED
@@ -1,33 +1,43 @@
|
|
1
1
|
require 'enumerable/associate'
|
2
|
-
require 'mongoid'
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
3
|
+
module Mongoid
|
4
|
+
class TimeRange < Struct.new(:from, :to)
|
5
|
+
def initialize(*)
|
6
|
+
super
|
7
|
+
self.from ||= Time.now
|
8
|
+
end
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
def mongoize
|
11
|
+
self.class.mongoize(self)
|
12
|
+
end
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
def ==(other)
|
15
|
+
self.from == other.from && self.to == other.to
|
16
|
+
end
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
def to_h
|
19
|
+
{ from: from, to: to }
|
20
|
+
end
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
%w[from to].associate { |key| object[key.to_sym].mongoize }
|
22
|
+
def to_a
|
23
|
+
[from, to]
|
25
24
|
end
|
26
25
|
|
27
|
-
def
|
28
|
-
|
29
|
-
|
30
|
-
|
26
|
+
def inspect
|
27
|
+
to_h.inspect
|
28
|
+
end
|
29
|
+
|
30
|
+
class << self
|
31
|
+
def mongoize(object)
|
32
|
+
[:from, :to].associate { |key| Time.mongoize(object[key]) }
|
33
|
+
end
|
34
|
+
|
35
|
+
def demongoize(hash)
|
36
|
+
hash ||= {}
|
37
|
+
hash = [:from, :to].associate { |key| Time.demongoize(hash[key]) }
|
38
|
+
|
39
|
+
new(*hash.values)
|
40
|
+
end
|
31
41
|
end
|
32
42
|
end
|
33
|
-
end
|
43
|
+
end
|
data/mongoid-time_range.gemspec
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
$: << File.expand_path('../lib', __FILE__)
|
2
|
-
|
2
|
+
require 'mongoid/time_range/version'
|
3
3
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
5
|
gem.name = 'mongoid-time_range'
|
6
|
-
gem.version =
|
6
|
+
gem.version = Mongoid::TimeRange::VERSION
|
7
7
|
gem.authors = 'Mario Uher'
|
8
8
|
gem.email = 'uher.mario@gmail.com'
|
9
9
|
gem.homepage = 'https://github.com/haihappen/mongoid-time_range'
|
@@ -14,8 +14,4 @@ Gem::Specification.new do |gem|
|
|
14
14
|
gem.require_path = 'lib'
|
15
15
|
|
16
16
|
gem.add_dependency 'mongoid'
|
17
|
-
|
18
|
-
gem.add_development_dependency 'minitest'
|
19
|
-
gem.add_development_dependency 'rake'
|
20
|
-
gem.add_development_dependency 'timecop'
|
21
17
|
end
|
data/spec/global_spec.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
require_relative 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Mongoid::TimeRange integration' do
|
4
|
+
before { Timecop.freeze }
|
5
|
+
|
6
|
+
|
7
|
+
describe 'create document without any attributes' do
|
8
|
+
subject { Document.create }
|
9
|
+
|
10
|
+
|
11
|
+
it 'sets from to current time and to to nil' do
|
12
|
+
subject.range.from.to_i.must_equal Time.now.to_i
|
13
|
+
subject.range.to.must_be_nil
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
describe 'create document only with from attribute' do
|
19
|
+
subject { Document.create(range: { from: Time.now.beginning_of_year }) }
|
20
|
+
|
21
|
+
|
22
|
+
it 'sets from to given time and to to nil' do
|
23
|
+
subject.range.from.to_i.must_equal Time.now.beginning_of_year.to_i
|
24
|
+
subject.range.to.must_be_nil
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
describe 'create document with both attributes' do
|
30
|
+
subject { Document.create(range: { from: Time.now.beginning_of_year, to: Time.now.end_of_year }) }
|
31
|
+
|
32
|
+
|
33
|
+
it 'sets from and to to given time' do
|
34
|
+
subject.range.from.to_i.must_equal Time.now.beginning_of_year.to_i
|
35
|
+
subject.range.to.to_i.must_equal Time.now.end_of_year.to_i
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
after { Timecop.return }
|
41
|
+
end
|
data/spec/spec_helper.rb
CHANGED
data/spec/support/document.rb
CHANGED
data/spec/support/mongoid.yml
CHANGED
data/spec/time_range_spec.rb
CHANGED
@@ -65,7 +65,7 @@ describe Mongoid::TimeRange do
|
|
65
65
|
|
66
66
|
describe 'having both from and to' do
|
67
67
|
it 'returns database friendly value' do
|
68
|
-
value.must_equal
|
68
|
+
value.must_equal from: from.mongoize, to: to.mongoize
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
@@ -75,7 +75,7 @@ describe Mongoid::TimeRange do
|
|
75
75
|
|
76
76
|
|
77
77
|
it 'returns database friendly value' do
|
78
|
-
value.must_equal
|
78
|
+
value.must_equal from: from.mongoize, to: nil
|
79
79
|
end
|
80
80
|
end
|
81
81
|
end
|
@@ -88,7 +88,7 @@ describe Mongoid::TimeRange do
|
|
88
88
|
|
89
89
|
describe 'having both from and to' do
|
90
90
|
it 'returns database friendly value' do
|
91
|
-
value.must_equal
|
91
|
+
value.must_equal from: from.mongoize, to: to.mongoize
|
92
92
|
end
|
93
93
|
end
|
94
94
|
|
@@ -98,7 +98,7 @@ describe Mongoid::TimeRange do
|
|
98
98
|
|
99
99
|
|
100
100
|
it 'returns database friendly value' do
|
101
|
-
value.must_equal
|
101
|
+
value.must_equal from: from.mongoize, to: nil
|
102
102
|
end
|
103
103
|
end
|
104
104
|
end
|
@@ -110,7 +110,7 @@ describe Mongoid::TimeRange do
|
|
110
110
|
|
111
111
|
describe 'having both from and to' do
|
112
112
|
it 'returns database friendly value' do
|
113
|
-
value.must_equal
|
113
|
+
value.must_equal from: from.mongoize, to: to.mongoize
|
114
114
|
end
|
115
115
|
end
|
116
116
|
|
@@ -120,7 +120,7 @@ describe Mongoid::TimeRange do
|
|
120
120
|
|
121
121
|
|
122
122
|
it 'returns database friendly value' do
|
123
|
-
value.must_equal
|
123
|
+
value.must_equal from: from.mongoize, to: nil
|
124
124
|
end
|
125
125
|
end
|
126
126
|
end
|
@@ -128,7 +128,7 @@ describe Mongoid::TimeRange do
|
|
128
128
|
|
129
129
|
|
130
130
|
describe 'self.demongoize' do
|
131
|
-
let(:value) { Mongoid::TimeRange.demongoize(
|
131
|
+
let(:value) { Mongoid::TimeRange.demongoize(from: from, to: to) }
|
132
132
|
|
133
133
|
|
134
134
|
describe 'having both from and to' do
|
metadata
CHANGED
@@ -2,14 +2,14 @@
|
|
2
2
|
name: mongoid-time_range
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0
|
5
|
+
version: 0.1.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Mario Uher
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01-
|
12
|
+
date: 2013-01-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -27,54 +27,6 @@ dependencies:
|
|
27
27
|
- !ruby/object:Gem::Version
|
28
28
|
version: '0'
|
29
29
|
none: false
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
|
-
version_requirements: !ruby/object:Gem::Requirement
|
32
|
-
requirements:
|
33
|
-
- - ! '>='
|
34
|
-
- !ruby/object:Gem::Version
|
35
|
-
version: '0'
|
36
|
-
none: false
|
37
|
-
name: minitest
|
38
|
-
type: :development
|
39
|
-
prerelease: false
|
40
|
-
requirement: !ruby/object:Gem::Requirement
|
41
|
-
requirements:
|
42
|
-
- - ! '>='
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
version: '0'
|
45
|
-
none: false
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
version_requirements: !ruby/object:Gem::Requirement
|
48
|
-
requirements:
|
49
|
-
- - ! '>='
|
50
|
-
- !ruby/object:Gem::Version
|
51
|
-
version: '0'
|
52
|
-
none: false
|
53
|
-
name: rake
|
54
|
-
type: :development
|
55
|
-
prerelease: false
|
56
|
-
requirement: !ruby/object:Gem::Requirement
|
57
|
-
requirements:
|
58
|
-
- - ! '>='
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: '0'
|
61
|
-
none: false
|
62
|
-
- !ruby/object:Gem::Dependency
|
63
|
-
version_requirements: !ruby/object:Gem::Requirement
|
64
|
-
requirements:
|
65
|
-
- - ! '>='
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
version: '0'
|
68
|
-
none: false
|
69
|
-
name: timecop
|
70
|
-
type: :development
|
71
|
-
prerelease: false
|
72
|
-
requirement: !ruby/object:Gem::Requirement
|
73
|
-
requirements:
|
74
|
-
- - ! '>='
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
version: '0'
|
77
|
-
none: false
|
78
30
|
description: Mongoid::TimeRange defines a TimeRange type for your Mongoid apps.
|
79
31
|
email: uher.mario@gmail.com
|
80
32
|
executables: []
|
@@ -88,8 +40,11 @@ files:
|
|
88
40
|
- Rakefile
|
89
41
|
- lib/enumerable/associate.rb
|
90
42
|
- lib/mongoid/time_range.rb
|
43
|
+
- lib/mongoid/time_range/global.rb
|
91
44
|
- lib/mongoid/time_range/version.rb
|
92
45
|
- mongoid-time_range.gemspec
|
46
|
+
- spec/global_spec.rb
|
47
|
+
- spec/integration_spec.rb
|
93
48
|
- spec/spec_helper.rb
|
94
49
|
- spec/support/connection.rb
|
95
50
|
- spec/support/document.rb
|