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 CHANGED
@@ -1 +1 @@
1
- 0.4.1
1
+ 0.4.2
@@ -1,5 +1,6 @@
1
1
  require "timespan"
2
2
  require "mongoid/fields"
3
+ require "timespan/mongoid/timespanned"
3
4
 
4
5
  # http://whytheluckystiff.net/articles/seeingMetaclassesClearly.html
5
6
  class Object
@@ -1,6 +1,18 @@
1
1
  class Timespan
2
- module Mongoize
3
- extend ActiveSupport::Concern
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
- {:from => serialize_time(start_time), :to => serialize_time(end_time), :duration => duration.total }
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
- module ClassMethods
16
- # Deserialize a Timespan given the hash stored by Mongodb
17
- #
18
- # @param [Hash] Timespan as hash
19
- # @return [Timespan] deserialized Timespan
20
- def demongoize(value)
21
- return if !value
22
- case value
23
- when Hash
24
- ::Timespan.new :from => from(value), :to => to(value)
25
- else
26
- ::Timespan.new value
27
- end
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
- # TODO
31
- # def evolve(object)
32
- # { "$gte" => object.first, "$lte" => object.last }
33
- # end
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.1"
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-18"
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.1
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-18 00:00:00.000000000 Z
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: -2725134475145941873
250
+ hash: -2120967004770595531
250
251
  required_rubygems_version: !ruby/object:Gem::Requirement
251
252
  none: false
252
253
  requirements: