version_manager 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4567a65cab744ad2b8e0cba5546a907616df5f56
4
+ data.tar.gz: 90579a75079d72e8e2dbe1bc1dfb24e5a36bbfe1
5
+ SHA512:
6
+ metadata.gz: ba96ca3be67e8289b7b717b538bc997ea9409967bc5ac927c62ac852a586dc3de2492e8f53d02233c8693a3a52ffd8841a13e0eb0dad447e62027ca5f616bea5
7
+ data.tar.gz: d29871302090e70b2cf670ae3070727f204fc2839010b108fa373636620503ca4af52dfd75b39e793b7be6218f0b80c0494941f8125c0f7d611324eb4822e5ef
data/README.md ADDED
@@ -0,0 +1,68 @@
1
+ # Version Manager
2
+
3
+ Automatically manage version updates and tagging. The new version will be written to your version file,
4
+ history file and as a tagged git commit.
5
+
6
+ ## Dependencies
7
+
8
+ * Ruby >= 2.2
9
+ * Rake
10
+
11
+ ## Installation
12
+
13
+ ```ruby
14
+
15
+ # In Gemfile
16
+
17
+ group :development do
18
+ gem "version_manager"
19
+ end
20
+
21
+ # In a Rake configuration file
22
+
23
+ require "version_manager/rake_task"
24
+
25
+ VersionManager::RakeTask.new(:release) do |config| # Argument is the namespace for tasks
26
+ config.version_file = "lib/version.rb" # Path to your version file
27
+ config.version_constant = "VERSION" # Version constant including namespaces
28
+ config.history_file = "history.rdoc" # History file to be updated
29
+ config.tag_format = "v%s" # %s will be replaced with the new version as tag names
30
+ config.logger = Logger.new # Replace the logger to turn off / modify stdout logging
31
+ end
32
+
33
+ ```
34
+
35
+ ## Usage
36
+
37
+ ```
38
+
39
+ bundle exec rake release:patch # Patch release eg 1.2.3 => 1.2.4
40
+ bundle exec rake release:minor # Minor release eg 1.2.3 => 1.3.0
41
+ bundle exec rake release:major # Major release eg 1.2.3 => 2.0.0
42
+
43
+ ```
44
+
45
+ ## Configuration
46
+
47
+ ### `config.version_file`
48
+
49
+ The file which will be passed to `load` in order to load your current version number. It should be an absoltue
50
+ file path or relative to your project's root
51
+
52
+ ### `config.version_constant`
53
+
54
+ The constant which will be loaded as the current version. For example, if your version number is in a module
55
+ called `MyModule` as the constant `MY_VERSION`, the `version_constant` would be `"MyModule::MY_VERSION"` (as a string)
56
+
57
+ ### `config.history_file`
58
+
59
+ Path to your history file. Currently only supports rdoc format.
60
+
61
+ ### `config.tag_format`
62
+
63
+ The format git tags will be given after version has been updated. `%s` will be replaced with the version number
64
+
65
+ ### `config.logger`
66
+
67
+ The logger to use when printing info messages. By default this just logs the messages with no formatting to STDOUT.
68
+ If you want to suppress logging you can just use `Logger.new "/dev/null"`
@@ -0,0 +1,29 @@
1
+ require "logger"
2
+
3
+ module VersionManager
4
+ class Configuration
5
+ attr_accessor :history_file, :version_file, :version_constant, :tag_format, :logger
6
+
7
+ def initialize
8
+ @logger = unformatter_logger
9
+ @history_file = "history.rdoc"
10
+ @tag_format = "v%s"
11
+ @version_file = "lib/version.rb"
12
+ @version_constant = "VERSION"
13
+ end
14
+
15
+ private
16
+
17
+ def unformatter_logger
18
+ logger = Logger.new STDOUT
19
+ logger.formatter = log_formatter
20
+ logger
21
+ end
22
+
23
+ def log_formatter
24
+ proc {|_severity, _datetime, _progname, msg|
25
+ msg + "\n"
26
+ }
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,17 @@
1
+ module VersionManager
2
+ module Git
3
+ module CLI
4
+ def add *files
5
+ `git add #{files.join(" ")}`
6
+ end
7
+
8
+ def commit message
9
+ `git commit -m '#{message}'`
10
+ end
11
+
12
+ def tag message
13
+ `git tag -am '#{message}' #{message}`
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,29 @@
1
+ module VersionManager
2
+ module Git
3
+ module Stub
4
+ def add *files
5
+ @files = files
6
+ end
7
+
8
+ def commit message
9
+ @commit_message = message
10
+ end
11
+
12
+ def tag message
13
+ @tag_message = message
14
+ end
15
+
16
+ def files
17
+ @files
18
+ end
19
+
20
+ def commit_message
21
+ @commit_message
22
+ end
23
+
24
+ def tag_message
25
+ @tag_message
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,12 @@
1
+ require "version_manager/git/cli"
2
+ require "version_manager/git/stub"
3
+
4
+ module VersionManager
5
+ module Git
6
+ extend CLI
7
+
8
+ def self.stub_api
9
+ singleton_class.prepend VersionManager::Git::Stub
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,27 @@
1
+ require "rake/tasklib"
2
+ require "version_manager"
3
+ require "version_manager/version_updater"
4
+
5
+ module VersionManager
6
+ class RakeTask < Rake::TaskLib
7
+ EXAMPLES = {
8
+ major: "1.2.3 => 2.0.0",
9
+ minor: "1.2.3 => 1.3.0",
10
+ patch: "1.2.3 => 1.2.4",
11
+ }.freeze
12
+
13
+ # rubocop: disable Metrics/MethodLength
14
+ def initialize task_namespace = :release
15
+ yield(VersionManager.configuration) if block_given?
16
+ namespace task_namespace do
17
+ [:major, :minor, :patch].each do |v|
18
+ desc "Increment your #{v} version number eg #{EXAMPLES[v]}"
19
+ task v do
20
+ VersionUpdater.new.call(v)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ # rubocop: enable all
26
+ end
27
+ end
@@ -0,0 +1,3 @@
1
+ module VersionManager
2
+ VERSION = "1.0.0".freeze
3
+ end
@@ -0,0 +1,10 @@
1
+ require "version_manager/version_number"
2
+
3
+ module VersionManager
4
+ class VersionFinder
5
+ def call
6
+ load VersionManager.configuration.version_file
7
+ VersionNumber.new Object.const_get(VersionManager.configuration.version_constant)
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,33 @@
1
+ module VersionManager
2
+ class VersionNumber
3
+ attr_reader :major, :minor, :patch, :starting_version
4
+
5
+ def initialize version_string
6
+ @starting_version = version_string
7
+ @major, @minor, @patch = version_string.split(".").map(&:to_i)
8
+ end
9
+
10
+ def inc_major
11
+ @major += 1
12
+ @minor = 0
13
+ @patch = 0
14
+ end
15
+
16
+ def inc_minor
17
+ @minor += 1
18
+ @patch = 0
19
+ end
20
+
21
+ def inc_patch
22
+ @patch += 1
23
+ end
24
+
25
+ def to_s
26
+ "#{@major}.#{@minor}.#{@patch}"
27
+ end
28
+
29
+ def to_tag
30
+ VersionManager.configuration.tag_format % to_s
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,32 @@
1
+ require "version_manager/git"
2
+
3
+ module VersionManager
4
+ class VersionTagger
5
+ def call version
6
+ logger.info "Committing and tagging..."
7
+ tag version
8
+ logger.info "Done"
9
+ logger.info "Run `git push origin master --tags` to deploy your new tag (#{version.to_tag})"
10
+ end
11
+
12
+ private
13
+
14
+ def tag version
15
+ Git.add history_file, version_file
16
+ Git.commit "Update version to #{version.to_tag}"
17
+ Git.tag version.to_tag
18
+ end
19
+
20
+ def history_file
21
+ VersionManager.configuration.history_file
22
+ end
23
+
24
+ def version_file
25
+ VersionManager.configuration.version_file
26
+ end
27
+
28
+ def logger
29
+ VersionManager.configuration.logger
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,12 @@
1
+ require "version_manager/version_finder"
2
+ require "version_manager/version_writer"
3
+
4
+ module VersionManager
5
+ class VersionUpdater
6
+ def call update_type
7
+ v = VersionFinder.new.call
8
+ v.send(:"inc_#{update_type}")
9
+ VersionWriter.new.call v
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,31 @@
1
+ require "version_manager/version_tagger"
2
+
3
+ module VersionManager
4
+ class VersionWriter
5
+ def call version
6
+ File.write version_file, updated_version_file(version)
7
+ File.write history_file, updated_history_file(version) if File.exist?(history_file)
8
+ VersionTagger.new.call version
9
+ end
10
+
11
+ def updated_version_file new_version
12
+ File.read(version_file).gsub(new_version.starting_version, new_version.to_s)
13
+ end
14
+
15
+ def updated_history_file new_version
16
+ current_history = File.read history_file
17
+ date = Date.today.strftime("%d %B %Y")
18
+ "== #{new_version.to_tag} (#{date})\n\n#{current_history}"
19
+ end
20
+
21
+ private
22
+
23
+ def history_file
24
+ VersionManager.configuration.history_file
25
+ end
26
+
27
+ def version_file
28
+ VersionManager.configuration.version_file
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,7 @@
1
+ require "version_manager/configuration"
2
+
3
+ module VersionManager
4
+ def self.configuration
5
+ @configuration ||= Configuration.new
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,126 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: version_manager
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Tom Bowden
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-01-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '12.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '12.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: simplecov
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.12'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.12'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.47'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.47'
69
+ - !ruby/object:Gem::Dependency
70
+ name: cucumber
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '2.4'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '2.4'
83
+ description: Increment your project's version and history file automatically
84
+ email: tom.b1992@gmail.com
85
+ executables: []
86
+ extensions: []
87
+ extra_rdoc_files: []
88
+ files:
89
+ - README.md
90
+ - lib/version_manager.rb
91
+ - lib/version_manager/configuration.rb
92
+ - lib/version_manager/git.rb
93
+ - lib/version_manager/git/cli.rb
94
+ - lib/version_manager/git/stub.rb
95
+ - lib/version_manager/rake_task.rb
96
+ - lib/version_manager/version.rb
97
+ - lib/version_manager/version_finder.rb
98
+ - lib/version_manager/version_number.rb
99
+ - lib/version_manager/version_tagger.rb
100
+ - lib/version_manager/version_updater.rb
101
+ - lib/version_manager/version_writer.rb
102
+ homepage: http://github.com/tpbowden/version_manager.git
103
+ licenses:
104
+ - MIT
105
+ metadata: {}
106
+ post_install_message:
107
+ rdoc_options: []
108
+ require_paths:
109
+ - lib
110
+ required_ruby_version: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ version: 2.2.0
115
+ required_rubygems_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ requirements: []
121
+ rubyforge_project:
122
+ rubygems_version: 2.4.5.2
123
+ signing_key:
124
+ specification_version: 4
125
+ summary: Convenience tasks for version management
126
+ test_files: []