technicalpickles-jeweler 0.0.7 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown CHANGED
@@ -6,18 +6,18 @@ Trouble is when developing your Rubygems on GitHub, you generally do one of the
6
6
 
7
7
  * Manage the gemspec by hand
8
8
  * ... why bother doing something by hand when you can automate it?
9
- * Write your own rake stuff to manage the gemspec, and deal with managing the version somehow
9
+ * Write your own Rake stuff to create the Gem::Specification and output it to a gemspec file, and deal with keeping the Rakefile and gemspec in sync
10
10
  * ... why keep reinventing the wheel?
11
- * use hoe or echoe for generating the gemspec
11
+ * Use hoe or echoe for generating the gemspec
12
12
  * ... why use utilities made for the days before GitHub existed?
13
13
  * ... why have extra stuff you aren't going to use?
14
14
 
15
- Jeweler was created with some simple goals:
15
+ Jeweler was created with a few intentions:
16
16
 
17
17
  * The only configuration should be providing a Gem::Specification to Jeweler
18
18
  * Version bumping should only be one command away
19
- * Authoritative version information should stored in one place, a Version module in your project
20
- * Jeweler should only concern itself with versioning and gems (and one day, git)
19
+ * Authoritative version information should stored in one place
20
+ * Jeweler should only concern itself with versioning and gems
21
21
  * Your Rakefile should be usable when Jeweler isn't installed (you just wouldn't be able to version bump or generate a gemspec)
22
22
  * Jeweler should use Jeweler. Oh the meta!
23
23
 
@@ -58,38 +58,20 @@ Install the gem:
58
58
  s.files = FileList["[A-Z]*", "{generators,lib,test}/**/*"]
59
59
  end
60
60
  rescue LoadError
61
- puts "Jeweler not available. Try installing technicalpickles-jeweler."
61
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
62
62
  end
63
63
 
64
64
  Note, we don't include 'date', or 'version'. Jeweler handles filing these in when it needs them.
65
65
 
66
- If you don't specify `s.files`, it will use `s.files = FileList["[A-Z]*", "{generators,lib,test,spec}/**/*"]`.
67
-
68
- For now, `s.name` should be lower-cased and underscored, without hyphens. That's because Jeweler camelizes and constantizes this value internally. For example, `ruby-debug` would be camelized/constanized to `Ruby-debug`, which isn't a valid constant. Use `ruby_debug` instead (for now).
66
+ If you don't specify `s.files`, it will use `s.files = FileList["[A-Z]*.*", "{generators,lib,test,spec}/**/*"]`.
69
67
 
70
68
  ### Create a version file
71
69
 
72
- Stick it in `lib/(spec_name_here)/version.rb`, and start it out at some version, like 0.0.0:
70
+ Create an initial `VERSION.yml`. It will by default to 0.0.0, but you can specify MAJOR, MINOR, and PATCH to tweak it:
73
71
 
74
- class Jeweler
75
- module Version
76
- MAJOR = 0
77
- MINOR = 0
78
- PATCH = 0
79
- end
80
- end
81
-
82
- OR
83
-
84
- module Jeweler
85
- module Version
86
- MAJOR = 0
87
- MINOR = 0
88
- PATCH = 0
89
- end
90
- end
91
-
92
- Which you use depends on how you want to organize your gem. If you have a top-level class, like Jeweler, use the first. If you have a top level module, like ActiveRecord, use the latter.
72
+ $ rake version:write MAJOR=1 MINOR=5 PATCH=2
73
+ (in /Users/nichoj/Projects/jeweler)
74
+ Wrote to VERSION.yml: 1.5.2
93
75
 
94
76
  ### Generate the gemspec
95
77
 
@@ -122,6 +104,10 @@ You have a few rake tasks for doing the version bump:
122
104
  $ rake version:bump:minor # 1.5.1 -> 1.6.0
123
105
  $ rake version:bump:major # 1.5.1 -> 2.0.0
124
106
 
107
+ If you need to do an arbitrary bump, use the same task you used to create `VERSION.yml`:
108
+
109
+ $ rake version:write MAJOR=6 MINOR=0 PATCH=3
110
+
125
111
  After that, commit and push it:
126
112
 
127
113
  $ git commit -a -m "Version bump, yo."
@@ -130,3 +116,51 @@ After that, commit and push it:
130
116
  ### Play the waiting game
131
117
 
132
118
  Wander over to [Has My Gem Built Yet](http://hasmygembuiltyet.org/) to play the waiting game.
119
+
120
+ ## Extra stuff you might want to for your RubyGem project
121
+
122
+ As was mentioned, Jeweler tries to only do versioning and gem stuff. Most projects have a few other needs:
123
+
124
+ * Testing
125
+ * RDoc
126
+ * Default task
127
+
128
+ Jeweler doesn't provide these. But it's easy enough to use Rake's built in tasks:
129
+
130
+ require 'rake'
131
+ require 'rake/testtask'
132
+ require 'rake/rdoctask'
133
+
134
+ begin
135
+ require 'rubygems'
136
+ require 'jeweler'
137
+ Jeweler.gemspec = Gem::Specification.new do |s|
138
+ s.name = "jeweler"
139
+ s.summary = "Simple and opinionated helper for creating Rubygem projects on GitHub"
140
+ s.email = "josh@technicalpickles.com"
141
+ s.homepage = "http://github.com/technicalpickles/jeweler"
142
+ s.description = "Simple and opinionated helper for creating Rubygem projects on GitHub"
143
+ s.authors = ["Josh Nichols", "Dan Croak"]
144
+ s.files = FileList["[A-Z]*", "{generators,lib,test}/**/*"]
145
+ end
146
+ rescue LoadError
147
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
148
+ end
149
+
150
+ Rake::TestTask.new do |t|
151
+ t.libs << 'lib'
152
+ t.pattern = 'test/**/*_test.rb'
153
+ t.verbose = false
154
+ end
155
+
156
+ desc 'Generate documentation for the safety_valve plugin.'
157
+ Rake::RDocTask.new(:rdoc) do |rdoc|
158
+ rdoc.rdoc_dir = 'rdoc'
159
+ rdoc.title = 'Jeweler'
160
+ rdoc.options << '--line-numbers' << '--inline-source'
161
+ rdoc.rdoc_files.include('README.*')
162
+ rdoc.rdoc_files.include('lib/**/*.rb')
163
+ end
164
+
165
+ desc "Run the test suite"
166
+ task :default => :test
data/Rakefile CHANGED
@@ -16,7 +16,7 @@ begin
16
16
  s.files = FileList["[A-Z]*", "{generators,lib,test}/**/*"]
17
17
  end
18
18
  rescue LoadError
19
- puts "Jeweler not available. Try installing technicalpickles-jeweler."
19
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
20
20
  end
21
21
 
22
22
  Rake::TestTask.new do |t|
data/TODO CHANGED
@@ -1,8 +1,7 @@
1
- * Support dashes in spec names
2
- * ruby-debug -> Ruby::Debug
3
- * safety_valve -> SafetyValve
1
+ * Move away from having a version module to having version.yml in top level directory
4
2
  * Generator for making new Jeweler projects
5
3
  * Rails generator for making a plugin that's Jeweler enabled
6
4
  * Git tagging/branching
7
5
  * Make sure everything is pushed/committed before bumping (controlled by a Jeweler.strict perhaps)
8
- * Have version:bump:xxx do a commit with an appropriate message
6
+ * Have version:bump:xxx do a commit with an appropriate message
7
+ * Capture stdout during testing
data/VERSION.yml ADDED
@@ -0,0 +1,4 @@
1
+ ---
2
+ patch: 1
3
+ major: 0
4
+ minor: 1
data/lib/jeweler.rb CHANGED
@@ -24,10 +24,8 @@ class Jeweler
24
24
  @gemspec = gemspec
25
25
  @base_dir = base_dir
26
26
 
27
- load_version()
28
-
29
- @gemspec.version = version
30
- @gemspec.files ||= FileList["[A-Z]*", "{generators,lib,test,spec}/**/*"]
27
+ # @gemspec.version = version
28
+ @gemspec.files ||= FileList["[A-Z]*.*", "{generators,lib,test,spec}/**/*"]
31
29
  end
32
30
 
33
31
  private
@@ -4,65 +4,48 @@ class Jeweler
4
4
  #
5
5
  # 1.5.1 -> 1.5.2
6
6
  def bump_patch_version()
7
- patch = self.patch_version + 1
7
+ patch = self.patch_version.to_i + 1
8
8
 
9
- bump_version(major_version, minor_version, patch)
10
- write_gemspec
9
+ write_version(major_version, minor_version, patch)
11
10
  end
12
11
 
13
12
  # Bumps the minor version.
14
13
  #
15
14
  # 1.5.1 -> 1.6.0
16
15
  def bump_minor_version()
17
- minor = minor_version + 1
16
+ minor = minor_version.to_i + 1
18
17
 
19
- bump_version(major_version, minor, 0)
20
- write_gemspec
18
+ write_version(major_version, minor)
21
19
  end
22
20
 
23
21
  # Bumps the major version.
24
22
  #
25
23
  # 1.5.1 -> 2.0.0
26
24
  def bump_major_version()
27
- major = major_version + 1
25
+ major = major_version.to_i + 1
28
26
 
29
- bump_version(major, 0, 0)
30
- write_gemspec
27
+ write_version(major)
31
28
  end
32
29
 
33
30
  # Bumps the version, to the specific major/minor/patch version, writing out the appropriate version.rb, and then reloads it.
34
- def bump_version(major, minor, patch)
35
- main_module_or_class = constantize(main_module_name)
36
- keyword = top_level_keyword()
37
-
38
- File.open(version_module_path, 'w') do |file|
39
- file.write <<-END
40
- #{keyword} #{main_module_name}
41
- module Version
42
- MAJOR = #{major}
43
- MINOR = #{minor}
44
- PATCH = #{patch}
45
- end
46
- end
47
- END
31
+ def write_version(major = 0, minor = 0, patch = 0)
32
+ major ||= 0
33
+ minor ||= 0
34
+ patch ||= 0
35
+
36
+ File.open(version_yaml_path, 'w+') do |f|
37
+ version_hash = {
38
+ 'major' => major.to_i,
39
+ 'minor' => minor.to_i,
40
+ 'patch' => patch.to_i
41
+ }
42
+ YAML.dump(version_hash, f)
48
43
  end
49
- @gemspec.version = "#{major}.#{minor}.#{patch}"
50
44
  refresh_version
51
- end
52
-
53
- protected
54
- # Tries to figure out the Ruby keyword of what is containing the Version
55
- # module. This should be 'module' or 'class', and is used for rewriting the version.rb.
56
- def top_level_keyword
57
- main_module_or_class = constantize(main_module_name)
58
- case main_module_or_class
59
- when Class
60
- 'class'
61
- when Module
62
- 'module'
63
- else
64
- raise "Uh, main_module_name should be a class or module, but was a #{main_module_or_class.class}"
65
- end
45
+
46
+ @gemspec.version = version
47
+
48
+ puts "Wrote to #{version_yaml_path}: #{version}"
66
49
  end
67
50
  end
68
51
  end
@@ -2,4 +2,7 @@ class Jeweler
2
2
  # Gemspec related error
3
3
  class GemspecError < StandardError
4
4
  end
5
+
6
+ class VersionYmlError < StandardError
7
+ end
5
8
  end
@@ -1,34 +1,21 @@
1
1
  class Jeweler
2
2
  module Gemspec
3
- # Generates a date for stuffing in the gemspec
4
- def date
5
- date = DateTime.now
6
- "#{date.year}-#{date.month}-#{date.day}"
7
- end
8
-
9
-
10
3
  # Writes out the gemspec
11
4
  def write_gemspec
12
- @gemspec.date = self.date
5
+ @gemspec.version = self.version
6
+ @gemspec.date = Time.now
13
7
  File.open(gemspec_path, 'w') do |f|
14
8
  f.write @gemspec.to_ruby
15
9
  end
16
- puts "Generated #{gemspec_path}."
10
+ puts "Generated: #{gemspec_path}"
17
11
  end
18
12
 
19
13
  # Validates the gemspec in an environment similar to how GitHub would build
20
14
  # it. See http://gist.github.com/16215
21
15
  def validate_gemspec
22
16
  begin
23
- # Snippet borrowed from http://gist.github.com/16215
24
17
  data = File.read(gemspec_path)
25
-
26
- spec = nil
27
- if data !~ %r{!ruby/object:Gem::Specification}
28
- Thread.new { spec = eval("$SAFE = 3\n#{data}", binding, gemspec_path) }.join
29
- else
30
- spec = YAML.load(data)
31
- end
18
+ Thread.new { spec = parse_gemspec(data) }.join
32
19
 
33
20
  puts "#{gemspec_path} is valid."
34
21
  rescue Exception => e
@@ -37,9 +24,29 @@ class Jeweler
37
24
  end
38
25
  end
39
26
 
27
+
28
+ def valid_gemspec?
29
+ # gah, so wet...
30
+ begin
31
+ data = File.read(gemspec_path)
32
+
33
+ Thread.new { spec = parse_gemspec(data) }.join
34
+ true
35
+ rescue Exception => e
36
+ false
37
+ end
38
+ end
39
+
40
+ def parse_gemspec(data = nil)
41
+ data ||= File.read(gemspec_path)
42
+ eval("$SAFE = 3\n#{data}", binding, gemspec_path)
43
+ end
44
+
40
45
  protected
41
46
  def gemspec_path
42
- File.join(@base_dir, "#{@gemspec.name}.gemspec")
47
+ denormalized_path = File.join(@base_dir, "#{@gemspec.name}.gemspec")
48
+ absolute_path = File.expand_path(denormalized_path)
49
+ absolute_path.gsub(Dir.getwd + File::SEPARATOR, '')
43
50
  end
44
51
  end
45
52
  end
data/lib/jeweler/tasks.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'ruby-debug'
1
2
  desc "Generate and validates gemspec"
2
3
  task :gemspec => ['gemspec:generate', 'gemspec:validate']
3
4
 
@@ -14,36 +15,57 @@ namespace :gemspec do
14
15
  end
15
16
 
16
17
  desc "Displays the current version"
17
- task :version do
18
- puts Jeweler.instance.version
19
- end
18
+ task :version => 'version:display'
20
19
 
21
20
  namespace :version do
21
+
22
+ desc "Creates an initial version file"
23
+ task :write do
24
+ jeweler = Jeweler.instance
25
+ jeweler.write_version(ENV['MAJOR'], ENV['MINOR'], ENV['PATCH'])
26
+ end
27
+
28
+ def ensure_version_yml(&block)
29
+ if File.exists? 'VERSION.yml'
30
+ block.call
31
+ else
32
+ abort "VERSION.yml is needed for this operation, but it doesn't exist. Try running 'rake version:write' first."
33
+ end
34
+ end
35
+
36
+ desc "Displays the current version"
37
+ task :display do
38
+ ensure_version_yml do
39
+ puts "Current version: #{Jeweler.instance.version}"
40
+ end
41
+ end
42
+
22
43
  namespace :bump do
23
44
  desc "Bump the gemspec by a major version."
24
- task :major do
25
- jeweler = Jeweler.instance
26
-
27
- jeweler.bump_major_version
28
-
29
- jeweler.bump_version(major, 0, 0)
30
- jeweler.write_gemspec
31
-
32
- puts "Version bumped to #{jeweler.version}"
45
+ task :major => 'version:display' do
46
+ ensure_version_yml do
47
+ jeweler = Jeweler.instance
48
+ jeweler.bump_major_version
49
+ jeweler.write_gemspec
50
+ end
33
51
  end
34
52
 
35
53
  desc "Bump the gemspec by a minor version."
36
- task :minor do
37
- jeweler = Jeweler.instance
38
- jeweler.bump_minor_version
39
- puts "Version bumped to #{jeweler.version}"
54
+ task :minor => 'version:display' do
55
+ ensure_version_yml do
56
+ jeweler = Jeweler.instance
57
+ jeweler.bump_minor_version
58
+ jeweler.write_gemspec
59
+ end
40
60
  end
41
61
 
42
62
  desc "Bump the gemspec by a patch version."
43
- task :patch do
44
- jeweler = Jeweler.instance
45
- jeweler.bump_patch_version
46
- puts "Version bumped to #{jeweler.version}"
63
+ task :patch => 'version:display' do
64
+ ensure_version_yml do
65
+ jeweler = Jeweler.instance
66
+ jeweler.bump_patch_version
67
+ jeweler.write_gemspec
68
+ end
47
69
  end
48
70
  end
49
71
  end
@@ -1,21 +1,22 @@
1
+ require 'yaml'
1
2
  class Jeweler
2
3
  module Versioning
3
4
  # Major version, as defined by the gemspec's Version module.
4
5
  # For 1.5.3, this would return 1.
5
6
  def major_version
6
- version_module.const_get(:MAJOR)
7
+ version_yaml['major']
7
8
  end
8
9
 
9
10
  # Minor version, as defined by the gemspec's Version module.
10
11
  # For 1.5.3, this would return 5.
11
12
  def minor_version
12
- version_module.const_get(:MINOR)
13
+ version_yaml['minor']
13
14
  end
14
15
 
15
16
  # Patch version, as defined by the gemspec's Version module.
16
17
  # For 1.5.3, this would return 5.
17
18
  def patch_version
18
- version_module.const_get(:PATCH)
19
+ version_yaml['patch']
19
20
  end
20
21
 
21
22
  # Human readable version, which is used in the gemspec.
@@ -24,31 +25,26 @@ class Jeweler
24
25
  end
25
26
 
26
27
  protected
27
- def version_module_path
28
- File.join(@base_dir, 'lib', @gemspec.name, 'version.rb')
28
+ def version_yaml_path
29
+ denormalized_path = File.join(@base_dir, 'VERSION.yml')
30
+ absolute_path = File.expand_path(denormalized_path)
31
+ absolute_path.gsub(Dir.getwd + File::SEPARATOR, '')
29
32
  end
30
-
31
- def version_module
32
- constantize("#{main_module_name}::Version")
33
- end
34
-
35
- #
36
- def refresh_version
37
- undefine_versions()
38
- load_version()
33
+
34
+ def version_yaml
35
+ @version_yaml ||= read_version_yaml
39
36
  end
40
-
41
- # Undefines version constants, so we can +load+ the version.rb again.
42
- def undefine_versions
43
- version_module.module_eval do
44
- remove_const(:MAJOR) if const_defined?(:MAJOR)
45
- remove_const(:MINOR) if const_defined?(:MINOR)
46
- remove_const(:PATCH) if const_defined?(:PATCH)
37
+
38
+ def read_version_yaml
39
+ if File.exists?(version_yaml_path)
40
+ YAML.load_file(version_yaml_path)
41
+ else
42
+ raise VersionYmlError, "#{version_yaml_path} does not exist!"
47
43
  end
48
44
  end
49
-
50
- def load_version
51
- load(version_module_path)
45
+
46
+ def refresh_version
47
+ @version_yaml = read_version_yaml
52
48
  end
53
49
  end
54
50
  end
data/test/jeweler_test.rb CHANGED
@@ -2,26 +2,11 @@ require File.dirname(__FILE__) + '/test_helper'
2
2
 
3
3
  class JewelerTest < Test::Unit::TestCase
4
4
 
5
- def write_version_file(name, keyword, const_name, major, minor, patch)
6
- dir = "#{File.dirname(__FILE__)}/lib/#{name}"
7
- FileUtils.mkdir_p(dir)
8
- File.open("#{dir}/version.rb", 'w+') do |file|
9
- file.write <<-END
10
- #{keyword} #{const_name}
11
- module Version
12
- MAJOR = #{major}
13
- MINOR = #{minor}
14
- PATCH = #{patch}
15
- end
16
- end
17
- END
18
- end
19
- end
20
-
21
5
  def teardown
22
6
  FileUtils.rm_rf("#{File.dirname(__FILE__)}/lib")
23
7
  FileUtils.rm_f("#{File.dirname(__FILE__)}/foo.gemspec")
24
8
  FileUtils.rm_f("#{File.dirname(__FILE__)}/bar.gemspec")
9
+ FileUtils.rm_f("#{File.dirname(__FILE__)}/VERSION.yml")
25
10
  end
26
11
 
27
12
  class << self
@@ -48,18 +33,11 @@ end
48
33
  assert_equal version, @jeweler.version
49
34
  end
50
35
  end
51
-
52
- def should_have_toplevel_keyword(keyword)
53
- should "have '#{keyword}' top level keyword" do
54
- assert_equal keyword, @jeweler.send(:top_level_keyword)
55
- end
56
- end
57
36
  end
58
37
 
59
38
  context 'A jeweler (with a gemspec with top level module)' do
60
39
  setup do
61
- write_version_file('foo', 'module', 'Foo', 0, 1, 0)
62
- @spec = Gem::Specification.new do |s|
40
+ spec = Gem::Specification.new do |s|
63
41
  s.name = 'foo'
64
42
  s.summary = "Simple and opinionated helper for creating Rubygem projects on GitHub"
65
43
  s.email = "josh@technicalpickles.com"
@@ -68,11 +46,12 @@ end
68
46
  s.authors = ["Josh Nichols", "Dan Croak"]
69
47
  s.files = FileList["[A-Z]*", "{generators,lib,test}/**/*"]
70
48
  end
71
- @jeweler = Jeweler.new(@spec, File.dirname(__FILE__))
72
- end
73
-
74
- teardown do
75
- @jeweler.send(:undefine_versions) if @jeweler
49
+ @jeweler = Jeweler.new(spec, File.dirname(__FILE__))
50
+
51
+ catch_out do
52
+ @jeweler.write_version(0, 1, 0)
53
+ end
54
+ @jeweler = Jeweler.new(spec, File.dirname(__FILE__))
76
55
  end
77
56
 
78
57
  should_have_major_version 0
@@ -80,11 +59,9 @@ end
80
59
  should_have_patch_version 0
81
60
  should_be_version '0.1.0'
82
61
 
83
- should_have_toplevel_keyword 'module'
84
-
85
62
  context "bumping the patch version" do
86
63
  setup do
87
- @jeweler.bump_patch_version
64
+ @output = catch_out { @jeweler.bump_patch_version }
88
65
  end
89
66
 
90
67
  should_have_major_version 0
@@ -99,7 +76,7 @@ end
99
76
 
100
77
  context "bumping the minor version" do
101
78
  setup do
102
- @jeweler.bump_minor_version
79
+ @output = catch_out { @jeweler.bump_minor_version }
103
80
  end
104
81
 
105
82
  should_have_major_version 0
@@ -114,7 +91,7 @@ end
114
91
 
115
92
  context "bumping the major version" do
116
93
  setup do
117
- @jeweler.bump_major_version
94
+ @output = catch_out { @jeweler.bump_major_version }
118
95
  end
119
96
 
120
97
  should_have_major_version 1
@@ -131,9 +108,7 @@ end
131
108
 
132
109
  context "A Jeweler (with a gemspec with top level class)" do
133
110
  setup do
134
- write_version_file('bar', 'class', 'Bar', 1, 5, 2)
135
-
136
- @spec = Gem::Specification.new do |s|
111
+ spec = Gem::Specification.new do |s|
137
112
  s.name = "bar"
138
113
  s.summary = "Simple and opinionated helper for creating Rubygem projects on GitHub"
139
114
  s.email = "josh@technicalpickles.com"
@@ -142,31 +117,59 @@ end
142
117
  s.authors = ["Josh Nichols", "Dan Croak"]
143
118
  s.files = FileList["[A-Z]*", "{generators,lib,test}/**/*"]
144
119
  end
145
- @jeweler = Jeweler.new(@spec, File.dirname(__FILE__))
146
- end
147
-
148
- teardown do
149
- @jeweler.send(:undefine_versions) if @jeweler
150
- end
120
+ @jeweler = Jeweler.new(spec, File.dirname(__FILE__))
121
+
122
+ @now = Time.now
123
+ Time.stubs(:now).returns(@now)
124
+
125
+ @output = catch_out { @jeweler.write_version(1, 5, 2) }
126
+ @jeweler = Jeweler.new(spec, File.dirname(__FILE__))
127
+ end
151
128
 
152
129
  should_have_major_version 1
153
130
  should_have_minor_version 5
154
131
  should_have_patch_version 2
155
132
  should_be_version '1.5.2'
156
- should_have_toplevel_keyword 'class'
157
133
 
158
134
  context "bumping the patch version" do
159
135
  setup do
160
- @jeweler.bump_patch_version
136
+ @output = catch_out { @jeweler.bump_patch_version }
161
137
  end
162
138
 
163
139
  should_have_major_version 1
164
140
  should_have_minor_version 5
165
141
  should_have_patch_version 3
166
142
  should_be_version '1.5.3'
143
+ end
144
+
145
+ context "writing the gemspec" do
146
+ setup do
147
+ @output = catch_out { @jeweler.write_gemspec }
148
+ end
167
149
 
168
- should_eventually "still have class Bar" do
169
- # do some regexp of version.rb
150
+ should "create bar.gemspec" do
151
+ assert File.exists?(File.join(File.dirname(__FILE__), 'bar.gemspec'))
152
+ end
153
+
154
+ should "have created a valid gemspec" do
155
+ assert @jeweler.valid_gemspec?
156
+ end
157
+
158
+
159
+ context "re-reading the gemspec" do
160
+ setup do
161
+ data = File.read(File.join(File.dirname(__FILE__), 'bar.gemspec'))
162
+
163
+ @parsed_spec = eval("$SAFE = 3\n#{data}", binding, File.join(File.dirname(__FILE__), 'bar.gemspec'))
164
+ end
165
+
166
+ should "have version 1.5.2" do
167
+ assert_equal '1.5.2', @parsed_spec.version.version
168
+ end
169
+
170
+ should "have date filled in" do
171
+ assert_equal Time.local(@now.year, @now.month, @now.day), @parsed_spec.date
172
+ end
170
173
  end
171
174
  end
172
175
  end
data/test/test_helper.rb CHANGED
@@ -5,6 +5,13 @@ gem 'thoughtbot-shoulda'
5
5
  require 'shoulda'
6
6
  gem 'ruby-debug'
7
7
  require 'ruby-debug'
8
+ gem 'mocha'
9
+ require 'mocha'
10
+
11
+ gem 'mhennemeyer-output_catcher'
12
+ require 'output_catcher'
13
+
14
+ require 'time'
8
15
 
9
16
  $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../lib')
10
17
  $LOAD_PATH.unshift(File.dirname(__FILE__))
@@ -14,4 +21,13 @@ require 'jeweler'
14
21
  class FileList
15
22
  def self.[](*args)
16
23
  end
24
+ end
25
+
26
+ class Test::Unit::TestCase
27
+
28
+ def catch_out(&block)
29
+ OutputCatcher.catch_out do
30
+ block.call
31
+ end
32
+ end
17
33
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: technicalpickles-jeweler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Nichols
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2008-10-12 00:00:00 -07:00
13
+ date: 2008-10-14 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies: []
16
16
 
@@ -26,6 +26,7 @@ files:
26
26
  - Rakefile
27
27
  - README.markdown
28
28
  - TODO
29
+ - VERSION.yml
29
30
  - lib/jeweler
30
31
  - lib/jeweler/active_support.rb
31
32
  - lib/jeweler/bumping.rb
@@ -33,7 +34,6 @@ files:
33
34
  - lib/jeweler/gemspec.rb
34
35
  - lib/jeweler/singleton.rb
35
36
  - lib/jeweler/tasks.rb
36
- - lib/jeweler/version.rb
37
37
  - lib/jeweler/versioning.rb
38
38
  - lib/jeweler.rb
39
39
  - test/jeweler_test.rb
@@ -1,7 +0,0 @@
1
- class Jeweler
2
- module Version
3
- MAJOR = 0
4
- MINOR = 0
5
- PATCH = 7
6
- end
7
- end