twitter_retry 0.1.0.beta1 → 0.2.2
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 +5 -5
- data/.github/workflows/test.yml +95 -0
- data/CHANGELOG.md +25 -0
- data/Gemfile +10 -0
- data/README.md +13 -2
- data/lib/twitter_retry/config.rb +19 -10
- data/lib/twitter_retry/retryable.rb +23 -6
- data/lib/twitter_retry/version.rb +1 -1
- data/lib/twitter_retry.rb +2 -0
- data/twitter_retry.gemspec +9 -4
- metadata +38 -38
- data/.hound.yml +0 -3
- data/.rubocop.yml +0 -1
- data/.rubocop_standard.yml +0 -196
- data/.travis.yml +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 386fb889b0bf74e88dc135e4612050b703d3ec0ae63de0273394b61d952fd419
|
4
|
+
data.tar.gz: 270a69da6c1df4752c5620fba98354f25cbd3f2727986fa1119fd179894b2326
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2db280505bc8bb91da339f4c1fa1be506f746a4e3966d97d657fffd7b270ff349063d1b39925adc2e416cfba674a6f58844594030aa619cd71b003746e18416b
|
7
|
+
data.tar.gz: 70b473bd211861c596d80366b17222038536383cfc08d7e8b4f36f9a00d336254282aa170d2d2d1249356fbb4e9bac38423f04d1ca22488a3daebf2887f4a938
|
@@ -0,0 +1,95 @@
|
|
1
|
+
name: test
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches:
|
6
|
+
- master
|
7
|
+
pull_request:
|
8
|
+
types:
|
9
|
+
- opened
|
10
|
+
- synchronize
|
11
|
+
- reopened
|
12
|
+
schedule:
|
13
|
+
- cron: "0 10 * * 5" # JST 19:00 (Fri)
|
14
|
+
|
15
|
+
env:
|
16
|
+
CI: "true"
|
17
|
+
|
18
|
+
jobs:
|
19
|
+
test:
|
20
|
+
runs-on: ubuntu-latest
|
21
|
+
|
22
|
+
container: ${{ matrix.ruby }}
|
23
|
+
|
24
|
+
strategy:
|
25
|
+
fail-fast: false
|
26
|
+
|
27
|
+
matrix:
|
28
|
+
ruby:
|
29
|
+
- ruby:2.2
|
30
|
+
- ruby:2.3
|
31
|
+
- ruby:2.4
|
32
|
+
- ruby:2.5
|
33
|
+
- ruby:2.6
|
34
|
+
- ruby:2.7
|
35
|
+
- ruby:3.0
|
36
|
+
- rubylang/ruby:master-nightly-bionic
|
37
|
+
include:
|
38
|
+
- ruby: rubylang/ruby:master-nightly-bionic
|
39
|
+
allow_failures: "true"
|
40
|
+
|
41
|
+
steps:
|
42
|
+
- uses: actions/checkout@v2
|
43
|
+
|
44
|
+
|
45
|
+
- name: Cache vendor/bundle
|
46
|
+
uses: actions/cache@v1
|
47
|
+
id: cache_gem
|
48
|
+
with:
|
49
|
+
path: vendor/bundle
|
50
|
+
key: v1-gem-${{ runner.os }}-${{ matrix.ruby }}-${{ github.sha }}
|
51
|
+
restore-keys: |
|
52
|
+
v1-gem-${{ runner.os }}-${{ matrix.ruby }}-
|
53
|
+
continue-on-error: ${{ matrix.allow_failures == 'true' }}
|
54
|
+
|
55
|
+
- name: bundle update
|
56
|
+
run: |
|
57
|
+
set -xe
|
58
|
+
bundle config path vendor/bundle
|
59
|
+
bundle update --jobs $(nproc) --retry 3
|
60
|
+
continue-on-error: ${{ matrix.allow_failures == 'true' }}
|
61
|
+
|
62
|
+
- name: Run test
|
63
|
+
run: |
|
64
|
+
set -xe
|
65
|
+
bundle exec rspec
|
66
|
+
continue-on-error: ${{ matrix.allow_failures == 'true' }}
|
67
|
+
|
68
|
+
- name: Slack Notification (not success)
|
69
|
+
uses: lazy-actions/slatify@master
|
70
|
+
if: "! success()"
|
71
|
+
continue-on-error: true
|
72
|
+
with:
|
73
|
+
job_name: ${{ format('*build* ({0})', matrix.ruby) }}
|
74
|
+
type: ${{ job.status }}
|
75
|
+
icon_emoji: ":octocat:"
|
76
|
+
url: ${{ secrets.SLACK_WEBHOOK }}
|
77
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
78
|
+
|
79
|
+
notify:
|
80
|
+
needs:
|
81
|
+
- test
|
82
|
+
|
83
|
+
runs-on: ubuntu-latest
|
84
|
+
|
85
|
+
steps:
|
86
|
+
- name: Slack Notification (success)
|
87
|
+
uses: lazy-actions/slatify@master
|
88
|
+
if: always()
|
89
|
+
continue-on-error: true
|
90
|
+
with:
|
91
|
+
job_name: '*build*'
|
92
|
+
type: ${{ job.status }}
|
93
|
+
icon_emoji: ":octocat:"
|
94
|
+
url: ${{ secrets.SLACK_WEBHOOK }}
|
95
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
## Unreleased
|
2
|
+
[full changelog](https://github.com/sue445/twitter_retry/compare/v0.2.2...master)
|
3
|
+
|
4
|
+
## v0.2.2
|
5
|
+
[full changelog](https://github.com/sue445/twitter_retry/compare/v0.2.1...v0.2.2)
|
6
|
+
|
7
|
+
* Enable MFA requirement for gem releasing
|
8
|
+
* https://github.com/sue445/twitter_retry/pull/31
|
9
|
+
|
10
|
+
## v0.2.1
|
11
|
+
[full changelog](https://github.com/sue445/twitter_retry/compare/v0.2.0...v0.2.1)
|
12
|
+
|
13
|
+
* Remove activesupport from dependency
|
14
|
+
* https://github.com/sue445/twitter_retry/pull/30
|
15
|
+
|
16
|
+
## v0.2.0
|
17
|
+
[full changelog](https://github.com/sue445/twitter_retry/compare/v0.1.0...v0.2.0)
|
18
|
+
|
19
|
+
* Support regexp pattern on `retryable_errors?` and `ignorable_errors?`
|
20
|
+
* https://github.com/sue445/twitter_retry/pull/9
|
21
|
+
* Support: check only error class
|
22
|
+
* https://github.com/sue445/twitter_retry/pull/11
|
23
|
+
|
24
|
+
## v0.1.0
|
25
|
+
* first release
|
data/Gemfile
CHANGED
@@ -2,3 +2,13 @@ source "https://rubygems.org"
|
|
2
2
|
|
3
3
|
# Specify your gem's dependencies in twitter_retry.gemspec
|
4
4
|
gemspec
|
5
|
+
|
6
|
+
if Gem::Version.create(RUBY_VERSION) < Gem::Version.create("2.2.2")
|
7
|
+
# NOTE: activesupport 5.x supports only ruby 2.2.2+
|
8
|
+
gem "activesupport", "< 5.0.0"
|
9
|
+
end
|
10
|
+
|
11
|
+
if Gem::Version.create(RUBY_VERSION) < Gem::Version.create("2.5.0")
|
12
|
+
# NOTE: unparser v0.3.0+ requires Ruby 2.5+
|
13
|
+
gem "unparser", "< 0.3.0"
|
14
|
+
end
|
data/README.md
CHANGED
@@ -2,10 +2,13 @@
|
|
2
2
|
|
3
3
|
Twitter api awesome handling with retry
|
4
4
|
|
5
|
-
[](http://badge.fury.io/rb/twitter_retry)
|
6
|
+
[](https://github.com/sue445/twitter_retry/actions?query=workflow%3Atest)
|
6
7
|
[](https://codeclimate.com/github/sue445/twitter_retry)
|
7
8
|
[](https://coveralls.io/github/sue445/twitter_retry?branch=master)
|
8
|
-
|
9
|
+
|
10
|
+
## Requirements
|
11
|
+
* Ruby 2.1+
|
9
12
|
|
10
13
|
## Installation
|
11
14
|
|
@@ -52,9 +55,17 @@ TwitterRetry.configure do |config|
|
|
52
55
|
config.max_retry_count = 3
|
53
56
|
config.retryable_errors << [Twitter::Error, "some error message"]
|
54
57
|
config.ignorable_errors << [Twitter::Error, "some error message"]
|
58
|
+
|
59
|
+
# Check whether error message matched with regexp
|
60
|
+
config.retryable_errors << [Twitter::Error::ServiceUnavailable, /something/]
|
61
|
+
|
62
|
+
# Check whether only error class matches (error message can be anything)
|
63
|
+
config.ignorable_errors << [Twitter::Error::ServiceUnavailable]
|
55
64
|
end
|
56
65
|
```
|
57
66
|
|
67
|
+
See [TwitterRetry::Config](lib/twitter_retry/config.rb)
|
68
|
+
|
58
69
|
## Development
|
59
70
|
|
60
71
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake rspec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/lib/twitter_retry/config.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
1
|
module TwitterRetry
|
2
|
-
require "active_support/configurable"
|
3
|
-
|
4
2
|
DEFAULT_RETRYABLE_ERRORS = [
|
5
3
|
[Twitter::Error::ServiceUnavailable, "Over capacity"],
|
6
4
|
[Twitter::Error::InternalServerError, "Internal error"],
|
@@ -14,16 +12,27 @@ module TwitterRetry
|
|
14
12
|
]
|
15
13
|
|
16
14
|
class Config
|
17
|
-
|
15
|
+
# @!attribute max_retry_count
|
16
|
+
# @return [Integer]
|
17
|
+
attr_accessor :max_retry_count
|
18
|
+
|
19
|
+
# @!attribute sleep_second
|
20
|
+
# @return [Integer]
|
21
|
+
attr_accessor :sleep_second
|
22
|
+
|
23
|
+
# @!attribute retryable_errors
|
24
|
+
# @return [Array<String>]
|
25
|
+
attr_accessor :retryable_errors
|
18
26
|
|
19
|
-
|
20
|
-
|
27
|
+
# @!attribute ignorable_errors
|
28
|
+
# @return [Array<String>]
|
29
|
+
attr_accessor :ignorable_errors
|
21
30
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
31
|
+
def initialize
|
32
|
+
@max_retry_count = 3
|
33
|
+
@sleep_second = 1
|
34
|
+
@retryable_errors = DEFAULT_RETRYABLE_ERRORS
|
35
|
+
@ignorable_errors = DEFAULT_IGNORABLE_ERRORS
|
27
36
|
end
|
28
37
|
end
|
29
38
|
end
|
@@ -30,17 +30,13 @@ module TwitterRetry
|
|
30
30
|
# whether retryable error
|
31
31
|
# @param error [Exception]
|
32
32
|
def retryable?(error)
|
33
|
-
TwitterRetry.config.retryable_errors
|
34
|
-
error.is_a?(error_class) && error.message.include?(message)
|
35
|
-
end
|
33
|
+
match_any_error?(error, TwitterRetry.config.retryable_errors)
|
36
34
|
end
|
37
35
|
|
38
36
|
# whether ignorable error
|
39
37
|
# @param error [Exception]
|
40
38
|
def ignorable?(error)
|
41
|
-
TwitterRetry.config.ignorable_errors
|
42
|
-
error.is_a?(error_class) && error.message.include?(message)
|
43
|
-
end
|
39
|
+
match_any_error?(error, TwitterRetry.config.ignorable_errors)
|
44
40
|
end
|
45
41
|
|
46
42
|
# whether suspended user error
|
@@ -48,5 +44,26 @@ module TwitterRetry
|
|
48
44
|
error.is_a?(Twitter::Error::Forbidden) &&
|
49
45
|
error.message.include?("Your account is suspended and is not permitted to access this feature.")
|
50
46
|
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def match_any_error?(source_error, check_errors)
|
51
|
+
check_errors.any? do |error_class, message|
|
52
|
+
match_error?(source_error, error_class, message)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def match_error?(source_error, error_class, message)
|
57
|
+
return false unless source_error.is_a?(error_class)
|
58
|
+
|
59
|
+
# Check only error class
|
60
|
+
return true unless message
|
61
|
+
|
62
|
+
if message.is_a?(Regexp)
|
63
|
+
source_error.message =~ message
|
64
|
+
else
|
65
|
+
source_error.message.include?(message)
|
66
|
+
end
|
67
|
+
end
|
51
68
|
end
|
52
69
|
end
|
data/lib/twitter_retry.rb
CHANGED
@@ -6,10 +6,12 @@ require "twitter_retry/retryable"
|
|
6
6
|
module TwitterRetry
|
7
7
|
extend Retryable
|
8
8
|
|
9
|
+
# @return [TwitterRetry::Config]
|
9
10
|
def self.config
|
10
11
|
@config ||= Config.new
|
11
12
|
end
|
12
13
|
|
14
|
+
# @yieldparam [TwitterRetry::Config]
|
13
15
|
def self.configure
|
14
16
|
yield config if block_given?
|
15
17
|
end
|
data/twitter_retry.gemspec
CHANGED
@@ -14,19 +14,24 @@ Gem::Specification.new do |spec|
|
|
14
14
|
spec.homepage = "https://github.com/sue445/twitter_retry"
|
15
15
|
spec.license = "MIT"
|
16
16
|
|
17
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
18
|
+
spec.metadata["source_code_uri"] = spec.homepage
|
19
|
+
spec.metadata["changelog_uri"] = "#{spec.homepage}/blob/master/CHANGELOG.md"
|
20
|
+
spec.metadata["rubygems_mfa_required"] = "true"
|
21
|
+
|
17
22
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
23
|
spec.bindir = "exe"
|
19
24
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
25
|
spec.require_paths = ["lib"]
|
21
26
|
|
22
|
-
spec.add_dependency "activesupport"
|
23
27
|
spec.add_dependency "twitter"
|
24
28
|
|
25
|
-
spec.add_development_dependency "bundler", "
|
29
|
+
spec.add_development_dependency "bundler", ">= 1.10"
|
26
30
|
spec.add_development_dependency "coveralls"
|
27
|
-
spec.add_development_dependency "rake", "
|
31
|
+
spec.add_development_dependency "rake", ">= 10.0"
|
28
32
|
spec.add_development_dependency "rspec"
|
33
|
+
spec.add_development_dependency "rspec-its"
|
29
34
|
spec.add_development_dependency "rspec-parameterized"
|
30
|
-
spec.add_development_dependency "
|
35
|
+
spec.add_development_dependency "unparser", ">= 0.4.5"
|
31
36
|
spec.add_development_dependency "yard"
|
32
37
|
end
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: twitter_retry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- sue445
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-11-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: activesupport
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: twitter
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -42,14 +28,14 @@ dependencies:
|
|
42
28
|
name: bundler
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
44
30
|
requirements:
|
45
|
-
- - "
|
31
|
+
- - ">="
|
46
32
|
- !ruby/object:Gem::Version
|
47
33
|
version: '1.10'
|
48
34
|
type: :development
|
49
35
|
prerelease: false
|
50
36
|
version_requirements: !ruby/object:Gem::Requirement
|
51
37
|
requirements:
|
52
|
-
- - "
|
38
|
+
- - ">="
|
53
39
|
- !ruby/object:Gem::Version
|
54
40
|
version: '1.10'
|
55
41
|
- !ruby/object:Gem::Dependency
|
@@ -70,14 +56,14 @@ dependencies:
|
|
70
56
|
name: rake
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
72
58
|
requirements:
|
73
|
-
- - "
|
59
|
+
- - ">="
|
74
60
|
- !ruby/object:Gem::Version
|
75
61
|
version: '10.0'
|
76
62
|
type: :development
|
77
63
|
prerelease: false
|
78
64
|
version_requirements: !ruby/object:Gem::Requirement
|
79
65
|
requirements:
|
80
|
-
- - "
|
66
|
+
- - ">="
|
81
67
|
- !ruby/object:Gem::Version
|
82
68
|
version: '10.0'
|
83
69
|
- !ruby/object:Gem::Dependency
|
@@ -94,6 +80,20 @@ dependencies:
|
|
94
80
|
- - ">="
|
95
81
|
- !ruby/object:Gem::Version
|
96
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec-its
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rspec-parameterized
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -109,19 +109,19 @@ dependencies:
|
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
112
|
+
name: unparser
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 0.
|
117
|
+
version: 0.4.5
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: 0.
|
124
|
+
version: 0.4.5
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: yard
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -144,13 +144,11 @@ extensions: []
|
|
144
144
|
extra_rdoc_files: []
|
145
145
|
files:
|
146
146
|
- ".coveralls.yml"
|
147
|
+
- ".github/workflows/test.yml"
|
147
148
|
- ".gitignore"
|
148
|
-
- ".hound.yml"
|
149
149
|
- ".rspec"
|
150
|
-
- ".rubocop.yml"
|
151
|
-
- ".rubocop_standard.yml"
|
152
|
-
- ".travis.yml"
|
153
150
|
- ".yardopts"
|
151
|
+
- CHANGELOG.md
|
154
152
|
- Gemfile
|
155
153
|
- LICENSE.txt
|
156
154
|
- README.md
|
@@ -165,8 +163,12 @@ files:
|
|
165
163
|
homepage: https://github.com/sue445/twitter_retry
|
166
164
|
licenses:
|
167
165
|
- MIT
|
168
|
-
metadata:
|
169
|
-
|
166
|
+
metadata:
|
167
|
+
homepage_uri: https://github.com/sue445/twitter_retry
|
168
|
+
source_code_uri: https://github.com/sue445/twitter_retry
|
169
|
+
changelog_uri: https://github.com/sue445/twitter_retry/blob/master/CHANGELOG.md
|
170
|
+
rubygems_mfa_required: 'true'
|
171
|
+
post_install_message:
|
170
172
|
rdoc_options: []
|
171
173
|
require_paths:
|
172
174
|
- lib
|
@@ -177,14 +179,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
177
179
|
version: '0'
|
178
180
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
179
181
|
requirements:
|
180
|
-
- - "
|
182
|
+
- - ">="
|
181
183
|
- !ruby/object:Gem::Version
|
182
|
-
version:
|
184
|
+
version: '0'
|
183
185
|
requirements: []
|
184
|
-
|
185
|
-
|
186
|
-
signing_key:
|
186
|
+
rubygems_version: 3.2.22
|
187
|
+
signing_key:
|
187
188
|
specification_version: 4
|
188
189
|
summary: Twitter api awesome handling with retry
|
189
190
|
test_files: []
|
190
|
-
has_rdoc:
|
data/.hound.yml
DELETED
data/.rubocop.yml
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
inherit_from: .rubocop_standard.yml
|
data/.rubocop_standard.yml
DELETED
@@ -1,196 +0,0 @@
|
|
1
|
-
# via. https://gist.github.com/onk/38bfbd78899d892e0e83
|
2
|
-
|
3
|
-
# target_version:
|
4
|
-
# rubocop v0.31.0
|
5
|
-
|
6
|
-
# 自動生成されるものはチェック対象から除外する
|
7
|
-
AllCops:
|
8
|
-
Exclude:
|
9
|
-
- "vendor/**/*" # rubocop config/default.yml
|
10
|
-
- "db/schema.rb"
|
11
|
-
DisplayCopNames: true
|
12
|
-
|
13
|
-
##################### Style ##################################
|
14
|
-
|
15
|
-
# redirect_to xxx and return のイディオムを維持したい
|
16
|
-
Style/AndOr:
|
17
|
-
EnforcedStyle: conditionals
|
18
|
-
|
19
|
-
# 日本語のコメントを許可する
|
20
|
-
Style/AsciiComments:
|
21
|
-
Enabled: false
|
22
|
-
|
23
|
-
# option 等、明示的にハッシュにした方が分かりやすい場合もある
|
24
|
-
Style/BracesAroundHashParameters:
|
25
|
-
Enabled: false
|
26
|
-
|
27
|
-
# Style/CollectionMethods 自体は無効になっているのだが、
|
28
|
-
# https://github.com/bbatsov/rubocop/issues/1084
|
29
|
-
# https://github.com/bbatsov/rubocop/issues/1334
|
30
|
-
# Performance/Detect がこの設定値を見るので PreferredMethods だけ変更しておく。
|
31
|
-
#
|
32
|
-
# デフォルト値から変えたのは
|
33
|
-
# find -> detect
|
34
|
-
# ActiveRecord の find と間違えやすいため
|
35
|
-
# reduce -> inject
|
36
|
-
# detect, reject, select と並べたときに韻を踏んでいるため。
|
37
|
-
# collect -> map を維持しているのは文字数が圧倒的に少ないため。
|
38
|
-
Style/CollectionMethods:
|
39
|
-
PreferredMethods:
|
40
|
-
detect: "detect"
|
41
|
-
find: "detect"
|
42
|
-
inject: "inject"
|
43
|
-
reduce: "inject"
|
44
|
-
|
45
|
-
# Hash#has_key? は許可したい
|
46
|
-
Style/DeprecatedHashMethods:
|
47
|
-
Enabled: false
|
48
|
-
|
49
|
-
# ドキュメントの無い public class を許可する
|
50
|
-
Style/Documentation:
|
51
|
-
Enabled: false
|
52
|
-
|
53
|
-
# !! のイディオムは積極的に使う
|
54
|
-
Style/DoubleNegation:
|
55
|
-
Enabled: false
|
56
|
-
|
57
|
-
# メソッドチェーンの改行は末尾に . を入れる
|
58
|
-
# REPL に貼り付けた際の暴発を防ぐため
|
59
|
-
Style/DotPosition:
|
60
|
-
EnforcedStyle: trailing
|
61
|
-
|
62
|
-
# 明示的に else で nil を返すのは分かりやすいので許可する
|
63
|
-
Style/EmptyElse:
|
64
|
-
EnforcedStyle: empty
|
65
|
-
|
66
|
-
# いずれかに揃えるのならば `sprintf` や `format` より String#% が好きです
|
67
|
-
Style/FormatString:
|
68
|
-
EnforcedStyle: percent
|
69
|
-
|
70
|
-
# if 文の中に 3 行程度のブロックを書くぐらいは許容した方が現実的
|
71
|
-
Style/GuardClause:
|
72
|
-
MinBodyLength: 5
|
73
|
-
|
74
|
-
# 同じ hash 内で記法を混ぜない
|
75
|
-
# rake タスクの順序の hash は rocket を許可する
|
76
|
-
Style/HashSyntax:
|
77
|
-
EnforcedStyle: ruby19_no_mixed_keys
|
78
|
-
Exclude:
|
79
|
-
- "**/*.rake"
|
80
|
-
- "Rakefile"
|
81
|
-
|
82
|
-
# 条件式の方を意識させたい場合には後置の if/unless を使わない方が分かりやすい
|
83
|
-
Style/IfUnlessModifier:
|
84
|
-
Enabled: false
|
85
|
-
|
86
|
-
# ({ と hash を開始した場合に ( の位置にインデントさせる
|
87
|
-
# そもそも {} が必要ない可能性が高いが Style/BracesAroundHashParameters はチェックしないことにしたので
|
88
|
-
Style/IndentHash:
|
89
|
-
EnforcedStyle: consistent
|
90
|
-
|
91
|
-
# private/protected は一段深くインデントする
|
92
|
-
Style/IndentationConsistency:
|
93
|
-
EnforcedStyle: rails
|
94
|
-
|
95
|
-
# scope 等は複数行でも lambda ではなく ->{} で揃えた方が見た目が綺麗
|
96
|
-
Style/Lambda:
|
97
|
-
Enabled: false
|
98
|
-
|
99
|
-
# 1_000_000 と区切り文字が 2 個以上必要になる場合のみ _ 区切りを必須にする
|
100
|
-
Style/NumericLiterals:
|
101
|
-
MinDigits: 7
|
102
|
-
|
103
|
-
# has_ から始まるメソッドは許可する
|
104
|
-
Style/PredicateName:
|
105
|
-
NamePrefixBlacklist:
|
106
|
-
- "is_"
|
107
|
-
- "have_"
|
108
|
-
NamePrefix:
|
109
|
-
- "is_"
|
110
|
-
- "have_"
|
111
|
-
|
112
|
-
# 特に model 内において、ローカル変数とメソッド呼び出しの区別をつけた方が分かりやすい場合が多い
|
113
|
-
Style/RedundantSelf:
|
114
|
-
Enabled: false
|
115
|
-
|
116
|
-
# 受け取り側で multiple assignment しろというのを明示
|
117
|
-
Style/RedundantReturn:
|
118
|
-
AllowMultipleReturnValues: true
|
119
|
-
|
120
|
-
# fail と使い分ける必要ナシ
|
121
|
-
Style/SignalException:
|
122
|
-
EnforcedStyle: only_raise
|
123
|
-
|
124
|
-
# `||` も align に使うことがあるので追加する
|
125
|
-
Style/SpaceAroundOperators:
|
126
|
-
MultiSpaceAllowedForOperators:
|
127
|
-
- "="
|
128
|
-
- "=>"
|
129
|
-
- "||"
|
130
|
-
|
131
|
-
# * 式展開したい場合に書き換えるのが面倒
|
132
|
-
# * 文章ではダブルクォートよりもシングルクォートの方が頻出する
|
133
|
-
# ことから EnforcedStyle: double_quotes 推奨
|
134
|
-
Style/StringLiterals:
|
135
|
-
EnforcedStyle: double_quotes
|
136
|
-
|
137
|
-
# auto-correct 時に Style/StringLiterals とカニバって無限ループになる (v0.28.0)
|
138
|
-
Style/StringLiteralsInInterpolation:
|
139
|
-
Enabled: false
|
140
|
-
|
141
|
-
# いくらなんでも inject { |a, e| } は短すぎるので分かりやすい名前をつけたい
|
142
|
-
Style/SingleLineBlockParams:
|
143
|
-
Enabled: false
|
144
|
-
|
145
|
-
# * migrate
|
146
|
-
# * jbuilder
|
147
|
-
# * model の association
|
148
|
-
# * controller の callback
|
149
|
-
# 辺りの桁揃えで引っかかるので全体的にチェックしない
|
150
|
-
Style/SingleSpaceBeforeFirstArg:
|
151
|
-
Enabled: false
|
152
|
-
|
153
|
-
# 複数行の場合はケツカンマを入れる
|
154
|
-
Style/TrailingComma:
|
155
|
-
EnforcedStyleForMultiline: comma
|
156
|
-
|
157
|
-
##################### Lint ##################################
|
158
|
-
|
159
|
-
# * 同名のメソッドがある場合にローカル変数に `_` を付ける
|
160
|
-
# * 一時変数として `_` を付ける
|
161
|
-
# というテクニックは頻出する
|
162
|
-
Lint/UnderscorePrefixedVariableName:
|
163
|
-
Enabled: false
|
164
|
-
|
165
|
-
# 子クラスで実装させるつもりのメソッドで引っかかるので
|
166
|
-
Lint/UnusedMethodArgument:
|
167
|
-
Enabled: false
|
168
|
-
|
169
|
-
##################### Metrics ##################################
|
170
|
-
|
171
|
-
# 30 まではギリギリ許せる範囲だった
|
172
|
-
Metrics/AbcSize:
|
173
|
-
Max: 30
|
174
|
-
|
175
|
-
# 6 は強すぎるので緩める
|
176
|
-
Metrics/CyclomaticComplexity:
|
177
|
-
Max: 10
|
178
|
-
|
179
|
-
# * 警告 120文字
|
180
|
-
# * 禁止 160文字
|
181
|
-
# のイメージ
|
182
|
-
Metrics/LineLength:
|
183
|
-
Max: 160
|
184
|
-
Exclude:
|
185
|
-
- "db/migrate/*.rb"
|
186
|
-
|
187
|
-
# 20 行超えるのは migration ファイル以外滅多に無い
|
188
|
-
Metrics/MethodLength:
|
189
|
-
Max: 20
|
190
|
-
Exclude:
|
191
|
-
- "db/migrate/*.rb"
|
192
|
-
|
193
|
-
# 分岐の数。ガード句を多用しているとデフォルト 7 だと厳しい
|
194
|
-
Metrics/PerceivedComplexity:
|
195
|
-
Max: 8
|
196
|
-
|
data/.travis.yml
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
rvm:
|
3
|
-
- 2.1
|
4
|
-
- 2.2
|
5
|
-
- ruby-head
|
6
|
-
before_install: gem install bundler -v 1.10.5
|
7
|
-
before_script:
|
8
|
-
- export CI=true
|
9
|
-
script: bundle exec rspec
|
10
|
-
branches:
|
11
|
-
only:
|
12
|
-
- master
|
13
|
-
notifications:
|
14
|
-
slack:
|
15
|
-
secure: auD2UNPVzPfJ9jKMQ89sK6aXYv5ekXSsuuqn8aiZ2+w96lb/B/lRVzOPgzmDe1/qIvYevYO3AcfgG373ARV0Ft/SEzlwiIOAhu47nyprM641AFiGQovCNe+vpWo6k3YD+J+WNG8NiD+6vDfmkmBSnE6/+VL5HUiVtW8FeFQ0lRBgcu789MWyXkZVtzvWvMTlPk3N94JgARUcT4F2bukTu1Ff95D4fZfnArJLfpv9uzxuCYUB9Ut33OdXb8k9xG+0OJeosV7oTYLKY3I+oK8mkweIzzy9flhpmLw6xCzARX2zQcsoEXeiDoUVKmldTLApBQMF96xCG6yxn1SaapsqKovVbudBuafjhpJklb1zG21UmYuNr7SmZqrLYcBb2sMLD41wyeBfJ/mO7SNWZlwJAvMrL5O538qpMfvbT3EQWGWdWnhYR79nKO5zLDqgUeJC847/QiS43MvnPlwObpO68bXdRq+C4Z6DfL96tjGfFprijKHJtZqG1kFHMELrDx6lzUi03Kt5FaHV2czz/5B7oqPsXvTWWa0yaLopxuSZqcD2zrSaso8bNFFqkt2X4CKTx2Jqq4IuGrrzqqr1NMSX2tbT06tJAKYCUQfa5mJqs2uRtzYR3jivukb+EwNOCFThrRBi69AYa2XAKjzCJ7DoFn3uQvXlmCu/3bbPQTs0LT4=
|
16
|
-
matrix:
|
17
|
-
allow_failures:
|
18
|
-
- rvm: ruby-head
|
19
|
-
sudo: false
|
20
|
-
cache: bundler
|