dm-timestamps 0.9.6 → 0.9.7

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.txt CHANGED
@@ -1,3 +1,17 @@
1
1
  = dm-timestamps
2
2
 
3
3
  DataMapper plugin which adds "magic" to created_at, created_on, et cetera.
4
+
5
+ = Using
6
+
7
+ This plugin works by looking for the "created_at," "updated_at," "created_on"
8
+ and "updated_on" properties. If they exist, it does the right thing by setting
9
+ them or updating them. The *at properties should be of type DateTime, while the
10
+ *on properties should be of type Date.
11
+
12
+ Alternatively, you can have all of this setup for you if you use the "timestamps"
13
+ helper:
14
+
15
+ timestamps :at # Add created_at and updated_at
16
+ timestamps :on # Add created_on and updated_on
17
+ timestamps :created_at, :updated_on # Add these only
data/lib/dm-timestamps.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'rubygems'
2
2
 
3
- gem 'dm-core', '=0.9.6'
3
+ gem 'dm-core', '~>0.9.7'
4
4
  require 'dm-core'
5
5
 
6
6
  module DataMapper
@@ -14,6 +14,7 @@ module DataMapper
14
14
 
15
15
  def self.included(model)
16
16
  model.before :save, :set_timestamp_properties
17
+ model.send :extend, ClassMethods
17
18
  end
18
19
 
19
20
  private
@@ -25,6 +26,31 @@ module DataMapper
25
26
  end
26
27
  end
27
28
  end
29
+
30
+ module ClassMethods
31
+ def timestamps(*args)
32
+ if args.empty? then raise ArgumentError, "You need to pass at least one argument." end
33
+
34
+ args.each do |ts|
35
+ case ts
36
+ when :at
37
+ property :created_at, DateTime
38
+ property :updated_at, DateTime
39
+ when :on
40
+ property :created_on, Date
41
+ property :updated_on, Date
42
+ else
43
+ unless TIMESTAMP_PROPERTIES.keys.include?(ts)
44
+ raise InvalidTimestampName, "Invalid timestamp property '#{ts}'."
45
+ end
46
+
47
+ property ts, DateTime
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ class InvalidTimestampName < RuntimeError; end
28
54
  end # module Timestamp
29
55
 
30
56
  Resource::append_inclusions Timestamp
@@ -1,5 +1,5 @@
1
1
  module DataMapper
2
2
  module Timestamps
3
- VERSION = "0.9.6"
3
+ VERSION = "0.9.7"
4
4
  end
5
5
  end
@@ -107,5 +107,49 @@ if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
107
107
  end
108
108
  end
109
109
 
110
+ describe "inclusion" do
111
+ before :each do
112
+ @klass = Class.new do
113
+ include DataMapper::Resource
114
+ end
115
+ end
116
+
117
+ it "should provide #timestamps" do
118
+ @klass.should respond_to(:timestamps)
119
+ end
120
+
121
+ it "should set the *at properties" do
122
+ @klass.timestamps :at
123
+
124
+ @klass.properties.should have_property(:created_at)
125
+ @klass.properties[:created_at].type.should == DateTime
126
+ @klass.properties.should have_property(:updated_at)
127
+ @klass.properties[:updated_at].type.should == DateTime
128
+ end
129
+
130
+ it "should set the *on properties" do
131
+ @klass.timestamps :on
132
+
133
+ @klass.properties.should have_property(:created_on)
134
+ @klass.properties[:created_on].type.should == Date
135
+ @klass.properties.should have_property(:updated_on)
136
+ @klass.properties[:updated_on].type.should == Date
137
+ end
138
+
139
+ it "should set multiple properties" do
140
+ @klass.timestamps :created_at, :updated_on
141
+
142
+ @klass.properties.should have_property(:created_at)
143
+ @klass.properties.should have_property(:updated_on)
144
+ end
145
+
146
+ it "should fail on unknown property name" do
147
+ lambda { @klass.timestamps :wowee }.should raise_error(DataMapper::Timestamp::InvalidTimestampName)
148
+ end
149
+
150
+ it "should fail on empty arguments" do
151
+ lambda { @klass.timestamps }.should raise_error(ArgumentError)
152
+ end
153
+ end
110
154
  end
111
155
  end
data/spec/spec_helper.rb CHANGED
@@ -10,7 +10,7 @@ def load_driver(name, default_uri)
10
10
  lib = "do_#{name}"
11
11
 
12
12
  begin
13
- gem lib, '>=0.9.5'
13
+ gem lib, '~>0.9.7'
14
14
  require lib
15
15
  DataMapper.setup(name, ENV["#{name.to_s.upcase}_SPEC_URI"] || default_uri)
16
16
  DataMapper::Repository.adapters[:default] = DataMapper::Repository.adapters[name]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dm-timestamps
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.6
4
+ version: 0.9.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Foy Savas
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-10-12 00:00:00 -06:00
12
+ date: 2008-11-18 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - "="
22
22
  - !ruby/object:Gem::Version
23
- version: 0.9.6
23
+ version: 0.9.7
24
24
  version:
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: hoe
@@ -30,7 +30,7 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 1.7.0
33
+ version: 1.8.2
34
34
  version:
35
35
  description: DataMapper plugin for magical timestamps
36
36
  email:
@@ -78,7 +78,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
78
78
  requirements: []
79
79
 
80
80
  rubyforge_project: datamapper
81
- rubygems_version: 1.2.0
81
+ rubygems_version: 1.3.1
82
82
  signing_key:
83
83
  specification_version: 2
84
84
  summary: DataMapper plugin for magical timestamps