green_day 0.4.0 → 0.6.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.
- checksums.yaml +4 -4
- data/.github/workflows/bump_version_and_push_to_rubygems.yml +54 -0
- data/.github/workflows/ruby.yml +18 -10
- data/.rubocop.yml +2 -2
- data/Gemfile +10 -0
- data/README.md +1 -3
- data/green_day.gemspec +2 -13
- data/lib/green_day/atcoder_client.rb +24 -40
- data/lib/green_day/cli.rb +17 -19
- data/lib/green_day/contest.rb +22 -9
- data/lib/green_day/task.rb +16 -7
- data/lib/green_day/version.rb +1 -1
- metadata +7 -160
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 971ee30b1f0c5e28050c22c9dad43ec540df4b62a8c98732cc087bd6073264ce
|
4
|
+
data.tar.gz: b466d89cbb1b7bf4b80bd4b6e6376c62b6bfab1582e0dacea346ceddd43e4996
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 89fbaca8563074011b950df0241164a97e0fbb0659126b00cc5a7a04a6cd4169dd0a63ece3d4d245aa19ccbb71421b2841d733bb209e893af48f3c22aeb4db3e
|
7
|
+
data.tar.gz: 02bcd53c57dd6c4d73e8871e0943cd494fe700b77ce61603d752f4f2ec4a97653288c9f9e03e4c9d91766d67d399a1647900ccd2ddd7a752d245310151057db4
|
@@ -0,0 +1,54 @@
|
|
1
|
+
name: Bump version and Push to RubyGems
|
2
|
+
|
3
|
+
on:
|
4
|
+
workflow_dispatch:
|
5
|
+
inputs:
|
6
|
+
miner-or-major:
|
7
|
+
description: 'Minor or major release'
|
8
|
+
required: true
|
9
|
+
default: 'minor'
|
10
|
+
options:
|
11
|
+
- 'minor'
|
12
|
+
- 'major'
|
13
|
+
email:
|
14
|
+
description: Your email
|
15
|
+
required: true
|
16
|
+
type: string
|
17
|
+
|
18
|
+
|
19
|
+
jobs:
|
20
|
+
build:
|
21
|
+
name: Build + Publish
|
22
|
+
runs-on: ubuntu-latest
|
23
|
+
permissions:
|
24
|
+
packages: write
|
25
|
+
contents: read
|
26
|
+
|
27
|
+
steps:
|
28
|
+
- uses: actions/checkout@v3
|
29
|
+
- name: Set up Ruby 3.2
|
30
|
+
uses: ruby/setup-ruby@v1
|
31
|
+
with:
|
32
|
+
ruby-version: 3.2
|
33
|
+
|
34
|
+
- run: bundle install
|
35
|
+
- run: gem install gem-release
|
36
|
+
|
37
|
+
- name: config
|
38
|
+
run: |
|
39
|
+
git config --global user.email ${{ github.event.inputs.email }}
|
40
|
+
git config --global user.name ${{ github.actor }}
|
41
|
+
|
42
|
+
- name: Bump version
|
43
|
+
run: gem bump --version ${{ github.event.inputs.miner-or-major }}
|
44
|
+
|
45
|
+
- name: Publish to RubyGems
|
46
|
+
run: |
|
47
|
+
mkdir -p $HOME/.gem
|
48
|
+
touch $HOME/.gem/credentials
|
49
|
+
chmod 0600 $HOME/.gem/credentials
|
50
|
+
printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
|
51
|
+
gem build *.gemspec
|
52
|
+
gem push *.gem
|
53
|
+
env:
|
54
|
+
GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"
|
data/.github/workflows/ruby.yml
CHANGED
@@ -10,25 +10,33 @@ jobs:
|
|
10
10
|
runs-on: ubuntu-latest
|
11
11
|
strategy:
|
12
12
|
matrix:
|
13
|
-
ruby:
|
14
|
-
- 2.
|
15
|
-
- 3.1.0
|
13
|
+
ruby-version:
|
14
|
+
- 3.2.1 # Atcoderが採用しているバージョン
|
16
15
|
steps:
|
17
|
-
- uses: actions/checkout@
|
18
|
-
- name: Set up Ruby ${{ matrix.ruby }}
|
16
|
+
- uses: actions/checkout@v3
|
17
|
+
- name: Set up Ruby ${{ matrix.ruby-version }}
|
19
18
|
uses: ruby/setup-ruby@v1
|
20
19
|
with:
|
21
|
-
ruby-version: ${{ matrix.ruby }}
|
22
|
-
- name:
|
20
|
+
ruby-version: ${{ matrix.ruby-version }}
|
21
|
+
- name: Bundle install
|
23
22
|
run: bundle install
|
24
|
-
- name:
|
25
|
-
run: bundle exec rubocop
|
26
|
-
- name: Rspec
|
23
|
+
- name: Run Rspec
|
27
24
|
env:
|
28
25
|
USER_NAME: ${{ secrets.USER_NAME }}
|
29
26
|
PASSWORD: ${{ secrets.PASSWORD }}
|
30
27
|
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
31
28
|
run: script -e -c "rake spec"
|
29
|
+
rubocop:
|
30
|
+
runs-on: ubuntu-latest
|
31
|
+
steps:
|
32
|
+
- uses: actions/checkout@v3
|
33
|
+
- uses: ruby/setup-ruby@v1
|
34
|
+
with:
|
35
|
+
ruby-version: 3.2.1
|
36
|
+
- name: Bundle install
|
37
|
+
run: bundle install
|
38
|
+
- name: Run rubocop
|
39
|
+
run: bundle exec rubocop
|
32
40
|
|
33
41
|
|
34
42
|
|
data/.rubocop.yml
CHANGED
data/Gemfile
CHANGED
@@ -4,3 +4,13 @@ source 'https://rubygems.org'
|
|
4
4
|
|
5
5
|
# Specify your gem's dependencies in green_day.gemspec
|
6
6
|
gemspec
|
7
|
+
|
8
|
+
gem 'bundler', '~> 2.0'
|
9
|
+
gem 'codecov'
|
10
|
+
gem 'dotenv'
|
11
|
+
gem 'rake', '>= 12.3.3'
|
12
|
+
gem 'rspec', '~> 3.0'
|
13
|
+
gem 'rubocop'
|
14
|
+
gem 'rubocop-rake'
|
15
|
+
gem 'rubocop-rspec'
|
16
|
+
gem 'vcr'
|
data/README.md
CHANGED
@@ -52,8 +52,6 @@ For example
|
|
52
52
|
Example of output spec
|
53
53
|
|
54
54
|
```ruby
|
55
|
-
require 'rspec'
|
56
|
-
|
57
55
|
RSpec.describe 'test' do
|
58
56
|
it 'test with "2 900\\n"' do
|
59
57
|
io = IO.popen("ruby abc150/A.rb", "w+")
|
@@ -94,4 +92,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
|
|
94
92
|
|
95
93
|
## Code of Conduct
|
96
94
|
|
97
|
-
Everyone interacting in the GreenDay project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/
|
95
|
+
Everyone interacting in the GreenDay project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/QWYNG/green_day/blob/master/CODE_OF_CONDUCT.md).
|
data/green_day.gemspec
CHANGED
@@ -5,7 +5,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
5
5
|
require 'green_day/version'
|
6
6
|
|
7
7
|
Gem::Specification.new do |spec|
|
8
|
-
spec.required_ruby_version = '>= 2.
|
8
|
+
spec.required_ruby_version = '>= 3.2.1'
|
9
9
|
spec.name = 'green_day'
|
10
10
|
spec.executables = ['green_day']
|
11
11
|
spec.version = GreenDay::VERSION
|
@@ -27,20 +27,9 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.require_paths = ['lib']
|
28
28
|
|
29
29
|
spec.add_dependency 'colorize'
|
30
|
-
spec.add_dependency 'faraday'
|
30
|
+
spec.add_dependency 'faraday'
|
31
31
|
spec.add_dependency 'faraday-cookie_jar'
|
32
32
|
spec.add_dependency 'nokogiri'
|
33
|
-
spec.add_dependency 'parallel'
|
34
33
|
spec.add_dependency 'thor'
|
35
|
-
spec.add_dependency 'webrick'
|
36
|
-
spec.add_development_dependency 'bundler', '~> 2.0'
|
37
|
-
spec.add_development_dependency 'codecov'
|
38
|
-
spec.add_development_dependency 'dotenv'
|
39
|
-
spec.add_development_dependency 'rake', '>= 12.3.3'
|
40
|
-
spec.add_development_dependency 'rspec', '~> 3.0'
|
41
|
-
spec.add_development_dependency 'rubocop'
|
42
|
-
spec.add_development_dependency 'rubocop-rake'
|
43
|
-
spec.add_development_dependency 'rubocop-rspec'
|
44
|
-
spec.add_development_dependency 'vcr'
|
45
34
|
spec.metadata['rubygems_mfa_required'] = 'true'
|
46
35
|
end
|
@@ -2,59 +2,47 @@
|
|
2
2
|
|
3
3
|
require 'faraday'
|
4
4
|
require 'faraday-cookie_jar'
|
5
|
-
require 'webrick/cookie'
|
6
5
|
require 'nokogiri'
|
7
6
|
|
8
7
|
module GreenDay
|
9
8
|
class AtcoderClient
|
10
9
|
ATCODER_ENDPOINT = 'https://atcoder.jp'
|
11
10
|
COOKIE_FILE_NAME = '.cookie-store'
|
12
|
-
attr_reader :
|
11
|
+
attr_reader :conn, :cookie_jar
|
12
|
+
|
13
|
+
def self.login(username, password)
|
14
|
+
new.login(username, password)
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.get_parsed_body(path)
|
18
|
+
new.get_parsed_body(path)
|
19
|
+
end
|
13
20
|
|
14
21
|
def initialize
|
15
22
|
@cookie_jar = create_or_load_cookie_jar
|
16
|
-
@
|
23
|
+
@conn = Faraday.new(url: ATCODER_ENDPOINT) do |builder|
|
17
24
|
builder.use :cookie_jar, jar: cookie_jar
|
18
25
|
builder.request :url_encoded
|
19
26
|
builder.adapter :net_http
|
20
27
|
end
|
21
28
|
end
|
22
29
|
|
23
|
-
def
|
24
|
-
res =
|
25
|
-
res.
|
26
|
-
end
|
27
|
-
|
28
|
-
def fetch_task_codes(contest)
|
29
|
-
body = get_parsed_body("contests/#{contest.name}/tasks")
|
30
|
-
|
31
|
-
# 3問だったら<tbody>の中に<tr>が3 * 2個 </tbody> が1mh個
|
32
|
-
tasks_size = ((body.at('tbody').children.size - 1) / 2.0).ceil
|
33
|
-
('A'..'ZZ').to_a.shift(tasks_size)
|
34
|
-
end
|
35
|
-
|
36
|
-
def fetch_inputs_and_outputs(contest, task)
|
37
|
-
contest_name = contest.name
|
38
|
-
path = "contests/#{contest_name}/tasks/#{contest_name}_#{task.code.downcase}"
|
39
|
-
body = get_parsed_body(path)
|
40
|
-
samples = body.css('.lang-ja > .part > section > pre').map { |e| e.children.text }
|
41
|
-
|
42
|
-
inputs, outputs = samples.partition.with_index { |_sample, i| i.even? }
|
43
|
-
|
44
|
-
[inputs, outputs]
|
30
|
+
def get_parsed_body(path)
|
31
|
+
res = conn.get(path)
|
32
|
+
Nokogiri::HTML.parse(res.body)
|
45
33
|
end
|
46
34
|
|
47
35
|
def login(username, password)
|
48
36
|
csrf_token = obtain_atcoder_csrf_token
|
49
37
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
38
|
+
conn.post('/login',
|
39
|
+
username:,
|
40
|
+
password:,
|
41
|
+
csrf_token:)
|
54
42
|
|
55
43
|
unless login_succeed?
|
56
44
|
## ex error:Username or Password is incorrect
|
57
|
-
raise Error, CGI.unescape(
|
45
|
+
raise Error, CGI.unescape(flash_cookie.value).split('.').shift
|
58
46
|
end
|
59
47
|
|
60
48
|
cookie_jar.save(COOKIE_FILE_NAME)
|
@@ -75,25 +63,21 @@ module GreenDay
|
|
75
63
|
end
|
76
64
|
|
77
65
|
def obtain_atcoder_csrf_token
|
78
|
-
get_login_response =
|
66
|
+
get_login_response = conn.get('/login')
|
79
67
|
login_html = Nokogiri::HTML.parse(get_login_response.body)
|
80
68
|
login_html.at('input[name="csrf_token"]')['value']
|
81
69
|
rescue StandardError
|
82
|
-
raise Error, '
|
70
|
+
raise Error, 'can not get_csrf_token'
|
83
71
|
end
|
84
72
|
|
85
73
|
def login_succeed?
|
86
|
-
flash_cookie = select_flash_cookie
|
87
74
|
flash_cookie.value.include?('Welcome')
|
88
75
|
end
|
89
76
|
|
90
|
-
def
|
91
|
-
cookie_jar.
|
92
|
-
|
93
|
-
|
94
|
-
def get_parsed_body(path)
|
95
|
-
res = client.get(path)
|
96
|
-
Nokogiri::HTML.parse(res.body)
|
77
|
+
def flash_cookie
|
78
|
+
@flash_cookie ||= cookie_jar.cookies("#{ATCODER_ENDPOINT}/login").find do |cookie|
|
79
|
+
cookie.name == 'REVEL_FLASH'
|
80
|
+
end
|
97
81
|
end
|
98
82
|
end
|
99
83
|
end
|
data/lib/green_day/cli.rb
CHANGED
@@ -17,7 +17,7 @@ module GreenDay
|
|
17
17
|
print 'password:'
|
18
18
|
password = $stdin.noecho { |stdin| stdin.gets(chomp: true) }.tap { puts }
|
19
19
|
|
20
|
-
AtcoderClient.
|
20
|
+
AtcoderClient.login(username, password)
|
21
21
|
puts(
|
22
22
|
"Successfully created #{AtcoderClient::COOKIE_FILE_NAME}"
|
23
23
|
.colorize(:green)
|
@@ -26,38 +26,36 @@ module GreenDay
|
|
26
26
|
|
27
27
|
desc 'new [contest name]', 'create contest workspace and spec'
|
28
28
|
def new(contest_name)
|
29
|
-
contest = Contest.new(contest_name
|
29
|
+
contest = Contest.new(contest_name)
|
30
30
|
FileUtils.makedirs("#{contest.name}/spec")
|
31
31
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
end
|
32
|
+
contest.tasks.map do |task|
|
33
|
+
create_files_in_thread(task)
|
34
|
+
end.each(&:join)
|
36
35
|
|
37
36
|
puts "Successfully created #{contest.name} directory".colorize(:green)
|
38
37
|
end
|
39
38
|
|
40
39
|
private
|
41
40
|
|
42
|
-
def
|
43
|
-
|
41
|
+
def create_files_in_thread(task)
|
42
|
+
Thread.new do
|
43
|
+
create_task_file(task)
|
44
|
+
create_task_spec_file(task)
|
45
|
+
end
|
44
46
|
end
|
45
47
|
|
46
|
-
def
|
47
|
-
|
48
|
-
TestBuilder.build_test(
|
49
|
-
submit_file_path(task),
|
50
|
-
task.sample_answers
|
51
|
-
)
|
52
|
-
File.write(spec_file_path(task), test)
|
48
|
+
def create_task_file(task)
|
49
|
+
FileUtils.touch(task_file_name(task))
|
53
50
|
end
|
54
51
|
|
55
|
-
def
|
56
|
-
|
52
|
+
def create_task_spec_file(task)
|
53
|
+
test_content = TestBuilder.build_test(task_file_name(task), task.sample_answers)
|
54
|
+
File.write("#{task.contest.name}/spec/#{task.name}_spec.rb", test_content)
|
57
55
|
end
|
58
56
|
|
59
|
-
def
|
60
|
-
"#{task.contest.name}
|
57
|
+
def task_file_name(task)
|
58
|
+
"#{task.contest.name}/#{task.name}.rb"
|
61
59
|
end
|
62
60
|
end
|
63
61
|
end
|
data/lib/green_day/contest.rb
CHANGED
@@ -1,22 +1,35 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative 'atcoder_client'
|
4
3
|
require_relative 'task'
|
5
4
|
|
6
5
|
module GreenDay
|
7
6
|
class Contest
|
8
|
-
attr_reader :
|
9
|
-
|
10
|
-
def initialize(contest_name, client)
|
11
|
-
raise GreenDay::Error 'cant find contest' unless client.contest_exist?(contest_name)
|
7
|
+
attr_reader :name, :tasks
|
12
8
|
|
9
|
+
def initialize(contest_name)
|
13
10
|
@name = contest_name
|
14
11
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
12
|
+
@tasks = fetch_task_names_and_paths.map.with_index do |(task_name, task_path), i|
|
13
|
+
if !i.zero? && (i % 10).zero? && !ENV['CI']
|
14
|
+
puts 'Sleeping 2 second to avoid 429 error'
|
15
|
+
sleep 2
|
16
|
+
end
|
17
|
+
|
18
|
+
Thread.new do
|
19
|
+
Task.new(self, task_name, task_path)
|
19
20
|
end
|
21
|
+
end.map(&:value)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def fetch_task_names_and_paths
|
27
|
+
body = AtcoderClient.get_parsed_body("contests/#{name}/tasks")
|
28
|
+
task_elements = body.search('tbody tr td:first a')
|
29
|
+
|
30
|
+
task_elements.to_h do |element|
|
31
|
+
[element.text, element[:href]]
|
32
|
+
end
|
20
33
|
end
|
21
34
|
end
|
22
35
|
end
|
data/lib/green_day/task.rb
CHANGED
@@ -2,21 +2,30 @@
|
|
2
2
|
|
3
3
|
module GreenDay
|
4
4
|
class Task
|
5
|
-
attr_reader :contest, :
|
5
|
+
attr_reader :contest, :name, :path, :sample_answers
|
6
6
|
|
7
|
-
def initialize(contest,
|
7
|
+
def initialize(contest, name, path)
|
8
8
|
@contest = contest
|
9
|
-
@
|
10
|
-
@
|
9
|
+
@name = name
|
10
|
+
@path = path
|
11
|
+
@sample_answers = create_sample_answers_hash
|
11
12
|
end
|
12
13
|
|
13
14
|
private
|
14
15
|
|
15
|
-
def
|
16
|
-
input_samples, output_samples =
|
17
|
-
client.fetch_inputs_and_outputs(contest, self)
|
16
|
+
def create_sample_answers_hash
|
17
|
+
input_samples, output_samples = fetch_inputs_and_outputs
|
18
18
|
|
19
19
|
input_samples.zip(output_samples).to_h
|
20
20
|
end
|
21
|
+
|
22
|
+
def fetch_inputs_and_outputs
|
23
|
+
body = AtcoderClient.get_parsed_body(path)
|
24
|
+
samples = body.css('.lang-ja > .part > section > pre').map { |e| e.children.text }
|
25
|
+
|
26
|
+
inputs, outputs = samples.partition.with_index { |_sample, i| i.even? }
|
27
|
+
|
28
|
+
[inputs, outputs]
|
29
|
+
end
|
21
30
|
end
|
22
31
|
end
|
data/lib/green_day/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: green_day
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- qwyng
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-09-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colorize
|
@@ -26,20 +26,6 @@ dependencies:
|
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: faraday
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "<"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '1.0'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "<"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '1.0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: faraday-cookie_jar
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
44
30
|
requirements:
|
45
31
|
- - ">="
|
@@ -53,7 +39,7 @@ dependencies:
|
|
53
39
|
- !ruby/object:Gem::Version
|
54
40
|
version: '0'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
42
|
+
name: faraday-cookie_jar
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
58
44
|
requirements:
|
59
45
|
- - ">="
|
@@ -67,7 +53,7 @@ dependencies:
|
|
67
53
|
- !ruby/object:Gem::Version
|
68
54
|
version: '0'
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
56
|
+
name: nokogiri
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
72
58
|
requirements:
|
73
59
|
- - ">="
|
@@ -94,146 +80,6 @@ dependencies:
|
|
94
80
|
- - ">="
|
95
81
|
- !ruby/object:Gem::Version
|
96
82
|
version: '0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: webrick
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ">="
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
104
|
-
type: :runtime
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - ">="
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '0'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: bundler
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - "~>"
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '2.0'
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - "~>"
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '2.0'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: codecov
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - ">="
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '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'
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: dotenv
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - ">="
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: '0'
|
146
|
-
type: :development
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - ">="
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: '0'
|
153
|
-
- !ruby/object:Gem::Dependency
|
154
|
-
name: rake
|
155
|
-
requirement: !ruby/object:Gem::Requirement
|
156
|
-
requirements:
|
157
|
-
- - ">="
|
158
|
-
- !ruby/object:Gem::Version
|
159
|
-
version: 12.3.3
|
160
|
-
type: :development
|
161
|
-
prerelease: false
|
162
|
-
version_requirements: !ruby/object:Gem::Requirement
|
163
|
-
requirements:
|
164
|
-
- - ">="
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version: 12.3.3
|
167
|
-
- !ruby/object:Gem::Dependency
|
168
|
-
name: rspec
|
169
|
-
requirement: !ruby/object:Gem::Requirement
|
170
|
-
requirements:
|
171
|
-
- - "~>"
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: '3.0'
|
174
|
-
type: :development
|
175
|
-
prerelease: false
|
176
|
-
version_requirements: !ruby/object:Gem::Requirement
|
177
|
-
requirements:
|
178
|
-
- - "~>"
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
version: '3.0'
|
181
|
-
- !ruby/object:Gem::Dependency
|
182
|
-
name: rubocop
|
183
|
-
requirement: !ruby/object:Gem::Requirement
|
184
|
-
requirements:
|
185
|
-
- - ">="
|
186
|
-
- !ruby/object:Gem::Version
|
187
|
-
version: '0'
|
188
|
-
type: :development
|
189
|
-
prerelease: false
|
190
|
-
version_requirements: !ruby/object:Gem::Requirement
|
191
|
-
requirements:
|
192
|
-
- - ">="
|
193
|
-
- !ruby/object:Gem::Version
|
194
|
-
version: '0'
|
195
|
-
- !ruby/object:Gem::Dependency
|
196
|
-
name: rubocop-rake
|
197
|
-
requirement: !ruby/object:Gem::Requirement
|
198
|
-
requirements:
|
199
|
-
- - ">="
|
200
|
-
- !ruby/object:Gem::Version
|
201
|
-
version: '0'
|
202
|
-
type: :development
|
203
|
-
prerelease: false
|
204
|
-
version_requirements: !ruby/object:Gem::Requirement
|
205
|
-
requirements:
|
206
|
-
- - ">="
|
207
|
-
- !ruby/object:Gem::Version
|
208
|
-
version: '0'
|
209
|
-
- !ruby/object:Gem::Dependency
|
210
|
-
name: rubocop-rspec
|
211
|
-
requirement: !ruby/object:Gem::Requirement
|
212
|
-
requirements:
|
213
|
-
- - ">="
|
214
|
-
- !ruby/object:Gem::Version
|
215
|
-
version: '0'
|
216
|
-
type: :development
|
217
|
-
prerelease: false
|
218
|
-
version_requirements: !ruby/object:Gem::Requirement
|
219
|
-
requirements:
|
220
|
-
- - ">="
|
221
|
-
- !ruby/object:Gem::Version
|
222
|
-
version: '0'
|
223
|
-
- !ruby/object:Gem::Dependency
|
224
|
-
name: vcr
|
225
|
-
requirement: !ruby/object:Gem::Requirement
|
226
|
-
requirements:
|
227
|
-
- - ">="
|
228
|
-
- !ruby/object:Gem::Version
|
229
|
-
version: '0'
|
230
|
-
type: :development
|
231
|
-
prerelease: false
|
232
|
-
version_requirements: !ruby/object:Gem::Requirement
|
233
|
-
requirements:
|
234
|
-
- - ">="
|
235
|
-
- !ruby/object:Gem::Version
|
236
|
-
version: '0'
|
237
83
|
description: CLI tool for AtCoder and Ruby
|
238
84
|
email:
|
239
85
|
- ikusawasi@gmail.com
|
@@ -242,6 +88,7 @@ executables:
|
|
242
88
|
extensions: []
|
243
89
|
extra_rdoc_files: []
|
244
90
|
files:
|
91
|
+
- ".github/workflows/bump_version_and_push_to_rubygems.yml"
|
245
92
|
- ".github/workflows/ruby.yml"
|
246
93
|
- ".gitignore"
|
247
94
|
- ".rspec"
|
@@ -277,14 +124,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
277
124
|
requirements:
|
278
125
|
- - ">="
|
279
126
|
- !ruby/object:Gem::Version
|
280
|
-
version: 2.
|
127
|
+
version: 3.2.1
|
281
128
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
282
129
|
requirements:
|
283
130
|
- - ">="
|
284
131
|
- !ruby/object:Gem::Version
|
285
132
|
version: '0'
|
286
133
|
requirements: []
|
287
|
-
rubygems_version: 3.
|
134
|
+
rubygems_version: 3.4.10
|
288
135
|
signing_key:
|
289
136
|
specification_version: 4
|
290
137
|
summary: CLI tool for AtCoder and Ruby
|