at_coder_friends 0.6.8 → 0.6.9

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: 9f754a47390aa40a5a92a0fa39ba99cc92904788e0d48fb7b73bc41c8be44ba0
4
- data.tar.gz: dae70f5657afd47a08731daaff6eacbe5f8a5bdf27b5b963f502f78d6cfc084a
3
+ metadata.gz: dc8c9e5d2e8f2f243d7e520c88186cc62b46296a3e1b5d7a60673d8a208dd7ec
4
+ data.tar.gz: 732ab4cbadae2e8e8a1a51e3928fc0bb7f58da4738c770c93d82f5b6262f76b4
5
5
  SHA512:
6
- metadata.gz: d9bb6125db9f14b16f21e351df797a96e17ebcddd116d911507032f62fdd774b529fe1d4447d6bc699f2c7158a64603c49cba5bcf6090249967db454eb3163f0
7
- data.tar.gz: 632b7b30d878115331a465d588388cc0983c70daf5d1f1593efa42554837df7afadfaf5aad769c84e73ff358f0d4862ee374ddb5346c8e4138ecc57891d80617
6
+ metadata.gz: df86a0c84321098080ba9ad9ef32b6b8f413621ecd90c297fc27d65f36d8d159e7cbfe03c54cce0aa9560ce2b33841c9afa46eb5fbff33bb977d3c0dcfb186bb
7
+ data.tar.gz: fbc249260ea37187c833ff102002feee9781dc6eecdfd175d4fd06ccf3f33d7a706431353c39a4126d9761825f50b3050b695b02353558594ef93ab07a4dede0
data/.gitattributes ADDED
@@ -0,0 +1 @@
1
+ spec/mocks/* linguist-vendored
@@ -0,0 +1,70 @@
1
+ # For most projects, this workflow file will not need changing; you simply need
2
+ # to commit it to your repository.
3
+ #
4
+ # You may wish to alter this file to override the set of languages analyzed,
5
+ # or to provide custom queries or build logic.
6
+ #
7
+ # ******** NOTE ********
8
+ # We have attempted to detect the languages in your repository. Please check
9
+ # the `language` matrix defined below to confirm you have the correct set of
10
+ # supported CodeQL languages.
11
+ #
12
+ name: "CodeQL"
13
+
14
+ on:
15
+ push:
16
+ branches: [ master ]
17
+ pull_request:
18
+ # The branches below must be a subset of the branches above
19
+ branches: [ master ]
20
+ schedule:
21
+ - cron: '34 8 * * 0'
22
+
23
+ jobs:
24
+ analyze:
25
+ name: Analyze
26
+ runs-on: ubuntu-latest
27
+ permissions:
28
+ actions: read
29
+ contents: read
30
+ security-events: write
31
+
32
+ strategy:
33
+ fail-fast: false
34
+ matrix:
35
+ language: [ 'ruby' ]
36
+ # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
37
+ # Learn more about CodeQL language support at https://git.io/codeql-language-support
38
+
39
+ steps:
40
+ - name: Checkout repository
41
+ uses: actions/checkout@v2
42
+
43
+ # Initializes the CodeQL tools for scanning.
44
+ - name: Initialize CodeQL
45
+ uses: github/codeql-action/init@v1
46
+ with:
47
+ languages: ${{ matrix.language }}
48
+ # If you wish to specify custom queries, you can do so here or in a config file.
49
+ # By default, queries listed here will override any specified in a config file.
50
+ # Prefix the list here with "+" to use these queries and those in the config file.
51
+ # queries: ./path/to/local/query, your-org/your-repo/queries@main
52
+
53
+ # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
54
+ # If this step fails, then you should remove it and run the build manually (see below)
55
+ - name: Autobuild
56
+ uses: github/codeql-action/autobuild@v1
57
+
58
+ # ℹ️ Command-line programs to run using the OS shell.
59
+ # 📚 https://git.io/JvXDl
60
+
61
+ # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
62
+ # and modify them (or add more) to build your code if your project
63
+ # uses a compiled language
64
+
65
+ #- run: |
66
+ # make bootstrap
67
+ # make release
68
+
69
+ - name: Perform CodeQL Analysis
70
+ uses: github/codeql-action/analyze@v1
@@ -0,0 +1,32 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: Ruby
9
+
10
+ on:
11
+ push:
12
+ branches: [ master ]
13
+ pull_request:
14
+ branches: [ master ]
15
+
16
+ jobs:
17
+ test:
18
+
19
+ runs-on: ubuntu-latest
20
+ strategy:
21
+ matrix:
22
+ ruby-version: ['2.5', '2.7']
23
+
24
+ steps:
25
+ - uses: actions/checkout@v2
26
+ - name: Set up Ruby
27
+ uses: ruby/setup-ruby@v1
28
+ with:
29
+ ruby-version: ${{ matrix.ruby-version }}
30
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
31
+ - name: Run tests
32
+ run: script -e -c "bundle exec rspec"
data/.rubocop.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  inherit_from: .rubocop_todo.yml
2
2
 
3
3
  AllCops:
4
- TargetRubyVersion: 2.4
4
+ TargetRubyVersion: 2.5
5
5
  Exclude:
6
6
  - 'templates/**/*'
7
7
  - 'spec/fixtures/**/*'
@@ -12,6 +12,13 @@ Lint/AmbiguousBlockAssociation:
12
12
  Exclude:
13
13
  - 'spec/**/*.rb'
14
14
 
15
+ Lint/ConstantDefinitionInBlock:
16
+ Exclude:
17
+ - 'spec/**/*.rb'
18
+
19
+ Lint/DuplicateBranch:
20
+ Enabled: false
21
+
15
22
  Metrics/BlockLength:
16
23
  Exclude:
17
24
  - 'Rakefile'
data/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## master (unreleased)
4
4
 
5
+ ## 0.6.9 (2021-12-25)
6
+ ### Added
7
+ - input_format.rb : \hspace{...}, \text{...} support
8
+ - input_format.rb : \rm, \textrm{...} support
9
+ - modulo.rb : \text{mod}, {\bmod}, (10^9+7) support
10
+
5
11
  ## 0.6.8 (2021-05-27)
6
12
  ### Deleted
7
13
  - drop Ruby2.4 from target version.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- at_coder_friends (0.6.8)
4
+ at_coder_friends (0.6.9)
5
5
  colorize (~> 0.8.1)
6
6
  launchy (>= 2.4.3)
7
7
  mechanize (~> 2.0)
@@ -9,23 +9,23 @@ PATH
9
9
  GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
- addressable (2.7.0)
12
+ addressable (2.8.0)
13
13
  public_suffix (>= 2.0.2, < 5.0)
14
14
  colorize (0.8.1)
15
15
  connection_pool (2.2.5)
16
16
  crack (0.4.5)
17
17
  rexml
18
- diff-lcs (1.4.4)
18
+ diff-lcs (1.5.0)
19
19
  docile (1.4.0)
20
20
  domain_name (0.5.20190701)
21
21
  unf (>= 0.0.5, < 1.0.0)
22
22
  hashdiff (1.0.1)
23
- http-cookie (1.0.3)
23
+ http-cookie (1.0.4)
24
24
  domain_name (~> 0.5)
25
25
  launchy (2.5.0)
26
26
  addressable (~> 2.7)
27
- mechanize (2.8.1)
28
- addressable (~> 2.7)
27
+ mechanize (2.8.3)
28
+ addressable (~> 2.8)
29
29
  domain_name (~> 0.5, >= 0.5.20190701)
30
30
  http-cookie (~> 1.0, >= 1.0.3)
31
31
  mime-types (~> 3.0)
@@ -35,19 +35,21 @@ GEM
35
35
  rubyntlm (~> 0.6, >= 0.6.3)
36
36
  webrick (~> 1.7)
37
37
  webrobots (~> 0.1.2)
38
- mime-types (3.3.1)
38
+ mime-types (3.4.1)
39
39
  mime-types-data (~> 3.2015)
40
- mime-types-data (3.2021.0225)
41
- mini_portile2 (2.5.1)
40
+ mime-types-data (3.2021.1115)
41
+ mini_portile2 (2.6.1)
42
42
  net-http-digest_auth (1.4.1)
43
43
  net-http-persistent (4.0.1)
44
44
  connection_pool (~> 2.2)
45
- nokogiri (1.11.6)
46
- mini_portile2 (~> 2.5.0)
45
+ nokogiri (1.12.5)
46
+ mini_portile2 (~> 2.6.1)
47
+ racc (~> 1.4)
48
+ nokogiri (1.12.5-x64-mingw32)
47
49
  racc (~> 1.4)
48
50
  public_suffix (4.0.6)
49
- racc (1.5.2)
50
- rake (13.0.3)
51
+ racc (1.6.0)
52
+ rake (13.0.6)
51
53
  rexml (3.2.5)
52
54
  rspec (3.10.0)
53
55
  rspec-core (~> 3.10.0)
@@ -61,7 +63,7 @@ GEM
61
63
  rspec-mocks (3.10.2)
62
64
  diff-lcs (>= 1.2.0, < 2.0)
63
65
  rspec-support (~> 3.10.0)
64
- rspec-support (3.10.2)
66
+ rspec-support (3.10.3)
65
67
  rubyntlm (0.6.3)
66
68
  simplecov (0.21.2)
67
69
  docile (~> 1.1)
@@ -71,9 +73,10 @@ GEM
71
73
  simplecov_json_formatter (0.1.3)
72
74
  unf (0.1.4)
73
75
  unf_ext
74
- unf_ext (0.0.7.7)
75
- webmock (3.13.0)
76
- addressable (>= 2.3.6)
76
+ unf_ext (0.0.8)
77
+ unf_ext (0.0.8-x64-mingw32)
78
+ webmock (3.14.0)
79
+ addressable (>= 2.8.0)
77
80
  crack (>= 0.3.2)
78
81
  hashdiff (>= 0.4.0, < 2.0.0)
79
82
  webrick (1.7.0)
@@ -92,4 +95,4 @@ DEPENDENCIES
92
95
  webmock (~> 3.0)
93
96
 
94
97
  BUNDLED WITH
95
- 2.2.18
98
+ 2.2.32
data/README.md CHANGED
@@ -1,7 +1,11 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/at_coder_friends.svg)](https://badge.fury.io/rb/at_coder_friends)
2
- [![Build Status](https://travis-ci.org/nejiko96/at_coder_friends.svg?branch=master)](https://travis-ci.org/nejiko96/at_coder_friends)
2
+ ![Gem](https://img.shields.io/gem/dt/at_coder_friends)
3
+ [![Ruby](https://github.com/nejiko96/at_coder_friends/actions/workflows/ruby.yml/badge.svg)](https://github.com/nejiko96/at_coder_friends/actions/workflows/ruby.yml)
4
+ [![CodeQL](https://github.com/nejiko96/at_coder_friends/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/nejiko96/at_coder_friends/actions/workflows/codeql-analysis.yml)
3
5
  [![Maintainability](https://api.codeclimate.com/v1/badges/dcd1ce08d11703be2f00/maintainability)](https://codeclimate.com/github/nejiko96/at_coder_friends/maintainability)
4
6
  [![Test Coverage](https://api.codeclimate.com/v1/badges/dcd1ce08d11703be2f00/test_coverage)](https://codeclimate.com/github/nejiko96/at_coder_friends/test_coverage)
7
+ ![GitHub](https://img.shields.io/github/license/nejiko96/at_coder_friends)
8
+ <!-- [![Build Status](https://travis-ci.org/nejiko96/at_coder_friends.svg?branch=master)](https://travis-ci.org/nejiko96/at_coder_friends) -->
5
9
 
6
10
  # AtCoderFriends
7
11
 
@@ -16,7 +20,7 @@ AtCoderFriends automates tasks about [AtCoder](https://atcoder.jp/) programming
16
20
 
17
21
  ## Dependencies
18
22
 
19
- - Ruby 2.4 or newer
23
+ - Ruby 2.5 or newer
20
24
  - [Mechanize](https://github.com/sparklemotion/mechanize)
21
25
 
22
26
  ## Installation
@@ -33,7 +33,8 @@ Gem::Specification.new do |spec|
33
33
  spec.metadata = {
34
34
  'homepage_uri' => spec.homepage,
35
35
  'source_code_uri' => spec.homepage,
36
- 'changelog_uri' => spec.homepage + '/blob/master/CHANGELOG.md'
36
+ 'changelog_uri' => "#{spec.homepage}/blob/master/CHANGELOG.md",
37
+ 'rubygems_mfa_required' => 'true'
37
38
  }
38
39
 
39
40
  spec.add_dependency 'colorize', '~> 0.8.1'
@@ -51,18 +51,17 @@ module AtCoderFriends
51
51
  end
52
52
 
53
53
  def merge(base_hash, derived_hash)
54
- res = base_hash.merge(derived_hash) do |_, base_val, derived_val|
54
+ base_hash.merge(derived_hash) do |_, base_val, derived_val|
55
55
  if base_val.is_a?(Hash) && derived_val.is_a?(Hash)
56
56
  merge(base_val, derived_val)
57
57
  else
58
58
  derived_val
59
59
  end
60
60
  end
61
- res
62
61
  end
63
62
 
64
63
  def load_yaml(path)
65
- yaml = IO.read(path, encoding: Encoding::UTF_8)
64
+ yaml = File.read(path, encoding: Encoding::UTF_8)
66
65
  YAML.safe_load(yaml, [], [], false, path) || {}
67
66
  rescue Errno::ENOENT
68
67
  raise ConfigNotFoundError,
@@ -238,8 +238,7 @@ module AtCoderFriends
238
238
  def render(src)
239
239
  src = embed_lines(src, '/*** CONSTS ***/', gen_consts)
240
240
  src = embed_lines(src, '/*** DCLS ***/', gen_decls)
241
- src = embed_lines(src, '/*** INPUTS ***/', gen_inputs)
242
- src
241
+ embed_lines(src, '/*** INPUTS ***/', gen_inputs)
243
242
  end
244
243
 
245
244
  def gen_consts(constants = pbm.constants)
@@ -12,16 +12,14 @@ module AtCoderFriends
12
12
  end
13
13
 
14
14
  def process(pbm)
15
- generators = ctx.config.dig('generators') || []
15
+ generators = ctx.config['generators'] || []
16
16
  generators.each do |gen_name|
17
- begin
18
- gen_obj = load_obj(gen_name)
19
- gen_obj.process(pbm)
20
- rescue StandardError => e
21
- puts "an error occurred in generator:#{gen_name}."
22
- puts e.to_s
23
- puts e.backtrace
24
- end
17
+ gen_obj = load_obj(gen_name)
18
+ gen_obj.process(pbm)
19
+ rescue StandardError => e
20
+ puts "an error occurred in generator:#{gen_name}."
21
+ puts e.to_s
22
+ puts e.backtrace
25
23
  end
26
24
  end
27
25
 
@@ -15,8 +15,7 @@ module AtCoderFriends
15
15
 
16
16
  def render(src)
17
17
  src = embed_lines(src, '### CONSTS ###', gen_consts)
18
- src = embed_lines(src, '### DCLS ###', gen_decls)
19
- src
18
+ embed_lines(src, '### DCLS ###', gen_decls)
20
19
  end
21
20
 
22
21
  def gen_consts(constants = pbm.constants)
@@ -110,7 +109,7 @@ module AtCoderFriends
110
109
  vs[mx] += 's'
111
110
  sz = inpdef.size[0]
112
111
  dcls = vs.map { |v| "#{v}[i]" }
113
- dcls[mx] = '*' + dcls[mx] unless inpdef.item == :char
112
+ dcls[mx] = "*#{dcls[mx]}" unless inpdef.item == :char
114
113
  dcl = dcls.join(', ')
115
114
  expr = gen_cmb_expr(inpdef)
116
115
  ret = []
@@ -16,9 +16,10 @@ module AtCoderFriends
16
16
  re1, re2 = vs.map { |v| Regexp.escape(v) }
17
17
 
18
18
  pbm.options.binary_values =
19
- if out_fmt =~ /#{re1}.+#{re2}/m
19
+ case out_fmt
20
+ when /#{re1}.+#{re2}/m
20
21
  vs
21
- elsif out_fmt =~ /#{re2}.+#{re1}/m
22
+ when /#{re2}.+#{re1}/m
22
23
  vs.reverse
23
24
  end
24
25
  end
@@ -56,16 +56,20 @@ module AtCoderFriends
56
56
  .gsub('&gt;', '>')
57
57
  .gsub('&lt;', '<')
58
58
  .gsub('\\ ', ' ')
59
- .gsub(/\\hspace\{\d+pt\}/, ' ')
60
59
  .gsub('\\(', '')
61
60
  .gsub('\\)', '')
62
61
  .gsub('\\lvert', '|')
63
62
  .gsub('\\rvert', '|')
64
- .gsub('\\mathit', '')
65
- .gsub('\\mathrm', '')
66
63
  .gsub('\\times', '*')
67
64
  .gsub(/\\begin(\{[^{}]*\})*/, '')
68
65
  .gsub(/\\end(\{[^{}]*\})*/, '')
66
+ .gsub(/\\hspace(\{[^{}]*\})*/, ' ')
67
+ .gsub(/\\mathrm\{([^{}]*)\}/, '\1')
68
+ .gsub(/\\mathit\{([^{}]*)\}/, '\1')
69
+ .gsub(/\\textrm\{([^{}]*)\}/, '\1')
70
+ .gsub(/\\text\{([^{}]*)\}/, '\1')
71
+ .gsub(/\\rm\{([^{}]*)\}/, '\1')
72
+ .gsub('\\rm ', ' ')
69
73
  .gsub(/\\[cdlv]?dots/, '..')
70
74
  .gsub(/\{\}/, ' ')
71
75
  .gsub('−', '-') # full width hyphen
@@ -148,8 +152,8 @@ module AtCoderFriends
148
152
  class InputFormatMatcher
149
153
  include InputFormatUtils
150
154
 
151
- attr_reader :container, :item, :pat, :gen_names, :gen_pat2
152
- attr_reader :names, :pat2, :size, :delim, :ix0
155
+ attr_reader :container, :item, :pat, :gen_names, :gen_pat2,
156
+ :names, :pat2, :size, :delim, :ix0
153
157
 
154
158
  def initialize(
155
159
  container: nil, item: nil,
@@ -168,8 +172,8 @@ module AtCoderFriends
168
172
 
169
173
  @names = gen_names.call(m1)
170
174
  @pat2 = gen_pat2&.call(names)
171
- @size = m1.names.include?('sz') && m1['sz'] || ''
172
- @ix0 = m1.names.include?('ix0') && m1['ix0'] || size
175
+ @size = (m1.names.include?('sz') && m1['sz']) || ''
176
+ @ix0 = (m1.names.include?('ix0') && m1['ix0']) || size
173
177
  @delim = dlm
174
178
  true
175
179
  end
@@ -416,7 +420,7 @@ module AtCoderFriends
416
420
  SINGLE_MATCHER = InputFormatMatcher.new(
417
421
  container: :single,
418
422
  pat: /\A(.*\s)?#{RE_SINGLE}(\s.*)?\z/,
419
- gen_names: ->(m) { m[0].split.select { |w| w =~ /\A#{RE_SINGLE}\z/ } }
423
+ gen_names: ->(m) { m[0].split.grep(/\A#{RE_SINGLE}\z/) }
420
424
  )
421
425
  MATCHERS = [
422
426
  MATRIX_MATCHER,
@@ -469,8 +473,8 @@ module AtCoderFriends
469
473
 
470
474
  ret << matcher.to_inpdef
471
475
  end
472
- if (matcher = MATCHERS.find { |m| m.match(line) })
473
- elsif !line.empty?
476
+ matcher = MATCHERS.find { |m| m.match(line) }
477
+ if !line.empty? && matcher.nil?
474
478
  puts "unknown format: #{line}"
475
479
  ret << unknown_fmt(line)
476
480
  end
@@ -6,7 +6,6 @@ module AtCoderFriends
6
6
  module Modulo
7
7
  module_function
8
8
 
9
- # rubocop:disable Style/AsciiComments
10
9
  SECTIONS = [
11
10
  Problem::SECTION_OUT_FMT,
12
11
  Problem::SECTION_STATEMENT,
@@ -18,6 +17,7 @@ module AtCoderFriends
18
17
  VALUE_PATTERN = %r{
19
18
  (?:
20
19
  <var>([^<>]+)</var>
20
+ |\(([^()]+)\)
21
21
  |\\\(([^()]+)\\\)
22
22
  |\$([^$]+)\$
23
23
  |\{([^{}]+)\}
@@ -29,10 +29,9 @@ module AtCoderFriends
29
29
  MOD_PATTERN = /
30
30
  (?:
31
31
  #{VALUE_PATTERN}\s*(?:\([^()]+\)\s*)?で割った(?:剰余|余り|あまり)
32
- |(?:modulo|mod|divided\s*by|dividing\s*by)\s*#{VALUE_PATTERN}
32
+ |(?:modulo|mod|divid(?:ed|ing)\s*by)\s*#{VALUE_PATTERN}
33
33
  )
34
34
  /xi.freeze
35
- # rubocop:enable Style/AsciiComments
36
35
 
37
36
  def process(pbm)
38
37
  mods = []
@@ -59,10 +58,9 @@ module AtCoderFriends
59
58
  s
60
59
  .tr('0-9A-Za-z', '0-9A-Za-z')
61
60
  .gsub(/[[:space:]]/, ' ')
62
- .gsub(%r{[^一-龠_ぁ-ん_ァ-ヶーa-zA-Z0-9 -/:-@\[-`\{-~]}, '')
63
- .gsub(/{\\rm\s*mod\s*}\\?/i, 'mod') # {\rm mod} -> mod
64
- .gsub(/\\rm\s*{\s*mod\s*}\\?/i, 'mod') # \rm{mod}\ -> mod
65
- .gsub(/\\mbox\s*{\s*mod\s*}/i, 'mod') # \mbox{mod} -> mod
61
+ .gsub(%r{[^一-龠_ぁ-んァ-ヶーa-zA-Z0-9 -/:-@\[-`\{-~]}, '')
62
+ .gsub(/{\\[a-z]+\s*mod\s*}\\?/i, 'mod') # {\rm mod}, {\bmod} -> mod
63
+ .gsub(/\\[a-z]+\s*{\s*mod\s*}\\?/i, 'mod') # \text{mod} -> mod
66
64
  .gsub(%r{<var>\s*mod\s*</var>}i, 'mod') # <var>mod</var> -> mod
67
65
  end
68
66
 
@@ -23,15 +23,13 @@ module AtCoderFriends
23
23
  end
24
24
 
25
25
  def content
26
- @content ||= begin
26
+ @content ||=
27
27
  siblings.reduce('') { |m, node| m + node.content }.gsub("\r\n", "\n")
28
- end
29
28
  end
30
29
 
31
30
  def html
32
- @html ||= begin
31
+ @html ||=
33
32
  siblings.reduce('') { |m, node| m + node.to_html }.gsub("\r\n", "\n")
34
- end
35
33
  end
36
34
 
37
35
  def find_element(tags)
@@ -54,7 +52,7 @@ module AtCoderFriends
54
52
 
55
53
  def code_block(mtd)
56
54
  elem = find_element(%w[pre blockquote])
57
- elem && elem.send(mtd).lstrip.gsub("\r\n", "\n") || ''
55
+ (elem && elem.send(mtd).lstrip.gsub("\r\n", "\n")) || ''
58
56
  end
59
57
  end
60
58
  end
@@ -129,7 +129,7 @@ module AtCoderFriends
129
129
  key = nil
130
130
  SECTION_DEFS.any? do |grp|
131
131
  if (m = title.match(grp[:pattern]))
132
- no = m.names.include?('no') && m['no'] || '1'
132
+ no = (m.names.include?('no') && m['no']) || '1'
133
133
  key = format(grp[:key], no: no)
134
134
  end
135
135
  end
@@ -140,7 +140,7 @@ module AtCoderFriends
140
140
  s
141
141
  .tr('0-9A-Za-z', '0-9A-Za-z')
142
142
  .gsub(/[[:space:]]/, ' ') # &npsp; full-width space
143
- .gsub(/[^一-龠_ぁ-ん_ァ-ヶーa-zA-Z0-9 ]/, '')
143
+ .gsub(/[^一-龠_ぁ-んァ-ヶーa-zA-Z0-9 ]/, '')
144
144
  .strip
145
145
  end
146
146
  end
@@ -54,7 +54,7 @@ module AtCoderFriends
54
54
  end
55
55
 
56
56
  def vars
57
- tmp = @item && [@item] || cols
57
+ tmp = (@item && [@item]) || cols
58
58
  names.zip(tmp).map { |(name, col)| [name, col || :number] }
59
59
  end
60
60
 
@@ -23,7 +23,7 @@ module AtCoderFriends
23
23
  @agent = Mechanize.new
24
24
  agent.user_agent = "AtCoderFriends/#{VERSION} (#{CONTACT})"
25
25
  agent.pre_connect_hooks << proc { sleep 0.1 }
26
- agent.log = Logger.new(STDERR) if ctx.options[:debug]
26
+ agent.log = Logger.new($stderr) if ctx.options[:debug]
27
27
  load_session
28
28
  end
29
29
 
@@ -25,7 +25,7 @@ module AtCoderFriends
25
25
  raise e if username_link(e.page)
26
26
  end
27
27
 
28
- agent.get(common_url('login') + '?continue=' + CGI.escape(url))
28
+ agent.get("#{common_url('login')}?continue=#{CGI.escape(url)}")
29
29
  end
30
30
 
31
31
  def post_login(page)
@@ -40,13 +40,13 @@ module AtCoderFriends
40
40
  user = ctx.config['user'].to_s
41
41
  if user.empty?
42
42
  print('enter username:')
43
- user = STDIN.gets.chomp
43
+ user = $stdin.gets.chomp
44
44
  end
45
45
 
46
46
  pass = ctx.config['password'].to_s
47
47
  if pass.empty?
48
48
  print("enter password for #{user}:")
49
- pass = STDIN.noecho(&:gets).chomp
49
+ pass = $stdin.noecho(&:gets).chomp
50
50
  puts
51
51
  end
52
52
  [user, pass]
@@ -7,14 +7,12 @@ module AtCoderFriends
7
7
  def fetch_all
8
8
  puts "***** fetch_all #{contest} *****"
9
9
  fetch_assignments.map do |q, url|
10
- begin
11
- pbm = fetch_problem(q, url)
12
- yield pbm if block_given?
13
- pbm
14
- rescue StandardError => e
15
- puts e.to_s
16
- puts e.backtrace
17
- end
10
+ pbm = fetch_problem(q, url)
11
+ yield pbm if block_given?
12
+ pbm
13
+ rescue StandardError => e
14
+ puts e.to_s
15
+ puts e.backtrace
18
16
  end
19
17
  end
20
18
 
@@ -121,7 +121,7 @@ module AtCoderFriends
121
121
  end
122
122
 
123
123
  def which_os
124
- @which_os ||= begin
124
+ @which_os ||=
125
125
  case RbConfig::CONFIG['host_os']
126
126
  when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
127
127
  :windows
@@ -134,7 +134,6 @@ module AtCoderFriends
134
134
  else
135
135
  :unknown
136
136
  end
137
- end
138
137
  end
139
138
  end
140
139
  end
@@ -16,17 +16,17 @@ module AtCoderFriends
16
16
  puts "***** judge_all #{prg} (#{test_loc}) *****"
17
17
  results = Dir["#{data_dir}/#{q}/in/*"].sort.map do |infile|
18
18
  id = File.basename(infile)
19
- judge(id, false)
19
+ judge(id, detail: false)
20
20
  end
21
21
  !results.empty? && results.all?
22
22
  end
23
23
 
24
24
  def judge_one(id)
25
25
  puts "***** judge_one #{prg} (#{test_loc}) *****"
26
- judge(id, true)
26
+ judge(id, detail: true)
27
27
  end
28
28
 
29
- def judge(id, detail = true)
29
+ def judge(id, detail: true)
30
30
  @detail = detail
31
31
  infile = "#{data_dir}/#{q}/in/#{id}"
32
32
  outfile = "#{result_dir}/#{q}/result/#{id}"
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AtCoderFriends
4
- VERSION = '0.6.8'
4
+ VERSION = '0.6.9'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: at_coder_friends
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.8
4
+ version: 0.6.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - nejiko96
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-05-26 00:00:00.000000000 Z
11
+ date: 2021-12-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
@@ -135,6 +135,9 @@ executables:
135
135
  extensions: []
136
136
  extra_rdoc_files: []
137
137
  files:
138
+ - ".gitattributes"
139
+ - ".github/workflows/codeql-analysis.yml"
140
+ - ".github/workflows/ruby.yml"
138
141
  - ".gitignore"
139
142
  - ".rspec"
140
143
  - ".rubocop.yml"
@@ -197,6 +200,7 @@ metadata:
197
200
  homepage_uri: https://github.com/nejiko96/at_coder_friends
198
201
  source_code_uri: https://github.com/nejiko96/at_coder_friends
199
202
  changelog_uri: https://github.com/nejiko96/at_coder_friends/blob/master/CHANGELOG.md
203
+ rubygems_mfa_required: 'true'
200
204
  post_install_message:
201
205
  rdoc_options: []
202
206
  require_paths:
@@ -212,7 +216,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
212
216
  - !ruby/object:Gem::Version
213
217
  version: '0'
214
218
  requirements: []
215
- rubygems_version: 3.2.18
219
+ rubygems_version: 3.1.6
216
220
  signing_key:
217
221
  specification_version: 4
218
222
  summary: AtCoder support tool