vump 1.2.0 → 2.0.0.pre.alpha.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.
@@ -0,0 +1,28 @@
1
+ module Vump
2
+ class BaseModule
3
+ def initialize(base_path, options = {})
4
+ @base_path = base_path
5
+ @options = options
6
+ end
7
+
8
+ def relevant?
9
+ false
10
+ end
11
+
12
+ def to_stage
13
+ raise NotImplementedError, "Missing to_stage on #{name}"
14
+ end
15
+
16
+ def read
17
+ raise NotImplementedError, "Missing read on #{name}"
18
+ end
19
+
20
+ def name
21
+ self.class.name
22
+ end
23
+
24
+ def write(_version)
25
+ raise NotImplementedError, "Missing write on #{name}"
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,24 @@
1
+ require 'vump/modules/base_file_module'
2
+
3
+ module Vump
4
+ class PackageJson < BaseFileModule
5
+ def filename
6
+ 'package.json'
7
+ end
8
+
9
+ def name
10
+ filename
11
+ end
12
+
13
+ def select(contents)
14
+ @parsed = JSON.parse(contents)
15
+ @parsed['version']
16
+ end
17
+
18
+ def compose(_contents, version)
19
+ json = @parsed.clone
20
+ json['version'] = version
21
+ JSON.pretty_generate(json) + "\n"
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,9 @@
1
+ require 'vump/modules/package_json'
2
+
3
+ module Vump
4
+ class PackageLockJson < PackageJson
5
+ def filename
6
+ 'package-lock.json'
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,29 @@
1
+ require 'vump/modules/base_file_module'
2
+ require 'sheep-a-changelog'
3
+
4
+ module Vump
5
+ class SheepAChangelog < BaseFileModule
6
+ def filename
7
+ 'CHANGELOG.md'
8
+ end
9
+
10
+ def name
11
+ 'Changelog'
12
+ end
13
+
14
+ def select(contents)
15
+ doc = ::SheepAChangelog.parse(contents)
16
+ doc.latest_version(1)
17
+ end
18
+
19
+ def compose(contents, version)
20
+ doc = ::SheepAChangelog.parse(contents)
21
+ doc.release(
22
+ version,
23
+ @options[:tag_prefix] || 'v',
24
+ @options[:date] || Time.now
25
+ )
26
+ doc.to_s
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,21 @@
1
+ require 'vump/modules/base_file_module'
2
+
3
+ module Vump
4
+ class VersionFile < BaseFileModule
5
+ def filename
6
+ 'VERSION'
7
+ end
8
+
9
+ def name
10
+ filename
11
+ end
12
+
13
+ def select(contents)
14
+ contents.strip
15
+ end
16
+
17
+ def compose(_contents, version)
18
+ "#{version}\n"
19
+ end
20
+ end
21
+ end
@@ -1,6 +1,7 @@
1
1
  module Vump
2
- # Representation of version notation according to https://semver.org/
3
2
  class Semver
3
+ attr_accessor :major, :patch, :minor, :pre, :build
4
+
4
5
  def initialize(string = nil)
5
6
  @pre = @build = false
6
7
  @major = @minor = @patch = 0
@@ -10,15 +11,15 @@ module Vump
10
11
  def load(string)
11
12
  # <numeral>[-<sufix>]
12
13
  version, sufix = string
13
- .match(/([\d\.]+)(?:\-)?(.*)?/)
14
- .captures
14
+ .match(/([\d\.]+)(?:\-)?(.*)?/)
15
+ .captures
15
16
  # <sufix>:= [<pre>][+<build>]
16
17
  @pre, @build = sufix.split('+', 2).map { |s| s.empty? ? false : s }
17
18
  # <numeral>:= <major>.<minor>.<patch>
18
19
  @major, @minor, @patch = version
19
- .match(/(\d+)\.(\d+)\.(\d+)/)
20
- .captures
21
- .map(&:to_i)
20
+ .match(/(\d+)\.(\d+)\.(\d+)/)
21
+ .captures
22
+ .map(&:to_i)
22
23
  end
23
24
 
24
25
  def reset(what)
@@ -45,6 +46,17 @@ module Vump
45
46
  @major += 1
46
47
  end
47
48
 
49
+ def bump(what)
50
+ case what
51
+ when :patch
52
+ bump_patch
53
+ when :minor
54
+ bump_minor
55
+ when :major
56
+ bump_major
57
+ end
58
+ end
59
+
48
60
  def to_s
49
61
  str = "#{@major}.#{@minor}.#{@patch}"
50
62
  str << "-#{@pre}" if @pre
@@ -0,0 +1,96 @@
1
+ require 'vump/cli/reporter'
2
+ require 'vump/logger/logger'
3
+ require 'vump/modules/sheep_a_changelog'
4
+ require 'vump/modules/version_file'
5
+ require 'vump/modules/package_json'
6
+ require 'vump/modules/package_lock_json'
7
+ require 'vump/git/git'
8
+ require 'vump/semver/semver'
9
+
10
+ module Vump
11
+ class Vump
12
+ attr_reader :logger
13
+
14
+ def initialize(base_path, arg, options)
15
+ @base_path = base_path
16
+ @arg = arg
17
+ @options = options
18
+ @logger = ::Vump::Logger.new(@options)
19
+ @reporter = Reporter.new(@options)
20
+ @reporter.report_preamble(@base_path, @arg, @options)
21
+ @options[:logger] = @logger
22
+ @git = Git.new(@base_path, @options)
23
+ end
24
+
25
+ def all_modules
26
+ [
27
+ ::Vump::VersionFile,
28
+ ::Vump::SheepAChangelog,
29
+ ::Vump::PackageJson,
30
+ ::Vump::PackageLockJson,
31
+ ]
32
+ end
33
+
34
+ def load_modules
35
+ version_modules = all_modules.map { |m| m.new(@base_path, @options) }
36
+ relevant_modules = version_modules.select(&:relevant?)
37
+ @reporter.add_loaded_modules(version_modules)
38
+ @reporter.add_relevant_modules(relevant_modules)
39
+ relevant_modules
40
+ end
41
+
42
+ def read_versions(modules)
43
+ modules.map do |mod|
44
+ version = mod.read
45
+ @reporter.add_read_version(mod, version)
46
+ version
47
+ end
48
+ end
49
+
50
+ def select_version(versions)
51
+ @reporter.report_module_overview
52
+ if versions.uniq.length > 1
53
+ @logger.warn("Inconsitent version records: #{versions}")
54
+ return false
55
+ end
56
+ @logger.info(
57
+ "Single version extracted from all modules: #{versions.first}"
58
+ )
59
+ versions.first
60
+ end
61
+
62
+ def write_versions(modules, version)
63
+ modules.map do |mod|
64
+ mod.write(version)
65
+ @logger.debug("Writing new version \"#{version}\"", mod.class)
66
+ end
67
+ @logger.info("All relevant modules written \"#{version}\"")
68
+
69
+ if @git.loaded?
70
+ commit(modules, version) unless @options[:no_git]
71
+ else
72
+ @logger.info('Not in a git repository, no stage or commit.')
73
+ end
74
+ end
75
+
76
+ def commit(modules, version)
77
+ files_to_stage = modules.map(&:to_stage).flatten
78
+ @git.stage(files_to_stage)
79
+ @git.tag(version) if @git.commit(version)
80
+ end
81
+
82
+ def bump(arg = false, pre = false, build = false)
83
+ modules = load_modules
84
+ version = select_version(read_versions(modules))
85
+ semver = Semver.new(version)
86
+ semver.bump(arg) if arg
87
+ semver.pre = pre if pre
88
+ semver.build = build if build
89
+ write_versions(modules, semver.to_s)
90
+ end
91
+
92
+ def help
93
+ @reporter.help
94
+ end
95
+ end
96
+ end
@@ -1,18 +1,16 @@
1
- require File.expand_path('lib/vump/version', __dir__)
2
- require File.expand_path('lib/vump/meta', __dir__)
1
+ $LOAD_PATH.unshift File.expand_path('lib', __dir__)
2
+ require 'vump/meta'
3
3
 
4
4
  Gem::Specification.new do |s|
5
- s.name = 'vump'
6
- s.version = Vump::VERSION
7
- s.homepage = 'https://github.com/grissius/vump'
8
- s.license = 'MIT'
9
- s.author = 'Jaroslav Šmolík'
10
- s.email = 'grissius@gmail.com'
5
+ s.name = Vump::Meta.name
6
+ s.version = Vump::Meta.version
7
+ s.homepage = Vump::Meta.homepage
8
+ s.license = Vump::Meta.license
9
+ s.author = Vump::Meta.author
10
+ s.email = Vump::Meta.email
11
11
 
12
- s.summary = Vump::SUMMARY
13
- s.description = <<-DESCRIPTION
14
- Semantic version bumper. CLI tool to easily manage projects using semver and automate menial version raising.
15
- DESCRIPTION
12
+ s.summary = Vump::Meta.summary
13
+ s.description = Vump::Meta.description
16
14
 
17
15
  s.files = Dir['bin/*',
18
16
  'lib/**/*',
@@ -21,13 +19,19 @@ DESCRIPTION
21
19
  'README*',
22
20
  'VERSION']
23
21
  s.executables = Dir['bin/*'].map { |f| File.basename(f) }
24
- s.has_rdoc = 'yard'
25
22
 
26
23
  s.required_ruby_version = '>= 2.2'
27
24
 
25
+ s.add_runtime_dependency 'command_line_reporter', '~> 4.0.0'
26
+ s.add_runtime_dependency 'git', '~> 1.5'
28
27
  s.add_runtime_dependency 'keepachangelog', '~> 0.5.3'
28
+ s.add_runtime_dependency 'sheep-a-changelog', '~> 0.3.0'
29
29
 
30
+ s.add_development_dependency 'coveralls', '~> 0.8'
30
31
  s.add_development_dependency 'rake', '~> 12.0'
31
32
  s.add_development_dependency 'rspec', '~> 3.6'
33
+ s.add_development_dependency 'rspec-cheki', '~> 0.1'
34
+ s.add_development_dependency 'rubocop', '~> 0.64.0'
35
+ s.add_development_dependency 'simplecov', '~> 0.12'
32
36
  s.add_development_dependency 'yard', '~> 0.9'
33
37
  end
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vump
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 2.0.0.pre.alpha.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jaroslav Šmolík
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-12 00:00:00.000000000 Z
11
+ date: 2019-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: command_line_reporter
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 4.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 4.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: git
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.5'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.5'
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: keepachangelog
15
43
  requirement: !ruby/object:Gem::Requirement
@@ -24,6 +52,34 @@ dependencies:
24
52
  - - "~>"
25
53
  - !ruby/object:Gem::Version
26
54
  version: 0.5.3
55
+ - !ruby/object:Gem::Dependency
56
+ name: sheep-a-changelog
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.3.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.3.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: coveralls
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.8'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.8'
27
83
  - !ruby/object:Gem::Dependency
28
84
  name: rake
29
85
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +108,48 @@ dependencies:
52
108
  - - "~>"
53
109
  - !ruby/object:Gem::Version
54
110
  version: '3.6'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rspec-cheki
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0.1'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.1'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 0.64.0
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 0.64.0
139
+ - !ruby/object:Gem::Dependency
140
+ name: simplecov
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '0.12'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '0.12'
55
153
  - !ruby/object:Gem::Dependency
56
154
  name: yard
57
155
  requirement: !ruby/object:Gem::Requirement
@@ -66,29 +164,31 @@ dependencies:
66
164
  - - "~>"
67
165
  - !ruby/object:Gem::Version
68
166
  version: '0.9'
69
- description: " Semantic version bumper. CLI tool to easily manage projects using
70
- semver and automate menial version raising.\n"
167
+ description: Semantic version bumper. CLI tool to easily manage projects using semver
168
+ and automate menial version raising.
71
169
  email: grissius@gmail.com
72
170
  executables:
73
171
  - vump
74
172
  extensions: []
75
173
  extra_rdoc_files: []
76
174
  files:
77
- - README.adoc
175
+ - LICENSE
176
+ - README.md
78
177
  - VERSION
79
178
  - bin/vump
80
- - lib/cli.rb
81
- - lib/vump.rb
179
+ - lib/vump/cli/cli.rb
180
+ - lib/vump/cli/reporter.rb
181
+ - lib/vump/git/git.rb
182
+ - lib/vump/logger/logger.rb
82
183
  - lib/vump/meta.rb
83
- - lib/vump/semver/monkey/keepachangelog.rb
184
+ - lib/vump/modules/base_file_module.rb
185
+ - lib/vump/modules/base_module.rb
186
+ - lib/vump/modules/package_json.rb
187
+ - lib/vump/modules/package_lock_json.rb
188
+ - lib/vump/modules/sheep_a_changelog.rb
189
+ - lib/vump/modules/version_file.rb
84
190
  - lib/vump/semver/semver.rb
85
- - lib/vump/semver/version_modules/file_modules/keepachangelog.rb
86
- - lib/vump/semver/version_modules/file_modules/npm.rb
87
- - lib/vump/semver/version_modules/file_modules/npm_lock.rb
88
- - lib/vump/semver/version_modules/file_modules/version_file.rb
89
- - lib/vump/semver/version_modules/read_write_version_module.rb
90
- - lib/vump/semver/version_modules/vcs_modules/git.rb
91
- - lib/vump/version.rb
191
+ - lib/vump/vump.rb
92
192
  - vump.gemspec
93
193
  homepage: https://github.com/grissius/vump
94
194
  licenses:
@@ -105,12 +205,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
105
205
  version: '2.2'
106
206
  required_rubygems_version: !ruby/object:Gem::Requirement
107
207
  requirements:
108
- - - ">="
208
+ - - ">"
109
209
  - !ruby/object:Gem::Version
110
- version: '0'
210
+ version: 1.3.1
111
211
  requirements: []
112
- rubyforge_project:
113
- rubygems_version: 2.5.2.1
212
+ rubygems_version: 3.0.2
114
213
  signing_key:
115
214
  specification_version: 4
116
215
  summary: Raise version version in root of semver project.