dm-timestamps 0.9.7 → 0.9.8
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/History.txt +5 -0
- data/Manifest.txt +2 -0
- data/Rakefile +17 -50
- data/TODO +0 -8
- data/lib/dm-timestamps.rb +32 -33
- data/lib/dm-timestamps/version.rb +1 -1
- data/spec/integration/timestamps_spec.rb +144 -121
- data/spec/spec.opts +0 -1
- data/spec/spec_helper.rb +6 -8
- data/tasks/install.rb +13 -0
- data/tasks/spec.rb +25 -0
- metadata +8 -15
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
data/Rakefile
CHANGED
@@ -1,58 +1,25 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'spec'
|
3
|
-
require 'spec/rake/spectask'
|
4
1
|
require 'pathname'
|
2
|
+
require 'rubygems'
|
3
|
+
|
4
|
+
ROOT = Pathname(__FILE__).dirname.expand_path
|
5
|
+
JRUBY = RUBY_PLATFORM =~ /java/
|
6
|
+
WINDOWS = Gem.win_platform?
|
7
|
+
SUDO = (WINDOWS || JRUBY) ? '' : ('sudo' unless ENV['SUDOLESS'])
|
5
8
|
|
6
|
-
ROOT = Pathname(__FILE__).dirname.expand_path
|
7
9
|
require ROOT + 'lib/dm-timestamps/version'
|
8
10
|
|
9
|
-
AUTHOR =
|
10
|
-
EMAIL =
|
11
|
-
GEM_NAME =
|
11
|
+
AUTHOR = 'Foy Savas'
|
12
|
+
EMAIL = 'foysavas [a] gmail [d] com'
|
13
|
+
GEM_NAME = 'dm-timestamps'
|
12
14
|
GEM_VERSION = DataMapper::Timestamps::VERSION
|
13
|
-
GEM_DEPENDENCIES = [[
|
14
|
-
GEM_CLEAN = [
|
15
|
-
GEM_EXTRAS = { :has_rdoc => true, :extra_rdoc_files => %w[ README.txt LICENSE TODO ] }
|
16
|
-
|
17
|
-
PROJECT_NAME = "datamapper"
|
18
|
-
PROJECT_URL = "http://github.com/sam/dm-more/tree/master/dm-timestamps"
|
19
|
-
PROJECT_DESCRIPTION = PROJECT_SUMMARY = "DataMapper plugin for magical timestamps"
|
20
|
-
|
21
|
-
require ROOT.parent + 'tasks/hoe'
|
22
|
-
|
23
|
-
task :default => [ :spec ]
|
24
|
-
|
25
|
-
WIN32 = (RUBY_PLATFORM =~ /win32|mingw|cygwin/) rescue nil
|
26
|
-
SUDO = WIN32 ? '' : ('sudo' unless ENV['SUDOLESS'])
|
27
|
-
|
28
|
-
desc "Install #{GEM_NAME} #{GEM_VERSION} (default ruby)"
|
29
|
-
task :install => [ :package ] do
|
30
|
-
sh "#{SUDO} gem install --local pkg/#{GEM_NAME}-#{GEM_VERSION} --no-update-sources", :verbose => false
|
31
|
-
end
|
32
|
-
|
33
|
-
desc "Uninstall #{GEM_NAME} #{GEM_VERSION} (default ruby)"
|
34
|
-
task :uninstall => [ :clobber ] do
|
35
|
-
sh "#{SUDO} gem uninstall #{GEM_NAME} -v#{GEM_VERSION} -I -x", :verbose => false
|
36
|
-
end
|
37
|
-
|
38
|
-
namespace :jruby do
|
39
|
-
desc "Install #{GEM_NAME} #{GEM_VERSION} with JRuby"
|
40
|
-
task :install => [ :package ] do
|
41
|
-
sh %{#{SUDO} jruby -S gem install --local pkg/#{GEM_NAME}-#{GEM_VERSION} --no-update-sources}, :verbose => false
|
42
|
-
end
|
43
|
-
end
|
15
|
+
GEM_DEPENDENCIES = [['dm-core', "~>#{GEM_VERSION}"]]
|
16
|
+
GEM_CLEAN = %w[ log pkg coverage ]
|
17
|
+
GEM_EXTRAS = { :has_rdoc => true, :extra_rdoc_files => %w[ README.txt LICENSE TODO History.txt ] }
|
44
18
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
t.spec_files = Pathname.glob((ROOT + 'spec/**/*_spec.rb').to_s)
|
19
|
+
PROJECT_NAME = 'datamapper'
|
20
|
+
PROJECT_URL = "http://github.com/sam/dm-more/tree/master/#{GEM_NAME}"
|
21
|
+
PROJECT_DESCRIPTION = PROJECT_SUMMARY = 'DataMapper plugin for magical timestamps'
|
49
22
|
|
50
|
-
|
51
|
-
|
52
|
-
t.rcov_opts << '--exclude' << 'spec'
|
53
|
-
t.rcov_opts << '--text-summary'
|
54
|
-
t.rcov_opts << '--sort' << 'coverage' << '--sort-reverse'
|
55
|
-
rescue Exception
|
56
|
-
# rcov not installed
|
57
|
-
end
|
23
|
+
[ ROOT, ROOT.parent ].each do |dir|
|
24
|
+
Pathname.glob(dir.join('tasks/**/*.rb').to_s).each { |f| require f }
|
58
25
|
end
|
data/TODO
CHANGED
data/lib/dm-timestamps.rb
CHANGED
@@ -1,57 +1,56 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
|
3
|
-
gem 'dm-core', '~>0.9.
|
3
|
+
gem 'dm-core', '~>0.9.8'
|
4
4
|
require 'dm-core'
|
5
5
|
|
6
6
|
module DataMapper
|
7
7
|
module Timestamp
|
8
|
+
Resource.append_inclusions self
|
9
|
+
|
8
10
|
TIMESTAMP_PROPERTIES = {
|
9
|
-
:updated_at => lambda { |r|
|
10
|
-
:updated_on => lambda { |r|
|
11
|
-
:created_at => lambda { |r| r.created_at
|
12
|
-
:created_on => lambda { |r| r.created_on
|
13
|
-
}
|
11
|
+
:updated_at => [ DateTime, lambda { |r, p| DateTime.now } ],
|
12
|
+
:updated_on => [ Date, lambda { |r, p| Date.today } ],
|
13
|
+
:created_at => [ DateTime, lambda { |r, p| r.created_at || (DateTime.now if r.new_record?) } ],
|
14
|
+
:created_on => [ Date, lambda { |r, p| r.created_on || (Date.today if r.new_record?) } ],
|
15
|
+
}.freeze
|
14
16
|
|
15
17
|
def self.included(model)
|
16
|
-
model.before :
|
17
|
-
model.
|
18
|
+
model.before :create, :set_timestamps
|
19
|
+
model.before :update, :set_timestamps
|
20
|
+
model.extend ClassMethods
|
18
21
|
end
|
19
22
|
|
20
23
|
private
|
21
24
|
|
22
|
-
def
|
23
|
-
|
24
|
-
|
25
|
-
|
25
|
+
def set_timestamps
|
26
|
+
return unless dirty?
|
27
|
+
TIMESTAMP_PROPERTIES.each do |name,(_type,proc)|
|
28
|
+
if model.properties.has_property?(name)
|
29
|
+
model.properties[name].set(self, proc.call(self, model.properties[name])) unless attribute_dirty?(name)
|
26
30
|
end
|
27
31
|
end
|
28
32
|
end
|
29
33
|
|
30
34
|
module ClassMethods
|
31
|
-
def timestamps(*
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
case
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
raise InvalidTimestampName, "Invalid timestamp property '#{
|
45
|
-
end
|
46
|
-
|
47
|
-
property ts, DateTime
|
35
|
+
def timestamps(*names)
|
36
|
+
raise ArgumentError, 'You need to pass at least one argument' if names.empty?
|
37
|
+
|
38
|
+
names.each do |name|
|
39
|
+
case name
|
40
|
+
when *TIMESTAMP_PROPERTIES.keys
|
41
|
+
type = TIMESTAMP_PROPERTIES[name].first
|
42
|
+
property name, type, :nullable => false
|
43
|
+
when :at
|
44
|
+
timestamps(:created_at, :updated_at)
|
45
|
+
when :on
|
46
|
+
timestamps(:created_on, :updated_on)
|
47
|
+
else
|
48
|
+
raise InvalidTimestampName, "Invalid timestamp property name '#{name}'"
|
48
49
|
end
|
49
50
|
end
|
50
51
|
end
|
51
|
-
end
|
52
|
+
end # module ClassMethods
|
52
53
|
|
53
54
|
class InvalidTimestampName < RuntimeError; end
|
54
55
|
end # module Timestamp
|
55
|
-
|
56
|
-
Resource::append_inclusions Timestamp
|
57
|
-
end
|
56
|
+
end # module DataMapper
|
@@ -3,152 +3,175 @@ require Pathname(__FILE__).dirname.expand_path.parent + 'spec_helper'
|
|
3
3
|
|
4
4
|
if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
|
5
5
|
describe 'DataMapper::Timestamp' do
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
6
|
+
describe "Timestamp (shared behavior)", :shared => true do
|
7
|
+
it "should not set the created_at/on fields if they're already set" do
|
8
|
+
repository(:default) do
|
9
|
+
green_smoothie = GreenSmoothie.new(:name => 'Banana')
|
10
|
+
time = (DateTime.now - 100)
|
11
|
+
green_smoothie.created_at = time
|
12
|
+
green_smoothie.created_on = time
|
13
|
+
green_smoothie.save
|
14
|
+
green_smoothie.created_at.should == time
|
15
|
+
green_smoothie.created_on.should == time
|
16
|
+
green_smoothie.created_at.should be_a_kind_of(DateTime)
|
17
|
+
green_smoothie.created_on.should be_a_kind_of(Date)
|
18
|
+
end
|
18
19
|
end
|
19
|
-
end
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
green_smoothie.created_on = time
|
31
|
-
green_smoothie.save
|
32
|
-
green_smoothie.created_at.should == time
|
33
|
-
green_smoothie.created_on.should == time
|
34
|
-
green_smoothie.created_at.should be_a_kind_of(DateTime)
|
35
|
-
green_smoothie.created_on.should be_a_kind_of(Date)
|
21
|
+
it "should set the created_at/on fields on creation" do
|
22
|
+
repository(:default) do
|
23
|
+
green_smoothie = GreenSmoothie.new(:name => 'Banana')
|
24
|
+
green_smoothie.created_at.should be_nil
|
25
|
+
green_smoothie.created_on.should be_nil
|
26
|
+
green_smoothie.save
|
27
|
+
green_smoothie.created_at.should be_a_kind_of(DateTime)
|
28
|
+
green_smoothie.created_on.should be_a_kind_of(Date)
|
29
|
+
end
|
36
30
|
end
|
37
|
-
end
|
38
31
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
32
|
+
it "should not alter the create_at/on fields on model updates" do
|
33
|
+
repository(:default) do
|
34
|
+
green_smoothie = GreenSmoothie.new(:id => 2, :name => 'Berry')
|
35
|
+
green_smoothie.created_at.should be_nil
|
36
|
+
green_smoothie.created_on.should be_nil
|
37
|
+
green_smoothie.save
|
38
|
+
original_created_at = green_smoothie.created_at
|
39
|
+
original_created_on = green_smoothie.created_on
|
40
|
+
green_smoothie.name = 'Strawberry'
|
41
|
+
green_smoothie.save
|
42
|
+
green_smoothie.created_at.should eql(original_created_at)
|
43
|
+
green_smoothie.created_on.should eql(original_created_on)
|
44
|
+
end
|
47
45
|
end
|
48
|
-
end
|
49
46
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
47
|
+
it "should set the updated_at/on fields on creation and on update" do
|
48
|
+
repository(:default) do
|
49
|
+
green_smoothie = GreenSmoothie.new(:name => 'Mango')
|
50
|
+
green_smoothie.updated_at.should be_nil
|
51
|
+
green_smoothie.updated_on.should be_nil
|
52
|
+
green_smoothie.save
|
53
|
+
green_smoothie.updated_at.should be_a_kind_of(DateTime)
|
54
|
+
green_smoothie.updated_on.should be_a_kind_of(Date)
|
55
|
+
original_updated_at = green_smoothie.updated_at
|
56
|
+
original_updated_on = green_smoothie.updated_on
|
57
|
+
time_tomorrow = DateTime.now + 1
|
58
|
+
date_tomorrow = Date.today + 1
|
59
|
+
DateTime.stub!(:now).and_return { time_tomorrow }
|
60
|
+
Date.stub!(:today).and_return { date_tomorrow }
|
61
|
+
green_smoothie.name = 'Cranberry Mango'
|
62
|
+
green_smoothie.save
|
63
|
+
green_smoothie.updated_at.should_not eql(original_updated_at)
|
64
|
+
green_smoothie.updated_on.should_not eql(original_updated_on)
|
65
|
+
green_smoothie.updated_at.should eql(time_tomorrow)
|
66
|
+
green_smoothie.updated_on.should eql(date_tomorrow)
|
67
|
+
end
|
62
68
|
end
|
63
|
-
end
|
64
69
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
70
|
+
it "should only set the updated_at/on fields on dirty objects" do
|
71
|
+
repository(:default) do
|
72
|
+
green_smoothie = GreenSmoothie.new(:name => 'Mango')
|
73
|
+
green_smoothie.updated_at.should be_nil
|
74
|
+
green_smoothie.updated_on.should be_nil
|
75
|
+
green_smoothie.save
|
76
|
+
green_smoothie.updated_at.should be_a_kind_of(DateTime)
|
77
|
+
green_smoothie.updated_on.should be_a_kind_of(Date)
|
78
|
+
original_updated_at = green_smoothie.updated_at
|
79
|
+
original_updated_on = green_smoothie.updated_on
|
80
|
+
time_tomorrow = DateTime.now + 1
|
81
|
+
date_tomorrow = Date.today + 1
|
82
|
+
DateTime.stub!(:now).and_return { time_tomorrow }
|
83
|
+
Date.stub!(:today).and_return { date_tomorrow }
|
84
|
+
green_smoothie.save
|
85
|
+
green_smoothie.updated_at.should_not eql(time_tomorrow)
|
86
|
+
green_smoothie.updated_on.should_not eql(date_tomorrow)
|
87
|
+
green_smoothie.updated_at.should eql(original_updated_at)
|
88
|
+
green_smoothie.updated_on.should eql(original_updated_on)
|
89
|
+
end
|
85
90
|
end
|
86
91
|
end
|
87
92
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
green_smoothie.updated_at.should_not eql(time_tomorrow)
|
104
|
-
green_smoothie.updated_on.should_not eql(date_tomorrow)
|
105
|
-
green_smoothie.updated_at.should eql(original_updated_at)
|
106
|
-
green_smoothie.updated_on.should eql(original_updated_on)
|
93
|
+
describe "explicit property declaration" do
|
94
|
+
before do
|
95
|
+
Object.send(:remove_const, :GreenSmoothie) if defined?(GreenSmoothie)
|
96
|
+
class GreenSmoothie
|
97
|
+
include DataMapper::Resource
|
98
|
+
|
99
|
+
property :id, Integer, :serial => true
|
100
|
+
property :name, String
|
101
|
+
property :created_at, DateTime
|
102
|
+
property :created_on, Date
|
103
|
+
property :updated_at, DateTime
|
104
|
+
property :updated_on, Date
|
105
|
+
|
106
|
+
auto_migrate!(:default)
|
107
|
+
end
|
107
108
|
end
|
109
|
+
|
110
|
+
it_should_behave_like "Timestamp (shared behavior)"
|
108
111
|
end
|
109
112
|
|
110
|
-
describe "
|
111
|
-
|
112
|
-
|
113
|
-
|
113
|
+
describe "timestamps helper" do
|
114
|
+
describe "inclusion" do
|
115
|
+
before :each do
|
116
|
+
@klass = Class.new do
|
117
|
+
include DataMapper::Resource
|
118
|
+
end
|
114
119
|
end
|
115
|
-
end
|
116
120
|
|
117
|
-
|
118
|
-
|
119
|
-
|
121
|
+
it "should provide #timestamps" do
|
122
|
+
@klass.should respond_to(:timestamps)
|
123
|
+
end
|
120
124
|
|
121
|
-
|
122
|
-
|
125
|
+
it "should set the *at properties" do
|
126
|
+
@klass.timestamps :at
|
123
127
|
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
128
|
+
@klass.properties.should have_property(:created_at)
|
129
|
+
@klass.properties[:created_at].type.should == DateTime
|
130
|
+
@klass.properties.should have_property(:updated_at)
|
131
|
+
@klass.properties[:updated_at].type.should == DateTime
|
132
|
+
end
|
129
133
|
|
130
|
-
|
131
|
-
|
134
|
+
it "should set the *on properties" do
|
135
|
+
@klass.timestamps :on
|
132
136
|
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
137
|
+
@klass.properties.should have_property(:created_on)
|
138
|
+
@klass.properties[:created_on].type.should == Date
|
139
|
+
@klass.properties.should have_property(:updated_on)
|
140
|
+
@klass.properties[:updated_on].type.should == Date
|
141
|
+
end
|
138
142
|
|
139
|
-
|
140
|
-
|
143
|
+
it "should set multiple properties" do
|
144
|
+
@klass.timestamps :created_at, :updated_on
|
141
145
|
|
142
|
-
|
143
|
-
|
144
|
-
|
146
|
+
@klass.properties.should have_property(:created_at)
|
147
|
+
@klass.properties.should have_property(:updated_on)
|
148
|
+
end
|
145
149
|
|
146
|
-
|
147
|
-
|
150
|
+
it "should fail on unknown property name" do
|
151
|
+
lambda { @klass.timestamps :wowee }.should raise_error(DataMapper::Timestamp::InvalidTimestampName)
|
152
|
+
end
|
153
|
+
|
154
|
+
it "should fail on empty arguments" do
|
155
|
+
lambda { @klass.timestamps }.should raise_error(ArgumentError)
|
156
|
+
end
|
148
157
|
end
|
149
158
|
|
150
|
-
|
151
|
-
|
159
|
+
describe "behavior" do
|
160
|
+
before do
|
161
|
+
Object.send(:remove_const, :GreenSmoothie) if defined?(GreenSmoothie)
|
162
|
+
class GreenSmoothie
|
163
|
+
include DataMapper::Resource
|
164
|
+
|
165
|
+
property :id, Integer, :serial => true
|
166
|
+
property :name, String
|
167
|
+
|
168
|
+
timestamps :at, :on
|
169
|
+
|
170
|
+
auto_migrate!(:default)
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
it_should_behave_like "Timestamp (shared behavior)"
|
152
175
|
end
|
153
176
|
end
|
154
177
|
end
|
data/spec/spec.opts
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -1,22 +1,20 @@
|
|
1
|
+
require 'pathname'
|
1
2
|
require 'rubygems'
|
2
|
-
|
3
|
+
|
4
|
+
gem 'rspec', '~>1.1.11'
|
3
5
|
require 'spec'
|
4
|
-
|
6
|
+
|
5
7
|
require Pathname(__FILE__).dirname.parent.expand_path + 'lib/dm-timestamps'
|
6
8
|
|
7
9
|
def load_driver(name, default_uri)
|
8
10
|
return false if ENV['ADAPTER'] != name.to_s
|
9
11
|
|
10
|
-
lib = "do_#{name}"
|
11
|
-
|
12
12
|
begin
|
13
|
-
gem lib, '~>0.9.7'
|
14
|
-
require lib
|
15
13
|
DataMapper.setup(name, ENV["#{name.to_s.upcase}_SPEC_URI"] || default_uri)
|
16
14
|
DataMapper::Repository.adapters[:default] = DataMapper::Repository.adapters[name]
|
17
15
|
true
|
18
|
-
rescue
|
19
|
-
warn "Could not load #{
|
16
|
+
rescue LoadError => e
|
17
|
+
warn "Could not load do_#{name}: #{e}"
|
20
18
|
false
|
21
19
|
end
|
22
20
|
end
|
data/tasks/install.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
def sudo_gem(cmd)
|
2
|
+
sh "#{SUDO} #{RUBY} -S gem #{cmd}", :verbose => false
|
3
|
+
end
|
4
|
+
|
5
|
+
desc "Install #{GEM_NAME} #{GEM_VERSION}"
|
6
|
+
task :install => [ :package ] do
|
7
|
+
sudo_gem "install --local pkg/#{GEM_NAME}-#{GEM_VERSION} --no-update-sources"
|
8
|
+
end
|
9
|
+
|
10
|
+
desc "Uninstall #{GEM_NAME} #{GEM_VERSION}"
|
11
|
+
task :uninstall => [ :clobber ] do
|
12
|
+
sudo_gem "uninstall #{GEM_NAME} -v#{GEM_VERSION} -Ix"
|
13
|
+
end
|
data/tasks/spec.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
begin
|
2
|
+
gem 'rspec', '~>1.1.11'
|
3
|
+
require 'spec'
|
4
|
+
require 'spec/rake/spectask'
|
5
|
+
|
6
|
+
task :default => [ :spec ]
|
7
|
+
|
8
|
+
desc 'Run specifications'
|
9
|
+
Spec::Rake::SpecTask.new(:spec) do |t|
|
10
|
+
t.spec_opts << '--options' << 'spec/spec.opts' if File.exists?('spec/spec.opts')
|
11
|
+
t.spec_files = Pathname.glob((ROOT + 'spec/**/*_spec.rb').to_s)
|
12
|
+
|
13
|
+
begin
|
14
|
+
gem 'rcov', '~>0.8'
|
15
|
+
t.rcov = JRUBY ? false : (ENV.has_key?('NO_RCOV') ? ENV['NO_RCOV'] != 'true' : true)
|
16
|
+
t.rcov_opts << '--exclude' << 'spec'
|
17
|
+
t.rcov_opts << '--text-summary'
|
18
|
+
t.rcov_opts << '--sort' << 'coverage' << '--sort-reverse'
|
19
|
+
rescue LoadError
|
20
|
+
# rcov not installed
|
21
|
+
end
|
22
|
+
end
|
23
|
+
rescue LoadError
|
24
|
+
# rspec not installed
|
25
|
+
end
|
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.
|
4
|
+
version: 0.9.8
|
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-
|
12
|
+
date: 2008-12-07 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -18,23 +18,13 @@ dependencies:
|
|
18
18
|
version_requirement:
|
19
19
|
version_requirements: !ruby/object:Gem::Requirement
|
20
20
|
requirements:
|
21
|
-
- -
|
21
|
+
- - ~>
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 0.9.
|
24
|
-
version:
|
25
|
-
- !ruby/object:Gem::Dependency
|
26
|
-
name: hoe
|
27
|
-
type: :development
|
28
|
-
version_requirement:
|
29
|
-
version_requirements: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 1.8.2
|
23
|
+
version: 0.9.8
|
34
24
|
version:
|
35
25
|
description: DataMapper plugin for magical timestamps
|
36
26
|
email:
|
37
|
-
- foysavas
|
27
|
+
- foysavas [a] gmail [d] com
|
38
28
|
executables: []
|
39
29
|
|
40
30
|
extensions: []
|
@@ -43,6 +33,7 @@ extra_rdoc_files:
|
|
43
33
|
- README.txt
|
44
34
|
- LICENSE
|
45
35
|
- TODO
|
36
|
+
- History.txt
|
46
37
|
files:
|
47
38
|
- History.txt
|
48
39
|
- LICENSE
|
@@ -55,6 +46,8 @@ files:
|
|
55
46
|
- spec/integration/timestamps_spec.rb
|
56
47
|
- spec/spec.opts
|
57
48
|
- spec/spec_helper.rb
|
49
|
+
- tasks/install.rb
|
50
|
+
- tasks/spec.rb
|
58
51
|
has_rdoc: true
|
59
52
|
homepage: http://github.com/sam/dm-more/tree/master/dm-timestamps
|
60
53
|
post_install_message:
|