timespan 0.4.1 → 0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/timespan/mongoid.rb +1 -0
- data/lib/timespan/mongoid/mongoid_3x.rb +42 -32
- data/lib/timespan/mongoid/timespanned.rb +21 -0
- data/spec/timespan/mongoid/models/account_3x.rb +5 -0
- data/spec/timespan/mongoid/mongoid_timespan_spec.rb +14 -0
- data/timespan.gemspec +3 -2
- metadata +4 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.2
|
data/lib/timespan/mongoid.rb
CHANGED
@@ -1,6 +1,18 @@
|
|
1
1
|
class Timespan
|
2
|
-
|
3
|
-
|
2
|
+
Serializer = Mongoid::Fields::Timespan
|
3
|
+
|
4
|
+
# See http://mongoid.org/en/mongoid/docs/upgrading.html
|
5
|
+
|
6
|
+
# Serialize a Timespan or a Hash (with Timespan units) or a Duration in some form to
|
7
|
+
# a BSON serializable type.
|
8
|
+
#
|
9
|
+
# @param [Timespan, Hash, Integer, String] value
|
10
|
+
# @return [Hash] Timespan in seconds
|
11
|
+
def mongoize
|
12
|
+
{:from => Serializer.serialize_time(start_time), :to => Serializer.serialize_time(end_time), :duration => duration.total }
|
13
|
+
end
|
14
|
+
|
15
|
+
class << self
|
4
16
|
# See http://mongoid.org/en/mongoid/docs/upgrading.html
|
5
17
|
|
6
18
|
# Serialize a Timespan or a Hash (with Timespan units) or a Duration in some form to
|
@@ -8,39 +20,37 @@ class Timespan
|
|
8
20
|
#
|
9
21
|
# @param [Timespan, Hash, Integer, String] value
|
10
22
|
# @return [Hash] Timespan in seconds
|
11
|
-
def mongoize
|
12
|
-
|
23
|
+
def mongoize object
|
24
|
+
case object
|
25
|
+
when Timespan then object.mongoize
|
26
|
+
when Hash
|
27
|
+
::Timespan.new object
|
28
|
+
else
|
29
|
+
object
|
30
|
+
end
|
13
31
|
end
|
14
32
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
end
|
33
|
+
# Deserialize a Timespan given the hash stored by Mongodb
|
34
|
+
#
|
35
|
+
# @param [Hash] Timespan as hash
|
36
|
+
# @return [Timespan] deserialized Timespan
|
37
|
+
def demongoize(object)
|
38
|
+
return if !object
|
39
|
+
case object
|
40
|
+
when Hash
|
41
|
+
::Timespan.new :from => Serializer.from(object), :to => Serializer.to(object)
|
42
|
+
else
|
43
|
+
::Timespan.new object
|
44
|
+
end
|
45
|
+
end
|
29
46
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
47
|
+
# Converts the object that was supplied to a criteria and converts it
|
48
|
+
# into a database friendly form.
|
49
|
+
def evolve(object)
|
50
|
+
case object
|
51
|
+
when Timespan then object.mongoize
|
52
|
+
else object
|
53
|
+
end
|
34
54
|
end
|
35
55
|
end
|
36
56
|
end
|
37
|
-
|
38
|
-
|
39
|
-
class Timespan
|
40
|
-
include Mongoize
|
41
|
-
|
42
|
-
protected
|
43
|
-
|
44
|
-
include Mongoid::Fields::Timespan::Methods
|
45
|
-
extend Mongoid::Fields::Timespan::Methods
|
46
|
-
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Mongoid
|
2
|
+
module Timespanned
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
module ClassMethods
|
6
|
+
def timespan_setters name = :period
|
7
|
+
define_method :"#{name}_start=" do |date|
|
8
|
+
self.send "#{name}=", ::Timespan.new(start_date: date, end_date: self.send(name).end_date)
|
9
|
+
end
|
10
|
+
|
11
|
+
define_method :"#{name}_end=" do |date|
|
12
|
+
self.send "#{name}=", ::Timespan.new(start_date: self.send(name).start_date, end_date: date)
|
13
|
+
end
|
14
|
+
|
15
|
+
define_method :"#{name}duration=" do |duration|
|
16
|
+
self.send "#{name}=", ::Timespan.new(start_date: self.send(name).start_date, duration: duration)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -1,8 +1,13 @@
|
|
1
1
|
class Account
|
2
2
|
include Mongoid::Document
|
3
|
+
include Mongoid::Timespanned
|
3
4
|
|
4
5
|
field :period, :type => ::Timespan, :between => true
|
5
6
|
|
7
|
+
delegate :start_date, to: :period
|
8
|
+
|
9
|
+
timespan_setters :period
|
10
|
+
|
6
11
|
def self.create_it! duration
|
7
12
|
t = ::Timespan.new(duration: duration)
|
8
13
|
self.new period: t
|
@@ -3,6 +3,10 @@ require 'timespan/mongoid/spec_helper'
|
|
3
3
|
describe TimeSpan do
|
4
4
|
subject { account }
|
5
5
|
|
6
|
+
def tomorrow
|
7
|
+
Date.today + 1.day
|
8
|
+
end
|
9
|
+
|
6
10
|
let(:from) { Chronic.parse("1 day ago") }
|
7
11
|
let(:to) { Time.now }
|
8
12
|
|
@@ -40,5 +44,15 @@ describe TimeSpan do
|
|
40
44
|
DateTime.parse(subject.period.start_date.to_s).strftime('%d %b %Y').should == Date.today.strftime('%d %b %Y')
|
41
45
|
end
|
42
46
|
end
|
47
|
+
|
48
|
+
describe 'set new start_date' do
|
49
|
+
before :each do
|
50
|
+
subject.period_start = tomorrow
|
51
|
+
end
|
52
|
+
|
53
|
+
specify do
|
54
|
+
Date.parse(subject.start_date.to_s).should == tomorrow
|
55
|
+
end
|
56
|
+
end
|
43
57
|
end
|
44
58
|
end
|
data/timespan.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "timespan"
|
8
|
-
s.version = "0.4.
|
8
|
+
s.version = "0.4.2"
|
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"]
|
12
|
-
s.date = "2012-09-
|
12
|
+
s.date = "2012-09-19"
|
13
13
|
s.description = "Makes it easy to calculate time distance in different units"
|
14
14
|
s.email = "kmandrup@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -31,6 +31,7 @@ Gem::Specification.new do |s|
|
|
31
31
|
"lib/timespan/mongoid.rb",
|
32
32
|
"lib/timespan/mongoid/mongoid_2x.rb",
|
33
33
|
"lib/timespan/mongoid/mongoid_3x.rb",
|
34
|
+
"lib/timespan/mongoid/timespanned.rb",
|
34
35
|
"lib/timespan/printer.rb",
|
35
36
|
"lib/timespan/rails/engine.rb",
|
36
37
|
"lib/timespan/span.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.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-09-
|
12
|
+
date: 2012-09-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: chronic
|
@@ -209,6 +209,7 @@ files:
|
|
209
209
|
- lib/timespan/mongoid.rb
|
210
210
|
- lib/timespan/mongoid/mongoid_2x.rb
|
211
211
|
- lib/timespan/mongoid/mongoid_3x.rb
|
212
|
+
- lib/timespan/mongoid/timespanned.rb
|
212
213
|
- lib/timespan/printer.rb
|
213
214
|
- lib/timespan/rails/engine.rb
|
214
215
|
- lib/timespan/span.rb
|
@@ -246,7 +247,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
246
247
|
version: '0'
|
247
248
|
segments:
|
248
249
|
- 0
|
249
|
-
hash: -
|
250
|
+
hash: -2120967004770595531
|
250
251
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
251
252
|
none: false
|
252
253
|
requirements:
|