vump 1.2.0 → 2.0.0.pre.alpha.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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.