dm-timestamps 0.9.7 → 0.9.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +1,6 @@
1
+ === 0.9.8 / 2008-12-07
1
2
 
3
+ * 2 minor enhancements:
4
+
5
+ * Added timestamps helper method
6
+ * Internal refactorings
@@ -9,3 +9,5 @@ lib/dm-timestamps/version.rb
9
9
  spec/integration/timestamps_spec.rb
10
10
  spec/spec.opts
11
11
  spec/spec_helper.rb
12
+ tasks/install.rb
13
+ tasks/spec.rb
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 = "Foy Savas"
10
- EMAIL = "foysavas@gmail.com"
11
- GEM_NAME = "dm-timestamps"
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 = [["dm-core", GEM_VERSION]]
14
- GEM_CLEAN = ["log", "pkg", "coverage"]
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
- desc 'Run specifications'
46
- Spec::Rake::SpecTask.new(:spec) do |t|
47
- t.spec_opts << '--options' << 'spec/spec.opts' if File.exists?('spec/spec.opts')
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
- begin
51
- t.rcov = ENV.has_key?('NO_RCOV') ? ENV['NO_RCOV'] != 'true' : true
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
@@ -1,8 +0,0 @@
1
- TODO
2
- ====
3
-
4
-
5
-
6
- ---
7
- TODO tickets may also be found in the DataMapper Issue Tracker:
8
- http://wm.lighthouseapp.com/projects/4819-datamapper/overview
@@ -1,57 +1,56 @@
1
1
  require 'rubygems'
2
2
 
3
- gem 'dm-core', '~>0.9.7'
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| r.updated_at = DateTime.now },
10
- :updated_on => lambda { |r| r.updated_on = Date.today },
11
- :created_at => lambda { |r| r.created_at = DateTime.now if r.new_record? && r.created_at.nil? },
12
- :created_on => lambda { |r| r.created_on = Date.today if r.new_record? && r.created_on.nil?},
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 :save, :set_timestamp_properties
17
- model.send :extend, ClassMethods
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 set_timestamp_properties
23
- if dirty?
24
- self.class.properties.slice(*TIMESTAMP_PROPERTIES.keys).compact.each do |property|
25
- TIMESTAMP_PROPERTIES[property.name][self] unless attribute_dirty?(property.name)
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(*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
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
@@ -1,5 +1,5 @@
1
1
  module DataMapper
2
2
  module Timestamps
3
- VERSION = "0.9.7"
3
+ VERSION = '0.9.8'
4
4
  end
5
5
  end
@@ -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
- before :all do
7
- class GreenSmoothie
8
- include DataMapper::Resource
9
-
10
- property :id, Integer, :serial => true
11
- property :name, String
12
- property :created_at, DateTime
13
- property :created_on, Date
14
- property :updated_at, DateTime
15
- property :updated_on, Date
16
-
17
- auto_migrate!(:default)
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
- after do
22
- repository(:default).adapter.execute('DELETE from green_smoothies');
23
- end
24
-
25
- it "should not set the created_at/on fields if they're already set" do
26
- repository(:default) do
27
- green_smoothie = GreenSmoothie.new(:name => 'Banana')
28
- time = (DateTime.now - 100)
29
- green_smoothie.created_at = time
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
- it "should set the created_at/on fields on creation" do
40
- repository(:default) do
41
- green_smoothie = GreenSmoothie.new(:name => 'Banana')
42
- green_smoothie.created_at.should be_nil
43
- green_smoothie.created_on.should be_nil
44
- green_smoothie.save
45
- green_smoothie.created_at.should be_a_kind_of(DateTime)
46
- green_smoothie.created_on.should be_a_kind_of(Date)
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
- it "should not alter the create_at/on fields on model updates" do
51
- repository(:default) do
52
- green_smoothie = GreenSmoothie.new(:id => 2, :name => 'Berry')
53
- green_smoothie.created_at.should be_nil
54
- green_smoothie.created_on.should be_nil
55
- green_smoothie.save
56
- original_created_at = green_smoothie.created_at
57
- original_created_on = green_smoothie.created_on
58
- green_smoothie.name = 'Strawberry'
59
- green_smoothie.save
60
- green_smoothie.created_at.should eql(original_created_at)
61
- green_smoothie.created_on.should eql(original_created_on)
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
- it "should set the updated_at/on fields on creation and on update" do
66
- repository(:default) do
67
- green_smoothie = GreenSmoothie.new(:name => 'Mango')
68
- green_smoothie.updated_at.should be_nil
69
- green_smoothie.updated_on.should be_nil
70
- green_smoothie.save
71
- green_smoothie.updated_at.should be_a_kind_of(DateTime)
72
- green_smoothie.updated_on.should be_a_kind_of(Date)
73
- original_updated_at = green_smoothie.updated_at
74
- original_updated_on = green_smoothie.updated_on
75
- time_tomorrow = DateTime.now + 1
76
- date_tomorrow = Date.today + 1
77
- DateTime.stub!(:now).and_return { time_tomorrow }
78
- Date.stub!(:today).and_return { date_tomorrow }
79
- green_smoothie.name = 'Cranberry Mango'
80
- green_smoothie.save
81
- green_smoothie.updated_at.should_not eql(original_updated_at)
82
- green_smoothie.updated_on.should_not eql(original_updated_on)
83
- green_smoothie.updated_at.should eql(time_tomorrow)
84
- green_smoothie.updated_on.should eql(date_tomorrow)
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
- it "should only set the updated_at/on fields on dirty objects" do
89
- repository(:default) do
90
- green_smoothie = GreenSmoothie.new(:name => 'Mango')
91
- green_smoothie.updated_at.should be_nil
92
- green_smoothie.updated_on.should be_nil
93
- green_smoothie.save
94
- green_smoothie.updated_at.should be_a_kind_of(DateTime)
95
- green_smoothie.updated_on.should be_a_kind_of(Date)
96
- original_updated_at = green_smoothie.updated_at
97
- original_updated_on = green_smoothie.updated_on
98
- time_tomorrow = DateTime.now + 1
99
- date_tomorrow = Date.today + 1
100
- DateTime.stub!(:now).and_return { time_tomorrow }
101
- Date.stub!(:today).and_return { date_tomorrow }
102
- green_smoothie.save
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 "inclusion" do
111
- before :each do
112
- @klass = Class.new do
113
- include DataMapper::Resource
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
- it "should provide #timestamps" do
118
- @klass.should respond_to(:timestamps)
119
- end
121
+ it "should provide #timestamps" do
122
+ @klass.should respond_to(:timestamps)
123
+ end
120
124
 
121
- it "should set the *at properties" do
122
- @klass.timestamps :at
125
+ it "should set the *at properties" do
126
+ @klass.timestamps :at
123
127
 
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
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
- it "should set the *on properties" do
131
- @klass.timestamps :on
134
+ it "should set the *on properties" do
135
+ @klass.timestamps :on
132
136
 
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
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
- it "should set multiple properties" do
140
- @klass.timestamps :created_at, :updated_on
143
+ it "should set multiple properties" do
144
+ @klass.timestamps :created_at, :updated_on
141
145
 
142
- @klass.properties.should have_property(:created_at)
143
- @klass.properties.should have_property(:updated_on)
144
- end
146
+ @klass.properties.should have_property(:created_at)
147
+ @klass.properties.should have_property(:updated_on)
148
+ end
145
149
 
146
- it "should fail on unknown property name" do
147
- lambda { @klass.timestamps :wowee }.should raise_error(DataMapper::Timestamp::InvalidTimestampName)
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
- it "should fail on empty arguments" do
151
- lambda { @klass.timestamps }.should raise_error(ArgumentError)
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
@@ -1,2 +1 @@
1
- --format specdoc
2
1
  --colour
@@ -1,22 +1,20 @@
1
+ require 'pathname'
1
2
  require 'rubygems'
2
- gem 'rspec', '>=1.1.3'
3
+
4
+ gem 'rspec', '~>1.1.11'
3
5
  require 'spec'
4
- require 'pathname'
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 Gem::LoadError => e
19
- warn "Could not load #{lib}: #{e}"
16
+ rescue LoadError => e
17
+ warn "Could not load do_#{name}: #{e}"
20
18
  false
21
19
  end
22
20
  end
@@ -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
@@ -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.7
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-11-18 00:00:00 -08:00
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.7
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@gmail.com
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: