app_version 0.1.1

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/README.rdoc ADDED
@@ -0,0 +1,97 @@
1
+ = App Version
2
+
3
+ This is a simple plugin that makes it easy to manage the version number of your
4
+ Rails application. The version numbers supported by this plugin look like
5
+ '2.0.1 M4 (600) of branch by coder on 2008-10-27'.
6
+
7
+ The components of the version number are:
8
+
9
+ 2 => major
10
+ 0 => minor
11
+ 1 => patch
12
+ M4 => milestone
13
+ (600) => build number (usually Subversion revision)
14
+ branch => the name of the branch this version is from.
15
+ coder => the name of the user that made the release
16
+ 2008-10-27 => the date of the release
17
+
18
+ Only the major and minor numbers are required. The rest can be omitted and the
19
+ plugin will attempt to do the right thing.
20
+
21
+ == Install
22
+
23
+ To install this plugin from gitHub run the following command:
24
+
25
+ ./script/plugin install git://github.com/toland/app_version.git
26
+
27
+ == Usage
28
+
29
+ To use, simply place a file in RAILS_ROOT/config called version.yml with the
30
+ following format:
31
+
32
+ major: 2
33
+ minor: 0
34
+ patch: 1
35
+ milestone: 4
36
+ build: git-revcount
37
+ branch: master
38
+ committer: coder
39
+ build_date: 2008-10-27
40
+
41
+ If the milestone or patch fields are less than 0 then they will not show up
42
+ in the version string. The build field can be a build number or one of the
43
+ following strings: svn, git-hash or git-revcount. If it is a number then that
44
+ number will be used as the build number, if it is one of the special strings
45
+ then the plugin will attempt to query the source control system for the build
46
+ number. The build date field can be a date or the following string: git-revdate.
47
+ If you use the special string it will query the source control system and output
48
+ in YYYY-MM-DD format the commit date of the last revision.
49
+
50
+ Using 'svn' for the build number will cause the plugin to query Subversion for
51
+ the current revision number. Since Git doesn't have a numbered revision we have
52
+ to fake it. 'git-revcount' will count the number of commits to the repository
53
+ and use that as the build number whereas 'git-hash' will use the first 6 digits
54
+ of the current HEAD's hash.
55
+
56
+ The plugin creates a constant APP_VERSION that contains the version number of
57
+ the application. Calling the +to_s+ method on APP_VERSION will result in a
58
+ properly formatted version number. APP_VERSION also has +major+, +minor+,
59
+ +patch+, +milestone+, +build+, +branch+, +committer+, and +build_date+
60
+ methods to retrieve the individual components of the version number.
61
+
62
+ == Capistrano Usage
63
+
64
+ When the app_version plugin is installed, it copies a templated edition of the
65
+ version.yml file into /lib/templates/version.yml.erb, the initial file shows a
66
+ tag for retrieving the revision count with git. It also shows displaying the
67
+ branch as specified with "set :branch" in your capistrano deploy.rb, see the
68
+ comments in the erb file for more nifty tricks.
69
+
70
+ When you do a cap deploy, there is a capistrano recipe built-in to the app_version
71
+ plugin, which will render the templated version.yml into the standard location as
72
+ mentioned above. This happens automatically after the deploy is done.
73
+
74
+ Both the standard and extended capistrano usage can co-exist in the same project
75
+ the dynamic rendering of the version.yml only happens when using capistrano to
76
+ deploy your app.
77
+
78
+ == Rake tasks
79
+
80
+ This plugin includes 4 new rake tasks:
81
+
82
+ rake app:install - will copy the version.yml and version.yml.erb into more user
83
+ accessible locations (/config, and /lib/templates)
84
+
85
+ rake app:uninstall - will remove the files copied in the install task
86
+
87
+ rake app:render - will render the erb template into /config/version.yml
88
+ in case you want to have dynamic values updated via a rake task.
89
+ Note: certain examples expect the app to be in a git working directory.
90
+
91
+ rake app:version - will output the version number of the current rails
92
+ application.
93
+
94
+ = License
95
+
96
+ This plugin is released under the terms of the Ruby license. See
97
+ http://www.ruby-lang.org/en/LICENSE.txt.
data/Rakefile ADDED
@@ -0,0 +1,22 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rdoc/task'
4
+
5
+ desc 'Default: run unit tests.'
6
+ task :default => :test
7
+
8
+ desc 'Test the app_version plugin.'
9
+ Rake::TestTask.new(:test) do |t|
10
+ t.libs << 'lib'
11
+ t.pattern = 'test/**/*_test.rb'
12
+ t.verbose = true
13
+ end
14
+
15
+ desc 'Generate documentation for the app_version plugin.'
16
+ Rake::RDocTask.new(:rdoc) do |rdoc|
17
+ rdoc.rdoc_dir = 'rdoc'
18
+ rdoc.title = 'App-version'
19
+ rdoc.options << '--line-numbers' << '--inline-source'
20
+ rdoc.rdoc_files.include('README')
21
+ rdoc.rdoc_files.include('lib/**/*.rb')
22
+ end
@@ -0,0 +1,5 @@
1
+ module App
2
+ require 'app_version/railtie' if defined?(Rails)
3
+ end
4
+
5
+ require 'app_version/app_version'
@@ -0,0 +1,149 @@
1
+ require 'active_support/core_ext/object'
2
+
3
+ require 'yaml'
4
+
5
+ module App
6
+ class Version
7
+ include Comparable
8
+
9
+ attr_accessor :major, :minor, :patch, :milestone, :build, :branch, :committer, :build_date, :format
10
+
11
+ [:major, :minor, :patch, :milestone, :build, :branch, :committer, :format].each do |attr|
12
+ define_method "#{attr}=".to_sym do |value|
13
+ instance_variable_set("@#{attr}".to_sym, value.blank? ? nil : value.to_s)
14
+ end
15
+ end
16
+
17
+ # Creates a new instance of the Version class using information in the passed
18
+ # Hash to construct the version number.
19
+ #
20
+ # Version.new(:major => 1, :minor => 0) #=> "1.0"
21
+ def initialize(args = nil)
22
+ if args && args.is_a?(Hash)
23
+ args.keys.reject {|key| key.is_a?(Symbol) }.each {|key| args[key.to_sym] = args.delete(key) }
24
+
25
+ [:major, :minor].each do |param|
26
+ raise ArgumentError.new("The #{param.to_s} parameter is required") if args[param].blank?
27
+ end
28
+
29
+ @major = args[:major].to_s
30
+ @minor = args[:minor].to_s
31
+ @patch = args[:patch].to_s unless args[:patch].blank?
32
+ @milestone = args[:milestone].to_s unless args[:milestone].blank?
33
+ @build = args[:build].to_s unless args[:build].blank?
34
+ @branch = args[:branch].to_s unless args[:branch].blank?
35
+ @committer = args[:committer].to_s unless args[:committer].blank?
36
+ @format = args[:format].to_s unless args[:format].blank?
37
+
38
+ unless args[:build_date].blank?
39
+ b_date = case args[:build_date]
40
+ when 'git-revdate'
41
+ get_revdate_from_git
42
+ else
43
+ args[:build_date].to_s
44
+ end
45
+ @build_date = Date.parse(b_date)
46
+ end
47
+
48
+ @build = case args[:build]
49
+ when 'svn'
50
+ get_build_from_subversion
51
+ when 'git-revcount'
52
+ get_revcount_from_git
53
+ when 'git-hash'
54
+ get_hash_from_git
55
+ when nil, ''
56
+ nil
57
+ else
58
+ args[:build].to_s
59
+ end
60
+ end
61
+ end
62
+
63
+ # Parses a version string to create an instance of the Version class.
64
+ def self.parse(version)
65
+ m = version.match(/(\d+)\.(\d+)(?:\.(\d+))?(?:\sM(\d+))?(?:\s\((\d+)\))?(?:\sof\s(\w+))?(?:\sby\s(\w+))?(?:\son\s(\S+))?/)
66
+
67
+ raise ArgumentError.new("The version '#{version}' is unparsable") if m.nil?
68
+
69
+ version = App::Version.new :major => m[1],
70
+ :minor => m[2],
71
+ :patch => m[3],
72
+ :milestone => m[4],
73
+ :build => m[5],
74
+ :branch => m[6],
75
+ :committer => m[7]
76
+
77
+ if (m[8] && m[8] != '')
78
+ date = Date.parse(m[8])
79
+ version.build_date = date
80
+ end
81
+
82
+ return version
83
+ end
84
+
85
+ # Loads the version information from a YAML file.
86
+ def self.load(path)
87
+ App::Version.new YAML::load(File.open(path))
88
+ end
89
+
90
+ def <=>(other)
91
+ # if !self.build.nil? && !other.build.nil?
92
+ # return self.build <=> other.build
93
+ # end
94
+
95
+ %w(build major minor patch milestone branch committer build_date).each do |meth|
96
+ rhs = self.send(meth) || -1
97
+ lhs = other.send(meth) || -1
98
+
99
+ ret = lhs <=> rhs
100
+ return ret unless ret == 0
101
+ end
102
+
103
+ return 0
104
+ end
105
+
106
+ def to_s
107
+ if @format
108
+ str = eval(@format.to_s.inspect)
109
+ else
110
+ str = "#{major}.#{minor}"
111
+ str << ".#{patch}" unless patch.blank?
112
+ str << " M#{milestone}" unless milestone.blank?
113
+ str << " (#{build})" unless build.blank?
114
+ str << " of #{branch}" unless branch.blank?
115
+ str << " by #{committer}" unless committer.blank?
116
+ str << " on #{build_date}" unless build_date.blank?
117
+ end
118
+ str
119
+ end
120
+
121
+ private
122
+
123
+ def get_build_from_subversion
124
+ if File.exists?(".svn")
125
+ #YAML.parse(`svn info`)['Revision'].value
126
+ match = /(?:\d+:)?(\d+)M?S?/.match(`svnversion . -c`)
127
+ match && match[1]
128
+ end
129
+ end
130
+
131
+ def get_revcount_from_git
132
+ if File.exists?(".git")
133
+ `git rev-list --count HEAD`.strip
134
+ end
135
+ end
136
+
137
+ def get_revdate_from_git
138
+ if File.exists?(".git")
139
+ `git show --date=short --pretty=format:%cd|head -n1`.strip
140
+ end
141
+ end
142
+
143
+ def get_hash_from_git
144
+ if File.exists?(".git")
145
+ `git show --pretty=format:%H|head -n1|cut -c 1-6`.strip
146
+ end
147
+ end
148
+ end
149
+ end
@@ -0,0 +1,12 @@
1
+ require 'app_version/app_version'
2
+ require 'rails'
3
+
4
+ module AppVersion
5
+ class Railtie < Rails::Railtie
6
+ railtie_name :app_version
7
+
8
+ rake_tasks do
9
+ load "tasks/app_version_tasks.rake"
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,21 @@
1
+ # This is your version information.
2
+ #
3
+ # This is a simple plugin that makes it easy to manage the version number of your
4
+ # Rails application. The version numbers supported by this plugin look like
5
+ # '2.0.1 M4 (600) of branch by coder on 2008-10-27'.
6
+ #
7
+ # The components that produced the example about would be:
8
+ #
9
+ # major: 2
10
+ # minor: 0
11
+ # patch: 1
12
+ # milestone: M4
13
+ # build: 600
14
+ # branch: branch
15
+ # committer: coder
16
+ # build_date: 2008-10-27
17
+ #
18
+ # major and minor are required. All others are optional - See readme in the app_version plugin
19
+
20
+ major: 1
21
+ minor: 0
@@ -0,0 +1,20 @@
1
+ # this version.yml was generated by app_version plugin
2
+ # during a capistrano deployment.
3
+ # please do not edit this file if it is in the config directory.
4
+ # instead edit the file application/lib/templates/version.yml.erb
5
+
6
+ major: 1
7
+ minor: 0
8
+ # patch: 1
9
+ # milestone: 4
10
+ build: <%= `git rev-list HEAD|wc -l`.strip %>
11
+ <%#branch: <%# branch %>
12
+ committer: <%= `git show -s --pretty=format:"%an"` %>
13
+ build_date: <%= Date.today.to_s %>
14
+
15
+ <%# nifty tricks (note these examples are commented out in erb syntax, to use them replace the # with =) -%>
16
+ <%# `git rev-list HEAD|wc -l`.strip => will insert the count of commits to the repository (git) -%>
17
+ <%# `git show -s --pretty=format:"%an"` => will insert the name of the author of the last commit (git) -%>
18
+ <%# many more options are available - see git show. -%>
19
+ <%# Date.today.to_s => will insert today's date - formatted yyyy-mm-dd -%>
20
+ <%# branch => will insert the branch variable used in capistrano -%>
data/lib/install.rb ADDED
@@ -0,0 +1,14 @@
1
+ # copy the version.yml.erb to some user editable location for example, in lib
2
+
3
+ targetTemplateDir = File.join(Rails.root.to_s, 'lib/templates')
4
+ sourceTemplateFile = File.join(File.dirname(__FILE__), 'lib/templates/version.yml.erb')
5
+
6
+ sourceSampleFile = File.join(File.dirname(__FILE__), 'lib/templates/version.yml')
7
+ targetSampleDir = File.join(Rails.root.to_s, '/config')
8
+
9
+ FileUtils.mkdir( targetTemplateDir, :verbose => true) unless File.exists?(targetTemplateDir)
10
+ FileUtils.cp( sourceTemplateFile, targetTemplateDir,:verbose => true)
11
+ FileUtils.cp( sourceSampleFile, targetSampleDir, :verbose => true )
12
+
13
+ # Show the README text file
14
+ # puts IO.read(File.join(File.dirname(__FILE__), 'README'))
@@ -0,0 +1,26 @@
1
+ namespace :app do
2
+ require 'erb'
3
+
4
+ desc 'Report the application version.'
5
+ task :version do
6
+ require File.join(File.dirname(__FILE__), "../app_version.rb")
7
+ puts "Application version: " << App::Version.load("#{Rails.root.to_s}/config/version.yml").to_s
8
+ end
9
+
10
+ desc 'Configure for initial install.'
11
+ task :install do
12
+ require File.join(File.dirname(__FILE__), "../../install.rb")
13
+ end
14
+
15
+ desc 'Clean up prior to removal.'
16
+ task :uninstall do
17
+ require File.join(File.dirname(__FILE__), "../../uninstall.rb")
18
+ end
19
+
20
+ desc 'Render the version.yml from its template.'
21
+ task :render do
22
+ template = File.read(Rails.root.to_s+ "/lib/templates/version.yml.erb")
23
+ result = ERB.new(template).result(binding)
24
+ File.open(Rails.root.to_s+ "/config/version.yml", 'w') { |f| f.write(result)}
25
+ end
26
+ end
data/lib/uninstall.rb ADDED
@@ -0,0 +1,11 @@
1
+ targetTemplateDir = File.join(RAILS_ROOT, 'lib/templates')
2
+
3
+ targetTemplateFile = File.join(RAILS_ROOT, 'lib/templates/version.yml.erb')
4
+ targetConfigSampleFile = File.join(RAILS_ROOT, '/config/version.yml')
5
+ targetTemplateSampleFile = File.join(RAILS_ROOT, 'lib/templates/version.yml')
6
+
7
+ if File.exist?(targetTemplateFile) then FileUtils.rm( targetTemplateFile, :verbose => true) end
8
+ if File.exist?(targetConfigSampleFile) then FileUtils.rm( targetConfigSampleFile, :verbose => true) end
9
+ if File.exist?(targetTemplateSampleFile) then FileUtils.rm( targetTemplateSampleFile, :verbose => true) end
10
+
11
+ if Dir.entries( targetTemplateDir ).entries.length == 2 then FileUtils.rmdir( targetTemplateDir, :verbose => true ) end
@@ -0,0 +1,275 @@
1
+ require 'test/unit'
2
+ require 'active_support'
3
+ require 'app_version'
4
+
5
+ class AppVersionTest < Test::Unit::TestCase
6
+
7
+ def setup
8
+ @version = App::Version.new
9
+ @version.major = '1'
10
+ @version.minor = '2'
11
+ @version.patch = '3'
12
+ @version.milestone = '4'
13
+ @version.build = '500'
14
+ @version.branch = 'master'
15
+ @version.committer = 'coder'
16
+ @version.build_date = Date.civil(2008, 10, 27)
17
+ end
18
+
19
+ def test_load_from_file
20
+ version = App::Version.load 'test/version.yml'
21
+ assert_equal @version, version
22
+ end
23
+
24
+ def test_create_from_string
25
+ version = App::Version.parse '1.2.3 M4 (500) of master by coder on 2008-10-27'
26
+ assert_equal @version, version
27
+
28
+ version = App::Version.parse '1.2.3 M4 (500)'
29
+ @version.branch = nil
30
+ @version.committer = nil
31
+ @version.build_date = nil
32
+ assert_equal @version, version
33
+
34
+ version = App::Version.parse '1.2.3 (500)'
35
+ @version.milestone = nil
36
+ @version.branch = nil
37
+ @version.committer = nil
38
+ @version.build_date = nil
39
+ assert_equal @version, version
40
+
41
+ version = App::Version.parse '1.2 (500)'
42
+ @version.patch = nil
43
+ @version.branch = nil
44
+ @version.committer = nil
45
+ @version.build_date = nil
46
+ assert_equal @version, version
47
+
48
+ version = App::Version.parse '1.2'
49
+ @version.milestone = nil
50
+ @version.build = nil
51
+ @version.branch = nil
52
+ @version.committer = nil
53
+ @version.build_date = nil
54
+ assert_equal @version, version
55
+
56
+ version = App::Version.parse '1.2.1'
57
+ @version.patch = 1
58
+ @version.branch = nil
59
+ @version.committer = nil
60
+ @version.build_date = nil
61
+ assert_equal @version, version
62
+
63
+ version = App::Version.parse '2007.200.10 M9 (6) of branch by coder on 2008-10-27'
64
+ @version.major = 2007
65
+ @version.minor = 200
66
+ @version.patch = 10
67
+ @version.milestone = 9
68
+ @version.build = 6
69
+ @version.branch = 'branch'
70
+ @version.committer = 'coder'
71
+ @version.build_date = Date.civil(2008, 10, 31)
72
+ assert_raises(ArgumentError) { App::Version.parse 'This is not a valid version' }
73
+ end
74
+
75
+ def test_create_from_int_hash_with_symbol_keys
76
+ version = App::Version.new :major => 1,
77
+ :minor => 2,
78
+ :patch => 3,
79
+ :milestone => 4,
80
+ :build => 500,
81
+ :branch => 'master',
82
+ :committer => 'coder',
83
+ :build_date => Date.civil(2008, 10, 27)
84
+ assert_equal @version, version
85
+ end
86
+
87
+ def test_create_from_int_hash_with_string_keys
88
+ version = App::Version.new 'major' => 1,
89
+ 'minor' => 2,
90
+ 'patch' => 3,
91
+ 'milestone' => 4,
92
+ 'build' => 500,
93
+ 'branch' => 'master',
94
+ 'committer' => 'coder',
95
+ 'build_date' => '2008-10-27'
96
+ assert_equal @version, version
97
+ end
98
+
99
+ def test_create_from_string_hash_with_symbol_keys
100
+ version = App::Version.new :major => '1',
101
+ :minor => '2',
102
+ :patch => '3',
103
+ :milestone => '4',
104
+ :build => '500',
105
+ :branch => 'master',
106
+ :committer => 'coder',
107
+ :build_date => '2008-10-27'
108
+ assert_equal @version, version
109
+ end
110
+
111
+ def test_create_from_string_hash_with_string_keys
112
+ version = App::Version.new 'major' => '1',
113
+ 'minor' => '2',
114
+ 'patch' => '3',
115
+ 'milestone' => '4',
116
+ 'build' => '500',
117
+ 'branch' => 'master',
118
+ 'committer' => 'coder',
119
+ 'build_date' => '2008-10-27'
120
+ assert_equal @version, version
121
+ end
122
+
123
+ def test_create_from_hash_with_invalid_date
124
+ # note - Date.parse will make heroic efforts to understand the date text.
125
+ version = App::Version.new :major => '1',
126
+ :minor => '2',
127
+ :patch => '3',
128
+ :milestone => '4',
129
+ :build => '500',
130
+ :branch => 'master',
131
+ :committer => 'coder',
132
+ :build_date => '12wtf34'
133
+ assert_not_equal @version, version
134
+ end
135
+
136
+ def test_should_raise_when_major_is_missing
137
+ assert_raises(ArgumentError) {
138
+ App::Version.new :minor => 2, :milestone => 3, :build => 400
139
+ }
140
+ end
141
+
142
+ def test_should_raise_when_minor_is_missing
143
+ assert_raises(ArgumentError) {
144
+ App::Version.new :major => 1, :milestone => 3, :build => 400
145
+ }
146
+ end
147
+
148
+ def test_create_without_optional_parameters
149
+ version = App::Version.new :major => 1, :minor => 2
150
+
151
+ @version.patch = nil
152
+ @version.milestone = nil
153
+ @version.build = nil
154
+ @version.branch = nil
155
+ @version.committer = nil
156
+ @version.build_date = nil
157
+ assert_equal @version, version
158
+ end
159
+
160
+ def test_create_with_0
161
+ version = App::Version.new :major => 1,
162
+ :minor => 2,
163
+ :patch => 0,
164
+ :milestone => 0,
165
+ :build => 100
166
+
167
+ assert_equal '0', version.patch
168
+ assert_equal '0', version.milestone
169
+ end
170
+
171
+ def test_create_with_nil
172
+ version = App::Version.new :major => 1,
173
+ :minor => 2,
174
+ :patch => nil,
175
+ :milestone => nil,
176
+ :build => 100,
177
+ :branch => nil,
178
+ :committer => nil,
179
+ :build_date => nil
180
+
181
+ assert_equal nil, version.patch
182
+ assert_equal nil, version.milestone
183
+ assert_equal nil, version.branch
184
+ assert_equal nil, version.committer
185
+ assert_equal nil, version.build_date
186
+ end
187
+
188
+ def test_create_with_empty_string
189
+ version = App::Version.new :major => 1,
190
+ :minor => 2,
191
+ :patch => '',
192
+ :milestone => '',
193
+ :build => 100,
194
+ :branch => '',
195
+ :committer => '',
196
+ :build_date => ''
197
+
198
+ assert_equal nil, version.patch
199
+ assert_equal nil, version.milestone
200
+ assert_equal nil, version.branch
201
+ assert_equal nil, version.committer
202
+ assert_equal nil, version.build_date
203
+ end
204
+
205
+ def test_to_s
206
+ assert_equal '1.2.3 M4 (500) of master by coder on 2008-10-27', @version.to_s
207
+ end
208
+
209
+ def test_to_s_with_no_milestone
210
+ @version.milestone = nil
211
+ assert_equal '1.2.3 (500) of master by coder on 2008-10-27', @version.to_s
212
+ end
213
+
214
+ def test_to_s_with_no_build
215
+ @version.build = nil
216
+ assert_equal '1.2.3 M4 of master by coder on 2008-10-27', @version.to_s
217
+ end
218
+
219
+ def test_to_s_with_no_patch
220
+ @version.patch = nil
221
+ assert_equal '1.2 M4 (500) of master by coder on 2008-10-27', @version.to_s
222
+ end
223
+
224
+ def test_to_s_with_no_build_or_milestone
225
+ @version.milestone = nil
226
+ @version.build = nil
227
+ assert_equal '1.2.3 of master by coder on 2008-10-27', @version.to_s
228
+ end
229
+
230
+ def test_to_s_with_no_branch
231
+ @version.branch = nil
232
+ assert_equal '1.2.3 M4 (500) by coder on 2008-10-27', @version.to_s
233
+ end
234
+
235
+ def test_to_s_with_no_committer
236
+ @version.committer = nil
237
+ assert_equal '1.2.3 M4 (500) of master on 2008-10-27', @version.to_s
238
+ end
239
+
240
+ def test_to_s_with_no_build_date
241
+ @version.build_date = nil
242
+ assert_equal '1.2.3 M4 (500) of master by coder', @version.to_s
243
+ end
244
+
245
+ def test_to_s_with_no_branch_or_committer
246
+ @version.branch = nil
247
+ @version.committer = nil
248
+ assert_equal '1.2.3 M4 (500) on 2008-10-27', @version.to_s
249
+ end
250
+
251
+ def test_to_s_with_no_committer_or_build_date
252
+ @version.committer = nil
253
+ @version.build_date = nil
254
+ assert_equal '1.2.3 M4 (500) of master', @version.to_s
255
+ end
256
+
257
+ def test_to_s_with_no_build_date_or_committer_or_build_date
258
+ @version.branch = nil
259
+ @version.committer = nil
260
+ @version.build_date = nil
261
+ assert_equal '1.2.3 M4 (500)', @version.to_s
262
+ end
263
+
264
+ def test_version_with_leading_zeros
265
+ version = App::Version.new :major => '2010', :minor => '04'
266
+ assert_equal '04', version.minor
267
+ assert_equal '2010.04', version.to_s
268
+ end
269
+
270
+ def test_version_with_alpha_characters
271
+ version = App::Version.new :major => '2010', :minor => '4a'
272
+ assert_equal '4a', version.minor
273
+ assert_equal '2010.4a', version.to_s
274
+ end
275
+ end
data/test/version.yml ADDED
@@ -0,0 +1,9 @@
1
+ ## Application version
2
+ major: 1
3
+ minor: 2
4
+ patch: 3
5
+ milestone: 4
6
+ build: 500
7
+ branch: master
8
+ committer: coder
9
+ build_date: 2008-10-27
metadata ADDED
@@ -0,0 +1,77 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: app_version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Stephen Kapp
9
+ - Phillip Toland
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2013-06-22 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rails
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ~>
21
+ - !ruby/object:Gem::Version
22
+ version: 3.2.8
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ version: 3.2.8
31
+ description: App Version Gem originally App Version Rails Plugin from https://github.com/toland/app_version
32
+ email:
33
+ - mort666@virus.org
34
+ - phil.toland@gmail.com
35
+ executables: []
36
+ extensions: []
37
+ extra_rdoc_files: []
38
+ files:
39
+ - lib/app_version/app_version.rb
40
+ - lib/app_version/railtie.rb
41
+ - lib/app_version/templates/version.yml
42
+ - lib/app_version/templates/version.yml.erb
43
+ - lib/app_version.rb
44
+ - lib/install.rb
45
+ - lib/tasks/app_version_tasks.rake
46
+ - lib/uninstall.rb
47
+ - Rakefile
48
+ - README.rdoc
49
+ - test/app_version_test.rb
50
+ - test/version.yml
51
+ homepage: ''
52
+ licenses: []
53
+ post_install_message:
54
+ rdoc_options: []
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ requirements: []
70
+ rubyforge_project:
71
+ rubygems_version: 1.8.25
72
+ signing_key:
73
+ specification_version: 3
74
+ summary: APP Version Gem
75
+ test_files:
76
+ - test/app_version_test.rb
77
+ - test/version.yml