ballantine 0.1.3 → 0.1.4.pre.beta

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 32d67897fd3d252df4a89c17484075ac5bc442c794de2fa098740f03038e6ab9
4
- data.tar.gz: b084bff0c1b433b92de7362a17d3129016de599ac468a9d464227b6ae77d94ba
3
+ metadata.gz: 36f79167ee934830b2a9d8a59273ffb68970b81a2a48ba21b28f11779227722b
4
+ data.tar.gz: 37c6726d842dc7dd153c6b8545200ab31fd97586ee1c07e1270bd318a745dd92
5
5
  SHA512:
6
- metadata.gz: 5589a6f22b237a78177ec09b55a3efc2a3965583ef7d79daba8aa441f3888f5fc07dfe236b90651712d7209dfda44d8f7d0b2dfd7c3e250ce29efa1c72596d49
7
- data.tar.gz: b1c84acf31a520d3bc8d11b384bf38da80d71303bb1886f2d550c5f45eaae9857c2823c0829474a0322bf99a7ad8e5dc91ab651200bbcb689fdcde2f8fe2b6ba
6
+ metadata.gz: acb862515fde0497f8b7c592c29610c79368063594d8f0f3daa38ed252beabdad2c1ce8fbb2970ee7f30d81e88c2a8d6b95f4158ca67d878ccea0a10bf290f9d
7
+ data.tar.gz: 0a3b6021c754125ba74bba213df06e860e0a793b3b0027640ae3ae559adce7544c61e4e2ef70832f0fcadc07207cd51428223f4083aa85fe40db8e1b725ca5e5
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env ruby
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Ballantine
4
4
  class Author
@@ -8,15 +8,17 @@ module Ballantine
8
8
  # @param [String] name
9
9
  # @return [Author] author
10
10
  def find_or_create_by(name)
11
- @@_collections = {} unless defined?(@@_collections)
12
- return @@_collections[name] unless @@_collections[name].nil?
13
- @@_collections[name] = new(name)
11
+ @_collections = {} unless defined?(@_collections)
12
+ return @_collections[name] unless @_collections[name].nil?
13
+
14
+ @_collections[name] = new(name)
14
15
  end
15
16
 
16
17
  # @return [Array<Author>] authors
17
18
  def all
18
- return [] unless defined?(@@_collections)
19
- @@_collections.sort.map(&:last) # sort and take values
19
+ return [] unless defined?(@_collections)
20
+
21
+ @_collections.sort.map(&:last) # sort and take values
20
22
  end
21
23
  end
22
24
 
@@ -46,9 +48,9 @@ module Ballantine
46
48
  "*#{repo}*: #{count} new #{word}\n#{lists.join("\n")}"
47
49
  end.join("\n")
48
50
 
49
- results = {
50
- 'text' => "- <@#{name}>\n#{message}",
51
- 'color' => '#00B86A', # green
51
+ {
52
+ "text" => "- <@#{name}>\n#{message}",
53
+ "color" => "#00B86A", # green
52
54
  }
53
55
  end
54
56
 
@@ -58,7 +60,7 @@ module Ballantine
58
60
  # @param [Array(Integer, String)] count, word
59
61
  def retrieve_count_and_word(lists)
60
62
  count = lists.size
61
- word = count == 1 ? 'commit' : 'commits'
63
+ word = count == 1 ? "commit" : "commits"
62
64
  [count, word]
63
65
  end
64
66
  end
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env ruby
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Ballantine
4
4
  class CLI < Thor
@@ -13,115 +13,110 @@ module Ballantine
13
13
  '^ssh://git@(.+)/(.+)/(.+)\.git$', # protocol: ssh -> ssh://git@github.com/oohyun15/ballantine.git
14
14
  ].freeze
15
15
 
16
- FILE_GITMODULES = '.gitmodules'
16
+ FILE_GITMODULES = ".gitmodules"
17
17
 
18
- TYPE_TERMINAL = 'terminal'
19
- TYPE_SLACK = 'slack'
18
+ TYPE_TERMINAL = "terminal"
19
+ TYPE_SLACK = "slack"
20
20
 
21
21
  DEFAULT_LJUST = 80
22
22
 
23
23
  attr_reader :app_name, :main_path, :sub_path, :send_type
24
24
 
25
- package_name 'Ballantine'
25
+ class << self
26
+ def exit_on_failure?; exit(1) end
27
+ end
26
28
 
27
- option 'force', type: :boolean, aliases: '-f', default: false, desc: "Initialize forcely if already initialized."
28
- desc 'init', 'Initialize ballantine'
29
+ package_name "Ballantine"
30
+ option "force", type: :boolean, aliases: "-f", default: false, desc: "Initialize forcely if already initialized."
31
+ desc "init", "Initialize ballantine"
29
32
  def init
30
- conf.init_file(force: options['force'])
33
+ conf.init_file(force: options["force"])
31
34
 
32
35
  puts "🥃 Initialized ballantine."
36
+
37
+ true
33
38
  end
34
39
 
35
- Config::AVAILABLE_ENVIRONMENTS.each{ |env| option env, type: :boolean, default: false, desc: "Set envirment to `#{env}'." }
36
- desc 'config [--env] [KEY] [VALUE]', "Set ballantine's configuration"
40
+ Config::AVAILABLE_ENVIRONMENTS.each { |env| option env, type: :boolean, default: false, desc: "Set envirment to `#{env}'." }
41
+ desc "config [--env] [KEY] [VALUE]", "Set ballantine's configuration"
37
42
  def config(key = nil, value = nil)
38
43
  # check environment value
39
- if Config::AVAILABLE_ENVIRONMENTS.map{ |key| !options[key] }.reduce(:&)
40
- raise NotAllowed, "Set environment value (#{Config::AVAILABLE_ENVIRONMENTS.map{ |key| "`--#{key}'" }.join(", ")})"
41
- elsif Config::AVAILABLE_ENVIRONMENTS.map{ |key| !!options[key] }.reduce(:&)
44
+ if Config::AVAILABLE_ENVIRONMENTS.map { |key| !options[key] }.reduce(:&)
45
+ raise NotAllowed, "Set environment value (#{Config::AVAILABLE_ENVIRONMENTS.map { |key| "`--#{key}'" }.join(", ")})"
46
+ elsif Config::AVAILABLE_ENVIRONMENTS.map { |key| !!options[key] }.reduce(:&)
42
47
  raise NotAllowed, "Environment value must be unique."
43
48
  end
44
- @env = Config::AVAILABLE_ENVIRONMENTS.find{ |key| options[key] }
49
+
50
+ @env = Config::AVAILABLE_ENVIRONMENTS.find { |key| options[key] }
45
51
  raise AssertionFailed, "Environment value must exist: #{@env}" if @env.nil?
46
52
 
47
53
  value ? conf.set_data(key, value) : conf.print_data(key)
48
54
  end
49
55
 
50
- desc 'diff [TARGET] [SOURCE]', 'Diff commits between TARGET and SOURCE'
51
- option TYPE_SLACK, type: :boolean, aliases: '-s', default: false, desc: "Send to slack using slack webhook URL."
52
- def diff(from, to = `git rev-parse --abbrev-ref HEAD`.chomp)
53
- preprocess(from, to, **options)
54
-
55
- # check argument is tag
56
- from = check_tag(from)
57
- to = check_tag(to)
56
+ desc "diff [TARGET] [SOURCE]", "Diff commits between TARGET and SOURCE"
57
+ option TYPE_SLACK, type: :boolean, aliases: "-s", default: false, desc: "Send to slack using slack webhook URL."
58
+ def diff(target, source = %x(git rev-parse --abbrev-ref HEAD).chomp)
59
+ # validate arguments
60
+ validate(target, source, **options)
58
61
 
59
62
  # check commits are newest
60
- system 'git pull -f &> /dev/null'
63
+ system("git pull -f &> /dev/null")
61
64
 
62
- # set instance variables
63
- @send_type = options[TYPE_SLACK] ? TYPE_SLACK : TYPE_TERMINAL
64
- @app_name = File.basename(`git config --get remote.origin.url`.chomp, '.git')
65
- @main_path = Dir.pwd
66
- @sub_path = if Dir[FILE_GITMODULES].any?
67
- file = File.open(FILE_GITMODULES)
68
- lines = file.readlines.map(&:chomp)
69
- file.close
70
- lines.grep(/path =/).map{ |line| line[/(?<=path \=).*/, 0].strip }.sort
71
- else
72
- []
73
- end
65
+ # init instance variables
66
+ init_variables(**options)
74
67
 
75
68
  # find github url, branch
76
- main_url = github_url(`git config --get remote.origin.url`.chomp)
77
- current_branch = `git rev-parse --abbrev-ref HEAD`.chomp
69
+ url = github_url(%x(git config --get remote.origin.url).chomp)
70
+ current_revision = %x(git rev-parse --abbrev-ref HEAD).chomp
78
71
 
79
72
  # get commit hash
80
- main_from, sub_from = commit_hash(from)
81
- main_to, sub_to = commit_hash(to)
82
- system "git checkout #{current_branch} -f &> /dev/null"
73
+ from, sub_from = commit_hash(target)
74
+ to, sub_to = commit_hash(source)
75
+ system("git checkout #{current_revision} -f &> /dev/null")
83
76
 
84
77
  # check commits
85
- check_commits(main_from, main_to, main_url)
86
- @sub_path.each_with_index do |path, idx|
78
+ check_commits(from, to, url)
79
+ sub_path.each_with_index do |path, idx|
87
80
  next if sub_from[idx] == sub_to[idx]
81
+
88
82
  Dir.chdir(path)
89
- sub_url = github_url(`git config --get remote.origin.url`.chomp)
83
+ sub_url = github_url(%x(git config --get remote.origin.url).chomp)
90
84
  check_commits(sub_from[idx], sub_to[idx], sub_url)
91
- Dir.chdir(@main_path)
85
+ Dir.chdir(main_path)
92
86
  end
93
87
 
94
- send_commits(from, to, main_url)
88
+ # send commits
89
+ send_commits(target, source, from, to, url)
95
90
 
96
- exit 0
91
+ exit(0)
97
92
  end
98
93
 
99
- desc 'version', 'Display version information about ballntine'
94
+ desc "version", "Display version information about ballntine"
100
95
  def version
101
96
  puts "ballantine version #{Ballantine::VERSION}"
97
+
98
+ Ballantine::VERSION
102
99
  end
103
100
 
104
101
  private
105
102
 
106
- def self.exit_on_failure?; exit 1 end
107
-
108
103
  def conf; @conf ||= Config.new(@env) end
109
104
 
110
- # @param [String] from
111
- # @param [String] to
105
+ # @param [String] target
106
+ # @param [String] source
112
107
  # @param [Hash] options
113
108
  # @return [NilClass] nil
114
- def preprocess(from, to, **options)
115
- if Dir['.git'].empty?
109
+ def validate(target, source, **options)
110
+ if Dir[".git"].empty?
116
111
  raise NotAllowed, "ERROR: There is no \".git\" in #{Dir.pwd}."
117
112
  end
118
113
 
119
- if (uncommitted = `git diff HEAD --name-only`.split("\n")).any?
114
+ if (uncommitted = %x(git diff HEAD --name-only).split("\n")).any?
120
115
  raise NotAllowed, "ERROR: Uncommitted file exists. stash or commit uncommitted files.\n#{uncommitted.join("\n")}"
121
116
  end
122
117
 
123
- if from == to
124
- raise NotAllowed, "ERROR: target(#{from}) and source(#{to}) can't be equal."
118
+ if target == source
119
+ raise NotAllowed, "ERROR: target(#{target}) and source(#{source}) can't be equal."
125
120
  end
126
121
 
127
122
  if options[TYPE_SLACK] && !conf.get_data(Config::KEY_SLACK_WEBHOOK)
@@ -131,14 +126,32 @@ module Ballantine
131
126
  nil
132
127
  end
133
128
 
129
+ # @param [Hash] options
130
+ # @return [Boolean]
131
+ def init_variables(**options)
132
+ @send_type = options[TYPE_SLACK] ? TYPE_SLACK : TYPE_TERMINAL
133
+ @app_name = File.basename(%x(git config --get remote.origin.url).chomp, ".git")
134
+ @main_path = Dir.pwd
135
+ @sub_path =
136
+ if Dir[FILE_GITMODULES].any?
137
+ file = File.open(FILE_GITMODULES)
138
+ lines = file.readlines.map(&:chomp)
139
+ file.close
140
+ lines.grep(/path =/).map { |line| line[/(?<=path \=).*/, 0].strip }.sort
141
+ else
142
+ []
143
+ end
144
+ true
145
+ end
146
+
134
147
  # @param [String] name
135
148
  # @return [String] hash
136
149
  def check_tag(name)
137
- list = `git tag -l`.split("\n")
150
+ list = %x(git tag -l).split("\n")
138
151
  return name unless list.grep(name).any?
139
152
 
140
- system "git fetch origin tag #{name} -f &> /dev/null"
141
- `git rev-list -n 1 #{name}`.chomp[0...7]
153
+ system("git fetch origin tag #{name} -f &> /dev/null")
154
+ %x(git rev-list -n 1 #{name}).chomp[0...7]
142
155
  end
143
156
 
144
157
  # @param [String] from
@@ -146,13 +159,17 @@ module Ballantine
146
159
  # @param [String] url
147
160
  # @return [NilClass] nil
148
161
  def check_commits(from, to, url)
149
- repo = File.basename(`git config --get remote.origin.url`.chomp, '.git')
150
- names = `git --no-pager log --pretty=format:"%an" #{from}..#{to}`.split("\n").uniq.sort
151
- authors = names.map{ |name| Author.find_or_create_by(name) }
162
+ repo = File.basename(%x(git config --get remote.origin.url).chomp, ".git")
163
+ names = %x(git --no-pager log --pretty=format:"%an" #{from}..#{to}).split("\n").uniq.sort
164
+ authors = names.map { |name| Author.find_or_create_by(name) }
152
165
  authors.each do |author|
153
166
  format = commit_format(url, ljust: DEFAULT_LJUST - 10)
154
- commits = `git --no-pager log --reverse --no-merges --author="#{author.name}" --format="#{format}" --abbrev=7 #{from}..#{to}`.gsub('"', '\"').gsub(/[\u0080-\u00ff]/, '')
167
+ commits =
168
+ %x(git --no-pager log --reverse --no-merges --author="#{author.name}" --format="#{format}" --abbrev=7 #{from}..#{to})
169
+ .gsub('"', '\"')
170
+ .gsub(/[\u0080-\u00ff]/, "")
155
171
  next if commits.empty?
172
+
156
173
  author.commits[repo] = commits.split("\n")
157
174
  end
158
175
  nil
@@ -171,17 +188,20 @@ module Ballantine
171
188
  end
172
189
 
173
190
  # @param [String] hash
174
- # @param [Array<String>] sub_path
175
191
  # @return [Array(String, Array<String>)] main, sub's hash
176
192
  def commit_hash(hash)
177
- system "git checkout #{hash} -f &> /dev/null"
178
- system 'git pull &> /dev/null'
179
- main_hash = `git --no-pager log -1 --format='%h'`.chomp
180
- sub_hash = if @sub_path.any?
181
- `git ls-tree HEAD #{@sub_path.join(' ')}`.split("\n").map{ |line| line.split(' ')[2] }
182
- else
183
- []
184
- end
193
+ # check argument is tag
194
+ hash = check_tag(hash)
195
+
196
+ system("git checkout #{hash} -f &> /dev/null")
197
+ system("git pull &> /dev/null")
198
+ main_hash = %x(git --no-pager log -1 --format='%h').chomp
199
+ sub_hash =
200
+ if sub_path.any?
201
+ %x(git ls-tree HEAD #{@sub_path.join(" ")}).split("\n").map { |line| line.split(" ")[2] }
202
+ else
203
+ []
204
+ end
185
205
 
186
206
  [main_hash, sub_hash]
187
207
  end
@@ -190,55 +210,58 @@ module Ballantine
190
210
  # @param [String] format
191
211
  # @param [Integer] ljust
192
212
  def commit_format(url, ljust: DEFAULT_LJUST)
193
- case @send_type
213
+ case send_type
194
214
  when TYPE_TERMINAL
195
- " - "+ "%h".yellow + " %<(#{ljust})%s " + "#{url}/commit/%H".gray
215
+ " - " + "%h".yellow + " %<(#{ljust})%s " + "#{url}/commit/%H".gray
196
216
  when TYPE_SLACK
197
217
  "\\\`<#{url}/commit/%H|%h>\\\` %s - %an"
198
- else raise AssertionFailed, "Unknown send type: #{@send_type}"
218
+ else raise AssertionFailed, "Unknown send type: #{send_type}"
199
219
  end
200
220
  end
201
221
 
222
+ # @param [String] target
223
+ # @param [String] source
202
224
  # @param [String] from
203
225
  # @param [String] to
204
226
  # @param [String] url
205
227
  # @return [NilClass] nil
206
- def send_commits(from, to, url)
228
+ def send_commits(target, source, from, to, url)
207
229
  authors = Author.all
208
230
  if authors.empty?
209
- raise ArgumentError, "ERROR: There is no commits between \"#{from}\" and \"#{to}\""
231
+ raise ArgumentError, "ERROR: There is no commits between \"#{target}\" and \"#{source}\""
210
232
  end
233
+
211
234
  number = authors.size
212
- last_commit = `git --no-pager log --reverse --format="#{commit_format(url, ljust: DEFAULT_LJUST - 22)}" --abbrev=7 #{from}..#{to} -1`.strip
235
+ last_commit = %x(git --no-pager log --reverse --format="#{commit_format(url, ljust: DEFAULT_LJUST - 22)}" --abbrev=7 #{from}..#{to} -1).strip
213
236
 
214
- case @send_type
237
+ case send_type
215
238
  when TYPE_TERMINAL
216
- puts "Check commits before #{@app_name.red} deployment. (#{from.cyan} <- #{to.cyan})".ljust(DEFAULT_LJUST + 34) + " #{url}/compare/#{from}...#{to}".gray
239
+ puts "Check commits before #{app_name.red} deployment. (#{target.cyan} <- #{source.cyan})".ljust(DEFAULT_LJUST + 34) + " #{url}/compare/#{from}...#{to}".gray
217
240
  puts "Author".yellow + ": #{number}"
218
241
  puts "Last commit".blue + ": #{last_commit}"
219
242
  authors.map(&:print_commits)
220
243
  when TYPE_SLACK
221
244
  # set message for each author
222
245
  messages = authors.map(&:serialize_commits)
223
- actor = `git config user.name`.chomp
246
+ actor = %x(git config user.name).chomp
224
247
 
225
248
  # send message to slack
226
- require 'net/http'
227
- require 'uri'
249
+ require "net/http"
250
+ require "uri"
228
251
  uri = URI.parse(conf.get_data(Config::KEY_SLACK_WEBHOOK))
229
252
  request = Net::HTTP::Post.new(uri)
230
- request.content_type = 'application/json'
253
+ request.content_type = "application/json"
231
254
  request.body = JSON.dump({
232
- 'text' => ":white_check_mark: *#{@app_name}* deployment request by <@#{actor}> (\`<#{url}/tree/#{from}|#{from}>\` <- \`<#{url}/tree/#{to}|#{to}>\` <#{url}/compare/#{from}...#{to}|compare>)\n:technologist: Author: #{number}\nLast commit: #{last_commit}",
233
- 'attachments' => messages
255
+ "text" => ":white_check_mark: *#{app_name}* deployment request by <@#{actor}> (\`<#{url}/tree/#{from}|#{target}>\` <- \`<#{url}/tree/#{to}|#{source}>\` <#{url}/compare/#{from}...#{to}|compare>)\n:technologist: Author: #{number}\nLast commit: #{last_commit}",
256
+ "attachments" => messages,
234
257
  })
235
- req_options = { use_ssl: uri.scheme == 'https' }
258
+ req_options = { use_ssl: uri.scheme == "https" }
236
259
  response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
237
260
  http.request(request)
238
261
  end
239
262
  puts response.message
240
263
  else
241
- raise AssertionFailed, "Unknown send type: #{@send_type}"
264
+ raise AssertionFailed, "Unknown send type: #{send_type}"
242
265
  end
243
266
  end
244
267
  end
@@ -1,20 +1,20 @@
1
- #!/usr/bin/env ruby
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Ballantine
4
4
  class Config
5
- ENV_LOCAL = 'local'
6
- ENV_GLOBAL = 'global'
5
+ ENV_LOCAL = "local"
6
+ ENV_GLOBAL = "global"
7
7
  AVAILABLE_ENVIRONMENTS = [
8
8
  ENV_LOCAL,
9
- ENV_GLOBAL
9
+ ENV_GLOBAL,
10
10
  ].freeze
11
11
 
12
- KEY_SLACK_WEBHOOK = 'slack_webhook'
12
+ KEY_SLACK_WEBHOOK = "slack_webhook"
13
13
  AVAILABLE_KEYS = [
14
- KEY_SLACK_WEBHOOK
14
+ KEY_SLACK_WEBHOOK,
15
15
  ].freeze
16
16
 
17
- FILE_BALLANTINE_CONFIG = '.ballantine.json'
17
+ FILE_BALLANTINE_CONFIG = ".ballantine.json"
18
18
 
19
19
  attr_reader :env, :data, :loaded
20
20
 
@@ -41,6 +41,7 @@ module Ballantine
41
41
 
42
42
  JSON.parse(File.read(file_path)).each do |key, value|
43
43
  next unless AVAILABLE_KEYS.include?(key)
44
+
44
45
  @data[key] = value
45
46
  end
46
47
 
@@ -55,6 +56,7 @@ module Ballantine
55
56
 
56
57
  if key
57
58
  raise InvalidParameter, "Key must be within #{AVAILABLE_KEYS}" unless AVAILABLE_KEYS.include?(key)
59
+
58
60
  puts @data[key]
59
61
  else
60
62
  @data.each do |key, value|
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ballantine
4
- VERSION = "0.1.3"
4
+ VERSION = "0.1.4-beta"
5
5
  end
data/lib/ballantine.rb CHANGED
@@ -1,10 +1,11 @@
1
1
  # frozen_string_literal: true
2
- require 'thor'
3
- require 'json'
4
- require_relative 'string'
2
+
3
+ require "thor"
4
+ require "json"
5
+ require_relative "string"
5
6
  require_relative "ballantine/version"
6
- require_relative 'ballantine/config'
7
- require_relative 'ballantine/author'
7
+ require_relative "ballantine/config"
8
+ require_relative "ballantine/author"
8
9
  require_relative "ballantine/cli"
9
10
 
10
11
  module Ballantine
data/lib/string.rb CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env ruby
1
+ # frozen_string_literal: true
2
2
 
3
3
  # @override
4
4
  class String
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ballantine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4.pre.beta
5
5
  platform: ruby
6
6
  authors:
7
7
  - oohyun15
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-08-20 00:00:00.000000000 Z
11
+ date: 2023-01-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -58,7 +58,7 @@ homepage: https://github.com/oohyun15/ballantine
58
58
  licenses:
59
59
  - MIT
60
60
  metadata: {}
61
- post_install_message:
61
+ post_install_message:
62
62
  rdoc_options: []
63
63
  require_paths:
64
64
  - lib
@@ -66,15 +66,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - ">="
68
68
  - !ruby/object:Gem::Version
69
- version: 2.7.6
69
+ version: '3.1'
70
70
  required_rubygems_version: !ruby/object:Gem::Requirement
71
71
  requirements:
72
- - - ">="
72
+ - - ">"
73
73
  - !ruby/object:Gem::Version
74
- version: '0'
74
+ version: 1.3.1
75
75
  requirements: []
76
- rubygems_version: 3.3.7
77
- signing_key:
76
+ rubygems_version: 3.3.26
77
+ signing_key:
78
78
  specification_version: 4
79
79
  summary: Describe your commits.
80
80
  test_files: []