ritual 0.0.5 → 0.1.0

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/CHANGELOG CHANGED
@@ -1,3 +1,8 @@
1
+ == 0.1.0 2011-01-17
2
+
3
+ * Subtasks are now public, and namespaced under repo: and gem:.
4
+ * Add remove_task and replace_task, for customizing the subtasks.
5
+
1
6
  == 0.0.5 2010-08-25
2
7
 
3
8
  * Support more than 3 version components via version.increment(n).
@@ -1,8 +1,6 @@
1
1
  require 'date'
2
2
  require 'fileutils'
3
-
4
- desc "Build and install the gem."
5
- task :install => %w'ritual:build_gem ritual:install_gem'
3
+ require 'ritual/lib'
6
4
 
7
5
  desc "Select a major version bump."
8
6
  task :major do
@@ -20,16 +18,13 @@ task :patch do
20
18
  end
21
19
 
22
20
  desc "Bump the selected version component and do the release ritual."
23
- task :release => %w'ritual:check_release_args ritual:bump ritual:tag ritual:push ritual:build_gem ritual:push_gem'
21
+ task :release => %w'repo:bump repo:tag repo:push gem:build gem:push'
24
22
 
25
- # Private helper tasks.
26
- namespace :ritual do
27
- task :check_release_args do
23
+ namespace :repo do
24
+ desc "Bump and commit the version file and changelog."
25
+ task :bump do
28
26
  Ritual.component or
29
27
  raise "Please select a version component to bump, e.g.: rake patch release"
30
- end
31
-
32
- task :bump do
33
28
  version.increment(Ritual.component)
34
29
  changelog.set_latest_version(version)
35
30
  version.write
@@ -38,137 +33,44 @@ namespace :ritual do
38
33
  puts "Bumped to version #{version}."
39
34
  end
40
35
 
36
+ desc "Tag the release with the current version."
41
37
  task :tag do
42
38
  sh "git tag v#{version}"
43
39
  end
44
40
 
41
+ desc "Push updates upstream."
45
42
  task :push do
46
43
  sh "git push origin master"
47
44
  end
45
+ end
48
46
 
49
- task :build_gem do
47
+ namespace :gem do
48
+ desc "Build the gem."
49
+ task :build do
50
50
  sh "gem build #{library_name}.gemspec"
51
51
  end
52
52
 
53
- task :push_gem do
53
+ desc "Push the gem to the gem server."
54
+ task :push do
54
55
  sh "gem push #{library_name}-#{version}.gem"
55
56
  end
56
57
 
57
- task :install_gem do
58
+ desc "Install the gem. May require running with sudo."
59
+ task :install => :build do
58
60
  sh "gem install #{library_name}-#{version}.gem"
59
61
  end
60
62
  end
61
63
 
62
- module Ritual
63
- class << self
64
- attr_accessor :component
65
-
66
- def library_name
67
- ENV['LIB'] || default_library_name
68
- end
69
-
70
- def default_library_name
71
- gemspecs = Dir['*.gemspec']
72
- names = gemspecs.map{|path| File.basename(path, '.gemspec')}
73
- if names.size.zero?
74
- abort "cannot find any gemspecs"
75
- elsif names.size > 1
76
- abort "choose a gemspec: LIB=#{names.join('|')}"
77
- end
78
- names.first
79
- end
80
- end
81
-
82
- class Version
83
- def initialize(library_name)
84
- @library_name = library_name
85
- @value ||= read
86
- end
87
-
88
- attr_reader :value, :library_name
89
-
90
- def to_s
91
- value.to_s
92
- end
93
-
94
- def read
95
- File.exist?(path) or
96
- write([0, 0, 0])
97
- load path
98
- self.module::VERSION
99
- end
100
-
101
- def write(value=self.value)
102
- FileUtils.mkdir_p File.dirname(path)
103
- open(path, 'w') do |file|
104
- file.puts <<-EOS.gsub(/^ *\|/, '')
105
- |module #{module_name}
106
- | VERSION = #{value.inspect}
107
- |
108
- | class << VERSION
109
- | include Comparable
110
- |
111
- | def to_s
112
- | join('.')
113
- | end
114
- | end
115
- |end
116
- EOS
117
- end
118
- end
119
-
120
- def increment(component)
121
- (value.size..component).each{|i| value[i] = 0}
122
- value[component] += 1
123
- (component+1 ... value.size).each{|i| value[i] = 0}
124
- end
125
-
126
- def path
127
- "lib/#{library_name}/version.rb"
128
- end
129
-
130
- def module_name
131
- library_name.gsub(/(?:\A|_)(.)/){$1.upcase}
132
- end
133
-
134
- def module
135
- Object.const_defined?(module_name) or
136
- Object.const_set(module_name, Module.new)
137
- Object.const_get(module_name)
138
- end
139
- end
140
-
141
- class Changelog
142
- def path
143
- 'CHANGELOG'
144
- end
145
-
146
- def set_latest_version(version)
147
- File.exist?(path) or
148
- raise "Don't release without a CHANGELOG!"
149
- text = File.read(path)
150
- heading = "#{version} #{Date.today.strftime('%Y-%m-%d')}"
151
- text.sub!(/^(== )LATEST$/i, "\\1#{heading}") or
152
- raise "No LATEST entry in CHANGELOG - did you forget to update it?"
153
- open(path, 'w'){|f| f.print text}
154
- end
155
- end
156
- end
157
-
158
- #
159
- # Global API
160
- #
161
-
162
64
  def library_name
163
65
  Ritual.library_name
164
66
  end
165
67
 
166
68
  def version
167
- @version ||= Ritual::Version.new(library_name)
69
+ @version ||= Ritual.version_file
168
70
  end
169
71
 
170
72
  def changelog
171
- @changelog ||= Ritual::Changelog.new
73
+ @changelog ||= Ritual.changelog
172
74
  end
173
75
 
174
76
  def spec_task(*args, &block)
@@ -187,3 +89,42 @@ def rdoc_task(*args, &block)
187
89
  require 'rake/rdoctask'
188
90
  Rake::RDocTask.new(*args, &block)
189
91
  end
92
+
93
+ def remove_task(name)
94
+ Rake.application.instance_variable_get(:@tasks).delete(name) or
95
+ raise ArgumentError, "task not found: #{name}"
96
+ end
97
+
98
+ def replace_task(name, *args, &block)
99
+ remove_task name
100
+ task(name, *args, &block)
101
+ end
102
+
103
+ module Ritual
104
+ class << self
105
+ attr_accessor :component
106
+
107
+ def library_name
108
+ ENV['LIB'] || default_library_name
109
+ end
110
+
111
+ def default_library_name
112
+ gemspecs = Dir['*.gemspec']
113
+ names = gemspecs.map{|path| File.basename(path, '.gemspec')}
114
+ if names.size.zero?
115
+ abort "cannot find any gemspecs"
116
+ elsif names.size > 1
117
+ abort "choose a gemspec: LIB=#{names.join('|')}"
118
+ end
119
+ names.first
120
+ end
121
+
122
+ def version_file
123
+ @version ||= VersionFile.new("lib/#{library_name}/version.rb", library_name)
124
+ end
125
+
126
+ def changelog
127
+ @changelog ||= Changelog.new('CHANGELOG')
128
+ end
129
+ end
130
+ end
@@ -0,0 +1,21 @@
1
+ module Ritual
2
+ class Changelog
3
+ Error = Class.new(RuntimeError)
4
+
5
+ def initialize(path)
6
+ @path = path
7
+ end
8
+
9
+ attr_reader :path
10
+
11
+ def set_latest_version(version)
12
+ File.exist?(path) or
13
+ raise Error, "Don't release without a CHANGELOG!"
14
+ text = File.read(path)
15
+ heading = "#{version} #{Date.today.strftime('%Y-%m-%d')}"
16
+ text.sub!(/^(== )LATEST$/i, "\\1#{heading}") or
17
+ raise Error, "No LATEST entry in CHANGELOG - did you forget to update it?"
18
+ open(path, 'w'){|f| f.print text}
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,5 @@
1
+ module Ritual
2
+ autoload :Changelog, 'ritual/changelog'
3
+ autoload :VersionFile, 'ritual/version_file'
4
+ autoload :VERSION, 'ritual/version'
5
+ end
@@ -1,5 +1,5 @@
1
1
  module Ritual
2
- VERSION = [0, 0, 5]
2
+ VERSION = [0, 1, 0]
3
3
 
4
4
  class << VERSION
5
5
  include Comparable
@@ -0,0 +1,61 @@
1
+ module Ritual
2
+ class VersionFile
3
+ def initialize(path, library_name)
4
+ @path = path
5
+ @library_name = library_name
6
+ @value ||= read
7
+ end
8
+
9
+ attr_reader :path, :library_name, :value
10
+
11
+ def to_s
12
+ value.join('.')
13
+ end
14
+
15
+ def write
16
+ FileUtils.mkdir_p File.dirname(path)
17
+ open(path, 'w') do |file|
18
+ file.puts <<-EOS.gsub(/^ *\|/, '')
19
+ |module #{module_name}
20
+ | VERSION = #{value.inspect}
21
+ |
22
+ | class << VERSION
23
+ | include Comparable
24
+ |
25
+ | def to_s
26
+ | join('.')
27
+ | end
28
+ | end
29
+ |end
30
+ EOS
31
+ end
32
+ end
33
+
34
+ def increment(component)
35
+ (value.size..component).each{|i| value[i] = 0}
36
+ value[component] += 1
37
+ (component+1 ... value.size).each{|i| value[i] = 0}
38
+ end
39
+
40
+ private
41
+
42
+ def read
43
+ if File.exist?(path)
44
+ File.read(path) =~ /^\s*VERSION\s*=\s*(\[.*?\])/ and
45
+ eval $1
46
+ else
47
+ [0, 0, 0]
48
+ end
49
+ end
50
+
51
+ def module
52
+ Object.const_defined?(module_name) or
53
+ Object.const_set(module_name, Module.new)
54
+ Object.const_get(module_name)
55
+ end
56
+
57
+ def module_name
58
+ library_name.gsub(/(?:\A|_)(.)/){$1.upcase}
59
+ end
60
+ end
61
+ end
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ritual
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 27
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
8
+ - 1
7
9
  - 0
8
- - 5
9
- version: 0.0.5
10
+ version: 0.1.0
10
11
  platform: ruby
11
12
  authors:
12
13
  - George Ogata
@@ -14,10 +15,23 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-08-25 00:00:00 -04:00
18
+ date: 2011-01-17 00:00:00 -05:00
18
19
  default_executable:
19
- dependencies: []
20
-
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rake
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :runtime
34
+ version_requirements: *id001
21
35
  description: |
22
36
  Adds tasks and helpers to your Rakefile to manage releases in a
23
37
  lightweight manner.
@@ -31,7 +45,10 @@ extensions: []
31
45
  extra_rdoc_files: []
32
46
 
33
47
  files:
48
+ - lib/ritual/changelog.rb
49
+ - lib/ritual/lib.rb
34
50
  - lib/ritual/version.rb
51
+ - lib/ritual/version_file.rb
35
52
  - lib/ritual.rb
36
53
  - LICENSE
37
54
  - README.markdown
@@ -47,16 +64,20 @@ rdoc_options: []
47
64
  require_paths:
48
65
  - lib
49
66
  required_ruby_version: !ruby/object:Gem::Requirement
67
+ none: false
50
68
  requirements:
51
69
  - - ">="
52
70
  - !ruby/object:Gem::Version
71
+ hash: 3
53
72
  segments:
54
73
  - 0
55
74
  version: "0"
56
75
  required_rubygems_version: !ruby/object:Gem::Requirement
76
+ none: false
57
77
  requirements:
58
78
  - - ">="
59
79
  - !ruby/object:Gem::Version
80
+ hash: 23
60
81
  segments:
61
82
  - 1
62
83
  - 3
@@ -65,7 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
65
86
  requirements: []
66
87
 
67
88
  rubyforge_project:
68
- rubygems_version: 1.3.6
89
+ rubygems_version: 1.3.7
69
90
  signing_key:
70
91
  specification_version: 3
71
92
  summary: Rakefile release tasks and helpers.