timespan 0.4.3 → 0.4.4
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/README.md +33 -9
- data/VERSION +1 -1
- data/lib/timespan/mongoid/timespanned.rb +35 -5
- data/spec/timespan/mongoid/models/account_3x.rb +8 -2
- data/spec/timespan/mongoid/models/time_period.rb +10 -0
- data/spec/timespan/mongoid/mongoid_timespan_spec.rb +21 -0
- data/timespan.gemspec +2 -1
- metadata +3 -2
data/README.md
CHANGED
@@ -107,9 +107,19 @@ da:
|
|
107
107
|
|
108
108
|
## Timespan for Mongoid
|
109
109
|
|
110
|
-
Tested and works with Mongoid 2.4 and 3.0
|
110
|
+
Tested and works with Mongoid 2.4 and 3.0+
|
111
|
+
|
112
|
+
Custom Timespan datatype:
|
113
|
+
|
114
|
+
`Mongoid::Timespanned` adds the following class level macros:
|
115
|
+
|
116
|
+
* `timespan_methods name`
|
117
|
+
* `timespan_delegates name`
|
118
|
+
* `timespan_setters name`
|
119
|
+
|
120
|
+
* `timespan_container_delegates container, timespan_field, *names`
|
121
|
+
* `timespan_container_delegate container, timespan_field, name`
|
111
122
|
|
112
|
-
Custom Timespan datatype
|
113
123
|
|
114
124
|
```ruby
|
115
125
|
require 'timespan/mongoid'
|
@@ -118,17 +128,25 @@ class Account
|
|
118
128
|
include Mongoid::Document
|
119
129
|
include Mongoid::Timespanned
|
120
130
|
|
121
|
-
field :period, :type =>
|
131
|
+
field :period, :type => Timespan
|
122
132
|
|
123
133
|
timespan_methods :period
|
134
|
+
|
135
|
+
embeds_one :time_period
|
136
|
+
timespan_container_delegates :time_period, :dates, :start, :end
|
124
137
|
end
|
125
|
-
```
|
126
138
|
|
127
|
-
|
139
|
+
class TimePeriod
|
140
|
+
include Mongoid::Document
|
141
|
+
include Mongoid::Timespanned
|
128
142
|
|
129
|
-
|
130
|
-
|
131
|
-
|
143
|
+
field :dates, :type => ::Timespan, :between => true
|
144
|
+
|
145
|
+
embedded_in :account
|
146
|
+
|
147
|
+
timespan_methods :dates
|
148
|
+
end
|
149
|
+
```
|
132
150
|
|
133
151
|
Usage example:
|
134
152
|
|
@@ -140,11 +158,17 @@ account.period.end_date
|
|
140
158
|
account.period.days
|
141
159
|
account.period.duration # => Duration
|
142
160
|
|
161
|
+
# using timespan setters defined by timespan_methods
|
143
162
|
account.period_start = tomorrow
|
144
163
|
account.period_end = 5.days.from_now
|
145
164
|
|
165
|
+
# using timespan delegates defined by timespan_methods
|
146
166
|
account.start_date == tomorrow
|
147
167
|
account.end_date == tomorrow
|
168
|
+
|
169
|
+
# using timespan_container_delegates on time_period
|
170
|
+
account.start_date = tomorrow
|
171
|
+
account.end_date = tomorrow + 5.days
|
148
172
|
```
|
149
173
|
|
150
174
|
## Searching periods
|
@@ -162,7 +186,7 @@ Make it easier by introducing a class helper:
|
|
162
186
|
```ruby
|
163
187
|
class Account
|
164
188
|
include Mongoid::Document
|
165
|
-
field :period, :type =>
|
189
|
+
field :period, :type => Timespan
|
166
190
|
|
167
191
|
def self.between from, to
|
168
192
|
Account.where(:'period.from'.gt => from.to_i, :'period.to'.lte => to.to_i)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.4
|
@@ -8,21 +8,51 @@ module Mongoid
|
|
8
8
|
timespan_setters name
|
9
9
|
end
|
10
10
|
|
11
|
-
|
11
|
+
# fx Account.timespan_container_delegates :period, :dates, :start, :end
|
12
|
+
# start_date= -> period.dates_start=
|
13
|
+
# end_date= -> period.dates_end=
|
14
|
+
def timespan_container_delegates container, timespan, *names
|
15
|
+
names = [:start, :end, :duration] if names.first == :all
|
16
|
+
names.flatten.each do |name|
|
17
|
+
timespan_container_delegate container, timespan, name
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def timespan_container_delegate container, timespan, name
|
22
|
+
case name.to_sym
|
23
|
+
when :start
|
24
|
+
define_method "start_date=" do |date|
|
25
|
+
send(container).send("#{timespan}_start=", date)
|
26
|
+
end
|
27
|
+
when :end
|
28
|
+
define_method "end_date=" do |date|
|
29
|
+
send(container).send("#{timespan}_end=", date)
|
30
|
+
end
|
31
|
+
when :duration
|
32
|
+
define_method "duration=" do |date|
|
33
|
+
send(container).send("#{timespan}_duration=", date)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def timespan_delegates name = :period
|
12
39
|
delegate :time_left, :duration, :start_date, :end_date, to: name
|
13
40
|
end
|
14
41
|
|
15
42
|
def timespan_setters name = :period
|
16
43
|
define_method :"#{name}_start=" do |date|
|
17
|
-
|
44
|
+
options = self.send(name) ? {end_date: self.send(name).end_date} : {}
|
45
|
+
self.send "#{name}=", ::Timespan.new(options.merge(start_date: date))
|
18
46
|
end
|
19
47
|
|
20
48
|
define_method :"#{name}_end=" do |date|
|
21
|
-
self.send
|
49
|
+
options = self.send(name) ? {start_date: self.send(name).start_date} : {}
|
50
|
+
self.send "#{name}=", ::Timespan.new(options.merge(end_date: date))
|
22
51
|
end
|
23
52
|
|
24
|
-
define_method :"#{name}
|
25
|
-
self.send
|
53
|
+
define_method :"#{name}_duration=" do |duration|
|
54
|
+
options = self.send(name) ? {start_date: self.send(name).start_date} : {}
|
55
|
+
self.send "#{name}=", ::Timespan.new(options.merge(duration: duration))
|
26
56
|
end
|
27
57
|
end
|
28
58
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'timespan/mongoid/models/time_period'
|
2
|
+
|
1
3
|
class Account
|
2
4
|
include Mongoid::Document
|
3
5
|
include Mongoid::Timespanned
|
@@ -6,9 +8,13 @@ class Account
|
|
6
8
|
|
7
9
|
timespan_methods :period
|
8
10
|
|
11
|
+
embeds_one :time_period
|
12
|
+
timespan_container_delegates :time_period, :dates, :all#:start, :end
|
13
|
+
|
9
14
|
def self.create_it! duration
|
10
|
-
|
11
|
-
|
15
|
+
acc = self.new period: ::Timespan.new(duration: duration), time_period: ::TimePeriod.new
|
16
|
+
acc.time_period.dates_duration = 1.day
|
17
|
+
acc
|
12
18
|
end
|
13
19
|
|
14
20
|
def self.between from, to
|
@@ -44,16 +44,37 @@ describe TimeSpan do
|
|
44
44
|
DateTime.parse(subject.period.start_date.to_s).strftime('%d %b %Y').should == Date.today.strftime('%d %b %Y')
|
45
45
|
end
|
46
46
|
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'Setters and delegates' do
|
50
|
+
let(:account) do
|
51
|
+
Account.create_it! 2.days
|
52
|
+
end
|
47
53
|
|
48
54
|
describe 'set new start_date' do
|
49
55
|
before :each do
|
50
56
|
subject.period_start = tomorrow
|
57
|
+
subject.period_end = tomorrow + 5.days
|
58
|
+
|
59
|
+
subject.end_date = tomorrow + 3.days
|
60
|
+
end
|
61
|
+
|
62
|
+
specify do
|
63
|
+
Date.parse(subject.time_period.end_date.to_s).should == tomorrow + 3.days
|
64
|
+
end
|
65
|
+
|
66
|
+
specify do
|
67
|
+
subject.period.should be_a Timespan
|
51
68
|
end
|
52
69
|
|
53
70
|
specify do
|
54
71
|
subject.start_date.should == subject.period.start_date
|
55
72
|
end
|
56
73
|
|
74
|
+
specify do
|
75
|
+
subject.end_date.should == subject.period.end_date
|
76
|
+
end
|
77
|
+
|
57
78
|
specify do
|
58
79
|
Date.parse(subject.start_date.to_s).should == tomorrow
|
59
80
|
end
|
data/timespan.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "timespan"
|
8
|
-
s.version = "0.4.
|
8
|
+
s.version = "0.4.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Kristian Mandrup"]
|
@@ -42,6 +42,7 @@ Gem::Specification.new do |s|
|
|
42
42
|
"spec/timespan/locales/duration_da.yml",
|
43
43
|
"spec/timespan/mongoid/models/account_2x.rb",
|
44
44
|
"spec/timespan/mongoid/models/account_3x.rb",
|
45
|
+
"spec/timespan/mongoid/models/time_period.rb",
|
45
46
|
"spec/timespan/mongoid/mongoid_search_spec.rb",
|
46
47
|
"spec/timespan/mongoid/mongoid_setup.rb",
|
47
48
|
"spec/timespan/mongoid/mongoid_timespan_spec.rb",
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: timespan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -220,6 +220,7 @@ files:
|
|
220
220
|
- spec/timespan/locales/duration_da.yml
|
221
221
|
- spec/timespan/mongoid/models/account_2x.rb
|
222
222
|
- spec/timespan/mongoid/models/account_3x.rb
|
223
|
+
- spec/timespan/mongoid/models/time_period.rb
|
223
224
|
- spec/timespan/mongoid/mongoid_search_spec.rb
|
224
225
|
- spec/timespan/mongoid/mongoid_setup.rb
|
225
226
|
- spec/timespan/mongoid/mongoid_timespan_spec.rb
|
@@ -247,7 +248,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
247
248
|
version: '0'
|
248
249
|
segments:
|
249
250
|
- 0
|
250
|
-
hash:
|
251
|
+
hash: 1165470586481426530
|
251
252
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
252
253
|
none: false
|
253
254
|
requirements:
|