milestoner 10.4.0 → 12.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Milestoner
4
+ module CLI
5
+ module Parsers
6
+ # Handles parsing of Command Line Interface (CLI) security options.
7
+ class Security
8
+ def self.call configuration = Configuration::Loader.call, client: CLIENT
9
+ new(configuration, client: client).call
10
+ end
11
+
12
+ def initialize configuration = Configuration::Loader.call, client: CLIENT
13
+ @configuration = configuration
14
+ @client = client
15
+ end
16
+
17
+ def call arguments = []
18
+ client.separator "\nSECURITY OPTIONS:\n"
19
+ add_sign
20
+ arguments.empty? ? arguments : client.parse!(arguments)
21
+ end
22
+
23
+ private
24
+
25
+ attr_reader :configuration, :client
26
+
27
+ def add_sign
28
+ client.on(
29
+ "--[no-]sign",
30
+ %(Sign with GPG key. Default: #{configuration.git_tag_sign}.)
31
+ ) do |value|
32
+ compute_git_tag_sign value
33
+ end
34
+ end
35
+
36
+ def compute_git_tag_sign value
37
+ truth_table = [true, false].repeated_permutation(2).to_a
38
+
39
+ case truth_table.index [value, configuration.git_tag_sign]
40
+ when 0..1 then configuration.git_tag_sign = true
41
+ when 2..3 then configuration.git_tag_sign = false
42
+ else fail Error, "--sign must be a boolean. Check gem configuration."
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Milestoner
4
+ module CLI
5
+ # The main Command Line Interface (CLI) object.
6
+ class Shell
7
+ ACTIONS = {
8
+ config: Actions::Config.new,
9
+ publish: Actions::Publish.new,
10
+ status: Actions::Status.new
11
+ }.freeze
12
+
13
+ def initialize parser: Parsers::Assembler.new, actions: ACTIONS, container: Container
14
+ @parser = parser
15
+ @actions = actions
16
+ @container = container
17
+ end
18
+
19
+ def call arguments = []
20
+ perform parser.call(arguments)
21
+ rescue OptionParser::ParseError, Error => error
22
+ logger.error error.message
23
+ end
24
+
25
+ private
26
+
27
+ attr_reader :parser, :actions, :container
28
+
29
+ def perform configuration
30
+ case configuration
31
+ in action_config: Symbol => action then config action
32
+ in action_publish: true then publish configuration
33
+ in action_status: true then status
34
+ in action_version: String => version then logger.info version
35
+ in action_help: then usage
36
+ else usage
37
+ end
38
+ end
39
+
40
+ def config(action) = actions.fetch(__method__).call(action)
41
+
42
+ def publish(configuration) = actions.fetch(__method__).call(configuration)
43
+
44
+ def status = actions.fetch(__method__).call
45
+
46
+ def usage = logger.unknown { parser.to_s }
47
+
48
+ def logger = container[__method__]
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "versionaire"
4
+
5
+ module Milestoner
6
+ module Commits
7
+ # Retrieves and categorizes Git repository commit tagged or untagged history.
8
+ class Categorizer
9
+ def initialize expression: Regexp, container: Container
10
+ @expression = expression
11
+ @container = container
12
+ end
13
+
14
+ def call configuration = CLI::Configuration::Loader.call
15
+ prefixes = configuration.git_commit_prefixes
16
+
17
+ prefixes.reduce({}) { |group, prefix| group.merge prefix => [] }
18
+ .merge("Unknown" => [])
19
+ .then { |groups| group_by_prefix prefixes, groups }
20
+ .each_value { |commits| commits.sort_by!(&:subject) }
21
+ .values
22
+ .flatten
23
+ .uniq(&:subject)
24
+ end
25
+
26
+ private
27
+
28
+ attr_reader :expression, :container
29
+
30
+ def group_by_prefix prefixes, groups
31
+ computed_commits.each.with_object groups do |commit, collection|
32
+ prefix = commit.subject[subject_pattern(prefixes)]
33
+ key = collection.key?(prefix) ? prefix : "Unknown"
34
+ collection[key] << commit
35
+ end
36
+ end
37
+
38
+ def subject_pattern prefixes
39
+ prefixes.empty? ? expression.new(//) : expression.union(prefixes)
40
+ end
41
+
42
+ def computed_commits = repository.tagged? ? tagged_commits : saved_commits
43
+
44
+ def tagged_commits = repository.commits("#{repository.tag_last}..HEAD")
45
+
46
+ def saved_commits = repository.commits
47
+
48
+ def repository = container[__method__]
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry-container"
4
+ require "git_plus"
5
+ require "logger"
6
+ require "pastel"
7
+
8
+ module Milestoner
9
+ # Provides a global gem container for injection into other objects.
10
+ module Container
11
+ extend Dry::Container::Mixin
12
+
13
+ register(:configuration) { CLI::Configuration::Loader.call }
14
+ register(:colorizer) { Pastel.new enabled: $stdout.tty? }
15
+ register(:kernel) { Kernel }
16
+
17
+ register :log_colors do
18
+ {
19
+ "DEBUG" => self[:colorizer].white.detach,
20
+ "INFO" => self[:colorizer].green.detach,
21
+ "WARN" => self[:colorizer].yellow.detach,
22
+ "ERROR" => self[:colorizer].red.detach,
23
+ "FATAL" => self[:colorizer].white.bold.on_red.detach,
24
+ "ANY" => self[:colorizer].white.bold.detach
25
+ }
26
+ end
27
+
28
+ register :logger do
29
+ Logger.new $stdout,
30
+ level: Logger.const_get(ENV.fetch("LOG_LEVEL", "INFO")),
31
+ formatter: (
32
+ lambda do |severity, _at, _name, message|
33
+ self[:log_colors][severity].call "#{message}\n"
34
+ end
35
+ )
36
+ end
37
+
38
+ register(:repository) { GitPlus::Repository.new }
39
+ end
40
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Milestoner
4
+ # The base class for all Milestoner related errors.
5
+ class Error < StandardError
6
+ end
7
+ end
@@ -5,7 +5,8 @@ module Milestoner
5
5
  module Identity
6
6
  NAME = "milestoner"
7
7
  LABEL = "Milestoner"
8
- VERSION = "10.4.0"
8
+ VERSION = "12.0.0"
9
9
  VERSION_LABEL = "#{LABEL} #{VERSION}"
10
+ SUMMARY = "A command line interface for crafting Git repository tags."
10
11
  end
11
12
  end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "forwardable"
4
+ require "git_plus"
5
+
6
+ module Milestoner
7
+ module Presenters
8
+ # Wraps the Git Kit Commit for presentation purposes.
9
+ class Commit
10
+ extend Forwardable
11
+
12
+ delegate [*GitPlus::Commit.members, :fixup?, :squash?] => :record
13
+
14
+ def initialize record, container: Container
15
+ @record = record
16
+ @container = container
17
+ end
18
+
19
+ def line_item(delimiter: " - ") = "#{bullet}#{subject}#{delimiter}#{author_name}"
20
+
21
+ private
22
+
23
+ attr_reader :record, :container
24
+
25
+ def bullet
26
+ case container[:configuration].documentation_format
27
+ when "md" then "- "
28
+ when "adoc" then "* "
29
+ else ""
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "versionaire"
4
+
5
+ module Milestoner
6
+ module Tags
7
+ # Handles the creation of project repository tags.
8
+ class Creator
9
+ using Versionaire::Cast
10
+
11
+ def initialize categorizer: Commits::Categorizer.new,
12
+ presenter: Presenters::Commit,
13
+ container: Container
14
+
15
+ @categorizer = categorizer
16
+ @presenter = presenter
17
+ @container = container
18
+ end
19
+
20
+ def call configuration = CLI::Configuration::Loader.call
21
+ return false if local? configuration
22
+ fail Error, "Unable to tag without commits." if categorizer.call.empty?
23
+
24
+ sign configuration
25
+ rescue Versionaire::Errors::Cast, GitPlus::Errors::Base => error
26
+ raise Error, error.message
27
+ end
28
+
29
+ private
30
+
31
+ attr_reader :categorizer, :presenter, :container
32
+
33
+ def local? configuration
34
+ version = Version configuration.git_tag_version
35
+
36
+ if repository.tag_local? version
37
+ logger.warn "Local tag exists: #{version}. Skipped."
38
+ true
39
+ else
40
+ false
41
+ end
42
+ end
43
+
44
+ def sign configuration
45
+ version = configuration.git_tag_version
46
+ content = message configuration
47
+
48
+ if configuration.git_tag_sign
49
+ repository.tag_sign version, content
50
+ else
51
+ repository.tag_unsign version, content
52
+ end
53
+
54
+ logger.debug "Local tag created: #{version}."
55
+ end
56
+
57
+ def message configuration
58
+ categorizer.call(configuration)
59
+ .map { |record| presenter.new(record).line_item }
60
+ .then do |line_items|
61
+ %(Version #{configuration.git_tag_version}\n\n#{line_items.join "\n"}\n\n)
62
+ end
63
+ end
64
+
65
+ def repository = container[__method__]
66
+
67
+ def logger = container[__method__]
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Milestoner
4
+ module Tags
5
+ # Handles the tagging and pushing of a tag to a remote repository.
6
+ class Publisher
7
+ def initialize tagger: Tags::Creator.new, pusher: Tags::Pusher.new, container: Container
8
+ @tagger = tagger
9
+ @pusher = pusher
10
+ @container = container
11
+ end
12
+
13
+ def call configuration = CLI::Configuration::Loader.call
14
+ tagger.call configuration
15
+ pusher.call configuration
16
+ logger.info { "Published: #{configuration.git_tag_version}!" }
17
+ end
18
+
19
+ private
20
+
21
+ attr_reader :tagger, :pusher, :container
22
+
23
+ def logger = container[__method__]
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "versionaire"
4
+
5
+ module Milestoner
6
+ module Tags
7
+ # Handles publishing of tags to a remote repository.
8
+ class Pusher
9
+ using Versionaire::Cast
10
+
11
+ def initialize container: Container
12
+ @container = container
13
+ end
14
+
15
+ def call configuration = CLI::Configuration::Loader.call
16
+ version = Version configuration.git_tag_version
17
+
18
+ fail Error, "Remote repository not configured." unless repository.config_origin?
19
+ fail Error, "Remote tag exists: #{version}." if repository.tag_remote? version
20
+ fail Error, "Tags could not be pushed to remote repository." unless push
21
+
22
+ logger.debug "Local tag pushed: #{version}."
23
+ end
24
+
25
+ private
26
+
27
+ attr_reader :container
28
+
29
+ def push
30
+ repository.tag_push.then do |_stdout, stderr, status|
31
+ status.success? && stderr.match?(/[new tag]/)
32
+ end
33
+ end
34
+
35
+ def repository = container[__method__]
36
+
37
+ def logger = container[__method__]
38
+ end
39
+ end
40
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: milestoner
3
3
  version: !ruby/object:Gem::Version
4
- version: 10.4.0
4
+ version: 12.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brooke Kuhlmann
@@ -10,9 +10,9 @@ bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIC/jCCAeagAwIBAgIBAzANBgkqhkiG9w0BAQsFADAlMSMwIQYDVQQDDBpicm9v
14
- a2UvREM9YWxjaGVtaXN0cy9EQz1pbzAeFw0yMDAzMTUxNDQ1MzJaFw0yMTAzMTUx
15
- NDQ1MzJaMCUxIzAhBgNVBAMMGmJyb29rZS9EQz1hbGNoZW1pc3RzL0RDPWlvMIIB
13
+ MIIC/jCCAeagAwIBAgIBBDANBgkqhkiG9w0BAQsFADAlMSMwIQYDVQQDDBpicm9v
14
+ a2UvREM9YWxjaGVtaXN0cy9EQz1pbzAeFw0yMTAzMTkxMjQ4MDZaFw0yMjAzMTkx
15
+ MjQ4MDZaMCUxIzAhBgNVBAMMGmJyb29rZS9EQz1hbGNoZW1pc3RzL0RDPWlvMIIB
16
16
  IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6l1qpXTiomH1RfMRloyw7MiE
17
17
  xyVx/x8Yc3EupdH7uhNaTXQGyORN6aOY//1QXXMHIZ9tW74nZLhesWMSUMYy0XhB
18
18
  brs+KkurHnc9FnEJAbG7ebGvl/ncqZt72nQvaxpDxvuCBHgJAz+8i5wl6FhLw+oT
@@ -20,254 +20,114 @@ cert_chain:
20
20
  D5vkU0YlAm1r98BymuJlcQ1qdkVEI1d48ph4kcS0S0nv1RiuyVb6TCAR3Nu3VaVq
21
21
  3fPzZKJLZBx67UvXdbdicWPiUR75elI4PXpLIic3xytaF52ZJYyKZCNZJhNwfQID
22
22
  AQABozkwNzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU0nzow9vc
23
- 2CdikiiE3fJhP/gY4ggwDQYJKoZIhvcNAQELBQADggEBAIHhAlD3po4sTYqacXaQ
24
- XI9jIhrfMy//2PgbHWcETtlJPBeNUbbSNBABcllUHKqYsVDlSvSmss034KSWNR8F
25
- bF1GcloicyvcCC4y6IoW4it0COAcdeaaxkxiBSgKdQFpff9REnDlIKK4uQ9lLxIo
26
- Y2G5xubiziKZkyfWFuSr67PIjW3Bu673D1JVBArhA1qbgQmYQcy1CkGOjo+iO8Nf
27
- 7u/QSfBHb+r/bXhKscDgPpnKwbUmvgO2+94zJG9KsrmIydlzYfsD09aXKx0t6Xy4
28
- 2XV8FRa7/JimI07sPLC13eLY3xd/aYTi85Z782KIA4j0G8XEEWAX0ouBhlXPocZv
29
- QWc=
23
+ 2CdikiiE3fJhP/gY4ggwDQYJKoZIhvcNAQELBQADggEBAEjpaOXHHp8s/7GL2qCb
24
+ YAs7urOLv9VHSPfQWAwaTMVnSsIf3Sw4xzISOP/mmfEPBPXtz61K5esrE/uTFtgb
25
+ FyjxQk2H0sEWgrRXGGNHBWQRhhEs7LP/TByoC15A0br++xLxRz4r7HBLGAWQQDpg
26
+ 66BJ2TBVjxS6K64tKbq7+ACyrOZGgTfNHACh4M076y0x0oRf/rwBrU39/KRfuhbb
27
+ cm+nNCEtO35gTmZ2bVDHLGvWazi3gJt6+huQjfXTCUUG2YYBxwhu+GPdAGQPxpf9
28
+ lkHilIrX69jq8wMPpBhlaw2mRmeSL50Wv5u6xVBvOHhXFSP1crXM95vfLhLyRYod
29
+ W2A=
30
30
  -----END CERTIFICATE-----
31
- date: 2020-11-14 00:00:00.000000000 Z
31
+ date: 2021-06-04 00:00:00.000000000 Z
32
32
  dependencies:
33
33
  - !ruby/object:Gem::Dependency
34
- name: runcom
34
+ name: dry-container
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '6.4'
39
+ version: 0.7.2
40
40
  type: :runtime
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: '6.4'
46
+ version: 0.7.2
47
47
  - !ruby/object:Gem::Dependency
48
- name: thor
48
+ name: git_plus
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '0.20'
53
+ version: '0.4'
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '0.20'
60
+ version: '0.4'
61
61
  - !ruby/object:Gem::Dependency
62
- name: versionaire
62
+ name: pastel
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: '8.4'
67
+ version: '0.8'
68
68
  type: :runtime
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: '8.4'
75
- - !ruby/object:Gem::Dependency
76
- name: bundler-audit
77
- requirement: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - "~>"
80
- - !ruby/object:Gem::Version
81
- version: '0.7'
82
- type: :development
83
- prerelease: false
84
- version_requirements: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - "~>"
87
- - !ruby/object:Gem::Version
88
- version: '0.7'
89
- - !ruby/object:Gem::Dependency
90
- name: bundler-leak
91
- requirement: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - "~>"
94
- - !ruby/object:Gem::Version
95
- version: '0.2'
96
- type: :development
97
- prerelease: false
98
- version_requirements: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - "~>"
101
- - !ruby/object:Gem::Version
102
- version: '0.2'
103
- - !ruby/object:Gem::Dependency
104
- name: climate_control
105
- requirement: !ruby/object:Gem::Requirement
106
- requirements:
107
- - - "~>"
108
- - !ruby/object:Gem::Version
109
- version: '0.1'
110
- type: :development
111
- prerelease: false
112
- version_requirements: !ruby/object:Gem::Requirement
113
- requirements:
114
- - - "~>"
115
- - !ruby/object:Gem::Version
116
- version: '0.1'
117
- - !ruby/object:Gem::Dependency
118
- name: guard-rspec
119
- requirement: !ruby/object:Gem::Requirement
120
- requirements:
121
- - - "~>"
122
- - !ruby/object:Gem::Version
123
- version: '4.7'
124
- type: :development
125
- prerelease: false
126
- version_requirements: !ruby/object:Gem::Requirement
127
- requirements:
128
- - - "~>"
129
- - !ruby/object:Gem::Version
130
- version: '4.7'
131
- - !ruby/object:Gem::Dependency
132
- name: pry
133
- requirement: !ruby/object:Gem::Requirement
134
- requirements:
135
- - - "~>"
136
- - !ruby/object:Gem::Version
137
- version: '0.13'
138
- type: :development
139
- prerelease: false
140
- version_requirements: !ruby/object:Gem::Requirement
141
- requirements:
142
- - - "~>"
143
- - !ruby/object:Gem::Version
144
- version: '0.13'
145
- - !ruby/object:Gem::Dependency
146
- name: pry-byebug
147
- requirement: !ruby/object:Gem::Requirement
148
- requirements:
149
- - - "~>"
150
- - !ruby/object:Gem::Version
151
- version: '3.9'
152
- type: :development
153
- prerelease: false
154
- version_requirements: !ruby/object:Gem::Requirement
155
- requirements:
156
- - - "~>"
157
- - !ruby/object:Gem::Version
158
- version: '3.9'
159
- - !ruby/object:Gem::Dependency
160
- name: rake
161
- requirement: !ruby/object:Gem::Requirement
162
- requirements:
163
- - - "~>"
164
- - !ruby/object:Gem::Version
165
- version: '13.0'
166
- type: :development
167
- prerelease: false
168
- version_requirements: !ruby/object:Gem::Requirement
169
- requirements:
170
- - - "~>"
171
- - !ruby/object:Gem::Version
172
- version: '13.0'
173
- - !ruby/object:Gem::Dependency
174
- name: reek
175
- requirement: !ruby/object:Gem::Requirement
176
- requirements:
177
- - - "~>"
178
- - !ruby/object:Gem::Version
179
- version: '6.0'
180
- type: :development
181
- prerelease: false
182
- version_requirements: !ruby/object:Gem::Requirement
183
- requirements:
184
- - - "~>"
185
- - !ruby/object:Gem::Version
186
- version: '6.0'
187
- - !ruby/object:Gem::Dependency
188
- name: rspec
189
- requirement: !ruby/object:Gem::Requirement
190
- requirements:
191
- - - "~>"
192
- - !ruby/object:Gem::Version
193
- version: '3.10'
194
- type: :development
195
- prerelease: false
196
- version_requirements: !ruby/object:Gem::Requirement
197
- requirements:
198
- - - "~>"
199
- - !ruby/object:Gem::Version
200
- version: '3.10'
74
+ version: '0.8'
201
75
  - !ruby/object:Gem::Dependency
202
- name: rubocop
76
+ name: refinements
203
77
  requirement: !ruby/object:Gem::Requirement
204
78
  requirements:
205
79
  - - "~>"
206
80
  - !ruby/object:Gem::Version
207
- version: '1.3'
208
- type: :development
209
- prerelease: false
210
- version_requirements: !ruby/object:Gem::Requirement
211
- requirements:
212
- - - "~>"
213
- - !ruby/object:Gem::Version
214
- version: '1.3'
215
- - !ruby/object:Gem::Dependency
216
- name: rubocop-performance
217
- requirement: !ruby/object:Gem::Requirement
218
- requirements:
219
- - - "~>"
220
- - !ruby/object:Gem::Version
221
- version: '1.8'
222
- type: :development
81
+ version: '8.0'
82
+ type: :runtime
223
83
  prerelease: false
224
84
  version_requirements: !ruby/object:Gem::Requirement
225
85
  requirements:
226
86
  - - "~>"
227
87
  - !ruby/object:Gem::Version
228
- version: '1.8'
88
+ version: '8.0'
229
89
  - !ruby/object:Gem::Dependency
230
- name: rubocop-rake
90
+ name: runcom
231
91
  requirement: !ruby/object:Gem::Requirement
232
92
  requirements:
233
93
  - - "~>"
234
94
  - !ruby/object:Gem::Version
235
- version: '0.5'
236
- type: :development
95
+ version: '7.0'
96
+ type: :runtime
237
97
  prerelease: false
238
98
  version_requirements: !ruby/object:Gem::Requirement
239
99
  requirements:
240
100
  - - "~>"
241
101
  - !ruby/object:Gem::Version
242
- version: '0.5'
102
+ version: '7.0'
243
103
  - !ruby/object:Gem::Dependency
244
- name: rubocop-rspec
104
+ name: versionaire
245
105
  requirement: !ruby/object:Gem::Requirement
246
106
  requirements:
247
107
  - - "~>"
248
108
  - !ruby/object:Gem::Version
249
- version: '2.0'
250
- type: :development
109
+ version: '9.2'
110
+ type: :runtime
251
111
  prerelease: false
252
112
  version_requirements: !ruby/object:Gem::Requirement
253
113
  requirements:
254
114
  - - "~>"
255
115
  - !ruby/object:Gem::Version
256
- version: '2.0'
116
+ version: '9.2'
257
117
  - !ruby/object:Gem::Dependency
258
- name: simplecov
118
+ name: zeitwerk
259
119
  requirement: !ruby/object:Gem::Requirement
260
120
  requirements:
261
121
  - - "~>"
262
122
  - !ruby/object:Gem::Version
263
- version: '0.19'
264
- type: :development
123
+ version: '2.4'
124
+ type: :runtime
265
125
  prerelease: false
266
126
  version_requirements: !ruby/object:Gem::Requirement
267
127
  requirements:
268
128
  - - "~>"
269
129
  - !ruby/object:Gem::Version
270
- version: '0.19'
130
+ version: '2.4'
271
131
  description:
272
132
  email:
273
133
  - brooke@alchemists.io
@@ -282,16 +142,25 @@ files:
282
142
  - README.adoc
283
143
  - bin/milestoner
284
144
  - lib/milestoner.rb
285
- - lib/milestoner/cli.rb
286
- - lib/milestoner/errors/base.rb
287
- - lib/milestoner/errors/duplicate_tag.rb
288
- - lib/milestoner/errors/git.rb
289
- - lib/milestoner/git/config.rb
290
- - lib/milestoner/git/kit.rb
145
+ - lib/milestoner/cli/actions/config.rb
146
+ - lib/milestoner/cli/actions/publish.rb
147
+ - lib/milestoner/cli/actions/status.rb
148
+ - lib/milestoner/cli/configuration/content.rb
149
+ - lib/milestoner/cli/configuration/defaults.yml
150
+ - lib/milestoner/cli/configuration/loader.rb
151
+ - lib/milestoner/cli/parsers.rb
152
+ - lib/milestoner/cli/parsers/assembler.rb
153
+ - lib/milestoner/cli/parsers/core.rb
154
+ - lib/milestoner/cli/parsers/security.rb
155
+ - lib/milestoner/cli/shell.rb
156
+ - lib/milestoner/commits/categorizer.rb
157
+ - lib/milestoner/container.rb
158
+ - lib/milestoner/error.rb
291
159
  - lib/milestoner/identity.rb
292
- - lib/milestoner/publisher.rb
293
- - lib/milestoner/pusher.rb
294
- - lib/milestoner/tagger.rb
160
+ - lib/milestoner/presenters/commit.rb
161
+ - lib/milestoner/tags/creator.rb
162
+ - lib/milestoner/tags/publisher.rb
163
+ - lib/milestoner/tags/pusher.rb
295
164
  homepage: https://www.alchemists.io/projects/milestoner
296
165
  licenses:
297
166
  - Apache-2.0
@@ -308,15 +177,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
308
177
  requirements:
309
178
  - - "~>"
310
179
  - !ruby/object:Gem::Version
311
- version: '2.7'
180
+ version: '3.0'
312
181
  required_rubygems_version: !ruby/object:Gem::Requirement
313
182
  requirements:
314
183
  - - ">="
315
184
  - !ruby/object:Gem::Version
316
185
  version: '0'
317
186
  requirements: []
318
- rubygems_version: 3.1.4
187
+ rubygems_version: 3.2.19
319
188
  signing_key:
320
189
  specification_version: 4
321
- summary: A command line interface for crafting Git repository milestones.
190
+ summary: A command line interface for crafting Git repository tags.
322
191
  test_files: []