timespan 0.4.1 → 0.4.2

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/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: