technicalpickles-jeweler 0.6.2 → 0.6.3

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/Rakefile CHANGED
@@ -1,6 +1,11 @@
1
1
  require 'rake'
2
2
  require 'rake/testtask'
3
- require 'rake/rdoctask'
3
+ begin
4
+ require 'hanna/rdoctask'
5
+ rescue LoadError
6
+ require 'rake/rdoctask'
7
+ end
8
+
4
9
  require 'rcov/rcovtask'
5
10
 
6
11
  $:.unshift('lib')
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
- patch: 2
3
- major: 0
4
- minor: 6
2
+ :patch: 3
3
+ :major: 0
4
+ :minor: 6
data/lib/jeweler.rb CHANGED
@@ -1,20 +1,15 @@
1
1
  require 'date'
2
+ require 'rubygems/builder'
2
3
 
3
- require 'jeweler/bumping'
4
- require 'jeweler/versioning'
4
+ require 'jeweler/version'
5
5
  require 'jeweler/gemspec'
6
6
  require 'jeweler/errors'
7
7
  require 'jeweler/generator'
8
- require 'jeweler/release'
9
8
 
10
9
  require 'jeweler/tasks'
11
10
 
12
11
  # A Jeweler helps you craft the perfect Rubygem. Give him a gemspec, and he takes care of the rest.
13
12
  class Jeweler
14
- include Jeweler::Bumping
15
- include Jeweler::Versioning
16
- include Jeweler::Gemspec
17
- include Jeweler::Release
18
13
 
19
14
  attr_reader :gemspec
20
15
  attr_accessor :base_dir
@@ -23,12 +18,210 @@ class Jeweler
23
18
  raise(GemspecError, "Can't create a Jeweler with a nil gemspec") if gemspec.nil?
24
19
  @gemspec = gemspec
25
20
  @base_dir = base_dir
26
-
27
- @gemspec.files ||= FileList["[A-Z]*.*", "{bin,generators,lib,test,spec}/**/*"]
21
+
22
+ if @gemspec.files.nil? || @gemspec.files.empty?
23
+ @gemspec.files = FileList["[A-Z]*.*", "{bin,generators,lib,test,spec}/**/*"]
24
+ end
28
25
 
29
26
  if File.exists?(File.join(base_dir, '.git'))
30
27
  @repo = Git.open(base_dir)
31
28
  end
29
+
30
+ @version = Jeweler::Version.new(@base_dir)
31
+ end
32
+
33
+ # Major version, as defined by the gemspec's Version module.
34
+ # For 1.5.3, this would return 1.
35
+ def major_version
36
+ @version.major
37
+ end
38
+
39
+ # Minor version, as defined by the gemspec's Version module.
40
+ # For 1.5.3, this would return 5.
41
+ def minor_version
42
+ @version.minor
43
+ end
44
+
45
+ # Patch version, as defined by the gemspec's Version module.
46
+ # For 1.5.3, this would return 5.
47
+ def patch_version
48
+ @version.patch
49
+ end
50
+
51
+ # Human readable version, which is used in the gemspec.
52
+ def version
53
+ @version.to_s
54
+ end
55
+
56
+ # Writes out the gemspec
57
+ def write_gemspec
58
+ self.refresh_version
59
+
60
+ helper = gemspec_helper do |s|
61
+ s.version = self.version
62
+ s.date = Time.now
63
+ end
64
+
65
+ helper.write
66
+
67
+ puts "Generated: #{helper.path}"
68
+ end
69
+
70
+ # Validates the project's gemspec from disk in an environment similar to how
71
+ # GitHub would build from it. See http://gist.github.com/16215
72
+ def validate_gemspec
73
+ begin
74
+ gemspec_helper.parse
75
+ puts "#{gemspec_path} is valid."
76
+ rescue Exception => e
77
+ puts "#{gemspec_path} is invalid. See the backtrace for more details."
78
+ raise
79
+ end
80
+ end
81
+
82
+
83
+ # is the project's gemspec from disk valid?
84
+ def valid_gemspec?
85
+ gemspec_helper.valid?
86
+ end
87
+
88
+ # parses the project's gemspec from disk without extra sanity checks
89
+ def unsafe_parse_gemspec(data = nil)
90
+ data ||= File.read(gemspec_path)
91
+ eval(data, binding, gemspec_path)
92
+ end
93
+
94
+ def build_gem
95
+ parsed_gemspec = unsafe_parse_gemspec()
96
+ Gem::Builder.new(parsed_gemspec).build
97
+
98
+ pkg_dir = File.join(@base_dir, 'pkg')
99
+ FileUtils.mkdir_p pkg_dir
100
+
101
+ gem_filename = File.join(@base_dir, parsed_gemspec.file_name)
102
+ FileUtils.mv gem_filename, pkg_dir
103
+ end
104
+
105
+ def install_gem
106
+ command = "sudo gem install #{gem_path}"
107
+ $stdout.puts "Executing #{command.inspect}:"
108
+ sh command
109
+ end
110
+
111
+ # Bumps the patch version.
112
+ #
113
+ # 1.5.1 -> 1.5.2
114
+ def bump_patch_version(options = {})
115
+ options = version_writing_options(options)
116
+
117
+ @version.bump_patch
118
+ @version.write
119
+
120
+ commit_version if options[:commit]
121
+ end
122
+
123
+ # Bumps the minor version.
124
+ #
125
+ # 1.5.1 -> 1.6.0
126
+ def bump_minor_version(options = {})
127
+ options = version_writing_options(options)
128
+
129
+ @version.bump_minor
130
+ @version.write
131
+
132
+ commit_version if options[:commit]
133
+ end
134
+
135
+ # Bumps the major version.
136
+ #
137
+ # 1.5.1 -> 2.0.0
138
+ def bump_major_version(options = {})
139
+ options = version_writing_options(options)
140
+
141
+ @version.bump_major
142
+ @version.write
143
+
144
+ commit_version if options[:commit]
145
+ end
146
+
147
+ # Bumps the version, to the specific major/minor/patch version, writing out the appropriate version.rb, and then reloads it.
148
+ def write_version(major, minor, patch, options = {})
149
+ options = version_writing_options(options)
150
+
151
+ @version.update_to major, minor, patch
152
+ @version.write
153
+
154
+ @gemspec.version = @version.to_s
155
+
156
+ commit_version if options[:commit]
157
+ end
158
+
159
+
160
+ def release
161
+ @repo.checkout('master')
162
+
163
+ raise "Hey buddy, try committing them files first" if any_pending_changes?
164
+
165
+ write_gemspec()
166
+
167
+ @repo.add(gemspec_path)
168
+ $stdout.puts "Committing #{gemspec_path}"
169
+ @repo.commit("Regenerated gemspec for version #{version}")
170
+
171
+ $stdout.puts "Pushing master to origin"
172
+ @repo.push
173
+
174
+ $stdout.puts "Tagging #{release_tag}"
175
+ @repo.add_tag(release_tag)
176
+
177
+ $stdout.puts "Pushing #{release_tag} to origin"
178
+ @repo.push('origin', release_tag)
179
+ end
180
+
181
+ def release_tag
182
+ @release_tag ||= "v#{version}"
183
+ end
184
+
185
+ protected
186
+
187
+ def version_writing_options(options)
188
+ {:commit => true}.merge(options)
189
+ end
190
+
191
+ def commit_version
192
+ if @repo
193
+ @repo.add('VERSION.yml')
194
+ @repo.commit("Version bump to #{version}", 'VERSION.yml')
195
+ end
196
+ end
197
+
198
+ def refresh_version
199
+ @version.refresh
200
+ end
201
+
202
+ def gemspec_helper(&block)
203
+ GemSpecHelper.new(@gemspec, @base_dir, &block)
32
204
  end
205
+
206
+ def gemspec_path
207
+ gemspec_helper.path
208
+ end
209
+
210
+ def gem_path
211
+ parsed_gemspec = unsafe_parse_gemspec()
212
+ File.join(@base_dir, 'pkg', parsed_gemspec.file_name)
213
+ end
214
+
215
+ def any_pending_changes?
216
+ unless ENV['JEWELER_DEBUG'].nil? || ENV['JEWELER_DEBUG'].squeeze == ''
217
+ require 'ruby-debug'; breakpoint
218
+ end
219
+ !(@repo.status.added.empty? && @repo.status.deleted.empty? && @repo.status.changed.empty?)
220
+ end
221
+
222
+ protected
223
+ def any_pending_changes?
224
+ !(@repo.status.added.empty? && @repo.status.deleted.empty? && @repo.status.changed.empty?)
225
+ end
33
226
  end
34
227
 
@@ -1,53 +1,41 @@
1
1
  class Jeweler
2
- module Gemspec
3
- # Writes out the gemspec
4
- def write_gemspec
5
- self.refresh_version
6
- @gemspec.version = self.version
7
- @gemspec.date = Time.now
8
- File.open(gemspec_path, 'w') do |f|
9
- f.write @gemspec.to_ruby
10
- end
11
- puts "Generated: #{gemspec_path}"
12
- end
13
2
 
14
- # Validates the gemspec in an environment similar to how GitHub would build
15
- # it. See http://gist.github.com/16215
16
- def validate_gemspec
17
- begin
18
- parse_gemspec
19
- puts "#{gemspec_path} is valid."
20
- rescue Exception => e
21
- puts "#{gemspec_path} is invalid. See the backtrace for more details."
22
- raise
23
- end
24
- end
3
+ class GemSpecHelper
4
+
5
+ attr_accessor :spec, :base_dir
25
6
 
7
+ def initialize(spec, base_dir = nil)
8
+ self.spec = spec
9
+ self.base_dir = base_dir || ''
26
10
 
27
- def valid_gemspec?
11
+ yield spec if block_given?
12
+ end
13
+
14
+ def valid?
28
15
  begin
29
- parse_gemspec
16
+ parse
30
17
  true
31
- rescue Exception => e
18
+ rescue
32
19
  false
33
20
  end
34
21
  end
35
-
36
- def parse_gemspec(data = nil)
37
- data ||= File.read(gemspec_path)
38
- Thread.new { eval("$SAFE = 3\n#{data}", binding, gemspec_path) }.join
22
+
23
+ def write
24
+ File.open(path, 'w') do |f|
25
+ f.write @spec.to_ruby
26
+ end
39
27
  end
40
28
 
41
- def unsafe_parse_gemspec(data = nil)
42
- data ||= File.read(gemspec_path)
43
- eval(data, binding, gemspec_path)
29
+ def path
30
+ denormalized_path = File.join(@base_dir, "#{@spec.name}.gemspec")
31
+ absolute_path = File.expand_path(denormalized_path)
32
+ absolute_path.gsub(Dir.getwd + File::SEPARATOR, '')
44
33
  end
45
34
 
46
- protected
47
- def gemspec_path
48
- denormalized_path = File.join(@base_dir, "#{@gemspec.name}.gemspec")
49
- absolute_path = File.expand_path(denormalized_path)
50
- absolute_path.gsub(Dir.getwd + File::SEPARATOR, '')
35
+ def parse
36
+ data = File.read(path)
37
+ Thread.new { eval("$SAFE = 3\n#{data}", binding, path) }.join
51
38
  end
39
+
52
40
  end
53
41
  end
data/lib/jeweler/tasks.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  require 'rake'
2
2
  require 'rake/tasklib'
3
- require 'rubygems/builder'
4
3
 
5
4
  class Jeweler
6
5
  class Tasks < ::Rake::TaskLib
@@ -16,18 +15,27 @@ class Jeweler
16
15
  end
17
16
 
18
17
  private
19
- def ensure_version_yml(&block)
20
- unless File.exists? 'VERSION.yml'
21
- @jeweler.write_version(ENV['MAJOR'], ENV['MINOR'], ENV['PATCH'])
18
+ def define
19
+ desc "Setup initial version of 0.0.0"
20
+ file "VERSION.yml" do
21
+ @jeweler.write_version 0, 0, 0, :commit => false
22
+ $stdout.puts "Created VERSION.yml: 0.0.0"
22
23
  end
23
- block.call if block
24
- end
25
24
 
26
- def define
27
- desc "Generate a gem"
28
- task :gem => :'gemspec:validate' do
29
- gemspec = @jeweler.unsafe_parse_gemspec
30
- Gem::Builder.new(gemspec).build
25
+
26
+ desc "Build gem"
27
+ task :gem => :'gem:build'
28
+
29
+ namespace :gem do
30
+ desc "Install gem using sudo"
31
+ task :install => :build do
32
+ @jeweler.install_gem
33
+ end
34
+
35
+ desc "Build gem"
36
+ task :build => :'gemspec:validate' do
37
+ @jeweler.build_gem
38
+ end
31
39
  end
32
40
 
33
41
  desc "Generate and validates gemspec"
@@ -35,15 +43,13 @@ class Jeweler
35
43
 
36
44
  namespace :gemspec do
37
45
  desc "Validates the gemspec"
38
- task :validate do
46
+ task :validate => 'VERSION.yml' do
39
47
  @jeweler.validate_gemspec
40
48
  end
41
49
 
42
- desc "Generates the gemspec"
43
- task :generate do
44
- ensure_version_yml do
45
- @jeweler.write_gemspec
46
- end
50
+ desc "Generates the gemspec, using version from VERSION.yml"
51
+ task :generate => 'VERSION.yml' do
52
+ @jeweler.write_gemspec
47
53
  end
48
54
  end
49
55
 
@@ -51,38 +57,38 @@ class Jeweler
51
57
  task :version => 'version:display'
52
58
 
53
59
  namespace :version do
54
- desc "Creates an initial version file. Respects the following environment variables, or defaults to 0: MAJOR, MINOR, PATCH"
60
+ desc "Setup initial version of 0.0.0"
61
+ task :setup => "VERSION.yml"
62
+
63
+ desc "Writes out an explicit version. Respects the following environment variables, or defaults to 0: MAJOR, MINOR, PATCH"
55
64
  task :write do
56
- @jeweler.write_version(ENV['MAJOR'], ENV['MINOR'], ENV['PATCH'])
65
+ major, minor, patch = ENV['MAJOR'].to_i, ENV['MINOR'].to_i, ENV['PATCH'].to_i
66
+ @jeweler.write_version(major, minor, patch, :announce => false, :commit => false)
67
+ $stdout.puts "Updated version: #{@jeweler.version}"
57
68
  end
58
69
 
59
70
  desc "Displays the current version"
60
- task :display do
61
- ensure_version_yml do
62
- puts "Current version: #{@jeweler.version}"
63
- end
71
+ task :display => :setup do
72
+ $stdout.puts "Current version: #{@jeweler.version}"
64
73
  end
65
74
 
66
75
  namespace :bump do
67
76
  desc "Bump the gemspec by a major version."
68
- task :major => 'version:display' do
69
- ensure_version_yml do
70
- @jeweler.bump_major_version
71
- end
77
+ task :major => ['VERSION.yml', :display] do
78
+ @jeweler.bump_major_version
79
+ $stdout.puts "Updated version: #{@jeweler.version}"
72
80
  end
73
81
 
74
82
  desc "Bump the gemspec by a minor version."
75
- task :minor => 'version:display' do
76
- ensure_version_yml do
77
- @jeweler.bump_minor_version
78
- end
83
+ task :minor => ['VERSION.yml', 'version:display'] do
84
+ @jeweler.bump_minor_version
85
+ $stdout.puts "Updated version: #{@jeweler.version}"
79
86
  end
80
87
 
81
88
  desc "Bump the gemspec by a patch version."
82
- task :patch => 'version:display' do
83
- ensure_version_yml do
84
- @jeweler.bump_patch_version
85
- end
89
+ task :patch => ['VERSION.yml', 'version:display'] do
90
+ @jeweler.bump_patch_version
91
+ $stdout.puts "Updated version: #{@jeweler.version}"
86
92
  end
87
93
  end
88
94
  end
@@ -0,0 +1,81 @@
1
+ class Jeweler
2
+ class Version
3
+ attr_accessor :base_dir
4
+ attr_reader :major, :minor, :patch
5
+
6
+ def initialize(base_dir)
7
+ self.base_dir = base_dir
8
+
9
+ if File.exists?(yaml_path)
10
+ parse_yaml
11
+ end
12
+ end
13
+
14
+ def bump_major
15
+ @major += 1
16
+ @minor = 0
17
+ @patch = 0
18
+ end
19
+
20
+ def bump_minor
21
+ @minor += 1
22
+ @patch = 0
23
+ end
24
+
25
+ def bump_patch
26
+ @patch += 1
27
+ end
28
+
29
+ def update_to(major, minor, patch)
30
+ @major = major
31
+ @minor = minor
32
+ @patch = patch
33
+ end
34
+
35
+ def write
36
+ File.open(yaml_path, 'w+') do |f|
37
+ YAML.dump(self.to_hash, f)
38
+ end
39
+ end
40
+
41
+ def to_s
42
+ "#{major}.#{minor}.#{patch}"
43
+ end
44
+
45
+ def to_hash
46
+ {
47
+ :major => major,
48
+ :minor => minor,
49
+ :patch => patch
50
+ }
51
+ end
52
+
53
+ def refresh
54
+ parse_yaml
55
+ end
56
+
57
+ def yaml_path
58
+ denormalized_path = File.join(@base_dir, 'VERSION.yml')
59
+ absolute_path = File.expand_path(denormalized_path)
60
+ absolute_path.gsub(Dir.getwd + File::SEPARATOR, '')
61
+ end
62
+
63
+ protected
64
+
65
+ def parse_yaml
66
+ yaml = read_yaml
67
+ @major = (yaml['major'] || yaml[:major]).to_i
68
+ @minor = (yaml['minor'] || yaml[:minor]).to_i
69
+ @patch = (yaml['patch'] || yaml[:patch]).to_i
70
+ end
71
+
72
+ def read_yaml
73
+ if File.exists?(yaml_path)
74
+ YAML.load_file(yaml_path)
75
+ else
76
+ raise VersionYmlError, "#{yaml_path} does not exist!"
77
+ end
78
+ end
79
+
80
+ end
81
+ end
@@ -0,0 +1,32 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class GemspecTest < Test::Unit::TestCase
4
+ context "A Jeweler::GemSpec, given a gemspec" do
5
+ setup do
6
+ @spec = build_spec
7
+ @helper = Jeweler::GemSpecHelper.new(@spec, File.dirname(__FILE__))
8
+ end
9
+
10
+ should 'have sane gemspec path' do
11
+ assert_equal "test/#{@spec.name}.gemspec", @helper.path
12
+ end
13
+ end
14
+
15
+ context "Jeweler::GemSpec#write" do
16
+ setup do
17
+ @spec = build_spec
18
+ @helper = Jeweler::GemSpecHelper.new(@spec)
19
+ FileUtils.rm_f(@helper.path)
20
+
21
+ @helper.write
22
+ end
23
+
24
+ should "create gemspec file" do
25
+ assert File.exists?(@helper.path)
26
+ end
27
+
28
+ should "make valid spec" do
29
+ assert @helper.valid?
30
+ end
31
+ end
32
+ end
@@ -68,7 +68,7 @@ class JewelerGeneratorInitializerTest < Test::Unit::TestCase
68
68
  end
69
69
  end
70
70
 
71
- context "without github username set" do
71
+ context "without github token set" do
72
72
  setup do
73
73
  Jeweler::Generator.any_instance.stubs(:read_git_config).
74
74
  returns({'user.email' => 'bar@example.com', 'user.name' => 'foo', 'github.user' => 'technicalpickles'})
@@ -143,4 +143,4 @@ class JewelerGeneratorInitializerTest < Test::Unit::TestCase
143
143
  end
144
144
  end
145
145
  end
146
- end
146
+ end
data/test/jeweler_test.rb CHANGED
@@ -12,18 +12,6 @@ class JewelerTest < Test::Unit::TestCase
12
12
  FileUtils.rm_rf("#{File.dirname(__FILE__)}/tmp")
13
13
  end
14
14
 
15
- def build_spec
16
- Gem::Specification.new do |s|
17
- s.name = "bar"
18
- s.summary = "Simple and opinionated helper for creating Rubygem projects on GitHub"
19
- s.email = "josh@technicalpickles.com"
20
- s.homepage = "http://github.com/technicalpickles/jeweler"
21
- s.description = "Simple and opinionated helper for creating Rubygem projects on GitHub"
22
- s.authors = ["Josh Nichols", "Dan Croak"]
23
- s.files = FileList["[A-Z]*", "{generators,lib,test}/**/*"]
24
- end
25
- end
26
-
27
15
  context "A jeweler without a VERSION.yml" do
28
16
  setup do
29
17
  FileUtils.mkdir_p(tmp_dir)
@@ -31,7 +19,7 @@ class JewelerTest < Test::Unit::TestCase
31
19
  end
32
20
 
33
21
  should "not have VERSION.yml" do
34
- assert ! File.exists?(File.join(tmp_dir, 'bar.gemspec'))
22
+ assert ! File.exists?(File.join(tmp_dir, 'VERSION.yml'))
35
23
  end
36
24
  end
37
25
 
@@ -39,7 +27,7 @@ class JewelerTest < Test::Unit::TestCase
39
27
  context "A Jeweler with a VERSION.yml" do
40
28
  setup do
41
29
  FileUtils.cp_r(fixture_dir, tmp_dir)
42
-
30
+
43
31
  @jeweler = Jeweler.new(build_spec, tmp_dir)
44
32
  end
45
33
 
@@ -71,6 +59,21 @@ class JewelerTest < Test::Unit::TestCase
71
59
  should_bump_version 2, 0, 0
72
60
  end
73
61
 
62
+ should "should find files" do
63
+ assert ! @jeweler.gemspec.files.empty?
64
+ end
65
+
66
+ context "with standard 'files' specified" do
67
+ setup do
68
+ @alt_jeweler = Jeweler.new(build_spec("[A-Z]*.*", "{bin,generators,lib,test,spec}/**/*"), tmp_dir)
69
+ end
70
+
71
+ should "have the same files as when no 'files' are specified" do
72
+ assert_equal @jeweler.gemspec.files, @alt_jeweler.gemspec.files
73
+ end
74
+ end
75
+
76
+
74
77
  context "writing the gemspec" do
75
78
  setup do
76
79
  @output = catch_out { @jeweler.write_gemspec }
@@ -30,9 +30,6 @@ class Test::Unit::TestCase
30
30
  should_have_minor_version minor
31
31
  should_have_patch_version patch
32
32
  should_be_version version
33
- should "output the new version, #{version}" do
34
- assert_match version, @output
35
- end
36
33
  end
37
34
  end
38
35
  end
data/test/test_helper.rb CHANGED
@@ -27,6 +27,7 @@ require 'jeweler'
27
27
  # Fake out FileList from Rake
28
28
  class FileList
29
29
  def self.[](*args)
30
+ TMP_DIR.entries - ['.','..','.DS_STORE']
30
31
  end
31
32
  end
32
33
 
@@ -47,4 +48,16 @@ class Test::Unit::TestCase
47
48
  def tmp_dir
48
49
  File.join(File.dirname(__FILE__), 'tmp')
49
50
  end
51
+
52
+ def build_spec(*files)
53
+ Gem::Specification.new do |s|
54
+ s.name = "bar"
55
+ s.summary = "Simple and opinionated helper for creating Rubygem projects on GitHub"
56
+ s.email = "josh@technicalpickles.com"
57
+ s.homepage = "http://github.com/technicalpickles/jeweler"
58
+ s.description = "Simple and opinionated helper for creating Rubygem projects on GitHub"
59
+ s.authors = ["Josh Nichols", "Dan Croak"]
60
+ s.files = FileList[*files] unless files.empty?
61
+ end
62
+ end
50
63
  end
@@ -0,0 +1,116 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class VersionTest < Test::Unit::TestCase
4
+
5
+ VERSION_TMP_DIR = File.dirname(__FILE__) + '/version_tmp'
6
+
7
+
8
+ def self.should_have_version(major, minor, patch)
9
+ should "have major version #{major}" do
10
+ assert_equal major, @version.major
11
+ end
12
+
13
+ should "have minor version #{minor}" do
14
+ assert_equal minor, @version.minor
15
+ end
16
+
17
+ should "have patch version #{patch}" do
18
+ assert_equal patch, @version.patch
19
+ end
20
+
21
+ version_s = "#{major}.#{minor}.#{patch}"
22
+ should "render string as #{version_s.inspect}" do
23
+ assert_equal version_s, @version.to_s
24
+ end
25
+
26
+ version_hash = {:major => major, :minor => minor, :patch => patch}
27
+ should "render hash as #{version_hash.inspect}" do
28
+ assert_equal version_hash, @version.to_hash
29
+ end
30
+
31
+ end
32
+
33
+ context "VERSION.yml with 3.5.4" do
34
+ setup do
35
+ FileUtils.rm_rf VERSION_TMP_DIR
36
+ FileUtils.mkdir_p VERSION_TMP_DIR
37
+
38
+ build_version_yml VERSION_TMP_DIR, 3, 5, 4
39
+
40
+ @version = Jeweler::Version.new VERSION_TMP_DIR
41
+ end
42
+
43
+ should_have_version 3, 5, 4
44
+
45
+ context "bumping major version" do
46
+ setup { @version.bump_major }
47
+ should_have_version 4, 0, 0
48
+ end
49
+
50
+ context "bumping the minor version" do
51
+ setup { @version.bump_minor }
52
+ should_have_version 3, 6, 0
53
+ end
54
+
55
+ context "bumping the patch version" do
56
+ setup { @version.bump_patch }
57
+ should_have_version 3, 5, 5
58
+ end
59
+ end
60
+
61
+ context "Non-existant VERSION.yml" do
62
+ setup do
63
+ FileUtils.rm_rf VERSION_TMP_DIR
64
+ FileUtils.mkdir_p VERSION_TMP_DIR
65
+ end
66
+
67
+ should "not raise error if the VERSION.yml doesn't exist" do
68
+ assert_nothing_raised Jeweler::VersionYmlError do
69
+ Jeweler::Version.new(VERSION_TMP_DIR)
70
+ end
71
+ end
72
+
73
+ context "setting an initial version" do
74
+ setup do
75
+ @version = Jeweler::Version.new(VERSION_TMP_DIR)
76
+ @version.update_to 0, 0, 1
77
+ end
78
+
79
+ should_have_version 0, 0, 1
80
+ should "not create VERSION.yml" do
81
+ assert ! File.exists?(File.join(VERSION_TMP_DIR, 'VERSION.yml'))
82
+ end
83
+
84
+ context "outputting" do
85
+ setup do
86
+ @version.write
87
+ end
88
+
89
+ should "create VERSION.yml" do
90
+ assert File.exists?(File.join(VERSION_TMP_DIR, 'VERSION.yml'))
91
+ end
92
+
93
+ context "re-reading VERSION.yml" do
94
+ setup do
95
+ @version = Jeweler::Version.new(VERSION_TMP_DIR)
96
+ end
97
+
98
+ should_have_version 0, 0, 1
99
+ end
100
+ end
101
+ end
102
+ end
103
+
104
+ def build_version_yml(base_dir, major, minor, patch)
105
+ version_yaml_path = File.join(base_dir, 'VERSION.yml')
106
+
107
+ File.open(version_yaml_path, 'w+') do |f|
108
+ version_hash = {
109
+ 'major' => major.to_i,
110
+ 'minor' => minor.to_i,
111
+ 'patch' => patch.to_i
112
+ }
113
+ YAML.dump(version_hash, f)
114
+ end
115
+ end
116
+ 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.6.2
4
+ version: 0.6.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Nichols
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-12-16 00:00:00 -08:00
12
+ date: 2008-12-27 00:00:00 -08:00
13
13
  default_executable: jeweler
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -36,11 +36,9 @@ files:
36
36
  - VERSION.yml
37
37
  - bin/jeweler
38
38
  - lib/jeweler
39
- - lib/jeweler/bumping.rb
40
39
  - lib/jeweler/errors.rb
41
40
  - lib/jeweler/gemspec.rb
42
41
  - lib/jeweler/generator.rb
43
- - lib/jeweler/release.rb
44
42
  - lib/jeweler/tasks.rb
45
43
  - lib/jeweler/templates
46
44
  - lib/jeweler/templates/bacon
@@ -52,11 +50,12 @@ files:
52
50
  - lib/jeweler/templates/shoulda
53
51
  - lib/jeweler/templates/shoulda/flunking_test.rb
54
52
  - lib/jeweler/templates/shoulda/test_helper.rb
55
- - lib/jeweler/versioning.rb
53
+ - lib/jeweler/version.rb
56
54
  - lib/jeweler.rb
57
55
  - test/fixtures
58
56
  - test/fixtures/bar
59
57
  - test/fixtures/bar/VERSION.yml
58
+ - test/gemspec_test.rb
60
59
  - test/generators
61
60
  - test/generators/initialization_test.rb
62
61
  - test/jeweler_generator_test.rb
@@ -65,6 +64,9 @@ files:
65
64
  - test/shoulda_macros/jeweler_macros.rb
66
65
  - test/tasks_test.rb
67
66
  - test/test_helper.rb
67
+ - test/version_test.rb
68
+ - test/version_tmp
69
+ - test/version_tmp/VERSION.yml
68
70
  - lib/jeweler/templates/.gitignore
69
71
  has_rdoc: false
70
72
  homepage: http://github.com/technicalpickles/jeweler
@@ -1,61 +0,0 @@
1
- class Jeweler
2
- module Bumping
3
- # Bumps the patch version.
4
- #
5
- # 1.5.1 -> 1.5.2
6
- def bump_patch_version()
7
- patch = self.patch_version.to_i + 1
8
-
9
- write_version(major_version, minor_version, patch)
10
- end
11
-
12
- # Bumps the minor version.
13
- #
14
- # 1.5.1 -> 1.6.0
15
- def bump_minor_version()
16
- minor = minor_version.to_i + 1
17
-
18
- write_version(major_version, minor)
19
- end
20
-
21
- # Bumps the major version.
22
- #
23
- # 1.5.1 -> 2.0.0
24
- def bump_major_version()
25
- major = major_version.to_i + 1
26
-
27
- write_version(major)
28
- end
29
-
30
- # Bumps the version, to the specific major/minor/patch version, writing out the appropriate version.rb, and then reloads it.
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)
43
- end
44
-
45
- refresh_version
46
-
47
- @gemspec.version = version
48
-
49
- puts "Wrote to #{version_yaml_path}: #{version}"
50
-
51
- commit_version
52
- end
53
-
54
- def commit_version
55
- if @repo
56
- @repo.add('VERSION.yml')
57
- @repo.commit("Version bump to #{version}", 'VERSION.yml')
58
- end
59
- end
60
- end
61
- end
@@ -1,31 +0,0 @@
1
- class Jeweler
2
- module Release
3
-
4
- def release
5
- @repo.checkout('master')
6
-
7
- raise "Hey buddy, try committing them files first" if any_pending_changes?
8
-
9
- write_gemspec()
10
-
11
- @repo.add(gemspec_path)
12
- @repo.commit("Regenerated gemspec for version #{version}")
13
- @repo.push
14
-
15
- @repo.add_tag(release_tag)
16
- @repo.push('origin', release_tag)
17
- end
18
-
19
- def release_tag
20
- @release_tag ||= "v#{version}"
21
- end
22
-
23
- protected
24
- def any_pending_changes?
25
- unless ENV['JEWELER_DEBUG'].nil? || ENV['JEWELER_DEBUG'].squeeze == ''
26
- require 'ruby-debug'; breakpoint
27
- end
28
- !(@repo.status.added.empty? && @repo.status.deleted.empty? && @repo.status.changed.empty?)
29
- end
30
- end
31
- end
@@ -1,50 +0,0 @@
1
- require 'yaml'
2
- class Jeweler
3
- module Versioning
4
- # Major version, as defined by the gemspec's Version module.
5
- # For 1.5.3, this would return 1.
6
- def major_version
7
- version_yaml['major']
8
- end
9
-
10
- # Minor version, as defined by the gemspec's Version module.
11
- # For 1.5.3, this would return 5.
12
- def minor_version
13
- version_yaml['minor']
14
- end
15
-
16
- # Patch version, as defined by the gemspec's Version module.
17
- # For 1.5.3, this would return 5.
18
- def patch_version
19
- version_yaml['patch']
20
- end
21
-
22
- # Human readable version, which is used in the gemspec.
23
- def version
24
- "#{major_version}.#{minor_version}.#{patch_version}"
25
- end
26
-
27
- protected
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, '')
32
- end
33
-
34
- def version_yaml
35
- @version_yaml ||= read_version_yaml
36
- end
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!"
43
- end
44
- end
45
-
46
- def refresh_version
47
- @version_yaml = read_version_yaml
48
- end
49
- end
50
- end