milestoner 10.4.0 → 12.0.0

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,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: []