diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..82b9e32 --- /dev/null +++ b/.envrc @@ -0,0 +1,10 @@ +### External Testing Controls +export K_SOUP_COV_DO=true # Means you want code coverage +export K_SOUP_COV_MIN_BRANCH=71 # Means you want to enforce X% branch coverage +export K_SOUP_COV_MIN_LINE=89 # Means you want to enforce X% line coverage +export K_SOUP_COV_MIN_HARD=true # Means you want the build to fail if the coverage thresholds are not met +# Available formats are html, xml, rcov, lcov, json, tty +export K_SOUP_COV_MULTI_FORMATTERS="html,tty" # What coverage output formats do you want? +export MAX_ROWS=5 # Setting for simplecov-console gem for tty output, limits to the worst N rows of bad coverage +export K_SOUP_COV_COMMAND_NAME="MiniTest Coverage" +export DEBUG=true # allow byebug statements diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 8f50dd2..ab688fb 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -4,6 +4,8 @@ env: K_SOUP_COV_MIN_BRANCH: 71 K_SOUP_COV_MIN_LINE: 89 K_SOUP_COV_MIN_HARD: true + K_SOUP_COV_DO: true + K_SOUP_COV_COMMAND_NAME: "MiniTest Coverage" on: push: @@ -45,12 +47,6 @@ jobs: - '3.1' steps: - - name: CodeClimate Install - uses: amancevice/setup-code-climate@v2 - if: ${{ github.event_name != 'pull_request' }} - with: - cc_test_reporter_id: "${{ secrets.CC_TEST_REPORTER_ID }}" - - name: Checkout uses: actions/checkout@v4 @@ -62,19 +58,9 @@ jobs: bundler: "${{ matrix.bundler }}" bundler-cache: true # runs 'bundle install' and caches installed gems automatically - - name: CodeClimate Pre-build Notification - run: cc-test-reporter before-build - if: ${{ github.event_name != 'pull_request' }} - continue-on-error: ${{ matrix.experimental != 'false' }} - - name: Run tests run: bundle exec rake test - - name: CodeClimate Post-build Notification - run: cc-test-reporter after-build - if: ${{ github.event_name != 'pull_request' }} - continue-on-error: ${{ matrix.experimental != 'false' }} - - name: Code Coverage Summary Report uses: irongut/CodeCoverageSummary@v1.3.0 if: ${{ github.event_name == 'pull_request' }} @@ -97,15 +83,3 @@ jobs: recreate: true path: code-coverage-results.md continue-on-error: ${{ matrix.experimental != 'false' }} - - - name: Coveralls - uses: coverallsapp/github-action@master - with: - github-token: "${{ secrets.GITHUB_TOKEN }}" - continue-on-error: ${{ matrix.experimental != 'false' }} - - - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@v4.5.0 - with: - token: ${{ secrets.CODECOV_TOKEN }} - slug: pboling/sanitize_email diff --git a/.github/workflows/heads.yml b/.github/workflows/heads.yml index f9f3f72..de2d274 100644 --- a/.github/workflows/heads.yml +++ b/.github/workflows/heads.yml @@ -31,6 +31,7 @@ jobs: env: # $BUNDLE_GEMFILE must be set at the job level, so it is set for all steps BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/${{ matrix.gemfile }}.gemfile runs-on: ubuntu-latest + continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }} strategy: fail-fast: true matrix: diff --git a/.github/workflows/unsupported.yml b/.github/workflows/unsupported.yml index 5b7a95f..8d53dd7 100644 --- a/.github/workflows/unsupported.yml +++ b/.github/workflows/unsupported.yml @@ -1,5 +1,8 @@ name: Unsupported (EOL) Ruby Matrix +env: + K_SOUP_COV_DO: false + on: push: branches: diff --git a/.rubocop_gradual.lock b/.rubocop_gradual.lock index 7184c5c..290363b 100644 --- a/.rubocop_gradual.lock +++ b/.rubocop_gradual.lock @@ -17,13 +17,8 @@ [14, 8, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340920], [17, 8, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340392] ], - "bin/bundle:498800082": [ - [33, 24, 58, "Performance/ConstantRegexp: Extract this regexp into a constant, memoize it, or append an `/o` option to its options.", 2287896868], - [59, 40, 62, "Performance/ConstantRegexp: Extract this regexp into a constant, memoize it, or append an `/o` option to its options.", 2593609308], - [64, 5, 20, "ThreadSafety/InstanceVariableInClassMethod: Avoid instance variables in class methods.", 2485198147], - [86, 7, 34, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 991972134], - [93, 5, 194, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1374511802], - [94, 5, 7, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 285434243] + "bin/bundle:4028066867": [ + [64, 5, 20, "ThreadSafety/InstanceVariableInClassMethod: Avoid instance variables in class methods.", 2485198147] ], "examples/active_record_openid_store/XXX_add_open_id_store_to_db.rb:734915733": [ [3, 3, 577, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 1097702499], @@ -457,73 +452,15 @@ [19, 9, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3337961901], [20, 9, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1480177078] ], - "lib/openid/association.rb:735520189": [ - [1, 9, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1508131736], - [2, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2569813655], - [3, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3933002043], - [4, 9, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2920398136], - [7, 3, 221, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 130585597], - [8, 22, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [10, 25, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2821943524], - [26, 5, 757, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 2995744313], - [30, 30, 45, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3650089341], - [30, 75, 1, "Layout/LineContinuationSpacing: Use one space in front of backslash.", 177657], - [31, 9, 66, "Layout/LineEndStringConcatenationIndentation: Indent the first part of a string concatenated with backslash.", 3688940998], - [31, 10, 1, "Layout/LineContinuationLeadingSpace: Move leading spaces to the end of previous line.", 177541], - [35, 21, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340375], - [36, 30, 47, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4103011818], - [36, 77, 1, "Layout/LineContinuationSpacing: Use one space in front of backslash.", 177657], - [37, 30, 27, "Layout/LineEndStringConcatenationIndentation: Indent the first part of a string concatenated with backslash.", 2181066025], - [40, 11, 6, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1585570767], - [41, 11, 26, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2563438500], - [42, 11, 22, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2666857624], - [43, 11, 15, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3196629657], - [44, 11, 10, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 874512463], - [48, 5, 154, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 1890157839], - [65, 18, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340375], - [70, 9, 22, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 856842207], - [82, 7, 8, "Layout/IndentationWidth: Use 2 (not 8) spaces for indentation.", 121035013], - [83, 13, 4, "Layout/ElseAlignment: Align `else` with `now`.", 2087423834], - [85, 13, 3, "Layout/EndAlignment: `end` at 85, 12 is not aligned with `now = if` at 81, 6.", 193405706], - [96, 12, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [98, 12, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2821943524], - [101, 30, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3892836044], - [101, 62, 1, "Layout/LineContinuationSpacing: Use one space in front of backslash.", 177657], - [109, 43, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3666757975], - [110, 28, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1582904561], - [112, 36, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340297], - [114, 54, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2149044978], - [114, 73, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [119, 48, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92008088], - [147, 38, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92008088], - [147, 45, 2, "Style/AndOr: Use `||` instead of `or`.", 5861240], - [148, 10, 37, "Layout/MultilineOperationIndentation: Use 4 (not 3) spaces for indenting a condition in an `if` statement spanning multiple lines.", 4138849417], - [148, 38, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3666757975], - [149, 30, 46, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3734290715], - [152, 50, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [153, 28, 44, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3747808803], - [153, 90, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [156, 41, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [161, 50, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2149044978], - [164, 22, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3666757975], - [167, 41, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3666757975], - [167, 68, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340297], - [169, 41, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92008088], - [177, 5, 285, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 3235921710], - [179, 12, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [181, 12, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2821943524], - [188, 5, 281, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 263588636], - [191, 71, 1, "Layout/LineContinuationSpacing: Use one space in front of backslash.", 177657], - [192, 28, 50, "Layout/LineEndStringConcatenationIndentation: Indent the first part of a string concatenated with backslash.", 3940346270], - [217, 7, 99, "Style/For: Prefer `each` over `for`.", 781032692], - [232, 32, 21, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 1599267866], - [233, 32, 27, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2985348595], - [234, 32, 25, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 3102852378], - [235, 32, 29, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 3275427155], - [235, 32, 29, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 3275427155], - [238, 32, 21, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 1599267866], - [239, 32, 25, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 3102852378], - [239, 32, 25, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 3102852378] + "lib/openid/association.rb:3104865684": [ + [7, 3, 221, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 1899862968], + [26, 5, 751, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 3266308441], + [50, 5, 154, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 1890157839], + [149, 45, 2, "Style/AndOr: Use `||` instead of `or`.", 5861240], + [155, 90, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [179, 5, 285, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 796176558], + [190, 5, 263, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 263588636], + [219, 7, 99, "Style/For: Prefer `each` over `for`.", 781032692] ], "lib/openid/consumer.rb:16799660": [ [1, 9, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1493934251], @@ -1374,503 +1311,82 @@ [51, 3, 302, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 2138086473], [54, 5, 93, "Lint/RescueException: Avoid rescuing the `Exception` class. Perhaps you meant to rescue `StandardError`?", 2065347935] ], - "lib/openid/message.rb:4102770874": [ - [1, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2569813655], - [2, 9, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1508131736], - [5, 23, 52, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2891208136], - [9, 14, 28, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3482333731], - [12, 16, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 494421042], - [13, 17, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 494420947], - [17, 16, 34, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1670302195], - [37, 8, 4, "Layout/MultilineArrayLineBreaks: Each item in a multi-line array must start on a separate line.", 2087698470], - [37, 13, 5, "Layout/MultilineArrayLineBreaks: Each item in a multi-line array must start on a separate line.", 165548477], - [37, 19, 9, "Layout/MultilineArrayLineBreaks: Each item in a multi-line array must start on a separate line.", 1228896939], - [38, 13, 9, "Layout/MultilineArrayLineBreaks: Each item in a multi-line array must start on a separate line.", 798169870], - [38, 23, 6, "Layout/MultilineArrayLineBreaks: Each item in a multi-line array must start on a separate line.", 2172846391], - [39, 16, 12, "Layout/MultilineArrayLineBreaks: Each item in a multi-line array must start on a separate line.", 3549528604], - [40, 16, 6, "Layout/MultilineArrayLineBreaks: Each item in a multi-line array must start on a separate line.", 1126279802], - [41, 24, 10, "Layout/MultilineArrayLineBreaks: Each item in a multi-line array must start on a separate line.", 2517626812], - [42, 14, 5, "Layout/MultilineArrayLineBreaks: Each item in a multi-line array must start on a separate line.", 194523634], - [42, 20, 17, "Layout/MultilineArrayLineBreaks: Each item in a multi-line array must start on a separate line.", 820088305], - [43, 17, 14, "Layout/MultilineArrayLineBreaks: Each item in a multi-line array must start on a separate line.", 1615061360], - [43, 32, 3, "Layout/MultilineArrayLineBreaks: Each item in a multi-line array must start on a separate line.", 193433784], - [44, 18, 10, "Layout/MultilineArrayLineBreaks: Each item in a multi-line array must start on a separate line.", 3672542120], - [44, 29, 6, "Layout/MultilineArrayLineBreaks: Each item in a multi-line array must start on a separate line.", 1714235388], - [53, 36, 9, "Lint/InheritException: Inherit from `RuntimeError` instead of `Exception`.", 3513723378], - [56, 43, 9, "Lint/InheritException: Inherit from `RuntimeError` instead of `Exception`.", 3513723378], - [60, 34, 9, "Lint/InheritException: Inherit from `RuntimeError` instead of `Exception`.", 3513723378], - [77, 5, 518, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 196384904], - [80, 10, 51, "Performance/InefficientHashSearch: Use `#value?` instead of `#values.include?`.", 3072957018], - [82, 15, 51, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 929725521], - [87, 15, 36, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1335562897], - [101, 20, 43, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1632211398], - [111, 5, 563, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 2888237997], - [116, 32, 47, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2388501200], - [116, 80, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], - [117, 32, 48, "Layout/MultilineOperationIndentation: Use 2 (not 21) spaces for indenting an expression spanning multiple lines.", 2109521780], - [120, 34, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340235], - [122, 22, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3058584636], - [122, 31, 2, "Style/AndOr: Use `||` instead of `or`.", 5861240], - [136, 5, 115, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 3449424395], - [149, 39, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340235], - [155, 24, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [157, 42, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [157, 56, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [211, 5, 106, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 3270016872], - [228, 9, 11, "Layout/IndentationWidth: Use 2 (not 11) spaces for indentation.", 3128322693], - [228, 20, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [229, 18, 4, "Layout/ElseAlignment: Align `else` with `ns_key`.", 2087423834], - [230, 20, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2420531233], - [231, 18, 3, "Layout/EndAlignment: `end` at 231, 17 is not aligned with `ns_key = if` at 227, 8.", 193405706], - [250, 27, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2149044978], - [252, 17, 112, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2329669508], - [262, 72, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2595197252], - [265, 7, 124, "Style/SafeNavigation: Use safe navigation (`&.`) instead of checking if an object exists before calling the method.", 980989257], - [271, 25, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2956022523], - [272, 25, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1346626202], - [272, 37, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3035277469], - [273, 25, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 635587538], - [273, 45, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 326052951], - [274, 25, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2014057493], - [274, 38, 35, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1436832301], - [276, 16, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1943456495], - [314, 41, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3416983464], - [323, 30, 42, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2865054466], - [323, 72, 1, "Layout/LineContinuationSpacing: Use one space in front of backslash.", 177657], - [324, 31, 36, "Layout/LineEndStringConcatenationIndentation: Indent the first part of a string concatenated with backslash.", 3722534173], - [327, 26, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340639], - [328, 15, 51, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1401258014], - [328, 66, 1, "Layout/LineContinuationSpacing: Use one space in front of backslash.", 177657], - [329, 16, 26, "Layout/LineEndStringConcatenationIndentation: Indent the first part of a string concatenated with backslash.", 1806639495], - [332, 25, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3035579718], - [355, 7, 10, "Style/ReturnNil: Use `return` instead of `return nil`.", 1900003172], - [358, 7, 9, "Layout/IndentationWidth: Use 2 (not 9) spaces for indentation.", 3994155397], - [359, 14, 4, "Layout/ElseAlignment: Align `else` with `tail`.", 2087423834], - [361, 14, 3, "Layout/EndAlignment: `end` at 361, 13 is not aligned with `tail = if` at 357, 6.", 193405706], - [363, 7, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2149044978], - [403, 7, 4, "Lint/UnderscorePrefixedVariableName: Do not use prefix `_` for a variable that is used.", 2089550317], - [412, 53, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [414, 41, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340235], - [415, 22, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [417, 59, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [419, 72, 1, "Layout/LineContinuationSpacing: Use one space in front of backslash.", 177657], - [420, 28, 20, "Layout/LineEndStringConcatenationIndentation: Indent the first part of a string concatenated with backslash.", 4157070020], - [460, 19, 47, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 4136001751], - [461, 19, 52, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2076082156], - [466, 32, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [468, 15, 125, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2845360073], - [474, 21, 29, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1018314689], - [474, 41, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340235], - [475, 21, 41, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1589210437], - [480, 7, 6, "Lint/UnderscorePrefixedVariableName: Do not use prefix `_` for a variable that is used.", 3498751916], - [481, 17, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [483, 15, 96, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2447880605], - [496, 7, 6, "Lint/UnderscorePrefixedVariableName: Do not use prefix `_` for a variable that is used.", 3498751916], - [501, 7, 5, "Style/InfiniteLoop: Use `Kernel#loop` for infinite loops.", 191284826], - [502, 18, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91803692], - [512, 28, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3427456841] + "lib/openid/message.rb:103394192": [ + [67, 36, 9, "Lint/InheritException: Inherit from `RuntimeError` instead of `Exception`.", 3513723378], + [70, 43, 9, "Lint/InheritException: Inherit from `RuntimeError` instead of `Exception`.", 3513723378], + [74, 34, 9, "Lint/InheritException: Inherit from `RuntimeError` instead of `Exception`.", 3513723378], + [91, 5, 510, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 1643574646], + [94, 10, 51, "Performance/InefficientHashSearch: Use `#value?` instead of `#values.include?`.", 3072957018], + [125, 5, 544, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 1616740397], + [130, 80, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], + [136, 31, 2, "Style/AndOr: Use `||` instead of `or`.", 5861240], + [150, 5, 115, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 3449424395], + [171, 42, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [225, 5, 106, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 3270016872], + [279, 7, 124, "Style/SafeNavigation: Use safe navigation (`&.`) instead of checking if an object exists before calling the method.", 980989257], + [417, 7, 4, "Lint/UnderscorePrefixedVariableName: Do not use prefix `_` for a variable that is used.", 2089550317], + [431, 59, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [482, 32, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [498, 7, 6, "Lint/UnderscorePrefixedVariableName: Do not use prefix `_` for a variable that is used.", 3498751916], + [499, 17, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [514, 7, 6, "Lint/UnderscorePrefixedVariableName: Do not use prefix `_` for a variable that is used.", 3498751916], + [519, 7, 5, "Style/InfiniteLoop: Use `Kernel#loop` for infinite loops.", 191284826] ], "lib/openid/protocolerror.rb:1786077515": [ [1, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2569813655] ], - "lib/openid/server.rb:1792470822": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3933002043], - [2, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2569813655], - [3, 9, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847734175], - [4, 9, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3682152042], - [5, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3577044961], - [6, 9, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4191648330], - [7, 9, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2920398136], - [9, 9, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3039807664], - [19, 22, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2575269614], - [20, 19, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1624212443], - [21, 25, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1059129454], - [38, 15, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2073241892], - [73, 17, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 45746588], - [83, 7, 973, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 3171094024], - [84, 51, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [85, 56, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 329410673], - [92, 35, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [92, 43, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [92, 83, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [96, 46, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92008088], + "lib/openid/server.rb:615617098": [ + [83, 7, 1000, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 1001267496], [98, 30, 2, "Style/AndOr: Use `||` instead of `or`.", 5861240], - [99, 12, 8, "Layout/MultilineOperationIndentation: Use 4 (not 3) spaces for indenting a condition in an `if` statement spanning multiple lines.", 2919038096], - [100, 24, 55, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3263298957], - [100, 24, 55, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3263298957], - [101, 24, 8, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 4192817487], - [101, 34, 7, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 1236122734], - [119, 32, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3039078867], - [119, 41, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 967974776], - [120, 44, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1807068342], - [126, 26, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 329410673], - [135, 9, 2, "Lint/UselessAssignment: Useless assignment to variable - `ih`.", 5861156], - [138, 9, 7, "Layout/IndentationWidth: Use 2 (not 7) spaces for indentation.", 394119301], - [138, 23, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3908694509], - [139, 14, 4, "Layout/ElseAlignment: Align `else` with `ih`.", 2087423834], - [140, 16, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [141, 14, 3, "Layout/EndAlignment: `end` at 141, 13 is not aligned with `ih = if` at 137, 8.", 193405706], - [143, 16, 39, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1837372532], - [143, 16, 39, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1837372532], - [144, 16, 10, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 874138713], - [144, 28, 13, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 2725934909], - [145, 16, 4, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2088898008], - [145, 22, 7, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 1289273623], - [145, 31, 2, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 5861156], - [174, 15, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [177, 7, 60, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 2656680418], - [182, 10, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [182, 11, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1359404130], - [182, 46, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [202, 15, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [202, 27, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [204, 39, 6, "Performance/StringIdentifierArgument: Use `:sha1` instead of `'sha1'`.", 3036224142], - [204, 39, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3036224142], - [213, 7, 1347, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 2912282318], - [214, 49, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 742512847], - [215, 45, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4057239290], - [216, 25, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [216, 37, 2, "Style/AndOr: Use `||` instead of `or`.", 5861240], - [217, 12, 24, "Layout/MultilineOperationIndentation: Use 4 (not 3) spaces for indenting a condition in an `if` statement spanning multiple lines.", 3973005723], - [217, 21, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [220, 11, 12, "Layout/IndentationWidth: Use 2 (not 12) spaces for indentation.", 155433733], - [220, 23, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 146392796], - [221, 21, 4, "Layout/ElseAlignment: Align `else` with `missing`.", 2087423834], - [222, 23, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2734874678], - [223, 21, 3, "Layout/EndAlignment: `end` at 223, 20 is not aligned with `missing = if` at 219, 10.", 193405706], - [225, 35, 7, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1236122734], - [226, 35, 189, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1472291387], - [226, 42, 41, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 481919470], - [226, 42, 131, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 11793590], - [226, 84, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], - [227, 43, 45, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2957720444], - [228, 42, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 766506497], - [231, 23, 2, "Style/AndOr: Use `||` instead of `or`.", 5861240], - [239, 54, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1302701622], - [241, 35, 7, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1236122734], - [242, 35, 120, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3540486081], - [242, 42, 33, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3036264092], - [242, 42, 103, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3707757476], - [242, 76, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], - [243, 43, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2851615900], - [243, 70, 7, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 1236122734], - [252, 34, 10, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 401758518], - [253, 34, 16, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 113985684], - [254, 34, 6, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2158746291], - [256, 11, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2061968077], - [257, 11, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1001558037], - [257, 11, 40, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1905445545], - [264, 9, 12, "Style/SuperArguments: Call `super` without arguments and parentheses when the signature is identical.", 1081125640], - [265, 25, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4043085327], - [266, 39, 8, "Performance/StringIdentifierArgument: Use `:sha256` instead of `'sha256'`.", 3618363438], - [266, 39, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3618363438], - [267, 33, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2821943524], - [285, 9, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [286, 9, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [287, 9, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4043085327], - [287, 9, 47, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2738224754], - [299, 17, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3996287345], - [303, 7, 1625, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 2180283986], - [305, 53, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [306, 30, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [307, 22, 49, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2863953747], - [307, 72, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], - [308, 22, 46, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 823424615], - [310, 28, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [313, 54, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [315, 37, 7, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1236122734], - [316, 37, 35, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3756360383], - [316, 37, 35, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3756360383], - [323, 35, 7, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1236122734], - [324, 35, 47, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2012162986], - [324, 42, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3483985885], - [331, 35, 7, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1236122734], - [332, 35, 96, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 4173394173], - [332, 42, 30, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3242654537], - [332, 42, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3242654537], - [333, 42, 12, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3549528604], - [333, 56, 1, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 177600], - [336, 49, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2380346415], - [336, 63, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [338, 24, 54, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 832416581], - [338, 24, 54, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 832416581], - [339, 24, 12, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3549528604], - [339, 38, 10, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 874512463], - [357, 39, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1853815741], - [357, 39, 46, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 2955192202], - [357, 62, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085254948], - [358, 39, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2380346415], - [359, 39, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [359, 39, 30, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2546167319], - [360, 37, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [361, 37, 9, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 983435646], - [362, 37, 29, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 622463645], - [363, 41, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [363, 57, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [364, 16, 19, "Layout/MultilineOperationIndentation: Use 4 (not 7) spaces for indenting a condition in an `unless` statement spanning multiple lines.", 2529528845], - [366, 24, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [376, 30, 28, "Layout/ParameterAlignment: Use one level of indentation for parameters following the first line of a multi-line method definition.", 930639504], - [380, 44, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1835655055], - [380, 58, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3832253317], - [381, 44, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [385, 24, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2380346415], - [391, 24, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [439, 22, 17, "Layout/ParameterAlignment: Use one level of indentation for parameters following the first line of a multi-line method definition.", 1804413748], - [450, 19, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3232603392], - [453, 19, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [456, 23, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [457, 12, 39, "Layout/MultilineOperationIndentation: Use 4 (not 3) spaces for indenting a condition in an `if` statement spanning multiple lines.", 1911918224], - [481, 7, 3250, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 3356184989], - [485, 43, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [486, 20, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3232603392], - [488, 22, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3232603392], - [491, 22, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [494, 52, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 322569067], - [495, 31, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [496, 24, 44, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 476443748], - [497, 24, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1236122734], - [501, 51, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [502, 53, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 794246204], - [505, 17, 50, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1746623819], - [508, 28, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [509, 16, 55, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 208938461], - [509, 72, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], - [510, 18, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 794246204], - [512, 30, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [513, 16, 57, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3301285874], - [513, 74, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], - [514, 16, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [522, 9, 21, "Layout/IndentationWidth: Use 2 (not 21) spaces for indentation.", 3973078917], - [522, 30, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 137463464], - [523, 28, 4, "Layout/ElseAlignment: Align `else` with `trust_root_param`.", 2087423834], - [524, 30, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1442212370], - [525, 28, 3, "Layout/EndAlignment: `end` at 525, 27 is not aligned with `trust_root_param = if` at 521, 8.", 193405706], - [530, 32, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [530, 51, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [531, 44, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2779224600], - [531, 74, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], - [532, 35, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1644573363], - [535, 55, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [543, 26, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [543, 30, 2, "Style/RedundantLineContinuation: Redundant line continuation.", 5862675], - [544, 12, 42, "Layout/MultilineOperationIndentation: Use 4 (not 3) spaces for indenting a condition in an `if` statement spanning multiple lines.", 1433226521], - [642, 34, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [645, 56, 1, "Layout/LineContinuationSpacing: Use one space in front of backslash.", 177657], - [646, 34, 39, "Layout/LineEndStringConcatenationIndentation: Indent the first part of a string concatenated with backslash.", 2602809986], - [646, 34, 39, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2602809986], - [646, 73, 1, "Layout/LineContinuationSpacing: Use one space in front of backslash.", 177657], - [647, 34, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2300316435], - [654, 9, 9, "Layout/IndentationWidth: Use 2 (not 9) spaces for indentation.", 3994155397], - [654, 18, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [655, 16, 5, "Layout/ElseAlignment: Align `elsif` with `mode`.", 165509744], - [657, 20, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [659, 20, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4176286499], - [661, 16, 5, "Layout/ElseAlignment: Align `elsif` with `mode`.", 165509744], - [662, 18, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2136724950], - [663, 16, 4, "Layout/ElseAlignment: Align `else` with `mode`.", 2087423834], - [664, 18, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4176286499], - [665, 16, 3, "Layout/EndAlignment: `end` at 665, 15 is not aligned with `mode = if` at 653, 8.", 193405706], - [669, 23, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [670, 31, 42, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2666858070], - [670, 73, 1, "Layout/LineContinuationSpacing: Use one space in front of backslash.", 177657], - [671, 32, 48, "Layout/LineEndStringConcatenationIndentation: Indent the first part of a string concatenated with backslash.", 4195874379], - [674, 43, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [679, 36, 31, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1916080336], - [679, 67, 1, "Layout/LineContinuationSpacing: Use one space in front of backslash.", 177657], - [680, 37, 39, "Layout/LineEndStringConcatenationIndentation: Indent the first part of a string concatenated with backslash.", 4227485895], - [680, 37, 39, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4227485895], - [680, 76, 1, "Layout/LineContinuationSpacing: Use one space in front of backslash.", 177657], - [681, 37, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1814540314], - [688, 25, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [689, 77, 1, "Layout/LineContinuationSpacing: Use one space in front of backslash.", 177657], - [690, 37, 40, "Layout/LineEndStringConcatenationIndentation: Indent the first part of a string concatenated with backslash.", 1024475881], - [697, 36, 37, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1136706503], - [697, 73, 1, "Layout/LineContinuationSpacing: Use one space in front of backslash.", 177657], - [698, 37, 30, "Layout/LineEndStringConcatenationIndentation: Indent the first part of a string concatenated with backslash.", 2556113020], - [703, 34, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [704, 34, 38, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1521254679], - [704, 72, 1, "Layout/LineContinuationSpacing: Use one space in front of backslash.", 177657], - [705, 35, 38, "Layout/LineEndStringConcatenationIndentation: Indent the first part of a string concatenated with backslash.", 1633875015], - [705, 35, 38, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1633875015], - [709, 41, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [709, 41, 14, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 1836193926], - [710, 41, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 245860230], - [711, 41, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 322569067], - [712, 41, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1679224880], - [712, 41, 34, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1273866756], - [713, 39, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [716, 48, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [718, 39, 9, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 983435646], - [719, 39, 12, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 794246204], - [719, 39, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 794246204], - [719, 53, 19, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 2958100160], - [723, 46, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [725, 36, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [726, 36, 40, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4268070343], - [726, 76, 1, "Layout/LineContinuationSpacing: Use one space in front of backslash.", 177657], - [727, 37, 31, "Layout/LineEndStringConcatenationIndentation: Indent the first part of a string concatenated with backslash.", 3446768576], - [727, 37, 31, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3446768576], - [732, 44, 9, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 4288552051], - [732, 55, 10, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 1377032075], - [733, 44, 12, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2898622406], - [733, 58, 11, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 2933321160], - [733, 71, 5, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 170962968], - [734, 44, 13, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2725934909], - [734, 59, 11, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 2485497820], - [737, 48, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2858095960], - [755, 14, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [755, 15, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [755, 15, 15, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 423708262], - [756, 15, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [757, 15, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 794246204], - [758, 15, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 322569067], - [758, 15, 25, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 815332326], - [758, 40, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [762, 15, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 137463464], - [764, 15, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1442212370], - [768, 11, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [789, 35, 43, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1122663964], - [789, 79, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], - [790, 35, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1557781339], - [794, 37, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [794, 45, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4176286499], - [799, 16, 30, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1729843511], - [799, 16, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1729843511], - [799, 48, 10, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 874138713], - [800, 16, 9, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 4288552051], - [801, 16, 10, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 4046627668], - [802, 16, 11, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2933321160], - [803, 16, 13, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2725934909], - [836, 16, 15, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2638383570], - [836, 16, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2638383570], - [837, 16, 10, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 874138713], - [838, 16, 14, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2979001140], - [839, 16, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 463181332], - [865, 36, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [865, 47, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [875, 31, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [876, 12, 40, "Layout/MultilineOperationIndentation: Use 4 (not 3) spaces for indenting a condition in an `if` statement spanning multiple lines.", 695384809], - [930, 60, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [956, 23, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 309987210], - [957, 21, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2223259751], - [959, 7, 52, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 2152933968], - [963, 7, 48, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 90040144], - [981, 27, 47, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 726413268], - [981, 27, 89, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3743516744], - [981, 75, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], - [982, 28, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2893032440], - [982, 42, 12, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 4223563293], - [982, 56, 7, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 1236122734], - [989, 27, 35, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 856335427], - [989, 27, 35, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 856335427], - [990, 27, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1236122734], - [990, 36, 5, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 170529416], - [990, 43, 1, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 177600], - [1012, 21, 2, "Style/AndOr: Use `||` instead of `or`.", 5861240], - [1015, 26, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 329410673], - [1017, 53, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [1018, 22, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [1039, 56, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [1042, 25, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2515247934], - [1049, 9, 8, "Layout/IndentationWidth: Use 2 (not 8) spaces for indentation.", 121035013], - [1050, 15, 4, "Layout/ElseAlignment: Align `else` with `key`.", 2087423834], - [1052, 15, 3, "Layout/EndAlignment: `end` at 1052, 14 is not aligned with `key = if` at 1048, 8.", 193405706], - [1067, 33, 31, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4058440666], - [1070, 9, 8, "Layout/IndentationWidth: Use 2 (not 8) spaces for indentation.", 121035013], - [1071, 15, 4, "Layout/ElseAlignment: Align `else` with `key`.", 2087423834], - [1073, 15, 3, "Layout/EndAlignment: `end` at 1073, 14 is not aligned with `key = if` at 1069, 8.", 193405706], - [1076, 18, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [1077, 27, 52, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1475066302], - [1077, 27, 52, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1475066302], - [1078, 27, 19, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 490773607], - [1078, 27, 19, "Style/TernaryParentheses: Use parentheses for ternary expressions with complex conditions.", 490773607], - [1078, 35, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3032076797], - [1078, 44, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [1079, 27, 12, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 4223563293], - [1079, 41, 16, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 1887357502], - [1092, 9, 8, "Layout/IndentationWidth: Use 2 (not 8) spaces for indentation.", 121035013], - [1093, 15, 4, "Layout/ElseAlignment: Align `else` with `key`.", 2087423834], - [1095, 15, 3, "Layout/EndAlignment: `end` at 1095, 14 is not aligned with `key = if` at 1091, 8.", 193405706], - [1109, 7, 17, "Naming/VariableName: Use snake_case for variable names.", 1925358418], - [1118, 38, 7, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1441780294], - [1118, 47, 3, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 193419246], - [1119, 38, 25, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1408178878], - [1123, 38, 13, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1762536984], - [1124, 38, 26, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 4276289632], - [1124, 39, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [1124, 40, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3294717144], - [1124, 62, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [1126, 38, 7, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1441780294], - [1126, 47, 3, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 193419246], - [1127, 38, 23, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2619964149], - [1158, 39, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [1161, 22, 44, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1581867789], - [1161, 22, 44, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1581867789], - [1162, 22, 8, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2137101542], - [1162, 33, 8, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 2137101542], - [1166, 84, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92008088], - [1171, 9, 15, "Style/SuperArguments: Call `super` without arguments and parentheses when the signature is identical.", 963280966], - [1178, 9, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [1178, 50, 14, "Performance/StringIdentifierArgument: Use `:from_message` instead of `'from_message'`.", 434155943], - [1178, 50, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434155943], - [1179, 9, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3232603392], - [1179, 54, 14, "Performance/StringIdentifierArgument: Use `:from_message` instead of `'from_message'`.", 434155943], - [1179, 54, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434155943], - [1180, 9, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 45746588], - [1180, 59, 14, "Performance/StringIdentifierArgument: Use `:from_message` instead of `'from_message'`.", 434155943], - [1180, 59, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434155943], - [1181, 9, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3996287345], - [1181, 9, 54, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3449255941], - [1181, 48, 14, "Performance/StringIdentifierArgument: Use `:from_message` instead of `'from_message'`.", 434155943], - [1181, 48, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434155943], - [1200, 9, 10, "Style/ReturnNil: Use `return` instead of `return nil`.", 1900003172], - [1200, 34, 2, "Style/AndOr: Use `||` instead of `or`.", 5861240], - [1206, 17, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [1211, 43, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [1213, 24, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 731998518], - [1217, 49, 17, "Performance/StringIdentifierArgument: Use `:default_decoder` instead of `'default_decoder'`.", 969315183], - [1217, 49, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 969315183], - [1226, 43, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [1227, 22, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3149754674], - [1245, 7, 16, "Naming/VariableName: Use snake_case for variable names.", 3054764905], - [1246, 7, 14, "Naming/VariableName: Use snake_case for variable names.", 683624799], - [1247, 7, 14, "Naming/VariableName: Use snake_case for variable names.", 2473038197], - [1286, 28, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2149045475], - [1288, 24, 45, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 516793225], - [1288, 24, 45, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 516793225], - [1289, 24, 4, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2088335225], - [1289, 30, 12, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 1896618937], - [1305, 49, 5, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 170962968], - [1306, 49, 10, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 874512463], - [1309, 28, 44, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2694843697], - [1309, 28, 92, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2502729472], - [1309, 73, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], - [1310, 29, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2355236949], - [1310, 48, 10, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 874512463], - [1310, 60, 12, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 3549528604], - [1312, 38, 7, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1236122734], - [1313, 38, 20, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2751211893], - [1314, 38, 22, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 902673318], - [1341, 27, 9, "Lint/InheritException: Inherit from `RuntimeError` instead of `Exception`.", 3513723378], - [1357, 9, 10, "Style/ReturnNil: Use `return` instead of `return nil`.", 1900003172], - [1359, 44, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 322569067], - [1372, 34, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [1372, 42, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [1373, 34, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [1375, 34, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3782363013], - [1377, 34, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1645991854], - [1407, 41, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [1408, 14, 40, "Layout/MultilineOperationIndentation: Use 4 (not 3) spaces for indenting a condition in an `if` statement spanning multiple lines.", 695384809], - [1415, 9, 10, "Style/ReturnNil: Use `return` instead of `return nil`.", 1900003172], - [1417, 51, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [1429, 26, 9, "Lint/InheritException: Inherit from `RuntimeError` instead of `Exception`.", 3513723378], - [1434, 29, 9, "Lint/InheritException: Inherit from `RuntimeError` instead of `Exception`.", 3513723378], - [1440, 27, 9, "Lint/InheritException: Inherit from `RuntimeError` instead of `Exception`.", 3513723378], - [1445, 9, 15, "Style/SuperArguments: Call `super` without arguments and parentheses when the signature is identical.", 963280966], - [1465, 16, 38, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 780812507], - [1465, 16, 38, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 780812507], - [1466, 16, 10, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1377032075], - [1467, 16, 11, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2933321160] + [138, 9, 2, "Lint/UselessAssignment: Useless assignment to variable - `ih`.", 5861156], + [185, 7, 60, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 2656680418], + [221, 7, 1343, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 1294135598], + [224, 25, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [224, 37, 2, "Style/AndOr: Use `||` instead of `or`.", 5861240], + [225, 22, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [236, 57, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], + [243, 23, 2, "Style/AndOr: Use `||` instead of `or`.", 5861240], + [256, 49, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], + [322, 7, 1680, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 4078258898], + [326, 72, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], + [396, 57, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [489, 23, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [514, 7, 3187, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 1191617789], + [528, 31, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [543, 28, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [544, 72, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], + [547, 30, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [548, 74, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], + [565, 32, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [565, 51, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [566, 74, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], + [578, 26, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [677, 34, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [704, 23, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [709, 43, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [723, 25, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [738, 34, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [763, 36, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [835, 79, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], + [926, 31, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [1010, 7, 52, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 2152933968], + [1014, 7, 48, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 90040144], + [1033, 61, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], + [1071, 21, 2, "Style/AndOr: Use `||` instead of `or`.", 5861240], + [1077, 22, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [1135, 18, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [1171, 7, 17, "Naming/VariableName: Use snake_case for variable names.", 1925358418], + [1228, 39, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [1273, 30, 2, "Style/AndOr: Use `||` instead of `or`.", 5861240], + [1318, 7, 16, "Naming/VariableName: Use snake_case for variable names.", 3054764905], + [1319, 7, 14, "Naming/VariableName: Use snake_case for variable names.", 683624799], + [1320, 7, 14, "Naming/VariableName: Use snake_case for variable names.", 2473038197], + [1388, 58, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], + [1425, 27, 9, "Lint/InheritException: Inherit from `RuntimeError` instead of `Exception`.", 3513723378], + [1491, 41, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [1513, 26, 9, "Lint/InheritException: Inherit from `RuntimeError` instead of `Exception`.", 3513723378], + [1518, 29, 9, "Lint/InheritException: Inherit from `RuntimeError` instead of `Exception`.", 3513723378], + [1524, 27, 9, "Lint/InheritException: Inherit from `RuntimeError` instead of `Exception`.", 3513723378] ], "lib/openid/store/filesystem.rb:4219162133": [ [1, 9, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2304965300], @@ -2338,53 +1854,20 @@ [61, 26, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340330], [68, 28, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789] ], - "lib/openid/util.rb:934305720": [ - [1, 9, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91426760], - [2, 9, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92337995], - [3, 9, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 800403441], + "lib/openid/util.rb:1309152219": [ [7, 26, 9, "Lint/InheritException: Inherit from `RuntimeError` instead of `Exception`.", 3513723378], - [17, 20, 28, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3956381438], - [18, 21, 40, "Layout/LineEndStringConcatenationIndentation: Indent the first part of a string concatenated with backslash.", 4252227259], - [18, 21, 40, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4252227259], - [19, 32, 104, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 926887679], - [24, 11, 16, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 2686537055], - [26, 5, 113, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 4263461037], - [32, 5, 64, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 3430225037], - [33, 16, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193338280], - [33, 21, 14, "Performance/StringReplacement: Use `delete` instead of `gsub`.", 1187769177], - [33, 32, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [36, 5, 215, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 1781608294], - [37, 44, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [40, 32, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193338280], - [43, 5, 375, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 764313457], - [47, 17, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [54, 33, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340920], - [56, 14, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193339971], - [59, 5, 113, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 3881247632], - [65, 5, 233, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 1836615070], - [69, 44, 11, "Performance/StringIdentifierArgument: Use `:each_pair` instead of `'each_pair'`.", 1158397247], - [69, 44, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1158397247], - [71, 28, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340858], - [71, 35, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193339971], - [71, 41, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340858], - [75, 27, 6, "Style/GlobalStdStream: Use `$stderr` instead of `STDERR`.", 3356712163], - [76, 25, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2817345500], - [78, 5, 56, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 2727557201], - [82, 5, 38, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 1822287760], - [87, 5, 56, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 3115535040], - [91, 5, 355, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 3095635635], - [91, 45, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 490006018], - [110, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [110, 22, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193339971], - [110, 29, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3325330116], - [110, 38, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340825], - [110, 45, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3094424448], - [110, 53, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340763], - [110, 60, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3094036075], - [110, 75, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2959556167], - [110, 92, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 588061377], - [110, 100, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [112, 5, 88, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 778275783] + [29, 5, 120, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 2072363460], + [35, 5, 62, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 2409726139], + [39, 5, 215, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 776051910], + [46, 5, 375, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 9030161], + [62, 5, 113, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 3881247632], + [68, 5, 232, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 1836615070], + [78, 27, 6, "Style/GlobalStdStream: Use `$stderr` instead of `STDERR`.", 3356712163], + [81, 5, 56, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 2727557201], + [85, 5, 38, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 1822287760], + [90, 5, 56, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 3115535040], + [94, 5, 355, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 2566402067], + [115, 5, 88, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 778275783] ], "lib/openid/version.rb:172215805": [ [2, 13, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3885394300] @@ -3409,7035 +2892,283 @@ [1507, 5, 50, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1373098124], [1508, 5, 6, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1180004244] ], - "test/discoverdata.rb:3810468909": [ - [1, 9, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92337995], - [2, 9, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2743300663], - [3, 9, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1906546608], - [4, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2569813655], - [13, 14, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1181645659], - [13, 23, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1181645659], - [13, 32, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3043806936], - [14, 13, 1, "Layout/ExtraSpacing: Unnecessary spacing detected.", 177541], - [14, 15, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 470251418], - [14, 24, 11, "Layout/ExtraSpacing: Unnecessary spacing detected.", 3128322693], - [14, 36, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 470251418], - [14, 45, 10, "Layout/ExtraSpacing: Unnecessary spacing detected.", 2958109189], - [14, 56, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3043806936], - [15, 13, 1, "Layout/ExtraSpacing: Unnecessary spacing detected.", 177541], - [15, 15, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3970794962], - [15, 34, 1, "Layout/ExtraSpacing: Unnecessary spacing detected.", 177541], - [15, 36, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3970794962], - [15, 56, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3043806936], - [16, 13, 1, "Layout/ExtraSpacing: Unnecessary spacing detected.", 177541], - [16, 15, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3043806936], - [16, 22, 13, "Layout/ExtraSpacing: Unnecessary spacing detected.", 834345861], - [16, 36, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3043806936], - [16, 43, 12, "Layout/ExtraSpacing: Unnecessary spacing detected.", 155433733], - [16, 56, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3043806936], - [17, 13, 1, "Layout/ExtraSpacing: Unnecessary spacing detected.", 177541], - [17, 15, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1773413503], - [17, 30, 5, "Layout/ExtraSpacing: Unnecessary spacing detected.", 95016837], - [17, 36, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1773413503], - [17, 51, 4, "Layout/ExtraSpacing: Unnecessary spacing detected.", 2085287685], - [17, 56, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1773413503], - [18, 13, 1, "Layout/ExtraSpacing: Unnecessary spacing detected.", 177541], - [18, 15, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2279316420], - [18, 29, 6, "Layout/ExtraSpacing: Unnecessary spacing detected.", 3135555589], - [18, 36, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2279316420], - [18, 50, 5, "Layout/ExtraSpacing: Unnecessary spacing detected.", 95016837], - [18, 56, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2279316420], - [19, 15, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4154753178], - [19, 27, 8, "Layout/ExtraSpacing: Unnecessary spacing detected.", 121035013], - [19, 36, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4154753178], - [19, 48, 7, "Layout/ExtraSpacing: Unnecessary spacing detected.", 394119301], - [19, 56, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4154753178], - [20, 13, 1, "Layout/ExtraSpacing: Unnecessary spacing detected.", 177541], - [20, 15, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3660885228], - [20, 29, 6, "Layout/ExtraSpacing: Unnecessary spacing detected.", 3135555589], - [20, 36, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1181645659], - [20, 44, 11, "Layout/ExtraSpacing: Unnecessary spacing detected.", 3128322693], - [20, 56, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3043806936], - [21, 13, 1, "Layout/ExtraSpacing: Unnecessary spacing detected.", 177541], - [21, 15, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2464312269], - [21, 30, 5, "Layout/ExtraSpacing: Unnecessary spacing detected.", 95016837], - [21, 36, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 470251418], - [21, 45, 10, "Layout/ExtraSpacing: Unnecessary spacing detected.", 2958109189], - [21, 56, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3043806936], - [22, 13, 1, "Layout/ExtraSpacing: Unnecessary spacing detected.", 177541], - [22, 15, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 106442895], - [22, 28, 7, "Layout/ExtraSpacing: Unnecessary spacing detected.", 394119301], - [22, 36, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3043806936], - [22, 43, 12, "Layout/ExtraSpacing: Unnecessary spacing detected.", 155433733], - [22, 56, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3043806936], - [23, 15, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4086766317], - [23, 33, 2, "Layout/ExtraSpacing: Unnecessary spacing detected.", 5858821], - [23, 36, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4154753178], - [23, 48, 7, "Layout/ExtraSpacing: Unnecessary spacing detected.", 394119301], - [23, 56, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4154753178], - [24, 13, 1, "Layout/ExtraSpacing: Unnecessary spacing detected.", 177541], - [24, 15, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1285407835], - [24, 36, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1181645659], - [24, 44, 11, "Layout/ExtraSpacing: Unnecessary spacing detected.", 3128322693], - [24, 56, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3043806936], - [25, 15, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 127997555], - [25, 42, 12, "Layout/ExtraSpacing: Unnecessary spacing detected.", 155433733], - [26, 15, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2508738664], - [26, 33, 4, "Layout/ExtraSpacing: Unnecessary spacing detected.", 2085287685], - [26, 42, 12, "Layout/ExtraSpacing: Unnecessary spacing detected.", 155433733], - [27, 15, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3129039434], - [27, 31, 6, "Layout/ExtraSpacing: Unnecessary spacing detected.", 3135555589], - [27, 42, 12, "Layout/ExtraSpacing: Unnecessary spacing detected.", 155433733], - [28, 15, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3145018768], - [28, 42, 12, "Layout/ExtraSpacing: Unnecessary spacing detected.", 155433733], - [29, 7, 52, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 1362538017], - [29, 15, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2445264214], - [29, 42, 12, "Layout/ExtraSpacing: Unnecessary spacing detected.", 155433733], - [32, 27, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1390506058], - [33, 27, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3779756970], - [56, 10, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 99625963], - [57, 10, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3672783539], - [58, 10, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2862978979], - [59, 9, 19, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 2510043270], - [59, 10, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2995499426], - [70, 24, 18, "Layout/ParameterAlignment: Use one level of indentation for parameters following the first line of a multi-line method definition.", 813725433], - [71, 24, 30, "Layout/ParameterAlignment: Use one level of indentation for parameters following the first line of a multi-line method definition.", 3005006690], - [91, 9, 29, "Minitest/AssertPredicate: Prefer using `assert_predicate(result_name, :nil?)`.", 1352720295], - [101, 36, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1791508675], - [102, 40, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340639] - ], - "test/test_accept.rb:4115500396": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1192794327], - [3, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 43233146], - [4, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2569813655], - [14, 30, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4167781427], - [31, 25, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [31, 29, 2, "Style/AndOr: Use `||` instead of `or`.", 5861240], - [31, 53, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193339942], - [53, 35, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340639], - [64, 28, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340297], - [72, 27, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [73, 29, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340297], - [75, 39, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340734], - [77, 11, 35, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 717514236], - [77, 36, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340330], - [79, 34, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340920], - [80, 11, 21, "Minitest/AssertOperator: Prefer using `assert_operator(q, :==, 'q')`.", 2598250828], - [80, 11, 21, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2598250828], - [80, 28, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193338420], - [95, 28, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2928631141], - [97, 32, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3175448956], - [102, 11, 20, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2302609754], - [102, 17, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1747587146], - [106, 30, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2237246747], - [111, 11, 20, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2302609754], - [111, 17, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1747587146], - [115, 16, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4130200496], - [120, 9, 30, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 97380905], - [122, 22, 39, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1215809733], - [123, 22, 37, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1420598686], - [134, 14, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [136, 11, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3039374547], - [136, 20, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3039374547], - [138, 12, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3039374547], - [138, 27, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3039374547], - [140, 11, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3039374547], - [140, 20, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 208791113], - [140, 37, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1522533826], - [142, 11, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3039374547], - [142, 20, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 575702787], - [142, 34, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 94346540], - [142, 43, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91039335], - [144, 12, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3039374547], - [145, 12, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3039374547], - [147, 10, 38, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 1539834100], - [147, 12, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1162061288], - [147, 29, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92058095], - [147, 42, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92066993], - [148, 10, 32, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 1437503730], - [148, 10, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1437503730], - [148, 10, 33, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 192982895], - [156, 24, 15, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2875697563], - [156, 41, 36, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 1661866372], - [157, 24, 32, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 799861183] - ], - "test/test_association.rb:1641817857": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4191648330], - [3, 9, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 395966781], - [14, 32, 8, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 310091503], - [14, 32, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 310091503], - [14, 42, 8, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 3505321043], - [14, 42, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3505321043], - [14, 52, 6, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 1645597496], - [15, 32, 8, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 308967862], - [15, 42, 11, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 389098948], - [15, 42, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [20, 7, 121, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1457950109], - [42, 7, 28, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 403078475], - [49, 66, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2058359486], - [55, 43, 10, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 4014237853], - [56, 43, 13, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2589083084], - [57, 43, 13, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2937001200], - [58, 43, 17, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1489129996], - [67, 7, 34, "Minitest/AssertOperator: Prefer using `assert_operator(assoc.issued, :>=, start_time)`.", 351769233], - [72, 16, 15, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 4220377421], - [73, 16, 15, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 3699894189], - [73, 16, 15, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 3699894189], - [75, 8, 103, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 760314115], - [75, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2821943524], - [76, 8, 80, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 1869580903], - [76, 8, 80, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 1869580903], - [76, 9, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [77, 51, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 310091503], - [77, 61, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 766756148], - [79, 9, 75, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 654224346], - [79, 46, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 326052951], - [79, 75, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 326052951], - [85, 28, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1551395949], - [85, 49, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 832170441], - [88, 9, 43, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2298301550], - [88, 45, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92008088], - [89, 22, 37, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2691761586], - [89, 22, 94, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 1616319040], - [89, 50, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3666757975], - [90, 22, 34, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 255331889], - [90, 22, 34, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 255331889], - [95, 43, 4, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2085944928], - [95, 49, 8, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 310091503], - [95, 49, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 310091503], - [95, 59, 13, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 766756148], - [95, 59, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 766756148], - [96, 43, 11, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 389098948], - [96, 43, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [98, 28, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92008088], - [98, 35, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1273973851], - [105, 43, 4, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2085944928], - [105, 49, 8, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 310091503], - [105, 49, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 310091503], - [105, 59, 13, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 766756148], - [105, 59, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 766756148], - [106, 43, 11, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 389098948], - [106, 43, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [108, 28, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3666757975], - [108, 38, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2182135796], - [115, 43, 4, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2085944928], - [115, 49, 8, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 310091503], - [115, 49, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 310091503], - [115, 59, 13, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 766756148], - [115, 59, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 766756148], - [116, 43, 11, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 389098948], - [116, 43, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [118, 28, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [118, 44, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 969225728], - [125, 44, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1500858930], - [134, 25, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [134, 25, 18, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 248562579], - [134, 35, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [135, 25, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4182825318], - [135, 41, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4000236688], - [136, 25, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3666757975], - [136, 37, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2125633385], - [137, 25, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92008088], - [137, 25, 21, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 4071763292], - [137, 34, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2786037762], - [138, 23, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [139, 33, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [139, 34, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92254433], - [139, 43, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1594103918], - [139, 50, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [140, 43, 4, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2085944928], - [140, 49, 8, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 81419720], - [140, 49, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 81419720], - [140, 59, 13, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 766756148], - [140, 59, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 766756148], - [141, 43, 11, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 389098948], - [141, 43, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [143, 7, 89, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1918827267], - [143, 20, 68, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3476122214], - [143, 21, 26, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 4234447833], - [143, 22, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4182825318], - [143, 36, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4000236688], - [144, 21, 18, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 522316250], - [144, 21, 18, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 522316250], - [144, 22, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [144, 30, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [144, 42, 5, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 187707580], - [149, 34, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [149, 35, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [149, 35, 18, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 248562579], - [149, 45, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [150, 35, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4182825318], - [150, 51, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4000236688], - [151, 35, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92008088], - [151, 35, 17, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 586306384], - [151, 44, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 264651534], - [151, 52, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [152, 43, 4, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2085944928], - [152, 49, 8, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 81419720], - [152, 49, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 81419720], - [152, 59, 13, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 766756148], - [152, 59, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 766756148], - [153, 43, 11, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 389098948], - [153, 43, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [161, 34, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [161, 35, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [161, 35, 18, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 248562579], - [161, 45, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [162, 35, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4182825318], - [162, 51, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4000236688], - [163, 35, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3666757975], - [163, 35, 18, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 511411831], - [163, 47, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [163, 53, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [164, 43, 4, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2085944928], - [164, 49, 8, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 81419720], - [164, 49, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 81419720], - [164, 59, 13, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 766756148], - [164, 59, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 766756148], - [165, 43, 11, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 389098948], - [165, 43, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [173, 34, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [173, 35, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [173, 35, 18, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 248562579], - [173, 45, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [174, 35, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4182825318], - [174, 51, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4000236688], - [175, 35, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3666757975], - [175, 47, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [176, 35, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92008088], - [176, 35, 33, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 742917864], - [176, 59, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 264651534], - [176, 68, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [177, 43, 4, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2085944928], - [177, 49, 8, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 81419720], - [177, 49, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 81419720], - [177, 59, 13, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 766756148], - [177, 59, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 766756148], - [178, 43, 11, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 389098948], - [178, 43, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [179, 7, 41, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1974080929], - [179, 7, 41, "Minitest/RefuteFalse: Prefer using `refute(assoc.check_message_signature(m))`.", 1974080929], - [184, 34, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [184, 35, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [184, 35, 18, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 248562579], - [184, 45, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [185, 35, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4182825318], - [185, 51, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4000236688], - [186, 35, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3666757975], - [186, 47, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [187, 35, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92008088], - [187, 35, 33, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 742917864], - [187, 59, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 264651534], - [187, 68, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [188, 43, 4, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2085944928], - [188, 49, 8, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 81419720], - [188, 49, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 81419720], - [188, 59, 13, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 766756148], - [188, 59, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 766756148], - [189, 43, 11, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 389098948], - [189, 43, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [193, 11, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 264651534], - [205, 7, 24, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3180609530], - [212, 7, 39, "Minitest/AssertOperator: Prefer using `assert_operator(neg.object_id, :!=, neg2.object_id)`.", 2120276328], - [212, 7, 39, "Minitest/RefuteEqual: Prefer using `refute_equal(neg.object_id, neg2.object_id)`.", 2120276328], - [217, 7, 45, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 536331140], - [217, 7, 45, "Minitest/RefuteFalse: Prefer using `refute(neg.allowed?('HMAC-SHA1', 'DH-SHA1'))`.", 536331140], - [217, 28, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [217, 41, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [218, 7, 51, "Minitest/RefuteFalse: Prefer using `refute(neg.allowed?('HMAC-SHA1', 'no-encryption'))`.", 1562738029], - [218, 28, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [218, 41, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [219, 7, 49, "Minitest/RefuteFalse: Prefer using `refute(neg.allowed?('HMAC-SHA256', 'DH-SHA256'))`.", 1598416196], - [219, 28, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2821943524], - [219, 43, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4043085327], - [220, 7, 53, "Minitest/RefuteFalse: Prefer using `refute(neg.allowed?('HMAC-SHA256', 'no-encryption'))`.", 2725563469], - [220, 28, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2821943524], - [220, 43, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [221, 28, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [222, 7, 44, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3491469797], - [222, 27, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [222, 40, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [223, 27, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [223, 40, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [224, 7, 49, "Minitest/RefuteFalse: Prefer using `refute(neg.allowed?('HMAC-SHA256', 'DH-SHA256'))`.", 1598416196], - [224, 28, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2821943524], - [224, 43, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4043085327], - [225, 7, 53, "Minitest/RefuteFalse: Prefer using `refute(neg.allowed?('HMAC-SHA256', 'no-encryption'))`.", 2725563469], - [225, 28, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2821943524], - [225, 43, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [226, 28, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2821943524], - [226, 43, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4043085327], - [227, 7, 44, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3491469797], - [227, 27, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [227, 40, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [228, 27, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [228, 40, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [229, 27, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2821943524], - [229, 42, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4043085327], - [230, 7, 53, "Minitest/RefuteFalse: Prefer using `refute(neg.allowed?('HMAC-SHA256', 'no-encryption'))`.", 2725563469], - [230, 28, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2821943524], - [230, 43, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [231, 20, 43, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 3904048898], - [247, 20, 34, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 4278672544], - [247, 20, 76, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 2547996889], - [248, 20, 21, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1599267866], - [249, 41, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2821943524], - [249, 56, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [253, 20, 36, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 713801005], - [253, 20, 78, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 3864031508], - [254, 20, 21, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1599267866], - [255, 7, 69, "Minitest/RefuteFalse: Prefer using `refute(EncryptedNegotiator.allowed?('HMAC-SHA256', 'no-encryption'))`.", 1661228785], - [255, 44, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2821943524], - [255, 59, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918] - ], - "test/test_associationmanager.rb:3812113412": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1192794327], - [3, 9, 36, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2222937256], - [4, 9, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4191648330], - [5, 9, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847734175], - [6, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2569813655], - [7, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3933002043], - [8, 9, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2920398136], - [9, 9, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 395966781], - [10, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2754036930], - [11, 9, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3046940385], - [12, 9, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3039807664], - [19, 7, 59, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3383473990], - [19, 21, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1302701622], - [20, 41, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1302701622], - [27, 7, 93, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4265010061], - [27, 20, 45, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1936713411], - [28, 20, 13, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2053327837], - [29, 60, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 742512847], - [30, 62, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4057239290], - [31, 28, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1302701622], - [49, 31, 20, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 4008656186], - [50, 31, 19, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 565403175], - [51, 31, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1275173523], - [61, 31, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2061968077], - [62, 31, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1001558037], - [65, 7, 32, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 420389699], - [69, 31, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1001558037], - [77, 31, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2061968077], - [85, 31, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2061968077], - [85, 51, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1821255529], - [86, 31, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1001558037], - [94, 31, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2061968077], - [95, 31, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1001558037], - [95, 46, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1007277191], - [139, 20, 21, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 1623479055], - [143, 16, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1410924255], - [145, 39, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [145, 40, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1359404130], - [145, 60, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [146, 7, 47, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3583103019], - [152, 21, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 450853529], - [155, 9, 31, "ThreadSafety/ClassAndModuleAttributes: Avoid mutating class and module attributes.", 4153333934], - [157, 21, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [161, 22, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [162, 43, 25, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 515091358], - [163, 43, 11, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1141326191], - [164, 43, 12, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3549528604], - [166, 7, 52, "Minitest/AssertKindOf: Prefer using `assert_kind_of(Consumer::NoEncryptionSession, session)`.", 1977489826], - [168, 10, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [168, 11, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [168, 11, 18, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 2290219986], - [169, 11, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [170, 11, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [170, 21, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3996287345], - [171, 11, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2380346415], - [171, 11, 27, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1404560870], - [171, 11, 29, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 558428987], - [171, 38, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [179, 22, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [180, 43, 25, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 515091358], - [181, 43, 11, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1141326191], - [182, 43, 12, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3549528604], - [184, 7, 52, "Minitest/AssertKindOf: Prefer using `assert_kind_of(Consumer::NoEncryptionSession, session)`.", 1977489826], - [185, 20, 126, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1439057918], - [185, 46, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [185, 47, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [185, 47, 21, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 2463901841], - [185, 57, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3996287345], - [186, 47, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2380346415], - [186, 47, 27, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1404560870], - [186, 74, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [186, 79, 4, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 2087569090], - [191, 22, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [192, 43, 25, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 515091358], - [193, 43, 11, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1141326191], - [194, 43, 12, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3549528604], - [196, 7, 57, "Minitest/AssertKindOf: Prefer using `assert_kind_of(Consumer::DiffieHellmanSHA1Session, session)`.", 1237980873], - [200, 43, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1302701622], - [201, 32, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1302701622], - [205, 44, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [205, 45, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [205, 45, 21, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 2463901841], - [205, 55, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3996287345], - [206, 45, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [206, 63, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [207, 45, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2380346415], - [207, 45, 27, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1404560870], - [207, 72, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [208, 7, 28, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3018016448], - [214, 39, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [214, 40, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1853815741], - [214, 59, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [219, 8, 2, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 5858789], - [219, 8, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [220, 8, 4, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2085266362], - [220, 8, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085266362], - [221, 8, 4, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2085250132], - [221, 8, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085250132], - [222, 8, 3, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 193339909], - [222, 8, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193339909], - [223, 8, 6, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 3115122221], - [223, 8, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3115122221], - [224, 8, 10, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 1822601811], - [224, 8, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1822601811], - [225, 8, 5, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 94328198], - [226, 8, 17, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2827476328], - [226, 8, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2827476328], - [226, 8, 17, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 2827476328], - [232, 10, 1, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 177557], - [233, 10, 1, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 177556], - [234, 10, 4, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2085879588], - [235, 10, 7, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 1740037692], - [236, 10, 2, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 5859332], - [245, 53, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 354627053], - [250, 58, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4043085327], - [251, 7, 56, "Minitest/AssertKindOf: Prefer using `assert_kind_of(Consumer::DiffieHellmanSHA256Session, sess)`.", 2905640449], - [251, 7, 56, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2905640449], - [258, 12, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [265, 56, 5, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 195037722], - [265, 63, 11, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 4189021428], - [266, 56, 6, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1544116833], - [266, 64, 10, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 478984755], - [268, 9, 24, "ThreadSafety/ClassAndModuleAttributes: Avoid mutating class and module attributes.", 2990482522], - [271, 15, 10, "ThreadSafety/InstanceVariableInClassMethod: Avoid instance variables in class methods.", 1640279285], - [287, 5, 6, "Naming/ConstantName: Use SCREAMING_SNAKE_CASE for constants.", 2713853249], - [290, 21, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 450853529], - [297, 26, 45, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1960889003], - [305, 25, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [305, 26, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [305, 26, 29, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 473866675], - [305, 37, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4177803720], - [306, 26, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1835655055], - [306, 42, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3832253317], - [307, 26, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [307, 26, 36, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2034060325], - [307, 44, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 32253951], - [307, 62, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [309, 26, 30, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3432157201], - [309, 26, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3432157201], - [310, 26, 130, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2260067405], - [310, 77, 1, "Layout/LineContinuationSpacing: Use one space in front of backslash.", 177657], - [311, 26, 52, "Layout/LineEndStringConcatenationIndentation: Indent the first part of a string concatenated with backslash.", 1218829677], - [311, 26, 52, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1218829677], - [319, 25, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [319, 26, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [319, 26, 29, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 473866675], - [319, 37, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4177803720], - [320, 26, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1835655055], - [320, 42, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3832253317], - [321, 26, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2380346415], - [321, 26, 32, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 358940837], - [321, 42, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1413051212], - [321, 58, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [323, 26, 30, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3432157201], - [323, 26, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3432157201], - [324, 26, 130, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2260067405], - [324, 77, 1, "Layout/LineContinuationSpacing: Use one space in front of backslash.", 177657], - [325, 26, 52, "Layout/LineEndStringConcatenationIndentation: Indent the first part of a string concatenated with backslash.", 1218829677], - [325, 26, 52, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1218829677], - [338, 25, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [338, 26, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [338, 26, 29, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 473866675], - [338, 37, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4177803720], - [339, 26, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1835655055], - [339, 42, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3832253317], - [340, 26, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2380346415], - [340, 42, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3424883397], - [341, 26, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [341, 26, 31, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 4087413599], - [341, 44, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3424883397], - [341, 57, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [343, 26, 30, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3432157201], - [343, 26, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3432157201], - [344, 26, 51, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2590182195], - [344, 26, 51, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2590182195], - [352, 25, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [352, 26, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [352, 26, 29, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 473866675], - [352, 37, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4177803720], - [353, 26, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1835655055], - [353, 42, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3832253317], - [354, 26, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2380346415], - [354, 42, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [355, 26, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [355, 26, 27, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 162450869], - [355, 44, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [355, 53, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [357, 31, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 310091503], - [357, 41, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3505321043], - [357, 69, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [359, 26, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3432157201], - [367, 25, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [367, 26, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [367, 26, 29, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 473866675], - [367, 37, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4177803720], - [368, 26, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1835655055], - [368, 42, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3832253317], - [369, 26, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2380346415], - [369, 42, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [370, 26, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [370, 26, 27, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 162450869], - [370, 44, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [370, 53, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [372, 26, 30, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3432157201], - [372, 26, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3432157201], - [373, 26, 31, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2196551010], - [381, 31, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 310091503], - [381, 41, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3505321043], - [381, 69, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [399, 5, 6, "Naming/ConstantName: Use SCREAMING_SNAKE_CASE for constants.", 2713853249], - [402, 21, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 450853529], - [407, 26, 45, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1960889003], - [409, 9, 20, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2911369585], - [414, 25, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [414, 26, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [414, 26, 29, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 473866675], - [414, 37, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4177803720], - [415, 26, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1835655055], - [415, 42, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3832253317], - [416, 26, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [416, 26, 36, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2034060325], - [416, 44, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 32253951], - [416, 62, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [418, 26, 45, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1960889003], - [420, 9, 20, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2911369585], - [425, 25, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [425, 26, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [425, 26, 29, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 473866675], - [425, 37, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4177803720], - [426, 26, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1835655055], - [426, 42, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3832253317], - [427, 26, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2380346415], - [427, 26, 32, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 358940837], - [427, 42, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1413051212], - [427, 58, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [429, 26, 45, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1960889003], - [431, 9, 20, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2911369585], - [441, 25, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [441, 26, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [441, 26, 29, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 473866675], - [441, 37, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4177803720], - [442, 26, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1835655055], - [442, 42, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3832253317], - [443, 26, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2380346415], - [443, 42, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3424883397], - [444, 26, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [444, 26, 31, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 4087413599], - [444, 44, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3424883397], - [444, 57, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [446, 26, 45, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1960889003], - [448, 9, 20, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2911369585], - [453, 25, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [453, 26, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [453, 26, 29, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 473866675], - [453, 37, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4177803720], - [454, 26, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1835655055], - [454, 42, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3832253317], - [455, 26, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2380346415], - [455, 42, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [456, 26, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [456, 26, 27, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 162450869], - [456, 44, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [456, 53, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [458, 31, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 310091503], - [458, 41, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3505321043], - [458, 69, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [460, 26, 45, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1960889003], - [462, 9, 20, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2911369585], - [467, 31, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 310091503], - [467, 41, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3505321043], - [467, 69, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [470, 9, 29, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 813416791], - [480, 7, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1853815741], - [480, 23, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3116022756], - [481, 7, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [481, 25, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 118406318], - [482, 7, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2380346415], - [482, 23, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 791031356], - [483, 7, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [483, 7, 34, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3515029592], - [483, 25, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2258589442], - [505, 29, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 624304330], - [516, 9, 63, "Style/InvertibleUnlessCondition: Prefer `if ns == OPENID1_NS or name == 'missing_session_type'` over `unless ns != OPENID1_NS and name != 'missing_session_type'`.", 152372073], - [516, 38, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [516, 50, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2126107015], - [527, 23, 14, "Performance/StringIdentifierArgument: Use `:\"test_#{name}\"` instead of `\"test_#{name}\"`.", 1858721710], - [544, 9, 53, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 3499488584], - [554, 23, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [558, 29, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 166675591], - [563, 6, 33, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 284396585], - [563, 7, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [563, 24, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [564, 6, 40, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 129370435], - [564, 7, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [564, 18, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [565, 6, 42, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 493846883], - [565, 7, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4043085327], - [565, 20, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [566, 6, 40, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 3317814691], - [566, 7, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [566, 24, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [567, 6, 36, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 561757225], - [567, 7, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [567, 18, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4043085327], - [568, 6, 36, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 1540363945], - [568, 7, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4043085327], - [568, 20, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [569, 6, 40, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 3321165344], - [569, 6, 40, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 3321165344], - [569, 7, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [569, 24, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [581, 40, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1853815741], - [581, 40, 22, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 3406163359], - [581, 56, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3116022756], - [582, 40, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [582, 58, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 118406318], - [583, 40, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2380346415], - [583, 56, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [584, 40, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1359404130], - [584, 40, 21, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2613221521], - [584, 53, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193337597], - [585, 38, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [589, 7, 38, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 326416219], - [589, 20, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 118406318], - [590, 20, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [592, 7, 30, "Minitest/AssertOperator: Prefer using `assert_operator('X', :*, 20, assoc.secret)`.", 2602735311], - [592, 7, 30, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal('X' * 20, assoc.secret)`?", 2602735311], - [592, 14, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193337597], - [599, 18, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 450853529], - [606, 12, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [608, 7, 26, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2916323182], - [611, 48, 25, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 4126302520], - [612, 48, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1236122734], - [613, 78, 1, "Layout/LineContinuationSpacing: Use one space in front of backslash.", 177657], - [614, 24, 37, "Layout/LineEndStringConcatenationIndentation: Indent the first part of a string concatenated with backslash.", 267694270], - [614, 24, 37, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 267694270], - [614, 61, 1, "Layout/LineContinuationSpacing: Use one space in front of backslash.", 177657], - [615, 64, 1, "Layout/LineContinuationSpacing: Use one space in front of backslash.", 177657], - [617, 7, 71, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 318245961], - [620, 6, 29, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 310355104], - [620, 7, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91878542], - [620, 14, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [621, 6, 30, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 149025013], - [621, 7, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1168718992], - [621, 16, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [621, 33, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [622, 6, 33, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 1242709499], - [622, 7, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 721645693], - [622, 18, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [622, 29, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [623, 6, 39, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2601783003], - [623, 6, 39, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 2601783003], - [623, 7, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4187990237], - [623, 20, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4043085327], - [623, 33, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4043085327], - [628, 21, 14, "Performance/StringIdentifierArgument: Use `:\"test_#{name}\"` instead of `\"test_#{name}\"`.", 1858721710], - [634, 17, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [634, 34, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [642, 18, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 450853529], - [645, 23, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2065679424], - [648, 21, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [650, 23, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2001088788], - [655, 36, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1853815741], - [655, 36, 22, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 3406163359], - [655, 52, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3116022756], - [656, 36, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [657, 36, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2380346415], - [658, 36, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [659, 36, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [659, 36, 18, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2290219986], - [660, 34, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [663, 11, 49, "ThreadSafety/ClassAndModuleAttributes: Avoid mutating class and module attributes.", 211023675], - [670, 21, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3190639583], - [686, 27, 20, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2419795508], - [687, 27, 15, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3411488468], - [687, 44, 14, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 847819849], - [691, 5, 312, "Minitest/MultipleAssertions: Test case has too many assertions [5/3].", 75079858], - [693, 7, 44, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1830324732], - [704, 29, 33, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 241401847], - [709, 42, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1853815741], - [709, 56, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1952920922], - [710, 29, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3277377612], - [717, 14, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193338589], - [724, 35, 25, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 515091358], - [725, 35, 11, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 389098948], - [725, 35, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [725, 48, 9, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 4235576623], - [725, 48, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [728, 44, 5, "Performance/StringIdentifierArgument: Use `:@dh` instead of `'@dh'`.", 90311657], - [728, 44, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 90311657], - [730, 42, 23, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 217329996], - [731, 42, 14, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 274358536], - [731, 58, 6, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 3372013299], - [734, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2061968077], - [735, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1001558037], - [736, 9, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2380346415], - [736, 25, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [737, 9, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [737, 27, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 310091503], - [738, 9, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1853815741], - [738, 25, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3116022756], - [739, 9, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [739, 9, 27, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 162450869], - [739, 27, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [741, 19, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [748, 7, 17, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1970104094], - [748, 7, 17, "Minitest/RefuteFalse: Prefer using `refute(ret.nil?)`.", 1970104094], - [749, 20, 27, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 3149731823], - [749, 36, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [751, 20, 20, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 753136612], - [751, 32, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 310091503], - [752, 20, 18, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 2200906390], - [758, 44, 21, "Performance/StringIdentifierArgument: Use `:@compatibility_mode` instead of `'@compatibility_mode'`.", 4195595287], - [758, 44, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4195595287], - [764, 38, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1001558037], - [765, 29, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1514618186], - [778, 21, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 450853529], - [782, 32, 8, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 310091503], - [782, 32, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 310091503], - [782, 42, 8, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 3505321043], - [782, 42, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3505321043], - [782, 52, 8, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 3003142632], - [782, 62, 6, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 3783842155], - [783, 32, 11, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 389098948], - [783, 32, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [792, 7, 42, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 451410349], - [798, 7, 24, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2448203515], - [802, 7, 52, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 597826187], - [806, 7, 34, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 436262237], - [812, 7, 52, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 597826187], - [818, 33, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [821, 7, 287, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 303370780], - [822, 28, 39, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2189277160], - [823, 40, 20, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1306346024], - [823, 62, 11, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 389098948], - [823, 62, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [824, 40, 15, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 809518918], - [824, 40, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [825, 11, 19, "Minitest/AssertNil: Prefer using `assert_nil(result)`.", 2261710389], - [825, 11, 19, "Minitest/AssertPredicate: Prefer using `assert_predicate(result, :nil?)`.", 2261710389], - [825, 11, 19, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2261710389], - [836, 62, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 450853529], - [837, 21, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [838, 23, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [841, 30, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2380346415], - [841, 30, 27, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 1404560870], - [842, 30, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [843, 30, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [843, 48, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3897746176], - [844, 30, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1853815741], - [844, 46, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3116022756], - [845, 30, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1359404130], - [845, 30, 21, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2613221521], - [845, 43, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193337597], - [846, 28, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [864, 20, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3897746176], - [870, 35, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2380346415], - [871, 26, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 668382283], - [879, 35, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1853815741], - [879, 49, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 935703851], - [880, 26, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 52426656] - ], - "test/test_ax.rb:998212053": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4064548815], - [3, 9, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2920398136], - [4, 9, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2748495602], - [5, 9, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3427008040], - [6, 9, 33, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 246787047], - [11, 15, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 832170441], - [11, 15, 7, "ThreadSafety/MutableClassInstanceVariable: Freeze mutable objects assigned to class instance variables.", 832170441], - [32, 52, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [32, 53, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [32, 63, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 10234167], - [32, 78, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [33, 29, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [33, 30, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [33, 49, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [42, 7, 317, "Minitest/MultipleAssertions: Test case has too many assertions [5/3].", 2732559077], - [44, 20, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2042810206], + "test/test_accept.rb:753975107": [ + [31, 29, 2, "Style/AndOr: Use `||` instead of `or`.", 5861240] + ], + "test/test_association.rb:2828276446": [ + [237, 7, 41, "Minitest/RefuteFalse: Prefer using `refute(assoc.check_message_signature(m))`.", 1974080929], + [283, 7, 45, "Minitest/RefuteFalse: Prefer using `refute(neg.allowed?(\"HMAC-SHA1\", \"DH-SHA1\"))`.", 2533672708], + [284, 7, 51, "Minitest/RefuteFalse: Prefer using `refute(neg.allowed?(\"HMAC-SHA1\", \"no-encryption\"))`.", 124193517], + [285, 7, 49, "Minitest/RefuteFalse: Prefer using `refute(neg.allowed?(\"HMAC-SHA256\", \"DH-SHA256\"))`.", 969984580], + [286, 7, 53, "Minitest/RefuteFalse: Prefer using `refute(neg.allowed?(\"HMAC-SHA256\", \"no-encryption\"))`.", 3634276237], + [291, 7, 49, "Minitest/RefuteFalse: Prefer using `refute(neg.allowed?(\"HMAC-SHA256\", \"DH-SHA256\"))`.", 969984580], + [292, 7, 53, "Minitest/RefuteFalse: Prefer using `refute(neg.allowed?(\"HMAC-SHA256\", \"no-encryption\"))`.", 3634276237], + [298, 7, 53, "Minitest/RefuteFalse: Prefer using `refute(neg.allowed?(\"HMAC-SHA256\", \"no-encryption\"))`.", 3634276237], + [327, 7, 69, "Minitest/RefuteFalse: Prefer using `refute(EncryptedNegotiator.allowed?(\"HMAC-SHA256\", \"no-encryption\"))`.", 4209870257] + ], + "test/test_associationmanager.rb:4037134692": [ + [163, 9, 31, "ThreadSafety/ClassAndModuleAttributes: Avoid mutating class and module attributes.", 4153333934], + [301, 9, 24, "ThreadSafety/ClassAndModuleAttributes: Avoid mutating class and module attributes.", 2990482522], + [304, 15, 10, "ThreadSafety/InstanceVariableInClassMethod: Avoid instance variables in class methods.", 1640279285], + [320, 5, 6, "Naming/ConstantName: Use SCREAMING_SNAKE_CASE for constants.", 2713853249], + [450, 5, 6, "Naming/ConstantName: Use SCREAMING_SNAKE_CASE for constants.", 2713853249], + [581, 9, 63, "Style/InvertibleUnlessCondition: Prefer `if ns == OPENID1_NS or name == \"missing_session_type\"` over `unless ns != OPENID1_NS and name != \"missing_session_type\"`.", 479520905], + [581, 38, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [609, 9, 53, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 3499488584], + [737, 11, 49, "ThreadSafety/ClassAndModuleAttributes: Avoid mutating class and module attributes.", 211023675], + [768, 5, 313, "Minitest/MultipleAssertions: Test case has too many assertions [5/3].", 1298333944], + [833, 7, 17, "Minitest/RefuteFalse: Prefer using `refute(ret.nil?)`.", 1970104094] + ], + "test/test_ax.rb:453134826": [ + [11, 15, 7, "ThreadSafety/MutableClassInstanceVariable: Freeze mutable objects assigned to class instance variables.", 480804425], + [42, 7, 317, "Minitest/MultipleAssertions: Test case has too many assertions [5/3].", 2981613125], [49, 9, 35, "Minitest/RefuteFalse: Prefer using `refute(ainfo.required)`.", 2720445676], - [60, 15, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [62, 11, 22, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(uris)`.", 1923563010], - [62, 11, 22, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1923563010], - [68, 37, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 804983478], - [73, 15, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 804983478], - [74, 16, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3966420134], - [77, 9, 25, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2143931148], - [81, 16, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 804983478], - [82, 17, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3966420134], - [85, 16, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 724954885], - [86, 17, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155872226], - [89, 62, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340297], - [90, 9, 32, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3181680333], - [98, 9, 37, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3522106008], - [113, 19, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [113, 20, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 733901397], - [113, 34, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129887376], - [113, 43, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [117, 19, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [117, 20, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 733901397], - [117, 34, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129887376], - [117, 45, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1524397422], - [117, 60, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340532], - [117, 63, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [123, 37, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [123, 38, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 733901397], - [123, 38, 23, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 696671459], - [123, 52, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129887376], - [124, 38, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1524397422], - [124, 38, 22, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3734497697], - [124, 53, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 832170441], - [124, 60, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [130, 17, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [130, 18, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [130, 18, 25, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 3921293207], - [130, 28, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 10234167], - [131, 18, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2815981804], - [131, 32, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [132, 18, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 733901397], - [132, 32, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129887376], - [133, 18, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1524397422], - [133, 18, 31, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2998728133], - [133, 49, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [136, 9, 41, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 657293818], - [137, 9, 35, "Minitest/AssertPredicate: Prefer using `assert_predicate(foo, :wants_unlimited_values?)`.", 2954238777], - [142, 16, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193338589], - [146, 29, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129887376], - [147, 30, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340532], - [148, 11, 28, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1798815044], - [148, 32, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 977786847], - [151, 9, 39, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4015480015], - [151, 23, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 977786847], - [151, 37, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129887376], - [157, 11, 12, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 1280361256], - [160, 12, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [160, 13, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 734001950], - [160, 13, 23, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 2973455816], - [160, 27, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129887376], - [161, 13, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1524706597], - [161, 13, 18, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 4269221175], - [161, 28, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340532], - [161, 31, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [162, 12, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [162, 13, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 734004124], - [162, 13, 23, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 3357318538], - [162, 27, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129887376], - [163, 13, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1524704423], - [163, 13, 18, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2803959157], - [163, 13, 20, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 4084742824], - [163, 28, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340532], - [163, 31, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [166, 22, 1, "Layout/ExtraSpacing: Unnecessary spacing detected.", 177541], - [175, 12, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [175, 13, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 733901397], - [175, 13, 23, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 696671459], - [175, 27, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129887376], - [176, 13, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1524397422], - [176, 13, 18, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1591744381], - [176, 28, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340437], - [176, 31, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [177, 11, 19, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 4072185395], - [177, 12, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [177, 13, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129887376], - [177, 28, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [183, 12, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [183, 13, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 733901397], - [183, 13, 23, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 696671459], - [183, 27, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129887376], - [184, 13, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4202872454], - [184, 13, 17, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2715084965], - [184, 28, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [184, 30, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [185, 11, 19, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 4072185395], - [185, 12, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [185, 13, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129887376], - [185, 28, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [191, 12, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [191, 13, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 733901397], - [191, 13, 23, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 696671459], - [191, 27, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129887376], - [192, 13, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4202872454], - [192, 28, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [193, 13, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 734038306], - [193, 27, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129887376], - [194, 13, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4203006257], - [194, 13, 17, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1335694866], - [194, 28, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [194, 30, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [195, 11, 10, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 3499928963], - [201, 12, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [201, 13, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 733901397], - [201, 13, 23, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 696671459], - [201, 27, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129887376], - [202, 13, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4202872454], - [202, 28, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [203, 13, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 734038306], - [203, 27, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129736743], - [204, 13, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4203006257], - [204, 13, 17, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1335694866], - [204, 28, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [204, 30, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [205, 11, 36, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 3989899096], - [205, 12, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [205, 13, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129887376], - [205, 30, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129736743], - [205, 45, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [211, 12, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [211, 13, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 733901397], - [211, 13, 23, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 696671459], - [211, 27, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129887376], - [212, 13, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4202872454], - [212, 13, 26, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2259794381], - [212, 28, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2412293261], - [212, 39, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [213, 11, 30, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 2531599483], - [213, 12, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [213, 13, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129887376], - [213, 27, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2412293261], - [213, 39, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [221, 19, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3251873265], - [222, 19, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193337892], - [226, 22, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 10234167], - [229, 7, 262, "Minitest/MultipleAssertions: Test case has too many assertions [4/3].", 174762134], - [230, 9, 43, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(@msg.requested_attributes)`.", 4159619496], - [233, 32, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1840586718], - [234, 9, 42, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(msg.requested_attributes)`.", 782729000], - [234, 9, 42, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 782729000], - [235, 22, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1840586718], - [239, 15, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1201620719], - [241, 9, 26, "Minitest/RefuteFalse: Prefer using `refute(@msg.member?(uri))`.", 4033074256], - [244, 9, 25, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1024255377], - [248, 15, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1375609605], - [255, 23, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [256, 9, 52, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1730668256], - [264, 26, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 238200392], - [268, 30, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [268, 42, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1511391955], - [273, 28, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [273, 29, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1511391955], - [273, 29, 29, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 1899731898], - [274, 29, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4289251244], - [274, 29, 23, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3955101608], - [274, 52, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [278, 26, 26, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 443301374], - [278, 26, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 443301374], - [279, 26, 11, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2771978150], - [279, 26, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2771978150], - [281, 28, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [281, 29, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1511391955], - [281, 29, 34, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 716224134], - [282, 29, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4289251244], - [282, 29, 28, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3858558004], - [282, 57, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [286, 26, 26, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 443301374], - [286, 26, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 443301374], - [287, 26, 11, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2771978150], - [287, 26, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2771978150], - [288, 26, 4, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2087932467], - [290, 28, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [290, 29, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1511391955], - [290, 29, 34, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 716224134], - [291, 29, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2815981804], - [291, 29, 24, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1485978868], - [291, 53, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [295, 9, 41, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(@msg.get_required_attrs)`.", 3808127895], - [300, 11, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [300, 21, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 10234167], - [301, 11, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1511391955], - [301, 11, 28, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 4281089988], - [306, 7, 553, "Minitest/MultipleAssertions: Test case has too many assertions [7/3].", 1232560028], - [308, 11, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [308, 21, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 10234167], - [309, 11, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1511391955], - [310, 11, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4289251244], - [310, 11, 25, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3548423094], - [313, 9, 29, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1718280057], - [316, 9, 26, "Minitest/AssertKindOf: Prefer using `assert_kind_of(AttrInfo, ai)`.", 3856014535], - [316, 9, 26, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3856014535], - [317, 9, 20, "Minitest/RefuteFalse: Prefer using `refute(ai.required)`.", 3437055720], - [325, 11, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [325, 21, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 10234167], - [326, 11, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1511391955], - [327, 11, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4289251244], - [327, 11, 25, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3548423094], - [330, 9, 43, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1584778433], - [331, 9, 52, "Minitest/RefuteFalse: Prefer using `refute(@msg.requested_attributes[@type_a].required)`.", 2345955159], - [336, 11, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [336, 21, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 10234167], - [337, 11, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1511391955], - [338, 11, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 269067912], - [338, 33, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340375], - [339, 11, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2815981804], - [339, 11, 21, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3215310454], - [342, 9, 43, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1584778433], - [348, 11, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [348, 21, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 10234167], - [349, 11, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1511391955], - [350, 11, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 269067912], - [350, 33, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340532], - [351, 11, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4289251244], - [351, 11, 25, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3548423094], - [354, 11, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [354, 21, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 10234167], - [355, 11, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1511391955], - [356, 11, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4289251244], - [356, 11, 25, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3548423094], - [359, 9, 48, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 102566528], - [367, 9, 19, "Minitest/AssertNil: Prefer using `assert_nil(ax_req)`.", 2099275804], - [367, 9, 19, "Minitest/AssertPredicate: Prefer using `assert_predicate(ax_req, :nil?)`.", 2099275804], - [367, 9, 19, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2099275804], - [371, 15, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1243689806], - [372, 16, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3029522364], - [373, 17, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3327842902], - [376, 54, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [376, 54, 18, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 248562579], - [376, 64, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [377, 54, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [378, 54, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1304033295], - [379, 54, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3001394999], - [379, 73, 38, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3584414324], - [380, 54, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3252387569], - [380, 67, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2289977748], - [381, 54, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3605399460], - [382, 54, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1080767135], - [382, 76, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340532], - [383, 54, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3972363319], - [383, 54, 34, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 239701415], - [383, 75, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085261018], - [384, 52, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [388, 9, 19, "Minitest/AssertNil: Prefer using `assert_nil(ax_req)`.", 2099275804], - [388, 9, 19, "Minitest/AssertPredicate: Prefer using `assert_predicate(ax_req, :nil?)`.", 2099275804], - [388, 9, 19, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2099275804], - [393, 53, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [393, 53, 25, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 2607646422], - [393, 63, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [394, 53, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [395, 53, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1442212370], - [395, 64, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1592175288], - [396, 53, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1304033295], - [397, 53, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3001394999], - [397, 72, 28, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 854788005], - [398, 53, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3252387569], - [398, 53, 28, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3371330272], - [398, 66, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 10234167], - [399, 51, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [409, 53, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [409, 53, 25, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 2607646422], - [409, 63, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [410, 53, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [411, 53, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1304033295], - [412, 53, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3001394999], - [412, 72, 28, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 854788005], - [413, 53, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3252387569], - [413, 53, 28, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3371330272], - [413, 66, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 10234167], - [414, 51, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [424, 53, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [424, 53, 25, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 2607646422], - [424, 63, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [425, 53, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [426, 53, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1442212370], - [426, 64, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1592175288], - [427, 53, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1304033295], - [428, 53, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3001394999], - [428, 72, 38, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3584414324], - [429, 53, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3252387569], - [429, 53, 28, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3371330272], - [429, 66, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 10234167], - [430, 51, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [434, 9, 30, "Minitest/AssertKindOf: Prefer using `assert_kind_of(FetchRequest, fr)`.", 4079076683], - [434, 9, 30, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4079076683], - [439, 53, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [439, 53, 25, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 2607646422], - [439, 63, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [440, 53, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [441, 53, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 322569067], - [441, 68, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1592175288], - [442, 53, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1304033295], - [443, 53, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3001394999], - [443, 72, 38, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3584414324], - [444, 53, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3252387569], - [444, 53, 28, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3371330272], - [444, 66, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 10234167], - [445, 51, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [449, 9, 30, "Minitest/AssertKindOf: Prefer using `assert_kind_of(FetchRequest, fr)`.", 4079076683], - [449, 9, 30, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4079076683], - [454, 53, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [454, 53, 25, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 2607646422], - [454, 63, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [455, 53, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [456, 53, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 322569067], - [456, 53, 41, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 959747093], - [456, 68, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1592175288], - [457, 51, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [464, 29, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1939718458], - [469, 11, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [469, 21, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 10234167], - [470, 11, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4289251244], - [470, 29, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3029522364], - [471, 11, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2744304266], - [471, 11, 26, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3713556342], - [471, 26, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1939718458], - [475, 11, 61, "Minitest/AssertEqual: Prefer using `assert_equal(openid_req.message.get_arg(AXMessage::NS_URI, k), v)`.", 3555178750], - [475, 11, 61, "Minitest/AssertOperator: Prefer using `assert_operator(openid_req.message.get_arg(AXMessage::NS_URI, k), :==, v)`.", 3555178750], - [483, 20, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3414814182], - [484, 21, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1065822204], - [485, 19, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1565928318], - [486, 19, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 594902712], - [487, 31, 34, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2663590179], - [492, 9, 27, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(@msg.data)`.", 410552280], - [497, 11, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [497, 11, 26, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1667082309], - [497, 21, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2879878949], - [499, 9, 44, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3267008100], - [504, 11, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [504, 11, 26, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1667082309], - [504, 21, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2879878949], - [507, 9, 49, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1616519587], - [511, 15, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3043092869], - [512, 16, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3029522364], - [514, 11, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [514, 21, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2879878949], - [515, 11, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1511391955], - [516, 11, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 269067912], - [516, 11, 22, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 220877111], - [516, 30, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340437], - [520, 9, 49, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1616519587], - [524, 15, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3043092869], - [525, 16, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3029522364], - [527, 11, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [527, 21, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2879878949], - [528, 11, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4053342112], - [529, 11, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1511391955], - [530, 11, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 269067912], - [530, 11, 22, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 220877111], - [530, 30, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340437], - [534, 9, 49, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1616519587], - [541, 11, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [541, 21, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2879878949], - [542, 11, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1511391955], - [543, 11, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1065821536], - [543, 11, 30, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1504438596], - [548, 9, 49, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1616519587], - [555, 11, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [555, 21, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2879878949], - [556, 11, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1511391955], - [557, 11, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1065821536], - [557, 32, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085261018], - [558, 11, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1065821536], - [558, 32, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085261113], - [559, 11, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 269067912], - [559, 11, 25, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3363414859], - [559, 33, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340375], - [567, 9, 49, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1616519587], - [578, 9, 48, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2531944719], - [591, 15, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1243689806], - [592, 16, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3029522364], - [593, 17, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3327842902], - [596, 48, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [596, 48, 18, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 248562579], - [596, 58, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [597, 48, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [598, 48, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1304033295], - [599, 48, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3001394999], - [599, 67, 38, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3584414324], - [600, 48, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3252387569], - [600, 61, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2879878949], - [601, 48, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3605399460], - [602, 48, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1080767135], - [602, 70, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340532], - [603, 48, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3972363319], - [603, 48, 34, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 239701415], - [603, 69, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085261018], - [604, 46, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [612, 9, 29, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2988317452], - [616, 15, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1243689806], - [617, 16, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3029522364], - [618, 17, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3327842902], - [620, 11, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [620, 21, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [621, 11, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [622, 11, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1304033295], - [623, 11, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3001394999], - [623, 30, 38, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3584414324], - [624, 11, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3252387569], - [624, 24, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2879878949], - [625, 11, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3605399460], - [626, 11, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1080767135], - [626, 33, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340532], - [627, 11, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3972363319], - [627, 11, 34, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 239701415], - [627, 32, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085261018], - [638, 9, 29, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2988317452], - [642, 15, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1243689806], - [643, 16, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3029522364], - [644, 17, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3327842902], - [647, 48, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [647, 48, 18, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 248562579], - [647, 58, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [648, 48, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [649, 48, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1304033295], - [650, 48, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3001394999], - [650, 67, 38, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3584414324], - [651, 48, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3252387569], - [651, 61, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2879878949], - [652, 48, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3605399460], - [653, 48, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1080767135], - [653, 70, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340532], - [654, 48, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3972363319], - [654, 48, 34, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 239701415], - [654, 69, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085261018], - [655, 46, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [660, 9, 58, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1011061467], - [665, 47, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [665, 48, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [665, 58, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [665, 66, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [668, 9, 20, "Minitest/AssertNil: Prefer using `assert_nil(ax_resp)`.", 977858510], - [668, 9, 20, "Minitest/AssertPredicate: Prefer using `assert_predicate(ax_resp, :nil?)`.", 977858510], - [668, 9, 20, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 977858510], - [675, 19, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1670049094], - [676, 19, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2980390710], - [680, 9, 27, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(@msg.data)`.", 410552280], - [685, 11, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [685, 11, 25, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 673885940], - [685, 21, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2289977748], - [687, 9, 44, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3267008100], - [691, 15, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1243689806], - [692, 16, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3029522364], - [693, 17, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3327842902], - [696, 54, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [696, 54, 18, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 248562579], - [696, 64, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [697, 54, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [698, 54, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1304033295], - [699, 54, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3001394999], - [699, 73, 38, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3584414324], - [700, 54, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3252387569], - [700, 67, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 10234167], - [701, 54, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3605399460], - [702, 54, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1080767135], - [702, 76, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340532], - [703, 54, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3972363319], - [703, 54, 34, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 239701415], - [703, 75, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085261018], - [704, 52, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [708, 9, 19, "Minitest/AssertNil: Prefer using `assert_nil(ax_req)`.", 2099275804], - [708, 9, 19, "Minitest/AssertPredicate: Prefer using `assert_predicate(ax_req, :nil?)`.", 2099275804], - [708, 9, 19, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2099275804], - [716, 11, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [716, 21, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2289977748], - [717, 11, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1511391955], - [718, 11, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1065821536], - [718, 32, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085261018], - [718, 40, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [719, 11, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1065821536], - [719, 32, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085261113], - [719, 40, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [720, 11, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 269067912], - [720, 11, 25, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3363414859], - [720, 33, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340375], - [722, 9, 53, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 715657157], - [729, 9, 22, "Minitest/AssertPredicate: Prefer using `assert_predicate(msg, :succeeded?)`.", 2361315725], - [729, 9, 22, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2361315725], - [730, 9, 26, "Minitest/RefuteFalse: Prefer using `refute(msg.error_message)`.", 3132408732], - [731, 22, 38, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 702321308], - [731, 23, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [731, 24, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [731, 34, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 128040026], - [731, 58, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [732, 22, 22, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 39959482], - [737, 9, 23, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 527737196], - [737, 9, 23, "Minitest/RefuteFalse: Prefer using `refute(msg.succeeded?)`.", 527737196], - [738, 9, 26, "Minitest/RefuteFalse: Prefer using `refute(msg.error_message)`.", 3132408732], - [739, 22, 38, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 589518463], - [739, 23, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [739, 24, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [739, 34, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2231038713], - [739, 58, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [740, 22, 22, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 39959482], - [744, 18, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4140515081], - [746, 9, 23, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 527737196], - [746, 9, 23, "Minitest/RefuteFalse: Prefer using `refute(msg.succeeded?)`.", 527737196], - [748, 22, 57, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 755513452], - [748, 23, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [748, 24, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [748, 34, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2231038713], - [748, 60, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [748, 77, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [749, 22, 22, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 39959482] - ], - "test/test_checkid_request.rb:3181476264": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 33, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 246787047], - [3, 9, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2920398136], - [4, 9, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1192794327], - [5, 9, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3046940385], - [11, 45, 9, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 1186898464], - [11, 56, 11, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 1499292878], - [12, 23, 17, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1315904953], - [12, 42, 11, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 763240358], - [35, 32, 28, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3556767251], - [36, 34, 28, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1439813565], - [37, 34, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 577111635], - [39, 20, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3343583840], - [40, 24, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3454663621], - [46, 42, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [47, 42, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 794246204], - [51, 18, 27, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 201319342], - [52, 18, 58, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3492294928], - [56, 11, 40, "Minitest/AssertNil: Prefer using `assert_nil(msg.get_arg(OPENID_NS, key))`.", 1491741623], - [56, 11, 40, "Minitest/AssertPredicate: Prefer using `assert_predicate(msg.get_arg(OPENID_NS, key), :nil?)`.", 1491741623], - [61, 73, 1, "Layout/LineContinuationSpacing: Use one space in front of backslash.", 177657], - [62, 25, 43, "Layout/LineEndStringConcatenationIndentation: Indent the first part of a string concatenated with backslash.", 1304133911], - [63, 11, 42, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2480698047], - [74, 11, 95, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1030961435], - [74, 24, 19, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2039428508], - [75, 24, 37, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3084676180], - [78, 42, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [89, 46, 8, "Performance/StringIdentifierArgument: Use `:@assoc` instead of `'@assoc'`.", 2940950504], - [89, 46, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2940950504], - [90, 36, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1199179425], - [93, 41, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [97, 42, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3018052059], - [97, 50, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 788245688], - [97, 59, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 838773347], - [98, 42, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3018052059], - [98, 50, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3530184846], - [98, 62, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1363195027], - [99, 11, 55, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 409337681], - [99, 58, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3018052059], - [100, 24, 37, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 310610829], - [100, 24, 107, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 1113605159], - [100, 54, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3018052059], - [101, 24, 45, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 439366537], - [101, 25, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [101, 26, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 788245688], - [101, 37, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 838773347], - [101, 46, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3530184846], - [101, 60, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1363195027], - [101, 67, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [103, 36, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1199179425], - [111, 11, 53, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2027585796], - [111, 24, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 838773347], - [111, 43, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3803001432], - [112, 24, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1363195027], - [112, 43, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1825333230], - [116, 36, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1199179425], - [125, 13, 38, "Minitest/AssertOperator: Prefer using `assert_operator(url.length, :<, OPENID1_URL_LIMIT)`.", 1899165077], - [125, 13, 38, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1899165077], - [128, 27, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3111616268], - [130, 13, 38, "Minitest/AssertOperator: Prefer using `assert_operator(url.length, :>, OPENID1_URL_LIMIT)`.", 2569842007], - [130, 13, 38, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2569842007], - [133, 13, 30, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 97380905], - [146, 11, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [156, 42, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1442212370], - [157, 41, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 137463464], - [161, 54, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [162, 53, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 794246204], - [176, 36, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1199179425], - [186, 36, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1199179425], - [195, 36, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1199179425], - [203, 36, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1199179425], - [206, 41, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [222, 11, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [227, 42, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [228, 41, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 794246204], - [232, 41, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 794246204], - [233, 42, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [239, 42, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 137463464], - [240, 41, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1442212370], - [260, 36, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1199179425], - [264, 24, 17, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3640066673], - [265, 24, 35, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2104949854], - [265, 48, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [275, 11, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3232603392], - [279, 13, 35, "Naming/ClassAndModuleCamelCase: Use CamelCase for classes and modules.", 4259957932], - [285, 11, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3232603392] - ], - "test/test_consumer.rb:3042093981": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1192794327], - [3, 9, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3337961901], - [14, 11, 27, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3475187669], - [16, 11, 27, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3475187669], - [19, 11, 14, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1424197095], - [24, 36, 10, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 3408531532], - [24, 48, 9, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 320676721], - [25, 23, 22, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 166761937], - [25, 47, 16, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 988400250], - [25, 65, 8, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 1050921666], - [28, 36, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085230842], - [29, 25, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3529252716], - [55, 11, 47, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1725211459], - [56, 24, 88, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1812662217], - [56, 25, 40, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2620721662], - [56, 65, 1, "Layout/LineContinuationSpacing: Use one space in front of backslash.", 177657], - [57, 25, 20, "Layout/LineEndStringConcatenationIndentation: Indent the first part of a string concatenated with backslash.", 3900563010], - [57, 25, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3900563010], - [57, 48, 19, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 3752794404], - [88, 25, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3808043744], - [111, 11, 43, "Minitest/AssertInstanceOf: Prefer using `assert_instance_of(CheckIDRequest, result)`.", 1020889370], - [111, 11, 43, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1020889370], - [130, 24, 28, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2552768381], - [131, 24, 32, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 896245067], - [145, 11, 36, "Minitest/AssertEmpty: Prefer using `assert_empty(result.return_to_args)`.", 3826612051], - [145, 11, 36, "Minitest/AssertPredicate: Prefer using `assert_predicate(result.return_to_args, :empty?)`.", 3826612051], - [153, 11, 36, "Minitest/AssertEmpty: Prefer using `assert_empty(result.return_to_args)`.", 3826612051], - [153, 11, 36, "Minitest/AssertPredicate: Prefer using `assert_predicate(result.return_to_args, :empty?)`.", 3826612051], - [164, 41, 95, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2514658741], - [164, 42, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [164, 43, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [164, 43, 25, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 1167825989], - [165, 43, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [165, 43, 22, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2224151445], - [165, 60, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456002], - [165, 65, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [165, 69, 3, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 193419246], - [166, 11, 38, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4167381184], - [170, 42, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [170, 43, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [170, 68, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [171, 11, 38, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4167381184], - [175, 42, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [175, 43, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [175, 60, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4176286499], - [175, 68, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [176, 11, 37, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 97734950], - [180, 42, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [180, 43, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [180, 60, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2136724950], - [180, 74, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [181, 11, 38, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4167381184], - [185, 23, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2767921482], - [186, 19, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [186, 20, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [186, 47, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [186, 64, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2136724950], - [186, 80, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3657948047], - [186, 116, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [188, 11, 43, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 60732691], - [193, 23, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2767921482], - [195, 13, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3657948047], - [196, 13, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [196, 13, 25, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3771358084], - [196, 30, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [199, 11, 43, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 60732691], - [204, 21, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085198093], - [205, 23, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2143133061], - [207, 13, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [207, 30, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [208, 13, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3886244786], - [209, 13, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 18241689], - [209, 13, 31, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2232191921], - [212, 11, 38, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4167381184], - [216, 16, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [218, 11, 38, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4167381184], - [225, 13, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [225, 13, 25, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3771358084], - [225, 30, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [245, 11, 56, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1493079945], - [249, 27, 39, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3961404958], - [254, 11, 38, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4167381184] - ], - "test/test_cryptutil.rb:2395176984": [ - [1, 11, 10, "Style/MagicCommentFormat: Prefer lowercase for magic comment values.", 4204254942], - [3, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [4, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3933002043], - [5, 9, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1702461967], - [12, 5, 26, "Minitest/AssertKindOf: Prefer using `assert_kind_of(Integer, BIG)`.", 1456198392], - [18, 5, 24, "Minitest/AssertKindOf: Prefer using `assert_kind_of(Integer, a)`.", 329751157], - [18, 5, 24, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 329751157], - [19, 5, 24, "Minitest/AssertKindOf: Prefer using `assert_kind_of(Integer, b)`.", 488978486], - [28, 5, 18, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2004725069], - [34, 11, 33, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 4097964054], - [35, 7, 23, "Minitest/AssertKindOf: Prefer using `assert_kind_of(String, s)`.", 2574677460], - [35, 7, 23, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2574677460], - [37, 7, 33, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 330900324], - [50, 7, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2988554761], - [50, 7, 65, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3457944154], - [54, 7, 28, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1323461861], - [61, 30, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3020570357], - [61, 38, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1227294489], - [90, 5, 27, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3821171663], - [92, 5, 27, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3299416908], - [97, 46, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085169938], - [98, 5, 28, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2082736757], - [102, 18, 53, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3423110767], - [103, 18, 27, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 4099484488], - [103, 41, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193338589], - [107, 18, 55, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2178984275], - [108, 18, 37, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3205997572], - [108, 46, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193338589], - [108, 51, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193338589], - [112, 18, 94, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 4267546724], - [113, 18, 29, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2339760104], - [113, 43, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193338589], - [117, 18, 92, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1531176], - [118, 18, 39, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2742990692], - [118, 48, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193338589], - [118, 53, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193338589] - ], - "test/test_dh.rb:2561778968": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1192794327], - [3, 9, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847734175], + [253, 7, 255, "Minitest/MultipleAssertions: Test case has too many assertions [4/3].", 3054475557], + [266, 9, 26, "Minitest/RefuteFalse: Prefer using `refute(@msg.member?(uri))`.", 4033074256], + [295, 30, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [343, 7, 558, "Minitest/MultipleAssertions: Test case has too many assertions [7/3].", 3434206224], + [356, 9, 20, "Minitest/RefuteFalse: Prefer using `refute(ai.required)`.", 3437055720], + [371, 9, 52, "Minitest/RefuteFalse: Prefer using `refute(@msg.requested_attributes[@type_a].required)`.", 2345955159], + [790, 9, 26, "Minitest/RefuteFalse: Prefer using `refute(msg.error_message)`.", 3132408732], + [800, 9, 23, "Minitest/RefuteFalse: Prefer using `refute(msg.succeeded?)`.", 527737196], + [801, 9, 26, "Minitest/RefuteFalse: Prefer using `refute(msg.error_message)`.", 3132408732], + [812, 9, 23, "Minitest/RefuteFalse: Prefer using `refute(msg.succeeded?)`.", 527737196] + ], + "test/test_checkid_request.rb:2026687652": [ + [297, 13, 35, "Naming/ClassAndModuleCamelCase: Use CamelCase for classes and modules.", 4259957932] + ], + "test/test_dh.rb:1574551285": [ [7, 5, 81, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 1962538541], - [20, 17, 2, "Layout/ExtraSpacing: Unnecessary spacing detected.", 5858821], - [20, 24, 5, "Layout/ExtraSpacing: Unnecessary spacing detected.", 95016837], - [21, 10, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193337892], - [21, 14, 5, "Layout/ExtraSpacing: Unnecessary spacing detected.", 95016837], - [21, 20, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193337892], - [21, 24, 5, "Layout/ExtraSpacing: Unnecessary spacing detected.", 95016837], - [22, 10, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193337892], - [22, 14, 5, "Layout/ExtraSpacing: Unnecessary spacing detected.", 95016837], - [22, 24, 5, "Layout/ExtraSpacing: Unnecessary spacing detected.", 95016837], - [22, 30, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193337892], - [23, 10, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91636485], - [23, 16, 3, "Layout/ExtraSpacing: Unnecessary spacing detected.", 193341061], - [23, 28, 1, "Layout/ExtraSpacing: Unnecessary spacing detected.", 177541], - [23, 30, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91636485], - [24, 10, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193338589], - [24, 30, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193338589], - [25, 17, 2, "Layout/ExtraSpacing: Unnecessary spacing detected.", 5858821], - [25, 27, 2, "Layout/ExtraSpacing: Unnecessary spacing detected.", 5858821], - [26, 17, 2, "Layout/ExtraSpacing: Unnecessary spacing detected.", 5858821], - [26, 27, 2, "Layout/ExtraSpacing: Unnecessary spacing detected.", 5858821], - [27, 9, 28, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 270280839], - [27, 17, 2, "Layout/ExtraSpacing: Unnecessary spacing detected.", 5858821], - [27, 27, 2, "Layout/ExtraSpacing: Unnecessary spacing detected.", 5858821], - [30, 9, 78, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1847966569], - [30, 46, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 326052951], - [30, 78, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 326052951], - [36, 10, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [36, 14, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193337892], - [39, 9, 60, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 2698389154], - [39, 14, 4, "Layout/ExtraSpacing: Unnecessary spacing detected.", 2085287685], - [39, 64, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [52, 7, 30, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 80391962], - [59, 35, 22, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 3294173645], - [60, 35, 22, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 3294173645], - [61, 7, 31, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 638963779], - [72, 22, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4146858687], - [73, 32, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193339909], - [75, 9, 28, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3203257149], - [81, 7, 32, "Minitest/AssertPredicate: Prefer using `assert_predicate(dh, :using_default_values?)`.", 2308506574], - [81, 7, 32, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2308506574], - [83, 7, 33, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3432763311], - [83, 7, 33, "Minitest/RefuteFalse: Prefer using `refute(dh.using_default_values?)`.", 3432763311] - ], - "test/test_discover.rb:276855472": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1192794327], - [3, 9, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3046940385], - [4, 9, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2951987467], - [5, 9, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1906546608], - [6, 9, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3427008040], - [7, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2871107037], - [8, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2995095577], - [9, 9, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2920398136], - [10, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2569813655], - [23, 7, 23, "Minitest/AssertPredicate: Prefer using `assert_predicate(body, :nil?)`.", 547496276], - [23, 7, 23, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 547496276], - [31, 7, 12, "Style/SuperArguments: Call `super` without arguments and parentheses when the signature is identical.", 1081125640], - [34, 52, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2388311584], - [35, 52, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3043092869], - [36, 52, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 548693648], - [37, 52, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1459202587], - [38, 10, 147, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 2114437374], - [38, 38, 3, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 193360151], - [38, 43, 3, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 193419246], - [38, 48, 47, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 2001776290], - [38, 49, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [38, 50, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 171675229], - [38, 71, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4149884991], - [38, 93, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [39, 38, 22, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2231187983], - [39, 38, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2231187983], - [40, 10, 65, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 1415470631], - [40, 10, 66, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 3760857946], - [40, 52, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4149884991], - [55, 17, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2944992319], - [78, 20, 9, "Lint/InheritException: Inherit from `RuntimeError` instead of `Exception`.", 3513723378], - [86, 7, 12, "Style/SuperArguments: Call `super` without arguments and parentheses when the signature is identical.", 1081125640], - [92, 9, 16, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 4213398675], - [100, 27, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2840892634], - [115, 25, 33, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4225197456], - [117, 9, 38, "Minitest/AssertMatch: Prefer using `assert_match(e.to_s, 'Failed to fetch')`.", 983023043], - [117, 9, 38, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 983023043], - [117, 29, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1134446913], - [140, 17, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3522629037], - [141, 16, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [146, 50, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [146, 51, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1203671929], - [146, 74, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [154, 7, 12, "Style/SuperArguments: Call `super` without arguments and parentheses when the signature is identical.", 1081125640], - [155, 17, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 109117395], - [161, 23, 14, "Layout/ParameterAlignment: Use one level of indentation for parameters following the first line of a multi-line method definition.", 894147852], - [162, 23, 11, "Layout/ParameterAlignment: Use one level of indentation for parameters following the first line of a multi-line method definition.", 2404760888], - [163, 23, 24, "Layout/ParameterAlignment: Use one level of indentation for parameters following the first line of a multi-line method definition.", 2456542325], - [165, 20, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3669888374], - [166, 9, 19, "Minitest/RefuteFalse: Prefer using `refute(claimed_id)`.", 1240093182], - [167, 9, 17, "Minitest/RefuteFalse: Prefer using `refute(local_id)`.", 900303800], - [168, 9, 21, "Minitest/RefuteFalse: Prefer using `refute(s.claimed_id)`.", 3221811299], - [169, 9, 19, "Minitest/RefuteFalse: Prefer using `refute(s.local_id)`.", 2236738853], - [170, 9, 23, "Minitest/RefuteFalse: Prefer using `refute(s.get_local_id)`.", 579848844], - [171, 9, 29, "Minitest/RefuteFalse: Prefer using `refute(s.compatibility_mode)`.", 4108014984], - [173, 22, 21, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3025067649], - [174, 22, 21, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3390199144], - [181, 30, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 917910725], - [183, 9, 75, "Minitest/RefuteFalse: Prefer using `refute(s.used_yadis, 'Expected to use old-style discovery')`.", 4141706771], - [183, 16, 13, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2961409063], - [184, 16, 37, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3149819188], - [184, 16, 37, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3149819188], - [188, 9, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 94452107], - [189, 9, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 94452202], - [190, 9, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 94278985], - [191, 9, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3669888374], - [191, 9, 31, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 507470635], - [231, 19, 17, "Layout/ParameterAlignment: Use one level of indentation for parameters following the first line of a multi-line method definition.", 2810553898], - [244, 35, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3109879802], - [249, 7, 8, "Lint/UselessAssignment: Useless assignment to variable - `services`.", 907487467], - [249, 28, 12, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3522629037], - [249, 28, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3522629037], - [250, 28, 6, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3028237119], - [250, 28, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3028237119], - [250, 36, 1, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 177557], - [253, 9, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 785086186], - [254, 24, 39, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4122345380], - [255, 9, 1, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 177556], - [260, 9, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 187866998], - [264, 10, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 94452107], - [265, 9, 5, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 170962968], - [270, 17, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3488675989], - [273, 9, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 785086186], - [274, 24, 39, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2546470011], - [275, 9, 1, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 177559], - [280, 9, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 187866998], - [284, 10, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 94278985], - [285, 9, 5, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 170962968], - [290, 9, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 187866998], - [294, 10, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 94452107], - [295, 9, 5, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 170962968], - [300, 28, 11, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 785086186], - [300, 28, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 785086186], - [301, 28, 50, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2226023022], - [301, 43, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4080986586], - [302, 28, 1, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 177556], - [304, 21, 11, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 690359421], - [305, 21, 32, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 187866998], - [305, 21, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 187866998], - [306, 21, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 732701340], - [307, 21, 29, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1830371113], - [307, 21, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1830371113], - [308, 21, 3, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 193419246], - [309, 21, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1829329741], - [309, 22, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 94452107], - [310, 21, 5, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 170962968], - [316, 22, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 785086186], - [317, 29, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4080986586], - [322, 18, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1497574630], - [328, 21, 11, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 690359421], - [329, 21, 32, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 187866998], - [329, 21, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 187866998], - [330, 21, 11, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 549175785], - [331, 21, 29, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1830371113], - [331, 21, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1830371113], - [332, 21, 3, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 193419246], - [333, 21, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1829329741], - [333, 22, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 94452107], - [334, 21, 5, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 170962968], - [338, 28, 11, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 785086186], - [338, 28, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 785086186], - [339, 28, 51, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 4013671132], - [339, 43, 28, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 825574824], - [340, 28, 1, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 177556], - [342, 21, 11, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 690359421], - [343, 21, 32, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 187866998], - [343, 21, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 187866998], - [344, 21, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 732701340], - [345, 21, 29, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1830371113], - [345, 21, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1830371113], - [346, 21, 3, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 193419246], - [347, 21, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1830442831], - [347, 22, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 94278985], - [348, 21, 5, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 170962968], - [353, 9, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 785086186], - [354, 24, 35, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 559649613], - [355, 9, 1, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 177559], - [358, 21, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 94278985], - [358, 28, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 94452107], - [359, 23, 1, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 177622], - [360, 23, 32, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 187866998], - [360, 23, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 187866998], - [361, 23, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 732701340], - [362, 23, 29, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1830371113], - [362, 23, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1830371113], - [363, 23, 3, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 193419246], - [364, 23, 3, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 193474391], - [365, 23, 5, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 170962968], - [370, 34, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2175624954], - [371, 32, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 326052951], - [372, 28, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 785086186], - [374, 21, 11, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 690359421], - [375, 21, 32, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 187866998], - [375, 21, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 187866998], - [376, 21, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 732701340], - [377, 21, 29, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1830371113], - [377, 21, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1830371113], - [378, 21, 3, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 193419246], - [379, 21, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1829329741], - [379, 22, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 94452107], - [380, 21, 5, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 170962968], - [384, 17, 22, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1990526015], - [384, 17, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1990526015], - [385, 17, 57, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1580274600], - [385, 32, 34, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 811986716], - [386, 17, 1, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 177557], - [393, 28, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3043806936], - [393, 39, 22, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 1990526015], - [393, 39, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1990526015], - [394, 39, 57, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 1580274600], - [394, 39, 57, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 1580274600], - [394, 54, 34, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 811986716], - [396, 28, 11, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 785086186], - [396, 28, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 785086186], - [397, 28, 60, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2493700195], - [397, 43, 37, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3688496279], - [398, 28, 1, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 177556], - [400, 21, 11, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 690359421], - [401, 21, 32, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 187866998], - [401, 21, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 187866998], - [402, 21, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 732701340], - [403, 21, 29, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1830371113], - [403, 21, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1830371113], - [404, 21, 3, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 193419246], - [405, 21, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1829329741], - [405, 22, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 94452107], - [406, 21, 5, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 170962968], - [410, 28, 22, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1990526015], - [410, 28, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1990526015], - [411, 28, 60, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 355623723], - [411, 43, 37, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2415079391], - [412, 28, 1, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 177556], - [414, 21, 11, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 690359421], - [415, 21, 32, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 187866998], - [415, 21, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 187866998], - [416, 21, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 732701340], - [417, 21, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 732701340], - [418, 21, 3, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 193419246], - [419, 21, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1829330700], - [419, 22, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 94452202], - [420, 21, 4, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2087932467], - [424, 28, 22, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1990526015], - [424, 28, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1990526015], - [425, 28, 67, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3887176836], - [425, 43, 44, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2715785456], - [426, 28, 1, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 177556], - [428, 21, 11, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 690359421], - [429, 21, 32, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 187866998], - [429, 21, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 187866998], - [430, 21, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 732701340], - [431, 21, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 732701340], - [432, 21, 3, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 193419246], - [433, 21, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1830442831], - [433, 22, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 94278985], - [434, 21, 4, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2087932467], - [438, 28, 22, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1990526015], - [438, 28, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1990526015], - [439, 28, 55, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3435425082], - [439, 43, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2887826830], - [440, 28, 1, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 177556], - [442, 21, 11, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 690359421], - [443, 21, 32, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 187866998], - [443, 21, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 187866998], - [444, 21, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 732701340], - [445, 21, 29, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1830371113], - [445, 21, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1830371113], - [446, 21, 3, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 193419246], - [447, 21, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1830442831], - [447, 22, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 94278985], - [448, 21, 4, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2087932467], - [452, 28, 22, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1990526015], - [452, 28, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1990526015], - [453, 28, 52, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1224977559], - [453, 43, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2316622755], - [454, 28, 1, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 177556], - [456, 21, 11, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 690359421], - [457, 21, 32, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 187866998], - [457, 21, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 187866998], - [458, 21, 3, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 193419246], - [458, 26, 3, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 193419246], - [458, 31, 3, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 193419246], - [459, 21, 10, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3199036592], - [459, 22, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3669888374], - [460, 21, 4, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2087932467], - [465, 28, 22, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1990526015], - [465, 28, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1990526015], - [466, 28, 61, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2404502615], - [466, 43, 38, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2681998563], - [467, 28, 1, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 177556], - [469, 21, 11, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 690359421], - [470, 21, 32, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 187866998], - [470, 21, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 187866998], - [471, 21, 3, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 193419246], - [471, 26, 3, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 193419246], - [471, 31, 3, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 193419246], - [472, 21, 10, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3199036592], - [472, 22, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3669888374], - [473, 21, 4, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2087932467], - [478, 19, 22, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1990526015], - [478, 19, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1990526015], - [479, 19, 63, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 10858848], - [479, 34, 40, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1489600852], - [480, 19, 1, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 177556], - [485, 28, 22, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1990526015], - [485, 28, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1990526015], - [486, 28, 62, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1670963999], - [486, 43, 39, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 774170667], - [487, 28, 1, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 177556], - [489, 21, 11, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 690359421], - [490, 21, 32, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 187866998], - [490, 21, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 187866998], - [491, 21, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 732701340], - [492, 21, 29, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1830371113], - [492, 21, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1830371113], - [493, 21, 3, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 193419246], - [494, 21, 14, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2748667117], - [494, 22, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 94278985], - [494, 29, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 94452107], - [495, 21, 4, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2087932467], - [500, 19, 22, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1990526015], - [500, 19, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1990526015], - [501, 19, 75, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3487638247], - [501, 34, 52, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 611275283], - [502, 19, 1, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 177556], - [521, 19, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [522, 77, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], - [523, 33, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4227011157], - [526, 43, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340330], - [532, 17, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3522629037], - [533, 16, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [538, 35, 6, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2141063537], - [538, 43, 4, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 2087730517], - [539, 35, 27, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1638662663], - [539, 36, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [539, 37, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1203671929], - [539, 60, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [539, 64, 3, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 193422222], - [548, 7, 12, "Style/SuperArguments: Call `super` without arguments and parentheses when the signature is identical.", 1081125640], - [552, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [552, 22, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 636880821], - [552, 22, 140, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 3177629283], - [552, 36, 22, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 1990526015], - [552, 36, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1990526015], - [553, 36, 66, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2120400458], - [553, 36, 66, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 2120400458], - [553, 51, 43, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1203662910], - [554, 22, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3166134712], - [554, 40, 22, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 1990526015], - [554, 40, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1990526015], - [555, 40, 65, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2248360097], - [555, 40, 65, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 2248360097], - [555, 40, 66, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1181439132], - [555, 55, 42, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 627706709], - [555, 106, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [559, 41, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 636880821], - [561, 21, 11, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 690359421], - [562, 21, 32, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 187866998], - [562, 21, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 187866998], - [563, 21, 29, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3775940364], - [563, 41, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3410460824], - [564, 21, 29, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1830371113], - [564, 21, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1830371113], - [565, 21, 29, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3775940364], - [565, 41, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3410460824], - [566, 21, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1829330700], - [566, 22, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 94452202], - [567, 21, 4, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2087932467], - [568, 21, 9, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 636880821], - [568, 21, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 636880821], - [570, 21, 11, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 690359324], - [571, 21, 46, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3389913047], - [571, 21, 46, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3389913047], - [572, 21, 29, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3775940364], - [572, 41, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3410460824], - [573, 21, 31, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 548286958], - [573, 21, 31, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 548286958], - [574, 21, 29, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3775940364], - [574, 41, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3410460824], - [575, 21, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1829330700], - [575, 22, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 94452202], - [576, 21, 4, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2087932467], - [577, 21, 9, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 636880821], - [577, 21, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 636880821], - [581, 41, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2873963884], - [583, 21, 11, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 690359421], - [584, 21, 32, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 187866998], - [584, 21, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 187866998], - [585, 21, 29, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3775940364], - [585, 41, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3410460824], - [586, 21, 29, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1830371113], - [586, 21, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1830371113], - [587, 21, 29, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3775940364], - [587, 41, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3410460824], - [588, 21, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1829330700], - [588, 22, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 94452202], - [589, 21, 4, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2087932467], - [590, 21, 9, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 636880821], - [590, 21, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 636880821], - [592, 21, 11, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 690359324], - [593, 21, 46, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3389913047], - [593, 21, 46, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3389913047], - [594, 21, 29, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3775940364], - [594, 41, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3410460824], - [595, 21, 31, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 548286958], - [595, 21, 31, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 548286958], - [596, 21, 29, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3775940364], - [596, 41, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3410460824], - [597, 21, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1829330700], - [597, 22, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 94452202], - [598, 21, 4, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2087932467], - [599, 21, 9, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 636880821], - [599, 21, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 636880821], - [604, 43, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3166134712], - [605, 9, 23, "Minitest/AssertEmpty: Prefer using `assert_empty(services)`.", 1173104492], - [605, 9, 23, "Minitest/AssertPredicate: Prefer using `assert_predicate(services, :empty?)`.", 1173104492], - [605, 9, 23, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1173104492], - [613, 49, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3410460824], - [614, 51, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3410460824], - [615, 7, 66, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1284057323], - [615, 63, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3410460824], - [623, 7, 12, "Style/SuperArguments: Call `super` without arguments and parentheses when the signature is identical.", 1081125640], - [627, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [627, 22, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 636880821], - [627, 22, 135, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 3762372481], - [627, 36, 22, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 1990526015], - [627, 36, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1990526015], - [628, 36, 61, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2235769576], - [628, 36, 61, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 2235769576], - [628, 51, 38, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3393694428], - [628, 98, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [632, 41, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 636880821], - [633, 7, 55, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2822105475], - [633, 7, 55, "Minitest/RefuteFalse: Prefer using `refute(services.empty?, 'Expected services, got zero')`.", 2822105475], - [633, 32, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1040214983], - [634, 20, 22, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1331896354], - [634, 20, 89, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 418232694], - [635, 20, 46, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3389913047], - [635, 20, 46, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3389913047], - [641, 7, 12, "Style/SuperArguments: Call `super` without arguments and parentheses when the signature is identical.", 1081125640], - [645, 23, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 724954885], - [650, 23, 15, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 2548208505], - [651, 23, 15, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 3931244506], - [651, 23, 16, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 882049863], - [652, 23, 15, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 3931244506], - [653, 23, 15, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2548208505], - [653, 23, 17, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 450190105], - [662, 9, 36, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3361003049], - [673, 7, 35, "Minitest/RefuteFalse: Prefer using `refute(@endpoint.is_op_identifier)`.", 873861676], - [678, 7, 35, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 873861676], - [678, 7, 35, "Minitest/RefuteFalse: Prefer using `refute(@endpoint.is_op_identifier)`.", 873861676], - [683, 7, 35, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 873861676], - [683, 7, 35, "Minitest/RefuteFalse: Prefer using `refute(@endpoint.is_op_identifier)`.", 873861676], - [688, 7, 35, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 873861676], - [688, 7, 35, "Minitest/RefuteFalse: Prefer using `refute(@endpoint.is_op_identifier)`.", 873861676], - [693, 7, 34, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2861773325], - [697, 30, 15, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 2548208505], - [698, 30, 15, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 3931244506], - [698, 30, 15, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 3931244506], - [699, 7, 35, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 873861676], - [699, 7, 35, "Minitest/RefuteFalse: Prefer using `refute(@endpoint.is_op_identifier)`.", 873861676], - [703, 30, 15, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 2548208505], - [704, 30, 15, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 3931244506], - [705, 30, 19, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 4238333211], - [705, 30, 19, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 4238333211], - [706, 7, 34, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2861773325], - [712, 26, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2259650780], - [726, 7, 37, "Minitest/RefuteFalse: Prefer using `refute(@endpoint.compatibility_mode)`.", 1374481464], - [743, 7, 11, "Naming/VariableName: Use snake_case for variable names.", 2215990581], - [743, 42, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91120070], - [745, 7, 11, "Naming/VariableName: Use snake_case for variable names.", 2215974520], - [745, 42, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91008555], - [749, 52, 11, "Naming/VariableName: Use snake_case for variable names.", 2215974520], - [750, 54, 11, "Naming/VariableName: Use snake_case for variable names.", 2215990581], - [751, 24, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91008555], - [751, 47, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 859901937], - [752, 24, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91008555], - [752, 47, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3900123940], - [753, 24, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91120070], - [753, 47, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3059201737], - [754, 24, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91120070], - [754, 47, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2812889840], - [766, 8, 5, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 91610211], - [766, 8, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [767, 8, 15, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 4046276539], - [768, 8, 15, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 3931244506], - [769, 8, 15, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2548208505], - [770, 8, 19, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 4238333211], - [770, 8, 19, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 4238333211], - [772, 11, 81, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(@endpoint.supports_type(t), format('Must support %s', t))`?", 95999423], - [772, 18, 26, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2217721222], - [773, 18, 28, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 360082841], - [773, 25, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1550002083], - [775, 11, 87, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(!@endpoint.supports_type(t), format(\"Shouldn't support %s\", t))`?", 565335413], - [775, 11, 87, "Minitest/RefuteFalse: Prefer using `refute(@endpoint.supports_type(t), format(\"Shouldn't support %s\", t))`.", 565335413], - [775, 18, 27, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2571326855], - [776, 18, 33, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 88488242], - [792, 30, 19, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 4238333211], - [793, 30, 15, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2548208505], - [807, 30, 15, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 4046276539], - [808, 30, 15, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2548208505], - [808, 30, 15, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 2548208505], - [809, 30, 15, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 4046276539], - [810, 30, 15, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2548208505], - [814, 30, 15, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 4046276539], - [815, 30, 15, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2548208505], - [816, 30, 19, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 4238333211], - [816, 30, 19, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 4238333211], - [817, 30, 15, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 4046276539], - [818, 30, 15, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2548208505], - [819, 30, 19, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 4238333211], - [826, 30, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2057884295], - [827, 7, 69, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1302101538], - [827, 7, 69, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1302101538], - [827, 20, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3400679892], - [834, 30, 34, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3595439721] - ], - "test/test_discovery_manager.rb:315298276": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3337961901], - [3, 9, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1192794327], - [8, 23, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2072284162], - [9, 20, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2302635327], - [12, 58, 13, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2458119473], - [13, 58, 10, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 771198903], - [14, 58, 13, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 605384036], - [32, 7, 38, "Minitest/RefuteFalse: Prefer using `refute(@disco_services.for_url?(nil))`.", 603865808], - [33, 7, 44, "Minitest/RefuteFalse: Prefer using `refute(@disco_services.for_url?('invalid'))`.", 1657632970], - [33, 40, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3644585460], - [37, 7, 33, "Minitest/RefuteFalse: Prefer using `refute(@disco_services.started?)`.", 4092600212], - [39, 7, 32, "Minitest/AssertPredicate: Prefer using `assert_predicate(@disco_services, :started?)`.", 267902325], - [39, 7, 32, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 267902325], - [41, 7, 32, "Minitest/AssertPredicate: Prefer using `assert_predicate(@disco_services, :started?)`.", 267902325], - [41, 7, 32, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 267902325], - [43, 7, 33, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4092600212], - [43, 7, 33, "Minitest/RefuteFalse: Prefer using `refute(@disco_services.started?)`.", 4092600212], - [47, 7, 61, "Minitest/AssertEmpty: Prefer using `assert_empty(Consumer::DiscoveredServices.new(nil, nil, []))`.", 2026411797], - [47, 7, 61, "Minitest/AssertPredicate: Prefer using `assert_predicate(Consumer::DiscoveredServices.new(nil, nil, []), :empty?)`.", 2026411797], - [49, 7, 31, "Minitest/RefuteFalse: Prefer using `refute(@disco_services.empty?)`.", 151347072], - [54, 7, 32, "Minitest/AssertPredicate: Prefer using `assert_predicate(@disco_services, :started?)`.", 267902325], - [61, 5, 64, "Style/MissingRespondToMissing: When using `method_missing`, define `respond_to_missing?`.", 281345496], - [70, 14, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3604246711], - [71, 21, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 687875443], - [72, 20, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 466049418], - [80, 7, 60, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2881323096], - [80, 7, 60, "Minitest/RefuteFalse: Prefer using `refute(m.instance_variable_get('@session_key_suffix').nil?)`.", 2881323096], - [80, 39, 21, "Performance/StringIdentifierArgument: Use `:@session_key_suffix` instead of `'@session_key_suffix'`.", 1877800091], - [80, 39, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1877800091], - [82, 52, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1637612273], - [83, 7, 72, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2851020872], - [83, 20, 58, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 938433784], - [83, 44, 21, "Performance/StringIdentifierArgument: Use `:@session_key_suffix` instead of `'@session_key_suffix'`.", 1877800091], - [83, 44, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1877800091], - [83, 68, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1637612273], - [94, 7, 34, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3504332328], - [94, 20, 20, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 1614705176], - [94, 35, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91847809], - [95, 20, 19, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 2782662248], - [95, 34, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91847809], - [101, 20, 32, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 4208648948], - [101, 47, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92087849], - [102, 20, 34, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 452879222], - [102, 47, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1530396587], - [104, 7, 36, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 778344386], - [104, 20, 22, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 1328130418], - [104, 35, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1530396587], - [109, 23, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3023166795], - [113, 7, 36, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 376649296], - [113, 20, 22, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 2789446816], - [113, 36, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3023166795], - [123, 10, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3393071065], - [137, 7, 28, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4012397391], - [142, 7, 37, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2619799968], - [142, 20, 23, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 1538216752], - [142, 38, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91847809], - [147, 21, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085211091], - [150, 55, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1316400827], - [163, 20, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1316400827], - [169, 24, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 832170441], - [170, 7, 49, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3273880133], - [170, 20, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 832170441], - [173, 67, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91847809], - [175, 7, 41, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 305279532], - [178, 49, 26, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2320481983], - [178, 49, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2320481983], - [179, 49, 25, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3788493985], - [179, 49, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3788493985], - [179, 76, 7, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 1924192519], - [179, 77, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91847809], - [181, 7, 32, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3966878101], - [186, 7, 27, "Minitest/AssertNil: Prefer using `assert_nil(@session[@key])`.", 1272841747], - [186, 7, 27, "Minitest/AssertPredicate: Prefer using `assert_predicate(@session[@key], :nil?)`.", 1272841747], - [192, 7, 42, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4032471369], - [195, 20, 28, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 2797186198], - [195, 39, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1144547333], - [207, 7, 19, "Minitest/AssertNil: Prefer using `assert_nil(result)`.", 2261710389], - [207, 7, 19, "Minitest/AssertPredicate: Prefer using `assert_predicate(result, :nil?)`.", 2261710389], - [207, 7, 19, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2261710389], - [208, 7, 27, "Minitest/AssertNil: Prefer using `assert_nil(@session[@key])`.", 1272841747], - [208, 7, 27, "Minitest/AssertPredicate: Prefer using `assert_predicate(@session[@key], :nil?)`.", 1272841747], - [216, 73, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3036105047], - [217, 56, 22, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 865916723], - [217, 56, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 865916723], - [218, 56, 27, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3754071943], - [218, 56, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3754071943], - [219, 56, 8, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2905354993], - [219, 57, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3036105047], - [223, 7, 27, "Minitest/AssertNil: Prefer using `assert_nil(@session[@key])`.", 1272841747], - [223, 7, 27, "Minitest/AssertPredicate: Prefer using `assert_predicate(@session[@key], :nil?)`.", 1272841747], - [223, 7, 27, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1272841747], - [227, 7, 43, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 917748266], - [231, 7, 27, "Minitest/AssertNil: Prefer using `assert_nil(@session[@key])`.", 1272841747], - [231, 7, 27, "Minitest/AssertPredicate: Prefer using `assert_predicate(@session[@key], :nil?)`.", 1272841747], - [231, 7, 27, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1272841747], - [236, 16, 53, "Layout/FirstArgumentIndentation: Indent the first argument one step more than the start of the previous line.", 3382928478], - [236, 16, 53, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 3382928478], - [236, 47, 21, "Performance/StringIdentifierArgument: Use `:@session_key_suffix` instead of `'@session_key_suffix'`.", 1877800091], - [236, 47, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1877800091], - [241, 15, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3062658746], - [242, 7, 27, "Minitest/AssertNil: Prefer using `assert_nil(@session[@key])`.", 1272841747], - [242, 7, 27, "Minitest/AssertPredicate: Prefer using `assert_predicate(@session[@key], :nil?)`.", 1272841747], - [242, 7, 27, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1272841747], - [244, 7, 35, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 173228842], - [248, 15, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3062658746], - [250, 7, 34, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 895759390], - [254, 15, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3062658746], - [256, 7, 34, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 895759390], - [258, 7, 27, "Minitest/AssertNil: Prefer using `assert_nil(@session[@key])`.", 1272841747], - [258, 7, 27, "Minitest/AssertPredicate: Prefer using `assert_predicate(@session[@key], :nil?)`.", 1272841747], - [258, 7, 27, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1272841747], - [259, 7, 26, "Minitest/AssertNil: Prefer using `assert_nil(@manager.load)`.", 1827108999], - [259, 7, 26, "Minitest/AssertPredicate: Prefer using `assert_predicate(@manager.load, :nil?)`.", 1827108999] - ], - "test/test_extension.rb:2855651568": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2850088810], - [3, 9, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2920398136], - [7, 16, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1015948479], - [8, 18, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 908829581], - [25, 7, 54, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3322503391], - [28, 9, 56, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 2090975631], - [30, 20, 26, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1847548107], - [31, 20, 46, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1953707571], - [39, 7, 55, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1478049918], - [39, 7, 55, "Minitest/RefuteFalse: Prefer using `refute(namespaces.implicit?(DummyExtension::TEST_URI))`.", 1478049918], - [42, 9, 56, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 2090975631], - [44, 20, 26, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1847548107], - [45, 20, 46, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1953707571] - ], - "test/test_fetchers.rb:2487649088": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 679062125], - [3, 9, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 976895910], - [4, 9, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1192794327], - [5, 9, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3046940385], - [6, 9, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2951987467], - [7, 9, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 209039958], - [10, 11, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 934211966], - [23, 5, 39, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 4213754095], - [24, 5, 39, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 3299874831], - [25, 5, 49, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 326244463], - [30, 14, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 832170441], - [41, 24, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3370555476], - [42, 25, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 511796379], - [47, 44, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1264728786], - [48, 20, 13, "Layout/ParameterAlignment: Use one level of indentation for parameters following the first line of a multi-line method definition.", 3118792408], - [48, 28, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 94452107], - [59, 8, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2897667817], - [60, 8, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1008273769], - [61, 8, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3621649451], - [62, 8, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1785807569], - [63, 8, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3949100114], - [64, 8, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 937006152], - [65, 8, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 298108482], - [65, 29, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2897667817], - [66, 8, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3323379297], - [66, 29, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2897667817], - [67, 8, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 288675584], - [67, 29, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2897667817], - [68, 7, 33, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 3727184956], - [68, 8, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4216042884], - [68, 29, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2897667817], - [74, 12, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1105879864], - [74, 37, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2897667817], - [81, 19, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1264728786], - [87, 7, 57, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 4143225396], - [88, 7, 45, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1580705770], - [88, 20, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4174453037], - [88, 39, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 860394976], - [94, 7, 39, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 3538985785], - [94, 20, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2998511773], - [95, 7, 35, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2029199834], - [103, 12, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1105879864], - [103, 37, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3216360115], - [105, 7, 57, "Minitest/AssertOperator: Prefer using `assert_operator(@_redirect_counter, :<, 10, 'Fetched too many times.')`.", 4225552770], - [105, 7, 57, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4225552770], - [105, 7, 57, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 4225552770], - [105, 39, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1641480383], - [117, 12, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1485943929], - [117, 30, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2101751492], - [125, 12, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1485943929], - [125, 30, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 785086186], - [126, 14, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 733600577], - [133, 12, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1485943929], - [133, 30, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4001032979], - [134, 14, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3505628293], - [146, 39, 7, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 4269900310], - [147, 39, 15, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 50753631], - [148, 39, 13, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1191369785], - [149, 22, 10, "ThreadSafety/NewThread: Avoid starting new threads.", 3411682361], - [150, 26, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2897667817], - [151, 26, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 298108482], - [152, 26, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3323379297], - [153, 26, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 288675584], - [154, 26, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4216042884], - [155, 26, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3621649451], - [156, 26, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1785807569], - [157, 26, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1008273769], - [158, 26, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3949100114], - [159, 26, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 937006152], - [160, 26, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1763722887], - [161, 26, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3550525586], - [163, 14, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1105879864], - [163, 39, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1763722887], - [165, 26, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3924864146], - [166, 26, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3216360115], - [167, 26, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2228087641], - [168, 26, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1653373887], - [169, 26, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2714771337], - [173, 5, 9, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 3965863974], - [176, 25, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340330], - [178, 27, 17, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 1792026482], - [178, 33, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1018961288], - [180, 27, 10, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3790250079], - [181, 25, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [208, 7, 41, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2490066218], - [210, 22, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1763722887], - [214, 5, 48, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 37095573], - [214, 18, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 94247383], - [219, 7, 41, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2490066218], - [221, 22, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3550525586], - [225, 5, 48, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 37095573], - [225, 18, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 94247383], - [229, 22, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3924864146], - [233, 5, 48, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 37095573], - [233, 18, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 94247383], - [238, 22, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3216360115], - [240, 27, 4, "Lint/UselessAssignment: Useless assignment to variable - `body`.", 2087730517], - [240, 39, 7, "Lint/UselessAssignment: Useless assignment to variable - `headers`.", 643017641], - [240, 54, 14, "Lint/UselessAssignment: Useless assignment to variable - `redirect_limit`.", 3383958005], - [245, 22, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2228087641], - [247, 5, 46, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1697927681], - [254, 22, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1653373887], - [256, 5, 45, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 384617280], - [256, 18, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 733600577], - [268, 22, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2714771337], - [270, 5, 49, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1539815172], - [270, 18, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3505628293], - [277, 5, 960, "Style/For: Prefer `each` over `for`.", 657325437], - [280, 7, 17, "Layout/IndentationWidth: Use 2 (not 17) spaces for indentation.", 2300919173], - [281, 22, 4, "Layout/ElseAlignment: Align `else` with `expected_url`.", 2087423834], - [283, 22, 3, "Layout/EndAlignment: `end` at 283, 21 is not aligned with `expected_url = if` at 279, 6.", 193405706], - [289, 9, 38, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 418973800], - [291, 27, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 94568688], - [321, 15, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3107493707], - [322, 7, 30, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1693193124], - [322, 13, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2944387327], - [324, 20, 66, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 2904753765], - [324, 28, 58, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2887634005], - [339, 15, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3913868777], - [353, 40, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3347929572], - [354, 5, 35, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1725276603], - [373, 42, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3347929572], - [376, 5, 25, "Minitest/AssertNil: Prefer using `assert_nil(conn.ca_file)`.", 2516667301], - [376, 5, 25, "Minitest/AssertPredicate: Prefer using `assert_predicate(conn.ca_file, :nil?)`.", 2516667301], - [388, 35, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 778972559], - [397, 7, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 203172771], - [401, 35, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 778972559], - [420, 15, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 212082712], - [439, 15, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 212082712], - [483, 15, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 212082712], - [497, 15, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 212082712], - [527, 15, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 212082712], - [538, 5, 53, "Minitest/AssertKindOf: Prefer using `assert_kind_of(OpenID::StandardFetcher, OpenID.fetcher)`.", 3391577287], - [544, 5, 59, "Minitest/AssertEqual: Prefer using `assert_equal(OpenID.fetch('not-a-url'), BogusFetcher::RESPONSE)`.", 3056821591], - [544, 5, 59, "Minitest/AssertOperator: Prefer using `assert_operator(OpenID.fetch('not-a-url'), :==, BogusFetcher::RESPONSE)`.", 3056821591], - [544, 25, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3428928858], - [548, 5, 53, "Minitest/AssertKindOf: Prefer using `assert_kind_of(OpenID::StandardFetcher, OpenID.fetcher)`.", 3391577287], - [548, 5, 53, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3391577287], - [555, 39, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3689154350], - [559, 15, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3040778792], - [562, 7, 6, "Minitest/ReturnInTestMethod: Use `skip` instead of `return`.", 2123913871], - [562, 17, 33, "Performance/RegexpMatch: Use `match?` instead of `=~` when `MatchData` is not used.", 2671838566], - [566, 5, 51, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4106286157], - [566, 5, 51, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 4106286157], - [566, 11, 45, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 817451863], - [570, 9, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1318580622], - [570, 25, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3952490545], - [574, 47, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1603650831], - [575, 5, 45, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1064158613], - [575, 18, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3689154350] - ], - "test/test_filters.rb:4212640425": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1192794327], - [3, 9, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2413211883], - [4, 9, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 53893767], - [5, 9, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 916562793], - [9, 5, 916, "Minitest/MultipleAssertions: Test case has too many assertions [8/3].", 3756493961], - [12, 16, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1939718458], - [12, 29, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 680669056], - [13, 19, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3207940878], - [19, 7, 47, "Minitest/AssertEqual: Prefer using `assert_equal(no_types_endpoint.match_types([]), [])`.", 201081095], - [19, 7, 47, "Minitest/AssertOperator: Prefer using `assert_operator(no_types_endpoint.match_types([]), :==, [])`.", 201081095], - [20, 7, 59, "Minitest/AssertEqual: Prefer using `assert_equal(no_types_endpoint.match_types(['urn:absent']), [])`.", 1410079131], - [20, 7, 59, "Minitest/AssertOperator: Prefer using `assert_operator(no_types_endpoint.match_types(['urn:absent']), :==, [])`.", 1410079131], - [20, 45, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1426442137], - [22, 7, 49, "Minitest/AssertEqual: Prefer using `assert_equal(some_types_endpoint.match_types([]), [])`.", 2116289682], - [22, 7, 49, "Minitest/AssertOperator: Prefer using `assert_operator(some_types_endpoint.match_types([]), :==, [])`.", 2116289682], - [23, 7, 61, "Minitest/AssertEqual: Prefer using `assert_equal(some_types_endpoint.match_types(['urn:absent']), [])`.", 1719751438], - [23, 7, 61, "Minitest/AssertOperator: Prefer using `assert_operator(some_types_endpoint.match_types(['urn:absent']), :==, [])`.", 1719751438], - [23, 47, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1426442137], - [24, 7, 55, "Minitest/AssertEqual: Prefer using `assert_equal(some_types_endpoint.match_types(types), types)`.", 26371506], - [24, 7, 55, "Minitest/AssertOperator: Prefer using `assert_operator(some_types_endpoint.match_types(types), :==, types)`.", 26371506], - [25, 7, 70, "Minitest/AssertEqual: Prefer using `assert_equal(some_types_endpoint.match_types([types[1], types[0]]), types)`.", 274462322], - [25, 7, 70, "Minitest/AssertOperator: Prefer using `assert_operator(some_types_endpoint.match_types([types[1], types[0]]), :==, types)`.", 274462322], - [26, 7, 65, "Minitest/AssertEqual: Prefer using `assert_equal(some_types_endpoint.match_types([types[0]]), [types[0]])`.", 469229682], - [26, 7, 65, "Minitest/AssertOperator: Prefer using `assert_operator(some_types_endpoint.match_types([types[0]]), :==, [types[0]])`.", 469229682], - [27, 7, 72, "Minitest/AssertEqual: Prefer using `assert_equal(some_types_endpoint.match_types(types + ['urn:absent']), types)`.", 2362494531], - [27, 7, 72, "Minitest/AssertOperator: Prefer using `assert_operator(some_types_endpoint.match_types(types + ['urn:absent']), :==, types)`.", 2362494531], - [27, 55, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1426442137], - [32, 18, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3393071065], - [35, 7, 98, "Minitest/AssertEqual: Prefer using `assert_equal(Yadis::BasicServiceEndpoint.from_basic_service_endpoint(endpoint), endpoint)`.", 1754948524], - [35, 7, 98, "Minitest/AssertOperator: Prefer using `assert_operator(Yadis::BasicServiceEndpoint.from_basic_service_endpoint(endpoint), :==, endpoint)`.", 1754948524], - [37, 7, 72, "Minitest/AssertEqual: Prefer using `assert_equal(e.from_basic_service_endpoint(endpoint), endpoint)`.", 4129746987], - [37, 7, 72, "Minitest/AssertOperator: Prefer using `assert_operator(e.from_basic_service_endpoint(endpoint), :==, endpoint)`.", 4129746987], - [44, 36, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3784266648], - [46, 29, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3003823453], - [49, 29, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91008555], - [55, 19, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2697248032], - [56, 13, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 861529542], - [57, 20, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1555163167], - [57, 33, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1555163324], - [73, 18, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3393071065], - [75, 7, 38, "Minitest/AssertNil: Prefer using `assert_nil(t.apply_filters(endpoint))`.", 2720526108], - [75, 7, 38, "Minitest/AssertPredicate: Prefer using `assert_predicate(t.apply_filters(endpoint), :nil?)`.", 2720526108], - [75, 7, 38, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2720526108], - [82, 18, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3393071065], - [83, 7, 38, "Minitest/AssertNil: Prefer using `assert_nil(t.apply_filters(endpoint))`.", 2720526108], - [83, 7, 38, "Minitest/AssertPredicate: Prefer using `assert_predicate(t.apply_filters(endpoint), :nil?)`.", 2720526108], - [83, 7, 38, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2720526108], - [91, 18, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3393071065], - [92, 7, 45, "Minitest/AssertEqual: Prefer using `assert_equal(t.apply_filters(endpoint), endpoint)`.", 3452878725], - [92, 7, 45, "Minitest/AssertOperator: Prefer using `assert_operator(t.apply_filters(endpoint), :==, endpoint)`.", 3452878725], - [92, 7, 45, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3452878725], - [98, 27, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 427213517], - [101, 18, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3393071065], - [102, 7, 54, "Minitest/AssertEqual: Prefer using `assert_equal(t.apply_filters(endpoint), returned_endpoint)`.", 2049925297], - [102, 7, 54, "Minitest/AssertOperator: Prefer using `assert_operator(t.apply_filters(endpoint), :==, returned_endpoint)`.", 2049925297], - [102, 7, 54, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2049925297], - [108, 20, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91850218], - [110, 21, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3029179133], - [121, 7, 42, "Minitest/AssertEqual: Prefer using `assert_equal(t.apply_filters(odd), odd_result)`.", 3396290035], - [121, 7, 42, "Minitest/AssertOperator: Prefer using `assert_operator(t.apply_filters(odd), :==, odd_result)`.", 3396290035], - [121, 7, 42, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3396290035], - [122, 7, 44, "Minitest/AssertEqual: Prefer using `assert_equal(t.apply_filters(even), even_result)`.", 4078926419], - [122, 7, 44, "Minitest/AssertOperator: Prefer using `assert_operator(t.apply_filters(even), :==, even_result)`.", 4078926419], - [139, 17, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1530851366], - [144, 9, 41, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 3531467300], - [148, 7, 58, "Minitest/AssertEqual: Prefer using `assert_equal(cf.get_service_endpoints('unused', 'unused'), all)`.", 4069255035], - [148, 7, 58, "Minitest/AssertOperator: Prefer using `assert_operator(cf.get_service_endpoints('unused', 'unused'), :==, all)`.", 4069255035], - [148, 7, 58, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4069255035], - [148, 7, 58, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 4069255035], - [148, 39, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3393071065], - [148, 49, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3393071065], - [155, 7, 48, "Minitest/AssertKindOf: Prefer using `assert_kind_of(Yadis::TransformFilterMaker, result)`.", 3041670560], - [155, 7, 48, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3041670560], - [155, 7, 48, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 3041670560], - [163, 7, 48, "Minitest/AssertKindOf: Prefer using `assert_kind_of(Yadis::TransformFilterMaker, result)`.", 3041670560], - [163, 7, 48, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3041670560], - [163, 7, 48, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 3041670560], - [164, 7, 73, "Minitest/AssertEqual: Prefer using `assert_equal(result.filter_procs[0], e1.method('from_basic_service_endpoint'))`.", 500847677], - [164, 7, 73, "Minitest/AssertOperator: Prefer using `assert_operator(result.filter_procs[0], :==, e1.method('from_basic_service_endpoint'))`.", 500847677], - [164, 7, 73, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 500847677], - [164, 50, 29, "Performance/StringIdentifierArgument: Use `:from_basic_service_endpoint` instead of `'from_basic_service_endpoint'`.", 1551624392], - [164, 50, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1551624392], - [165, 7, 73, "Minitest/AssertEqual: Prefer using `assert_equal(result.filter_procs[1], e2.method('from_basic_service_endpoint'))`.", 3552524639], - [165, 7, 73, "Minitest/AssertOperator: Prefer using `assert_operator(result.filter_procs[1], :==, e2.method('from_basic_service_endpoint'))`.", 3552524639], - [165, 7, 73, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 3552524639], - [165, 50, 29, "Performance/StringIdentifierArgument: Use `:from_basic_service_endpoint` instead of `'from_basic_service_endpoint'`.", 1551624392], - [165, 50, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1551624392], - [171, 7, 48, "Minitest/AssertKindOf: Prefer using `assert_kind_of(Yadis::TransformFilterMaker, result)`.", 3041670560], - [171, 7, 48, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3041670560], - [171, 7, 48, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 3041670560], - [178, 7, 30, "Minitest/AssertEqual: Prefer using `assert_equal(result.subfilters, [])`.", 1130885585], - [178, 7, 30, "Minitest/AssertOperator: Prefer using `assert_operator(result.subfilters, :==, [])`.", 1130885585], - [178, 7, 30, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1130885585], - [178, 7, 30, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1130885585], - [183, 7, 45, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2299389776], - [183, 7, 45, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2299389776], - [189, 7, 48, "Minitest/AssertKindOf: Prefer using `assert_kind_of(Yadis::TransformFilterMaker, result)`.", 3041670560], - [189, 7, 48, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3041670560], - [189, 7, 48, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 3041670560], - [194, 7, 60, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2921340448], - [194, 7, 60, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2921340448], - [194, 37, 29, "Performance/StringIdentifierArgument: Use `:from_basic_service_endpoint` instead of `'from_basic_service_endpoint'`.", 1551624392], - [194, 37, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1551624392], - [201, 7, 48, "Minitest/AssertKindOf: Prefer using `assert_kind_of(Yadis::TransformFilterMaker, result)`.", 3041670560], - [201, 7, 48, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3041670560], - [201, 7, 48, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 3041670560], - [205, 7, 38, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2341221211], - [216, 7, 42, "Minitest/AssertKindOf: Prefer using `assert_kind_of(Yadis::CompoundFilter, result)`.", 1799602205], - [216, 7, 42, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1799602205], - [217, 7, 36, "Minitest/AssertEqual: Prefer using `assert_equal(result.subfilters, [f1, f2])`.", 3203932606], - [217, 7, 36, "Minitest/AssertOperator: Prefer using `assert_operator(result.subfilters, :==, [f1, f2])`.", 3203932606], - [217, 7, 36, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 3203932606], - [220, 5, 755, "Minitest/MultipleAssertions: Test case has too many assertions [5/3].", 2440747337], - [232, 7, 42, "Minitest/AssertKindOf: Prefer using `assert_kind_of(Yadis::CompoundFilter, result)`.", 1799602205], - [232, 7, 42, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1799602205], - [234, 7, 33, "Minitest/AssertEqual: Prefer using `assert_equal(result.subfilters[0], f1)`.", 2632130614], - [234, 7, 33, "Minitest/AssertOperator: Prefer using `assert_operator(result.subfilters[0], :==, f1)`.", 2632130614], - [234, 7, 33, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2632130614], - [235, 7, 86, "Minitest/AssertEqual: Prefer using `assert_equal(result.subfilters[1].filter_procs[0], e.method('from_basic_service_endpoint'))`.", 3322215778], - [235, 7, 86, "Minitest/AssertOperator: Prefer using `assert_operator(result.subfilters[1].filter_procs[0], :==, e.method('from_basic_service_endpoint'))`.", 3322215778], - [235, 7, 86, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 3322215778], - [235, 63, 29, "Performance/StringIdentifierArgument: Use `:from_basic_service_endpoint` instead of `'from_basic_service_endpoint'`.", 1551624392], - [235, 63, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1551624392], - [236, 7, 87, "Minitest/AssertEqual: Prefer using `assert_equal(result.subfilters[2].filter_procs[0], f2.method('from_basic_service_endpoint'))`.", 2983250352], - [236, 7, 87, "Minitest/AssertOperator: Prefer using `assert_operator(result.subfilters[2].filter_procs[0], :==, f2.method('from_basic_service_endpoint'))`.", 2983250352], - [236, 7, 87, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2983250352], - [236, 64, 29, "Performance/StringIdentifierArgument: Use `:from_basic_service_endpoint` instead of `'from_basic_service_endpoint'`.", 1551624392], - [236, 64, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1551624392], - [237, 7, 49, "Minitest/AssertEqual: Prefer using `assert_equal(result.subfilters[2].filter_procs[1], f3)`.", 709519885], - [237, 7, 49, "Minitest/AssertOperator: Prefer using `assert_operator(result.subfilters[2].filter_procs[1], :==, f3)`.", 709519885], - [237, 7, 49, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 709519885], - [243, 14, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 832170441], - [243, 35, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 832170441] - ], - "test/test_idres.rb:1650360912": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1192794327], - [3, 9, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3046940385], - [4, 9, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1493934251], - [5, 9, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 395966781], - [6, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2754036930], - [7, 9, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3682152042], - [16, 9, 15, "Style/SingleLineMethods: Avoid single-line method definitions.", 460931552], - [23, 41, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 245860230], - [24, 41, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [28, 31, 14, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 1615061360], - [28, 46, 10, "Layout/MultilineArrayLineBreaks: Each item in a multi-line array must start on a separate line.", 2517626812], - [28, 57, 12, "Layout/MultilineArrayLineBreaks: Each item in a multi-line array must start on a separate line.", 4223563293], - [29, 31, 11, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2162137574], - [36, 34, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3666757975], - [36, 63, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340297], - [36, 87, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3666757975], - [42, 12, 2, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 5862883], - [43, 12, 7, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 1932037605], - [43, 13, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [44, 12, 11, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 734155001], - [44, 12, 11, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 734155001], - [48, 15, 53, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3330304394], - [58, 12, 39, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 1286312231], - [58, 13, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2149044557], - [59, 12, 40, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 213668630], - [59, 13, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2149044557], - [60, 12, 39, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 954026852], - [60, 12, 39, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 954026852], - [60, 13, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2149044590], - [71, 29, 41, "Performance/StringIdentifierArgument: Use `:\"test_#{i}_#{ver}_check_missing_#{field}\"` instead of `\"test_#{i}_#{ver}_check_missing_#{field}\"`.", 2082573537], - [78, 12, 55, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 2546590862], - [78, 13, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2149044557], - [79, 12, 56, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2541930495], - [79, 13, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2149044557], - [80, 12, 67, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 1950570660], - [80, 13, 9, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 2149044590], - [80, 13, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2149044590], - [80, 24, 10, "Layout/MultilineArrayLineBreaks: Each item in a multi-line array must start on a separate line.", 2385542796], - [80, 36, 14, "Layout/MultilineArrayLineBreaks: Each item in a multi-line array must start on a separate line.", 120341984], - [81, 13, 14, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 3747912675], - [81, 13, 15, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 3422033950], - [94, 29, 55, "Performance/StringIdentifierArgument: Use `:\"test_#{i}_#{ver}_check_missing_signed_#{signed_field}\"` instead of `\"test_#{i}_#{ver}_check_missing_signed_#{signed_field}\"`.", 1649943041], - [99, 9, 1687, "Minitest/MultipleAssertions: Test case has too many assertions [5/3].", 2633333981], - [100, 19, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [100, 20, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1325864746], - [100, 20, 63, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 2444755693], - [100, 45, 38, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4041942401], - [101, 20, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 789517483], - [101, 43, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1039290706], - [102, 20, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2749623588], - [102, 41, 28, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3952821122], - [103, 20, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [103, 37, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [104, 20, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [104, 35, 34, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1670302195], - [105, 20, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 350227365], - [105, 40, 45, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2108437785], - [106, 20, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 203138929], - [106, 44, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3128290302], - [107, 20, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 639074633], - [107, 51, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3032063535], - [108, 20, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3190715482], - [108, 47, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2465284971], - [109, 20, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1005119878], - [109, 53, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340437], - [110, 20, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2954082535], - [110, 47, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3718229702], - [111, 20, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 966247324], - [111, 42, 78, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2090979964], - [112, 20, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2419595695], - [112, 36, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3322422035], - [113, 20, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1399592960], - [113, 20, 153, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2278698032], - [113, 39, 134, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3220687478], - [113, 173, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [114, 11, 43, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1414655387], - [114, 29, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [116, 11, 27, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 860412032], - [120, 25, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [120, 42, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 45746588], - [122, 11, 27, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 21209496], - [130, 33, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2561153136], - [154, 13, 38, "Style/SingleLineMethods: Avoid single-line method definitions.", 4292271591], - [167, 34, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [167, 34, 25, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 3771358084], - [167, 51, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [168, 34, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 966247324], - [168, 56, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2064429562], - [169, 34, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [169, 34, 14, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1152280913], - [169, 43, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [170, 32, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [174, 27, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2182293065], - [175, 29, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [175, 29, 25, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 3771358084], - [175, 46, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [176, 29, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 966247324], - [176, 51, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 778972559], - [177, 29, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [177, 29, 14, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1152280913], - [177, 38, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [178, 27, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [182, 27, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2745045801], - [183, 29, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [183, 29, 25, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 3771358084], - [183, 46, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [184, 29, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 966247324], - [184, 29, 51, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3821938912], - [184, 51, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2064429562], - [185, 27, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [188, 29, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [188, 29, 25, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 3771358084], - [188, 46, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [189, 29, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 966247324], - [189, 51, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2064429562], - [190, 29, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [190, 29, 15, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3661401749], - [190, 38, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3023135536], - [191, 27, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [197, 23, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 38923297], - [200, 32, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [200, 40, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4176286499], - [201, 30, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [201, 37, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [208, 13, 31, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1060996402], - [210, 13, 38, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 640163262], - [212, 13, 36, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3687688452], - [214, 13, 31, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1284469395], - [215, 13, 31, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1301124627], - [215, 13, 31, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 1301124627], - [217, 34, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 322569067], - [226, 18, 33, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3152030653], - [227, 12, 10, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 2625157340], - [228, 12, 47, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2827422102], - [228, 20, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 83733816], - [228, 37, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [228, 38, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 317355086], - [228, 51, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91654033], - [228, 56, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [229, 12, 52, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 1044998663], - [229, 20, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3318704169], - [229, 42, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [229, 43, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 317355086], - [229, 56, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91654033], - [229, 61, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [230, 12, 26, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 442277761], - [230, 13, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2989198973], - [231, 12, 28, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 1737483483], - [231, 22, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91434820], - [231, 29, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 90394724], - [232, 12, 42, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2860076163], - [232, 13, 36, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2712329231], - [233, 12, 41, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 4140961490], - [233, 13, 35, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2444233950], - [234, 12, 41, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 3587599376], - [234, 12, 41, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 3587599376], - [234, 13, 35, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3126570844], - [235, 18, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 966247324], - [256, 34, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2474060695], - [258, 25, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1801837736], - [263, 47, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [263, 47, 25, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 3771358084], - [263, 64, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [264, 47, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2749623588], - [264, 68, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4000236688], - [265, 47, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2419595695], - [266, 47, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1325864746], - [267, 47, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1399592960], - [267, 66, 35, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1743392150], - [268, 47, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1275777835], - [268, 47, 21, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3327013346], - [268, 60, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1014285839], - [269, 45, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [284, 51, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2209910647], - [292, 39, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92008088], - [292, 46, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3008243614], - [293, 33, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2380884614], - [299, 39, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [299, 55, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2814598172], - [306, 11, 25, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1706602699], - [317, 11, 25, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1706602699], - [323, 33, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1020630014], - [335, 33, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1095760778], - [338, 45, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2450203155], - [357, 15, 134, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 82017048], - [373, 35, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2450203155], - [378, 40, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2450203155], - [394, 27, 41, "Performance/StringIdentifierArgument: Use `:\"test_create_check_auth_missing_#{field}\"` instead of `\"test_create_check_auth_missing_#{field}\"`.", 4083570117], - [401, 39, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [401, 47, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 45746588], - [402, 11, 30, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1353106467], - [412, 49, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1807068342], - [412, 49, 20, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 378977955], - [412, 49, 20, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 378977955], - [412, 63, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3039078867], - [413, 47, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [416, 25, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 450853529], - [431, 41, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1807068342], - [431, 53, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 967974776], - [439, 39, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 329410673], - [439, 60, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 142039096], - [444, 39, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 329410673], - [444, 60, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 142039096], - [446, 41, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1807068342], - [446, 53, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 967974776], - [457, 39, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 329410673], - [457, 60, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 142039096], - [458, 30, 30, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2576269534], - [459, 30, 38, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 424638109], - [472, 13, 31, "ThreadSafety/ClassAndModuleAttributes: Avoid mutating class and module attributes.", 406405732], - [475, 15, 7, "ThreadSafety/InstanceVariableInClassMethod: Avoid instance variables in class methods.", 764524831], - [476, 15, 8, "ThreadSafety/InstanceVariableInClassMethod: Avoid instance variables in class methods.", 2800675911], - [491, 12, 2, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 5861859], - [492, 12, 29, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2793276320], - [492, 13, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [492, 14, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [492, 39, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [493, 12, 30, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 3766369553], - [493, 12, 30, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 3766369553], - [493, 13, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [493, 14, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [493, 40, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [494, 31, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [494, 32, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1377421297], - [494, 52, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [499, 12, 2, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 5861859], - [500, 12, 29, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2793276320], - [500, 13, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [500, 14, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [500, 39, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [501, 12, 30, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 3766369553], - [501, 12, 30, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 3766369553], - [501, 13, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [501, 14, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [501, 40, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [502, 35, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2550229320], - [507, 33, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2550229320], - [508, 31, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [508, 32, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1377421297], - [508, 32, 20, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 4066386203], - [509, 32, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [509, 32, 25, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1167825989], - [509, 57, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [514, 28, 93, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2966214573], - [514, 29, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [514, 30, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2954082535], - [514, 30, 33, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 723221389], - [515, 30, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [515, 30, 25, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1167825989], - [515, 55, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [515, 59, 4, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 2087932467], - [519, 12, 2, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 5861859], - [520, 12, 29, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2793276320], - [520, 13, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [520, 14, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [520, 39, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [521, 12, 30, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 3766369553], - [521, 12, 30, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 3766369553], - [521, 13, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [521, 14, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [521, 40, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [522, 35, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2550229320], - [523, 33, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [523, 34, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2954082535], - [523, 67, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [530, 29, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [530, 30, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1377421297], - [530, 50, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [534, 33, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 475335373], - [535, 31, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [535, 32, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1377421297], - [535, 52, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [540, 33, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2218463995], - [541, 31, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [541, 32, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1377421297], - [541, 46, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1567638011], - [541, 53, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [572, 34, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 450853529], - [573, 11, 126, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 967284434], - [573, 40, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3993648688], - [573, 40, 92, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 65280189], - [573, 66, 1, "Layout/LineContinuationSpacing: Use one space in front of backslash.", 177657], - [574, 40, 25, "Layout/LineEndStringConcatenationIndentation: Indent the first part of a string concatenated with backslash.", 2076013982], - [574, 67, 2, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 5861859], - [580, 26, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [580, 27, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [580, 41, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2760345234], - [580, 60, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [586, 26, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3808043744], - [589, 52, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [589, 52, 18, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 1981564209], - [590, 52, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [590, 52, 24, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 875195209], - [591, 50, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [595, 40, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 414939563], - [606, 16, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3393071065], - [609, 32, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1414826366], - [615, 13, 48, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2476236265], - [620, 33, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3993648688], - [620, 59, 1, "Layout/LineContinuationSpacing: Use one space in front of backslash.", 177657], - [621, 33, 28, "Layout/LineEndStringConcatenationIndentation: Indent the first part of a string concatenated with backslash.", 3805699656], - [622, 26, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [622, 27, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [622, 45, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [627, 40, 36, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 110264665], - [627, 40, 36, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 110264665], - [628, 40, 170, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3410477327], - [628, 41, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [628, 42, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [628, 42, 18, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 2290219986], - [629, 42, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 245860230], - [629, 59, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 758930038], - [630, 42, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [630, 42, 33, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 319077384], - [630, 56, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1137243677], - [630, 75, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [635, 35, 38, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1316348278], - [636, 28, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [636, 29, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [636, 29, 18, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 2290219986], - [637, 29, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 245860230], - [637, 46, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 758930038], - [638, 29, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 794246204], - [638, 29, 32, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1615184088], - [638, 45, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2113128034], - [638, 61, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [643, 9, 413, "Minitest/MultipleAssertions: Test case has too many assertions [4/3].", 1481369174], - [644, 25, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 758930038], - [646, 26, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [646, 27, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [646, 27, 18, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 2290219986], - [647, 27, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 245860230], - [647, 27, 28, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2734484774], - [647, 55, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [651, 11, 39, "Minitest/AssertNil: Prefer using `assert_nil(result_endpoint.claimed_id)`.", 673432702], - [651, 11, 39, "Minitest/AssertPredicate: Prefer using `assert_predicate(result_endpoint.claimed_id, :nil?)`.", 673432702], - [656, 33, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1061815792], - [658, 39, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 879690588], - [659, 33, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [659, 34, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [659, 34, 18, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 2290219986], - [660, 34, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [660, 48, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2476417388], - [661, 34, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 794246204], - [661, 50, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1061815792], - [662, 34, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 245860230], - [662, 34, 29, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2311346102], - [662, 51, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 758930038], - [662, 63, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [672, 34, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3060818131], - [673, 32, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1082189443], - [676, 33, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1061815792], - [678, 39, 32, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1215101171], - [678, 39, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1215101171], - [679, 39, 22, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3293157154], - [679, 39, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3293157154], - [680, 33, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [680, 34, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [680, 34, 18, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 2290219986], - [681, 34, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [681, 48, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2476417388], - [682, 34, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 794246204], - [682, 50, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1061815792], - [683, 34, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 245860230], - [683, 34, 31, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 4185694723], - [683, 51, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2123753923], - [683, 65, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [689, 11, 31, "Minitest/AssertSame: Prefer using `assert_same(endpoint, result)`.", 810882736], - [694, 32, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3576882983], - [695, 34, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2421032754], - [696, 34, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 758930038], - [700, 33, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3646872497], - [705, 11, 38, "Minitest/AssertMatch: Prefer using `assert_match(/different subjects/, e.to_s)`.", 90467571], - [705, 11, 38, "Minitest/AssertOperator: Prefer using `assert_operator(e.to_s, :=~, /different subjects/)`.", 90467571], - [710, 32, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3576882983], - [711, 34, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2421032754], - [712, 34, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 758930038], - [716, 33, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2421032754], - [724, 32, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3576882983], - [725, 34, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2421032754], - [726, 34, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 758930038], - [730, 26, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [730, 27, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [730, 27, 18, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 2290219986], - [731, 27, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [732, 27, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 794246204], - [733, 27, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 245860230], - [733, 27, 37, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3264057753], - [733, 64, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [735, 11, 32, "Minitest/AssertSame: Prefer using `assert_same(result, @endpoint)`.", 181223632], - [738, 9, 1334, "Minitest/MultipleAssertions: Test case has too many assertions [4/3].", 2440956486], - [739, 18, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3956106481], - [742, 32, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3576882983], - [743, 34, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2338043999], - [744, 34, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 758930038], - [748, 43, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [748, 44, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [748, 44, 18, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 2290219986], - [749, 44, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [750, 44, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 794246204], - [752, 44, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 245860230], - [753, 44, 20, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2239386969], - [753, 64, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [762, 30, 32, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1215101171], - [762, 30, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1215101171], - [763, 30, 22, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3293157154], - [763, 30, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3293157154], - [771, 32, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3576882983], - [772, 34, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2421032754], - [773, 34, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 758930038], - [777, 26, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [777, 27, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [777, 27, 18, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 2290182001], - [778, 27, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [778, 27, 32, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3121728514], - [778, 59, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [780, 11, 32, "Minitest/AssertSame: Prefer using `assert_same(result, @endpoint)`.", 181223632], - [784, 38, 9, "Lint/InheritException: Inherit from `RuntimeError` instead of `Exception`.", 3513723378], - [786, 32, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3576882983], - [787, 34, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2338043999], - [788, 34, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 758930038], - [791, 30, 32, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1215101171], - [791, 30, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1215101171], - [792, 30, 22, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3293157154], - [792, 30, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3293157154], - [794, 35, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [794, 36, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [794, 36, 18, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 2290182001], - [795, 36, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [795, 36, 32, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3121728514], - [795, 68, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [805, 24, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1561452039], - [806, 42, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1497574630], - [808, 32, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3576882983], - [810, 34, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 758930038], - [814, 26, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [814, 27, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [814, 27, 18, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 2290219986], - [815, 27, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [816, 27, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 794246204], - [817, 27, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 245860230], - [817, 27, 37, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3264057753], - [817, 64, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [829, 34, 36, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 727628427], - [830, 34, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3293993744], - [833, 33, 36, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 727628427], - [834, 33, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3293993744], - [835, 31, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3293993744], - [847, 33, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2280966844], - [848, 33, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2484088729], - [849, 31, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 977690607], - [867, 23, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3742634839], - [869, 13, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [870, 13, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 322569067], - [871, 13, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 794246204], - [872, 13, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [873, 13, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [874, 13, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 245860230], - [875, 13, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1679224880], - [876, 13, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3666757975], - [876, 44, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340297], - [877, 13, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92008088], - [877, 13, 16, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3264528997], - [880, 54, 3, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 193414780], - [880, 59, 9, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 1228896939], - [881, 54, 5, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 195037722], - [881, 61, 8, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 309350150], - [882, 11, 97, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4074147228], - [882, 24, 19, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1494598494], - [883, 24, 39, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3880454769], - [883, 48, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2149044978], - [895, 29, 12, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 2254095060], - [901, 30, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 792187647], - [902, 35, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3035934855], - [919, 30, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1159094422], - [920, 35, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 612910580], - [921, 26, 27, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1721463124], - [922, 26, 18, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 8296583], - [922, 26, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 8296583], - [922, 46, 2, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 5862883], - [922, 50, 10, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 3687049664] - ], - "test/test_kvform.rb:1350933767": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1508131736], - [3, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2569813655], - [4, 9, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3046940385], - [14, 8, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [16, 34, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [16, 35, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3699066030], - [16, 48, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4237363788], - [16, 61, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [17, 8, 28, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 2250857078], - [18, 8, 42, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 4034750748], - [18, 9, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [18, 10, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3017305826], - [18, 20, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2066390276], - [18, 33, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1387529586], - [18, 44, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085147079], - [18, 48, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [18, 52, 1, "Layout/MultilineArrayLineBreaks: Each item in a multi-line array must start on a separate line.", 177557], - [18, 52, 1, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 177557], - [19, 8, 65, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 1137684515], - [20, 8, 88, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2662435043], - [20, 9, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [20, 10, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1807068342], - [20, 10, 20, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 378977955], - [20, 24, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3039078867], - [21, 10, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 329410673], - [21, 10, 53, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3856756485], - [21, 33, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3610157810], - [21, 63, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [21, 67, 1, "Layout/MultilineArrayLineBreaks: Each item in a multi-line array must start on a separate line.", 177557], - [21, 67, 1, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 177557], - [32, 16, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [32, 17, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [32, 23, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [32, 25, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [33, 27, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [33, 28, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [33, 34, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3606009942], - [33, 47, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [36, 36, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [36, 37, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2863094020], - [36, 49, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1290666282], - [36, 64, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [37, 38, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [37, 39, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1476007742], - [37, 50, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2294637430], - [37, 68, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [38, 28, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [38, 29, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3020792241], - [38, 39, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3028726278], - [38, 45, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [41, 8, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3298243829], - [41, 25, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [41, 26, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1446516351], - [41, 42, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340437], - [41, 45, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [42, 7, 71, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 646022986], - [42, 35, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [42, 36, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3028726278], - [42, 46, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3040560528], - [42, 54, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1273984970], - [42, 65, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1414097488], - [42, 72, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [82, 12, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [87, 10, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3264456540], - [87, 21, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2359684249], - [87, 33, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193337892], - [87, 38, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193337735], - [90, 8, 50, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 4167551331], - [90, 9, 24, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 2291073610], - [90, 10, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 352883356], - [90, 22, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3068178649], - [91, 9, 14, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 3580175020], - [91, 10, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 93829828], - [91, 17, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 93828679], - [91, 26, 30, "Layout/MultilineArrayLineBreaks: Each item in a multi-line array must start on a separate line.", 3087998339], - [91, 58, 1, "Layout/MultilineArrayLineBreaks: Each item in a multi-line array must start on a separate line.", 177565], - [91, 58, 1, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 177565], - [95, 8, 52, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 2315081891], - [95, 9, 26, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 1449205130], - [95, 10, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3127806652], - [95, 23, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 432143513], - [96, 9, 14, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 3580175020], - [96, 10, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 93829828], - [96, 17, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 93828679], - [96, 26, 32, "Layout/MultilineArrayLineBreaks: Each item in a multi-line array must start on a separate line.", 3571642371], - [96, 60, 1, "Layout/MultilineArrayLineBreaks: Each item in a multi-line array must start on a separate line.", 177565], - [96, 60, 1, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 177565], - [98, 7, 31, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 141792329], - [118, 7, 27, "Minitest/AssertKindOf: Prefer using `assert_kind_of(String, actual)`.", 2015651912], - [118, 7, 27, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2015651912], - [143, 9, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2146124422], - [143, 20, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2359684249], - [144, 9, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [144, 16, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [144, 35, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3036110482], - [145, 7, 34, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 675736210], - [145, 9, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [145, 16, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [145, 25, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3018048984], - [145, 33, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3036110482], - [162, 7, 29, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1200566456], - [162, 20, 15, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 2418240424] - ], - "test/test_kvpost.rb:3000925352": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1192794327], - [3, 9, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1524986166], - [4, 9, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1508131736], - [5, 9, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2920398136], - [16, 28, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [16, 29, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [16, 39, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3507903553], - [16, 47, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [17, 46, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 450853529], - [18, 7, 61, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3978282719], - [18, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [18, 22, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [18, 39, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3507903553], - [18, 47, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [22, 15, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [22, 16, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [22, 16, 34, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 46497405], - [22, 27, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3490731558], - [23, 16, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1835655055], - [23, 16, 25, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2000337041], - [23, 32, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3127351416], - [23, 41, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [26, 48, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 450853529], - [28, 22, 37, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 464140603], - [28, 36, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3490731558], - [29, 22, 23, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 457221909], - [29, 36, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3127351416], - [37, 15, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [37, 16, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [37, 16, 34, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 46497405], - [37, 27, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3490731558], - [38, 16, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1835655055], - [38, 16, 25, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2000337041], - [38, 32, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3127351416], - [38, 41, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [41, 42, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 794565366], - [54, 61, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 450853529] - ], - "test/test_linkparse.rb:1319944605": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1192794327], - [3, 9, 28, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 812078005], - [15, 23, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340111], + [89, 7, 33, "Minitest/RefuteFalse: Prefer using `refute(dh.using_default_values?)`.", 3432763311] + ], + "test/test_discover.rb:1595417954": [ + [85, 20, 9, "Lint/InheritException: Inherit from `RuntimeError` instead of `Exception`.", 3513723378], + [173, 9, 19, "Minitest/RefuteFalse: Prefer using `refute(claimed_id)`.", 1240093182], + [174, 9, 17, "Minitest/RefuteFalse: Prefer using `refute(local_id)`.", 900303800], + [175, 9, 21, "Minitest/RefuteFalse: Prefer using `refute(s.claimed_id)`.", 3221811299], + [176, 9, 19, "Minitest/RefuteFalse: Prefer using `refute(s.local_id)`.", 2236738853], + [177, 9, 23, "Minitest/RefuteFalse: Prefer using `refute(s.get_local_id)`.", 579848844], + [178, 9, 29, "Minitest/RefuteFalse: Prefer using `refute(s.compatibility_mode)`.", 4108014984], + [192, 9, 91, "Minitest/RefuteFalse: Prefer using `refute(s.used_yadis, \"Expected to use old-style discovery\")`.", 3971431990], + [260, 7, 8, "Lint/UselessAssignment: Useless assignment to variable - `services`.", 907487467], + [589, 19, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [590, 77, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], + [726, 7, 55, "Minitest/RefuteFalse: Prefer using `refute(services.empty?, \"Expected services, got zero\")`.", 3799265795], + [773, 7, 35, "Minitest/RefuteFalse: Prefer using `refute(@endpoint.is_op_identifier)`.", 873861676], + [779, 7, 35, "Minitest/RefuteFalse: Prefer using `refute(@endpoint.is_op_identifier)`.", 873861676], + [785, 7, 35, "Minitest/RefuteFalse: Prefer using `refute(@endpoint.is_op_identifier)`.", 873861676], + [791, 7, 35, "Minitest/RefuteFalse: Prefer using `refute(@endpoint.is_op_identifier)`.", 873861676], + [806, 7, 35, "Minitest/RefuteFalse: Prefer using `refute(@endpoint.is_op_identifier)`.", 873861676], + [836, 7, 37, "Minitest/RefuteFalse: Prefer using `refute(@endpoint.compatibility_mode)`.", 1374481464], + [853, 7, 11, "Naming/VariableName: Use snake_case for variable names.", 2215990581], + [855, 7, 11, "Naming/VariableName: Use snake_case for variable names.", 2215974520], + [859, 52, 11, "Naming/VariableName: Use snake_case for variable names.", 2215974520], + [860, 54, 11, "Naming/VariableName: Use snake_case for variable names.", 2215990581], + [884, 11, 101, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(@endpoint.supports_type(t), format(\"Must support %s\", t))`?", 56176058], + [889, 11, 107, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(!@endpoint.supports_type(t), format(\"Shouldn't support %s\", t))`?", 954251792], + [889, 11, 107, "Minitest/RefuteFalse: Prefer using `refute(@endpoint.supports_type(t), format(\"Shouldn't support %s\", t))`.", 954251792] + ], + "test/test_discovery_manager.rb:2940309917": [ + [34, 7, 38, "Minitest/RefuteFalse: Prefer using `refute(@disco_services.for_url?(nil))`.", 603865808], + [35, 7, 44, "Minitest/RefuteFalse: Prefer using `refute(@disco_services.for_url?(\"invalid\"))`.", 2196506506], + [39, 7, 33, "Minitest/RefuteFalse: Prefer using `refute(@disco_services.started?)`.", 4092600212], + [48, 7, 33, "Minitest/RefuteFalse: Prefer using `refute(@disco_services.started?)`.", 4092600212], + [54, 7, 31, "Minitest/RefuteFalse: Prefer using `refute(@disco_services.empty?)`.", 151347072], + [66, 5, 64, "Style/MissingRespondToMissing: When using `method_missing`, define `respond_to_missing?`.", 281345496], + [86, 7, 59, "Minitest/RefuteFalse: Prefer using `refute(m.instance_variable_get(:@session_key_suffix).nil?)`.", 1408692002] + ], + "test/test_extension.rb:2054469448": [ + [43, 7, 55, "Minitest/RefuteFalse: Prefer using `refute(namespaces.implicit?(DummyExtension::TEST_URI))`.", 1478049918] + ], + "test/test_fetchers.rb:2069247905": [ + [152, 22, 10, "ThreadSafety/NewThread: Avoid starting new threads.", 3411682361], + [243, 27, 4, "Lint/UselessAssignment: Useless assignment to variable - `body`.", 2087730517], + [243, 39, 7, "Lint/UselessAssignment: Useless assignment to variable - `headers`.", 643017641], + [243, 54, 14, "Lint/UselessAssignment: Useless assignment to variable - `redirect_limit`.", 3383958005], + [283, 5, 901, "Style/For: Prefer `each` over `for`.", 316016311] + ], + "test/test_filters.rb:3466801816": [ + [9, 5, 932, "Minitest/MultipleAssertions: Test case has too many assertions [8/3].", 4216474825], + [232, 5, 776, "Minitest/MultipleAssertions: Test case has too many assertions [5/3].", 2440747337] + ], + "test/test_idres.rb:3951721280": [ + [115, 9, 1622, "Minitest/MultipleAssertions: Test case has too many assertions [5/3].", 2912808174], + [502, 13, 31, "ThreadSafety/ClassAndModuleAttributes: Avoid mutating class and module attributes.", 406405732], + [505, 15, 7, "ThreadSafety/InstanceVariableInClassMethod: Avoid instance variables in class methods.", 764524831], + [506, 15, 8, "ThreadSafety/InstanceVariableInClassMethod: Avoid instance variables in class methods.", 2800675911], + [697, 9, 427, "Minitest/MultipleAssertions: Test case has too many assertions [4/3].", 2205583380], + [802, 9, 1272, "Minitest/MultipleAssertions: Test case has too many assertions [4/3].", 1885911750], + [854, 38, 9, "Lint/InheritException: Inherit from `RuntimeError` instead of `Exception`.", 3513723378] + ], + "test/test_linkparse.rb:2899074310": [ [16, 29, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], [28, 24, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [37, 9, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [37, 10, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [37, 19, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [37, 24, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [37, 29, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [37, 30, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [37, 39, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [37, 44, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [38, 9, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [38, 10, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3023137289], - [38, 20, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [38, 25, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [38, 30, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [38, 31, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [38, 40, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [38, 45, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [39, 9, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [39, 10, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [39, 19, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [39, 26, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3018057665], - [39, 36, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456732], - [39, 41, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [39, 46, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [39, 47, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [39, 56, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [39, 61, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [40, 8, 51, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 228165677], - [40, 9, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [40, 10, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [40, 19, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [40, 26, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3018057665], - [40, 36, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456732], - [40, 43, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92107323], - [40, 52, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92107228], - [40, 57, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [41, 8, 34, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 1568005439], - [41, 8, 35, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 204571970], - [41, 9, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [41, 10, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [41, 19, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [41, 26, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92107323], - [41, 35, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92107228], - [41, 40, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [44, 13, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [44, 14, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [44, 23, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [44, 28, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [45, 9, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [45, 10, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [45, 19, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [45, 24, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [45, 29, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [45, 30, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456299], - [45, 39, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456732], - [45, 44, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [46, 9, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [46, 10, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [46, 19, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [46, 24, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [47, 9, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [47, 10, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3023137289], - [47, 20, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [47, 25, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [47, 30, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [47, 31, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3023137289], - [47, 41, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [47, 46, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [48, 7, 56, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 2491639079], - [48, 9, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [48, 10, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [48, 19, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [48, 26, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92107323], - [48, 35, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92107228], - [48, 40, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [48, 45, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [48, 46, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [48, 55, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [48, 60, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [50, 5, 57, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2253223304], - [50, 21, 39, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(attr_cmp(c[0], c[1]), c.inspect)`?", 4229811215], - [51, 20, 40, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(!attr_cmp(c[0], c[1]), c.inspect)`?", 4265199310], - [51, 20, 40, "Minitest/RefuteFalse: Prefer using `refute(attr_cmp(c[0], c[1]), c.inspect)`.", 4265199310], - [55, 28, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2033165926], - [62, 14, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [65, 24, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340639], - [66, 13, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [67, 17, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 235807414], - [68, 11, 79, "Minitest/AssertNil: Prefer using `assert_nil(numtests, 'datafile parsing error: there can be only one NumTests')`.", 2040125313], - [68, 11, 79, "Minitest/AssertPredicate: Prefer using `assert_predicate(numtests, :nil?, 'datafile parsing error: there can be only one NumTests')`.", 2040125313], - [68, 33, 56, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3666314887], - [72, 20, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2996818306], - [74, 16, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2994324997], - [74, 24, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 28477231], - [77, 30, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340920], - [80, 35, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 28477231], - [85, 34, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 326052951], - [85, 46, 32, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 4287820135], - [92, 54, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [92, 76, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [93, 9, 79, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4278541846], - [96, 5, 50, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2013261673], - [96, 37, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 23595754], - [99, 15, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [99, 15, 30, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1142659194], - [100, 5, 9, "Layout/IndentationWidth: Use 2 (not 9) spaces for indentation.", 3994155397], - [100, 72, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 326052951], - [101, 12, 4, "Layout/ElseAlignment: Align `else` with `html`.", 2087423834], - [103, 12, 3, "Layout/EndAlignment: `end` at 103, 11 is not aligned with `html = if` at 99, 4.", 193405706] - ], - "test/test_message.rb:4119381851": [ - [2, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [3, 9, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3046940385], - [4, 9, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2920398136], - [5, 9, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2413211883], - [15, 22, 43, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 552081404], - [35, 28, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2733724944], - [38, 16, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2905502384], - [39, 39, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1394670314], - [42, 47, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3552000793], - [46, 7, 33, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(@m.to_post_args)`.", 413283512], - [50, 7, 28, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(@m.to_args)`.", 2055665823], - [54, 20, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [59, 15, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [59, 16, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [59, 25, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [59, 32, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91847809], - [59, 41, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92087849], - [59, 46, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [66, 20, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [70, 18, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 762442776], - [71, 7, 43, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4281280724], - [85, 20, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [85, 47, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [89, 41, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [93, 41, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [97, 29, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2932903186], - [97, 54, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [102, 32, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [107, 7, 48, "Minitest/RefuteFalse: Prefer using `refute(@m.has_key?(BARE_NS, 'foo'))`.", 3119967287], - [107, 48, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [111, 7, 51, "Minitest/RefuteFalse: Prefer using `refute(@m.has_key?(OPENID1_NS, 'foo'))`.", 1208712875], - [111, 51, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [115, 7, 51, "Minitest/RefuteFalse: Prefer using `refute(@m.has_key?(OPENID2_NS, 'foo'))`.", 3751556904], - [115, 51, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [119, 7, 50, "Minitest/RefuteFalse: Prefer using `refute(@m.has_key?('urn:xxx', 'foo'))`.", 2090867210], - [119, 39, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129533230], - [119, 50, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [129, 30, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [133, 33, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [137, 33, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [141, 21, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 182817611], - [141, 48, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [151, 7, 38, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(@m.get_args(BARE_NS))`.", 1424704293], - [155, 7, 41, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(@m.get_args(OPENID1_NS))`.", 2427332345], - [159, 7, 41, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(@m.get_args(OPENID2_NS))`.", 2316760730], - [163, 7, 40, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(@m.get_args('urn:xxx'))`.", 4287660664], - [163, 36, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129533230], - [168, 36, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [168, 37, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2164944045], - [168, 51, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1493534686], - [168, 59, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [174, 9, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2234701176], - [174, 35, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3609166039], - [175, 9, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3915806952], - [175, 9, 36, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 4137041471], - [175, 36, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 934841105], - [177, 7, 33, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(@m.get_args(ns))`.", 4096729230], - [177, 7, 33, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4096729230], - [179, 7, 38, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 833111946], - [195, 28, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129533230], - [200, 31, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2164944045], - [200, 43, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1493534686], - [205, 13, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1444904344], - [206, 15, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3434567873], - [207, 7, 31, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2486169547], - [209, 7, 40, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1874416747], - [225, 24, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129533230], - [230, 31, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2164944045], - [230, 43, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1493534686], - [235, 13, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1991153268], - [236, 7, 31, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3787609424], - [252, 24, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129533230], - [256, 7, 34, "Minitest/RefuteFalse: Prefer using `refute(@m.is_openid1)`.", 4103735530], - [260, 7, 34, "Minitest/RefuteFalse: Prefer using `refute(@m.is_openid2)`.", 4103735369], - [265, 33, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 450853529], - [274, 36, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [274, 37, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [274, 37, 24, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 3662970090], - [274, 54, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [275, 37, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2648155146], - [275, 37, 29, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 553636153], - [275, 55, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 963339893], - [275, 66, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [280, 20, 10, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2385648303], - [281, 20, 47, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2344611173], - [285, 20, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [285, 48, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [289, 51, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [294, 10, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [294, 11, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [294, 11, 24, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 3662970090], - [294, 28, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [295, 11, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2648155146], - [295, 29, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 963339893], - [296, 11, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 6781232], - [296, 34, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 450853529], - [297, 11, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 779335583], - [297, 37, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3274182602], - [298, 11, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2764437898], - [298, 11, 45, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3499700945], - [298, 11, 47, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 1538336396], - [298, 44, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1033688349], - [298, 56, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [300, 7, 65, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1709430128], - [300, 20, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 450853529], - [300, 58, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3385233831], - [301, 20, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3274182602], - [301, 49, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3911829544], - [302, 20, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1033688349], - [302, 53, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3075950557], - [307, 7, 70, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3813631904], - [307, 20, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3112758124], - [307, 51, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3385233831], - [307, 65, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3112758124], - [311, 20, 80, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2896167638], - [311, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [311, 22, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [311, 22, 24, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 3662970090], - [311, 39, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [312, 22, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2648155146], - [312, 22, 29, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 553636153], - [312, 40, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 963339893], - [312, 51, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [313, 20, 15, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3012966978], - [317, 20, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 450853529], - [318, 43, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3023135536], - [319, 30, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3018058566], - [319, 38, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2115374466], - [320, 27, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92254433], - [320, 34, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1594103918], - [321, 7, 264, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3305068313], - [321, 20, 233, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1280730208], - [321, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [321, 22, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [321, 22, 24, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 3662970090], - [321, 39, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [322, 22, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2648155146], - [322, 40, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 963339893], - [323, 22, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3097418282], - [323, 44, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2115374466], - [324, 22, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92254433], - [324, 31, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1594103918], - [325, 22, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 319904884], - [325, 22, 37, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3227903659], - [325, 42, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 450853529], - [325, 59, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [325, 63, 15, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 3012966978], - [329, 20, 66, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3815234358], - [329, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [329, 22, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [329, 22, 17, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 3770288989], - [329, 32, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [330, 22, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [330, 22, 22, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 252180526], - [330, 33, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 963339893], - [330, 44, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [331, 20, 10, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3136218085], - [335, 20, 31, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 789502262], - [336, 20, 12, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1238001097], - [340, 20, 42, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3639300187], - [340, 20, 42, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3639300187], - [341, 20, 17, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 184133140], - [345, 18, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 762442776], - [348, 7, 35, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2725281500], - [349, 20, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340858], - [351, 7, 114, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2276794839], - [351, 20, 63, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3366733692], - [351, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [351, 22, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [351, 40, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [351, 50, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2648155146], - [351, 69, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 963339893], - [351, 81, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [352, 20, 16, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3814467512], - [360, 20, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [360, 57, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [364, 20, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [364, 48, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [368, 20, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [368, 58, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [372, 41, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [376, 29, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129533230], - [376, 40, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [380, 7, 50, "Minitest/AssertTruthy: Prefer using `assert(@m.has_key?(OPENID_NS, 'mode'))`.", 1818343444], - [380, 49, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [384, 7, 49, "Minitest/RefuteFalse: Prefer using `refute(@m.has_key?(BARE_NS, 'mode'))`.", 1578372466], - [384, 48, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [388, 7, 51, "Minitest/AssertTruthy: Prefer using `assert(@m.has_key?(OPENID1_NS, 'mode'))`.", 346586725], - [388, 50, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [392, 7, 52, "Minitest/RefuteFalse: Prefer using `refute(@m.has_key?(OPENID2_NS, 'mode'))`.", 718496205], - [392, 51, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [396, 7, 51, "Minitest/RefuteFalse: Prefer using `refute(@m.has_key?('urn:xxx', 'mode'))`.", 2004541231], - [396, 39, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129533230], - [396, 50, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [400, 20, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [400, 51, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [404, 30, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [408, 32, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [408, 40, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [412, 33, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [412, 41, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [416, 33, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [420, 21, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 182817611], - [420, 48, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [424, 20, 45, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 330236732], - [424, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [424, 22, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [424, 32, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [424, 41, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [424, 52, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 963339893], - [424, 63, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [425, 20, 22, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 4268880498], - [429, 7, 38, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(@m.get_args(BARE_NS))`.", 1424704293], - [433, 20, 45, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 330236732], - [433, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [433, 22, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [433, 32, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [433, 41, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [433, 52, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 963339893], - [433, 63, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [434, 20, 23, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3474730211], - [438, 7, 41, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(@m.get_args(OPENID2_NS))`.", 2316760730], - [442, 7, 40, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(@m.get_args('urn:xxx'))`.", 4287660664], - [442, 36, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129533230], - [448, 9, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 292369016], - [448, 35, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3434567873], - [449, 9, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2058743626], - [449, 9, 41, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2435277656], - [449, 36, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1521413332], - [451, 7, 37, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3363869617], - [455, 7, 36, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4108245612], - [459, 40, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [459, 41, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [459, 51, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [459, 60, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [459, 71, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 963339893], - [459, 82, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [467, 41, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [467, 42, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [467, 52, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [467, 61, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [467, 72, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 963339893], - [467, 83, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [475, 28, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129533230], - [479, 13, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2464949536], - [480, 15, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 982389487], - [481, 7, 31, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2486169547], - [483, 7, 40, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1874416747], - [503, 24, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129533230], - [507, 13, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 316666463], - [508, 15, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1439458303], - [510, 7, 40, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1874416747], - [512, 7, 31, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2486169547], - [532, 24, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129287151], - [536, 7, 33, "Minitest/AssertTruthy: Prefer using `assert(@m.is_openid1)`.", 1385749217], - [540, 7, 34, "Minitest/RefuteFalse: Prefer using `refute(@m.is_openid2)`.", 4103735369], - [549, 18, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3541160330], - [550, 39, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [550, 40, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3473527167], - [550, 65, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [551, 40, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3473527167], - [552, 7, 30, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 97380905], - [556, 9, 20, "Minitest/TestMethodName: Test method name should start with `test_` prefix.", 151140574], - [559, 7, 49, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 870184713], - [559, 20, 35, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 323913017], - [559, 40, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3023135536], - [559, 49, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3018058566], - [564, 7, 50, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3448622216], - [572, 36, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [572, 37, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [572, 37, 24, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 3662970090], - [572, 54, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [573, 37, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2648155146], - [573, 55, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 963339893], - [574, 37, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [574, 37, 25, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1167724454], - [574, 62, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [578, 20, 128, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3874096429], - [578, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [578, 22, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [578, 22, 24, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 3662970090], - [578, 39, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [579, 22, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2648155146], - [579, 40, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 963339893], - [580, 22, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [580, 22, 25, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1167724454], - [580, 47, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [581, 20, 15, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3012966978], - [585, 20, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 450853529], - [586, 43, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3023135536], - [587, 30, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3018058566], - [587, 38, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2115374466], - [588, 27, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92254433], - [588, 34, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1594103918], - [589, 7, 312, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3020847961], - [589, 20, 281, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3492229450], - [589, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [589, 22, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [589, 22, 24, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 3662970090], - [589, 39, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [590, 22, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2648155146], - [590, 40, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 963339893], - [591, 22, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3097418282], - [591, 44, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2115374466], - [592, 22, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92254433], - [592, 31, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1594103918], - [593, 22, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [594, 22, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 319904884], - [594, 22, 37, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3227903659], - [594, 42, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 450853529], - [594, 59, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [594, 63, 15, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 3012966978], - [598, 20, 107, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3499129037], - [598, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [598, 22, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [598, 22, 17, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 3770288989], - [598, 32, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [599, 22, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [599, 33, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 963339893], - [600, 22, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [600, 22, 18, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2290182001], - [600, 40, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [601, 20, 10, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3136218085], - [605, 20, 49, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 868569292], - [606, 20, 12, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1238001097], - [610, 20, 91, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 470515792], - [610, 20, 91, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 470515792], - [611, 20, 17, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 184133140], - [615, 18, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 762442776], - [618, 7, 35, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2725281500], - [619, 20, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340858], - [621, 7, 185, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2432008081], - [621, 20, 134, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3333059757], - [621, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [621, 22, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [621, 22, 26, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 1049996844], - [621, 40, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [622, 22, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2648155146], - [622, 41, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 963339893], - [623, 22, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [623, 22, 27, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2185530048], - [623, 49, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [624, 20, 16, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3814467512], - [632, 36, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [632, 37, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [632, 37, 24, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 3662970090], - [632, 54, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [633, 37, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2648155146], - [633, 55, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 963339893], - [634, 37, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [634, 37, 25, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1167825989], - [634, 62, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [635, 27, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92254433], - [635, 34, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1594103918], - [647, 44, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91716306], - [654, 21, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [654, 28, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91716306], - [661, 21, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3035579718], - [661, 29, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91716306], - [667, 7, 19, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4285920218], - [671, 20, 167, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 565567243], - [671, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [671, 22, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [671, 22, 24, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 3662970090], - [671, 39, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [672, 22, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2648155146], - [672, 40, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 963339893], - [673, 22, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [674, 22, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92254433], - [674, 22, 16, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3451765737], - [674, 31, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1594103918], - [674, 38, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [674, 42, 15, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 3012966978], - [678, 20, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 450853529], - [679, 43, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3023135536], - [680, 30, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3018058566], - [680, 38, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2115374466], - [681, 7, 305, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 709325516], - [681, 20, 274, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2393503706], - [681, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [681, 22, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [681, 22, 24, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 3662970090], - [681, 39, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [682, 22, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2648155146], - [682, 40, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 963339893], - [683, 22, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [684, 22, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 319904884], - [685, 22, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3097418282], - [685, 44, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2115374466], - [686, 22, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92254433], - [686, 22, 16, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3451765737], - [686, 31, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1594103918], - [686, 38, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [686, 42, 15, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 3012966978], - [690, 27, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92254433], - [691, 7, 152, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3237932739], - [691, 20, 107, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3499129037], - [691, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [691, 22, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [691, 22, 17, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 3770288989], - [691, 32, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [692, 22, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [692, 33, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 963339893], - [693, 22, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [693, 22, 18, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2290219986], - [693, 40, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [694, 20, 10, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3136218085], - [698, 27, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92254433], - [699, 7, 96, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 389050517], - [699, 20, 49, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 715101487], - [700, 20, 12, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1238001097], - [704, 24, 24, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 1095726796], - [704, 24, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1095726796], - [705, 24, 19, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 1923594516], - [705, 24, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1923594516], - [706, 24, 37, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 1396651357], - [707, 24, 11, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 4265971607], - [707, 24, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4265971607], - [707, 24, 11, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 4265971607], - [710, 30, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193339971], - [712, 7, 41, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 409824133], - [720, 18, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 762442776], - [723, 7, 35, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2725281500], - [724, 20, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340858], - [734, 20, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [734, 58, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [738, 20, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [738, 48, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [742, 41, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [746, 20, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [746, 58, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [750, 29, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129533230], - [750, 40, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [754, 7, 50, "Minitest/AssertTruthy: Prefer using `assert(@m.has_key?(OPENID_NS, 'mode'))`.", 1818343444], - [754, 49, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [758, 7, 49, "Minitest/RefuteFalse: Prefer using `refute(@m.has_key?(BARE_NS, 'mode'))`.", 1578372466], - [758, 48, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [762, 7, 52, "Minitest/RefuteFalse: Prefer using `refute(@m.has_key?(OPENID1_NS, 'mode'))`.", 681250926], - [762, 51, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [766, 7, 51, "Minitest/AssertTruthy: Prefer using `assert(@m.has_key?(OPENID2_NS, 'mode'))`.", 419458438], - [766, 50, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [770, 7, 51, "Minitest/RefuteFalse: Prefer using `refute(@m.has_key?('urn:xxx', 'mode'))`.", 2004541231], - [770, 39, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1129533230], - [770, 50, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [775, 20, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [775, 51, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [779, 38, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [783, 41, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [787, 20, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [787, 52, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [791, 29, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3257752249], - [791, 48, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [795, 20, 45, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 330236732], - [795, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [795, 22, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [795, 32, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [795, 41, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [795, 52, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 963339893], - [795, 63, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [796, 20, 22, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 4268880498], - [800, 20, 20, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1742523791], - [800, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [800, 22, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92254433], - [800, 31, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1594103918], - [800, 38, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [801, 20, 20, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2664557919], - [805, 7, 60, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(@m.get_args(OPENID1_NS))`.", 1440108275], - [805, 20, 2, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 5861859], - [806, 20, 23, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3474730211], - [810, 20, 45, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 330236732], - [810, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [810, 22, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [810, 32, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [810, 41, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [810, 52, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 963339893], - [810, 63, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [811, 20, 23, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3482676576], - [815, 7, 66, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(@m.get_args('urn:loose seal'))`.", 4094190475], - [815, 20, 2, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 5861859], - [816, 20, 29, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3921926875], - [816, 32, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2263937047], - [821, 22, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [821, 23, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085185157], - [821, 31, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085179941], - [821, 37, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085178821], - [821, 45, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085182053], - [821, 49, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [827, 7, 36, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4108245612], - [831, 40, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [831, 41, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [831, 51, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [831, 60, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [831, 71, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 963339893], - [831, 82, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [835, 38, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [835, 39, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92254433], - [835, 48, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1594103918], - [835, 55, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [843, 41, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [843, 42, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [843, 52, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [843, 61, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [843, 72, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 963339893], - [843, 83, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [847, 28, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2904480440], - [852, 15, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92017996], - [853, 7, 31, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2486169547], - [855, 7, 40, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1874416747], - [875, 24, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1771873425], - [882, 42, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4144639799], - [885, 17, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [885, 18, 30, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 310393605], - [886, 18, 31, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 4240273967], - [886, 49, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [898, 37, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [898, 38, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3023135536], - [898, 48, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3018058566], - [898, 54, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [899, 7, 50, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3733432222], - [899, 20, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3018058566], - [899, 49, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3023135536], - [903, 13, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085192580], - [904, 15, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1414860450], - [905, 7, 31, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2486169547], - [907, 7, 40, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1874416747], - [909, 7, 31, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2486169547], - [929, 24, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2909946110], - [933, 12, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2261919648], - [934, 13, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1486022054], - [935, 17, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 812283872], - [936, 17, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 812283715], - [939, 7, 42, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3956757861], - [941, 7, 42, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 181840422], - [946, 33, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [946, 34, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91654033], - [946, 52, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [951, 7, 34, "Minitest/RefuteFalse: Prefer using `refute(@m.is_openid1)`.", 4103735530], - [955, 7, 33, "Minitest/AssertTruthy: Prefer using `assert(@m.is_openid2)`.", 1385749250], - [962, 9, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [963, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [963, 26, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [964, 9, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2749623588], - [964, 30, 36, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2063565054], - [965, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1325864746], - [965, 34, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2986156792], - [966, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 966247324], - [966, 31, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3913682184], - [967, 9, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3862458228], - [967, 9, 42, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 725104594], - [970, 21, 31, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 718798590], - [973, 9, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3667194690], - [973, 22, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 139886388], - [974, 9, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 789834347], - [974, 9, 21, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1878364024], - [974, 20, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2261490645], - [977, 22, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 90526924], - [982, 9, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 635587538], - [982, 29, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 326052951], - [983, 9, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2014057493], - [983, 22, 35, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1436832301], - [984, 9, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1346626202], - [984, 9, 18, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1512522817], - [984, 21, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3035277469], - [989, 20, 15, "Layout/ParameterAlignment: Use one level of indentation for parameters following the first line of a multi-line method definition.", 4204966942], - [997, 9, 129, "Minitest/AssertEqual: Prefer using `assert_equal(form.attributes[k], v, \"Expected '#{v}' for required form attribute '#{k}', got '#{form.attributes[k]}'\")`.", 3023346520], - [997, 9, 129, "Minitest/AssertOperator: Prefer using `assert_operator(form.attributes[k], :==, v, \"Expected '#{v}' for required form attribute '#{k}', got '#{form.attributes[k]}'\")`.", 3023346520], - [997, 16, 23, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3890971049], - [998, 16, 81, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1037296273], - [1008, 9, 119, "Minitest/AssertEqual: Prefer using `assert_equal(form.attributes[k], v, \"Form attribute '#{k}' should be '#{v}', found '#{form.attributes[k]}'\")`.", 728071696], - [1008, 9, 119, "Minitest/AssertOperator: Prefer using `assert_operator(form.attributes[k], :==, v, \"Form attribute '#{k}' should be '#{v}', found '#{form.attributes[k]}'\")`.", 728071696], - [1008, 16, 23, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3890971049], - [1009, 16, 71, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3974141145], - [1014, 47, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [1015, 23, 26, "Layout/MultilineOperationIndentation: Use 2 (not 12) spaces for indenting a condition in an `unless` statement spanning multiple lines.", 2752062785], - [1015, 41, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4163977235], - [1015, 50, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [1016, 23, 41, "Layout/MultilineOperationIndentation: Use 2 (not 12) spaces for indenting a condition in an `unless` statement spanning multiple lines.", 3946375691], - [1016, 37, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3039261821], - [1016, 55, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2923163215], - [1027, 38, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3032265122], - [1029, 13, 190, "Minitest/AssertEqual: Prefer using `assert_equal(e.attributes['value'], value, \"Expected value of hidden input '#{e.attributes['name']}' \" +\n \"to be '#{value}', got '#{e.attributes['value']}'\")`.", 3325653372], - [1029, 13, 190, "Minitest/AssertOperator: Prefer using `assert_operator(e.attributes['value'], :==, value, \"Expected value of hidden input '#{e.attributes['name']}' \" +\n \"to be '#{value}', got '#{e.attributes['value']}'\")`.", 3325653372], - [1029, 13, 190, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(e.attributes['value'] == value, \"Expected value of hidden input '#{e.attributes['name']}' \" +\n \"to be '#{value}', got '#{e.attributes['value']}'\")`?", 3325653372], - [1029, 20, 30, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2605044007], - [1029, 33, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1594103918], - [1030, 20, 131, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 154116810], - [1030, 68, 6, "Style/StringLiteralsInInterpolation: Prefer double-quoted strings inside interpolations.", 3032265122], - [1030, 80, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], - [1031, 59, 7, "Style/StringLiteralsInInterpolation: Prefer double-quoted strings inside interpolations.", 1594103918], - [1036, 11, 44, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 187315171], - [1040, 11, 174, "Minitest/AssertIncludes: Prefer using `assert_includes(message_.to_post_args.keys, e.attributes['name'], \"Form element for '#{e.attributes['name']}' not in \" +\n 'original message')`.", 2672035956], - [1040, 11, 174, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(message_.to_post_args.keys.include?(e.attributes['name']), \"Form element for '#{e.attributes['name']}' not in \" +\n 'original message')`?", 2672035956], - [1040, 18, 57, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2909386840], - [1040, 18, 57, "Performance/InefficientHashSearch: Use `#key?` instead of `#keys.include?`.", 2909386840], - [1040, 67, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3032265122], - [1041, 18, 90, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 532341847], - [1041, 52, 6, "Style/StringLiteralsInInterpolation: Prefer double-quoted strings inside interpolations.", 3032265122], - [1041, 71, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], - [1042, 18, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1574956311], - [1046, 9, 146, "Minitest/AssertEqual: Prefer using `assert_equal(form.attributes['action'], action_url, \"Expected form 'action' to be '#{action_url}', got '#{form.attributes['action']}'\")`.", 670891994], - [1046, 9, 146, "Minitest/AssertOperator: Prefer using `assert_operator(form.attributes['action'], :==, action_url, \"Expected form 'action' to be '#{action_url}', got '#{form.attributes['action']}'\")`.", 670891994], - [1046, 16, 39, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 453172704], - [1046, 32, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2956022523], - [1047, 16, 82, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 566350714], - [1047, 86, 8, "Style/StringLiteralsInInterpolation: Prefer double-quoted strings inside interpolations.", 2956022523], - [1052, 47, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [1053, 23, 26, "Layout/MultilineOperationIndentation: Use 2 (not 12) spaces for indenting a condition in an `unless` statement spanning multiple lines.", 2752062785], - [1053, 41, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4163977235], - [1053, 50, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [1054, 23, 39, "Layout/MultilineOperationIndentation: Use 2 (not 12) spaces for indenting a condition in an `unless` statement spanning multiple lines.", 1149497620], - [1054, 36, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3039261821], - [1054, 54, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3846394289], - [1059, 9, 115, "Minitest/AssertEqual: Prefer using `assert_equal(submits.length, 1, \"Expected only one 'input' with type = 'submit', got #{submits.length}\")`.", 3205120719], - [1059, 9, 115, "Minitest/AssertOperator: Prefer using `assert_operator(submits.length, :==, 1, \"Expected only one 'input' with type = 'submit', got #{submits.length}\")`.", 3205120719], - [1059, 16, 19, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 776327073], - [1060, 16, 71, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3020496750], - [1062, 9, 177, "Minitest/AssertEqual: Prefer using `assert_equal(submits[0].attributes['value'], submit_text, \"Expected submit value to be '#{submit_text}', \" +\n \"got '#{submits[0].attributes['value']}'\")`.", 3070590785], - [1062, 9, 177, "Minitest/AssertOperator: Prefer using `assert_operator(submits[0].attributes['value'], :==, submit_text, \"Expected submit value to be '#{submit_text}', \" +\n \"got '#{submits[0].attributes['value']}'\")`.", 3070590785], - [1062, 9, 177, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(submits[0].attributes['value'] == submit_text, \"Expected submit value to be '#{submit_text}', \" +\n \"got '#{submits[0].attributes['value']}'\")`?", 3070590785], - [1062, 16, 45, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1847638894], - [1062, 38, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1594103918], - [1063, 16, 107, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2951559010], - [1063, 65, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], - [1064, 46, 7, "Style/StringLiteralsInInterpolation: Prefer double-quoted strings inside interpolations.", 1594103918], - [1070, 31, 11, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3500520943], - [1070, 44, 15, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 2796655553], - [1071, 31, 12, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2686516691], - [1072, 18, 4, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2087820472], - [1072, 24, 1, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 177608], - [1072, 27, 11, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 3500520943], - [1073, 18, 15, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2796655553], - [1073, 35, 12, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 2686516691], - [1081, 17, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1346626202], - [1081, 29, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 90515603], - [1083, 31, 11, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3500520943], - [1083, 44, 15, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 2796655553], - [1084, 31, 12, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2686516691], - [1085, 18, 4, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2087820472], - [1085, 24, 1, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 177608], - [1085, 27, 11, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 3500520943], - [1086, 18, 15, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2796655553], - [1086, 35, 12, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 2686516691], - [1095, 17, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 635587538], - [1095, 37, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3003939444], - [1096, 17, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2014057493], - [1096, 30, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 268450833], - [1098, 31, 11, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3500520943], - [1098, 44, 9, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 3121703976], - [1099, 31, 12, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2686516691], - [1100, 18, 4, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2087820472], - [1100, 24, 1, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 177608], - [1100, 27, 11, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 3500520943], - [1101, 18, 9, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3121703976], - [1101, 29, 12, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 2686516691], - [1108, 13, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3637342729], - [1109, 7, 6, "Lint/UnderscorePrefixedVariableName: Do not use prefix `_` for a variable that is used.", 3498751916], - [1109, 16, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [1111, 7, 48, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 411489242], - [1117, 16, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1106383717], - [1121, 9, 44, "Minitest/RefuteFalse: Prefer using `refute(nsm.member?(uripat % i))`.", 154326771], - [1124, 7, 84, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4016334492], - [1124, 25, 6, "Lint/UnderscorePrefixedVariableName: Do not use prefix `_` for a variable that is used.", 3498751916], - [1129, 16, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 832170441], - [1130, 13, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1939718458], - [1139, 20, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 450853529], - [1140, 16, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3644585460], - [1147, 54, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3596965063], - [1152, 42, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 804983478], - [1156, 39, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [1156, 40, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3911829544], - [1156, 59, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3274182602], - [1156, 67, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [1157, 7, 22, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3796388732], - [1164, 13, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1939718458], - [1166, 26, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3023135536], - [1168, 28, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3018058566] - ], - "test/test_nonce.rb:1928933667": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3682152042], - [10, 7, 29, "Minitest/AssertMatch: Prefer using `assert_match(nonce, NONCE_RE)`.", 2611712850], - [10, 7, 29, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2611712850], - [11, 7, 24, "Minitest/AssertEqual: Prefer using `assert_equal(nonce.size, 26)`.", 2741654048], - [11, 7, 24, "Minitest/AssertOperator: Prefer using `assert_operator(nonce.size, :==, 26)`.", 2741654048], - [16, 7, 29, "Minitest/AssertMatch: Prefer using `assert_match(nonce, NONCE_RE)`.", 2611712850], - [16, 7, 29, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2611712850], - [17, 7, 24, "Minitest/AssertEqual: Prefer using `assert_equal(nonce.size, 26)`.", 2741654048], - [17, 7, 24, "Minitest/AssertOperator: Prefer using `assert_operator(nonce.size, :==, 26)`.", 2741654048], - [18, 7, 44, "Minitest/AssertMatch: Prefer using `assert_match(/^1970-01-01T00:00:00Z/, nonce)`.", 3870970796], - [22, 11, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3890374212], - [24, 23, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [26, 7, 34, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2488174633], - [33, 7, 33, "Minitest/AssertMatch: Prefer using `assert_match(nonce_str, NONCE_RE)`.", 1507261272], - [33, 7, 33, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1507261272], - [35, 7, 26, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1326115118], - [41, 9, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [42, 9, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1161343966], - [43, 9, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1839578540], - [44, 9, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3180577029], - [45, 9, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 349273735], - [46, 9, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1257841138], - [47, 9, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 354627053], - [47, 9, 9, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 354627053], - [49, 7, 100, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1863951827], - [57, 10, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3890374212], - [60, 10, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3890374212], - [63, 10, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3890374212], - [66, 10, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3890374212], - [69, 10, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3890374212], - [72, 10, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3890380486], - [75, 10, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3890380486], - [78, 9, 24, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 3691277562], - [78, 10, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 354627053], - [84, 9, 41, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 162302878] - ], - "test/test_oauth.rb:3783744149": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 558419089], - [3, 9, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2920398136], - [4, 9, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1480177078], - [5, 9, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2748495602], - [6, 9, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3427008040], - [18, 22, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1246672322], - [20, 35, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3357144667], - [20, 47, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3569003008], - [21, 9, 39, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 73431459], - [21, 22, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3357144667], - [22, 22, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3569003008], - [26, 25, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3357144667], - [27, 9, 39, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 526934097], - [27, 22, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3357144667], - [31, 22, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3569003008], - [32, 9, 56, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 664624158], - [32, 22, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3569003008], - [36, 9, 41, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(@req.get_extension_args)`.", 1295939071], - [37, 25, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3357144667], - [38, 9, 67, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1811466556], - [38, 23, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [38, 24, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 279448603], - [38, 38, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3357144667], - [38, 48, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [39, 22, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3569003008], - [40, 9, 110, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3435929212], - [40, 23, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [40, 24, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 279448603], - [40, 38, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3357144667], - [40, 50, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1401044911], - [40, 61, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3569003008], - [40, 91, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [44, 17, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [44, 18, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 279448603], - [44, 32, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3357144667], - [44, 44, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1401044911], - [44, 55, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3569003008], - [44, 85, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [46, 9, 39, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 526934097], - [46, 22, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3357144667], - [47, 22, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3569003008], - [52, 9, 25, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3468908612], - [58, 53, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [58, 53, 25, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 2607646422], - [58, 63, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [59, 53, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [60, 53, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1365632081], - [61, 53, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2912030834], - [61, 73, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3357144667], - [62, 53, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2873818406], - [62, 53, 47, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3200683552], - [62, 70, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3569003008], - [63, 51, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [67, 9, 38, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3811773137], - [67, 22, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3357144667], - [68, 22, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3569003008], - [76, 9, 22, "Minitest/AssertNil: Prefer using `assert_nil(oauth_req)`.", 4207687874], - [76, 9, 22, "Minitest/AssertPredicate: Prefer using `assert_predicate(oauth_req, :nil?)`.", 4207687874], - [76, 9, 22, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4207687874], - [102, 36, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4029592431], - [102, 52, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3569003008], - [103, 9, 48, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3735402844], - [103, 22, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4029592431], - [104, 22, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3569003008], - [108, 30, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4029592431], - [109, 9, 48, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3900436974], - [109, 22, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4029592431], - [113, 22, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3569003008], - [114, 9, 56, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 664624158], - [114, 22, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3569003008], - [118, 9, 41, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(@req.get_extension_args)`.", 1295939071], - [119, 30, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4029592431], - [120, 9, 76, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 586473475], - [120, 23, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [120, 24, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1044601616], - [120, 43, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4029592431], - [120, 57, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [121, 22, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3569003008], - [122, 9, 140, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3791061865], - [122, 22, 80, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3268349759], - [122, 23, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [122, 24, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1044601616], - [122, 43, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4029592431], - [122, 59, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1401044911], - [122, 70, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3569003008], - [122, 100, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [123, 22, 23, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 405656805], - [127, 17, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [127, 18, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1044601616], - [127, 37, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4029592431], - [127, 53, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1401044911], - [127, 64, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3569003008], - [127, 94, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [129, 9, 48, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3900436974], - [129, 22, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4029592431], - [130, 22, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3569003008], - [135, 9, 30, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3038968047], - [141, 53, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [141, 53, 18, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 248562579], - [141, 63, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [142, 53, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [143, 53, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1365632081], - [144, 53, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 701247385], - [144, 78, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4029592431], - [145, 53, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2873818406], - [145, 53, 47, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3200683552], - [145, 70, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3569003008], - [146, 51, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [148, 11, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1044601616], - [148, 30, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4029592431], - [149, 11, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1401044911], - [149, 11, 41, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 593369833], - [149, 22, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3569003008], - [153, 9, 47, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2391756526], - [153, 22, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4029592431], - [154, 22, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3569003008], - [159, 53, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [159, 53, 18, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 248562579], - [159, 63, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [160, 53, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [161, 53, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1365632081], - [162, 53, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 701247385], - [162, 78, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4029592431], - [163, 53, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2873818406], - [163, 53, 47, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3200683552], - [163, 70, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3569003008], - [164, 51, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [169, 9, 29, "Minitest/AssertNil: Prefer using `assert_nil(req, req.inspect)`.", 1419293160], - [169, 9, 29, "Minitest/AssertPredicate: Prefer using `assert_predicate(req, :nil?, req.inspect)`.", 1419293160], - [169, 9, 29, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(req.nil?, req.inspect)`?", 1419293160], - [169, 9, 29, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1419293160] - ], - "test/test_openid_yadis.rb:3363182315": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3427008040], - [3, 9, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 380634196], + [53, 21, 39, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(attr_cmp(c[0], c[1]), c.inspect)`?", 4229811215], + [54, 20, 40, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(!attr_cmp(c[0], c[1]), c.inspect)`?", 4265199310], + [54, 20, 40, "Minitest/RefuteFalse: Prefer using `refute(attr_cmp(c[0], c[1]), c.inspect)`.", 4265199310], + [95, 54, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [95, 76, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806] + ], + "test/test_message.rb:3138052519": [ + [108, 7, 48, "Minitest/RefuteFalse: Prefer using `refute(@m.has_key?(BARE_NS, \"foo\"))`.", 2768469367], + [112, 7, 51, "Minitest/RefuteFalse: Prefer using `refute(@m.has_key?(OPENID1_NS, \"foo\"))`.", 1991266283], + [116, 7, 51, "Minitest/RefuteFalse: Prefer using `refute(@m.has_key?(OPENID2_NS, \"foo\"))`.", 1246013416], + [120, 7, 50, "Minitest/RefuteFalse: Prefer using `refute(@m.has_key?(\"urn:xxx\", \"foo\"))`.", 1565201546], + [262, 7, 34, "Minitest/RefuteFalse: Prefer using `refute(@m.is_openid1)`.", 4103735530], + [266, 7, 34, "Minitest/RefuteFalse: Prefer using `refute(@m.is_openid2)`.", 4103735369], + [416, 7, 50, "Minitest/AssertTruthy: Prefer using `assert(@m.has_key?(OPENID_NS, \"mode\"))`.", 259717620], + [420, 7, 49, "Minitest/RefuteFalse: Prefer using `refute(@m.has_key?(BARE_NS, \"mode\"))`.", 850337234], + [424, 7, 51, "Minitest/AssertTruthy: Prefer using `assert(@m.has_key?(OPENID1_NS, \"mode\"))`.", 2112409605], + [428, 7, 52, "Minitest/RefuteFalse: Prefer using `refute(@m.has_key?(OPENID2_NS, \"mode\"))`.", 1046249709], + [432, 7, 51, "Minitest/RefuteFalse: Prefer using `refute(@m.has_key?(\"urn:xxx\", \"mode\"))`.", 989447183], + [582, 7, 33, "Minitest/AssertTruthy: Prefer using `assert(@m.is_openid1)`.", 1385749217], + [586, 7, 34, "Minitest/RefuteFalse: Prefer using `refute(@m.is_openid2)`.", 4103735369], + [856, 7, 50, "Minitest/AssertTruthy: Prefer using `assert(@m.has_key?(OPENID_NS, \"mode\"))`.", 259717620], + [860, 7, 49, "Minitest/RefuteFalse: Prefer using `refute(@m.has_key?(BARE_NS, \"mode\"))`.", 850337234], + [864, 7, 52, "Minitest/RefuteFalse: Prefer using `refute(@m.has_key?(OPENID1_NS, \"mode\"))`.", 3017449934], + [868, 7, 51, "Minitest/AssertTruthy: Prefer using `assert(@m.has_key?(OPENID2_NS, \"mode\"))`.", 1717874022], + [872, 7, 51, "Minitest/RefuteFalse: Prefer using `refute(@m.has_key?(\"urn:xxx\", \"mode\"))`.", 989447183], + [1072, 7, 34, "Minitest/RefuteFalse: Prefer using `refute(@m.is_openid1)`.", 4103735530], + [1076, 7, 33, "Minitest/AssertTruthy: Prefer using `assert(@m.is_openid2)`.", 1385749250], + [1141, 47, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [1142, 40, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [1159, 75, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], + [1173, 66, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], + [1188, 47, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [1189, 40, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [1204, 60, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], + [1275, 7, 6, "Lint/UnderscorePrefixedVariableName: Do not use prefix `_` for a variable that is used.", 3498751916], + [1288, 9, 44, "Minitest/RefuteFalse: Prefer using `refute(nsm.member?(uripat % i))`.", 154326771], + [1292, 25, 6, "Lint/UnderscorePrefixedVariableName: Do not use prefix `_` for a variable that is used.", 3498751916] + ], + "test/test_openid_yadis.rb:2108717525": [ [17, 3, 70, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 2241541269], - [21, 3, 727, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 557056937], - [21, 74, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 107223013], - [23, 20, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3094118117], - [24, 5, 125, "Style/SafeNavigation: Use safe navigation (`&.`) instead of checking if an object exists before calling the method.", 2542762157], - [26, 28, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2733356575], + [21, 3, 727, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 435754601], + [24, 5, 125, "Style/SafeNavigation: Use safe navigation (`&.`) instead of checking if an object exists before calling the method.", 290464717], [30, 5, 293, "Style/SafeNavigation: Use safe navigation (`&.`) instead of checking if an object exists before calling the method.", 3013004962], - [38, 27, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3130004567], - [40, 20, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340763], - [44, 23, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2902335579], - [48, 17, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [54, 6, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1801837736], - [55, 6, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2957356347], - [56, 6, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2957356347], - [56, 29, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1801837736], - [57, 6, 21, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 2957356347], - [57, 6, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2957356347], - [58, 6, 20, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 1801837736], - [58, 6, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1801837736], - [59, 6, 28, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 831314958], - [59, 6, 28, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 831314958], - [59, 6, 29, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 1663589779], - [63, 3, 152, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 2562815488], - [75, 5, 35, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2787327655], - [76, 5, 28, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3482333731], - [76, 5, 28, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 3482333731], - [82, 5, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 655772091], - [83, 5, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2888187211], - [83, 5, 26, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 2888187211], - [93, 20, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2246975734], - [96, 35, 5, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 213775992], - [97, 35, 10, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2272531167], - [98, 35, 9, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2474818138], - [127, 9, 68, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2053489883] - ], - "test/test_pape.rb:174711530": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2457518418], - [3, 9, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2920398136], - [4, 9, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1480177078], - [5, 9, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3337961901], - [15, 9, 46, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(@req.preferred_auth_policies)`.", 418505596], - [17, 22, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3034771041], - [20, 9, 69, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2691599814], - [25, 9, 46, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(@req.preferred_auth_policies)`.", 418505596], - [27, 9, 69, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2829742900], - [29, 9, 69, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2829742900], - [31, 9, 100, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1692042735], - [33, 9, 100, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1692042735], - [37, 23, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [37, 24, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3932791566], - [37, 53, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [37, 55, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [38, 29, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 416558537], - [39, 9, 84, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 995052347], - [39, 23, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [39, 24, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3932791566], - [39, 53, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 416558537], - [39, 65, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [40, 29, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 416678131], - [41, 9, 95, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2274914573], - [41, 23, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [41, 24, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3932791566], - [41, 53, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3802096447], - [41, 76, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [43, 9, 141, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3772676353], - [43, 22, 81, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 295265399], - [43, 23, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [43, 24, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3932791566], - [43, 53, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3802096447], - [43, 78, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1656633178], - [43, 96, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 94505171], - [43, 101, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [44, 22, 23, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 405656805], - [48, 17, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [48, 18, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3932791566], - [48, 18, 52, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 3050298298], - [48, 47, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1586453106], - [49, 18, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1656633178], - [49, 18, 21, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2082494816], - [49, 36, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340796], - [49, 39, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [51, 9, 34, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 269935223], - [52, 23, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 415965921], - [52, 37, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 415824726], - [57, 9, 29, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1641430853], - [58, 9, 46, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(@req.preferred_auth_policies)`.", 418505596], - [63, 53, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [63, 53, 25, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 2607646422], - [63, 63, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [64, 53, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [65, 53, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2733359506], - [66, 53, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3089132260], - [66, 88, 23, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 2256185229], - [67, 88, 29, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 928143378], - [67, 88, 29, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 928143378], - [67, 124, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193339909], - [68, 53, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2624252336], - [68, 53, 29, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1690997779], - [68, 76, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3120621605], - [69, 51, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [73, 9, 99, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3613094671], - [82, 9, 21, "Minitest/AssertNil: Prefer using `assert_nil(pape_req)`.", 3237082721], - [82, 9, 21, "Minitest/AssertPredicate: Prefer using `assert_predicate(pape_req, :nil?)`.", 3237082721], - [82, 9, 21, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3237082721], - [88, 36, 23, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 2256185229], - [89, 36, 32, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2332918727], - [89, 36, 32, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 2332918727], - [90, 9, 43, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 648352755], - [113, 9, 36, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(@req.auth_policies)`.", 4285304966], - [115, 22, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3034771041], - [118, 62, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1193520747], - [119, 9, 59, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1003896508], - [120, 22, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1193520747], - [125, 9, 36, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(@req.auth_policies)`.", 4285304966], - [127, 9, 59, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3596016206], - [129, 9, 59, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3596016206], - [131, 9, 90, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 278181909], - [133, 9, 90, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 278181909], - [137, 23, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [137, 24, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1680956532], - [137, 43, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3032063535], - [137, 49, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [138, 29, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 416558537], - [139, 9, 74, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3947093569], - [139, 23, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [139, 24, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1680956532], - [139, 43, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 416558537], - [139, 55, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [140, 29, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 416678131], - [141, 9, 85, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4244962999], - [141, 23, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [141, 24, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1680956532], - [141, 43, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3802096447], - [141, 66, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [142, 26, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1193520747], - [143, 9, 145, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2657786782], - [143, 22, 85, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3057341448], - [143, 23, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [143, 24, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1680956532], - [143, 43, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3802096447], - [143, 68, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2476990567], - [143, 83, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1193520747], - [143, 105, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [144, 22, 23, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 405656805], - [146, 9, 182, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 514223864], - [147, 12, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [147, 13, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1680956532], - [147, 13, 42, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 2353541069], - [147, 32, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3802096447], - [147, 57, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2476990567], - [147, 57, 37, "Layout/MultilineHashKeyLineBreaks: Each key in a multi-line hash must start on a separate line.", 3688261642], - [147, 72, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1193520747], - [148, 13, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3918600891], - [148, 13, 24, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1479177643], - [148, 34, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340470], - [148, 37, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [148, 41, 23, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 405656805], - [153, 26, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2519351465], - [158, 32, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1236555755], - [167, 17, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [167, 18, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1680956532], - [167, 18, 42, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 3042763264], - [167, 37, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1586453106], - [168, 18, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2476990567], - [168, 18, 37, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3688261642], - [168, 33, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1193520747], - [168, 55, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [170, 9, 52, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2985556253], - [170, 22, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1193520747], - [171, 23, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 415965921], - [171, 37, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 415824726], - [176, 9, 26, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2941985240], - [177, 9, 36, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(@req.auth_policies)`.", 4285304966], - [181, 17, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [181, 18, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1680956532], - [181, 18, 42, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 3042763264], - [181, 37, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1586453106], - [182, 18, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2476990567], - [182, 18, 30, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2029099635], - [182, 33, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 498615602], - [182, 48, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [189, 17, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [189, 18, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1680956532], - [189, 18, 42, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 3042763264], - [189, 37, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1586453106], - [190, 18, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2476990567], - [190, 33, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1193520747], - [191, 18, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3918600891], - [191, 18, 27, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2765130124], - [191, 39, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3036321777], - [191, 45, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [198, 17, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [198, 18, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1680956532], - [198, 18, 42, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 3042763264], - [198, 37, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1586453106], - [199, 18, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2476990567], - [199, 33, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2043283172], - [200, 18, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3918600891], - [200, 18, 24, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1479177672], - [200, 39, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340437], - [200, 42, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [202, 9, 62, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1560133245], - [202, 23, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 415965921], - [202, 37, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 415824726], - [203, 22, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2043283172], - [208, 17, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [208, 18, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1680956532], - [208, 18, 42, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 3042763264], - [208, 37, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1586453106], - [209, 18, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2476990567], - [209, 33, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1602727053], - [210, 18, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3918600891], - [210, 18, 27, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2765130124], - [210, 39, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3036321777], - [210, 45, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [212, 9, 62, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1560133245], - [212, 23, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 415965921], - [212, 37, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 415824726], - [219, 53, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [219, 53, 18, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 248562579], - [219, 63, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [220, 53, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [221, 53, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2733359506], - [222, 53, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1464759966], - [222, 78, 23, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 2256185229], - [223, 78, 29, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 928143378], - [223, 78, 29, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 928143378], - [223, 114, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193339909], - [224, 53, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2937846925], - [224, 53, 42, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 12364448], - [224, 73, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1193520747], - [225, 51, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [227, 11, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1680956532], - [227, 92, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193339909], - [228, 11, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2476990567], - [228, 11, 37, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3688261642], - [228, 26, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1193520747], - [232, 9, 89, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 214210165], - [233, 22, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1193520747], - [238, 53, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [238, 53, 18, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 248562579], - [238, 63, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [239, 53, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [240, 53, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2733359506], - [241, 53, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1464759966], - [241, 78, 23, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 2256185229], - [242, 78, 29, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 928143378], - [242, 78, 29, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 928143378], - [242, 114, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193339909], - [243, 53, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2937846925], - [243, 53, 42, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 12364448], - [243, 73, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1193520747], - [244, 51, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [249, 9, 29, "Minitest/AssertNil: Prefer using `assert_nil(req, req.inspect)`.", 1419293160], - [249, 9, 29, "Minitest/AssertPredicate: Prefer using `assert_predicate(req, :nil?, req.inspect)`.", 1419293160], - [249, 9, 29, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(req.nil?, req.inspect)`?", 1419293160], - [249, 9, 29, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1419293160] + [65, 3, 152, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 2562815488] ], - "test/test_parsehtml.rb:722217357": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1192794327], - [3, 9, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1996466898], - [11, 31, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1781468273], + "test/test_parsehtml.rb:3524160141": [ [17, 9, 39, "Minitest/RefuteFalse: Prefer using `refute(reserved_values.member?(found))`.", 2704632914], - [21, 20, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2996346383], - [21, 42, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 90458377], - [23, 17, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2996346383], - [24, 9, 53, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3100644711], - [30, 9, 20, "Naming/ClassAndModuleCamelCase: Use CamelCase for classes and modules.", 1514831161], - [32, 32, 44, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3613840706], - [33, 7, 67, "Minitest/AssertEqual: Prefer using `assert_equal('http://bad.com/link', toke.getTag('a').attr_hash['href'])`.", 3503474611], - [33, 7, 67, "Minitest/AssertOperator: Prefer using `assert_operator('http://bad.com/link', :==, toke.getTag('a').attr_hash['href'])`.", 3503474611], - [33, 7, 67, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3503474611], - [33, 14, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1773639616], - [33, 51, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193337892], - [33, 66, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3025988988], - [38, 7, 75, "Minitest/AssertEqual: Prefer using `assert_equal('http://www.com/foo', toke.getTag('f:table').attr_hash['xmlns:f'])`.", 1463151303], - [38, 7, 75, "Minitest/AssertOperator: Prefer using `assert_operator('http://www.com/foo', :==, toke.getTag('f:table').attr_hash['xmlns:f'])`.", 1463151303], - [38, 7, 75, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1463151303], - [38, 14, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 779781494], - [38, 50, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 122424615], - [38, 71, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 8310973], - [42, 32, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 79041148], - [44, 7, 30, "Minitest/AssertEqual: Prefer using `assert_equal(HTMLComment, t.class)`.", 29413628], - [44, 7, 30, "Minitest/AssertOperator: Prefer using `assert_operator(HTMLComment, :==, t.class)`.", 29413628], - [44, 7, 30, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 29413628], - [45, 7, 37, "Minitest/AssertEqual: Prefer using `assert_equal('comment on me', t.contents)`.", 2487791324], - [45, 7, 37, "Minitest/AssertOperator: Prefer using `assert_operator('comment on me', :==, t.contents)`.", 2487791324], - [45, 14, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2128663999], - [71, 7, 61, "Minitest/AssertEqual: Prefer using `assert_equal('

', toke.getTag('h1', 'h2', 'h3').to_s.downcase)`.", 986157674], - [71, 7, 61, "Minitest/AssertOperator: Prefer using `assert_operator('

', :==, toke.getTag('h1', 'h2', 'h3').to_s.downcase)`.", 986157674], - [71, 14, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3129322750], - [71, 36, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085189148], - [71, 42, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085189119], - [71, 48, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085189086], - [72, 7, 70, "Minitest/AssertEqual: Prefer using `assert_equal(HTMLTag.new(''), toke.getTag('IMG', 'A'))`.", 3086837246], - [72, 7, 70, "Minitest/AssertOperator: Prefer using `assert_operator(HTMLTag.new(''), :==, toke.getTag('IMG', 'A'))`.", 3086837246], - [72, 65, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 90591078], - [72, 72, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193336772], - [73, 7, 38, "Minitest/AssertEqual: Prefer using `assert_equal('links', toke.getTrimmedText)`.", 3739004203], - [73, 7, 38, "Minitest/AssertOperator: Prefer using `assert_operator('links', :==, toke.getTrimmedText)`.", 3739004203], - [73, 14, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1197945782], - [74, 26, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 90591078], - [74, 33, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193336772], - [74, 48, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1456237387], - [75, 7, 63, "Minitest/AssertEqual: Prefer using `assert_equal('_blank', toke.getTag('IMG', 'A').attr_hash['target'])`.", 325211204], - [75, 7, 63, "Minitest/AssertOperator: Prefer using `assert_operator('_blank', :==, toke.getTag('IMG', 'A').attr_hash['target'])`.", 325211204], - [75, 14, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1599368272], - [75, 38, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 90591078], - [75, 45, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193336772], - [75, 60, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2908810036] - ], - "test/test_responses.rb:2785332104": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3427008040], - [3, 9, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2748495602], - [11, 34, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 530259623], - [16, 13, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2741767349], - [16, 26, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2904344789], - [17, 13, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 701817958], - [17, 30, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 912646790], - [18, 13, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 621032223], - [18, 31, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340532], - [19, 13, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 620578999], - [19, 31, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340375], - [20, 13, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1006179904], - [20, 32, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91693012], - [21, 13, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 322569067], - [21, 13, 26, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 376400678], - [21, 28, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 322569067], - [23, 42, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2149044978], - [26, 44, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 912646790], - [27, 11, 52, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 893434942], - [27, 24, 38, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 2286651726], - [27, 33, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [27, 34, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91847809], - [27, 43, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340532], - [27, 48, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92087849], - [27, 57, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340375], - [27, 60, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [28, 46, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2904344789], - [29, 11, 47, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2341596065], - [29, 24, 33, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 2322686545], - [29, 35, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [29, 36, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3926355501], - [29, 50, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91693012], - [29, 55, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [34, 13, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2741767349], - [34, 26, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2904344789], - [35, 13, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 701817958], - [35, 30, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 912646790], - [36, 13, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 621032223], - [36, 31, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340532], - [37, 13, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 620578999], - [37, 31, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340375], - [38, 13, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1006179904], - [38, 32, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91693012], - [39, 13, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2058294721], - [39, 27, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2206146453], - [40, 13, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 322569067], - [40, 28, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 322569067], - [41, 13, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3666757975], - [41, 13, 49, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3229683951], - [41, 25, 37, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1647466590], - [44, 26, 22, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 1310147319], - [44, 26, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1310147319], - [45, 26, 21, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2834118728], - [45, 26, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2834118728], - [46, 26, 17, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2013015446], - [46, 26, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2013015446], - [46, 26, 17, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 2013015446], - [52, 46, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2904344789], - [53, 11, 69, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2471615479], - [53, 24, 55, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 881787975], - [53, 35, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [53, 36, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3926355501], - [53, 50, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91693012], - [53, 57, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91538572], - [53, 66, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2206146453], - [53, 77, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [57, 44, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 912646790], - [58, 11, 18, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4082492372] - ], - "test/test_server.rb:3811315049": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1192794327], - [3, 9, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3046940385], - [4, 9, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92337995], - [5, 9, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1480177078], - [6, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3933002043], - [7, 9, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4191648330], - [8, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2569813655], - [9, 9, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2920398136], - [10, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2754036930], - [11, 9, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847734175], - [12, 9, 36, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2222937256], - [28, 28, 17, "Performance/StringIdentifierArgument: Use `:got_log_message` instead of `'got_log_message'`.", 798149142], - [28, 28, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 798149142], - [43, 19, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1066751882], - [47, 39, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [47, 39, 30, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 1393021092], - [47, 56, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1503878771], - [48, 39, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2749623588], - [48, 60, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2782413682], - [49, 39, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 966247324], - [49, 39, 31, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 4148959153], - [50, 37, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [51, 43, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2545186045], - [52, 7, 23, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3056010950], - [54, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [54, 26, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [55, 9, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2648155146], - [55, 9, 26, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 4200202801], - [55, 27, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2545186045], - [58, 46, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340858], - [60, 7, 40, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3825324526], - [64, 19, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1066751882], - [68, 39, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [68, 39, 25, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 1167825989], - [69, 39, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [69, 56, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1503878771], - [70, 39, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2749623588], - [70, 60, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2782413682], - [71, 39, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 789517483], - [71, 62, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2782413682], - [72, 39, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 966247324], - [72, 39, 31, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 4148959153], - [73, 37, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [74, 43, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2545186045], - [75, 7, 23, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3056010950], - [77, 9, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [78, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [78, 26, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [79, 9, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2648155146], - [79, 9, 26, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 4200202801], - [79, 27, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2545186045], - [82, 46, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340858], - [84, 7, 40, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3825324526], - [88, 19, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1066751882], - [88, 52, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193338589], - [92, 39, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [92, 39, 25, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 1167825989], - [93, 39, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [93, 56, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1503878771], - [94, 39, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2749623588], - [94, 60, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2782413682], - [95, 39, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 789517483], - [95, 62, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2782413682], - [96, 39, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 966247324], - [96, 39, 31, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 4148959153], - [97, 37, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [98, 43, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2545186045], - [99, 7, 23, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3056010950], - [100, 7, 52, "Minitest/AssertEqual: Prefer using `assert_equal(e.which_encoding, Server::ENCODE_HTML_FORM)`.", 2915605092], - [100, 7, 52, "Minitest/AssertOperator: Prefer using `assert_operator(e.which_encoding, :==, Server::ENCODE_HTML_FORM)`.", 2915605092], - [101, 7, 109, "Minitest/AssertEqual: Prefer using `assert_equal(e.to_form_markup, e.to_message.to_form_markup(\n args.get_arg(OPENID_NS, 'return_to')\n ))`.", 1000938378], - [101, 7, 109, "Minitest/AssertOperator: Prefer using `assert_operator(e.to_form_markup, :==, e.to_message.to_form_markup(\n args.get_arg(OPENID_NS, 'return_to')\n ))`.", 1000938378], - [102, 9, 36, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 1249712169], - [102, 33, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 322569067], - [107, 19, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1066751882], - [107, 52, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193338589], - [111, 39, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [111, 39, 30, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 1393021092], - [111, 56, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1503878771], - [112, 39, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2749623588], - [112, 60, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2782413682], - [113, 39, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 966247324], - [113, 39, 31, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 4148959153], - [114, 37, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [115, 43, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2545186045], - [116, 7, 23, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3056010950], - [118, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [118, 26, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [119, 9, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2648155146], - [119, 9, 26, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 4200202801], - [119, 27, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2545186045], - [122, 7, 46, "Minitest/AssertEqual: Prefer using `assert_equal(e.which_encoding, Server::ENCODE_URL)`.", 1236493083], - [122, 7, 46, "Minitest/AssertOperator: Prefer using `assert_operator(e.which_encoding, :==, Server::ENCODE_URL)`.", 1236493083], - [124, 46, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340858], - [126, 7, 40, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3825324526], - [133, 39, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [133, 39, 29, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 1955872977], - [133, 56, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 213127718], - [134, 39, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2749623588], - [134, 39, 44, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3643423056], - [134, 60, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2782413682], - [135, 37, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [136, 43, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1714871433], - [137, 7, 24, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2657654983], - [137, 7, 24, "Minitest/RefuteFalse: Prefer using `refute(e.has_return_to)`.", 2657654983], - [139, 7, 42, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 238714842], - [143, 42, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4245718543], - [144, 7, 28, "Minitest/AssertNil: Prefer using `assert_nil(e.get_return_to)`.", 1213245328], - [144, 7, 28, "Minitest/AssertPredicate: Prefer using `assert_predicate(e.get_return_to, :nil?)`.", 1213245328], - [144, 7, 28, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1213245328], - [149, 42, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4245718543], - [150, 7, 29, "Minitest/AssertNil: Prefer using `assert_nil(e.which_encoding)`.", 4124541526], - [150, 7, 29, "Minitest/AssertPredicate: Prefer using `assert_predicate(e.which_encoding, :nil?)`.", 4124541526], - [150, 7, 29, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4124541526], - [156, 21, 39, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 677947260], - [157, 17, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473598058], - [158, 17, 36, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2465241228], - [159, 17, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3824840884], - [160, 23, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2052361250], - [161, 22, 33, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4102359379], - [164, 53, 8, "Performance/StringIdentifierArgument: Use `:decode` instead of `'decode'`.", 3584207753], - [164, 53, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3584207753], - [170, 7, 13, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3296920032], - [175, 9, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3035280173], - [175, 19, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3010637896], - [176, 9, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4035716255], - [176, 9, 37, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 302334704], - [176, 32, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1802443369], - [185, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [185, 26, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1262000177], - [186, 9, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2154815178], - [186, 9, 28, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 993152652], - [186, 27, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3924099456], - [195, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [195, 27, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [196, 9, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2749623588], - [197, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1325864746], - [198, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 966247324], - [199, 9, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2569265983], - [199, 9, 30, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 4131175662], - [204, 9, 35, "Minitest/RefuteFalse: Prefer using `refute(e.to_s.index('values').nil?)`.", 467373897], - [204, 9, 35, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 467373897], - [204, 30, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1065819997], - [212, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [212, 26, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3232603392], - [213, 9, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2749623588], - [214, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1325864746], - [215, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 966247324], - [216, 9, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2569265983], - [218, 9, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 762039473], - [218, 9, 33, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1863847240], - [218, 36, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3028237119], - [221, 7, 39, "Minitest/AssertKindOf: Prefer using `assert_kind_of(Server::CheckIDRequest, r)`.", 3462512927], - [221, 7, 39, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3462512927], - [222, 20, 27, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 2702022931], - [222, 28, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3232603392], - [223, 20, 17, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 2045143442], - [231, 38, 7, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 732701340], - [231, 47, 7, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 1220402807], - [231, 56, 3, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 193419246], - [232, 38, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1220402807], - [232, 47, 4, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 2087932467], - [232, 53, 13, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 2725934909], - [233, 7, 37, "Minitest/AssertEqual: Prefer using `assert_equal(r.mode, 'checkid_immediate')`.", 3748905788], - [233, 7, 37, "Minitest/AssertOperator: Prefer using `assert_operator(r.mode, :==, 'checkid_immediate')`.", 3748905788], - [233, 7, 37, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3748905788], - [233, 24, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3232603392], - [239, 9, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [240, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [240, 26, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [241, 9, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2749623588], - [242, 9, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 789517483], - [243, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1325864746], - [243, 9, 38, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3469479761], - [245, 7, 151, "Minitest/AssertRaisesCompoundBody: Reduce `assert_raises` block body to contain only the raising code.", 647768387], - [253, 9, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [254, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [254, 26, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [255, 9, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2749623588], - [256, 9, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 789517483], - [257, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1325864746], - [258, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 966247324], - [259, 9, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2379882277], - [259, 9, 25, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1767385396], - [263, 7, 21, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1927906708], - [268, 9, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [269, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [269, 26, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [270, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1325864746], - [271, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 966247324], - [272, 9, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2379882277], - [272, 9, 25, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1767385396], - [276, 10, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [276, 11, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 789517483], - [276, 11, 40, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 3497162556], - [277, 11, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2749623588], - [277, 11, 40, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 960842377], - [277, 32, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 266855851], - [277, 51, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [279, 10, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [279, 11, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 789517483], - [279, 11, 42, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 4012708006], - [279, 34, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 266855851], - [280, 11, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2749623588], - [280, 11, 40, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 960842377], - [280, 11, 42, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 2680294612], - [280, 32, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 266855851], - [280, 51, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [286, 9, 22, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 822457045], - [286, 9, 22, "Minitest/RefuteFalse: Prefer using `refute(req.id_select)`.", 822457045], - [292, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [292, 26, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [293, 9, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2749623588], - [294, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1325864746], - [295, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 966247324], - [296, 9, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2569265983], - [296, 9, 30, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 4131175662], - [299, 7, 39, "Minitest/AssertKindOf: Prefer using `assert_kind_of(Server::CheckIDRequest, r)`.", 3462512927], - [299, 7, 39, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3462512927], - [300, 20, 23, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 3010070437], - [300, 28, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [301, 20, 18, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 3053826969], - [309, 9, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [310, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [310, 26, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [311, 9, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2749623588], - [312, 9, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 789517483], - [313, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1325864746], - [314, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 966247324], - [315, 9, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2379882277], - [315, 9, 25, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1767385396], - [318, 7, 39, "Minitest/AssertKindOf: Prefer using `assert_kind_of(Server::CheckIDRequest, r)`.", 3462512927], - [318, 7, 39, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3462512927], - [319, 20, 23, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 3010070437], - [319, 28, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [320, 20, 18, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 3053826969], - [329, 9, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [330, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [330, 26, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [331, 9, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2749623588], - [332, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1325864746], - [333, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 966247324], - [334, 9, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2379882277], - [334, 9, 25, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1767385396], - [343, 9, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [344, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [344, 26, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [345, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1325864746], - [346, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 966247324], - [347, 9, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2379882277], - [347, 9, 25, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1767385396], - [350, 7, 39, "Minitest/AssertKindOf: Prefer using `assert_kind_of(Server::CheckIDRequest, r)`.", 3462512927], - [350, 7, 39, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3462512927], - [351, 20, 23, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 3010070437], - [351, 28, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [352, 20, 18, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 3053826969], - [362, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [362, 26, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [363, 9, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2749623588], - [364, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1325864746], - [365, 9, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2569265983], - [365, 9, 30, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 4131175662], - [377, 9, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [378, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [378, 26, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [379, 9, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2749623588], - [380, 9, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 789517483], - [381, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1325864746], - [382, 9, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2379882277], - [382, 9, 25, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1767385396], - [386, 7, 41, "Minitest/AssertKindOf: Prefer using `assert_kind_of(Server::CheckIDRequest, req)`.", 3170345835], - [386, 7, 41, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3170345835], - [393, 27, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 832170441], - [406, 9, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [407, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [407, 26, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [408, 9, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2749623588], - [409, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1325864746], - [409, 9, 38, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3469479761], - [418, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [418, 26, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [419, 9, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2749623588], - [420, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1325864746], - [421, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 966247324], - [421, 9, 33, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2013833856], - [421, 31, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1277221018], - [434, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [434, 26, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [435, 9, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2749623588], - [436, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1325864746], - [437, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 966247324], - [438, 9, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2569265983], - [438, 9, 62, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3632773663], - [438, 32, 39, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1311202246], - [443, 9, 32, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(e.openid_message, e.to_s)`?", 1858530896], - [451, 36, 7, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 732701340], - [451, 45, 7, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 1220402807], - [451, 54, 3, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 193419246], - [452, 36, 39, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1311202246], - [452, 36, 39, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1311202246], - [453, 36, 5, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 170962968], - [453, 43, 13, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 2725934909], - [459, 36, 7, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 732701340], - [459, 45, 20, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 4294267324], - [459, 45, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4294267324], - [459, 67, 3, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 193419246], - [460, 36, 23, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1118065653], - [460, 36, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1118065653], - [461, 36, 5, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 170962968], - [461, 43, 13, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 2725934909], - [467, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [467, 26, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 45746588], - [468, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1325864746], - [468, 34, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 303879889], - [469, 9, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2419595695], - [469, 25, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 757573595], - [470, 9, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1399592960], - [470, 28, 40, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4259974695], - [471, 9, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2749623588], - [471, 30, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2598898589], - [472, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 966247324], - [472, 31, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2598898622], - [473, 9, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2954082535], - [473, 36, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2598898527], - [474, 9, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2420408939], - [474, 9, 26, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3435302753], - [474, 25, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2950312524], - [477, 7, 41, "Minitest/AssertKindOf: Prefer using `assert_kind_of(Server::CheckAuthRequest, r)`.", 467177306], - [477, 7, 41, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 467177306], - [478, 20, 30, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 3982562415], - [478, 28, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 45746588], - [479, 20, 16, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 659967190], - [479, 27, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 757573595], - [484, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [484, 26, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 45746588], - [485, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1325864746], - [485, 34, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 303879889], - [486, 9, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1399592960], - [486, 28, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2739490097], - [487, 9, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2420271828], - [487, 25, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2598898589], - [488, 9, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2420408675], - [488, 25, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2598898622], - [489, 9, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2420408939], - [489, 9, 26, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3435302753], - [489, 25, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2950312524], - [498, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [498, 26, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 45746588], - [499, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1325864746], - [499, 34, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 303879889], - [500, 9, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2482661766], - [500, 39, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1857981545], - [501, 9, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2419595695], - [501, 25, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 757573595], - [502, 9, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1399592960], - [502, 28, 40, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4259974695], - [503, 9, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2749623588], - [503, 30, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2598898589], - [504, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 966247324], - [504, 31, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2598898622], - [505, 9, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2954082535], - [505, 36, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2598898527], - [506, 9, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2420408939], - [506, 9, 26, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3435302753], - [506, 25, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2950312524], - [509, 7, 41, "Minitest/AssertKindOf: Prefer using `assert_kind_of(Server::CheckAuthRequest, r)`.", 467177306], - [509, 7, 41, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 467177306], - [510, 20, 39, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 420814541], - [510, 41, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1857981545], - [515, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [515, 26, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3996287345], - [516, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1705139659], - [516, 34, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [517, 9, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2312539617], - [517, 9, 45, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 430722052], - [517, 40, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3738611747], - [520, 7, 41, "Minitest/AssertKindOf: Prefer using `assert_kind_of(Server::AssociateRequest, r)`.", 54805120], - [520, 7, 41, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 54805120], - [521, 20, 19, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 535469538], - [521, 28, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3996287345], - [522, 20, 33, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 889286838], - [522, 44, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [523, 20, 25, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 1858710238], - [523, 34, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [530, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [530, 26, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3996287345], - [531, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1705139659], - [531, 9, 34, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2621133954], - [531, 34, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [541, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [541, 26, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3996287345], - [542, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1705139659], - [542, 34, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [543, 9, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2312539617], - [543, 9, 51, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3460428400], - [543, 40, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3026489687], - [554, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [554, 26, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3996287345], - [555, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1705139659], - [555, 34, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [556, 9, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2312539617], - [556, 40, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3738611747], - [557, 9, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3700462040], - [558, 9, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 910348845], - [558, 9, 51, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 908134425], - [561, 7, 41, "Minitest/AssertKindOf: Prefer using `assert_kind_of(Server::AssociateRequest, r)`.", 54805120], - [561, 7, 41, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 54805120], - [562, 20, 19, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 535469538], - [562, 28, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3996287345], - [563, 20, 33, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 889286838], - [563, 44, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [564, 20, 25, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 1858710238], - [564, 34, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [574, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [574, 26, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3996287345], - [575, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1705139659], - [575, 34, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [576, 9, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2312539617], - [576, 40, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3738611747], - [577, 9, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3700462040], - [577, 32, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1372489149], - [578, 9, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 910348845], - [578, 9, 28, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2267969033], - [578, 28, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 957180674], - [587, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [587, 26, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3996287345], - [588, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1705139659], - [588, 34, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [589, 9, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2312539617], - [589, 40, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3738611747], - [590, 9, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3700462040], - [590, 9, 30, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 260471011], - [590, 32, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1372489149], - [599, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [599, 26, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3996287345], - [600, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1705139659], - [600, 34, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [601, 9, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2312539617], - [601, 40, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3738611747], - [602, 9, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 910348845], - [602, 9, 26, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1471272694], - [602, 28, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1372489149], - [624, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [624, 26, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3996287345], - [625, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1705139659], - [625, 34, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4053101430], - [626, 9, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2312539617], - [626, 9, 39, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3873421208], - [635, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [635, 9, 28, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 4045751462], - [635, 26, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3996287345], - [638, 7, 41, "Minitest/AssertKindOf: Prefer using `assert_kind_of(Server::AssociateRequest, r)`.", 54805120], - [638, 7, 41, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 54805120], - [639, 20, 19, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 535469538], - [639, 28, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3996287345], - [640, 20, 39, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 66061791], - [640, 44, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [641, 20, 25, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 1858710238], - [641, 34, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [646, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1705139659], - [646, 34, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [647, 9, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2312539617], - [647, 9, 48, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1252017792], - [647, 40, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2707604295], - [655, 15, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [655, 16, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [655, 16, 27, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 1779081296], - [655, 31, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 862571929], - [656, 16, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [656, 16, 28, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 4045751462], - [656, 33, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3996287345], - [656, 44, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [661, 29, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 862571929], - [668, 7, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3913868777], - [674, 7, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3913868777], - [681, 33, 8, "Performance/StringIdentifierArgument: Use `:encode` instead of `'encode'`.", 4224763619], - [681, 33, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4224763619], - [682, 22, 33, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4102359379], - [691, 9, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 385199414], - [692, 9, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3723562872], - [694, 9, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1866789569], - [696, 9, 3, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 193419246], - [701, 52, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [701, 52, 18, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 2290219986], - [702, 52, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [702, 62, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [703, 52, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [704, 52, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 794246204], - [705, 52, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 322569067], - [705, 52, 32, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1581964121], - [706, 50, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [708, 7, 32, "Minitest/RefuteFalse: Prefer using `refute(response.render_as_form)`.", 25000324], - [709, 7, 53, "Minitest/AssertEqual: Prefer using `assert_equal(response.which_encoding, Server::ENCODE_URL)`.", 2315763837], - [709, 7, 53, "Minitest/AssertOperator: Prefer using `assert_operator(response.which_encoding, :==, Server::ENCODE_URL)`.", 2315763837], - [711, 7, 47, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4026538282], - [711, 42, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3294717144], - [718, 9, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 385199414], - [719, 9, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3723562872], - [721, 9, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1866789569], - [723, 9, 3, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 193419246], - [728, 52, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [728, 52, 18, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 2290219986], - [729, 52, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [729, 62, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [730, 52, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [731, 52, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 794246204], - [732, 52, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 322569067], - [732, 52, 38, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 4193732044], - [732, 67, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193338589], - [733, 50, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [736, 7, 57, "Minitest/AssertOperator: Prefer using `assert_operator(response.encode_to_url.length, :>, OPENID1_URL_LIMIT)`.", 2137079623], - [737, 7, 59, "Minitest/AssertEqual: Prefer using `assert_equal(response.which_encoding, Server::ENCODE_HTML_FORM)`.", 2841569858], - [737, 7, 59, "Minitest/AssertOperator: Prefer using `assert_operator(response.which_encoding, :==, Server::ENCODE_HTML_FORM)`.", 2841569858], - [739, 7, 55, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2778336996], - [744, 9, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 385199414], - [745, 9, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3723562872], - [747, 9, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1866789569], - [749, 9, 3, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 193419246], - [754, 52, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [754, 52, 18, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 2290219986], - [755, 52, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [755, 62, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [756, 52, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [757, 52, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 794246204], - [758, 52, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 322569067], - [758, 52, 38, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 4193732044], - [758, 67, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193338589], - [759, 50, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [760, 46, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [760, 47, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [760, 56, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [760, 61, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [761, 7, 48, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(/ foo=\"bar\"/ =~ form_markup, form_markup)`?", 1957089571], - [761, 7, 48, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1957089571], - [766, 9, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 385199414], - [767, 9, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3723562872], - [769, 9, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1866789569], - [771, 9, 3, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 193419246], - [776, 52, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [776, 52, 18, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 2290219986], - [777, 52, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [777, 62, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [778, 52, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [779, 52, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 794246204], - [780, 52, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 322569067], - [780, 52, 38, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 4193732044], - [780, 67, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193338589], - [781, 50, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [783, 7, 12, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2488722139], - [792, 9, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 385199414], - [793, 9, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3723562872], - [795, 9, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1866789569], - [797, 9, 3, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 193419246], - [803, 52, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [803, 52, 18, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 248562579], - [803, 62, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [804, 52, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [805, 52, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 322569067], - [805, 52, 38, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 4193732044], - [805, 67, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193338589], - [806, 50, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [808, 7, 32, "Minitest/RefuteFalse: Prefer using `refute(response.render_as_form)`.", 25000324], - [809, 7, 57, "Minitest/AssertOperator: Prefer using `assert_operator(response.encode_to_url.length, :>, OPENID1_URL_LIMIT)`.", 2137079623], - [810, 7, 53, "Minitest/AssertEqual: Prefer using `assert_equal(response.which_encoding, Server::ENCODE_URL)`.", 2315763837], - [810, 7, 53, "Minitest/AssertOperator: Prefer using `assert_operator(response.which_encoding, :==, Server::ENCODE_URL)`.", 2315763837], - [812, 7, 69, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2831084200], - [812, 40, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3294717144], - [817, 9, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 385199414], - [818, 9, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3723562872], - [820, 9, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1866789569], - [821, 16, 3, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 193419246], - [826, 52, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [826, 52, 18, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 248562579], - [826, 62, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [827, 52, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [828, 52, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 322569067], - [828, 52, 32, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1581964121], - [829, 50, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [831, 7, 53, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2797848433], - [832, 42, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3294717144], - [834, 38, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3294717144], - [835, 7, 146, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(location.start_with?(request.return_to), format('%s does not start with %s',\n location, request.return_to))`?", 2683527119], - [835, 7, 146, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2683527119], - [835, 14, 39, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3586269412], - [836, 14, 84, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1564650123], - [836, 21, 27, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2724304431], - [836, 21, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2724304431], - [837, 21, 8, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2700611480], - [837, 31, 17, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 871539604], - [841, 7, 26, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 193223076], - [846, 9, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 385199414], - [847, 9, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3723562872], - [849, 9, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1866789569], - [850, 16, 3, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 193419246], - [855, 52, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [855, 52, 18, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 786623363], - [855, 52, 18, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 786623363], - [855, 62, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4176286499], - [856, 50, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [858, 7, 53, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2797848433], - [859, 42, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3294717144], - [864, 9, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 385199414], - [865, 9, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3723562872], - [867, 9, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1866789569], - [868, 16, 3, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 193419246], - [873, 52, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [873, 52, 18, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 786623363], - [873, 52, 18, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 786623363], - [873, 62, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4176286499], - [874, 50, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [876, 7, 37, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1944930512], - [881, 31, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [881, 47, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [885, 9, 40, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 413424971], - [885, 10, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [885, 11, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1325864746], - [885, 36, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3101741185], - [885, 47, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [891, 20, 23, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 1150841182], - [896, 46, 15, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3003826091], - [896, 46, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3003826091], - [897, 46, 9, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 754668632], - [897, 46, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 754668632], - [898, 46, 2, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 5862883], - [902, 52, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1807068342], - [902, 52, 20, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 378977955], - [902, 66, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3039078867], - [903, 52, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 329410673], - [903, 52, 34, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3895965000], - [903, 75, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 297979103], - [904, 50, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [908, 7, 47, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 237793135], - [909, 20, 23, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 1150841182], - [915, 39, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2749623588], - [915, 39, 44, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 2815944649], - [915, 39, 44, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2815944649], - [915, 60, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1571819371], - [916, 37, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [917, 43, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 102289089], - [925, 39, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [925, 39, 28, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 4045751462], - [925, 56, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3996287345], - [926, 39, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2749623588], - [926, 39, 44, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2815944649], - [926, 60, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1571819371], - [927, 37, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [929, 66, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1422321228], - [930, 7, 50, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2819623411], - [931, 20, 23, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 1150841182], - [941, 44, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3164052141], - [943, 9, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 385199414], - [944, 9, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3723562872], - [946, 9, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1866789569], - [947, 16, 3, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 193419246], - [953, 53, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [953, 53, 18, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 248562579], - [953, 63, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [954, 53, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [955, 53, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 322569067], - [955, 53, 33, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1341151641], - [956, 51, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [959, 33, 8, "Performance/StringIdentifierArgument: Use `:encode` instead of `'encode'`.", 4224763619], - [959, 33, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4224763619], - [963, 22, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2648082212], - [966, 37, 2, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 5859267], - [966, 41, 12, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 4223563293], - [967, 37, 8, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3514803799], - [967, 37, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3514803799], - [967, 37, 22, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 2016962611], - [967, 47, 11, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 389098948], - [967, 47, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [971, 7, 53, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2797848433], - [972, 42, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3294717144], - [974, 38, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3294717144], - [976, 7, 35, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1701514406], - [976, 28, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2419595695], - [977, 28, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1325864746], - [978, 28, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1399592960], - [983, 7, 53, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2797848433], - [984, 43, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3294717144], - [986, 38, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3294717144], - [988, 7, 35, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1701514406], - [988, 28, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2419595695], - [989, 28, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1325864746], - [990, 28, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1399592960], - [1002, 9, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 385199414], - [1003, 9, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3723562872], - [1005, 9, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1866789569], - [1006, 16, 3, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 193419246], - [1010, 42, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [1010, 50, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4176286499], - [1012, 7, 53, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2797848433], - [1013, 43, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3294717144], - [1014, 38, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3294717144], - [1016, 7, 36, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2826799940], - [1016, 7, 36, "Minitest/RefuteFalse: Prefer using `refute(query.has_key?('openid.sig'))`.", 2826799940], - [1016, 7, 36, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2826799940], - [1016, 30, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2419595695], - [1021, 31, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [1021, 47, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [1024, 51, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [1024, 52, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [1024, 70, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3101741185], - [1024, 81, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [1027, 7, 47, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 237793135], - [1028, 20, 23, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 1150841182], - [1033, 43, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92008088], - [1033, 50, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 986533710], - [1042, 22, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 714136661], - [1046, 9, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3509799286], - [1047, 9, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3018766398], - [1049, 9, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 749913543], - [1050, 9, 5, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 170962968], - [1056, 29, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2852917526], - [1057, 28, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2852915802], - [1058, 7, 34, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2061673596], - [1058, 7, 34, "Minitest/RefuteFalse: Prefer using `refute(@request.trust_root_valid)`.", 2061673596], - [1062, 29, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4093819203], - [1075, 7, 33, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 68269885], - [1079, 29, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2148131440], - [1080, 28, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2852915802], - [1081, 7, 33, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 68269885], - [1086, 9, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3509799286], - [1089, 9, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 749913543], - [1090, 9, 5, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 170962968], - [1102, 7, 5, "Lint/UnderscorePrefixedVariableName: Do not use prefix `_` for a variable that is used.", 236623619], - [1105, 7, 7, "Naming/VariableName: Use snake_case for variable names.", 4074303232], - [1113, 59, 7, "Naming/VariableName: Use snake_case for variable names.", 4074303232], - [1115, 9, 52, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3212131973], - [1115, 15, 45, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3049753150], - [1116, 7, 79, "Lint/RescueException: Avoid rescuing the `Exception` class. Perhaps you meant to rescue `StandardError`?", 8874920], - [1117, 9, 49, "Minitest/AssertSame: Prefer using `assert_same(e, sentinel, [e, sentinel].inspect)`.", 2912457284], - [1117, 9, 49, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(e.equal?(sentinel), [e, sentinel].inspect)`?", 2912457284], - [1121, 7, 11, "Naming/VariableName: Use snake_case for variable names.", 548879287], - [1132, 20, 11, "Naming/VariableName: Use snake_case for variable names.", 548879287], - [1143, 10, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 322569067], - [1144, 9, 29, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 3737223631], - [1144, 10, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 245860230], - [1147, 27, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [1149, 9, 19, "Layout/IndentationWidth: Use 2 (not 19) spaces for indentation.", 1735044741], - [1149, 29, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 794246204], - [1150, 26, 4, "Layout/ElseAlignment: Align `else` with `expected_list`.", 2087423834], - [1151, 29, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 794246204], - [1152, 26, 3, "Layout/EndAlignment: `end` at 1152, 25 is not aligned with `expected_list << if` at 1148, 8.", 193405706], - [1157, 9, 135, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1556469033], - [1157, 22, 8, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 573203451], - [1157, 32, 6, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 1314690699], - [1158, 22, 82, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 954777080], - [1158, 29, 25, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 697374951], - [1158, 29, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 697374951], - [1159, 29, 1, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 177614], - [1159, 32, 8, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 573203451], - [1159, 42, 6, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 1314690699], - [1162, 48, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1679224880], - [1163, 7, 56, "Minitest/AssertEqual: Prefer using `assert_equal(answer.fields.get_openid_namespace, OPENID2_NS)`.", 840360142], - [1163, 7, 56, "Minitest/AssertOperator: Prefer using `assert_operator(answer.fields.get_openid_namespace, :==, OPENID2_NS)`.", 840360142], - [1166, 20, 33, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 4205702174], - [1167, 20, 24, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 622147789], - [1168, 20, 34, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3393568532], - [1177, 7, 38, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2033662219], - [1182, 29, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 457244556], - [1184, 21, 6, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1311534521], - [1184, 29, 17, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 1359202220], - [1185, 21, 19, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3604674179], - [1191, 7, 38, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2033662219], - [1200, 36, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085279374], - [1206, 21, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1794323614], - [1221, 23, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3232603392], - [1223, 7, 58, "Minitest/AssertEqual: Prefer using `assert_equal(resp.fields.get_arg(OPENID_NS, 'mode'), 'id_res')`.", 1380829661], - [1223, 7, 58, "Minitest/AssertOperator: Prefer using `assert_operator(resp.fields.get_arg(OPENID_NS, 'mode'), :==, 'id_res')`.", 1380829661], - [1223, 7, 58, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1380829661], - [1223, 45, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [1223, 56, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [1229, 23, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [1231, 7, 58, "Minitest/AssertEqual: Prefer using `assert_equal(resp.fields.get_arg(OPENID_NS, 'mode'), 'cancel')`.", 1447025101], - [1231, 7, 58, "Minitest/AssertOperator: Prefer using `assert_operator(resp.fields.get_arg(OPENID_NS, 'mode'), :==, 'cancel')`.", 1447025101], - [1231, 7, 58, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1447025101], - [1231, 45, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [1231, 56, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4176286499], - [1237, 23, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3232603392], - [1248, 23, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3232603392], - [1249, 29, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3913868777], - [1250, 31, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3876881288], - [1252, 20, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3034870887], - [1255, 7, 35, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3569023153], - [1257, 28, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340858], - [1261, 7, 53, "Minitest/AssertEqual: Prefer using `assert_equal(m.get_arg(OPENID_NS, 'trust_root'), 'BOGUS')`.", 2598547887], - [1261, 7, 53, "Minitest/AssertOperator: Prefer using `assert_operator(m.get_arg(OPENID_NS, 'trust_root'), :==, 'BOGUS')`.", 2598547887], - [1261, 7, 53, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2598547887], - [1261, 35, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 137463464], - [1261, 52, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3913868777], - [1262, 7, 55, "Minitest/AssertEqual: Prefer using `assert_equal(m.get_arg(OPENID_NS, 'assoc_handle'), 'ASSOC')`.", 2264954203], - [1262, 7, 55, "Minitest/AssertOperator: Prefer using `assert_operator(m.get_arg(OPENID_NS, 'assoc_handle'), :==, 'ASSOC')`.", 2264954203], - [1262, 35, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [1262, 54, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3876881288], - [1263, 35, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [1263, 44, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3232603392], - [1264, 7, 61, "Minitest/AssertEqual: Prefer using `assert_equal(m.get_arg(OPENID_NS, 'identity'), @request.identity)`.", 1931295217], - [1264, 7, 61, "Minitest/AssertOperator: Prefer using `assert_operator(m.get_arg(OPENID_NS, 'identity'), :==, @request.identity)`.", 1931295217], - [1264, 35, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [1265, 7, 65, "Minitest/AssertEqual: Prefer using `assert_equal(m.get_arg(OPENID_NS, 'claimed_id'), @request.claimed_id)`.", 2879386833], - [1265, 7, 65, "Minitest/AssertOperator: Prefer using `assert_operator(m.get_arg(OPENID_NS, 'claimed_id'), :==, @request.claimed_id)`.", 2879386833], - [1265, 35, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 794246204], - [1266, 7, 63, "Minitest/AssertEqual: Prefer using `assert_equal(m.get_arg(OPENID_NS, 'return_to'), @request.return_to)`.", 3923304977], - [1266, 7, 63, "Minitest/AssertOperator: Prefer using `assert_operator(m.get_arg(OPENID_NS, 'return_to'), :==, @request.return_to)`.", 3923304977], - [1266, 35, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 322569067], - [1274, 21, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1794323614], - [1275, 20, 28, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1617026320], - [1285, 21, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1794323614], - [1286, 20, 28, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1617026320], - [1296, 36, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2979212217], - [1317, 30, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 322569067], - [1317, 43, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 832170441], - [1318, 30, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 137463464], - [1318, 44, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 832170441], - [1319, 30, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [1319, 38, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [1320, 30, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [1320, 46, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 832170441], - [1329, 30, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [1329, 38, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [1330, 30, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 322569067], - [1330, 43, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2284663885], - [1331, 30, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 794246204], - [1331, 44, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 568782352], - [1340, 30, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [1340, 38, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [1341, 30, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 322569067], - [1341, 43, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2284663885], - [1342, 30, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [1342, 42, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 568782352], - [1350, 19, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1114765365], - [1352, 38, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1325864746], - [1352, 38, 49, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 2584928368], - [1352, 63, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3388159452], - [1353, 38, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 789517483], - [1353, 61, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2204003660], - [1354, 38, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2749623588], - [1354, 59, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1750932606], - [1355, 38, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [1355, 55, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [1356, 38, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [1356, 53, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 494421042], - [1357, 38, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 966247324], - [1358, 38, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2569265983], - [1358, 38, 25, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3350179228], - [1358, 61, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [1359, 36, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [1361, 7, 42, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2110461533], - [1367, 30, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [1367, 38, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [1368, 30, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 137463464], - [1368, 44, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1118065653], - [1369, 30, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1442212370], - [1369, 39, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1660241555], - [1370, 30, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 322569067], - [1370, 43, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 504025203], - [1371, 30, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [1371, 46, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 832170441], - [1372, 30, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [1372, 42, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 594902712], - [1376, 7, 52, "Minitest/AssertEqual: Prefer using `assert_equal(result.trust_root, 'http://trustroot.com/')`.", 114269884], - [1376, 7, 52, "Minitest/AssertOperator: Prefer using `assert_operator(result.trust_root, :==, 'http://trustroot.com/')`.", 114269884], - [1376, 35, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1118065653], - [1382, 30, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [1382, 38, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [1383, 30, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1442212370], - [1383, 39, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1118065653], - [1384, 30, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 137463464], - [1384, 44, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1660241555], - [1385, 30, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 322569067], - [1385, 43, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 504025203], - [1386, 30, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [1386, 46, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 832170441], - [1387, 30, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [1387, 42, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 594902712], - [1388, 30, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 794246204], - [1388, 44, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 594902712], - [1392, 7, 52, "Minitest/AssertEqual: Prefer using `assert_equal(result.trust_root, 'http://trustroot.com/')`.", 114269884], - [1392, 7, 52, "Minitest/AssertOperator: Prefer using `assert_operator(result.trust_root, :==, 'http://trustroot.com/')`.", 114269884], - [1392, 35, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1118065653], - [1398, 7, 38, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2033662219], - [1408, 23, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3232603392], - [1411, 20, 28, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1494444439], - [1414, 7, 38, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2033662219], - [1415, 20, 51, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 2836963246], - [1417, 20, 40, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 43584800], - [1417, 20, 75, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 2083974517], - [1417, 53, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [1418, 20, 14, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2136724950], - [1418, 20, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2136724950], - [1426, 23, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3232603392], - [1428, 29, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 449675739], - [1429, 20, 28, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1494444439], - [1432, 7, 38, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2033662219], - [1435, 20, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [1435, 63, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [1437, 46, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2858095960], - [1437, 64, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [1438, 7, 35, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 648932297], - [1439, 25, 51, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 158587515], - [1440, 7, 45, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(!usu.index(expected_substr).nil?, usu)`?", 681836848], - [1440, 7, 45, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 681836848], - [1440, 7, 45, "Minitest/RefuteFalse: Prefer using `refute(usu.index(expected_substr).nil?, usu)`.", 681836848], - [1445, 7, 111, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3867715380], - [1445, 20, 97, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 2628002221], - [1446, 22, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [1446, 22, 18, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 786623363], - [1446, 22, 18, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 786623363], - [1446, 32, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4176286499], - [1447, 20, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [1451, 20, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1363195367], - [1455, 37, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340858], - [1458, 61, 7, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1236122734], - [1459, 61, 19, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3188886797], - [1464, 22, 35, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2713653639], - [1465, 22, 42, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 909353513], - [1465, 66, 3, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 193428192], - [1471, 36, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340858], - [1472, 7, 36, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4270365646], - [1474, 7, 105, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4117374530], - [1474, 28, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [1474, 29, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [1474, 29, 25, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 1135711444], - [1474, 46, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4176286499], - [1475, 29, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [1475, 29, 25, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1167825989], - [1475, 54, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [1479, 23, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3232603392], - [1488, 30, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [1488, 38, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [1489, 30, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 322569067], - [1489, 43, 28, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2745524870], - [1490, 30, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [1490, 46, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 832170441], - [1491, 30, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [1491, 42, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 594902712], - [1492, 30, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 794246204], - [1492, 44, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 594902712], - [1496, 20, 47, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 4133387104], - [1496, 39, 28, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2745524870], - [1501, 30, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [1501, 38, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [1502, 30, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [1502, 46, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 832170441], - [1503, 30, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1948187571], - [1503, 42, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 594902712], - [1504, 30, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 794246204], - [1504, 44, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 594902712], - [1514, 22, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1497248604], - [1518, 9, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3509799286], - [1519, 9, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3018766398], - [1521, 9, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 749913543], - [1522, 9, 5, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 170962968], - [1526, 43, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [1526, 51, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [1527, 43, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3018523035], - [1527, 51, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3035508657], - [1531, 19, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2296266423], - [1532, 43, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1903458695], - [1532, 53, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2574170836], - [1533, 7, 133, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1343788936], - [1533, 20, 36, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3308949379], - [1533, 20, 119, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 736307409], - [1534, 20, 62, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3797650682], - [1534, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [1534, 22, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3018523035], - [1534, 22, 16, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 796284844], - [1534, 32, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3035508657], - [1535, 22, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [1535, 22, 18, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 248562579], - [1535, 32, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [1535, 40, 1, "Layout/ExtraSpacing: Unnecessary spacing detected.", 177541], - [1535, 40, 2, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 5858821], - [1537, 20, 36, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1619997019], - [1537, 20, 81, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 1993106827], - [1538, 20, 24, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 988844531], - [1538, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [1538, 22, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1903458695], - [1538, 34, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2574170836], - [1538, 42, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [1542, 19, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037856718], - [1543, 15, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [1543, 16, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1520528096], - [1543, 16, 23, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 940829485], - [1543, 27, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 504376971], - [1544, 16, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 838278221], - [1544, 16, 22, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2094670184], - [1544, 27, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2886255107], - [1544, 38, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [1546, 7, 133, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1343788936], - [1546, 20, 36, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3308949379], - [1546, 20, 119, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 736307409], - [1547, 20, 62, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3797650682], - [1547, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [1547, 22, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3018523035], - [1547, 22, 16, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 796284844], - [1547, 32, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3035508657], - [1548, 22, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [1548, 22, 18, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 248562579], - [1548, 32, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 691350387], - [1548, 40, 1, "Layout/ExtraSpacing: Unnecessary spacing detected.", 177541], - [1548, 40, 2, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 5858821], - [1557, 7, 8, "Naming/VariableName: Use snake_case for variable names.", 3407076265], - [1562, 47, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92008088], - [1586, 23, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3005341511], - [1588, 43, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2419595695], - [1588, 43, 28, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 141188090], - [1588, 59, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1527765779], - [1589, 43, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91847809], - [1589, 52, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1020552657], - [1590, 43, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92087849], - [1590, 43, 15, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2449727128], - [1590, 52, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3018202743], - [1591, 41, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [1606, 7, 87, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3334118852], - [1606, 20, 24, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2035538501], - [1606, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [1606, 22, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1807068342], - [1606, 36, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3039078867], - [1606, 42, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [1607, 20, 28, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3469844402], - [1614, 7, 88, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3440579503], - [1614, 20, 25, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1486736654], - [1614, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [1614, 22, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1807068342], - [1614, 36, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 967974776], - [1614, 43, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [1615, 20, 28, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3469844402], - [1630, 7, 1, "Lint/UselessAssignment: Useless assignment to variable - `r`.", 177623], - [1632, 7, 88, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3440579503], - [1632, 20, 25, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1486736654], - [1632, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [1632, 22, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1807068342], - [1632, 36, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 967974776], - [1632, 43, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [1633, 20, 28, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3469844402], - [1637, 36, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 129692131], - [1639, 7, 146, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 559422262], - [1639, 20, 28, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3469844402], - [1639, 20, 132, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 3144910905], - [1640, 20, 83, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 4039574002], - [1640, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [1640, 22, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1807068342], - [1640, 22, 20, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 378977955], - [1640, 36, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3039078867], - [1641, 22, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 329410673], - [1641, 22, 36, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2495144628], - [1641, 45, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 129692131], - [1641, 58, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [1646, 22, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3498470604], - [1647, 36, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3498470604], - [1650, 7, 68, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3863692366], - [1650, 20, 54, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 3542805630], - [1650, 51, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [1650, 52, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1807068342], - [1650, 66, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3039078867], - [1650, 72, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [1665, 53, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [1670, 56, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [1674, 7, 49, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3747855532], - [1674, 20, 35, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 1824413564], - [1674, 29, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2380346415], - [1674, 44, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [1675, 29, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [1676, 7, 28, "Minitest/RefuteFalse: Prefer using `refute(rfg.call('mac_key'))`.", 1135258782], - [1676, 24, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1359404130], - [1677, 20, 35, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 1002435172], - [1677, 29, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [1677, 46, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [1678, 23, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1001558037], - [1679, 23, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2061968077], - [1681, 43, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1001558037], - [1682, 47, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2061968077], - [1683, 39, 24, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1069010166], - [1683, 56, 6, "Performance/StringIdentifierArgument: Use `:sha1` instead of `'sha1'`.", 3036224142], - [1683, 56, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3036224142], - [1684, 39, 4, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2088323153], - [1684, 45, 7, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 4050801125], - [1685, 7, 35, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1206981146], - [1689, 53, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2821943524], - [1694, 56, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2821943524], - [1698, 7, 51, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1192804044], - [1698, 20, 37, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 2511289244], - [1698, 29, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2380346415], - [1698, 44, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2821943524], - [1699, 29, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [1700, 7, 28, "Minitest/RefuteFalse: Prefer using `refute(rfg.call('mac_key'))`.", 1135258782], - [1700, 24, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1359404130], - [1701, 20, 37, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 730051716], - [1701, 29, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [1701, 46, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4043085327], - [1702, 23, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1001558037], - [1703, 23, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2061968077], - [1705, 43, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1001558037], - [1706, 47, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2061968077], - [1707, 39, 26, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 216492438], - [1707, 56, 8, "Performance/StringIdentifierArgument: Use `:sha256` instead of `'sha256'`.", 3618363438], - [1707, 56, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3618363438], - [1708, 39, 4, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2088323153], - [1708, 45, 7, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 4050801125], - [1709, 7, 35, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1206981146], - [1715, 23, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [1715, 24, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2423346872], - [1715, 24, 34, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 1275492858], - [1715, 47, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [1716, 24, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1705139659], - [1716, 24, 36, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2556715042], - [1716, 49, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4043085327], - [1716, 60, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [1719, 25, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [1719, 26, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2423346872], - [1719, 26, 38, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 77956150], - [1719, 49, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2307920840], - [1720, 26, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1705139659], - [1720, 26, 36, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2556715042], - [1720, 51, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4043085327], - [1720, 62, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [1725, 9, 14, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 3796761028], - [1739, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [1739, 22, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2423346872], - [1739, 22, 36, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 1737234074], - [1739, 45, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2821943524], - [1740, 22, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1705139659], - [1740, 22, 34, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2621133954], - [1740, 47, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [1740, 56, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [1743, 23, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [1743, 24, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2423346872], - [1743, 24, 36, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 2575290064], - [1743, 47, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3830434158], - [1744, 24, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1705139659], - [1744, 24, 34, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2621133954], - [1744, 49, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4235576623], - [1744, 58, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [1748, 10, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [1748, 11, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2423346872], - [1748, 34, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3005250468], - [1748, 40, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [1750, 9, 12, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 1955746212], - [1762, 17, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 922742307], - [1763, 19, 28, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2777983614], - [1764, 15, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182807033], - [1767, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 543284365], - [1767, 31, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3644585460], - [1768, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [1768, 9, 32, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 4224167777], - [1768, 26, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [1772, 7, 50, "Performance/RedundantMerge: Use `openid2_args['openid.ns'] = OPENID2_NS` instead of `openid2_args.merge!({ 'openid.ns' => OPENID2_NS })`.", 4214599334], - [1772, 28, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [1772, 29, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [1772, 54, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [1777, 37, 11, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2346531819], - [1777, 50, 5, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 165548477], - [1778, 37, 9, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 798169870], - [1778, 48, 7, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 3716925445], - [1781, 45, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1645991854], - [1782, 45, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3782363013], - [1785, 37, 11, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2352250024], - [1785, 50, 5, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 165548477], - [1786, 37, 9, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 798169870], - [1786, 48, 7, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 3716925445], - [1789, 45, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1645991854], - [1790, 45, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3782363013], - [1794, 47, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1853815741], - [1802, 30, 105, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 746386304], - [1802, 79, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], - [1803, 31, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4213211961], - [1803, 57, 4, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 2088344197], - [1803, 63, 19, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 1429796060], - [1804, 30, 10, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 4014237853], - [1805, 7, 63, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal((0 <= difference and difference <= slop), error_message)`?", 3963220444], - [1805, 7, 63, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3963220444], - [1809, 53, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [1813, 20, 35, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 1824413564], - [1813, 29, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2380346415], - [1813, 44, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [1814, 29, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [1816, 34, 15, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2229823993], - [1817, 34, 26, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 962187699], - [1820, 18, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1359404130], - [1822, 7, 33, "Minitest/RefuteFalse: Prefer using `refute(rfg.call('session_type'))`.", 2880155552], - [1822, 24, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [1823, 7, 32, "Minitest/RefuteFalse: Prefer using `refute(rfg.call('enc_mac_key'))`.", 3913805801], - [1823, 24, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1001558037], - [1824, 7, 37, "Minitest/RefuteFalse: Prefer using `refute(rfg.call('dh_server_public'))`.", 2922919089], - [1824, 24, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2061968077], - [1831, 9, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [1832, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [1832, 26, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3996287345], - [1833, 9, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2423346872], - [1833, 32, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [1834, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1705139659], - [1834, 9, 40, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1684518507], - [1834, 34, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [1837, 9, 28, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 535788335], - [1840, 7, 36, "Minitest/RefuteFalse: Prefer using `refute(@request.message.is_openid1)`.", 3154563632], - [1842, 53, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [1846, 20, 35, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 1824413564], - [1846, 29, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2380346415], - [1846, 44, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [1847, 29, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [1854, 18, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1359404130], - [1857, 20, 41, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 1889742477], - [1857, 29, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [1857, 46, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [1858, 7, 32, "Minitest/RefuteFalse: Prefer using `refute(rfg.call('enc_mac_key'))`.", 3913805801], - [1858, 24, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1001558037], - [1859, 7, 37, "Minitest/RefuteFalse: Prefer using `refute(rfg.call('dh_server_public'))`.", 2922919089], - [1859, 24, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2061968077], - [1863, 53, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2821943524], - [1867, 20, 35, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 1824413564], - [1867, 29, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2380346415], - [1867, 44, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [1868, 29, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [1875, 18, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1359404130], - [1877, 7, 33, "Minitest/RefuteFalse: Prefer using `refute(rfg.call('session_type'))`.", 2880155552], - [1877, 24, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [1878, 7, 32, "Minitest/RefuteFalse: Prefer using `refute(rfg.call('enc_mac_key'))`.", 3913805801], - [1878, 24, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1001558037], - [1879, 7, 37, "Minitest/RefuteFalse: Prefer using `refute(rfg.call('dh_server_public'))`.", 2922919089], - [1879, 24, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2061968077], - [1883, 23, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2805116231], - [1884, 22, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473548801], - [1885, 17, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4166457512], - [1891, 46, 7, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1236122734], - [1892, 46, 13, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3850065743], - [1893, 46, 12, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2460005620], - [1895, 7, 56, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1289540685], - [1895, 20, 42, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 1496559517], - [1895, 29, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1835655055], - [1895, 44, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3832253317], - [1896, 29, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2380346415], - [1897, 29, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [1898, 29, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [1902, 17, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4166457512], - [1910, 7, 56, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1289540685], - [1910, 20, 42, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 1496559517], - [1910, 29, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1835655055], - [1910, 44, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3832253317], - [1911, 27, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2380346415], - [1912, 29, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [1913, 27, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [1927, 26, 9, "Lint/InheritException: Inherit from `RuntimeError` instead of `Exception`.", 3513723378], - [1935, 44, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155264792], - [1941, 22, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1078711837], - [1950, 7, 45, "Minitest/AssertEqual: Prefer using `assert_equal(@server.decode_request({}), 'BOGUS')`.", 267032484], - [1950, 7, 45, "Minitest/AssertOperator: Prefer using `assert_operator(@server.decode_request({}), :==, 'BOGUS')`.", 267032484], - [1950, 7, 45, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 267032484], - [1950, 44, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3913868777], - [1955, 7, 47, "Minitest/AssertEqual: Prefer using `assert_equal(@server.encode_response(nil), 'BOGUS')`.", 3999292625], - [1955, 7, 47, "Minitest/AssertOperator: Prefer using `assert_operator(@server.encode_response(nil), :==, 'BOGUS')`.", 3999292625], - [1955, 7, 47, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3999292625], - [1955, 46, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3913868777], - [1965, 22, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1078711837], - [1975, 7, 133, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(response.fields.has_key?(OPENID_NS, 'assoc_handle'), format('No assoc_handle here: %s', response.fields.inspect))`?", 254076116], - [1975, 7, 133, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 254076116], - [1975, 14, 51, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 4132079924], - [1975, 50, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [1976, 14, 59, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2383368192], - [1976, 21, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1666878602], - [1989, 38, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [1989, 38, 25, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 1167825989], - [1990, 38, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1705139659], - [1990, 38, 40, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1684518507], - [1990, 63, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [1991, 36, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [1996, 7, 52, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 622821975], - [1996, 50, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [1997, 50, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1835655055], - [1998, 7, 60, "Minitest/RefuteFalse: Prefer using `refute(response.fields.has_key?(OPENID_NS, 'assoc_handle'))`.", 684966742], - [1998, 51, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [1999, 7, 58, "Minitest/RefuteFalse: Prefer using `refute(response.fields.has_key?(OPENID_NS, 'assoc_type'))`.", 777279812], - [1999, 51, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2380346415], - [2000, 7, 60, "Minitest/RefuteFalse: Prefer using `refute(response.fields.has_key?(OPENID_NS, 'session_type'))`.", 2763726903], - [2000, 51, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [2011, 38, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [2011, 38, 25, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 1167825989], - [2012, 38, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1705139659], - [2012, 38, 40, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1684518507], - [2012, 63, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [2013, 36, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [2018, 50, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1182861117], - [2019, 50, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1835655055], - [2020, 7, 60, "Minitest/RefuteFalse: Prefer using `refute(response.fields.has_key?(OPENID_NS, 'assoc_handle'))`.", 684966742], - [2020, 51, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [2022, 20, 48, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 801272662], - [2022, 20, 82, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 4246418257], - [2022, 55, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2380346415], - [2023, 20, 13, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2821943524], - [2023, 20, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2821943524], - [2024, 20, 50, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2441041093], - [2024, 20, 82, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 4256606889], - [2024, 55, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [2025, 20, 11, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 4043085327], - [2025, 20, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4043085327], - [2033, 9, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2312539617], - [2034, 9, 60, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 445439980], - [2034, 70, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], - [2035, 9, 60, "Layout/MultilineOperationIndentation: Use 2 (not 0) spaces for indenting an expression in an assignment spanning multiple lines.", 1038136246], - [2035, 9, 60, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1038136246], - [2035, 70, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], - [2036, 9, 58, "Layout/MultilineOperationIndentation: Use 2 (not 0) spaces for indenting an expression in an assignment spanning multiple lines.", 1906966423], - [2036, 9, 58, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1906966423], - [2038, 9, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2423346872], - [2038, 32, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2821943524], - [2039, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1705139659], - [2039, 9, 36, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2556715042], - [2039, 34, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4043085327], - [2045, 7, 59, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2802604567], - [2045, 50, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [2053, 40, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 434188188], - [2053, 40, 33, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 628459612], - [2053, 40, 33, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 628459612], - [2053, 58, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 809518918], - [2054, 38, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [2063, 38, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3847714639], - [2063, 38, 25, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 1167825989], - [2063, 38, 25, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1167825989], - [2064, 36, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [2072, 46, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 982539632], - [2072, 57, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3639645159], - [2078, 7, 55, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1203256796], - [2078, 50, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1807068342], - [2105, 22, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2362601682], - [2108, 37, 2, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 5859267], - [2108, 41, 12, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 4223563293], - [2109, 37, 8, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3514803799], - [2109, 37, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3514803799], - [2109, 37, 22, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 2016962611], - [2109, 47, 11, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 389098948], - [2109, 47, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [2115, 52, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [2115, 52, 19, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 1588894046], - [2115, 61, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2153529083], - [2116, 52, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [2116, 61, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2076224418], - [2117, 52, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91662155], - [2117, 52, 21, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2660026475], - [2117, 61, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2066826790], - [2118, 50, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [2120, 7, 103, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 154944688], - [2121, 45, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [2122, 9, 12, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 4223563293], - [2124, 20, 45, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1060697917], - [2124, 20, 99, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 558623656], - [2124, 56, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3666757975], - [2125, 20, 33, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2136464438], - [2125, 20, 33, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2136464438], - [2126, 50, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92008088], - [2136, 52, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [2136, 52, 19, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 1588894046], - [2136, 61, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2153529083], - [2137, 52, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [2137, 61, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2076224418], - [2138, 52, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91662155], - [2138, 61, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2066826790], - [2139, 52, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [2139, 52, 18, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2290219986], - [2140, 50, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [2142, 58, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [2143, 7, 20, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1143552350], - [2145, 7, 13, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 878153131], - [2146, 20, 45, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1060697917], - [2146, 20, 102, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 1886253753], - [2146, 56, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3666757975], - [2147, 20, 36, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 17446759], - [2147, 20, 36, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 17446759], - [2148, 50, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92008088], - [2169, 22, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2362601682], - [2172, 37, 3, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 193347049], - [2172, 42, 12, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 4223563293], - [2173, 37, 8, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3514803799], - [2173, 37, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3514803799], - [2173, 37, 22, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 2016962611], - [2173, 47, 11, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 389098948], - [2173, 47, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [2175, 7, 58, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 652078742], - [2180, 52, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [2180, 52, 19, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 1588894046], - [2180, 61, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2153529083], - [2181, 52, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [2181, 61, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2076224418], - [2182, 52, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91662155], - [2182, 52, 21, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2660026475], - [2182, 61, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2066826790], - [2183, 50, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [2189, 62, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [2190, 7, 24, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2113131453], - [2191, 7, 40, "Minitest/AssertOperator: Prefer using `assert_operator(new_assoc_handle, :!=, assoc_handle)`.", 2268621849], - [2191, 7, 40, "Minitest/RefuteEqual: Prefer using `refute_equal(new_assoc_handle, assoc_handle)`.", 2268621849], - [2194, 45, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 329410673], - [2195, 9, 12, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 4223563293], - [2198, 20, 45, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1060697917], - [2198, 20, 117, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 4121085072], - [2198, 56, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3666757975], - [2199, 20, 51, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1699424398], - [2199, 20, 51, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1699424398], - [2200, 50, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92008088], - [2203, 7, 117, "Minitest/RefuteFalse: Prefer using `refute(@store.get_association(@_normal_key, assoc_handle), 'expired association is still retrievable.')`.", 1906554596], - [2203, 14, 51, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1770632148], - [2204, 14, 43, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 4009043344], - [2204, 14, 43, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4009043344], - [2208, 7, 63, "Minitest/RefuteFalse: Prefer using `refute(@store.get_association(@_normal_key, new_assoc_handle))`.", 2711960116], - [2215, 22, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3288157002], - [2220, 52, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [2220, 52, 19, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 1588894046], - [2220, 61, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2153529083], - [2221, 52, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [2221, 61, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2076224418], - [2222, 52, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91662155], - [2222, 52, 21, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2660026475], - [2222, 61, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2066826790], - [2223, 50, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [2226, 62, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [2227, 7, 24, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2113131453], - [2228, 7, 40, "Minitest/AssertOperator: Prefer using `assert_operator(new_assoc_handle, :!=, assoc_handle)`.", 2268621849], - [2228, 7, 40, "Minitest/RefuteEqual: Prefer using `refute_equal(new_assoc_handle, assoc_handle)`.", 2268621849], - [2231, 45, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 329410673], - [2232, 9, 12, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 4223563293], - [2236, 9, 106, "Minitest/LiteralAsActualArgument: Replace the literal with the first argument.", 3543859408], - [2236, 45, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3666757975], - [2237, 9, 51, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1699424398], - [2237, 9, 51, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 1699424398], - [2239, 50, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92008088], - [2243, 7, 63, "Minitest/RefuteFalse: Prefer using `refute(@store.get_association(@_normal_key, new_assoc_handle))`.", 2711960116], - [2248, 22, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 668783355], - [2250, 27, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3514803799], - [2250, 37, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [2256, 41, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2420271828], - [2256, 41, 21, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 3704097798], - [2256, 57, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [2257, 41, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2797927162], - [2257, 59, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3292828309], - [2258, 41, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1325864746], - [2259, 41, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1399592960], - [2259, 60, 31, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 712681677], - [2260, 41, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2419595695], - [2260, 41, 46, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 217854155], - [2260, 57, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3276329890], - [2261, 39, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [2264, 7, 16, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 113966816], - [2269, 22, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 668783355], - [2271, 27, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3514803799], - [2271, 37, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [2277, 41, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2420271828], - [2277, 41, 21, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 3704097798], - [2277, 57, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [2278, 41, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2797927162], - [2278, 59, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3292828309], - [2279, 41, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1325864746], - [2280, 41, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1399592960], - [2280, 60, 31, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 712681677], - [2281, 41, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2419595695], - [2281, 41, 51, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 308883591], - [2281, 57, 35, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 359760974], - [2282, 39, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [2286, 7, 17, "Minitest/RefuteFalse: Prefer using `refute(verified)`.", 111313281], - [2290, 22, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 668783355], - [2292, 41, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [2292, 41, 14, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 1152280913], - [2292, 50, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [2293, 41, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1024168013], - [2293, 52, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3292828309], - [2294, 41, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2419595695], - [2294, 41, 46, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2107883130], - [2294, 57, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3523724947], - [2295, 39, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [2302, 7, 16, "Minitest/RefuteFalse: Prefer using `refute(verified)`.", 651274144], - [2302, 7, 16, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 651274144], - [2307, 22, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 668783355], - [2309, 27, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3514803799], - [2309, 37, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [2315, 41, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [2315, 41, 14, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 1152280913], - [2315, 50, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [2316, 41, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1024168013], - [2316, 52, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3292828309], - [2317, 41, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2419595695], - [2317, 41, 46, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2898652270], - [2317, 57, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1134463943], - [2318, 39, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [2325, 7, 16, "Minitest/RefuteFalse: Prefer using `refute(verified)`.", 651274144], - [2325, 7, 16, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 651274144], - [2331, 7, 12, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2186388042], - [2331, 7, 12, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2186388042], - [2332, 7, 39, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1039400969], - [2341, 7, 13, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1777349675], - [2341, 7, 13, "Minitest/RefuteFalse: Prefer using `refute(assoc)`.", 1777349675], - [2341, 7, 13, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1777349675], - [2345, 12, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 712109411], - [2346, 7, 86, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4146724539], - [2355, 7, 96, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4126768778], - [2369, 7, 95, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 916032897], - [2377, 7, 92, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 619629903], - [2384, 22, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2249265357], - [2385, 43, 8, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 308967862], - [2385, 53, 12, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 4223563293], - [2386, 43, 8, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3514803799], - [2386, 43, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3514803799], - [2386, 53, 11, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 389098948], - [2386, 53, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [2396, 22, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4137206568], - [2397, 43, 2, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 5859267], - [2397, 47, 12, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 4223563293], - [2398, 43, 8, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3514803799], - [2398, 43, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3514803799], - [2398, 53, 11, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 389098948], - [2398, 53, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [2403, 9, 13, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 878153131], - [2405, 9, 13, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 878153131], - [2408, 9, 14, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 168107178], - [2408, 9, 14, "Minitest/RefuteFalse: Prefer using `refute(assoc)`.", 168107178], - [2417, 44, 34, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1920394204], - [2421, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [2421, 22, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [2421, 22, 28, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 4045751462], - [2421, 39, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3996287345], - [2422, 22, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2423346872], - [2422, 22, 34, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1275492858], - [2422, 45, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [2422, 56, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [2427, 7, 24, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3115487756], - [2428, 42, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1473517757], - [2429, 7, 15, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1326264429], - [2430, 38, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 309987210], - [2431, 7, 32, "Minitest/AssertKindOf: Prefer using `assert_kind_of(Association, assoc)`.", 2131418342], - [2431, 7, 32, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2131418342], - [2433, 23, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [2433, 24, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2562976305], - [2433, 24, 32, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 4224167777], - [2433, 41, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [2434, 24, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 966247324], - [2434, 46, 36, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3344704839], - [2435, 24, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1325864746], - [2436, 24, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2749623588], - [2436, 24, 38, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1066996387], - [2436, 45, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3044246337], - [2436, 62, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [2443, 20, 47, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1883560664], - [2444, 20, 44, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 4262693787], - [2444, 58, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92008088] - ], - "test/test_sreg.rb:2999362992": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2456996725], - [3, 9, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2920398136], - [4, 9, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1480177078], - [10, 9, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3926355501], - [10, 23, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2955010254], - [11, 9, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 152993488], - [11, 23, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4042102324], - [12, 9, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 289239021], - [12, 22, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085166211], - [13, 9, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 595520346], - [13, 21, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193337160], - [14, 9, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1875033617], - [14, 23, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2227488217], - [15, 9, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1168115721], - [15, 20, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3749288336], - [16, 9, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91538572], - [16, 18, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1793132933], - [17, 9, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 746505975], - [17, 9, 21, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3444242356], - [17, 23, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1166730981], - [29, 71, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3644585460], - [35, 11, 40, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1330659053], - [35, 11, 40, "Minitest/RefuteFalse: Prefer using `refute(OpenID.supports_sreg?(endpoint))`.", 1330659053], - [41, 11, 39, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1686046188], - [47, 11, 39, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1686046188], - [86, 11, 55, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 294353057], - [86, 24, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3035579718], - [93, 11, 55, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 294353057], - [93, 24, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3035579718], - [101, 11, 32, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2584293208], - [112, 17, 53, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3180118021], - [121, 37, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 450853529], - [121, 56, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3035579718], - [126, 37, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 450853529], - [126, 56, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3035579718], - [133, 11, 32, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2584293208], - [138, 13, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2365872934], - [138, 32, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3926355501], - [139, 13, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3804494721], - [139, 13, 24, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1820838699], - [139, 32, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91538572], - [144, 24, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3926355501], - [144, 58, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1456237387], - [145, 24, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91538572], - [145, 53, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2815981804], - [150, 9, 226, "Minitest/MultipleAssertions: Test case has too many assertions [4/3].", 1634880331], - [152, 11, 30, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(req.optional)`.", 3242013049], - [152, 11, 30, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3242013049], - [153, 11, 30, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(req.required)`.", 3195688350], - [158, 9, 343, "Minitest/MultipleAssertions: Test case has too many assertions [4/3].", 1213780446], - [159, 30, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3926355501], - [159, 44, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 595520346], - [159, 55, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1851272583], - [159, 72, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1906237766], - [160, 11, 38, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1601583142], - [160, 25, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 595520346], - [161, 25, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3926355501], - [162, 24, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1851272583], - [163, 24, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1906237766], - [167, 55, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1167539968], - [171, 47, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [171, 48, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3804494721], - [171, 67, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3926355501], - [171, 77, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [176, 73, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3035579718], - [178, 25, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3926355501], - [182, 47, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [182, 48, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2741767349], - [182, 48, 23, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 2812331419], - [183, 48, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3804494721], - [183, 48, 29, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1489233706], - [183, 67, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3926355501], - [183, 77, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [187, 11, 41, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2270989676], - [188, 25, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3926355501], - [196, 11, 21, "Minitest/AssertNil: Prefer using `assert_nil(sreg_req)`.", 2463252966], - [196, 11, 21, "Minitest/AssertPredicate: Prefer using `assert_predicate(sreg_req, :nil?)`.", 2463252966], - [196, 11, 21, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2463252966], - [206, 37, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [206, 38, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1190059743], - [206, 49, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1387958103], - [206, 56, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [211, 37, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [211, 38, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2815981804], - [211, 52, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1387958103], - [211, 59, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [212, 11, 30, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(req.required)`.", 3195688350], - [212, 11, 30, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3195688350], - [218, 39, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [218, 40, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2815981804], - [218, 54, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1387958103], - [218, 61, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [224, 37, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [224, 38, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 771425937], - [224, 54, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1851272583], - [224, 69, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [225, 11, 45, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 174024167], - [225, 24, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1851272583], - [230, 37, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [230, 38, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2815981804], - [230, 52, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [230, 54, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [231, 11, 30, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(req.required)`.", 3195688350], - [231, 11, 30, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3195688350], - [236, 37, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [236, 38, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1456237387], - [236, 52, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [236, 54, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [237, 11, 30, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(req.optional)`.", 3242013049], - [237, 11, 30, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3242013049], - [242, 37, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [242, 38, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1456237387], - [242, 52, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3926355501], - [242, 62, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [243, 11, 40, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2304684113], - [243, 25, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3926355501], - [248, 37, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [248, 38, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1456237387], - [248, 52, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 428249261], - [248, 68, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [249, 11, 46, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1791581903], - [254, 37, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [254, 38, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1456237387], - [254, 52, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1621107057], - [254, 73, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [255, 11, 46, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1791581903], - [261, 39, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [261, 40, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1456237387], - [261, 54, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1621107057], - [261, 75, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [267, 37, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [267, 38, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1456237387], - [267, 52, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3926355501], - [267, 64, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2815981804], - [267, 78, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3926355501], - [267, 88, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [268, 11, 40, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1975268086], - [268, 25, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3926355501], - [269, 11, 30, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(req.optional)`.", 3242013049], - [275, 39, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [275, 40, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1456237387], - [275, 54, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3926355501], - [275, 66, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2815981804], - [275, 80, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3926355501], - [275, 90, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [281, 37, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [281, 38, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1456237387], - [281, 52, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 428249261], - [281, 70, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2815981804], - [281, 84, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 208865524], - [281, 102, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [282, 11, 46, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1791581903], - [288, 11, 42, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(req.all_requested_fields)`.", 3400286999], - [288, 11, 42, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3400286999], - [289, 29, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3926355501], - [290, 11, 52, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2401452671], - [290, 25, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3926355501], - [291, 29, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 595520346], - [293, 11, 44, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2404840490], - [298, 11, 35, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1127897652], - [298, 11, 35, "Minitest/RefuteFalse: Prefer using `refute(req.were_fields_requested?)`.", 1127897652], - [299, 29, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3926355501], - [300, 11, 34, "Minitest/AssertPredicate: Prefer using `assert_predicate(req, :were_fields_requested?)`.", 3464281237], - [300, 11, 34, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3464281237], - [305, 11, 78, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4241815295], - [306, 13, 23, "Minitest/RefuteFalse: Prefer using `refute(req.member?(f))`.", 1475778823], - [308, 11, 38, "Minitest/RefuteFalse: Prefer using `refute(req.member?('something else'))`.", 2154492310], - [308, 31, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 608256210], - [309, 29, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3926355501], - [310, 11, 100, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2917560751], - [311, 31, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3926355501], - [315, 9, 887, "Minitest/MultipleAssertions: Test case has too many assertions [8/3].", 1558236157], - [319, 11, 34, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2557981070], - [320, 11, 30, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(req.required)`.", 3195688350], - [324, 11, 34, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2557981070], - [325, 11, 30, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(req.required)`.", 3195688350], - [331, 11, 36, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 529143329], - [335, 11, 34, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1420022121], - [336, 11, 30, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(req.optional)`.", 3242013049], - [341, 61, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3926355501], - [344, 9, 977, "Minitest/MultipleAssertions: Test case has too many assertions [10/3].", 2518763395], - [349, 11, 34, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2557981070], - [350, 11, 30, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(req.required)`.", 3195688350], - [354, 11, 34, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2557981070], - [355, 11, 30, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(req.required)`.", 3195688350], - [361, 11, 36, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 529143329], - [365, 11, 34, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1420022121], - [366, 11, 30, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(req.optional)`.", 3242013049], - [370, 11, 34, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1420022121], - [371, 11, 30, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(req.optional)`.", 3242013049], - [374, 9, 973, "Minitest/MultipleAssertions: Test case has too many assertions [6/3].", 638550010], - [376, 11, 40, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(req.get_extension_args)`.", 1000985471], - [376, 11, 40, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1000985471], - [378, 29, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3926355501], - [379, 11, 66, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 130887290], - [379, 25, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [379, 26, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1456237387], - [379, 40, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3926355501], - [379, 50, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [381, 29, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1168115721], - [382, 11, 72, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 922569594], - [382, 25, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [382, 26, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1456237387], - [382, 40, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 428249261], - [382, 56, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [384, 29, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 595520346], - [385, 11, 121, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2091806121], - [385, 24, 83, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2157819989], - [385, 25, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [385, 26, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1456237387], - [385, 26, 30, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 1720650336], - [385, 40, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 428249261], - [386, 26, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2815981804], - [386, 26, 22, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 643742576], - [386, 40, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 595520346], - [386, 48, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [386, 52, 22, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 4038980869], - [388, 29, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91538572], - [389, 11, 125, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3984026380], - [389, 24, 87, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3806909520], - [389, 25, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [389, 26, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1456237387], - [389, 26, 30, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 1720650336], - [389, 40, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 428249261], - [390, 26, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2815981804], - [390, 26, 26, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1709699829], - [390, 40, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1417962079], - [390, 52, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [390, 56, 22, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 4038980869], - [392, 28, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1851272583], - [393, 11, 206, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1609599414], - [393, 24, 145, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2941687467], - [393, 25, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [393, 26, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1456237387], - [393, 26, 30, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 1720650336], - [393, 40, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 428249261], - [394, 26, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2815981804], - [394, 40, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1417962079], - [395, 26, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 771425937], - [395, 26, 31, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 2158845488], - [395, 42, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1851272583], - [395, 57, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [396, 24, 22, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 4038980869], - [414, 9, 327, "Minitest/MultipleAssertions: Test case has too many assertions [4/3].", 2962377775], - [416, 11, 48, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2798298992], - [418, 36, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 415965921], - [419, 11, 42, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(resp2.get_extension_args)`.", 4197771967], - [419, 11, 42, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4197771967], - [420, 24, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 415965921], - [425, 48, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1006179904], - [425, 48, 34, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 832431171], - [425, 48, 34, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 832431171], - [425, 67, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2032452741], - [426, 46, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [429, 11, 46, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(sreg_resp.get_extension_args)`.", 2611074225], - [429, 11, 46, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2611074225], - [434, 48, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2741767349], - [434, 48, 19, "Layout/FirstHashElementIndentation: Use 2 spaces for indentation in a hash, relative to the start of the line where the left curly brace is.", 995501594], - [435, 48, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1006179904], - [435, 48, 34, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 832431171], - [435, 67, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2032452741], - [436, 46, 1, "Layout/FirstHashElementIndentation: Indent the right brace the same as the start of the line where the left brace is.", 177624], - [439, 11, 100, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2511310576], - [439, 24, 33, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 4132567560], - [439, 25, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [439, 26, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3926355501], - [439, 40, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2032452741], - [439, 55, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [440, 24, 28, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1671714315], - [448, 55, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1875033617], - [467, 11, 179, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2852956171], - [467, 24, 149, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 798464828], - [467, 25, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [467, 26, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3926355501], - [467, 26, 24, "Layout/FirstHashElementLineBreak: Add a line break before the first element of a multi-line hash.", 2584089893], - [467, 40, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2955010254], - [468, 26, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1168115721], - [468, 37, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3749288336], - [469, 26, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1875033617], - [469, 26, 30, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 3573346894], - [469, 40, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2227488217], - [469, 56, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [469, 60, 14, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 2682933314] - ], - "test/test_stores.rb:2848112587": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2055340646], - [3, 9, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3740769632], - [4, 9, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 776966826], - [5, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2754036930], - [6, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2569813655], - [7, 9, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3682152042], - [8, 9, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4191648330], - [14, 25, 64, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3671555844], - [31, 33, 6, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1585570767], - [31, 41, 6, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 2158746291], - [31, 49, 17, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 3475663134], - [31, 68, 8, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 308967862], - [32, 33, 11, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 389098948], - [32, 33, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 389098948], - [49, 9, 31, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4157441164], - [53, 28, 6, "Lint/UselessAssignment: Useless assignment to variable - `issued`.", 1645597496], - [70, 50, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193338589], - [73, 36, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193338589], - [85, 29, 6, "Lint/UselessAssignment: Useless assignment to variable - `issued`.", 1645597496], - [102, 29, 6, "Lint/UselessAssignment: Useless assignment to variable - `issued`.", 1645597496], - [122, 9, 62, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 636138557], - [122, 9, 62, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 636138557], - [143, 9, 11, "Naming/VariableName: Use snake_case for variable names.", 3460325807], - [144, 9, 11, "Naming/VariableName: Use snake_case for variable names.", 3460325804], - [145, 9, 13, "Naming/VariableName: Use snake_case for variable names.", 2369298702], - [146, 9, 13, "Naming/VariableName: Use snake_case for variable names.", 2369298701], - [149, 47, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340532], - [149, 52, 11, "Naming/VariableName: Use snake_case for variable names.", 3460325807], - [150, 47, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340532], - [150, 52, 13, "Naming/VariableName: Use snake_case for variable names.", 2369298702], - [151, 47, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340375], - [151, 52, 13, "Naming/VariableName: Use snake_case for variable names.", 2369298701], - [152, 47, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340470], - [152, 52, 11, "Naming/VariableName: Use snake_case for variable names.", 3460325804], - [155, 9, 51, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1311833160], - [155, 34, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 913889614], - [158, 63, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [161, 9, 35, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3919615708], - [165, 9, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4020453642], - [169, 22, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [193, 9, 59, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3941805004], - [193, 56, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1980376218], - [195, 9, 59, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3941806095], - [195, 56, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1980376313], - [197, 9, 62, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2198473742], - [197, 56, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3391383544], - [201, 9, 53, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2500046652], - [205, 9, 73, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2563588008], - [205, 56, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2166337150], - [207, 9, 73, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4238004139], - [207, 56, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3301162013], - [209, 9, 77, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3622967051], - [209, 9, 77, "Minitest/RefuteFalse: Prefer using `refute(@store.use_nonce(server_url, ts, salt), 'recent_nonce after cleanup')`.", 3622967051], - [209, 57, 28, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4135549020], - [219, 15, 32, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 927935107], - [219, 63, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2776133770], - [221, 33, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2776133770], - [225, 23, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1021102922], - [244, 59, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2226988996], - [249, 9, 27, "Style/SingleLineMethods: Avoid single-line method definitions.", 2799721513], - [251, 9, 27, "Style/SingleLineMethods: Avoid single-line method definitions.", 3632166381], - [259, 22, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1771981058], - [260, 47, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [260, 54, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [260, 86, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 908829581], - [275, 52, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211] - ], - "test/test_trustroot.rb:2895934071": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1192794327], - [3, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3577044961], - [10, 18, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3035991420], - [11, 7, 15, "Minitest/RefuteFalse: Prefer using `refute(tr.nil?)`.", 1147745530], - [11, 7, 15, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1147745530], - [12, 7, 40, "Minitest/AssertPredicate: Prefer using `assert_predicate(tr, :sane?, [case_, desc].join(' '))`.", 1145678904], - [12, 7, 40, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(tr.sane?, [case_, desc].join(' '))`?", 1145678904], - [12, 7, 40, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1145678904], - [12, 43, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193339909], - [13, 7, 80, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(OpenID::TrustRoot::TrustRoot.check_sanity(case_), [case_, desc].join(' '))`?", 1177919530], - [13, 7, 80, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1177919530], - [13, 83, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193339909], - [14, 21, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 506949819], - [15, 7, 41, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(!tr.sane?, [case_, desc].join(' '))`?", 4136225561], - [15, 7, 41, "Minitest/RefuteFalse: Prefer using `refute(tr.sane?, [case_, desc].join(' '))`.", 4136225561], - [15, 7, 41, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 4136225561], - [15, 44, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193339909], - [16, 7, 81, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(!OpenID::TrustRoot::TrustRoot.check_sanity(case_), [case_, desc].join(' '))`?", 1644726603], - [16, 7, 81, "Minitest/RefuteFalse: Prefer using `refute(OpenID::TrustRoot::TrustRoot.check_sanity(case_), [case_, desc].join(' '))`.", 1644726603], - [16, 7, 81, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1644726603], - [16, 84, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193339909], - [18, 7, 21, "Minitest/AssertNil: Prefer using `assert_nil(tr, case_)`.", 1808805500], - [18, 7, 21, "Minitest/AssertPredicate: Prefer using `assert_predicate(tr, :nil?, case_)`.", 1808805500], - [18, 7, 21, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(tr.nil?, case_)`?", 1808805500], - [18, 7, 21, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1808805500], - [26, 7, 48, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(actual_match, [trust_root, url].join(' '))`?", 399517224], - [26, 7, 48, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 399517224], - [26, 51, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193339909], - [27, 7, 62, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 938566281], - [29, 7, 79, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(!actual_match, [expected_match, actual_match, trust_root, url].join(' '))`?", 4098616377], - [29, 7, 79, "Minitest/RefuteFalse: Prefer using `refute(actual_match, [expected_match, actual_match, trust_root, url].join(' '))`.", 4098616377], - [29, 7, 79, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 4098616377], - [29, 82, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193339909], - [30, 7, 63, "Minitest/RefuteFalse: Prefer using `refute(OpenID::TrustRoot::TrustRoot.check_url(trust_root, url))`.", 2029795752], - [30, 7, 63, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2029795752], - [35, 27, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1615896449], - [37, 24, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340920], - [38, 5, 22, "Minitest/AssertEqual: Prefer using `assert_equal(parts[0], '')`.", 2716163892], - [38, 5, 22, "Minitest/AssertOperator: Prefer using `assert_operator(parts[0], :==, '')`.", 2716163892], - [38, 5, 22, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2716163892], - [38, 24, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [56, 22, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340392], - [57, 5, 20, "Minitest/AssertEqual: Prefer using `assert_equal(gdat[0], '')`.", 2145009671], - [57, 5, 20, "Minitest/AssertOperator: Prefer using `assert_operator(gdat[0], :==, '')`.", 2145009671], - [57, 5, 20, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2145009671], - [57, 5, 20, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2145009671], - [57, 23, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [58, 5, 43, "Minitest/AssertEqual: Prefer using `assert_equal(gdat.length, (grps.length * 2 + 1))`.", 2715707524], - [58, 5, 43, "Minitest/AssertOperator: Prefer using `assert_operator(gdat.length, :==, (grps.length * 2 + 1))`.", 2715707524], - [58, 5, 43, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2715707524], - [61, 31, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085273599], - [63, 7, 75, "Minitest/AssertEqual: Prefer using `assert_equal(cases.length, n.to_i, 'Number of cases differs from header count')`.", 1723977884], - [63, 7, 75, "Minitest/AssertOperator: Prefer using `assert_operator(cases.length, :==, n.to_i, 'Number of cases differs from header count')`.", 1723977884], - [63, 7, 75, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1723977884], - [63, 38, 43, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3606132555], - [65, 29, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 93773192], - [76, 12, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [77, 12, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2901252714], - [78, 9, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1522008324], - [79, 9, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2303936687], - [80, 9, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2303936687], - [80, 24, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1582823735], - [81, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3549711987], - [81, 30, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3970487071], - [82, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2975592545], - [82, 30, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3970487071], - [83, 9, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2482901458], - [83, 26, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2750197722], - [83, 50, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 48147208], - [85, 9, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1582823735], - [85, 28, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1582823735], - [86, 7, 69, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 2923696760], - [86, 9, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2482901458], - [86, 26, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3284879288], - [86, 45, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 48147208], - [91, 59, 19, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2696710415], - [92, 59, 9, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 1228896939], - [93, 7, 40, "Minitest/AssertEqual: Prefer using `assert_equal(expected_result, actual_result)`.", 205297942], - [93, 7, 40, "Minitest/AssertOperator: Prefer using `assert_operator(expected_result, :==, actual_result)`.", 205297942], - [93, 7, 40, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 205297942], - [99, 8, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2063294124], - [99, 31, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2063294124], - [100, 8, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2128548441], - [100, 39, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2128548441], - [101, 8, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4094356802], - [101, 35, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4051393215], - [102, 7, 64, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 551179442], - [102, 8, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 675478985], - [102, 39, 31, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4173308980], - [109, 7, 45, "Minitest/AssertEqual: Prefer using `assert_equal(actual_disco_url, expected_disco_url)`.", 1968014039], - [109, 7, 45, "Minitest/AssertOperator: Prefer using `assert_operator(actual_disco_url, :==, expected_disco_url)`.", 1968014039], - [109, 7, 45, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1968014039], - [109, 7, 45, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1968014039] - ], - "test/test_ui.rb:4091247342": [ - [1, 9, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4064536362], - [2, 9, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2920398136], - [3, 9, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1480177078], - [4, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [14, 9, 20, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2785493272], - [15, 9, 20, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2785345648], - [16, 9, 20, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2785733951], - [17, 9, 32, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1703003320], - [17, 22, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085207193], - [19, 32, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1379666127], - [19, 47, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1126375801], - [20, 9, 31, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2686886827], - [20, 9, 31, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2686886827], - [20, 22, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1379666127], - [21, 9, 28, "Minitest/AssertTruthy: Prefer using `assert(req2.icon)`.", 1362226975], - [21, 9, 28, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1362226975], - [22, 9, 31, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 596939450], - [22, 22, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1126375801], - [26, 21, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1379666127], - [27, 9, 31, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2416757017], - [27, 9, 31, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2416757017], - [27, 22, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1379666127], - [32, 9, 28, "Minitest/AssertTruthy: Prefer using `assert(@req.icon)`.", 2955612781], - [32, 9, 28, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2955612781], - [32, 9, 28, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2955612781], - [36, 21, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1126375801], - [37, 9, 31, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3316560968], - [37, 9, 31, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 3316560968], - [37, 22, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1126375801], - [41, 9, 41, "Minitest/AssertEmptyLiteral: Prefer using `assert_empty(@req.get_extension_args)`.", 1295939071], - [42, 21, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1379666127], - [43, 9, 60, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4093031381], - [43, 23, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [43, 24, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [43, 34, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1379666127], - [43, 41, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [45, 9, 76, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1507317735], - [45, 23, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [45, 24, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [45, 34, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1379666127], - [45, 43, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3033241998], - [45, 57, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [46, 21, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1126375801], - [47, 9, 95, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 634691472], - [47, 23, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [47, 24, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [47, 34, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1379666127], - [47, 43, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3033241998], - [47, 59, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3030033825], - [47, 69, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1126375801], - [47, 76, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [51, 17, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [51, 18, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [51, 28, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1379666127], - [51, 37, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3033241998], - [51, 53, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3030033825], - [51, 63, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1126375801], - [51, 70, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [52, 9, 30, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 4089830849], - [53, 9, 31, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2416757017], - [53, 9, 31, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2416757017], - [53, 22, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1379666127], - [54, 9, 28, "Minitest/AssertTruthy: Prefer using `assert(@req.icon)`.", 2955612781], - [54, 9, 28, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2955612781], - [55, 9, 31, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 3316560968], - [55, 22, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1126375801], - [60, 9, 20, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2785493272], - [60, 9, 20, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2785493272], - [61, 9, 20, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2785345648], - [62, 9, 20, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2785733951], - [67, 11, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3037566118], - [67, 21, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3155239158], - [68, 11, 4, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2085193496], - [69, 11, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1304020842], - [70, 11, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1938409204], - [70, 24, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1379666127], - [71, 11, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1934080860], - [72, 11, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1930737395], - [72, 11, 20, "Style/TrailingCommaInArguments: Put a comma after the last parameter of a multiline method call.", 3109612], - [72, 24, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1126375801], - [76, 15, 39, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 893947235], - [77, 9, 30, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 102598425], - [77, 9, 30, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 102598425], - [77, 22, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1379666127], - [78, 9, 27, "Minitest/AssertTruthy: Prefer using `assert(req.icon)`.", 1321818221], - [78, 9, 27, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1321818221], - [79, 9, 30, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1832226568], - [79, 22, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1126375801], - [86, 18, 42, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 127136280], - [87, 9, 18, "Minitest/AssertNil: Prefer using `assert_nil(ui_req)`.", 992518264], - [87, 9, 18, "Minitest/AssertPredicate: Prefer using `assert_predicate(ui_req, :nil?)`.", 992518264], - [87, 9, 18, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 992518264], - [87, 9, 18, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 992518264] - ], - "test/test_urinorm.rb:899800": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1192794327], - [3, 9, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2013616931], - [9, 28, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2829148739], - [18, 22, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3022798919], - [22, 11, 11, "Minitest/UselessAssertion: Useless assertion detected.", 3190231601], - [22, 11, 11, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 3190231601], - [24, 17, 30, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 332750211], - [28, 9, 45, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3454384294] - ], - "test/test_util.rb:2297142672": [ - [1, 13, 10, "Style/MagicCommentFormat: Prefer lowercase for magic comment values.", 4204254942], - [3, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [4, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2569813655], - [10, 9, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [14, 9, 40, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 836734663], - [14, 46, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [20, 9, 20, "Minitest/AssertEqual: Prefer using `assert_equal(c, decoded)`.", 2324889549], - [20, 9, 20, "Minitest/AssertOperator: Prefer using `assert_operator(c, :==, decoded)`.", 2324889549], - [20, 9, 20, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2324889549], - [25, 8, 18, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 4123576517], - [25, 9, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3023135536], - [26, 8, 24, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 982481670], - [26, 9, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3104405669], - [27, 8, 16, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 1583355460], - [27, 9, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3109164129], - [28, 8, 8, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 1086927279], - [28, 9, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [28, 13, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [29, 8, 40, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2057197406], - [29, 9, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3076094355], - [30, 8, 29, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2060115669], - [30, 9, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1106478398], - [31, 8, 36, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 1340151620], - [32, 8, 40, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 161281496], - [32, 8, 40, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 161281496], - [38, 8, 3, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 193340004], - [38, 8, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340004], - [39, 8, 7, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 4095526385], - [39, 8, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4095526385], - [40, 8, 7, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 3937192725], - [40, 8, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3937192725], - [41, 8, 6, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2981209306], - [41, 8, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2981209306], - [42, 8, 11, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2612073491], - [42, 8, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2612073491], - [43, 8, 6, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 3128219166], - [43, 8, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3128219166], - [43, 8, 6, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 3128219166], - [51, 16, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3596550710], - [54, 10, 12, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 2253291250], - [54, 10, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2253291250], - [55, 10, 12, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 1410766151], - [56, 10, 6, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2172472331], - [56, 10, 6, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 2172472331], - [58, 10, 12, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 2244395242], - [58, 10, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2244395242], - [59, 10, 12, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 1410725895], - [60, 10, 6, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2172472331], - [60, 10, 6, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 2172472331], - [62, 10, 10, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 3475357891], - [62, 10, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3475357891], - [63, 10, 19, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 1377885840], - [64, 10, 15, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 4074797665], - [64, 10, 15, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 4074797665], - [64, 19, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3130600772], - [66, 10, 10, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 3466429147], - [66, 10, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3466429147], - [67, 10, 24, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 3971542759], - [67, 20, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [67, 21, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193337892], - [67, 28, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193337735], - [67, 31, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [68, 10, 15, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 4074797665], - [68, 10, 15, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 4074797665], - [68, 19, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3130600772], - [70, 10, 17, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 72618736], - [70, 10, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 72618736], - [71, 10, 28, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2481453770], - [72, 10, 19, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 153258488], - [72, 10, 19, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 153258488], - [72, 19, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2450781277], - [74, 10, 10, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 54854059], - [74, 10, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 54854059], - [75, 10, 28, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2522886889], - [76, 10, 19, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 153361819], - [76, 10, 19, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 153361819], - [76, 19, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2450821438], - [78, 10, 18, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 447453348], - [78, 10, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 447453348], - [79, 10, 28, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 113763113], - [80, 10, 19, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 1883418267], - [80, 10, 19, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 1883418267], - [80, 19, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 530031422], - [82, 10, 18, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 2627320731], - [82, 10, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2627320731], - [83, 10, 36, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2124777257], - [83, 20, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [83, 21, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193337735], - [83, 28, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193337830], - [83, 33, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193337892], - [83, 40, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193337735], - [83, 43, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [84, 10, 19, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 153361819], - [84, 10, 19, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 153361819], - [84, 19, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2450821438], - [86, 10, 20, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 2366824738], - [86, 10, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2366824738], - [87, 10, 30, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2615274394], - [87, 20, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 592177459], - [88, 10, 24, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 282393078], - [88, 10, 24, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 282393078], - [88, 19, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 592177459], - [90, 10, 8, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 130556612], - [90, 10, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 130556612], - [91, 10, 22, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 3829525069], - [91, 21, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340920], - [91, 26, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340920], - [92, 10, 19, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 3524555458], - [92, 10, 19, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 3524555458], - [92, 19, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1515392359], - [94, 10, 14, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 1565836201], - [94, 10, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1565836201], - [95, 10, 32, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 1194410481], - [95, 21, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4069251607], - [96, 10, 52, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 3053137968], - [96, 10, 52, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 3053137968], - [96, 19, 43, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1806438261], - [98, 10, 10, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 2845764490], - [98, 10, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2845764490], - [99, 10, 38, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2316078574], - [99, 21, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2130532320], - [99, 37, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1715704131], - [100, 10, 31, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 3060090017], - [100, 10, 31, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 3060090017], - [100, 19, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 54041988], - [102, 10, 12, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 2281976081], - [102, 10, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2281976081], - [103, 10, 41, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 4239216078], - [103, 20, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 592177459], - [104, 10, 32, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 3551795181], - [104, 10, 32, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 3551795181], - [104, 19, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3400603432], - [106, 10, 12, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 2281976081], - [106, 10, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2281976081], - [107, 10, 41, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 4239216078], - [107, 20, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 592177459], - [108, 10, 32, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 3551795181], - [108, 10, 32, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 3551795181], - [108, 19, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3400603432], - [110, 10, 19, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 162171693], - [110, 10, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 162171693], - [111, 10, 46, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 2945152057], - [111, 20, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 592177459], - [111, 38, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [111, 39, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91629388], - [111, 48, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91629388], - [111, 53, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [112, 10, 32, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 3551795181], - [112, 10, 32, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 3551795181], - [112, 19, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3400603432], - [114, 10, 21, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 510607423], - [114, 10, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 510607423], - [115, 10, 65, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 506486844], - [115, 20, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 592177459], - [115, 38, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [115, 39, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91629388], - [115, 48, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91629388], - [115, 55, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1755174635], - [115, 66, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3029764481], - [115, 72, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [116, 10, 43, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 3210890748], - [116, 10, 43, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 3210890748], - [116, 19, 34, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1924540761], - [118, 10, 19, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 1660976368], - [118, 10, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1660976368], - [119, 10, 68, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 143149722], - [119, 20, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [119, 21, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1387958103], - [119, 32, 8, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1715704131], - [119, 42, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91629388], - [119, 51, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91629388], - [119, 58, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1755174635], - [119, 69, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3029764481], - [119, 75, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [120, 10, 43, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 505843804], - [120, 10, 43, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 505843804], - [120, 19, 34, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1800631417], - [122, 10, 19, "Layout/FirstArrayElementLineBreak: Add a line break before the first element of a multi-line array.", 1954544104], - [122, 10, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1954544104], - [123, 10, 57, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 3689911949], - [124, 10, 43, "Layout/ArrayAlignment: Use one level of indentation for elements following the first line of a multi-line array.", 3210890748], - [124, 10, 44, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 2880179489], - [124, 19, 34, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1924540761], - [131, 9, 35, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3919615708], - [136, 21, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [136, 22, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91610211], - [136, 31, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91456468], - [136, 36, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [136, 57, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1304859439] - ], - "test/test_xrds.rb:3121506046": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1192794327], - [3, 9, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 53893767], - [10, 18, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3997421659], - [11, 21, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 282272535], - [12, 20, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1746319248], - [14, 42, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2414141393], - [27, 9, 17, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3723781485], - [27, 9, 17, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 3723781485], - [39, 27, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [46, 9, 40, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2227934859], - [46, 9, 40, "Minitest/RefuteFalse: Prefer using `refute(Yadis.is_xrds?(isnt))`.", 2227934859], - [46, 9, 40, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2227934859], - [47, 9, 32, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1561664952], - [58, 9, 17, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3723781485], - [58, 9, 17, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 3723781485], - [59, 9, 31, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2108096054], - [59, 22, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91120491], - [60, 9, 48, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 907377908], - [79, 11, 30, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1819078537], - [79, 24, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3784266648], - [82, 9, 17, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3723781485], - [82, 9, 17, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 3723781485], - [83, 9, 21, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2614270702], - [95, 51, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3912890452], - [98, 11, 30, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1819078537], - [98, 24, 9, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3784266648], - [101, 9, 17, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3723781485], - [101, 9, 17, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 3723781485], - [102, 9, 21, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 496230409], - [123, 9, 29, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2315410704], - [123, 9, 29, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2315410704], - [125, 9, 43, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1067534810], - [125, 9, 43, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1067534810], - [126, 9, 37, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2323060724], - [126, 22, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2913214279], - [127, 9, 46, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1459537582], - [127, 23, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4129946608], - [127, 36, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4129795847], - [128, 9, 5, "Lint/UselessAssignment: Useless assignment to variable - `types`. Use `_` or `_types` as a variable name to indicate that it won't be used.", 182678350], - [128, 21, 14, "Lint/UselessAssignment: Useless assignment to variable - `result_element`. Use `_` or `_result_element` as a variable name to indicate that it won't be used.", 1272947533], - [129, 9, 37, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2979748629], - [129, 9, 37, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2979748629], - [129, 22, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3194962822], - [130, 9, 5, "Lint/UselessAssignment: Useless assignment to variable - `types`. Use `_` or `_types` as a variable name to indicate that it won't be used.", 182678350], - [130, 21, 14, "Lint/UselessAssignment: Useless assignment to variable - `result_element`. Use `_` or `_result_element` as a variable name to indicate that it won't be used.", 1272947533], - [131, 9, 37, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2096786870], - [131, 9, 37, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2096786870], - [131, 22, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 792835781], - [137, 32, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 91008555], - [138, 9, 56, "Style/SafeNavigation: Use safe navigation (`&.`) instead of checking if an object exists before calling the method.", 112715029], - [138, 25, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2582233879], - [147, 11, 15, "Style/TrailingCommaInArrayLiteral: Put a comma after the last item of a multiline array.", 2265292785], - [150, 9, 25, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 2880394326], - [150, 9, 25, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2880394326], - [151, 9, 25, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2523625686], - [152, 9, 25, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 3868208470], - [153, 9, 25, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1485455698], - [161, 54, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 761529858], - [162, 32, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1404598128] - ], - "test/test_xri.rb:3314592255": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2995095577], - [8, 50, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 967220702], - [9, 50, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4130173009], - [10, 50, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2370736898], - [11, 50, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1073776786], - [12, 50, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 356334532], - [13, 50, 28, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3829830982], - [14, 50, 29, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3812144533], - [20, 22, 23, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2138006972], - [20, 22, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2138006972], - [21, 22, 41, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 609747295], - [21, 41, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1860815387], - [26, 22, 21, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3275062427], - [26, 22, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3275062427], - [27, 22, 41, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2145714015], - [27, 41, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3275062427], - [29, 22, 27, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3799693299], - [29, 22, 27, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3799693299], - [30, 22, 45, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 110917897], - [30, 41, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 461125773], - [32, 22, 37, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1056779104], - [32, 22, 37, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1056779104], - [33, 22, 53, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2900639308], - [33, 41, 33, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 904883688], - [39, 22, 16, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1813727572], - [39, 58, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1588688621] - ], - "test/test_xrires.rb:3914469068": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2871107037], - [20, 22, 25, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3500629506], - [22, 24, 41, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 787681545], - [23, 28, 67, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3013271295], - [29, 21, 33, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 500041982], - [30, 29, 11, "Performance/StringIdentifierArgument: Use `:query_url` instead of `'query_url'`.", 3767722427], - [30, 29, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3767722427], - [33, 9, 46, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1084696393], - [33, 26, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 152016609], - [33, 44, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3128219166], - [34, 9, 46, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1155890933], - [34, 44, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3128219166], - [35, 9, 46, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 852736660], - [35, 44, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3128219166], - [37, 9, 62, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2814021296], - [37, 26, 15, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2924150720], - [37, 52, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2171019014], - [38, 9, 54, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 432448237], - [38, 44, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2171019014], - [39, 9, 54, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 713776780], - [39, 44, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2171019014], - [41, 9, 72, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1045616656], - [41, 26, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 799610388], - [41, 57, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 284531666], - [42, 9, 59, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 3824273881], - [42, 44, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 284531666], - [43, 9, 59, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2512468504], - [43, 44, 19, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 284531666], - [45, 9, 78, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2899734640], - [45, 26, 23, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3810484397], - [45, 60, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3239081803], - [46, 9, 62, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 285208128], - [46, 44, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3239081803], - [47, 9, 62, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 854815905], - [47, 44, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3239081803], - [50, 20, 47, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1243219811], - [52, 9, 47, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1434789637], - [52, 26, 7, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 152016609], - [52, 44, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3128219166], - [53, 9, 44, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 3906225103], - [53, 41, 6, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3128219166], - [59, 21, 33, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 500041982], - [60, 29, 11, "Performance/StringIdentifierArgument: Use `:query_url` instead of `'query_url'`.", 3767722427], - [60, 29, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3767722427], - [63, 9, 56, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 3570063273], - [63, 26, 12, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1082638944], - [63, 49, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3286570367], - [64, 9, 51, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 1763884308], - [64, 44, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3286570367], - [65, 9, 51, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 809422165], - [65, 44, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3286570367], - [67, 9, 60, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 3488714473], - [67, 26, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2172795392], - [67, 51, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1367347551], - [68, 9, 53, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 95490292], - [68, 44, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1367347551], - [69, 9, 53, "Style/MethodCallWithArgsParentheses: Use parentheses for method calls with arguments.", 2722534901], - [69, 44, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1367347551] - ], - "test/test_yadis_discovery.rb:2305354371": [ - [1, 9, 18, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1212825145], - [2, 9, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1192794327], - [3, 9, 5, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 92337995], - [4, 9, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1906546608], - [5, 9, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2951987467], - [6, 9, 13, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2569813655], - [7, 9, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2855918054], - [16, 5, 438, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 1189860280], - [21, 27, 3, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 193340639], - [27, 35, 6, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 2141063537], - [27, 43, 4, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 2087730517], - [28, 35, 7, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 643017641], - [40, 9, 5, "Style/InfiniteLoop: Use `Kernel#loop` for infinite loops.", 191284826], - [47, 48, 3, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 193353621], - [47, 53, 2, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 5858789], - [47, 53, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [47, 57, 2, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 5861859], - [48, 48, 11, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 974392568], - [53, 36, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3294717144], - [69, 49, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [72, 11, 17, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3274948509], - [72, 11, 51, "Style/TrailingCommaInHashLiteral: Put a comma after the last item of a multiline hash.", 1017043739], - [72, 41, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 4269826632], - [74, 42, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [82, 15, 28, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3362479006], - [94, 21, 26, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1058932071], - [103, 48, 9, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3673954884], - [104, 48, 11, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3987966091], - [105, 48, 8, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2704914800], - [106, 48, 12, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3363686836], - [107, 48, 8, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 2800676358], - [119, 34, 11, "Performance/StringIdentifierArgument: Use `:ancestors` instead of `'ancestors'`.", 288359141], - [119, 34, 11, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 288359141], - [119, 47, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], - [125, 11, 54, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 315198640], - [127, 24, 51, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 1771768602], - [127, 24, 51, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1771768602], - [128, 24, 21, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 3188732146], - [128, 47, 24, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 2751000549], - [129, 11, 76, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1850137303], - [131, 24, 46, "Layout/FirstMethodArgumentLineBreak: Add a line break before the first argument of a multi-line method argument list.", 3575978222], - [131, 24, 46, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 3575978222], - [132, 24, 20, "Layout/ArgumentAlignment: Use one level of indentation for arguments following the first line of a multi-line method call.", 808345795], - [132, 46, 23, "Layout/MultilineMethodArgumentLineBreaks: Each argument in a multi-line method call must start on a separate line.", 2855499892], - [133, 11, 74, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3003744055], - [146, 13, 55, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 4015532116], - [154, 50, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [160, 50, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [160, 55, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside { detected.", 177541], - [160, 56, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1485943929], - [160, 74, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789], - [160, 76, 1, "Layout/SpaceInsideHashLiteralBraces: Space inside } detected.", 177541], - [175, 45, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2174797945], - [176, 33, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2413032521], - [177, 27, 24, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2183207348], - [183, 45, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2174797945], - [184, 51, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2413032521], - [191, 45, 21, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2174797945], - [192, 51, 20, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 2413032521], - [193, 31, 22, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 944078397], - [195, 9, 23, "Minitest/RefuteFalse: Prefer using `refute(result.is_xrds)`.", 462657144], - [200, 35, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1868228811], - [201, 11, 31, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 1545761723], - [207, 35, 14, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1868228811], - [208, 11, 37, "Minitest/EmptyLineBeforeAssertionMethods: Add empty line before assertion.", 3628297104], - [208, 24, 2, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 5858789] + [31, 9, 20, "Naming/ClassAndModuleCamelCase: Use CamelCase for classes and modules.", 1514831161] + ], + "test/test_server.rb:3910423468": [ + [145, 7, 24, "Minitest/RefuteFalse: Prefer using `refute(e.has_return_to)`.", 2657654983], + [216, 9, 36, "Minitest/RefuteFalse: Prefer using `refute(e.to_s.index(\"values\").nil?)`.", 657105768], + [236, 7, 31, "Minitest/AssertTruthy: Prefer using `assert(r.immediate)`.", 1416352194], + [265, 7, 151, "Minitest/AssertRaisesCompoundBody: Reduce `assert_raises` block body to contain only the raising code.", 647768387], + [312, 9, 22, "Minitest/RefuteFalse: Prefer using `refute(req.id_select)`.", 822457045], + [328, 7, 32, "Minitest/RefuteFalse: Prefer using `refute(r.immediate)`.", 960207049], + [348, 7, 32, "Minitest/RefuteFalse: Prefer using `refute(r.immediate)`.", 960207049], + [381, 7, 32, "Minitest/RefuteFalse: Prefer using `refute(r.immediate)`.", 960207049], + [473, 9, 32, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(e.openid_message, e.to_s)`?", 1858530896], + [755, 7, 32, "Minitest/RefuteFalse: Prefer using `refute(response.render_as_form)`.", 25000324], + [811, 7, 48, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(/ foo=\"bar\"/ =~ form_markup, form_markup)`?", 1957089571], + [859, 7, 32, "Minitest/RefuteFalse: Prefer using `refute(response.render_as_form)`.", 25000324], + [890, 7, 179, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(location.start_with?(request.return_to), format(\n \"%s does not start with %s\",\n location,\n request.return_to,\n ))`?", 12042927], + [1097, 7, 37, "Minitest/RefuteFalse: Prefer using `refute(query.has_key?(\"openid.sig\"))`.", 3540209093], + [1141, 7, 34, "Minitest/RefuteFalse: Prefer using `refute(@request.trust_root_valid)`.", 2061673596], + [1187, 7, 5, "Lint/UnderscorePrefixedVariableName: Do not use prefix `_` for a variable that is used.", 236623619], + [1190, 7, 7, "Naming/VariableName: Use snake_case for variable names.", 4074303232], + [1198, 59, 7, "Naming/VariableName: Use snake_case for variable names.", 4074303232], + [1202, 7, 77, "Lint/RescueException: Avoid rescuing the `Exception` class. Perhaps you meant to rescue `StandardError`?", 4198858813], + [1207, 7, 11, "Naming/VariableName: Use snake_case for variable names.", 548879287], + [1218, 20, 11, "Naming/VariableName: Use snake_case for variable names.", 548879287], + [1553, 7, 45, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(!usu.index(expected_substr).nil?, usu)`?", 681836848], + [1553, 7, 45, "Minitest/RefuteFalse: Prefer using `refute(usu.index(expected_substr).nil?, usu)`.", 681836848], + [1697, 7, 8, "Naming/VariableName: Use snake_case for variable names.", 3407076265], + [1776, 7, 1, "Lint/UselessAssignment: Useless assignment to variable - `r`.", 177623], + [1832, 7, 28, "Minitest/RefuteFalse: Prefer using `refute(rfg.call(\"mac_key\"))`.", 3386342814], + [1861, 7, 28, "Minitest/RefuteFalse: Prefer using `refute(rfg.call(\"mac_key\"))`.", 3386342814], + [1945, 7, 48, "Performance/RedundantMerge: Use `openid2_args[\"openid.ns\"] = OPENID2_NS` instead of `openid2_args.merge!({\"openid.ns\" => OPENID2_NS})`.", 2569663590], + [1984, 58, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], + [1991, 7, 63, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal((0 <= difference and difference <= slop), error_message)`?", 3963220444], + [2010, 7, 33, "Minitest/RefuteFalse: Prefer using `refute(rfg.call(\"session_type\"))`.", 996256384], + [2011, 7, 32, "Minitest/RefuteFalse: Prefer using `refute(rfg.call(\"enc_mac_key\"))`.", 934428137], + [2012, 7, 37, "Minitest/RefuteFalse: Prefer using `refute(rfg.call(\"dh_server_public\"))`.", 3667761681], + [2028, 7, 36, "Minitest/RefuteFalse: Prefer using `refute(@request.message.is_openid1)`.", 3154563632], + [2046, 7, 32, "Minitest/RefuteFalse: Prefer using `refute(rfg.call(\"enc_mac_key\"))`.", 934428137], + [2047, 7, 37, "Minitest/RefuteFalse: Prefer using `refute(rfg.call(\"dh_server_public\"))`.", 3667761681], + [2065, 7, 33, "Minitest/RefuteFalse: Prefer using `refute(rfg.call(\"session_type\"))`.", 996256384], + [2066, 7, 32, "Minitest/RefuteFalse: Prefer using `refute(rfg.call(\"enc_mac_key\"))`.", 934428137], + [2067, 7, 37, "Minitest/RefuteFalse: Prefer using `refute(rfg.call(\"dh_server_public\"))`.", 3667761681], + [2119, 26, 9, "Lint/InheritException: Inherit from `RuntimeError` instead of `Exception`.", 3513723378], + [2170, 7, 145, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(response.fields.has_key?(OPENID_NS, \"assoc_handle\"), format(\"No assoc_handle here: %s\", response.fields.inspect))`?", 3688376219], + [2196, 7, 60, "Minitest/RefuteFalse: Prefer using `refute(response.fields.has_key?(OPENID_NS, \"assoc_handle\"))`.", 2854410038], + [2197, 7, 58, "Minitest/RefuteFalse: Prefer using `refute(response.fields.has_key?(OPENID_NS, \"assoc_type\"))`.", 2681756964], + [2198, 7, 60, "Minitest/RefuteFalse: Prefer using `refute(response.fields.has_key?(OPENID_NS, \"session_type\"))`.", 877733463], + [2218, 7, 60, "Minitest/RefuteFalse: Prefer using `refute(response.fields.has_key?(OPENID_NS, \"assoc_handle\"))`.", 2854410038], + [2236, 70, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], + [2237, 72, 1, "Style/LineEndConcatenation: Use `\\` instead of `+` or `<<` to concatenate those strings.", 177550], + [2426, 7, 129, "Minitest/RefuteFalse: Prefer using `refute(@store.get_association(@_normal_key, assoc_handle), \"expired association is still retrievable.\")`.", 966024235], + [2433, 7, 63, "Minitest/RefuteFalse: Prefer using `refute(@store.get_association(@_normal_key, new_assoc_handle))`.", 2711960116], + [2469, 7, 63, "Minitest/RefuteFalse: Prefer using `refute(@store.get_association(@_normal_key, new_assoc_handle))`.", 2711960116], + [2513, 7, 17, "Minitest/RefuteFalse: Prefer using `refute(verified)`.", 111313281], + [2529, 7, 17, "Minitest/RefuteFalse: Prefer using `refute(verified)`.", 111313281], + [2552, 7, 17, "Minitest/RefuteFalse: Prefer using `refute(verified)`.", 111313281], + [2570, 7, 14, "Minitest/RefuteFalse: Prefer using `refute(assoc)`.", 168107178], + [2652, 9, 14, "Minitest/RefuteFalse: Prefer using `refute(assoc)`.", 168107178] + ], + "test/test_sreg.rb:3857040769": [ + [36, 11, 40, "Minitest/RefuteFalse: Prefer using `refute(OpenID.supports_sreg?(endpoint))`.", 1330659053], + [158, 9, 219, "Minitest/MultipleAssertions: Test case has too many assertions [4/3].", 794229251], + [167, 9, 344, "Minitest/MultipleAssertions: Test case has too many assertions [4/3].", 1722648752], + [325, 11, 35, "Minitest/RefuteFalse: Prefer using `refute(req.were_fields_requested?)`.", 1127897652], + [335, 13, 23, "Minitest/RefuteFalse: Prefer using `refute(req.member?(f))`.", 1475778823], + [337, 11, 38, "Minitest/RefuteFalse: Prefer using `refute(req.member?(\"something else\"))`.", 2405881526], + [345, 9, 879, "Minitest/MultipleAssertions: Test case has too many assertions [8/3].", 3860000910], + [378, 9, 966, "Minitest/MultipleAssertions: Test case has too many assertions [10/3].", 1752993210], + [413, 9, 1096, "Minitest/MultipleAssertions: Test case has too many assertions [6/3].", 1076119837], + [473, 9, 325, "Minitest/MultipleAssertions: Test case has too many assertions [4/3].", 311804901] + ], + "test/test_stores.rb:1128171358": [ + [59, 28, 6, "Lint/UselessAssignment: Useless assignment to variable - `issued`.", 1645597496], + [91, 29, 6, "Lint/UselessAssignment: Useless assignment to variable - `issued`.", 1645597496], + [108, 29, 6, "Lint/UselessAssignment: Useless assignment to variable - `issued`.", 1645597496], + [150, 9, 11, "Naming/VariableName: Use snake_case for variable names.", 3460325807], + [151, 9, 11, "Naming/VariableName: Use snake_case for variable names.", 3460325804], + [152, 9, 13, "Naming/VariableName: Use snake_case for variable names.", 2369298702], + [153, 9, 13, "Naming/VariableName: Use snake_case for variable names.", 2369298701], + [156, 52, 11, "Naming/VariableName: Use snake_case for variable names.", 3460325807], + [157, 52, 13, "Naming/VariableName: Use snake_case for variable names.", 2369298702], + [158, 52, 13, "Naming/VariableName: Use snake_case for variable names.", 2369298701], + [159, 52, 11, "Naming/VariableName: Use snake_case for variable names.", 3460325804], + [225, 9, 77, "Minitest/RefuteFalse: Prefer using `refute(@store.use_nonce(server_url, ts, salt), \"recent_nonce after cleanup\")`.", 3891537003] + ], + "test/test_trustroot.rb:4002363571": [ + [11, 7, 16, "Minitest/RefuteFalse: Prefer using `refute(tr.nil?)`.", 3450525467], + [13, 7, 81, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(OpenID::TrustRoot::TrustRoot.check_sanity(case_), [case_, desc].join(\" \"))`?", 916980427], + [15, 7, 42, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(!tr.sane?, [case_, desc].join(\" \"))`?", 3255143832], + [15, 7, 42, "Minitest/RefuteFalse: Prefer using `refute(tr.sane?, [case_, desc].join(\" \"))`.", 3255143832], + [16, 7, 82, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(!OpenID::TrustRoot::TrustRoot.check_sanity(case_), [case_, desc].join(\" \"))`?", 2997549066], + [16, 7, 82, "Minitest/RefuteFalse: Prefer using `refute(OpenID::TrustRoot::TrustRoot.check_sanity(case_), [case_, desc].join(\" \"))`.", 2997549066], + [26, 7, 49, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(actual_match, [trust_root, url].join(\" \"))`?", 2242211977], + [29, 7, 80, "Minitest/AssertWithExpectedArgument: Did you mean to use `assert_equal(!actual_match, [expected_match, actual_match, trust_root, url].join(\" \"))`?", 3810436984], + [29, 7, 80, "Minitest/RefuteFalse: Prefer using `refute(actual_match, [expected_match, actual_match, trust_root, url].join(\" \"))`.", 3810436984], + [30, 7, 64, "Minitest/RefuteFalse: Prefer using `refute(OpenID::TrustRoot::TrustRoot.check_url(trust_root, url))`.", 1484346761] + ], + "test/test_ui.rb:1420302060": [ + [22, 9, 29, "Minitest/AssertTruthy: Prefer using `assert(req2.icon)`.", 591024350], + [35, 9, 29, "Minitest/AssertTruthy: Prefer using `assert(@req.icon)`.", 1633148460], + [62, 9, 29, "Minitest/AssertTruthy: Prefer using `assert(@req.icon)`.", 1633148460], + [88, 9, 28, "Minitest/AssertTruthy: Prefer using `assert(req.icon)`.", 1476625708] + ], + "test/test_urinorm.rb:3101587968": [ + [22, 11, 12, "Minitest/UselessAssertion: Useless assertion detected.", 2511510896] + ], + "test/test_xrds.rb:1238667361": [ + [48, 9, 41, "Minitest/RefuteFalse: Prefer using `refute(Yadis.is_xrds?(isnt))`.", 2709875658], + [135, 9, 5, "Lint/UselessAssignment: Useless assignment to variable - `types`. Use `_` or `_types` as a variable name to indicate that it won't be used.", 182678350], + [135, 21, 14, "Lint/UselessAssignment: Useless assignment to variable - `result_element`. Use `_` or `_result_element` as a variable name to indicate that it won't be used.", 1272947533], + [138, 9, 5, "Lint/UselessAssignment: Useless assignment to variable - `types`. Use `_` or `_types` as a variable name to indicate that it won't be used.", 182678350], + [138, 21, 14, "Lint/UselessAssignment: Useless assignment to variable - `result_element`. Use `_` or `_result_element` as a variable name to indicate that it won't be used.", 1272947533], + [147, 9, 56, "Style/SafeNavigation: Use safe navigation (`&.`) instead of checking if an object exists before calling the method.", 2495284533] + ], + "test/test_yadis_discovery.rb:3772993760": [ + [16, 5, 437, "Style/ClassMethodsDefinitions: Use `class << self` to define a class method.", 1189860280], + [43, 9, 5, "Style/InfiniteLoop: Use `Kernel#loop` for infinite loops.", 191284826], + [128, 46, 3, "Style/AndOr: Use `&&` instead of `and`.", 193409806], + [214, 9, 23, "Minitest/RefuteFalse: Prefer using `refute(result.is_xrds)`.", 462657144] ], "test/testutil.rb:1111535143": [ [1, 9, 10, "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.", 1702461967], diff --git a/.simplecov b/.simplecov new file mode 100644 index 0000000..bfe90c0 --- /dev/null +++ b/.simplecov @@ -0,0 +1,3 @@ +require "kettle/soup/cover/config" + +SimpleCov.start diff --git a/.tool-versions b/.tool-versions index 8649c69..59511e1 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1 +1 @@ -ruby 3.2.5 +ruby 2.7.8 diff --git a/Gemfile b/Gemfile index 1ab926e..1d4b7a8 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,17 @@ +# frozen_string_literal: true + +#### IMPORTANT ####################################################### +# Gemfile is for local development ONLY; Gemfile is NOT loaded in CI # +####################################################### IMPORTANT #### + source "https://rubygems.org" +git_source(:github) { |repo_name| "https://github.com/#{repo_name}" } + # Specify your gem's dependencies in ruby-openid.gemspec gemspec -gem "byebug" +platform :mri do + # Debugging + gem "byebug", ">= 11" +end diff --git a/Gemfile.lock b/Gemfile.lock index b936562..d093635 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -6,11 +6,23 @@ PATH GEM remote: https://rubygems.org/ specs: + ansi (1.5.0) ast (2.4.2) + backports (3.25.0) byebug (11.1.3) diff-lcs (1.5.1) diffy (3.4.2) + docile (1.4.1) json (2.7.2) + kettle-soup-cover (1.0.4) + simplecov (~> 0.22) + simplecov-cobertura (~> 2.1) + simplecov-console (~> 0.9, >= 0.9.1) + simplecov-html (~> 0.12) + simplecov-lcov (~> 0.8) + simplecov-rcov (~> 0.3, >= 0.3.3) + simplecov_json_formatter (~> 0.1, >= 0.1.4) + version_gem (~> 1.1, >= 1.1.4) language_server-protocol (3.17.0.3) lint_roller (1.1.0) minitest (5.25.1) @@ -25,13 +37,13 @@ GEM rexml (3.3.6) strscan rspec-block_is_expected (1.0.6) - rubocop (1.65.1) + rubocop (1.64.1) json (~> 2.3) language_server-protocol (>= 3.17.0) parallel (~> 1.10) parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) - regexp_parser (>= 2.4, < 3.0) + regexp_parser (>= 1.8, < 3.0) rexml (>= 3.2.5, < 4.0) rubocop-ast (>= 1.31.1, < 2.0) ruby-progressbar (~> 1.7) @@ -73,10 +85,26 @@ GEM rubocop-thread_safety (0.5.1) rubocop (>= 0.90.0) ruby-progressbar (1.13.0) - standard (1.40.0) + simplecov (0.22.0) + docile (~> 1.1) + simplecov-html (~> 0.11) + simplecov_json_formatter (~> 0.1) + simplecov-cobertura (2.1.0) + rexml + simplecov (~> 0.19) + simplecov-console (0.9.1) + ansi + simplecov + terminal-table + simplecov-html (0.12.3) + simplecov-lcov (0.8.0) + simplecov-rcov (0.3.7) + simplecov (>= 0.4.1) + simplecov_json_formatter (0.1.4) + standard (1.37.0) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.0) - rubocop (~> 1.65.0) + rubocop (~> 1.64.0) standard-custom (~> 1.0.0) standard-performance (~> 1.4) standard-custom (1.0.2) @@ -92,16 +120,23 @@ GEM standard-performance (>= 1.3.1, < 2) version_gem (>= 1.1.4, < 3) strscan (3.1.0) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) unicode-display_width (2.5.0) version_gem (1.1.4) webrick (1.8.1) + yard (0.9.36) + yard-junk (0.0.9) + backports (>= 3.18) + rainbow + yard PLATFORMS - arm64-darwin-23 - ruby + arm64-darwin-22 DEPENDENCIES - byebug + byebug (>= 11) + kettle-soup-cover (~> 1.0, >= 1.0.2) minitest (>= 5) rake (>= 13) rexml (~> 3.2) @@ -111,6 +146,8 @@ DEPENDENCIES ruby-openid! standard (>= 1.35.1) webrick (~> 1.8) + yard (~> 0.9, >= 0.9.34) + yard-junk (~> 0.0) BUNDLED WITH - 2.5.18 + 2.4.22 diff --git a/bin/bundle b/bin/bundle index 50da5fd..450605b 100755 --- a/bin/bundle +++ b/bin/bundle @@ -27,10 +27,10 @@ m = Module.new do bundler_version = nil update_index = nil ARGV.each_with_index do |a, i| - if update_index && update_index.succ == i && a.match?(Gem::Version::ANCHORED_VERSION_PATTERN) + if update_index && update_index.succ == i && a =~ Gem::Version::ANCHORED_VERSION_PATTERN bundler_version = a end - next unless a =~ /\A--bundler(?:[= ](#{Gem::Version::VERSION_PATTERN}))?\z/ + next unless a =~ /\A--bundler(?:[= ](#{Gem::Version::VERSION_PATTERN}))?\z/o bundler_version = $1 update_index = i end @@ -56,7 +56,7 @@ m = Module.new do def lockfile_version return unless File.file?(lockfile) lockfile_contents = File.read(lockfile) - return unless lockfile_contents =~ /\n\nBUNDLED WITH\n\s{2,}(#{Gem::Version::VERSION_PATTERN})\n/ + return unless lockfile_contents =~ /\n\nBUNDLED WITH\n\s{2,}(#{Gem::Version::VERSION_PATTERN})\n/o Regexp.last_match(1) end @@ -83,15 +83,15 @@ m = Module.new do def activate_bundler gem_error = activation_error_handling do - gem "bundler", bundler_requirement + gem("bundler", bundler_requirement) end return if gem_error.nil? require_error = activation_error_handling do require "bundler/version" end return if require_error.nil? && Gem::Requirement.new(bundler_requirement).satisfied_by?(Gem::Version.new(Bundler::VERSION)) - warn "Activating bundler (#{bundler_requirement}) failed:\n#{gem_error.message}\n\nTo install the version of bundler this project requires, run `gem install bundler -v '#{bundler_requirement}'`" - exit 42 + warn("Activating bundler (#{bundler_requirement}) failed:\n#{gem_error.message}\n\nTo install the version of bundler this project requires, run `gem install bundler -v '#{bundler_requirement}'`") + exit(42) end def activation_error_handling diff --git a/bin/code_climate_reek b/bin/code_climate_reek new file mode 100755 index 0000000..afe0d79 --- /dev/null +++ b/bin/code_climate_reek @@ -0,0 +1,27 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'code_climate_reek' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) + +bundle_binstub = File.expand_path("bundle", __dir__) + +if File.file?(bundle_binstub) + if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") + load(bundle_binstub) + else + abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. +Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") + end +end + +require "rubygems" +require "bundler/setup" + +load Gem.bin_path("reek", "code_climate_reek") diff --git a/bin/reek b/bin/reek new file mode 100755 index 0000000..2ec4592 --- /dev/null +++ b/bin/reek @@ -0,0 +1,27 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'reek' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) + +bundle_binstub = File.expand_path("bundle", __dir__) + +if File.file?(bundle_binstub) + if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") + load(bundle_binstub) + else + abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. +Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") + end +end + +require "rubygems" +require "bundler/setup" + +load Gem.bin_path("reek", "reek") diff --git a/bin/yard b/bin/yard new file mode 100755 index 0000000..ea9daf5 --- /dev/null +++ b/bin/yard @@ -0,0 +1,27 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'yard' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) + +bundle_binstub = File.expand_path("bundle", __dir__) + +if File.file?(bundle_binstub) + if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") + load(bundle_binstub) + else + abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. +Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") + end +end + +require "rubygems" +require "bundler/setup" + +load Gem.bin_path("yard", "yard") diff --git a/bin/yard-junk b/bin/yard-junk new file mode 100755 index 0000000..be420a5 --- /dev/null +++ b/bin/yard-junk @@ -0,0 +1,27 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'yard-junk' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) + +bundle_binstub = File.expand_path("bundle", __dir__) + +if File.file?(bundle_binstub) + if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") + load(bundle_binstub) + else + abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. +Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") + end +end + +require "rubygems" +require "bundler/setup" + +load Gem.bin_path("yard-junk", "yard-junk") diff --git a/bin/yardoc b/bin/yardoc new file mode 100755 index 0000000..e1324dc --- /dev/null +++ b/bin/yardoc @@ -0,0 +1,27 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'yardoc' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) + +bundle_binstub = File.expand_path("bundle", __dir__) + +if File.file?(bundle_binstub) + if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") + load(bundle_binstub) + else + abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. +Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") + end +end + +require "rubygems" +require "bundler/setup" + +load Gem.bin_path("yard", "yardoc") diff --git a/bin/yri b/bin/yri new file mode 100755 index 0000000..f968fde --- /dev/null +++ b/bin/yri @@ -0,0 +1,27 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'yri' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) + +bundle_binstub = File.expand_path("bundle", __dir__) + +if File.file?(bundle_binstub) + if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") + load(bundle_binstub) + else + abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. +Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") + end +end + +require "rubygems" +require "bundler/setup" + +load Gem.bin_path("yard", "yri") diff --git a/lib/openid/association.rb b/lib/openid/association.rb index dff9817..7b8d9f4 100644 --- a/lib/openid/association.rb +++ b/lib/openid/association.rb @@ -1,13 +1,13 @@ -require 'openid/kvform' -require 'openid/util' -require 'openid/cryptutil' -require 'openid/message' +require "openid/kvform" +require "openid/util" +require "openid/cryptutil" +require "openid/message" module OpenID def self.get_secret_size(assoc_type) - if assoc_type == 'HMAC-SHA1' + if assoc_type == "HMAC-SHA1" 20 - elsif assoc_type == 'HMAC-SHA256' + elsif assoc_type == "HMAC-SHA256" 32 else raise ArgumentError("Unsupported association type: #{assoc_type}") @@ -27,21 +27,23 @@ def self.deserialize(serialized) parsed = Util.kv_to_seq(serialized) parsed_fields = parsed.map { |k, _v| k.to_sym } if parsed_fields != FIELD_ORDER - raise ProtocolError, 'Unexpected fields in serialized association'\ - " (Expected #{FIELD_ORDER.inspect}, got #{parsed_fields.inspect})" + raise ProtocolError, "Unexpected fields in serialized association " \ + "(Expected #{FIELD_ORDER.inspect}, got #{parsed_fields.inspect})" end version, handle, secret64, issued_s, lifetime_s, assoc_type = parsed.map { |_field, value| value } - if version != '2' - raise ProtocolError, 'Attempted to deserialize unsupported version '\ - "(#{parsed[0][1].inspect})" + if version != "2" + raise ProtocolError, "Attempted to deserialize unsupported version " \ + "(#{parsed[0][1].inspect})" end - new(handle, - Util.from_base64(secret64), - Time.at(issued_s.to_i), - lifetime_s.to_i, - assoc_type) + new( + handle, + Util.from_base64(secret64), + Time.at(issued_s.to_i), + lifetime_s.to_i, + assoc_type, + ) end # Create an Association with an issued time of now @@ -62,15 +64,15 @@ def initialize(handle, secret, issued, lifetime, assoc_type) # JanRain OpenID libraries. def serialize data = { - version: '2', + version: "2", handle: handle, secret: Util.to_base64(secret), issued: issued.to_i.to_s, lifetime: lifetime.to_i.to_s, - assoc_type: assoc_type + assoc_type: assoc_type, } - Util.assert(data.length == FIELD_ORDER.length) + Util.truthy_assert(data.length == FIELD_ORDER.length) pairs = FIELD_ORDER.map { |field| [field.to_s, data[field]] } Util.seq_to_kv(pairs, true) @@ -79,10 +81,10 @@ def serialize # The number of seconds until this association expires def expires_in(now = nil) now = if now.nil? - Time.now.to_i - else - now.to_i - end + Time.now.to_i + else + now.to_i + end time_diff = (issued.to_i + lifetime) - now return 0 if time_diff < 0 @@ -93,12 +95,12 @@ def expires_in(now = nil) def sign(pairs) kv = Util.seq_to_kv(pairs) case assoc_type - when 'HMAC-SHA1' + when "HMAC-SHA1" CryptUtil.hmac_sha1(@secret, kv) - when 'HMAC-SHA256' + when "HMAC-SHA256" CryptUtil.hmac_sha256(@secret, kv) else - raise ProtocolError, 'Association has unknown type: '\ + raise ProtocolError, "Association has unknown type: " \ "#{assoc_type.inspect}" end end @@ -106,17 +108,17 @@ def sign(pairs) # Generate the list of pairs that form the signed elements of the # given message def make_pairs(message) - signed = message.get_arg(OPENID_NS, 'signed') - raise ProtocolError, 'Missing signed list' if signed.nil? + signed = message.get_arg(OPENID_NS, "signed") + raise ProtocolError, "Missing signed list" if signed.nil? - signed_fields = signed.split(',', -1) + signed_fields = signed.split(",", -1) data = message.to_post_args - signed_fields.map { |field| [field, data.fetch('openid.' + field, '')] } + signed_fields.map { |field| [field, data.fetch("openid." + field, "")] } end # Return whether the message's signature passes def check_message_signature(message) - message_sig = message.get_arg(OPENID_NS, 'sig') + message_sig = message.get_arg(OPENID_NS, "sig") raise ProtocolError, "#{message} has no sig." if message_sig.nil? calculated_sig = get_message_signature(message) @@ -144,29 +146,29 @@ def ==(other) # Add a signature (and a signed list) to a message. def sign_message(message) - if message.has_key?(OPENID_NS, 'sig') or - message.has_key?(OPENID_NS, 'signed') - raise ArgumentError, 'Message already has signed list or signature' + if message.has_key?(OPENID_NS, "sig") or + message.has_key?(OPENID_NS, "signed") + raise ArgumentError, "Message already has signed list or signature" end - extant_handle = message.get_arg(OPENID_NS, 'assoc_handle') - raise ArgumentError, 'Message has a different association handle' if extant_handle and extant_handle != handle + extant_handle = message.get_arg(OPENID_NS, "assoc_handle") + raise ArgumentError, "Message has a different association handle" if extant_handle and extant_handle != handle signed_message = message.copy - signed_message.set_arg(OPENID_NS, 'assoc_handle', handle) + signed_message.set_arg(OPENID_NS, "assoc_handle", handle) message_keys = signed_message.to_post_args.keys signed_list = [] message_keys.each do |k| - signed_list << k[7..-1] if k.start_with?('openid.') + signed_list << k[7..-1] if k.start_with?("openid.") end - signed_list << 'signed' + signed_list << "signed" signed_list.sort! - signed_message.set_arg(OPENID_NS, 'signed', signed_list.join(',')) + signed_message.set_arg(OPENID_NS, "signed", signed_list.join(",")) sig = get_message_signature(signed_message) - signed_message.set_arg(OPENID_NS, 'sig', sig) + signed_message.set_arg(OPENID_NS, "sig", sig) signed_message end end @@ -176,9 +178,9 @@ class AssociationNegotiator def self.get_session_types(assoc_type) case assoc_type - when 'HMAC-SHA1' + when "HMAC-SHA1" %w[DH-SHA1 no-encryption] - when 'HMAC-SHA256' + when "HMAC-SHA256" %w[DH-SHA256 no-encryption] else raise ProtocolError, "Unknown association type #{assoc_type.inspect}" @@ -188,8 +190,8 @@ def self.get_session_types(assoc_type) def self.check_session_type(assoc_type, session_type) return if get_session_types(assoc_type).include?(session_type) - raise ProtocolError, "Session type #{session_type.inspect} not "\ - "valid for association type #{assoc_type.inspect}" + raise ProtocolError, "Session type #{session_type.inspect} not " \ + "valid for association type #{assoc_type.inspect}" end def initialize(allowed_types) @@ -229,12 +231,16 @@ def get_allowed_type end DefaultNegotiator = - AssociationNegotiator.new([%w[HMAC-SHA1 DH-SHA1], - %w[HMAC-SHA1 no-encryption], - %w[HMAC-SHA256 DH-SHA256], - %w[HMAC-SHA256 no-encryption]]) + AssociationNegotiator.new([ + %w[HMAC-SHA1 DH-SHA1], + %w[HMAC-SHA1 no-encryption], + %w[HMAC-SHA256 DH-SHA256], + %w[HMAC-SHA256 no-encryption], + ]) EncryptedNegotiator = - AssociationNegotiator.new([%w[HMAC-SHA1 DH-SHA1], - %w[HMAC-SHA256 DH-SHA256]]) + AssociationNegotiator.new([ + %w[HMAC-SHA1 DH-SHA1], + %w[HMAC-SHA256 DH-SHA256], + ]) end diff --git a/lib/openid/message.rb b/lib/openid/message.rb index 747e6e8..71368d7 100644 --- a/lib/openid/message.rb +++ b/lib/openid/message.rb @@ -1,20 +1,20 @@ -require 'openid/util' -require 'openid/kvform' +require "openid/util" +require "openid/kvform" module OpenID - IDENTIFIER_SELECT = 'http://specs.openid.net/auth/2.0/identifier_select' + IDENTIFIER_SELECT = "http://specs.openid.net/auth/2.0/identifier_select" # URI for Simple Registration extension, the only commonly deployed # OpenID 1.x extension, and so a special case. - SREG_URI = 'http://openid.net/sreg/1.0' + SREG_URI = "http://openid.net/sreg/1.0" # The OpenID 1.x namespace URIs - OPENID1_NS = 'http://openid.net/signon/1.0' - OPENID11_NS = 'http://openid.net/signon/1.1' + OPENID1_NS = "http://openid.net/signon/1.0" + OPENID11_NS = "http://openid.net/signon/1.1" OPENID1_NAMESPACES = [OPENID1_NS, OPENID11_NS] # The OpenID 2.0 namespace URI - OPENID2_NS = 'http://specs.openid.net/auth/2.0' + OPENID2_NS = "http://specs.openid.net/auth/2.0" # The namespace consisting of pairs with keys that are prefixed with # "openid." but not in another namespace. @@ -34,14 +34,28 @@ module OpenID # All OpenID protocol fields. Used to check namespace aliases. OPENID_PROTOCOL_FIELDS = %w[ - ns mode error return_to - contact reference signed - assoc_type session_type - dh_modulus dh_gen - dh_consumer_public claimed_id - identity realm invalidate_handle - op_endpoint response_nonce sig - assoc_handle trust_root openid + ns + mode + error + return_to + contact + reference + signed + assoc_type + session_type + dh_modulus + dh_gen + dh_consumer_public + claimed_id + identity + realm + invalidate_handle + op_endpoint + response_nonce + sig + assoc_handle + trust_root + openid ] # Sentinel used for Message implementation to indicate that getArg @@ -79,12 +93,12 @@ def self.register_namespace_alias(namespace_uri, alias_) if @@registered_aliases.values.include?(namespace_uri) raise NamespaceAliasRegistrationError, - 'Namespace uri #{namespace_uri} already registered' + 'Namespace uri #{namespace_uri} already registered' end if @@registered_aliases.member?(alias_) raise NamespaceAliasRegistrationError, - 'Alias #{alias_} already registered' + 'Alias #{alias_} already registered' end @@registered_aliases[alias_] = namespace_uri @@ -98,7 +112,7 @@ def initialize(openid_namespace = nil) @args = {} @namespaces = NamespaceMap.new if openid_namespace - implicit = OPENID1_NAMESPACES.member? openid_namespace + implicit = OPENID1_NAMESPACES.member?(openid_namespace) set_openid_namespace(openid_namespace, implicit) else @openid_ns_uri = nil @@ -113,13 +127,13 @@ def self.from_post_args(args) openid_args = {} args.each do |key, value| if value.is_a?(Array) - raise ArgumentError, 'Query dict must have one value for each key, ' + - "not lists of values. Query is #{args.inspect}" + raise ArgumentError, "Query dict must have one value for each key, " + + "not lists of values. Query is #{args.inspect}" end - prefix, rest = key.split('.', 2) + prefix, rest = key.split(".", 2) - if prefix != 'openid' or rest.nil? + if prefix != "openid" or rest.nil? m.set_arg(BARE_NS, key, value) else openid_args[rest] = value @@ -146,15 +160,15 @@ def _from_openid_args(openid_args) # resolve namespaces openid_args.each do |rest, value| - ns_alias, ns_key = rest.split('.', 2) + ns_alias, ns_key = rest.split(".", 2) if ns_key.nil? ns_alias = NULL_NAMESPACE ns_key = rest end - if ns_alias == 'ns' + if ns_alias == "ns" @namespaces.add_alias(value, ns_key) - elsif ns_alias == NULL_NAMESPACE and ns_key == 'ns' + elsif ns_alias == NULL_NAMESPACE and ns_key == "ns" set_openid_namespace(value, false) else ns_args << [ns_alias, ns_key, value] @@ -225,10 +239,10 @@ def to_post_args next if @namespaces.implicit?(ns_uri) ns_key = if ns_alias == NULL_NAMESPACE - 'openid.ns' - else - 'openid.ns.' + ns_alias - end + "openid.ns" + else + "openid.ns." + ns_alias + end args[ns_key] = ns_uri end @@ -247,9 +261,9 @@ def to_args post_args = to_post_args kvargs = {} post_args.each do |k, v| - if !k.start_with?('openid.') + if !k.start_with?("openid.") raise ArgumentError, - "This message can only be encoded as a POST, because it contains arguments that are not prefixed with 'openid.'" + "This message can only be encoded as a POST, because it contains arguments that are not prefixed with 'openid.'" else kvargs[k[7..-1]] = v end @@ -259,7 +273,7 @@ def to_args # Generate HTML form markup that contains the values in this # message, to be HTTP POSTed as x-www-form-urlencoded UTF-8. - def to_form_markup(action_url, form_tag_attrs = nil, submit_text = 'Continue') + def to_form_markup(action_url, form_tag_attrs = nil, submit_text = "Continue") form_tag_attr_map = {} if form_tag_attrs @@ -268,12 +282,12 @@ def to_form_markup(action_url, form_tag_attrs = nil, submit_text = 'Continue') end end - form_tag_attr_map['action'] = action_url - form_tag_attr_map['method'] = 'post' - form_tag_attr_map['accept-charset'] = 'UTF-8' - form_tag_attr_map['enctype'] = 'application/x-www-form-urlencoded' + form_tag_attr_map["action"] = action_url + form_tag_attr_map["method"] = "post" + form_tag_attr_map["accept-charset"] = "UTF-8" + form_tag_attr_map["enctype"] = "application/x-www-form-urlencoded" - markup = '
', - self.class, @assoc_handle, - @sig, @signed, ih) + format( + "<%s handle: %s sig: %s: signed: %s%s>", + self.class, + @assoc_handle, + @sig, + @signed, + ih, + ) end end @@ -171,7 +179,7 @@ class PlainTextServerSession < BaseServerSession attr_reader :session_type def initialize - super('no-encryption', %w[HMAC-SHA1 HMAC-SHA256]) + super("no-encryption", %w[HMAC-SHA1 HMAC-SHA256]) end def self.from_message(_unused_request) @@ -179,7 +187,7 @@ def self.from_message(_unused_request) end def answer(secret) - { 'mac_key' => Util.to_base64(secret) } + {"mac_key" => Util.to_base64(secret)} end end @@ -199,9 +207,9 @@ class DiffieHellmanSHA1ServerSession < BaseServerSession attr_reader :session_type def initialize(dh, consumer_pubkey) - super('DH-SHA1', ['HMAC-SHA1']) + super("DH-SHA1", ["HMAC-SHA1"]) - @hash_func = CryptUtil.method('sha1') + @hash_func = CryptUtil.method(:sha1) @dh = dh @consumer_pubkey = consumer_pubkey end @@ -211,21 +219,25 @@ def initialize(dh, consumer_pubkey) # Raises ProtocolError when parameters required to establish the # session are missing. def self.from_message(message) - dh_modulus = message.get_arg(OPENID_NS, 'dh_modulus') - dh_gen = message.get_arg(OPENID_NS, 'dh_gen') + dh_modulus = message.get_arg(OPENID_NS, "dh_modulus") + dh_gen = message.get_arg(OPENID_NS, "dh_gen") if (!dh_modulus and dh_gen) or - (!dh_gen and dh_modulus) + (!dh_gen and dh_modulus) missing = if !dh_modulus - 'modulus' - else - 'generator' - end - - raise ProtocolError.new(message, - format('If non-default modulus or generator is ' + - 'supplied, both must be supplied. Missing %s', - missing)) + "modulus" + else + "generator" + end + + raise ProtocolError.new( + message, + format( + "If non-default modulus or generator is " + + "supplied, both must be supplied. Missing %s", + missing, + ), + ) end if dh_modulus or dh_gen @@ -236,11 +248,16 @@ def self.from_message(message) dh = DiffieHellman.from_defaults end - consumer_pubkey = message.get_arg(OPENID_NS, 'dh_consumer_public') + consumer_pubkey = message.get_arg(OPENID_NS, "dh_consumer_public") unless consumer_pubkey - raise ProtocolError.new(message, - format('Public key for DH-SHA1 session ' + - 'not found in message %s', message)) + raise ProtocolError.new( + message, + format( + "Public key for DH-SHA1 session " + + "not found in message %s", + message, + ), + ) end consumer_pubkey = CryptUtil.base64_to_num(consumer_pubkey) @@ -249,22 +266,24 @@ def self.from_message(message) end def answer(secret) - mac_key = @dh.xor_secret(@hash_func, - @consumer_pubkey, - secret) + mac_key = @dh.xor_secret( + @hash_func, + @consumer_pubkey, + secret, + ) { - 'dh_server_public' => CryptUtil.num_to_base64(@dh.public), - 'enc_mac_key' => Util.to_base64(mac_key) + "dh_server_public" => CryptUtil.num_to_base64(@dh.public), + "enc_mac_key" => Util.to_base64(mac_key), } end end class DiffieHellmanSHA256ServerSession < DiffieHellmanSHA1ServerSession def initialize(*args) - super(*args) - @session_type = 'DH-SHA256' - @hash_func = CryptUtil.method('sha256') - @allowed_assoc_types = ['HMAC-SHA256'].freeze + super + @session_type = "DH-SHA256" + @hash_func = CryptUtil.method(:sha256) + @allowed_assoc_types = ["HMAC-SHA256"].freeze end end @@ -282,9 +301,9 @@ class AssociateRequest < OpenIDRequest attr_accessor :assoc_type @@session_classes = { - 'no-encryption' => PlainTextServerSession, - 'DH-SHA1' => DiffieHellmanSHA1ServerSession, - 'DH-SHA256' => DiffieHellmanSHA256ServerSession + "no-encryption" => PlainTextServerSession, + "DH-SHA1" => DiffieHellmanSHA1ServerSession, + "DH-SHA256" => DiffieHellmanSHA256ServerSession, } # Construct me. @@ -296,47 +315,59 @@ def initialize(session, assoc_type) @session = session @assoc_type = assoc_type - @mode = 'associate' + @mode = "associate" end # Construct me from an OpenID Message. def self.from_message(message, _op_endpoint = UNUSED) if message.is_openid1 - session_type = message.get_arg(OPENID_NS, 'session_type') - if session_type == 'no-encryption' - Util.log('Received OpenID 1 request with a no-encryption ' + - 'association session type. Continuing anyway.') + session_type = message.get_arg(OPENID_NS, "session_type") + if session_type == "no-encryption" + Util.log("Received OpenID 1 request with a no-encryption " + + "association session type. Continuing anyway.") elsif !session_type - session_type = 'no-encryption' + session_type = "no-encryption" end else - session_type = message.get_arg(OPENID2_NS, 'session_type') + session_type = message.get_arg(OPENID2_NS, "session_type") unless session_type - raise ProtocolError.new(message, - 'session_type missing from request') + raise ProtocolError.new( + message, + "session_type missing from request", + ) end end session_class = @@session_classes[session_type] unless session_class - raise ProtocolError.new(message, - format('Unknown session type %s', session_type)) + raise ProtocolError.new( + message, + format("Unknown session type %s", session_type), + ) end begin session = session_class.from_message(message) rescue ArgumentError => e # XXX - raise ProtocolError.new(message, - format('Error parsing %s session: %s', - session_type, e)) + raise ProtocolError.new( + message, + format( + "Error parsing %s session: %s", + session_type, + e, + ), + ) end - assoc_type = message.get_arg(OPENID_NS, 'assoc_type', 'HMAC-SHA1') + assoc_type = message.get_arg(OPENID_NS, "assoc_type", "HMAC-SHA1") unless session.allowed_assoc_type?(assoc_type) - msg = format('Session type %s does not support association type %s', - session_type, assoc_type) + msg = format( + "Session type %s does not support association type %s", + session_type, + assoc_type, + ) raise ProtocolError.new(message, msg) end @@ -354,16 +385,18 @@ def self.from_message(message, _op_endpoint = UNUSED) def answer(assoc) response = OpenIDResponse.new(self) response.fields.update_args(OPENID_NS, { - 'expires_in' => format('%d', assoc.expires_in), - 'assoc_type' => @assoc_type, - 'assoc_handle' => assoc.handle - }) - response.fields.update_args(OPENID_NS, - @session.answer(assoc.secret)) - unless @session.session_type == 'no-encryption' and - @message.is_openid1 + "expires_in" => format("%d", assoc.expires_in), + "assoc_type" => @assoc_type, + "assoc_handle" => assoc.handle, + }) + response.fields.update_args( + OPENID_NS, + @session.answer(assoc.secret), + ) + unless @session.session_type == "no-encryption" and + @message.is_openid1 response.fields.set_arg( - OPENID_NS, 'session_type', @session.session_type + OPENID_NS, "session_type", @session.session_type ) end @@ -373,22 +406,22 @@ def answer(assoc) # Respond to this request indicating that the association type # or association session type is not supported. def answer_unsupported(message, preferred_association_type = nil, - preferred_session_type = nil) + preferred_session_type = nil) raise ProtocolError.new(@message) if @message.is_openid1 response = OpenIDResponse.new(self) - response.fields.set_arg(OPENID_NS, 'error_code', 'unsupported-type') - response.fields.set_arg(OPENID_NS, 'error', message) + response.fields.set_arg(OPENID_NS, "error_code", "unsupported-type") + response.fields.set_arg(OPENID_NS, "error", message) if preferred_association_type response.fields.set_arg( - OPENID_NS, 'assoc_type', preferred_association_type + OPENID_NS, "assoc_type", preferred_association_type ) end if preferred_session_type response.fields.set_arg( - OPENID_NS, 'session_type', preferred_session_type + OPENID_NS, "session_type", preferred_session_type ) end @@ -436,7 +469,7 @@ class CheckIDRequest < OpenIDRequest # Raises #MalformedReturnURL when the +return_to+ URL is not # a URL. def initialize(identity, return_to, op_endpoint, trust_root = nil, - immediate = false, assoc_handle = nil, claimed_id = nil) + immediate = false, assoc_handle = nil, claimed_id = nil) @assoc_handle = assoc_handle @identity = identity @claimed_id = (claimed_id or identity) @@ -447,14 +480,14 @@ def initialize(identity, return_to, op_endpoint, trust_root = nil, if immediate @immediate = true - @mode = 'checkid_immediate' + @mode = "checkid_immediate" else @immediate = false - @mode = 'checkid_setup' + @mode = "checkid_setup" end if @return_to and - !TrustRoot::TrustRoot.parse(@return_to) + !TrustRoot::TrustRoot.parse(@return_to) raise MalformedReturnURL.new(nil, @return_to) end @@ -482,36 +515,38 @@ def self.from_message(message, op_endpoint) obj = allocate obj.message = message obj.op_endpoint = op_endpoint - mode = message.get_arg(OPENID_NS, 'mode') - if mode == 'checkid_immediate' + mode = message.get_arg(OPENID_NS, "mode") + if mode == "checkid_immediate" obj.immediate = true - obj.mode = 'checkid_immediate' + obj.mode = "checkid_immediate" else obj.immediate = false - obj.mode = 'checkid_setup' + obj.mode = "checkid_setup" end - obj.return_to = message.get_arg(OPENID_NS, 'return_to') + obj.return_to = message.get_arg(OPENID_NS, "return_to") if message.is_openid1 and !obj.return_to - msg = format("Missing required field 'return_to' from %s", - message) + msg = format( + "Missing required field 'return_to' from %s", + message, + ) raise ProtocolError.new(message, msg) end - obj.identity = message.get_arg(OPENID_NS, 'identity') - obj.claimed_id = message.get_arg(OPENID_NS, 'claimed_id') + obj.identity = message.get_arg(OPENID_NS, "identity") + obj.claimed_id = message.get_arg(OPENID_NS, "claimed_id") if message.is_openid1 unless obj.identity - s = 'OpenID 1 message did not contain openid.identity' + s = "OpenID 1 message did not contain openid.identity" raise ProtocolError.new(message, s) end elsif obj.identity and !obj.claimed_id - s = ('OpenID 2.0 message contained openid.identity but not ' + - 'claimed_id') + s = ("OpenID 2.0 message contained openid.identity but not " + + "claimed_id") raise ProtocolError.new(message, s) elsif obj.claimed_id and !obj.identity - s = ('OpenID 2.0 message contained openid.claimed_id but not ' + - 'identity') + s = ("OpenID 2.0 message contained openid.claimed_id but not " + + "identity") raise ProtocolError.new(message, s) end @@ -519,20 +554,20 @@ def self.from_message(message, op_endpoint) # here. But if TrustRoot isn't currently part of the "public" # API, I'm not sure it's worth doing. trust_root_param = if message.is_openid1 - 'trust_root' - else - 'realm' - end + "trust_root" + else + "realm" + end trust_root = message.get_arg(OPENID_NS, trust_root_param) trust_root = obj.return_to if trust_root.nil? || trust_root.empty? obj.trust_root = trust_root if !message.is_openid1 and !obj.return_to and !obj.trust_root - raise ProtocolError.new(message, 'openid.realm required when ' + - 'openid.return_to absent') + raise ProtocolError.new(message, "openid.realm required when " + + "openid.return_to absent") end - obj.assoc_handle = message.get_arg(OPENID_NS, 'assoc_handle') + obj.assoc_handle = message.get_arg(OPENID_NS, "assoc_handle") # Using TrustRoot.parse here is a bit misleading, as we're not # parsing return_to as a trust root at all. However, valid @@ -540,8 +575,8 @@ def self.from_message(message, op_endpoint) # idea if it is a valid URL. Not all trust roots are valid # return_to URLs, however (particularly ones with wildcards), # so this is still a little sketchy. - if obj.return_to and \ - !TrustRoot::TrustRoot.parse(obj.return_to) + if obj.return_to and + !TrustRoot::TrustRoot.parse(obj.return_to) raise MalformedReturnURL.new(message, obj.return_to) end @@ -642,33 +677,33 @@ def answer(allow, server_url = nil, identity = nil, claimed_id = nil) if @message.is_openid2 and !@op_endpoint # In other words, that warning I raised in # Server.__init__? You should pay attention to it now. - raise "#{self} should be constructed with "\ - 'op_endpoint to respond to OpenID 2.0 '\ - 'messages.' + raise "#{self} should be constructed with " \ + "op_endpoint to respond to OpenID 2.0 " \ + "messages." end server_url = @op_endpoint end mode = if allow - 'id_res' - elsif @message.is_openid1 - if @immediate - 'id_res' - else - 'cancel' - end - elsif @immediate - 'setup_needed' - else - 'cancel' - end + "id_res" + elsif @message.is_openid1 + if @immediate + "id_res" + else + "cancel" + end + elsif @immediate + "setup_needed" + else + "cancel" + end response = OpenIDResponse.new(self) if claimed_id and @message.is_openid1 - raise VersionError, 'claimed_id is new in OpenID 2.0 and not '\ - "available for #{@message.get_openid_namespace}" + raise VersionError, "claimed_id is new in OpenID 2.0 and not " \ + "available for #{@message.get_openid_namespace}" end claimed_id = identity if identity and !claimed_id @@ -676,9 +711,9 @@ def answer(allow, server_url = nil, identity = nil, claimed_id = nil) if allow if @identity == IDENTIFIER_SELECT unless identity - raise ArgumentError, 'This request uses IdP-driven '\ - 'identifier selection.You must supply '\ - 'an identifier in the response.' + raise ArgumentError, "This request uses IdP-driven " \ + "identifier selection.You must supply " \ + "an identifier in the response." end response_identity = identity @@ -686,55 +721,64 @@ def answer(allow, server_url = nil, identity = nil, claimed_id = nil) elsif @identity if identity and (@identity != identity) - raise ArgumentError, "Request was for identity #{@identity}, "\ - "cannot reply with identity #{identity}" + raise ArgumentError, "Request was for identity #{@identity}, " \ + "cannot reply with identity #{identity}" end response_identity = @identity response_claimed_id = @claimed_id else if identity - raise ArgumentError, 'This request specified no identity '\ - "and you supplied #{identity}" + raise ArgumentError, "This request specified no identity " \ + "and you supplied #{identity}" end response_identity = nil end if @message.is_openid1 and !response_identity - raise ArgumentError, 'Request was an OpenID 1 request, so '\ - 'response must include an identifier.' + raise ArgumentError, "Request was an OpenID 1 request, so " \ + "response must include an identifier." end response.fields.update_args(OPENID_NS, { - 'mode' => mode, - 'op_endpoint' => server_url, - 'return_to' => @return_to, - 'response_nonce' => Nonce.mk_nonce - }) + "mode" => mode, + "op_endpoint" => server_url, + "return_to" => @return_to, + "response_nonce" => Nonce.mk_nonce, + }) if response_identity - response.fields.set_arg(OPENID_NS, 'identity', response_identity) + response.fields.set_arg(OPENID_NS, "identity", response_identity) if @message.is_openid2 - response.fields.set_arg(OPENID_NS, - 'claimed_id', response_claimed_id) + response.fields.set_arg( + OPENID_NS, + "claimed_id", + response_claimed_id, + ) end end else - response.fields.set_arg(OPENID_NS, 'mode', mode) + response.fields.set_arg(OPENID_NS, "mode", mode) if @immediate if @message.is_openid1 and !server_url - raise ArgumentError, 'setup_url is required for allow=false '\ - 'in OpenID 1.x immediate mode.' + raise ArgumentError, "setup_url is required for allow=false " \ + "in OpenID 1.x immediate mode." end # Make a new request just like me, but with # immediate=false. - setup_request = self.class.new(@identity, @return_to, - @op_endpoint, @trust_root, false, - @assoc_handle, @claimed_id) + setup_request = self.class.new( + @identity, + @return_to, + @op_endpoint, + @trust_root, + false, + @assoc_handle, + @claimed_id, + ) setup_request.message = Message.new(@message.get_openid_namespace) setup_url = setup_request.encode_to_url(server_url) - response.fields.set_arg(OPENID_NS, 'user_setup_url', setup_url) + response.fields.set_arg(OPENID_NS, "user_setup_url", setup_url) end end @@ -752,20 +796,22 @@ def encode_to_url(server_url) # used in both the client and server code, so Requests are # Encodable too. That's right, code imported from alternate # realities all for the love of you, id_res/user_setup_url. - q = { 'mode' => @mode, - 'identity' => @identity, - 'claimed_id' => @claimed_id, - 'return_to' => @return_to } + q = { + "mode" => @mode, + "identity" => @identity, + "claimed_id" => @claimed_id, + "return_to" => @return_to, + } if @trust_root if @message.is_openid1 - q['trust_root'] = @trust_root + q["trust_root"] = @trust_root else - q['realm'] = @trust_root + q["realm"] = @trust_root end end - q['assoc_handle'] = @assoc_handle if @assoc_handle + q["assoc_handle"] = @assoc_handle if @assoc_handle response = Message.new(@message.get_openid_namespace) response.update_args(@message.get_openid_namespace, q) @@ -786,21 +832,24 @@ def cancel_url raise NoReturnToError unless @return_to if @immediate - raise ArgumentError.new('Cancel is not an appropriate response to ' + - 'immediate mode requests.') + raise ArgumentError.new("Cancel is not an appropriate response to " + + "immediate mode requests.") end response = Message.new(@message.get_openid_namespace) - response.set_arg(OPENID_NS, 'mode', 'cancel') + response.set_arg(OPENID_NS, "mode", "cancel") response.to_url(@return_to) end def to_s - format('<%s id:%s im:%s tr:%s ah:%s>', self.class, - @identity, - @immediate, - @trust_root, - @assoc_handle) + format( + "<%s id:%s im:%s tr:%s ah:%s>", + self.class, + @identity, + @immediate, + @trust_root, + @assoc_handle, + ) end end @@ -833,10 +882,12 @@ def initialize(request) end def to_s - format('%s for %s: %s', - self.class, - @request.class, - @fields) + format( + "%s for %s: %s", + self.class, + @request.class, + @fields, + ) end # form_tag_attrs is a hash of attributes to be added to the form @@ -862,7 +913,7 @@ def render_as_form def needs_signing # Does this response require signing? - @fields.get_arg(OPENID_NS, 'mode') == 'id_res' + @fields.get_arg(OPENID_NS, "mode") == "id_res" end # implements IEncodable @@ -873,7 +924,7 @@ def which_encoding return ENCODE_KVFORM unless BROWSER_REQUEST_MODES.member?(@request.mode) if @fields.is_openid2 and - encode_to_url.length > OPENID1_URL_LIMIT + encode_to_url.length > OPENID1_URL_LIMIT ENCODE_HTML_FORM else ENCODE_URL @@ -927,7 +978,7 @@ class WebResponse # The body of this response. attr_accessor :body - def initialize(code = HTTP_OK, headers = nil, body = '') + def initialize(code = HTTP_OK, headers = nil, body = "") # Construct me. # # These parameters are assigned directly as class attributes, @@ -953,8 +1004,8 @@ class Signatory # really does expect that key to be a URL. This seems a little # silly for the server store, since I expect there to be only # one server URL. - @@_normal_key = 'http://localhost/|normal' - @@_dumb_key = 'http://localhost/|dumb' + @@_normal_key = "http://localhost/|normal" + @@_dumb_key = "http://localhost/|dumb" def self._normal_key @@_normal_key @@ -969,7 +1020,7 @@ def self._dumb_key # Create a new Signatory. store is The back-end where my # associations are stored. def initialize(store) - Util.assert(store) + Util.truthy_assert(store) @store = store @secret_lifetime = 14 * 24 * 60 * 60 end @@ -978,16 +1029,24 @@ def initialize(store) def verify(assoc_handle, message) assoc = get_association(assoc_handle, true) unless assoc - Util.log(format('failed to get assoc with handle %s to verify ' + - 'message %s', assoc_handle, message)) + Util.log(format( + "failed to get assoc with handle %s to verify " + + "message %s", + assoc_handle, + message, + )) return false end begin valid = assoc.check_message_signature(message) rescue StandardError => e - Util.log(format('Error in verifying %s with %s: %s', - message, assoc, e)) + Util.log(format( + "Error in verifying %s with %s: %s", + message, + assoc, + e, + )) return false end @@ -1012,9 +1071,9 @@ def sign(response) if !assoc or assoc.expires_in <= 0 # fall back to dumb mode signed_response.fields.set_arg( - OPENID_NS, 'invalidate_handle', assoc_handle + OPENID_NS, "invalidate_handle", assoc_handle ) - assoc_type = assoc ? assoc.assoc_type : 'HMAC-SHA1' + assoc_type = assoc ? assoc.assoc_type : "HMAC-SHA1" if assoc and assoc.expires_in <= 0 # now do the clean-up that the disabled checkExpiration # code didn't get to do. @@ -1036,20 +1095,20 @@ def sign(response) end # Make a new association. - def create_association(dumb = true, assoc_type = 'HMAC-SHA1') + def create_association(dumb = true, assoc_type = "HMAC-SHA1") secret = CryptUtil.random_string(OpenID.get_secret_size(assoc_type)) uniq = Util.to_base64(CryptUtil.random_string(4)) - handle = format('{%s}{%x}{%s}', assoc_type, Time.now.to_i, uniq) + handle = format("{%s}{%x}{%s}", assoc_type, Time.now.to_i, uniq) assoc = Association.from_expires_in( secret_lifetime, handle, secret, assoc_type ) key = if dumb - @@_dumb_key - else - @@_normal_key - end + @@_dumb_key + else + @@_normal_key + end @store.store_association(key, assoc) assoc @@ -1064,19 +1123,22 @@ def get_association(assoc_handle, dumb, check_expiration = true) # association request, as it must have the association's # secret. - raise ArgumentError.new('assoc_handle must not be None') unless assoc_handle + raise ArgumentError.new("assoc_handle must not be None") unless assoc_handle key = if dumb - @@_dumb_key - else - @@_normal_key - end + @@_dumb_key + else + @@_normal_key + end assoc = @store.get_association(key, assoc_handle) if assoc and assoc.expires_in <= 0 - Util.log(format('requested %sdumb key %s is expired (by %s seconds)', - !dumb ? 'not-' : '', - assoc_handle, assoc.expires_in)) + Util.log(format( + "requested %sdumb key %s is expired (by %s seconds)", + (!dumb) ? "not-" : "", + assoc_handle, + assoc.expires_in, + )) if check_expiration @store.remove_association(key, assoc_handle) assoc = nil @@ -1089,10 +1151,10 @@ def get_association(assoc_handle, dumb, check_expiration = true) # Invalidates the association with the given handle. def invalidate(assoc_handle, dumb) key = if dumb - @@_dumb_key - else - @@_normal_key - end + @@_dumb_key + else + @@_normal_key + end @store.remove_association(key, assoc_handle) end @@ -1115,16 +1177,24 @@ class Encoder def encode(response) encode_as = response.which_encoding if encode_as == ENCODE_KVFORM - wr = @@responseFactory.new(HTTP_OK, nil, - response.encode_to_kvform) + wr = @@responseFactory.new( + HTTP_OK, + nil, + response.encode_to_kvform, + ) wr.code = HTTP_ERROR if response.is_a?(Exception) elsif encode_as == ENCODE_URL location = response.encode_to_url - wr = @@responseFactory.new(HTTP_REDIRECT, - { 'location' => location }) + wr = @@responseFactory.new( + HTTP_REDIRECT, + {"location" => location}, + ) elsif encode_as == ENCODE_HTML_FORM - wr = @@responseFactory.new(HTTP_OK, nil, - response.to_form_markup) + wr = @@responseFactory.new( + HTTP_OK, + nil, + response.to_form_markup, + ) else # Can't encode this to a protocol message. You should # probably render it to HTML and show it to the user. @@ -1158,27 +1228,30 @@ def encode(response) if !response.is_a?(Exception) and response.needs_signing unless @signatory raise ArgumentError.new( - format('Must have a store to sign this request: %s', - response), response + format( + "Must have a store to sign this request: %s", + response, + ), + response, ) end - raise AlreadySigned.new(response) if response.fields.has_key?(OPENID_NS, 'sig') + raise AlreadySigned.new(response) if response.fields.has_key?(OPENID_NS, "sig") response = @signatory.sign(response) end - super(response) + super end end # I decode an incoming web request in to a OpenIDRequest. class Decoder @@handlers = { - 'checkid_setup' => CheckIDRequest.method('from_message'), - 'checkid_immediate' => CheckIDRequest.method('from_message'), - 'check_authentication' => CheckAuthRequest.method('from_message'), - 'associate' => AssociateRequest.method('from_message') + "checkid_setup" => CheckIDRequest.method(:from_message), + "checkid_immediate" => CheckIDRequest.method(:from_message), + "check_authentication" => CheckAuthRequest.method(:from_message), + "associate" => AssociateRequest.method(:from_message), } attr_accessor :server @@ -1197,24 +1270,24 @@ def initialize(server) # Raises ProtocolError when the query does not seem to be a valid # OpenID request. def decode(query) - return nil if query.nil? or query.empty? + return if query.nil? or query.empty? begin message = Message.from_post_args(query) rescue InvalidOpenIDNamespace => e query = query.dup - query['openid.ns'] = OPENID2_NS + query["openid.ns"] = OPENID2_NS message = Message.from_post_args(query) raise ProtocolError.new(message, e.to_s) end - mode = message.get_arg(OPENID_NS, 'mode') + mode = message.get_arg(OPENID_NS, "mode") unless mode - msg = format('No mode value in message %s', message) + msg = format("No mode value in message %s", message) raise ProtocolError.new(message, msg) end - handler = @@handlers.fetch(mode, method('default_decoder')) + handler = @@handlers.fetch(mode, method(:default_decoder)) handler.call(message, @server.op_endpoint) end @@ -1223,8 +1296,8 @@ def decode(query) # # This implementation always raises ProtocolError. def default_decoder(message, _server) - mode = message.get_arg(OPENID_NS, 'mode') - msg = format('Unrecognized OpenID mode %s', mode) + mode = message.get_arg(OPENID_NS, "mode") + msg = format("Unrecognized OpenID mode %s", mode) raise ProtocolError.new(message, msg) end end @@ -1283,10 +1356,13 @@ def initialize(store, op_endpoint) # or add a method to me for handling that request type. def handle_request(request) begin - handler = method('openid_' + request.mode) + handler = method("openid_" + request.mode) rescue NameError - raise format('%s has no handler for a request of mode %s.', - self, request.mode).to_s + raise format( + "%s has no handler for a request of mode %s.", + self, + request.mode, + ).to_s end handler.call(request) @@ -1302,16 +1378,24 @@ def openid_associate(request) assoc_type = request.assoc_type session_type = request.session.session_type if @negotiator.allowed?(assoc_type, session_type) - assoc = @signatory.create_association(false, - assoc_type) + assoc = @signatory.create_association( + false, + assoc_type, + ) request.answer(assoc) else - message = format('Association type %s is not supported with ' + - 'session type %s', assoc_type, session_type) + message = format( + "Association type %s is not supported with " + + "session type %s", + assoc_type, + session_type, + ) preferred_assoc_type, preferred_session_type = @negotiator.get_allowed_type - request.answer_unsupported(message, - preferred_assoc_type, - preferred_session_type) + request.answer_unsupported( + message, + preferred_assoc_type, + preferred_session_type, + ) end end @@ -1348,15 +1432,15 @@ def initialize(message, text = nil, reference = nil, contact = nil) @openid_message = message @reference = reference @contact = contact - Util.assert(!message.is_a?(String)) + Util.truthy_assert(!message.is_a?(String)) super(text) end # Get the return_to argument from the request, if any. def get_return_to - return nil if @openid_message.nil? + return if @openid_message.nil? - @openid_message.get_arg(OPENID_NS, 'return_to') + @openid_message.get_arg(OPENID_NS, "return_to") end # Did this request have a return_to parameter? @@ -1369,12 +1453,12 @@ def has_return_to def to_message namespace = @openid_message.get_openid_namespace reply = Message.new(namespace) - reply.set_arg(OPENID_NS, 'mode', 'error') - reply.set_arg(OPENID_NS, 'error', to_s) + reply.set_arg(OPENID_NS, "mode", "error") + reply.set_arg(OPENID_NS, "error", to_s) - reply.set_arg(OPENID_NS, 'contact', @contact.to_s) if @contact + reply.set_arg(OPENID_NS, "contact", @contact.to_s) if @contact - reply.set_arg(OPENID_NS, 'reference', @reference.to_s) if @reference + reply.set_arg(OPENID_NS, "reference", @reference.to_s) if @reference reply end @@ -1405,16 +1489,16 @@ def to_html def which_encoding if has_return_to if @openid_message.is_openid2 and - encode_to_url.length > OPENID1_URL_LIMIT + encode_to_url.length > OPENID1_URL_LIMIT return ENCODE_HTML_FORM else return ENCODE_URL end end - return nil if @openid_message.nil? + return if @openid_message.nil? - mode = @openid_message.get_arg(OPENID_NS, 'mode') + mode = @openid_message.get_arg(OPENID_NS, "mode") return ENCODE_KVFORM if mode && !BROWSER_REQUEST_MODES.member?(mode) # If your request was so broken that you didn't manage to @@ -1442,7 +1526,7 @@ class EncodingError < Exception attr_reader :response def initialize(response) - super(response) + super @response = response end end @@ -1462,9 +1546,11 @@ def initialize(message, return_to, trust_root) end def to_s - format('return_to %s not under trust_root %s', - @return_to, - @trust_root) + format( + "return_to %s not under trust_root %s", + @return_to, + @trust_root, + ) end end diff --git a/lib/openid/util.rb b/lib/openid/util.rb index bc2f837..4436c1a 100644 --- a/lib/openid/util.rb +++ b/lib/openid/util.rb @@ -1,6 +1,6 @@ -require 'cgi' -require 'uri' -require 'logger' +require "cgi" +require "uri" +require "logger" # See OpenID::Consumer or OpenID::Server modules, as well as the store classes module OpenID @@ -14,46 +14,49 @@ class OpenIDError < StandardError end module Util - BASE64_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' \ - 'abcdefghijklmnopqrstuvwxyz0123456789+/' - BASE64_RE = Regexp.compile(" + BASE64_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" \ + "abcdefghijklmnopqrstuvwxyz0123456789+/" + BASE64_RE = Regexp.compile( + " \\A ([#{BASE64_CHARS}]{4})* ([#{BASE64_CHARS}]{2}==| [#{BASE64_CHARS}]{3}=)? - \\Z", Regexp::EXTENDED) + \\Z", + Regexp::EXTENDED, + ) - def self.assert(value, message = nil) + def self.truthy_assert(value, message = nil) return if value raise AssertionError, message or value end def self.to_base64(s) - [s].pack('m').gsub("\n", '') + [s].pack("m").delete("\n") end def self.from_base64(s) - without_newlines = s.gsub(/[\r\n]+/, '') + without_newlines = s.gsub(/[\r\n]+/, "") raise ArgumentError, "Malformed input: #{s.inspect}" unless BASE64_RE.match(without_newlines) - without_newlines.unpack1('m') + without_newlines.unpack1("m") end def self.urlencode(args) a = [] args.each do |key, val| if val.nil? - val = '' + val = "" elsif !!val == val # it's boolean let's convert it to string representation # or else CGI::escape won't like it val = val.to_s end - a << (CGI.escape(key) + '=' + CGI.escape(val)) + a << (CGI.escape(key) + "=" + CGI.escape(val)) end - a.join('&') + a.join("&") end def self.parse_query(qs) @@ -66,14 +69,14 @@ def self.append_args(url, args) url = url.dup return url if args.length == 0 - args = args.sort if args.respond_to?('each_pair') + args = args.sort if args.respond_to?(:each_pair) - url << (url.include?('?') ? '&' : '?') + url << (url.include?("?") ? "&" : "?") url << Util.urlencode(args) end @@logger = Logger.new(STDERR) - @@logger.progname = 'OpenID' + @@logger.progname = "OpenID" def self.logger=(logger) @@logger = logger @@ -88,7 +91,7 @@ def self.log(message) logger.info(message) end - def self.auto_submit_html(form, title = 'OpenID transaction in progress') + def self.auto_submit_html(form, title = "OpenID transaction in progress") " @@ -107,7 +110,7 @@ def self.auto_submit_html(form, title = 'OpenID transaction in progress') " end - ESCAPE_TABLE = { '&' => '&', '<' => '<', '>' => '>', '"' => '"', "'" => ''' } + ESCAPE_TABLE = {"&" => "&", "<" => "<", ">" => ">", '"' => """, "'" => "'"} # Modified from ERb's html_encode def self.html_encode(str) str.to_s.gsub(/[&<>"']/) { |s| ESCAPE_TABLE[s] } diff --git a/ruby-openid.gemspec b/ruby-openid.gemspec index f46fca6..7cadc56 100644 --- a/ruby-openid.gemspec +++ b/ruby-openid.gemspec @@ -23,9 +23,18 @@ Gem::Specification.new do |s| s.add_development_dependency("minitest", ">= 5") s.add_development_dependency("rake", ">= 13") s.add_development_dependency("rexml", "~> 3.2") + s.add_development_dependency("webrick", "~> 1.8") + + # Coverage + s.add_development_dependency("kettle-soup-cover", "~> 1.0", ">= 1.0.2") + + # Linting s.add_development_dependency("rubocop-lts", "~> 18.2", ">= 18.2.1") s.add_development_dependency("rubocop-minitest", "~> 0.36") s.add_development_dependency("rubocop-packaging", "~> 0.5", ">= 0.5.2") s.add_development_dependency("standard", ">= 1.35.1") - s.add_development_dependency("webrick", "~> 1.8") + + # Documentation + s.add_development_dependency("yard", "~> 0.9", ">= 0.9.34") + s.add_development_dependency("yard-junk", "~> 0.0") end diff --git a/test/discoverdata.rb b/test/discoverdata.rb index 1731578..fa8656a 100644 --- a/test/discoverdata.rb +++ b/test/discoverdata.rb @@ -1,7 +1,8 @@ -require 'uri' -require 'openid/yadis/constants' -require 'openid/yadis/discovery' -require 'openid/util' +require "uri" +require_relative "test_helper" +require "openid/yadis/constants" +require "openid/yadis/discovery" +require "openid/util" module OpenID module DiscoverData @@ -10,27 +11,27 @@ module DiscoverData TESTLIST = [ # success, input_name, id_name, result_name - [true, 'equiv', 'equiv', 'xrds'], - [true, 'header', 'header', 'xrds'], - [true, 'lowercase_header', 'lowercase_header', 'xrds'], - [true, 'xrds', 'xrds', 'xrds'], - [true, 'xrds_ctparam', 'xrds_ctparam', 'xrds_ctparam'], - [true, 'xrds_ctcase', 'xrds_ctcase', 'xrds_ctcase'], - [false, 'xrds_html', 'xrds_html', 'xrds_html'], - [true, 'redir_equiv', 'equiv', 'xrds'], - [true, 'redir_header', 'header', 'xrds'], - [true, 'redir_xrds', 'xrds', 'xrds'], - [false, 'redir_xrds_html', 'xrds_html', 'xrds_html'], - [true, 'redir_redir_equiv', 'equiv', 'xrds'], - [false, '404_server_response', nil, nil], - [false, '404_with_header', nil, nil], - [false, '404_with_meta', nil, nil], - [false, '201_server_response', nil, nil], - [false, '500_server_response', nil, nil] + [true, "equiv", "equiv", "xrds"], + [true, "header", "header", "xrds"], + [true, "lowercase_header", "lowercase_header", "xrds"], + [true, "xrds", "xrds", "xrds"], + [true, "xrds_ctparam", "xrds_ctparam", "xrds_ctparam"], + [true, "xrds_ctcase", "xrds_ctcase", "xrds_ctcase"], + [false, "xrds_html", "xrds_html", "xrds_html"], + [true, "redir_equiv", "equiv", "xrds"], + [true, "redir_header", "header", "xrds"], + [true, "redir_xrds", "xrds", "xrds"], + [false, "redir_xrds_html", "xrds_html", "xrds_html"], + [true, "redir_redir_equiv", "equiv", "xrds"], + [false, "404_server_response", nil, nil], + [false, "404_with_header", nil, nil], + [false, "404_with_meta", nil, nil], + [false, "201_server_response", nil, nil], + [false, "500_server_response", nil, nil], ] - @@example_xrds_file = 'example-xrds.xml' - @@default_test_file = 'test1-discover.txt' + @@example_xrds_file = "example-xrds.xml" + @@default_test_file = "test1-discover.txt" @@discover_tests = {} def readTests(filename) @@ -53,10 +54,10 @@ def getData(filename, name) def fillTemplate(test_name, template, base_url, example_xrds) mapping = [ - ['URL_BASE/', base_url], - ['', example_xrds], - ['YADIS_HEADER', Yadis::YADIS_HEADER_NAME], - ['NAME', test_name] + ["URL_BASE/", base_url], + ["", example_xrds], + ["YADIS_HEADER", Yadis::YADIS_HEADER_NAME], + ["NAME", test_name], ] mapping.each do |k, v| @@ -67,8 +68,8 @@ def fillTemplate(test_name, template, base_url, example_xrds) end def generateSample(test_name, base_url, - example_xrds = nil, - filename = @@default_test_file) + example_xrds = nil, + filename = @@default_test_file) example_xrds = read_data_file(@@example_xrds_file, false) if example_xrds.nil? begin @@ -88,7 +89,7 @@ def generateResult(base_url, input_name, id_name, result_name, success) # If the name is None then we expect the protocol to fail, which # we represent by None if id_name.nil? - Util.assert(result_name.nil?) + Util.truthy_assert(result_name.nil?) return input_url, DiscoveryFailure end @@ -98,8 +99,8 @@ def generateResult(base_url, input_name, id_name, result_name, success) ctype = nil header_lines.each do |header_line| - if header_line.start_with?('Content-Type:') - _, ctype = header_line.split(':', 2) + if header_line.start_with?("Content-Type:") + _, ctype = header_line.split(":", 2) ctype = ctype.strip break else diff --git a/test/test_accept.rb b/test/test_accept.rb index 8252841..2f6ffdc 100644 --- a/test/test_accept.rb +++ b/test/test_accept.rb @@ -1,7 +1,7 @@ -require 'minitest/autorun' -require 'testutil' -require 'openid/yadis/accept' -require 'openid/util' +require_relative "test_helper" +require_relative "testutil" +require "openid/yadis/accept" +require "openid/util" module OpenID class AcceptTest < Minitest::Test @@ -11,7 +11,7 @@ def getTestData # Read the test data off of disk # # () -> [(int, str)] - lines = read_data_file('accept.txt') + lines = read_data_file("accept.txt") line_no = 1 lines.collect do |line| pair = [line_no, line] @@ -28,7 +28,7 @@ def chunk(lines) chunk = [] lines.each do |lineno, line| stripped = line.strip - if (stripped == '') or stripped.start_with?('#') + if (stripped == "") or stripped.start_with?("#") if chunk.length > 0 chunks << chunk chunk = [] @@ -50,7 +50,7 @@ def parseLines(chunk) # [(int, str)] -> {str:(int, str)} items = {} chunk.each do |lineno, line| - header, data = line.split(':', 2) + header, data = line.split(":", 2) header = header.downcase items[header] = [lineno, data.strip] end @@ -61,7 +61,7 @@ def parseAvailable(available_text) # Parse an Available: line's data # # str -> [str] - available_text.split(',', -1).collect { |s| s.strip } + available_text.split(",", -1).collect { |s| s.strip } end def parseExpected(expected_text) @@ -69,15 +69,17 @@ def parseExpected(expected_text) # # str -> [(str, float)] expected = [] - if expected_text != '' - expected_text.split(',', -1).each do |chunk| + if expected_text != "" + expected_text.split(",", -1).each do |chunk| chunk = chunk.strip - mtype, qstuff = chunk.split(';', -1) + mtype, qstuff = chunk.split(";", -1) mtype = mtype.strip - Util.assert(!mtype.index('/').nil?) + + Util.truthy_assert(!mtype.index("/").nil?) qstuff = qstuff.strip - q, qstr = qstuff.split('=', -1) - Util.assert(q == 'q') + q, qstr = qstuff.split("=", -1) + + assert_equal("q", q) qval = qstr.to_f expected << [mtype, qval] end @@ -92,35 +94,38 @@ def test_accept_headers data_sets = chunks.collect { |chunk| parseLines(chunk) } data_sets.each do |data| lnos = [] - lno, header = data['accept'] + lno, header = data["accept"] lnos << lno - lno, avail_data = data['available'] + lno, avail_data = data["available"] lnos << lno begin available = parseAvailable(avail_data) rescue StandardError - print 'On line', lno + print("On line", lno) raise end - lno, exp_data = data['expected'] + lno, exp_data = data["expected"] lnos << lno begin expected = parseExpected(exp_data) rescue StandardError - print 'On line', lno + print("On line", lno) raise end - format('MatchAcceptTest for lines %s', lnos) + format("MatchAcceptTest for lines %s", lnos) # Test: accepted = Yadis.parse_accept_header(header) actual = Yadis.match_types(accepted, available) + assert_equal(expected, actual) - assert_equal(Yadis.get_acceptable(header, available), - expected.collect { |mtype, _| mtype }) + assert_equal( + Yadis.get_acceptable(header, available), + expected.collect { |mtype, _| mtype }, + ) end end @@ -131,21 +136,23 @@ def test_generate_accept_header # Form: [input_array, expected_header_string] [ # Empty input list - [[], ''], + [[], ""], # Content type name only; no q value - [['test'], 'test'], + [["test"], "test"], # q = 1.0 should be omitted from the header - [[['test', 1.0]], 'test'], + [[["test", 1.0]], "test"], # Test conversion of float to string - [['test', ['with_q', 0.8]], 'with_q; q=0.8, test'], + [["test", ["with_q", 0.8]], "with_q; q=0.8, test"], # Allow string q values, too - [['test', ['with_q_str', '0.7']], 'with_q_str; q=0.7, test'], + [["test", ["with_q_str", "0.7"]], "with_q_str; q=0.7, test"], # Test q values out of bounds - [[['test', -1.0]], nil], - [[['test', 1.1]], nil], + [[["test", -1.0]], nil], + [[["test", 1.1]], nil], # Test sorting of types by q value - [[['middle', 0.5], ['min', 0.1], 'max'], - 'min; q=0.1, middle; q=0.5, max'] + [ + [["middle", 0.5], ["min", 0.1], "max"], + "min; q=0.1, middle; q=0.5, max", + ], ].each do |input, expected_header| if expected_header.nil? @@ -153,8 +160,11 @@ def test_generate_accept_header Yadis.generate_accept_header(*input) end else - assert_equal(expected_header, Yadis.generate_accept_header(*input), - [input, expected_header].inspect) + assert_equal( + expected_header, + Yadis.generate_accept_header(*input), + [input, expected_header].inspect, + ) end end end diff --git a/test/test_association.rb b/test/test_association.rb index fe5d5fe..de2904a 100644 --- a/test/test_association.rb +++ b/test/test_association.rb @@ -1,6 +1,6 @@ -require 'minitest/autorun' -require 'openid/association' -require 'openid/protocolerror' +require_relative "test_helper" +require "openid/association" +require "openid/protocolerror" module OpenID class AssociationTestCase < Minitest::Test @@ -11,12 +11,18 @@ def setup issued = Time.at(Time.now.to_i) lifetime = 600 - @assoc = Association.new('handle', 'secret', issued, - lifetime, 'HMAC-SHA1') + @assoc = Association.new( + "handle", + "secret", + issued, + lifetime, + "HMAC-SHA1", + ) end def test_round_trip assoc2 = Association.deserialize(@assoc.serialize) + %i[handle secret lifetime assoc_type].each do |attr| assert_equal(@assoc.send(attr), assoc2.send(attr)) end @@ -39,6 +45,7 @@ def test_deserialize_failure def test_serialization_identity assoc2 = Association.deserialize(@assoc.serialize) + assert_equal(@assoc, assoc2) end @@ -46,16 +53,18 @@ def test_expires_in # Allow one second of slop assert(@assoc.expires_in.between?(599, 600)) assert(@assoc.expires_in(Time.now.to_i).between?(599, 600)) - assert_equal(0, @assoc.expires_in(Time.now.to_i + 10_000), 'negative expires_in') + assert_equal(0, @assoc.expires_in(Time.now.to_i + 10_000), "negative expires_in") end def test_from_expires_in start_time = Time.now expires_in = @assoc.expires_in - assoc = Association.from_expires_in(expires_in, - @assoc.handle, - @assoc.secret, - @assoc.assoc_type) + assoc = Association.from_expires_in( + expires_in, + @assoc.handle, + @assoc.secret, + @assoc.assoc_type, + ) # Allow one second of slop here for code execution time assert_in_delta(1, assoc.expires_in, @assoc.expires_in) @@ -64,65 +73,85 @@ def test_from_expires_in end # Make sure the issued time is near the start - assert(assoc.issued >= start_time) + assert_operator(assoc.issued, :>=, start_time) assert_in_delta(1, assoc.issued.to_f, start_time.to_f) end def test_sign_sha1 - pairs = [%w[key1 value1], - %w[key2 value2]] + pairs = [ + %w[key1 value1], + %w[key2 value2], + ] - [['HMAC-SHA256', "\xfd\xaa\xfe;\xac\xfc*\x988\xad\x05d6-\xeaVy\xd5\xa5Z.<\xa9\xed\x18\x82\\$\x95x\x1c&"], - ['HMAC-SHA1', "\xe0\x1bv\x04\xf1G\xc0\xbb\x7f\x9a\x8b\xe9\xbc\xee}\\\xe5\xbb7*"]].each do |assoc_type, expected| - assoc = Association.from_expires_in(3600, 'handle', 'very_secret', assoc_type) + [ + ["HMAC-SHA256", "\xfd\xaa\xfe;\xac\xfc*\x988\xad\x05d6-\xeaVy\xd5\xa5Z.<\xa9\xed\x18\x82\\$\x95x\x1c&"], + ["HMAC-SHA1", "\xe0\x1bv\x04\xf1G\xc0\xbb\x7f\x9a\x8b\xe9\xbc\xee}\\\xe5\xbb7*"], + ].each do |assoc_type, expected| + assoc = Association.from_expires_in(3600, "handle", "very_secret", assoc_type) sig = assoc.sign(pairs) - assert_equal(expected.force_encoding('UTF-8'), sig.force_encoding('UTF-8')) + + assert_equal(expected.force_encoding("UTF-8"), sig.force_encoding("UTF-8")) m = Message.new(OPENID2_NS) pairs.each do |k, v| m.set_arg(OPENID_NS, k, v) end - m.set_arg(BARE_NS, 'not_an_openid_arg', 'bogus') + m.set_arg(BARE_NS, "not_an_openid_arg", "bogus") signed_m = assoc.sign_message(m) - assert(signed_m.has_key?(OPENID_NS, 'sig')) - assert_equal(signed_m.get_arg(OPENID_NS, 'signed'), - 'assoc_handle,key1,key2,ns,signed') + + assert(signed_m.has_key?(OPENID_NS, "sig")) + assert_equal( + "assoc_handle,key1,key2,ns,signed", + signed_m.get_arg(OPENID_NS, "signed"), + ) end end def test_sign_message_with_sig - assoc = Association.from_expires_in(3600, 'handle', 'very_secret', - 'HMAC-SHA1') + assoc = Association.from_expires_in( + 3600, + "handle", + "very_secret", + "HMAC-SHA1", + ) m = Message.new(OPENID2_NS) - m.set_arg(OPENID_NS, 'sig', 'noise') + m.set_arg(OPENID_NS, "sig", "noise") assert_raises(ArgumentError) do assoc.sign_message(m) end end def test_sign_message_with_signed - assoc = Association.from_expires_in(3600, 'handle', 'very_secret', - 'HMAC-SHA1') + assoc = Association.from_expires_in( + 3600, + "handle", + "very_secret", + "HMAC-SHA1", + ) m = Message.new(OPENID2_NS) - m.set_arg(OPENID_NS, 'signed', 'fields') + m.set_arg(OPENID_NS, "signed", "fields") assert_raises(ArgumentError) do assoc.sign_message(m) end end def test_sign_different_assoc_handle - assoc = Association.from_expires_in(3600, 'handle', 'very_secret', - 'HMAC-SHA1') + assoc = Association.from_expires_in( + 3600, + "handle", + "very_secret", + "HMAC-SHA1", + ) m = Message.new(OPENID2_NS) - m.set_arg(OPENID_NS, 'assoc_handle', 'different') + m.set_arg(OPENID_NS, "assoc_handle", "different") assert_raises(ArgumentError) do assoc.sign_message(m) end end def test_sign_bad_assoc_type - @assoc.instance_eval { @assoc_type = 'Cookies' } + @assoc.instance_eval { @assoc_type = "Cookies" } assert_raises(ProtocolError) do @assoc.sign([]) end @@ -131,26 +160,42 @@ def test_sign_bad_assoc_type def test_make_pairs msg = Message.new(OPENID2_NS) msg.update_args(OPENID2_NS, { - 'mode' => 'id_res', - 'identifier' => '=example', - 'signed' => 'identifier,mode', - 'sig' => 'cephalopod' - }) - msg.update_args(BARE_NS, { 'xey' => 'value' }) - assoc = Association.from_expires_in(3600, '{sha1}', 'very_secret', - 'HMAC-SHA1') + "mode" => "id_res", + "identifier" => "=example", + "signed" => "identifier,mode", + "sig" => "cephalopod", + }) + msg.update_args(BARE_NS, {"xey" => "value"}) + assoc = Association.from_expires_in( + 3600, + "{sha1}", + "very_secret", + "HMAC-SHA1", + ) pairs = assoc.make_pairs(msg) - assert_equal([['identifier', '=example'], - ['mode', 'id_res']], pairs) + + assert_equal( + [ + ["identifier", "=example"], + ["mode", "id_res"], + ], + pairs, + ) end def test_check_message_signature_no_signed m = Message.new(OPENID2_NS) - m.update_args(OPENID2_NS, { 'mode' => 'id_res', - 'identifier' => '=example', - 'sig' => 'coyote' }) - assoc = Association.from_expires_in(3600, '{sha1}', 'very_secret', - 'HMAC-SHA1') + m.update_args(OPENID2_NS, { + "mode" => "id_res", + "identifier" => "=example", + "sig" => "coyote", + }) + assoc = Association.from_expires_in( + 3600, + "{sha1}", + "very_secret", + "HMAC-SHA1", + ) assert_raises(ProtocolError) do assoc.check_message_signature(m) end @@ -158,11 +203,17 @@ def test_check_message_signature_no_signed def test_check_message_signature_no_sig m = Message.new(OPENID2_NS) - m.update_args(OPENID2_NS, { 'mode' => 'id_res', - 'identifier' => '=example', - 'signed' => 'mode' }) - assoc = Association.from_expires_in(3600, '{sha1}', 'very_secret', - 'HMAC-SHA1') + m.update_args(OPENID2_NS, { + "mode" => "id_res", + "identifier" => "=example", + "signed" => "mode", + }) + assoc = Association.from_expires_in( + 3600, + "{sha1}", + "very_secret", + "HMAC-SHA1", + ) assert_raises(ProtocolError) do assoc.check_message_signature(m) end @@ -170,27 +221,40 @@ def test_check_message_signature_no_sig def test_check_message_signature_bad_sig m = Message.new(OPENID2_NS) - m.update_args(OPENID2_NS, { 'mode' => 'id_res', - 'identifier' => '=example', - 'signed' => 'mode', - 'sig' => Util.to_base64('coyote') }) - assoc = Association.from_expires_in(3600, '{sha1}', 'very_secret', - 'HMAC-SHA1') + m.update_args(OPENID2_NS, { + "mode" => "id_res", + "identifier" => "=example", + "signed" => "mode", + "sig" => Util.to_base64("coyote"), + }) + assoc = Association.from_expires_in( + 3600, + "{sha1}", + "very_secret", + "HMAC-SHA1", + ) + assert(!assoc.check_message_signature(m)) end def test_check_message_signature_good_sig m = Message.new(OPENID2_NS) - m.update_args(OPENID2_NS, { 'mode' => 'id_res', - 'identifier' => '=example', - 'signed' => 'mode', - 'sig' => Util.to_base64('coyote') }) - assoc = Association.from_expires_in(3600, '{sha1}', 'very_secret', - 'HMAC-SHA1') + m.update_args(OPENID2_NS, { + "mode" => "id_res", + "identifier" => "=example", + "signed" => "mode", + "sig" => Util.to_base64("coyote"), + }) + assoc = Association.from_expires_in( + 3600, + "{sha1}", + "very_secret", + "HMAC-SHA1", + ) class << assoc # Override sign, because it's already tested elsewhere def sign(_pairs) - 'coyote' + "coyote" end end @@ -202,6 +266,7 @@ class AssociationNegotiatorTestCase < Minitest::Test def assert_equal_under(item1, item2) val1 = yield(item1) val2 = yield(item2) + assert_equal(val1, val2) end @@ -209,26 +274,29 @@ def test_copy neg = AssociationNegotiator.new([%w[HMAC-SHA1 DH-SHA1]]) neg2 = neg.copy assert_equal_under(neg, neg2) { |n| n.instance_eval { @allowed_types } } - assert(neg.object_id != neg2.object_id) + refute_same(neg, neg2) end def test_add_allowed neg = AssociationNegotiator.new([]) - assert(!neg.allowed?('HMAC-SHA1', 'DH-SHA1')) - assert(!neg.allowed?('HMAC-SHA1', 'no-encryption')) - assert(!neg.allowed?('HMAC-SHA256', 'DH-SHA256')) - assert(!neg.allowed?('HMAC-SHA256', 'no-encryption')) - neg.add_allowed_type('HMAC-SHA1') - assert(neg.allowed?('HMAC-SHA1', 'DH-SHA1')) - assert(neg.allowed?('HMAC-SHA1', 'no-encryption')) - assert(!neg.allowed?('HMAC-SHA256', 'DH-SHA256')) - assert(!neg.allowed?('HMAC-SHA256', 'no-encryption')) - neg.add_allowed_type('HMAC-SHA256', 'DH-SHA256') - assert(neg.allowed?('HMAC-SHA1', 'DH-SHA1')) - assert(neg.allowed?('HMAC-SHA1', 'no-encryption')) - assert(neg.allowed?('HMAC-SHA256', 'DH-SHA256')) - assert(!neg.allowed?('HMAC-SHA256', 'no-encryption')) - assert_equal(neg.get_allowed_type, %w[HMAC-SHA1 DH-SHA1]) + + assert(!neg.allowed?("HMAC-SHA1", "DH-SHA1")) + assert(!neg.allowed?("HMAC-SHA1", "no-encryption")) + assert(!neg.allowed?("HMAC-SHA256", "DH-SHA256")) + assert(!neg.allowed?("HMAC-SHA256", "no-encryption")) + neg.add_allowed_type("HMAC-SHA1") + + assert(neg.allowed?("HMAC-SHA1", "DH-SHA1")) + assert(neg.allowed?("HMAC-SHA1", "no-encryption")) + assert(!neg.allowed?("HMAC-SHA256", "DH-SHA256")) + assert(!neg.allowed?("HMAC-SHA256", "no-encryption")) + neg.add_allowed_type("HMAC-SHA256", "DH-SHA256") + + assert(neg.allowed?("HMAC-SHA1", "DH-SHA1")) + assert(neg.allowed?("HMAC-SHA1", "no-encryption")) + assert(neg.allowed?("HMAC-SHA256", "DH-SHA256")) + assert(!neg.allowed?("HMAC-SHA256", "no-encryption")) + assert_equal(%w[HMAC-SHA1 DH-SHA1], neg.get_allowed_type) end def test_bad_assoc_type @@ -244,15 +312,19 @@ def test_bad_session_type end def test_default_negotiator - assert_equal(DefaultNegotiator.get_allowed_type, - %w[HMAC-SHA1 DH-SHA1]) - assert(DefaultNegotiator.allowed?('HMAC-SHA256', 'no-encryption')) + assert_equal( + %w[HMAC-SHA1 DH-SHA1], + DefaultNegotiator.get_allowed_type, + ) + assert(DefaultNegotiator.allowed?("HMAC-SHA256", "no-encryption")) end def test_encrypted_negotiator - assert_equal(EncryptedNegotiator.get_allowed_type, - %w[HMAC-SHA1 DH-SHA1]) - assert(!EncryptedNegotiator.allowed?('HMAC-SHA256', 'no-encryption')) + assert_equal( + %w[HMAC-SHA1 DH-SHA1], + EncryptedNegotiator.get_allowed_type, + ) + assert(!EncryptedNegotiator.allowed?("HMAC-SHA256", "no-encryption")) end end end diff --git a/test/test_associationmanager.rb b/test/test_associationmanager.rb index a5cc232..fba3928 100644 --- a/test/test_associationmanager.rb +++ b/test/test_associationmanager.rb @@ -1,34 +1,38 @@ -require 'minitest/autorun' -require 'testutil' -require 'openid/consumer/associationmanager' -require 'openid/association' -require 'openid/dh' -require 'openid/util' -require 'openid/cryptutil' -require 'openid/message' -require 'openid/protocolerror' -require 'openid/store/memory' -require 'util' -require 'time' +require_relative "test_helper" +require_relative "testutil" +require "openid/consumer/associationmanager" +require "openid/association" +require "openid/dh" +require "openid/util" +require "openid/cryptutil" +require "openid/message" +require "openid/protocolerror" +require "openid/store/memory" +require_relative "util" +require "time" module OpenID class DHAssocSessionTest < Minitest::Test def test_sha1_get_request # Initialized without an explicit DH gets defaults sess = Consumer::DiffieHellmanSHA1Session.new - assert_equal(['dh_consumer_public'], sess.get_request.keys) - Util.from_base64(sess.get_request['dh_consumer_public']) + + assert_equal(["dh_consumer_public"], sess.get_request.keys) + Util.from_base64(sess.get_request["dh_consumer_public"]) end def test_sha1_get_request_custom_dh dh = DiffieHellman.new(1_299_721, 2) sess = Consumer::DiffieHellmanSHA1Session.new(dh) req = sess.get_request - assert_equal(%w[dh_consumer_public dh_modulus dh_gen].sort, - req.keys.sort) - assert_equal(dh.modulus, CryptUtil.base64_to_num(req['dh_modulus'])) - assert_equal(dh.generator, CryptUtil.base64_to_num(req['dh_gen'])) - Util.from_base64(req['dh_consumer_public']) + + assert_equal( + %w[dh_consumer_public dh_modulus dh_gen].sort, + req.keys.sort, + ) + assert_equal(dh.modulus, CryptUtil.base64_to_num(req["dh_modulus"])) + assert_equal(dh.generator, CryptUtil.base64_to_num(req["dh_gen"])) + Util.from_base64(req["dh_consumer_public"]) end end @@ -46,9 +50,11 @@ def setup @secret = CryptUtil.random_string(session_cls.secret_size) enc_mac_key_unencoded = - @server_dh.xor_secret(session_cls.hashfunc, - @consumer_dh.public, - @secret) + @server_dh.xor_secret( + session_cls.hashfunc, + @consumer_dh.public, + @secret, + ) @enc_mac_key = Util.to_base64(enc_mac_key_unencoded) @@ -58,15 +64,16 @@ def setup end def test_extract_secret - @msg.set_arg(OPENID_NS, 'dh_server_public', @dh_server_public) - @msg.set_arg(OPENID_NS, 'enc_mac_key', @enc_mac_key) + @msg.set_arg(OPENID_NS, "dh_server_public", @dh_server_public) + @msg.set_arg(OPENID_NS, "enc_mac_key", @enc_mac_key) extracted = @consumer_session.extract_secret(@msg) + assert_equal(extracted, @secret) end def test_absent_serve_public - @msg.set_arg(OPENID_NS, 'enc_mac_key', @enc_mac_key) + @msg.set_arg(OPENID_NS, "enc_mac_key", @enc_mac_key) assert_raises(Message::KeyNotFound) do @consumer_session.extract_secret(@msg) @@ -74,7 +81,7 @@ def test_absent_serve_public end def test_absent_mac_key - @msg.set_arg(OPENID_NS, 'dh_server_public', @dh_server_public) + @msg.set_arg(OPENID_NS, "dh_server_public", @dh_server_public) assert_raises(Message::KeyNotFound) do @consumer_session.extract_secret(@msg) @@ -82,8 +89,8 @@ def test_absent_mac_key end def test_invalid_base64_public - @msg.set_arg(OPENID_NS, 'dh_server_public', 'n o t b a s e 6 4.') - @msg.set_arg(OPENID_NS, 'enc_mac_key', @enc_mac_key) + @msg.set_arg(OPENID_NS, "dh_server_public", "n o t b a s e 6 4.") + @msg.set_arg(OPENID_NS, "enc_mac_key", @enc_mac_key) assert_raises(ArgumentError) do @consumer_session.extract_secret(@msg) @@ -91,8 +98,8 @@ def test_invalid_base64_public end def test_invalid_base64_mac_key - @msg.set_arg(OPENID_NS, 'dh_server_public', @dh_server_public) - @msg.set_arg(OPENID_NS, 'enc_mac_key', 'n o t base 64') + @msg.set_arg(OPENID_NS, "dh_server_public", @dh_server_public) + @msg.set_arg(OPENID_NS, "enc_mac_key", "n o t base 64") assert_raises(ArgumentError) do @consumer_session.extract_secret(@msg) @@ -136,39 +143,44 @@ def setup end def test_empty_request - assert_equal(@sess.get_request, {}) + assert_empty(@sess.get_request) end def test_get_secret - secret = 'shhh!' * 4 + secret = "shhh!" * 4 mac_key = Util.to_base64(secret) - msg = Message.from_openid_args({ 'mac_key' => mac_key }) + msg = Message.from_openid_args({"mac_key" => mac_key}) + assert_equal(secret, @sess.extract_secret(msg)) end end class TestCreateAssociationRequest < Minitest::Test def setup - @server_url = 'http://invalid/' + @server_url = "http://invalid/" @assoc_manager = Consumer::AssociationManager.new(nil, @server_url) class << @assoc_manager attr_writer :compatibility_mode end - @assoc_type = 'HMAC-SHA1' + @assoc_type = "HMAC-SHA1" end def test_no_encryption_sends_type - session_type = 'no-encryption' - session, args = @assoc_manager.send(:create_associate_request, - @assoc_type, - session_type) + session_type = "no-encryption" + session, args = @assoc_manager.send( + :create_associate_request, + @assoc_type, + session_type, + ) - assert(session.is_a?(Consumer::NoEncryptionSession)) + assert_kind_of(Consumer::NoEncryptionSession, session) expected = Message.from_openid_args( - { 'ns' => OPENID2_NS, - 'session_type' => session_type, - 'mode' => 'associate', - 'assoc_type' => @assoc_type } + { + "ns" => OPENID2_NS, + "session_type" => session_type, + "mode" => "associate", + "assoc_type" => @assoc_type, + }, ) assert_equal(expected, args) @@ -176,64 +188,80 @@ def test_no_encryption_sends_type def test_no_encryption_compatibility @assoc_manager.compatibility_mode = true - session_type = 'no-encryption' - session, args = @assoc_manager.send(:create_associate_request, - @assoc_type, - session_type) + session_type = "no-encryption" + session, args = @assoc_manager.send( + :create_associate_request, + @assoc_type, + session_type, + ) - assert(session.is_a?(Consumer::NoEncryptionSession)) - assert_equal(Message.from_openid_args({ 'mode' => 'associate', - 'assoc_type' => @assoc_type }), args) + assert_kind_of(Consumer::NoEncryptionSession, session) + assert_equal( + Message.from_openid_args({ + "mode" => "associate", + "assoc_type" => @assoc_type, + }), + args, + ) end def test_dh_sha1_compatibility @assoc_manager.compatibility_mode = true - session_type = 'DH-SHA1' - session, args = @assoc_manager.send(:create_associate_request, - @assoc_type, - session_type) + session_type = "DH-SHA1" + session, args = @assoc_manager.send( + :create_associate_request, + @assoc_type, + session_type, + ) - assert(session.is_a?(Consumer::DiffieHellmanSHA1Session)) + assert_kind_of(Consumer::DiffieHellmanSHA1Session, session) # This is a random base-64 value, so just check that it's # present. - refute_nil(args.get_arg(OPENID1_NS, 'dh_consumer_public')) - args.del_arg(OPENID1_NS, 'dh_consumer_public') + refute_nil(args.get_arg(OPENID1_NS, "dh_consumer_public")) + args.del_arg(OPENID1_NS, "dh_consumer_public") # OK, session_type is set here and not for no-encryption # compatibility - expected = Message.from_openid_args({ 'mode' => 'associate', - 'session_type' => 'DH-SHA1', - 'assoc_type' => @assoc_type }) + expected = Message.from_openid_args({ + "mode" => "associate", + "session_type" => "DH-SHA1", + "assoc_type" => @assoc_type, + }) + assert_equal(expected, args) end end class TestAssociationManagerExpiresIn < Minitest::Test def expires_in_msg(val) - msg = Message.from_openid_args({ 'expires_in' => val }) + msg = Message.from_openid_args({"expires_in" => val}) Consumer::AssociationManager.extract_expires_in(msg) end def test_parse_fail - ['', - '-2', - ' 1', - ' ', - '0x00', - 'foosball', - '1\n', - '100,000,000,000'].each do |x| + [ + "", + "-2", + " 1", + " ", + "0x00", + "foosball", + '1\n', + "100,000,000,000", + ].each do |x| assert_raises(ProtocolError) { expires_in_msg(x) } end end def test_parse - %w[0 - 1 - 1000 - 9999999 - 01].each do |n| + %w[ + 0 + 1 + 1000 + 9999999 + 01 + ].each do |n| assert_equal(n.to_i, expires_in_msg(n)) end end @@ -242,28 +270,33 @@ def test_parse class TestAssociationManagerCreateSession < Minitest::Test def test_invalid assert_raises(ArgumentError) do - Consumer::AssociationManager.create_session('monkeys') + Consumer::AssociationManager.create_session("monkeys") end end def test_sha256 - sess = Consumer::AssociationManager.create_session('DH-SHA256') - assert(sess.is_a?(Consumer::DiffieHellmanSHA256Session)) + sess = Consumer::AssociationManager.create_session("DH-SHA256") + + assert_kind_of(Consumer::DiffieHellmanSHA256Session, sess) end end module NegotiationTestMixin include TestUtil def mk_message(args) - args['ns'] = @openid_ns + args["ns"] = @openid_ns Message.from_openid_args(args) end def call_negotiate(responses, negotiator = nil) store = nil compat = self.class::Compat - assoc_manager = Consumer::AssociationManager.new(store, @server_url, - compat, negotiator) + assoc_manager = Consumer::AssociationManager.new( + store, + @server_url, + compat, + negotiator, + ) class << assoc_manager attr_accessor :responses @@ -287,14 +320,14 @@ class TestOpenID2SessionNegotiation < Minitest::Test Compat = false def setup - @server_url = 'http://invalid/' + @server_url = "http://invalid/" @openid_ns = OPENID2_NS end # Test the case where the response to an associate request is a # server error or is otherwise undecipherable. def test_bad_response - assert_log_matches('Server error when requesting an association') do + assert_log_matches("Server error when requesting an association") do assert_nil(call_negotiate([mk_message({})])) end end @@ -302,13 +335,17 @@ def test_bad_response # Test the case where the association type (assoc_type) returned # in an unsupported-type response is absent. def test_empty_assoc_type - msg = mk_message({ 'error' => 'Unsupported type', - 'error_code' => 'unsupported-type', - 'session_type' => 'new-session-type' }) - - assert_log_matches('Unsupported association type', - "Server #{@server_url} responded with unsupported "\ - 'association session but did not supply a fallback.') do + msg = mk_message({ + "error" => "Unsupported type", + "error_code" => "unsupported-type", + "session_type" => "new-session-type", + }) + + assert_log_matches( + "Unsupported association type", + "Server #{@server_url} responded with unsupported " \ + "association session but did not supply a fallback.", + ) do assert_nil(call_negotiate([msg])) end end @@ -316,13 +353,17 @@ def test_empty_assoc_type # Test the case where the session type (session_type) returned # in an unsupported-type response is absent. def test_empty_session_type - msg = mk_message({ 'error' => 'Unsupported type', - 'error_code' => 'unsupported-type', - 'assoc_type' => 'new-assoc-type' }) - - assert_log_matches('Unsupported association type', - "Server #{@server_url} responded with unsupported "\ - 'association session but did not supply a fallback.') do + msg = mk_message({ + "error" => "Unsupported type", + "error_code" => "unsupported-type", + "assoc_type" => "new-assoc-type", + }) + + assert_log_matches( + "Unsupported association type", + "Server #{@server_url} responded with unsupported " \ + "association session but did not supply a fallback.", + ) do assert_nil(call_negotiate([msg])) end end @@ -335,13 +376,17 @@ def test_not_allowed negotiator.instance_eval do @allowed_types = [%w[assoc_bogus session_bogus]] end - msg = mk_message({ 'error' => 'Unsupported type', - 'error_code' => 'unsupported-type', - 'assoc_type' => 'not-allowed', - 'session_type' => 'not-allowed' }) - - assert_log_matches('Unsupported association type', - 'Server sent unsupported session/association type:') do + msg = mk_message({ + "error" => "Unsupported type", + "error_code" => "unsupported-type", + "assoc_type" => "not-allowed", + "session_type" => "not-allowed", + }) + + assert_log_matches( + "Unsupported association type", + "Server sent unsupported session/association type:", + ) do assert_nil(call_negotiate([msg], negotiator)) end end @@ -349,14 +394,16 @@ def test_not_allowed # Test the case where an unsupported-type response triggers a # retry to get an association with the new preferred type. def test_unsupported_with_retry - msg = mk_message({ 'error' => 'Unsupported type', - 'error_code' => 'unsupported-type', - 'assoc_type' => 'HMAC-SHA1', - 'session_type' => 'DH-SHA1' }) + msg = mk_message({ + "error" => "Unsupported type", + "error_code" => "unsupported-type", + "assoc_type" => "HMAC-SHA1", + "session_type" => "DH-SHA1", + }) - assoc = Association.new('handle', 'secret', Time.now, 10_000, 'HMAC-SHA1') + assoc = Association.new("handle", "secret", Time.now, 10_000, "HMAC-SHA1") - assert_log_matches('Unsupported association type') do + assert_log_matches("Unsupported association type") do assert_equal(assoc, call_negotiate([msg, assoc])) end end @@ -364,13 +411,17 @@ def test_unsupported_with_retry # Test the case where an unsupported-typ response triggers a # retry, but the retry fails and nil is returned instead. def test_unsupported_with_retry_and_fail - msg = mk_message({ 'error' => 'Unsupported type', - 'error_code' => 'unsupported-type', - 'assoc_type' => 'HMAC-SHA1', - 'session_type' => 'DH-SHA1' }) - - assert_log_matches('Unsupported association type', - "Server #{@server_url} refused") do + msg = mk_message({ + "error" => "Unsupported type", + "error_code" => "unsupported-type", + "assoc_type" => "HMAC-SHA1", + "session_type" => "DH-SHA1", + }) + + assert_log_matches( + "Unsupported association type", + "Server #{@server_url} refused", + ) do assert_nil(call_negotiate([msg, msg])) end end @@ -378,7 +429,7 @@ def test_unsupported_with_retry_and_fail # Test the valid case, wherein an association is returned on the # first attempt to get one. def test_valid - assoc = Association.new('handle', 'secret', Time.now, 10_000, 'HMAC-SHA1') + assoc = Association.new("handle", "secret", Time.now, 10_000, "HMAC-SHA1") assert_log_matches do assert_equal(call_negotiate([assoc]), assoc) @@ -399,35 +450,42 @@ class TestOpenID1SessionNegotiation < Minitest::Test Compat = true def setup - @server_url = 'http://invalid/' + @server_url = "http://invalid/" @openid_ns = OPENID1_NS end def test_bad_response - assert_log_matches('Server error when requesting an association') do + assert_log_matches("Server error when requesting an association") do response = call_negotiate([mk_message({})]) + assert_nil(response) end end def test_empty_assoc_type - msg = mk_message({ 'error' => 'Unsupported type', - 'error_code' => 'unsupported-type', - 'session_type' => 'new-session-type' }) + msg = mk_message({ + "error" => "Unsupported type", + "error_code" => "unsupported-type", + "session_type" => "new-session-type", + }) - assert_log_matches('Server error when requesting an association') do + assert_log_matches("Server error when requesting an association") do response = call_negotiate([msg]) + assert_nil(response) end end def test_empty_session_type - msg = mk_message({ 'error' => 'Unsupported type', - 'error_code' => 'unsupported-type', - 'assoc_type' => 'new-assoc-type' }) + msg = mk_message({ + "error" => "Unsupported type", + "error_code" => "unsupported-type", + "assoc_type" => "new-assoc-type", + }) - assert_log_matches('Server error when requesting an association') do + assert_log_matches("Server error when requesting an association") do response = call_negotiate([msg]) + assert_nil(response) end end @@ -438,35 +496,42 @@ def test_not_allowed @allowed_types = [%w[assoc_bogus session_bogus]] end - msg = mk_message({ 'error' => 'Unsupported type', - 'error_code' => 'unsupported-type', - 'assoc_type' => 'not-allowed', - 'session_type' => 'not-allowed' }) + msg = mk_message({ + "error" => "Unsupported type", + "error_code" => "unsupported-type", + "assoc_type" => "not-allowed", + "session_type" => "not-allowed", + }) - assert_log_matches('Server error when requesting an association') do + assert_log_matches("Server error when requesting an association") do response = call_negotiate([msg]) + assert_nil(response) end end def test_unsupported_with_retry - msg = mk_message({ 'error' => 'Unsupported type', - 'error_code' => 'unsupported-type', - 'assoc_type' => 'HMAC-SHA1', - 'session_type' => 'DH-SHA1' }) + msg = mk_message({ + "error" => "Unsupported type", + "error_code" => "unsupported-type", + "assoc_type" => "HMAC-SHA1", + "session_type" => "DH-SHA1", + }) - assoc = Association.new('handle', 'secret', Time.now, 10_000, 'HMAC-SHA1') + assoc = Association.new("handle", "secret", Time.now, 10_000, "HMAC-SHA1") - assert_log_matches('Server error when requesting an association') do + assert_log_matches("Server error when requesting an association") do response = call_negotiate([msg, assoc]) + assert_nil(response) end end def test_valid - assoc = Association.new('handle', 'secret', Time.now, 10_000, 'HMAC-SHA1') + assoc = Association.new("handle", "secret", Time.now, 10_000, "HMAC-SHA1") assert_log_matches do response = call_negotiate([assoc]) + assert_equal(assoc, response) end end @@ -477,10 +542,10 @@ class TestExtractAssociation < Minitest::Test # An OpenID associate response (without the namespace) DEFAULTS = { - 'expires_in' => '1000', - 'assoc_handle' => 'a handle', - 'assoc_type' => 'a type', - 'session_type' => 'a session type' + "expires_in" => "1000", + "assoc_handle" => "a handle", + "assoc_type" => "a type", + "session_type" => "a session type", } def setup @@ -502,7 +567,7 @@ def setup # # In OpenID 1, everything except 'session_type' and 'ns' are # required. - MISSING_FIELD_SETS = ([['no_fields', []]] + + MISSING_FIELD_SETS = ([["no_fields", []]] + (DEFAULTS.keys.map do |f| fields = DEFAULTS.keys fields.delete(f) @@ -513,7 +578,7 @@ def setup [OPENID1_NS, OPENID2_NS].each do |ns| MISSING_FIELD_SETS.each do |name, fields| # OpenID 1 is allowed to be missing session_type - next unless ns != OPENID1_NS and name != 'missing_session_type' + next unless ns != OPENID1_NS and name != "missing_session_type" test = lambda do msg = Message.new(ns) @@ -524,7 +589,7 @@ def setup @assoc_manager.send(:extract_association, msg, nil) end end - define_method("test_#{name}", test) + define_method(:"test_#{name}", test) end end @@ -551,22 +616,24 @@ def self.allowed_assoc_types # the specified association session type msg = Message.new(ns) msg.update_args(ns, DEFAULTS) - msg.set_arg(ns, 'session_type', resp_type) + msg.set_arg(ns, "session_type", resp_type) # The request type and response type have been chosen to produce # a session type mismatch. - assert_protocol_error('Session type mismatch') do + assert_protocol_error("Session type mismatch") do @assoc_manager.send(:extract_association, msg, assoc_session) end end - [['no-encryption', '', OPENID2_NS], - ['DH-SHA1', 'no-encryption', OPENID2_NS], - ['DH-SHA256', 'no-encryption', OPENID2_NS], - ['no-encryption', 'DH-SHA1', OPENID2_NS], - ['DH-SHA1', 'DH-SHA256', OPENID1_NS], - ['DH-SHA256', 'DH-SHA1', OPENID1_NS], - ['no-encryption', 'DH-SHA1', OPENID1_NS]].each do |req_type, resp_type, ns| + [ + ["no-encryption", "", OPENID2_NS], + ["DH-SHA1", "no-encryption", OPENID2_NS], + ["DH-SHA256", "no-encryption", OPENID2_NS], + ["no-encryption", "DH-SHA1", OPENID2_NS], + ["DH-SHA1", "DH-SHA256", OPENID1_NS], + ["DH-SHA256", "DH-SHA1", OPENID1_NS], + ["no-encryption", "DH-SHA1", OPENID1_NS], + ].each do |req_type, resp_type, ns| test = -> { assert_session_mismatch(req_type, resp_type, ns) } name = "test_mismatch_req_#{req_type}_resp_#{resp_type}_#{ns}" define_method(name, test) @@ -578,60 +645,67 @@ def test_openid1_no_encryption_fallback # An OpenID 1 no-encryption association response msg = Message.from_openid_args({ - 'expires_in' => '1000', - 'assoc_handle' => 'a handle', - 'assoc_type' => 'HMAC-SHA1', - 'mac_key' => 'X' * 20 - }) + "expires_in" => "1000", + "assoc_handle" => "a handle", + "assoc_type" => "HMAC-SHA1", + "mac_key" => "X" * 20, + }) # Should succeed assoc = @assoc_manager.send(:extract_association, msg, assoc_session) - assert_equal('a handle', assoc.handle) - assert_equal('HMAC-SHA1', assoc.assoc_type) + + assert_equal("a handle", assoc.handle) + assert_equal("HMAC-SHA1", assoc.assoc_type) assert(assoc.expires_in.between?(999, 1000)) - assert('X' * 20, assoc.secret) + assert_operator("X", :*, 20, assoc.secret) end end class GetOpenIDSessionTypeTest < Minitest::Test include TestUtil - SERVER_URL = 'http://invalid/' + SERVER_URL = "http://invalid/" def do_test(expected_session_type, session_type_value) # Create a Message with just 'session_type' in it, since # that's all this function will use. 'session_type' may be # absent if it's set to None. args = {} - args['session_type'] = session_type_value unless session_type_value.nil? + args["session_type"] = session_type_value unless session_type_value.nil? message = Message.from_openid_args(args) + assert(message.is_openid1) assoc_manager = Consumer::AssociationManager.new(nil, SERVER_URL) - actual_session_type = assoc_manager.send(:get_openid1_session_type, - message) - error_message = "Returned session type parameter #{session_type_value}"\ - 'was expected to yield session type '\ - "#{expected_session_type}, but yielded "\ - "#{actual_session_type}" + actual_session_type = assoc_manager.send( + :get_openid1_session_type, + message, + ) + error_message = "Returned session type parameter #{session_type_value}" \ + "was expected to yield session type " \ + "#{expected_session_type}, but yielded " \ + "#{actual_session_type}" + assert_equal(expected_session_type, actual_session_type, error_message) end - [['nil', 'no-encryption', nil], - ['empty', 'no-encryption', ''], - ['dh_sha1', 'DH-SHA1', 'DH-SHA1'], - ['dh_sha256', 'DH-SHA256', 'DH-SHA256']].each do |name, expected, input| + [ + ["nil", "no-encryption", nil], + ["empty", "no-encryption", ""], + ["dh_sha1", "DH-SHA1", "DH-SHA1"], + ["dh_sha256", "DH-SHA256", "DH-SHA256"], + ].each do |name, expected, input| # Define a test method that will check what session type will be # used if the OpenID 1 response to an associate call sets the # 'session_type' field to `session_type_value` test = -> { assert_log_matches { do_test(expected, input) } } - define_method("test_#{name}", &test) + define_method(:"test_#{name}", &test) end # This one's different because it expects log messages def test_explicit_no_encryption assert_log_matches("WARNING: #{SERVER_URL} sent 'no-encryption'") do - do_test('no-encryption', 'no-encryption') + do_test("no-encryption", "no-encryption") end end end @@ -639,25 +713,25 @@ def test_explicit_no_encryption class ExtractAssociationTest < Minitest::Test include ProtocolErrorMixin - SERVER_URL = 'http://invalid/' + SERVER_URL = "http://invalid/" def setup - @session_type = 'testing-session' + @session_type = "testing-session" # This must something that works for Association::from_expires_in - @assoc_type = 'HMAC-SHA1' + @assoc_type = "HMAC-SHA1" - @assoc_handle = 'testing-assoc-handle' + @assoc_handle = "testing-assoc-handle" # These arguments should all be valid @assoc_response = Message.from_openid_args({ - 'expires_in' => '1000', - 'assoc_handle' => @assoc_handle, - 'assoc_type' => @assoc_type, - 'session_type' => @session_type, - 'ns' => OPENID2_NS - }) + "expires_in" => "1000", + "assoc_handle" => @assoc_handle, + "assoc_type" => @assoc_type, + "session_type" => @session_type, + "ns" => OPENID2_NS, + }) assoc_session_cls = Class.new do class << self attr_accessor :allowed_assoc_types, :session_type @@ -667,7 +741,7 @@ class << self def initialize @extract_secret_called = false - @secret = 'shhhhh!' + @secret = "shhhhh!" end def extract_secret(_) @@ -683,13 +757,17 @@ def extract_secret(_) end def call_extract - @assoc_manager.send(:extract_association, - @assoc_response, @assoc_session) + @assoc_manager.send( + :extract_association, + @assoc_response, + @assoc_session, + ) end # Handle a full successful association response def test_works_with_good_fields assoc = call_extract + assert(@assoc_session.extract_secret_called) assert_equal(@assoc_session.secret, assoc.secret) assert_equal(1000, assoc.lifetime) @@ -701,68 +779,75 @@ def test_bad_assoc_type # Make sure that the assoc type in the response is not valid # for the given session. @assoc_session.class.allowed_assoc_types = [] - assert_protocol_error('Unsupported assoc_type for sess') { call_extract } + assert_protocol_error("Unsupported assoc_type for sess") { call_extract } end def test_bad_expires_in # Invalid value for expires_in should cause failure - @assoc_response.set_arg(OPENID_NS, 'expires_in', 'forever') - assert_protocol_error('Invalid expires_in') { call_extract } + @assoc_response.set_arg(OPENID_NS, "expires_in", "forever") + assert_protocol_error("Invalid expires_in") { call_extract } end end class TestExtractAssociationDiffieHellman < Minitest::Test include ProtocolErrorMixin - SECRET = 'x' * 20 + SECRET = "x" * 20 def setup @assoc_manager = Consumer::AssociationManager.new(nil, nil) end def setup_dh - sess, = @assoc_manager.send(:create_associate_request, - 'HMAC-SHA1', 'DH-SHA1') + sess, = @assoc_manager.send( + :create_associate_request, + "HMAC-SHA1", + "DH-SHA1", + ) server_dh = DiffieHellman.new - cons_dh = sess.instance_variable_get('@dh') + cons_dh = sess.instance_variable_get(:@dh) - enc_mac_key = server_dh.xor_secret(CryptUtil.method(:sha1), - cons_dh.public, SECRET) + enc_mac_key = server_dh.xor_secret( + CryptUtil.method(:sha1), + cons_dh.public, + SECRET, + ) server_resp = { - 'dh_server_public' => CryptUtil.num_to_base64(server_dh.public), - 'enc_mac_key' => Util.to_base64(enc_mac_key), - 'assoc_type' => 'HMAC-SHA1', - 'assoc_handle' => 'handle', - 'expires_in' => '1000', - 'session_type' => 'DH-SHA1' + "dh_server_public" => CryptUtil.num_to_base64(server_dh.public), + "enc_mac_key" => Util.to_base64(enc_mac_key), + "assoc_type" => "HMAC-SHA1", + "assoc_handle" => "handle", + "expires_in" => "1000", + "session_type" => "DH-SHA1", } - server_resp['ns'] = OPENID2_NS if @assoc_manager.instance_variable_get(:@compatibility_mode) + server_resp["ns"] = OPENID2_NS if @assoc_manager.instance_variable_get(:@compatibility_mode) [sess, Message.from_openid_args(server_resp)] end def test_success sess, server_resp = setup_dh ret = @assoc_manager.send(:extract_association, server_resp, sess) + assert(!ret.nil?) - assert_equal(ret.assoc_type, 'HMAC-SHA1') + assert_equal("HMAC-SHA1", ret.assoc_type) assert_equal(ret.secret, SECRET) - assert_equal(ret.handle, 'handle') - assert_equal(ret.lifetime, 1000) + assert_equal("handle", ret.handle) + assert_equal(1000, ret.lifetime) end def test_openid2success # Use openid 1 type in endpoint so _setUpDH checks # compatibility mode state properly - @assoc_manager.instance_variable_set('@compatibility_mode', true) + @assoc_manager.instance_variable_set(:@compatibility_mode, true) test_success end def test_bad_dh_values sess, server_resp = setup_dh - server_resp.set_arg(OPENID_NS, 'enc_mac_key', '\x00\x00\x00') - assert_protocol_error('Malformed response for') do + server_resp.set_arg(OPENID_NS, "enc_mac_key", '\x00\x00\x00') + assert_protocol_error("Malformed response for") do @assoc_manager.send(:extract_association, server_resp, sess) end end @@ -775,12 +860,17 @@ class TestAssocManagerGetAssociation < Minitest::Test attr_reader :negotiate_association def setup - @server_url = 'http://invalid/' + @server_url = "http://invalid/" @store = Store::Memory.new @assoc_manager = Consumer::AssociationManager.new(@store, @server_url) @assoc_manager.extend(Const) - @assoc = Association.new('handle', 'secret', Time.now, 10_000, - 'HMAC-SHA1') + @assoc = Association.new( + "handle", + "secret", + Time.now, + 10_000, + "HMAC-SHA1", + ) end def set_negotiate_response(assoc) @@ -789,40 +879,50 @@ def set_negotiate_response(assoc) def test_not_in_store_no_response set_negotiate_response(nil) + assert_nil(@assoc_manager.get_association) end def test_not_in_store_negotiate_assoc # Not stored beforehand: stored_assoc = @store.get_association(@server_url, @assoc.handle) + assert_nil(stored_assoc) # Returned from associate call: set_negotiate_response(@assoc) + assert_equal(@assoc, @assoc_manager.get_association) # It should have been stored: stored_assoc = @store.get_association(@server_url, @assoc.handle) + assert_equal(@assoc, stored_assoc) end def test_in_store_no_response set_negotiate_response(nil) @store.store_association(@server_url, @assoc) + assert_equal(@assoc, @assoc_manager.get_association) end def test_request_assoc_with_status_error fetcher_class = Class.new do define_method(:fetch) do |*_args| - MockResponse.new(500, '') + MockResponse.new(500, "") end end + with_fetcher(fetcher_class.new) do - assert_log_matches('Got HTTP status error when requesting') do - result = @assoc_manager.send(:request_association, 'HMAC-SHA1', - 'no-encryption') - assert(result.nil?) + assert_log_matches("Got HTTP status error when requesting") do + result = @assoc_manager.send( + :request_association, + "HMAC-SHA1", + "no-encryption", + ) + + assert_nil(result) end end end @@ -833,17 +933,17 @@ class TestAssocManagerRequestAssociation < Minitest::Test include TestUtil def setup - @assoc_manager = Consumer::AssociationManager.new(nil, 'http://invalid/') - @assoc_type = 'HMAC-SHA1' - @session_type = 'no-encryption' + @assoc_manager = Consumer::AssociationManager.new(nil, "http://invalid/") + @assoc_type = "HMAC-SHA1" + @session_type = "no-encryption" @message = Message.new(OPENID2_NS) @message.update_args(OPENID_NS, { - 'assoc_type' => @assoc_type, - 'session_type' => @session_type, - 'assoc_handle' => 'kaboodle', - 'expires_in' => '1000', - 'mac_key' => 'X' * 20 - }) + "assoc_type" => @assoc_type, + "session_type" => @session_type, + "assoc_handle" => "kaboodle", + "expires_in" => "1000", + "mac_key" => "X" * 20, + }) end def make_request @@ -861,14 +961,14 @@ def make_request # The association we get is from valid processing of our result, # and that no errors are raised def test_success - assert_equal('kaboodle', make_request.handle) + assert_equal("kaboodle", make_request.handle) end # A missing parameter gets translated into a log message and # causes the method to return nil def test_missing_fields - @message.del_arg(OPENID_NS, 'assoc_type') - assert_log_matches('Missing required par') do + @message.del_arg(OPENID_NS, "assoc_type") + assert_log_matches("Missing required par") do assert_nil(make_request) end end @@ -876,8 +976,8 @@ def test_missing_fields # A bad value results in a log message and causes the method to # return nil def test_protocol_error - @message.set_arg(OPENID_NS, 'expires_in', 'goats') - assert_log_matches('Protocol error processing') do + @message.set_arg(OPENID_NS, "expires_in", "goats") + assert_log_matches("Protocol error processing") do assert_nil(make_request) end end diff --git a/test/test_ax.rb b/test/test_ax.rb index d074778..bd869e2 100644 --- a/test/test_ax.rb +++ b/test/test_ax.rb @@ -1,14 +1,14 @@ -require 'minitest/autorun' -require 'openid/extensions/ax' -require 'openid/message' -require 'openid/consumer/responses' -require 'openid/consumer/discovery' -require 'openid/consumer/checkid_request' +require_relative "test_helper" +require "openid/extensions/ax" +require "openid/message" +require "openid/consumer/responses" +require "openid/consumer/discovery" +require "openid/consumer/checkid_request" module OpenID module AX class BogusAXMessage < AXMessage - @mode = 'bogus' + @mode = "bogus" def get_extension_args new_args @@ -29,8 +29,8 @@ def setup end def test_check_mode - assert_raises(Error) { @bax.do_check_mode({ 'mode' => 'fetch_request' }) } - @bax.do_check_mode({ 'mode' => @bax.mode }) + assert_raises(Error) { @bax.do_check_mode({"mode" => "fetch_request"}) } + @bax.do_check_mode({"mode" => @bax.mode}) end def test_check_mode_new_args @@ -41,7 +41,7 @@ def test_check_mode_new_args class AttrInfoTest < Minitest::Test def test_construct assert_raises(ArgumentError) { AttrInfo.new } - type_uri = 'uri geller' + type_uri = "uri geller" ainfo = AttrInfo.new(type_uri) assert_equal(type_uri, ainfo.type_uri) @@ -57,36 +57,39 @@ def setup end def test_empty - [nil, ''].each do |empty| + [nil, ""].each do |empty| uris = AX.to_type_uris(@aliases, empty) - assert_equal([], uris) + + assert_empty(uris) end end def test_undefined assert_raises(IndexError) do - AX.to_type_uris(@aliases, 'http://janrain.com/') + AX.to_type_uris(@aliases, "http://janrain.com/") end end def test_one - uri = 'http://janrain.com/' - name = 'openid_hackers' + uri = "http://janrain.com/" + name = "openid_hackers" @aliases.add_alias(uri, name) uris = AX.to_type_uris(@aliases, name) + assert_equal([uri], uris) end def test_two - uri1 = 'http://janrain.com/' - name1 = 'openid_hackers' + uri1 = "http://janrain.com/" + name1 = "openid_hackers" @aliases.add_alias(uri1, name1) - uri2 = 'http://jyte.com/' - name2 = 'openid_hack' + uri2 = "http://jyte.com/" + name2 = "openid_hack" @aliases.add_alias(uri2, name2) - uris = AX.to_type_uris(@aliases, [name1, name2].join(',')) + uris = AX.to_type_uris(@aliases, [name1, name2].join(",")) + assert_equal([uri1, uri2], uris) end end @@ -95,6 +98,7 @@ class ParseAXValuesTest < Minitest::Test def ax_values(ax_args, expected_args) msg = KeyValueMessage.new msg.parse_extension_args(ax_args) + assert_equal(expected_args, msg.data) end @@ -110,60 +114,70 @@ def test_empty_is_valid end def test_missing_value_for_alias_explodes - ax_error({ 'type.foo' => 'urn:foo' }, IndexError) + ax_error({"type.foo" => "urn:foo"}, IndexError) end def test_count_present_but_not_value - ax_error({ 'type.foo' => 'urn:foo', 'count.foo' => '1' }, IndexError) + ax_error({"type.foo" => "urn:foo", "count.foo" => "1"}, IndexError) end def test_invalid_count_value msg = FetchRequest.new assert_raises(Error) do - msg.parse_extension_args({ 'type.foo' => 'urn:foo', - 'count.foo' => 'bogus' }) + msg.parse_extension_args({ + "type.foo" => "urn:foo", + "count.foo" => "bogus", + }) end end def test_request_unlimited_values msg = FetchRequest.new - args = { 'mode' => 'fetch_request', - 'required' => 'foo', - 'type.foo' => 'urn:foo', - 'count.foo' => UNLIMITED_VALUES } + args = { + "mode" => "fetch_request", + "required" => "foo", + "type.foo" => "urn:foo", + "count.foo" => UNLIMITED_VALUES, + } msg.parse_extension_args(args) foo = msg.attributes[0] + assert_equal(UNLIMITED_VALUES, foo.count) - assert(foo.wants_unlimited_values?) + assert_predicate(foo, :wants_unlimited_values?) end def test_long_alias # spec says we must support at least 32 character-long aliases - name = 'x' * MINIMUM_SUPPORTED_ALIAS_LENGTH + name = "x" * MINIMUM_SUPPORTED_ALIAS_LENGTH msg = KeyValueMessage.new args = { - "type.#{name}" => 'urn:foo', - "count.#{name}" => '1', - "value.#{name}.1" => 'first' + "type.#{name}" => "urn:foo", + "count.#{name}" => "1", + "value.#{name}.1" => "first", } msg.parse_extension_args(args) - assert_equal(['first'], msg['urn:foo']) + + assert_equal(["first"], msg["urn:foo"]) end def test_invalid_alias types = [ KeyValueMessage, - FetchRequest + FetchRequest, ] inputs = [ - { 'type.a.b' => 'urn:foo', - 'count.a.b' => '1' }, - { 'type.a,b' => 'urn:foo', - 'count.a,b' => '1' } + { + "type.a.b" => "urn:foo", + "count.a.b" => "1", + }, + { + "type.a,b" => "urn:foo", + "count.a,b" => "1", + }, ] types.each do |t| - inputs.each do |input| + inputs.each do |input| msg = t.new assert_raises(Error) { msg.parse_extension_args(input) } end @@ -172,45 +186,55 @@ def test_invalid_alias def test_count_present_and_is_zero ax_values( - { 'type.foo' => 'urn:foo', - 'count.foo' => '0' }, - { 'urn:foo' => [] } + { + "type.foo" => "urn:foo", + "count.foo" => "0", + }, + {"urn:foo" => []}, ) end def test_singleton_empty ax_values( - { 'type.foo' => 'urn:foo', - 'value.foo' => '' }, - { 'urn:foo' => [] } + { + "type.foo" => "urn:foo", + "value.foo" => "", + }, + {"urn:foo" => []}, ) end def test_double_alias ax_error( - { 'type.foo' => 'urn:foo', - 'value.foo' => '', - 'type.bar' => 'urn:foo', - 'value.bar' => '' }, - IndexError + { + "type.foo" => "urn:foo", + "value.foo" => "", + "type.bar" => "urn:foo", + "value.bar" => "", + }, + IndexError, ) end def test_double_singleton ax_values( - { 'type.foo' => 'urn:foo', - 'value.foo' => '', - 'type.bar' => 'urn:bar', - 'value.bar' => '' }, - { 'urn:foo' => [], 'urn:bar' => [] } + { + "type.foo" => "urn:foo", + "value.foo" => "", + "type.bar" => "urn:bar", + "value.bar" => "", + }, + {"urn:foo" => [], "urn:bar" => []}, ) end def singleton_value ax_values( - { 'type.foo' => 'urn:foo', - 'value.foo' => 'something' }, - { 'urn:foo' => ['something'] } + { + "type.foo" => "urn:foo", + "value.foo" => "something", + }, + {"urn:foo" => ["something"]}, ) end end @@ -218,41 +242,44 @@ def singleton_value class FetchRequestTest < Minitest::Test def setup @msg = FetchRequest.new - @type_a = 'http://janrain.example.com/a' - @name_a = 'a' + @type_a = "http://janrain.example.com/a" + @name_a = "a" end def test_mode - assert_equal('fetch_request', @msg.mode) + assert_equal("fetch_request", @msg.mode) end def test_construct - assert_equal({}, @msg.requested_attributes) + assert_empty(@msg.requested_attributes) assert_nil(@msg.update_url) - msg = FetchRequest.new('hailstorm') - assert_equal({}, msg.requested_attributes) - assert_equal('hailstorm', msg.update_url) + msg = FetchRequest.new("hailstorm") + + assert_empty(msg.requested_attributes) + assert_equal("hailstorm", msg.update_url) end def test_add - uri = 'mud://puddle' + uri = "mud://puddle" assert(!@msg.member?(uri)) a = AttrInfo.new(uri) @msg.add(a) + assert(@msg.member?(uri)) end def test_add_twice - uri = 'its://raining' + uri = "its://raining" a = AttrInfo.new(uri) @msg.add(a) assert_raises(IndexError) { @msg.add(a) } end def do_extension_args(expected_args) - expected_args['mode'] = @msg.mode + expected_args["mode"] = @msg.mode + assert_equal(expected_args, @msg.get_extension_args) end @@ -261,59 +288,71 @@ def test_get_extension_args_empty end def test_get_extension_args_no_alias - a = AttrInfo.new('foo://bar') + a = AttrInfo.new("foo://bar") @msg.add(a) ax_args = @msg.get_extension_args ax_args.each do |k, v| - if v == a.type_uri and k.index('type.') == 0 + if v == a.type_uri and k.index("type.") == 0 @name = k[5..-1] break end end - do_extension_args({ 'type.' + @name => a.type_uri, - 'if_available' => @name }) + do_extension_args({ + "type." + @name => a.type_uri, + "if_available" => @name, + }) end def test_get_extension_args_alias_if_available - a = AttrInfo.new('type://of.transportation', - 'transport') + a = AttrInfo.new( + "type://of.transportation", + "transport", + ) @msg.add(a) - do_extension_args({ 'type.' + a.ns_alias => a.type_uri, - 'if_available' => a.ns_alias }) + do_extension_args({ + "type." + a.ns_alias => a.type_uri, + "if_available" => a.ns_alias, + }) end def test_get_extension_args_alias_req - a = AttrInfo.new('type://of.transportation', - 'transport', - true) + a = AttrInfo.new( + "type://of.transportation", + "transport", + true, + ) @msg.add(a) - do_extension_args({ 'type.' + a.ns_alias => a.type_uri, - 'required' => a.ns_alias }) + do_extension_args({ + "type." + a.ns_alias => a.type_uri, + "required" => a.ns_alias, + }) end def test_get_required_attrs_empty - assert_equal([], @msg.get_required_attrs) + assert_empty(@msg.get_required_attrs) end def test_parse_extension_args_extra_type args = { - 'mode' => 'fetch_request', - 'type.' + @name_a => @type_a + "mode" => "fetch_request", + "type." + @name_a => @type_a, } assert_raises(Error) { @msg.parse_extension_args(args) } end def test_parse_extension_args args = { - 'mode' => 'fetch_request', - 'type.' + @name_a => @type_a, - 'if_available' => @name_a + "mode" => "fetch_request", + "type." + @name_a => @type_a, + "if_available" => @name_a, } @msg.parse_extension_args(args) + assert(@msg.member?(@type_a)) assert_equal([@type_a], @msg.requested_types) ai = @msg.requested_attributes[@type_a] - assert(ai.is_a?(AttrInfo)) + + assert_kind_of(AttrInfo, ai) assert(!ai.required) assert_equal(@type_a, ai.type_uri) assert_equal(@name_a, ai.ns_alias) @@ -322,40 +361,43 @@ def test_parse_extension_args def test_extension_args_idempotent args = { - 'mode' => 'fetch_request', - 'type.' + @name_a => @type_a, - 'if_available' => @name_a + "mode" => "fetch_request", + "type." + @name_a => @type_a, + "if_available" => @name_a, } @msg.parse_extension_args(args) + assert_equal(args, @msg.get_extension_args) assert(!@msg.requested_attributes[@type_a].required) end def test_extension_args_idempotent_count_required args = { - 'mode' => 'fetch_request', - 'type.' + @name_a => @type_a, - 'count.' + @name_a => '2', - 'required' => @name_a + "mode" => "fetch_request", + "type." + @name_a => @type_a, + "count." + @name_a => "2", + "required" => @name_a, } @msg.parse_extension_args(args) + assert_equal(args, @msg.get_extension_args) assert(@msg.requested_attributes[@type_a].required) end def test_extension_args_count1 args = { - 'mode' => 'fetch_request', - 'type.' + @name_a => @type_a, - 'count.' + @name_a => '1', - 'if_available' => @name_a + "mode" => "fetch_request", + "type." + @name_a => @type_a, + "count." + @name_a => "1", + "if_available" => @name_a, } norm_args = { - 'mode' => 'fetch_request', - 'type.' + @name_a => @type_a, - 'if_available' => @name_a + "mode" => "fetch_request", + "type." + @name_a => @type_a, + "if_available" => @name_a, } @msg.parse_extension_args(args) + assert_equal(norm_args, @msg.get_extension_args) end @@ -364,39 +406,41 @@ def test_from_openid_request_no_ax openid_req = Server::OpenIDRequest.new openid_req.message = message ax_req = FetchRequest.from_openid_request(openid_req) - assert(ax_req.nil?) + + assert_nil(ax_req) end def test_from_openid_request_wrong_ax_mode - uri = 'http://under.the.sea/' - name = 'ext0' - value = 'snarfblat' + uri = "http://under.the.sea/" + name = "ext0" + value = "snarfblat" message = OpenID::Message.from_openid_args({ - 'mode' => 'id_res', - 'ns' => OPENID2_NS, - 'ns.ax' => AXMessage::NS_URI, - 'ax.update_url' => 'http://example.com/realm/update_path', - 'ax.mode' => 'store_request', - 'ax.type.' + name => uri, - 'ax.count.' + name => '1', - 'ax.value.' + name + '.1' => value - }) + "mode" => "id_res", + "ns" => OPENID2_NS, + "ns.ax" => AXMessage::NS_URI, + "ax.update_url" => "http://example.com/realm/update_path", + "ax.mode" => "store_request", + "ax.type." + name => uri, + "ax.count." + name => "1", + "ax.value." + name + ".1" => value, + }) openid_req = Server::OpenIDRequest.new openid_req.message = message ax_req = FetchRequest.from_openid_request(openid_req) - assert(ax_req.nil?) + + assert_nil(ax_req) end def test_openid_update_url_verification_error openid_req_msg = Message.from_openid_args({ - 'mode' => 'checkid_setup', - 'ns' => OPENID2_NS, - 'realm' => 'http://example.com/realm', - 'ns.ax' => AXMessage::NS_URI, - 'ax.update_url' => 'http://different.site/path', - 'ax.mode' => 'fetch_request' - }) + "mode" => "checkid_setup", + "ns" => OPENID2_NS, + "realm" => "http://example.com/realm", + "ns.ax" => AXMessage::NS_URI, + "ax.update_url" => "http://different.site/path", + "ax.mode" => "fetch_request", + }) openid_req = Server::OpenIDRequest.new openid_req.message = openid_req_msg assert_raises(Error) do @@ -406,12 +450,12 @@ def test_openid_update_url_verification_error def test_openid_no_realm openid_req_msg = Message.from_openid_args({ - 'mode' => 'checkid_setup', - 'ns' => OPENID2_NS, - 'ns.ax' => AXMessage::NS_URI, - 'ax.update_url' => 'http://different.site/path', - 'ax.mode' => 'fetch_request' - }) + "mode" => "checkid_setup", + "ns" => OPENID2_NS, + "ns.ax" => AXMessage::NS_URI, + "ax.update_url" => "http://different.site/path", + "ax.mode" => "fetch_request", + }) openid_req = Server::OpenIDRequest.new openid_req.message = openid_req_msg assert_raises(Error) do @@ -421,58 +465,60 @@ def test_openid_no_realm def test_openid_update_url_verification_success openid_req_msg = Message.from_openid_args({ - 'mode' => 'checkid_setup', - 'ns' => OPENID2_NS, - 'realm' => 'http://example.com/realm', - 'ns.ax' => AXMessage::NS_URI, - 'ax.update_url' => 'http://example.com/realm/update_path', - 'ax.mode' => 'fetch_request' - }) + "mode" => "checkid_setup", + "ns" => OPENID2_NS, + "realm" => "http://example.com/realm", + "ns.ax" => AXMessage::NS_URI, + "ax.update_url" => "http://example.com/realm/update_path", + "ax.mode" => "fetch_request", + }) openid_req = Server::OpenIDRequest.new openid_req.message = openid_req_msg fr = FetchRequest.from_openid_request(openid_req) - assert(fr.is_a?(FetchRequest)) + + assert_kind_of(FetchRequest, fr) end def test_openid_update_url_verification_success_return_to openid_req_msg = Message.from_openid_args({ - 'mode' => 'checkid_setup', - 'ns' => OPENID2_NS, - 'return_to' => 'http://example.com/realm', - 'ns.ax' => AXMessage::NS_URI, - 'ax.update_url' => 'http://example.com/realm/update_path', - 'ax.mode' => 'fetch_request' - }) + "mode" => "checkid_setup", + "ns" => OPENID2_NS, + "return_to" => "http://example.com/realm", + "ns.ax" => AXMessage::NS_URI, + "ax.update_url" => "http://example.com/realm/update_path", + "ax.mode" => "fetch_request", + }) openid_req = Server::OpenIDRequest.new openid_req.message = openid_req_msg fr = FetchRequest.from_openid_request(openid_req) - assert(fr.is_a?(FetchRequest)) + + assert_kind_of(FetchRequest, fr) end def test_add_extension openid_req_msg = Message.from_openid_args({ - 'mode' => 'checkid_setup', - 'ns' => OPENID2_NS, - 'return_to' => 'http://example.com/realm' - }) + "mode" => "checkid_setup", + "ns" => OPENID2_NS, + "return_to" => "http://example.com/realm", + }) e = OpenID::OpenIDServiceEndpoint.new openid_req = Consumer::CheckIDRequest.new(nil, e) openid_req.message = openid_req_msg fr = FetchRequest.new - fr.add(AttrInfo.new('urn:bogus')) + fr.add(AttrInfo.new("urn:bogus")) openid_req.add_extension(fr) expected = { - 'mode' => 'fetch_request', - 'if_available' => 'ext0', - 'type.ext0' => 'urn:bogus' + "mode" => "fetch_request", + "if_available" => "ext0", + "type.ext0" => "urn:bogus", } expected.each do |k, v| - assert(openid_req.message.get_arg(AXMessage::NS_URI, k) == v) + assert_equal(openid_req.message.get_arg(AXMessage::NS_URI, k), v) end end end @@ -480,57 +526,61 @@ def test_add_extension class FetchResponseTest < Minitest::Test def setup @msg = FetchResponse.new - @value_a = 'commodity' - @value_a1 = 'value2' - @type_a = 'http://blood.transfusion/' - @name_a = 'george' - @request_update_url = 'http://some.url.that.is.awesome/' + @value_a = "commodity" + @value_a1 = "value2" + @type_a = "http://blood.transfusion/" + @name_a = "george" + @request_update_url = "http://some.url.that.is.awesome/" end def test_construct assert_nil(@msg.update_url) - assert_equal({}, @msg.data) + assert_empty(@msg.data) end def test_get_extension_args_empty eargs = { - 'mode' => 'fetch_response' + "mode" => "fetch_response", } + assert_equal(eargs, @msg.get_extension_args) end def test_get_extension_args_empty_request eargs = { - 'mode' => 'fetch_response' + "mode" => "fetch_response", } req = FetchRequest.new + assert_equal(eargs, @msg.get_extension_args(req)) end def test_get_extension_args_empty_request_some - uri = 'http://not.found/' - name = 'ext0' + uri = "http://not.found/" + name = "ext0" eargs = { - 'mode' => 'fetch_response', - 'type.' + name => uri, - 'count.' + name => '0' + "mode" => "fetch_response", + "type." + name => uri, + "count." + name => "0", } req = FetchRequest.new req.add(AttrInfo.new(uri)) + assert_equal(eargs, @msg.get_extension_args(req)) end def test_update_url_in_response - uri = 'http://not.found/' - name = 'ext0' + uri = "http://not.found/" + name = "ext0" eargs = { - 'mode' => 'fetch_response', - 'update_url' => @request_update_url, - 'type.' + name => uri, - 'count.' + name => '0' + "mode" => "fetch_response", + "update_url" => @request_update_url, + "type." + name => uri, + "count." + name => "0", } req = FetchRequest.new(@request_update_url) req.add(AttrInfo.new(uri)) + assert_equal(eargs, @msg.get_extension_args(req)) end @@ -538,13 +588,14 @@ def test_get_extension_args_single_value_response # Single values do NOT have a count, and # do not use the array extension eargs = { - 'mode' => 'fetch_response', - 'type.' + @name_a => @type_a, - 'value.' + @name_a => @value_a + "mode" => "fetch_response", + "type." + @name_a => @type_a, + "value." + @name_a => @value_a, } req = FetchRequest.new req.add(AttrInfo.new(@type_a, @name_a)) @msg.add_value(@type_a, @value_a) + assert_equal(eargs, @msg.get_extension_args(req)) end @@ -552,11 +603,11 @@ def test_get_extension_args_array_value_response # Multiple array values add the count, and array index # to each value eargs = { - 'mode' => 'fetch_response', - 'type.' + @name_a => @type_a, - 'value.' + @name_a + '.1' => @value_a, - 'value.' + @name_a + '.2' => @value_a1, - 'count.' + @name_a => '2' + "mode" => "fetch_response", + "type." + @name_a => @type_a, + "value." + @name_a + ".1" => @value_a, + "value." + @name_a + ".2" => @value_a1, + "count." + @name_a => "2", } req = FetchRequest.new # Specify that this URI should have a count of 2 @@ -564,6 +615,7 @@ def test_get_extension_args_array_value_response # Push both values onto the array @msg.add_value(@type_a, @value_a) @msg.add_value(@type_a, @value_a1) + assert_equal(eargs, @msg.get_extension_args(req)) end @@ -575,6 +627,7 @@ def test_get_extension_args_some_not_request def test_get_single_success @msg.add_value(@type_a, @value_a) + assert_equal(@value_a, @msg.get_single(@type_a)) end @@ -588,20 +641,20 @@ def test_get_single_extra end def test_from_unsigned_success_response - uri = 'http://under.the.sea/' - name = 'ext0' - value = 'snarfblat' + uri = "http://under.the.sea/" + name = "ext0" + value = "snarfblat" m = OpenID::Message.from_openid_args({ - 'mode' => 'id_res', - 'ns' => OPENID2_NS, - 'ns.ax' => AXMessage::NS_URI, - 'ax.update_url' => 'http://example.com/realm/update_path', - 'ax.mode' => 'fetch_response', - 'ax.type.' + name => uri, - 'ax.count.' + name => '1', - 'ax.value.' + name + '.1' => value - }) + "mode" => "id_res", + "ns" => OPENID2_NS, + "ns.ax" => AXMessage::NS_URI, + "ax.update_url" => "http://example.com/realm/update_path", + "ax.mode" => "fetch_response", + "ax.type." + name => uri, + "ax.count." + name => "1", + "ax.value." + name + ".1" => value, + }) e = OpenID::OpenIDServiceEndpoint.new resp = OpenID::Consumer::SuccessResponse.new(e, m, []) @@ -609,22 +662,23 @@ def test_from_unsigned_success_response ax_resp = FetchResponse.from_success_response(resp, false) values = ax_resp[uri] + assert_equal(values, [value]) end def test_from_signed_success_response - uri = 'http://under.the.sea/' - name = 'ext0' - value = 'snarfblat' + uri = "http://under.the.sea/" + name = "ext0" + value = "snarfblat" oid_fields = { - 'mode' => 'id_res', - 'ns' => OPENID2_NS, - 'ns.ax' => AXMessage::NS_URI, - 'ax.update_url' => 'http://example.com/realm/update_path', - 'ax.mode' => 'fetch_response', - 'ax.type.' + name => uri, - 'ax.count.' + name => '1', - 'ax.value.' + name + '.1' => value + "mode" => "id_res", + "ns" => OPENID2_NS, + "ns.ax" => AXMessage::NS_URI, + "ax.update_url" => "http://example.com/realm/update_path", + "ax.mode" => "fetch_response", + "ax.type." + name => uri, + "ax.count." + name => "1", + "ax.value." + name + ".1" => value, } signed_fields = oid_fields.keys.map { |f| "openid.#{f}" } @@ -635,77 +689,81 @@ def test_from_signed_success_response ax_resp = FetchResponse.from_success_response(resp, true) values = ax_resp[uri] + assert_equal(values, [value]) end def test_from_signed_success_response_with_unsigned_attributes - uri = 'http://under.the.sea/' - name = 'ext0' - value = 'snarfblat' + uri = "http://under.the.sea/" + name = "ext0" + value = "snarfblat" m = OpenID::Message.from_openid_args({ - 'mode' => 'id_res', - 'ns' => OPENID2_NS, - 'ns.ax' => AXMessage::NS_URI, - 'ax.update_url' => 'http://example.com/realm/update_path', - 'ax.mode' => 'fetch_response', - 'ax.type.' + name => uri, - 'ax.count.' + name => '1', - 'ax.value.' + name + '.1' => value - }) + "mode" => "id_res", + "ns" => OPENID2_NS, + "ns.ax" => AXMessage::NS_URI, + "ax.update_url" => "http://example.com/realm/update_path", + "ax.mode" => "fetch_response", + "ax.type." + name => uri, + "ax.count." + name => "1", + "ax.value." + name + ".1" => value, + }) e = OpenID::OpenIDServiceEndpoint.new resp = OpenID::Consumer::SuccessResponse.new(e, m, []) - assert_nil FetchResponse.from_success_response(resp, true) + assert_nil(FetchResponse.from_success_response(resp, true)) end def test_from_empty_success_response e = OpenID::OpenIDServiceEndpoint.new - m = OpenID::Message.from_openid_args({ 'mode' => 'id_res' }) + m = OpenID::Message.from_openid_args({"mode" => "id_res"}) resp = OpenID::Consumer::SuccessResponse.new(e, m, []) ax_resp = FetchResponse.from_success_response(resp) - assert(ax_resp.nil?) + + assert_nil(ax_resp) end end class StoreRequestTest < Minitest::Test def setup @msg = StoreRequest.new - @type_a = 'http://oranges.are.for/' - @name_a = 'juggling' + @type_a = "http://oranges.are.for/" + @name_a = "juggling" end def test_construct - assert_equal({}, @msg.data) + assert_empty(@msg.data) end def test_get_extension_args_empty eargs = { - 'mode' => 'store_request' + "mode" => "store_request", } + assert_equal(eargs, @msg.get_extension_args) end def test_from_openid_request_wrong_ax_mode - uri = 'http://under.the.sea/' - name = 'ext0' - value = 'snarfblat' + uri = "http://under.the.sea/" + name = "ext0" + value = "snarfblat" message = OpenID::Message.from_openid_args({ - 'mode' => 'id_res', - 'ns' => OPENID2_NS, - 'ns.ax' => AXMessage::NS_URI, - 'ax.update_url' => 'http://example.com/realm/update_path', - 'ax.mode' => 'fetch_request', - 'ax.type.' + name => uri, - 'ax.count.' + name => '1', - 'ax.value.' + name + '.1' => value - }) + "mode" => "id_res", + "ns" => OPENID2_NS, + "ns.ax" => AXMessage::NS_URI, + "ax.update_url" => "http://example.com/realm/update_path", + "ax.mode" => "fetch_request", + "ax.type." + name => uri, + "ax.count." + name => "1", + "ax.value." + name + ".1" => value, + }) openid_req = Server::OpenIDRequest.new openid_req.message = message ax_req = StoreRequest.from_openid_request(openid_req) - assert(ax_req.nil?) + + assert_nil(ax_req) end def test_get_extension_args_nonempty @@ -713,12 +771,13 @@ def test_get_extension_args_nonempty aliases = NamespaceMap.new aliases.add_alias(@type_a, @name_a) eargs = { - 'mode' => 'store_request', - 'type.' + @name_a => @type_a, - 'value.' + @name_a + '.1' => 'foo', - 'value.' + @name_a + '.2' => 'bar', - 'count.' + @name_a => '2' + "mode" => "store_request", + "type." + @name_a => @type_a, + "value." + @name_a + ".1" => "foo", + "value." + @name_a + ".2" => "bar", + "count." + @name_a => "2", } + assert_equal(eargs, @msg.get_extension_args(aliases)) end end @@ -726,27 +785,36 @@ def test_get_extension_args_nonempty class StoreResponseTest < Minitest::Test def test_success msg = StoreResponse.new - assert(msg.succeeded?) + + assert_predicate(msg, :succeeded?) assert(!msg.error_message) - assert_equal({ 'mode' => 'store_response_success' }, - msg.get_extension_args) + assert_equal( + {"mode" => "store_response_success"}, + msg.get_extension_args, + ) end def test_fail_nomsg msg = StoreResponse.new(false) + assert(!msg.succeeded?) assert(!msg.error_message) - assert_equal({ 'mode' => 'store_response_failure' }, - msg.get_extension_args) + assert_equal( + {"mode" => "store_response_failure"}, + msg.get_extension_args, + ) end def test_fail_msg - reason = 'because I said so' + reason = "because I said so" msg = StoreResponse.new(false, reason) + assert(!msg.succeeded?) assert_equal(reason, msg.error_message) - assert_equal({ 'mode' => 'store_response_failure', 'error' => reason }, - msg.get_extension_args) + assert_equal( + {"mode" => "store_response_failure", "error" => reason}, + msg.get_extension_args, + ) end end end diff --git a/test/test_checkid_request.rb b/test/test_checkid_request.rb index 3a8ee1c..05f550c 100644 --- a/test/test_checkid_request.rb +++ b/test/test_checkid_request.rb @@ -1,15 +1,18 @@ -require 'minitest/autorun' -require 'openid/consumer/checkid_request' -require 'openid/message' -require 'testutil' -require 'util' +require_relative "test_helper" +require_relative "testutil" +require "openid/consumer/checkid_request" +require "openid/message" +require_relative "util" module OpenID class Consumer class CheckIDRequest class DummyEndpoint - attr_accessor :preferred_namespace, :local_id, :server_url, - :is_op_identifier, :claimed_id + attr_accessor :preferred_namespace, + :local_id, + :server_url, + :is_op_identifier, + :claimed_id def initialize @preferred_namespace = nil @@ -32,34 +35,37 @@ module CheckIDTestMixin def setup @endpoint = DummyEndpoint.new - @endpoint.local_id = 'http://server.unittest/joe' - @endpoint.claimed_id = 'http://joe.vanity.example/' - @endpoint.server_url = 'http://server.unittest/' + @endpoint.local_id = "http://server.unittest/joe" + @endpoint.claimed_id = "http://joe.vanity.example/" + @endpoint.server_url = "http://server.unittest/" @endpoint.preferred_namespace = preferred_namespace - @realm = 'http://example/' - @return_to = 'http://example/return/' + @realm = "http://example/" + @return_to = "http://example/return/" @assoc = GoodAssoc.new @checkid_req = CheckIDRequest.new(@assoc, @endpoint) end def assert_has_identifiers(msg, local_id, claimed_id) - assert_openid_value_equal(msg, 'identity', local_id) - assert_openid_value_equal(msg, 'claimed_id', claimed_id) + assert_openid_value_equal(msg, "identity", local_id) + assert_openid_value_equal(msg, "claimed_id", claimed_id) end def assert_openid_key_exists(msg, key) - assert(msg.get_arg(OPENID_NS, key), - "#{key} not present in #{msg.get_args(OPENID_NS).inspect}") + assert( + msg.get_arg(OPENID_NS, key), + "#{key} not present in #{msg.get_args(OPENID_NS).inspect}", + ) end def assert_openid_key_absent(msg, key) - assert(msg.get_arg(OPENID_NS, key).nil?) + assert_nil(msg.get_arg(OPENID_NS, key)) end def assert_openid_value_equal(msg, key, expected) actual = msg.get_arg(OPENID_NS, key, NO_DEFAULT) - error_text = "Expected #{expected.inspect} for openid.#{key} "\ - "but got #{actual.inspect}: #{msg.inspect}" + error_text = "Expected #{expected.inspect} for openid.#{key} " \ + "but got #{actual.inspect}: #{msg.inspect}" + assert_equal(expected, actual, error_text) end @@ -71,11 +77,14 @@ def assert_anonymous(msg) def assert_has_required_fields(msg) internal_message = @checkid_req.instance_variable_get(:@message) - assert_equal(preferred_namespace, - internal_message.get_openid_namespace) + + assert_equal( + preferred_namespace, + internal_message.get_openid_namespace, + ) assert_equal(preferred_namespace, msg.get_openid_namespace) - assert_openid_value_equal(msg, 'mode', expected_mode) + assert_openid_value_equal(msg, "mode", expected_mode) # Implement these in subclasses because they depend on # protocol differences! @@ -86,21 +95,24 @@ def assert_has_required_fields(msg) # TESTS def test_check_no_assoc_handle - @checkid_req.instance_variable_set('@assoc', nil) - msg = assert_log_matches('Generated checkid') do + @checkid_req.instance_variable_set(:@assoc, nil) + msg = assert_log_matches("Generated checkid") do @checkid_req.get_message(@realm, @return_to, immediate) end - assert_openid_key_absent(msg, 'assoc_handle') + assert_openid_key_absent(msg, "assoc_handle") end def test_add_extension_arg - @checkid_req.add_extension_arg('bag:', 'color', 'brown') - @checkid_req.add_extension_arg('bag:', 'material', 'paper') - assert(@checkid_req.message.namespaces.member?('bag:')) - assert_equal(@checkid_req.message.get_args('bag:'), - { 'color' => 'brown', 'material' => 'paper' }) + @checkid_req.add_extension_arg("bag:", "color", "brown") + @checkid_req.add_extension_arg("bag:", "material", "paper") - msg = assert_log_matches('Generated checkid') do + assert(@checkid_req.message.namespaces.member?("bag:")) + assert_equal( + {"color" => "brown", "material" => "paper"}, + @checkid_req.message.get_args("bag:"), + ) + + msg = assert_log_matches("Generated checkid") do @checkid_req.get_message(@realm, @return_to, immediate) end @@ -108,12 +120,13 @@ def test_add_extension_arg # namespaces. Really it doesn't care that it has alias "0", # but that is tested anyway post_args = msg.to_post_args - assert_equal('brown', post_args['openid.ext0.color']) - assert_equal('paper', post_args['openid.ext0.material']) + + assert_equal("brown", post_args["openid.ext0.color"]) + assert_equal("paper", post_args["openid.ext0.material"]) end def test_standard - msg = assert_log_matches('Generated checkid') do + msg = assert_log_matches("Generated checkid") do @checkid_req.get_message(@realm, @return_to, immediate) end assert_has_identifiers(msg, @endpoint.local_id, @endpoint.claimed_id) @@ -122,14 +135,17 @@ def test_standard def test_send_redirect? silence_logging do url = @checkid_req.redirect_url(@realm, @return_to, immediate) - assert(url.length < OPENID1_URL_LIMIT) + + assert_operator(url.length, :<, OPENID1_URL_LIMIT) assert(@checkid_req.send_redirect?(@realm, @return_to, immediate)) - @return_to << '/foo' * 1000 + @return_to << "/foo" * 1000 url = @checkid_req.redirect_url(@realm, @return_to, immediate) - assert(url.length > OPENID1_URL_LIMIT) + + assert_operator(url.length, :>, OPENID1_URL_LIMIT) actual = @checkid_req.send_redirect?(@realm, @return_to, immediate) expected = preferred_namespace != OPENID2_NS + assert_equal(expected, actual) end end @@ -143,7 +159,7 @@ def immediate end def expected_mode - 'checkid_setup' + "checkid_setup" end def preferred_namespace @@ -153,13 +169,13 @@ def preferred_namespace # check presence of proper realm key and absence of the wrong # one. def assert_has_realm(msg) - assert_openid_value_equal(msg, 'realm', @realm) - assert_openid_key_absent(msg, 'trust_root') + assert_openid_value_equal(msg, "realm", @realm) + assert_openid_key_absent(msg, "trust_root") end def assert_identifiers_present(msg) - identity_present = msg.has_key?(OPENID_NS, 'identity') - claimed_present = msg.has_key?(OPENID_NS, 'claimed_id') + identity_present = msg.has_key?(OPENID_NS, "identity") + claimed_present = msg.has_key?(OPENID_NS, "claimed_id") assert_equal(claimed_present, identity_present) end @@ -173,7 +189,7 @@ def test_set_anonymous_works_for_openid2 def test_user_anonymous_ignores_identfier @checkid_req.anonymous = true - msg = assert_log_matches('Generated checkid') do + msg = assert_log_matches("Generated checkid") do @checkid_req.get_message(@realm, @return_to, immediate) end assert_has_required_fields(msg) @@ -183,7 +199,7 @@ def test_user_anonymous_ignores_identfier def test_op_anonymous_ignores_identifier @endpoint.is_op_identifier = true @checkid_req.anonymous = true - msg = assert_log_matches('Generated checkid') do + msg = assert_log_matches("Generated checkid") do @checkid_req.get_message(@realm, @return_to, immediate) end assert_has_required_fields(msg) @@ -192,7 +208,7 @@ def test_op_anonymous_ignores_identifier def test_op_identifier_sends_identifier_select @endpoint.is_op_identifier = true - msg = assert_log_matches('Generated checkid') do + msg = assert_log_matches("Generated checkid") do @checkid_req.get_message(@realm, @return_to, immediate) end assert_has_required_fields(msg) @@ -200,10 +216,10 @@ def test_op_identifier_sends_identifier_select end def test_no_assoc_handle - msg = assert_log_matches('Generated checkid') do + msg = assert_log_matches("Generated checkid") do @checkid_req.get_message(@realm, @return_to, immediate) end - assert_openid_key_absent(msg, 'assoc_handle') + assert_openid_key_absent(msg, "assoc_handle") end end @@ -219,25 +235,25 @@ def preferred_namespace end def expected_mode - 'checkid_setup' + "checkid_setup" end # Make sure claimed_is is *absent* in request. def assert_has_identifiers(msg, op_specific_id, _claimed_id) - assert_openid_value_equal(msg, 'identity', op_specific_id) - assert_openid_key_absent(msg, 'claimed_id') + assert_openid_value_equal(msg, "identity", op_specific_id) + assert_openid_key_absent(msg, "claimed_id") end def assert_identifiers_present(msg) - assert_openid_key_absent(msg, 'claimed_id') - assert(msg.has_key?(OPENID_NS, 'identity')) + assert_openid_key_absent(msg, "claimed_id") + assert(msg.has_key?(OPENID_NS, "identity")) end # check presence of proper realm key and absence of the wrong # one. def assert_has_realm(msg) - assert_openid_value_equal(msg, 'trust_root', @realm) - assert_openid_key_absent(msg, 'realm') + assert_openid_value_equal(msg, "trust_root", @realm) + assert_openid_key_absent(msg, "realm") end # TESTS @@ -257,12 +273,14 @@ def test_set_anonymous_fails_for_openid1 # identifier_select just like OpenID 2. def test_identifier_select @endpoint.is_op_identifier = true - msg = assert_log_matches('Generated checkid') do + msg = assert_log_matches("Generated checkid") do @checkid_req.get_message(@realm, @return_to, immediate) end assert_has_required_fields(msg) - assert_equal(IDENTIFIER_SELECT, - msg.get_arg(OPENID1_NS, 'identity')) + assert_equal( + IDENTIFIER_SELECT, + msg.get_arg(OPENID1_NS, "identity"), + ) end end @@ -272,7 +290,7 @@ def immediate end def expected_mode - 'checkid_immediate' + "checkid_immediate" end end @@ -282,7 +300,7 @@ def immediate end def expected_mode - 'checkid_immediate' + "checkid_immediate" end end end diff --git a/test/test_consumer.rb b/test/test_consumer.rb index e587cf5..5099bfb 100644 --- a/test/test_consumer.rb +++ b/test/test_consumer.rb @@ -1,6 +1,6 @@ -require 'minitest/autorun' -require 'testutil' -require 'openid/consumer' +require_relative "test_helper" +require_relative "testutil" +require "openid/consumer" module OpenID class Consumer @@ -11,22 +11,29 @@ def test_set_get consumer = Consumer.new(session, nil) consumer.send(:last_requested_endpoint=, :endpoint) ep = consumer.send(:last_requested_endpoint) + assert_equal(:endpoint, ep) ep = consumer.send(:last_requested_endpoint) + assert_equal(:endpoint, ep) consumer.send(:cleanup_last_requested_endpoint) ep = consumer.send(:last_requested_endpoint) + assert_nil(ep) end end class TestBegin < Minitest::Test - attr_accessor :user_input, :anonymous, :services, - :discovered_identifier, :checkid_request, :service + attr_accessor :user_input, + :anonymous, + :services, + :discovered_identifier, + :checkid_request, + :service def setup - @discovered_identifier = 'http://discovered/' - @user_input = 'user.input' + @discovered_identifier = "http://discovered/" + @user_input = "user.input" @service = :service @services = [@service] @session = {} @@ -52,9 +59,13 @@ def consumer def test_begin checkid_request = consumer.begin(@user_input, @anonymous) + assert_equal(:checkid_request, checkid_request) - assert_equal(['OpenID::Consumer::DiscoveredServices::'\ - 'OpenID::Consumer::'], @session.keys.sort!) + assert_equal( + ["OpenID::Consumer::DiscoveredServices::" \ + "OpenID::Consumer::"], + @session.keys.sort!, + ) end def test_begin_failure @@ -85,7 +96,7 @@ def setup @session = {} @assoc = :assoc @service = OpenIDServiceEndpoint.new - @claimed_id = 'http://claimed.id/' + @claimed_id = "http://claimed.id/" @service.claimed_id = @claimed_id @anonymous = false end @@ -108,7 +119,8 @@ def consumer def call_begin_without_discovery result = consumer.begin_without_discovery(@service, @anonymous) - assert(result.instance_of?(CheckIDRequest)) + + assert_instance_of(CheckIDRequest, result) assert_equal(@anonymous, result.anonymous) assert_equal(@service, consumer.send(:last_requested_endpoint)) assert_equal(result.instance_variable_get(:@assoc), @assoc) @@ -127,8 +139,10 @@ def test_begin_without_openid1 result = call_begin_without_discovery assert_equal(@claimed_id, result.return_to_args[cid_name]) - assert_equal([cid_name, nonce_name].sort!, - result.return_to_args.keys.sort!) + assert_equal( + [cid_name, nonce_name].sort!, + result.return_to_args.keys.sort!, + ) end def test_begin_without_openid1_anonymous @@ -142,7 +156,7 @@ def test_begin_without_openid2 @service.type_uris = [OPENID_2_0_TYPE] result = call_begin_without_discovery - assert(result.return_to_args.empty?) + assert_empty(result.return_to_args) end def test_begin_without_openid2_anonymous @@ -150,7 +164,7 @@ def test_begin_without_openid2_anonymous @service.type_uris = [OPENID_2_0_TYPE] result = call_begin_without_discovery - assert(result.return_to_args.empty?) + assert_empty(result.return_to_args) end end @@ -161,60 +175,73 @@ def setup end def test_bad_mode - response = @consumer.complete({ 'openid.ns' => OPENID2_NS, - 'openid.mode' => 'bad' }, nil) + response = @consumer.complete( + { + "openid.ns" => OPENID2_NS, + "openid.mode" => "bad", + }, + nil, + ) + assert_equal(FAILURE, response.status) end def test_missing_mode - response = @consumer.complete({ 'openid.ns' => OPENID2_NS }, nil) + response = @consumer.complete({"openid.ns" => OPENID2_NS}, nil) + assert_equal(FAILURE, response.status) end def test_cancel - response = @consumer.complete({ 'openid.mode' => 'cancel' }, nil) + response = @consumer.complete({"openid.mode" => "cancel"}, nil) + assert_equal(CANCEL, response.status) end def test_setup_needed_openid1 - response = @consumer.complete({ 'openid.mode' => 'setup_needed' }, nil) + response = @consumer.complete({"openid.mode" => "setup_needed"}, nil) + assert_equal(FAILURE, response.status) end def test_setup_needed_openid2 - setup_url = 'http://setup.url/' - args = { 'openid.ns' => OPENID2_NS, 'openid.mode' => 'setup_needed', 'openid.user_setup_url' => setup_url } + setup_url = "http://setup.url/" + args = {"openid.ns" => OPENID2_NS, "openid.mode" => "setup_needed", "openid.user_setup_url" => setup_url} response = @consumer.complete(args, nil) + assert_equal(SETUP_NEEDED, response.status) assert_equal(setup_url, response.setup_url) end def test_idres_setup_needed_openid1 - setup_url = 'http://setup.url/' + setup_url = "http://setup.url/" args = { - 'openid.user_setup_url' => setup_url, - 'openid.mode' => 'id_res' + "openid.user_setup_url" => setup_url, + "openid.mode" => "id_res", } response = @consumer.complete(args, nil) + assert_equal(SETUP_NEEDED, response.status) assert_equal(setup_url, response.setup_url) end def test_error - contact = 'me' - reference = 'thing thing' + contact = "me" + reference = "thing thing" args = { - 'openid.mode' => 'error', - 'openid.contact' => contact, - 'openid.reference' => reference + "openid.mode" => "error", + "openid.contact" => contact, + "openid.reference" => reference, } response = @consumer.complete(args, nil) + assert_equal(FAILURE, response.status) assert_equal(contact, response.contact) assert_equal(reference, response.reference) - args['openid.ns'] = OPENID2_NS + args["openid.ns"] = OPENID2_NS response = @consumer.complete(args, nil) + assert_equal(FAILURE, response.status) assert_equal(contact, response.contact) assert_equal(reference, response.reference) @@ -222,7 +249,7 @@ def test_error def test_idres_openid1 args = { - 'openid.mode' => 'id_res' + "openid.mode" => "id_res", } endpoint = OpenIDServiceEndpoint.new @@ -242,15 +269,17 @@ def test_idres_openid1 end response = @consumer.complete(args, :test_return_to) + assert_equal(SUCCESS, response.status, response.message) assert_equal(:test_claimed_id, response.identity_url) assert_equal(endpoint, response.endpoint) - error_message = 'In Soviet Russia, id_res handles you!' + error_message = "In Soviet Russia, id_res handles you!" @consumer.instance_def(:handle_idres) do |_message, _return_to| raise ProtocolError, error_message end response = @consumer.complete(args, :test_return_to) + assert_equal(FAILURE, response.status) assert_equal(error_message, response.message) end diff --git a/test/test_cryptutil.rb b/test/test_cryptutil.rb index 0857449..dc7da7c 100644 --- a/test/test_cryptutil.rb +++ b/test/test_cryptutil.rb @@ -1,22 +1,23 @@ -# coding: ASCII-8BIT +# coding: ascii-8bit -require 'minitest/autorun' -require 'openid/cryptutil' -require 'pathname' +require_relative "test_helper" +require "openid/cryptutil" +require "pathname" class CryptUtilTestCase < Minitest::Test BIG = 2**256 def test_rand # If this is not true, the rest of our test won't work - assert(BIG.is_a?(Integer)) + assert_kind_of(Integer, BIG) # It's possible that these will be small enough for fixnums, but # extraorindarily unlikely. a = OpenID::CryptUtil.rand(BIG) b = OpenID::CryptUtil.rand(BIG) - assert(a.is_a?(Integer)) - assert(b.is_a?(Integer)) + + assert_kind_of(Integer, a) + assert_kind_of(Integer, b) refute_equal(a, b) end @@ -25,15 +26,18 @@ def test_rand_doesnt_depend_on_srand a = OpenID::CryptUtil.rand(BIG) Kernel.srand(1) b = OpenID::CryptUtil.rand(BIG) + refute_equal(a, b) end def test_random_binary_convert 501.times do n = (0..10).inject(0) { |sum, _element| sum + OpenID::CryptUtil.rand(BIG) } - s = OpenID::CryptUtil.num_to_binary n - assert(s.is_a?(String)) + s = OpenID::CryptUtil.num_to_binary(n) + + assert_kind_of(String, s) n_converted_back = OpenID::CryptUtil.binary_to_num(s) + assert_equal(n, n_converted_back) end end @@ -47,10 +51,11 @@ def test_enumerated_binary_convert "\x00\x80" => 128, "\x00\x81" => 129, "\x00\x80\x00" => 32_768, - 'OpenID is cool' => 1_611_215_304_203_901_150_134_421_257_416_556 + "OpenID is cool" => 1_611_215_304_203_901_150_134_421_257_416_556, }.each do |str, num| num_prime = OpenID::CryptUtil.binary_to_num(str) str_prime = OpenID::CryptUtil.num_to_binary(num) + assert_equal(num, num_prime) assert_equal(str, str_prime) end @@ -58,7 +63,7 @@ def test_enumerated_binary_convert def with_n2b64 test_dir = Pathname.new(__FILE__).dirname - filename = test_dir.join('data', 'n2b64') + filename = test_dir.join("data", "n2b64") File.open(filename) do |file| file.each_line do |line| base64, base10 = line.chomp.split @@ -87,34 +92,45 @@ def test_num_to_base64 def test_randomstring s1 = OpenID::CryptUtil.random_string(42) + assert_equal(42, s1.length) s2 = OpenID::CryptUtil.random_string(42) + assert_equal(42, s2.length) refute_equal(s1, s2) end def test_randomstring_population - s1 = OpenID::CryptUtil.random_string(42, 'XO') + s1 = OpenID::CryptUtil.random_string(42, "XO") + assert_match(/[XO]{42}/, s1) end def test_sha1 - assert_equal("\x11\xf6\xad\x8e\xc5*)\x84\xab\xaa\xfd|;Qe\x03x\\ r", - OpenID::CryptUtil.sha1('x')) + assert_equal( + "\x11\xf6\xad\x8e\xc5*)\x84\xab\xaa\xfd|;Qe\x03x\\ r", + OpenID::CryptUtil.sha1("x"), + ) end def test_hmac_sha1 - assert_equal("\x8bo\xf7O\xa7\x18*\x90\xac ah\x16\xf7\xb8\x81JB\x9f|", - OpenID::CryptUtil.hmac_sha1('x', 'x')) + assert_equal( + "\x8bo\xf7O\xa7\x18*\x90\xac ah\x16\xf7\xb8\x81JB\x9f|", + OpenID::CryptUtil.hmac_sha1("x", "x"), + ) end def test_sha256 - assert_equal("-q\x16B\xb7&\xb0D\x01b|\xa9\xfb\xac2\xf5\xc8S\x0f\xb1\x90<\xc4\xdb\x02%\x87\x17\x92\x1aH\x81", - OpenID::CryptUtil.sha256('x')) + assert_equal( + "-q\x16B\xb7&\xb0D\x01b|\xa9\xfb\xac2\xf5\xc8S\x0f\xb1\x90<\xc4\xdb\x02%\x87\x17\x92\x1aH\x81", + OpenID::CryptUtil.sha256("x"), + ) end def test_hmac_sha256 - assert_equal("\x94{\xd2w\xb2\xd3\\\xfc\x07\xfb\xc7\xe3b\xf2iuXz1\xf8:}\xffx\x8f\xda\xc1\xfaC\xc4\xb2\x87", - OpenID::CryptUtil.hmac_sha256('x', 'x')) + assert_equal( + "\x94{\xd2w\xb2\xd3\\\xfc\x07\xfb\xc7\xe3b\xf2iuXz1\xf8:}\xffx\x8f\xda\xc1\xfaC\xc4\xb2\x87", + OpenID::CryptUtil.hmac_sha256("x", "x"), + ) end end diff --git a/test/test_dh.rb b/test/test_dh.rb index 8a33070..513e3b8 100644 --- a/test/test_dh.rb +++ b/test/test_dh.rb @@ -1,6 +1,6 @@ -require 'minitest/autorun' -require 'testutil' -require 'openid/dh' +require_relative "test_helper" +require_relative "testutil" +require "openid/dh" module OpenID class DiffieHellmanExposed < OpenID::DiffieHellman @@ -17,26 +17,27 @@ class DiffieHellmanTestCase < Minitest::Test def test_strxor_success [ # input 1 input 2 expected [NUL, NUL, NUL], - ["\x01", NUL, "\x01"], - ['a', 'a', NUL], - ['a', NUL, 'a'], - ['abc', NUL * 3, 'abc'], - ['x' * 10, NUL * 10, 'x' * 10], - ["\x01", "\x02", "\x03"], - ["\xf0", "\x0f", "\xff"], - ["\xff", "\x0f", "\xf0"] + ["\x01", NUL, "\x01"], + ["a", "a", NUL], + ["a", NUL, "a"], + ["abc", NUL * 3, "abc"], + ["x" * 10, NUL * 10, "x" * 10], + ["\x01", "\x02", "\x03"], + ["\xf0", "\x0f", "\xff"], + ["\xff", "\x0f", "\xf0"], ].each do |input1, input2, expected| actual = DiffieHellmanExposed.strxor_for_testing(input1, input2) - assert_equal(expected.force_encoding('UTF-8'), actual.force_encoding('UTF-8')) + + assert_equal(expected.force_encoding("UTF-8"), actual.force_encoding("UTF-8")) end end def test_strxor_failure [ - ['', 'a'], + ["", "a"], %w[foo ba], [NUL * 3, NUL * 4], - [255, 127].map { |h| (0..h).map { |i| i.chr }.join('') } + [255, 127].map { |h| (0..h).map { |i| i.chr }.join("") }, ].each do |aa, bb| assert_raises(ArgumentError) do DiffieHellmanExposed.strxor(aa, bb) @@ -49,6 +50,7 @@ def test_simple_exchange dh2 = DiffieHellman.from_defaults secret1 = dh1.get_shared_secret(dh2.public) secret2 = dh2.get_shared_secret(dh1.public) + assert_equal(secret1, secret2) end @@ -56,8 +58,9 @@ def test_xor_secret dh1 = DiffieHellman.from_defaults dh2 = DiffieHellman.from_defaults secret = "Shhhhhh! don't tell!" - encrypted = dh1.xor_secret((CryptUtil.method :sha1), dh2.public, secret) - decrypted = dh2.xor_secret((CryptUtil.method :sha1), dh1.public, encrypted) + encrypted = dh1.xor_secret(CryptUtil.method(:sha1), dh2.public, secret) + decrypted = dh2.xor_secret(CryptUtil.method(:sha1), dh1.public, encrypted) + assert_equal(secret, decrypted) end @@ -69,17 +72,20 @@ def set_private_test(priv) end end - read_data_file('dh.txt', true).each do |line| - priv, pub = line.split(' ').map { |x| x.to_i } + read_data_file("dh.txt", true).each do |line| + priv, pub = line.split(" ").map { |x| x.to_i } dh.set_private_test(priv) + assert_equal(dh.public, pub) end end def test_using_defaults dh = DiffieHellman.from_defaults - assert(dh.using_default_values?) + + assert_predicate(dh, :using_default_values?) dh = DiffieHellman.new(3, 2_750_161) + assert(!dh.using_default_values?) end end diff --git a/test/test_discover.rb b/test/test_discover.rb index 5c49539..fe91db3 100644 --- a/test/test_discover.rb +++ b/test/test_discover.rb @@ -1,13 +1,13 @@ -require 'minitest/autorun' -require 'testutil' -require 'util' -require 'openid/fetchers' -require 'openid/yadis/discovery' -require 'openid/consumer/discovery' -require 'openid/yadis/xrires' -require 'openid/yadis/xri' -require 'openid/message' -require 'openid/util' +require_relative "test_helper" +require_relative "testutil" +require_relative "util" +require "openid/fetchers" +require "openid/yadis/discovery" +require "openid/consumer/discovery" +require "openid/yadis/xrires" +require "openid/yadis/xri" +require "openid/message" +require "openid/util" ### Tests for conditions that trigger DiscoveryFailure @@ -20,7 +20,8 @@ def initialize(test, responses) def fetch(url, body = nil, _headers = nil, _limit = nil) response = @responses.shift - @test.assert(body.nil?) + + @test.assert_predicate(body, :nil?) @test.assert_equal(response.final_url, url) response end @@ -28,16 +29,22 @@ def fetch(url, body = nil, _headers = nil, _limit = nil) class TestDiscoveryFailure < Minitest::Test def initialize(*args) - super(*args) + super @responses = [ - [HTTPResponse._from_raw_data(nil, nil, {}, 'http://network.error/')], - [HTTPResponse._from_raw_data(404, nil, {}, 'http://not.found/')], - [HTTPResponse._from_raw_data(400, nil, {}, 'http://bad.request/')], - [HTTPResponse._from_raw_data(500, nil, {}, 'http://server.error/')], - [HTTPResponse._from_raw_data(200, nil, { 'x-xrds-location' => 'http://xrds.missing/' }, - 'http://header.found/'), - HTTPResponse._from_raw_data(404, nil, {}, 'http://xrds.missing/')] + [HTTPResponse._from_raw_data(nil, nil, {}, "http://network.error/")], + [HTTPResponse._from_raw_data(404, nil, {}, "http://not.found/")], + [HTTPResponse._from_raw_data(400, nil, {}, "http://bad.request/")], + [HTTPResponse._from_raw_data(500, nil, {}, "http://server.error/")], + [ + HTTPResponse._from_raw_data( + 200, + nil, + {"x-xrds-location" => "http://xrds.missing/"}, + "http://header.found/", + ), + HTTPResponse._from_raw_data(404, nil, {}, "http://xrds.missing/"), + ], ] end @@ -52,7 +59,7 @@ def test_discovery_failure rescue DiscoveryFailure => e assert_equal(e.http_response.code, expected_status) else - flunk('Did not raise DiscoveryFailure') + flunk("Did not raise DiscoveryFailure") end OpenID.fetcher = nil @@ -83,13 +90,13 @@ class TestFetchException < Minitest::Test # Discovery should only raise DiscoveryFailure def initialize(*args) - super(*args) + super @cases = [ DidFetch.new, Exception.new, ArgumentError.new, - RuntimeError.new + RuntimeError.new, ] end @@ -97,7 +104,7 @@ def test_fetch_exception @cases.each do |exc| OpenID.fetcher = ErrorRaisingFetcher.new(exc) assert_raises(DiscoveryFailure) do - OpenID.discover('http://doesnt.matter/') + OpenID.discover("http://doesnt.matter/") end OpenID.fetcher = nil end @@ -112,9 +119,9 @@ def test_addingProtocol OpenID.fetcher = f begin - OpenID.discover('users.stompy.janrain.com:8000/x') + OpenID.discover("users.stompy.janrain.com:8000/x") rescue DiscoveryFailure => e - assert e.to_s.match('Failed to fetch') + assert_match("Failed to fetch", e.to_s) rescue RuntimeError end @@ -137,13 +144,13 @@ def fetch(url, body = nil, headers = nil, _limit = nil) ctype, body = @documents.fetch(url) rescue IndexError status = 404 - ctype = 'text/plain' - body = '' + ctype = "text/plain" + body = "" else status = 200 end - HTTPResponse._from_raw_data(status, body, { 'content-type' => ctype }, final_url) + HTTPResponse._from_raw_data(status, body, {"content-type" => ctype}, final_url) end end @@ -151,18 +158,18 @@ class BaseTestDiscovery < Minitest::Test attr_accessor :id_url, :fetcher_class def initialize(*args) - super(*args) - @id_url = 'http://someuser.unittest/' + super + @id_url = "http://someuser.unittest/" @documents = {} @fetcher_class = DiscoveryMockFetcher end def _checkService(s, server_url, claimed_id = nil, - local_id = nil, canonical_id = nil, - types = nil, used_yadis = false, - display_identifier = nil) + local_id = nil, canonical_id = nil, + types = nil, used_yadis = false, + display_identifier = nil) assert_equal(server_url, s.server_url) - if types == ['2.0 OP'] + if types == ["2.0 OP"] assert(!claimed_id) assert(!local_id) assert(!s.claimed_id) @@ -170,25 +177,29 @@ def _checkService(s, server_url, claimed_id = nil, assert(!s.get_local_id) assert(!s.compatibility_mode) assert(s.is_op_identifier) - assert_equal(s.preferred_namespace, - OPENID_2_0_MESSAGE_NS) + assert_equal( + s.preferred_namespace, + OPENID_2_0_MESSAGE_NS, + ) else assert_equal(claimed_id, s.claimed_id) assert_equal(local_id, s.get_local_id) end if used_yadis - assert(s.used_yadis, 'Expected to use Yadis') + assert(s.used_yadis, "Expected to use Yadis") else - assert(!s.used_yadis, - 'Expected to use old-style discovery') + assert( + !s.used_yadis, + "Expected to use old-style discovery", + ) end openid_types = { - '1.1' => OPENID_1_1_TYPE, - '1.0' => OPENID_1_0_TYPE, - '2.0' => OPENID_2_0_TYPE, - '2.0 OP' => OPENID_IDP_2_0_TYPE + "1.1" => OPENID_1_1_TYPE, + "1.0" => OPENID_1_0_TYPE, + "2.0" => OPENID_2_0_TYPE, + "2.0 OP" => OPENID_IDP_2_0_TYPE, } type_uris = types.collect { |t| openid_types[t] } @@ -228,7 +239,7 @@ class TestDiscovery < BaseTestDiscovery include TestDataMixin def _discover(content_type, data, - expected_services, expected_id = nil) + expected_services, expected_id = nil) expected_id = @id_url if expected_id.nil? @documents[@id_url] = [content_type, data] @@ -241,265 +252,322 @@ def _discover(content_type, data, def test_404 assert_raises(DiscoveryFailure) do - OpenID.discover(@id_url + '/404') + OpenID.discover(@id_url + "/404") end end def test_noOpenID - services = _discover('text/plain', - 'junk', 0) + services = _discover( + "text/plain", + "junk", + 0, + ) services = _discover( - 'text/html', - read_data_file('test_discover/openid_no_delegate.html', false), - 1 + "text/html", + read_data_file("test_discover/openid_no_delegate.html", false), + 1, ) _checkService( services[0], - 'http://www.myopenid.com/server', + "http://www.myopenid.com/server", @id_url, @id_url, nil, - ['1.1'], - false + ["1.1"], + false, ) end def test_malformed_meta_tag - @id_url = 'http://user.myopenid.com/' + @id_url = "http://user.myopenid.com/" services = _discover( - 'text/html', - read_data_file('test_discover/malformed_meta_tag.html', false), - 2 + "text/html", + read_data_file("test_discover/malformed_meta_tag.html", false), + 2, ) _checkService( services[0], - 'http://www.myopenid.com/server', + "http://www.myopenid.com/server", @id_url, @id_url, nil, - ['2.0'], - false + ["2.0"], + false, ) _checkService( services[1], - 'http://www.myopenid.com/server', + "http://www.myopenid.com/server", @id_url, @id_url, nil, - ['1.1'], - false + ["1.1"], + false, ) end def test_html1 - services = _discover('text/html', - read_data_file('test_discover/openid.html', false), - 1) + services = _discover( + "text/html", + read_data_file("test_discover/openid.html", false), + 1, + ) - _checkService(services[0], - 'http://www.myopenid.com/server', - @id_url, - 'http://smoker.myopenid.com/', - nil, - ['1.1'], - false) + _checkService( + services[0], + "http://www.myopenid.com/server", + @id_url, + "http://smoker.myopenid.com/", + nil, + ["1.1"], + false, + ) end def test_html1Fragment # Ensure that the Claimed Identifier does not have a fragment if # one is supplied in the User Input. - content_type = 'text/html' - data = read_data_file('test_discover/openid.html', false) + content_type = "text/html" + data = read_data_file("test_discover/openid.html", false) expected_services = 1 @documents[@id_url] = [content_type, data] expected_id = @id_url - @id_url += '#fragment' + @id_url += "#fragment" id_url, services = OpenID.discover(@id_url) assert_equal(expected_services, services.length) assert_equal(expected_id, id_url) - _checkService(services[0], - 'http://www.myopenid.com/server', - expected_id, - 'http://smoker.myopenid.com/', - nil, - ['1.1'], - false) + _checkService( + services[0], + "http://www.myopenid.com/server", + expected_id, + "http://smoker.myopenid.com/", + nil, + ["1.1"], + false, + ) end def test_html2 - services = _discover('text/html', - read_data_file('test_discover/openid2.html', false), - 1) + services = _discover( + "text/html", + read_data_file("test_discover/openid2.html", false), + 1, + ) - _checkService(services[0], - 'http://www.myopenid.com/server', - @id_url, - 'http://smoker.myopenid.com/', - nil, - ['2.0'], - false) + _checkService( + services[0], + "http://www.myopenid.com/server", + @id_url, + "http://smoker.myopenid.com/", + nil, + ["2.0"], + false, + ) end def test_html1And2 services = _discover( - 'text/html', - read_data_file('test_discover/openid_1_and_2.html', false), - 2 - ) - - services.zip(['2.0', '1.1']).each do |s, t| - _checkService(s, - 'http://www.myopenid.com/server', - @id_url, - 'http://smoker.myopenid.com/', - nil, - [t], - false) + "text/html", + read_data_file("test_discover/openid_1_and_2.html", false), + 2, + ) + + services.zip(["2.0", "1.1"]).each do |s, t| + _checkService( + s, + "http://www.myopenid.com/server", + @id_url, + "http://smoker.myopenid.com/", + nil, + [t], + false, + ) end end def test_html_utf8 - utf8_html = read_data_file('test_discover/openid_utf8.html', false) - utf8_html.force_encoding('UTF-8') if utf8_html.respond_to?(:force_encoding) - services = _discover('text/html', utf8_html, 1) + utf8_html = read_data_file("test_discover/openid_utf8.html", false) + utf8_html.force_encoding("UTF-8") if utf8_html.respond_to?(:force_encoding) + services = _discover("text/html", utf8_html, 1) - _checkService(services[0], - 'http://www.myopenid.com/server', - @id_url, - 'http://smoker.myopenid.com/', - nil, - ['1.1'], - false) + _checkService( + services[0], + "http://www.myopenid.com/server", + @id_url, + "http://smoker.myopenid.com/", + nil, + ["1.1"], + false, + ) end def test_yadisEmpty - _discover('application/xrds+xml', - read_data_file('test_discover/yadis_0entries.xml', false), - 0) + _discover( + "application/xrds+xml", + read_data_file("test_discover/yadis_0entries.xml", false), + 0, + ) end def test_htmlEmptyYadis # HTML document has discovery information, but points to an # empty Yadis document. The XRDS document pointed to by # "openid_and_yadis.html" - @documents[@id_url + 'xrds'] = ['application/xrds+xml', - read_data_file('test_discover/yadis_0entries.xml', false)] + @documents[@id_url + "xrds"] = [ + "application/xrds+xml", + read_data_file("test_discover/yadis_0entries.xml", false), + ] - services = _discover('text/html', - read_data_file('test_discover/openid_and_yadis.html', false), - 1) + services = _discover( + "text/html", + read_data_file("test_discover/openid_and_yadis.html", false), + 1, + ) - _checkService(services[0], - 'http://www.myopenid.com/server', - @id_url, - 'http://smoker.myopenid.com/', - nil, - ['1.1'], - false) + _checkService( + services[0], + "http://www.myopenid.com/server", + @id_url, + "http://smoker.myopenid.com/", + nil, + ["1.1"], + false, + ) end def test_yadis1NoDelegate - services = _discover('application/xrds+xml', - read_data_file('test_discover/yadis_no_delegate.xml', false), - 1) + services = _discover( + "application/xrds+xml", + read_data_file("test_discover/yadis_no_delegate.xml", false), + 1, + ) - _checkService(services[0], - 'http://www.myopenid.com/server', - @id_url, - @id_url, - nil, - ['1.0'], - true) + _checkService( + services[0], + "http://www.myopenid.com/server", + @id_url, + @id_url, + nil, + ["1.0"], + true, + ) end def test_yadis2NoLocalID - services = _discover('application/xrds+xml', - read_data_file('test_discover/openid2_xrds_no_local_id.xml', false), - 1) + services = _discover( + "application/xrds+xml", + read_data_file("test_discover/openid2_xrds_no_local_id.xml", false), + 1, + ) - _checkService(services[0], - 'http://www.myopenid.com/server', - @id_url, - @id_url, - nil, - ['2.0'], - true) + _checkService( + services[0], + "http://www.myopenid.com/server", + @id_url, + @id_url, + nil, + ["2.0"], + true, + ) end def test_yadis2 - services = _discover('application/xrds+xml', - read_data_file('test_discover/openid2_xrds.xml', false), - 1) + services = _discover( + "application/xrds+xml", + read_data_file("test_discover/openid2_xrds.xml", false), + 1, + ) - _checkService(services[0], - 'http://www.myopenid.com/server', - @id_url, - 'http://smoker.myopenid.com/', - nil, - ['2.0'], - true) + _checkService( + services[0], + "http://www.myopenid.com/server", + @id_url, + "http://smoker.myopenid.com/", + nil, + ["2.0"], + true, + ) end def test_yadis2OP - services = _discover('application/xrds+xml', - read_data_file('test_discover/yadis_idp.xml', false), - 1) + services = _discover( + "application/xrds+xml", + read_data_file("test_discover/yadis_idp.xml", false), + 1, + ) - _checkService(services[0], - 'http://www.myopenid.com/server', - nil, nil, nil, - ['2.0 OP'], - true) + _checkService( + services[0], + "http://www.myopenid.com/server", + nil, + nil, + nil, + ["2.0 OP"], + true, + ) end def test_yadis2OPDelegate # The delegate tag isn't meaningful for OP entries. - services = _discover('application/xrds+xml', - read_data_file('test_discover/yadis_idp_delegate.xml', false), - 1) + services = _discover( + "application/xrds+xml", + read_data_file("test_discover/yadis_idp_delegate.xml", false), + 1, + ) - _checkService(services[0], - 'http://www.myopenid.com/server', - nil, nil, nil, - ['2.0 OP'], - true) + _checkService( + services[0], + "http://www.myopenid.com/server", + nil, + nil, + nil, + ["2.0 OP"], + true, + ) end def test_yadis2BadLocalID assert_raises(DiscoveryFailure) do - _discover('application/xrds+xml', - read_data_file('test_discover/yadis_2_bad_local_id.xml', false), - 1) + _discover( + "application/xrds+xml", + read_data_file("test_discover/yadis_2_bad_local_id.xml", false), + 1, + ) end end def test_yadis1And2 - services = _discover('application/xrds+xml', - read_data_file('test_discover/openid_1_and_2_xrds.xml', false), - 1) + services = _discover( + "application/xrds+xml", + read_data_file("test_discover/openid_1_and_2_xrds.xml", false), + 1, + ) - _checkService(services[0], - 'http://www.myopenid.com/server', - @id_url, - 'http://smoker.myopenid.com/', - nil, - ['2.0', '1.1'], - true) + _checkService( + services[0], + "http://www.myopenid.com/server", + @id_url, + "http://smoker.myopenid.com/", + nil, + ["2.0", "1.1"], + true, + ) end def test_yadis1And2BadLocalID assert_raises(DiscoveryFailure) do - _discover('application/xrds+xml', - read_data_file('test_discover/openid_1_and_2_xrds_bad_delegate.xml', false), - 1) + _discover( + "application/xrds+xml", + read_data_file("test_discover/openid_1_and_2_xrds_bad_delegate.xml", false), + 1, + ) end end end @@ -520,23 +588,27 @@ def fetch(url, body = nil, headers = nil, _limit = nil) if !headers and !query raise ArgumentError.new("No headers or query; you probably didn't " + - 'mean to do that.') + "mean to do that.") end - xri = xri[1..-1] if xri.start_with?('/') + xri = xri[1..-1] if xri.start_with?("/") begin ctype, body = @documents.fetch(xri) rescue IndexError status = 404 - ctype = 'text/plain' - body = '' + ctype = "text/plain" + body = "" else status = 200 end - HTTPResponse._from_raw_data(status, body, - { 'content-type' => ctype }, url) + HTTPResponse._from_raw_data( + status, + body, + {"content-type" => ctype}, + url, + ) end end @@ -545,64 +617,79 @@ class TestXRIDiscovery < BaseTestDiscovery include TestUtil def initialize(*args) - super(*args) + super @fetcher_class = MockFetcherForXRIProxy - @documents = { '=smoker' => ['application/xrds+xml', - read_data_file('test_discover/yadis_2entries_delegate.xml', false)], - '=smoker*bad' => ['application/xrds+xml', - read_data_file('test_discover/yadis_another_delegate.xml', false)] } + @documents = { + "=smoker" => [ + "application/xrds+xml", + read_data_file("test_discover/yadis_2entries_delegate.xml", false), + ], + "=smoker*bad" => [ + "application/xrds+xml", + read_data_file("test_discover/yadis_another_delegate.xml", false), + ], + } end def test_xri - _, services = OpenID.discover_xri('=smoker') - - _checkService(services[0], - 'http://www.myopenid.com/server', - Yadis::XRI.make_xri('=!1000'), - 'http://smoker.myopenid.com/', - Yadis::XRI.make_xri('=!1000'), - ['1.0'], - true, - '=smoker') - - _checkService(services[1], - 'http://www.livejournal.com/openid/server.bml', - Yadis::XRI.make_xri('=!1000'), - 'http://frank.livejournal.com/', - Yadis::XRI.make_xri('=!1000'), - ['1.0'], - true, - '=smoker') + _, services = OpenID.discover_xri("=smoker") + + _checkService( + services[0], + "http://www.myopenid.com/server", + Yadis::XRI.make_xri("=!1000"), + "http://smoker.myopenid.com/", + Yadis::XRI.make_xri("=!1000"), + ["1.0"], + true, + "=smoker", + ) + + _checkService( + services[1], + "http://www.livejournal.com/openid/server.bml", + Yadis::XRI.make_xri("=!1000"), + "http://frank.livejournal.com/", + Yadis::XRI.make_xri("=!1000"), + ["1.0"], + true, + "=smoker", + ) end def test_xri_normalize - _, services = OpenID.discover_xri('xri://=smoker') - - _checkService(services[0], - 'http://www.myopenid.com/server', - Yadis::XRI.make_xri('=!1000'), - 'http://smoker.myopenid.com/', - Yadis::XRI.make_xri('=!1000'), - ['1.0'], - true, - '=smoker') - - _checkService(services[1], - 'http://www.livejournal.com/openid/server.bml', - Yadis::XRI.make_xri('=!1000'), - 'http://frank.livejournal.com/', - Yadis::XRI.make_xri('=!1000'), - ['1.0'], - true, - '=smoker') + _, services = OpenID.discover_xri("xri://=smoker") + + _checkService( + services[0], + "http://www.myopenid.com/server", + Yadis::XRI.make_xri("=!1000"), + "http://smoker.myopenid.com/", + Yadis::XRI.make_xri("=!1000"), + ["1.0"], + true, + "=smoker", + ) + + _checkService( + services[1], + "http://www.livejournal.com/openid/server.bml", + Yadis::XRI.make_xri("=!1000"), + "http://frank.livejournal.com/", + Yadis::XRI.make_xri("=!1000"), + ["1.0"], + true, + "=smoker", + ) end def test_xriNoCanonicalID silence_logging do - _, services = OpenID.discover_xri('=smoker*bad') - assert(services.empty?) + _, services = OpenID.discover_xri("=smoker*bad") + + assert_empty(services) end end @@ -610,9 +697,10 @@ def test_useCanonicalID # When there is no delegate, the CanonicalID should be used with # XRI. endpoint = OpenIDServiceEndpoint.new - endpoint.claimed_id = Yadis::XRI.make_xri('=!1000') - endpoint.canonical_id = Yadis::XRI.make_xri('=!1000') - assert_equal(endpoint.get_local_id, Yadis::XRI.make_xri('=!1000')) + endpoint.claimed_id = Yadis::XRI.make_xri("=!1000") + endpoint.canonical_id = Yadis::XRI.make_xri("=!1000") + + assert_equal(endpoint.get_local_id, Yadis::XRI.make_xri("=!1000")) end end @@ -620,37 +708,48 @@ class TestXRIDiscoveryIDP < BaseTestDiscovery include TestDataMixin def initialize(*args) - super(*args) + super @fetcher_class = MockFetcherForXRIProxy - @documents = { '=smoker' => ['application/xrds+xml', - read_data_file('test_discover/yadis_2entries_idp.xml', false)] } + @documents = { + "=smoker" => [ + "application/xrds+xml", + read_data_file("test_discover/yadis_2entries_idp.xml", false), + ], + } end def test_xri - _, services = OpenID.discover_xri('=smoker') - assert(!services.empty?, 'Expected services, got zero') - assert_equal(services[0].server_url, - 'http://www.livejournal.com/openid/server.bml') + _, services = OpenID.discover_xri("=smoker") + + assert(!services.empty?, "Expected services, got zero") + assert_equal( + "http://www.livejournal.com/openid/server.bml", + services[0].server_url, + ) end end class TestPreferredNamespace < Minitest::Test def initialize(*args) - super(*args) + super @cases = [ [OPENID1_NS, []], - [OPENID1_NS, ['http://jyte.com/']], + [OPENID1_NS, ["http://jyte.com/"]], [OPENID1_NS, [OPENID_1_0_TYPE]], [OPENID1_NS, [OPENID_1_1_TYPE]], [OPENID2_NS, [OPENID_2_0_TYPE]], [OPENID2_NS, [OPENID_IDP_2_0_TYPE]], - [OPENID2_NS, [OPENID_2_0_TYPE, - OPENID_1_0_TYPE]], - [OPENID2_NS, [OPENID_1_0_TYPE, - OPENID_2_0_TYPE]] + [OPENID2_NS, [ + OPENID_2_0_TYPE, + OPENID_1_0_TYPE, + ],], + [OPENID2_NS, [ + OPENID_1_0_TYPE, + OPENID_2_0_TYPE, + ],], ] end @@ -659,6 +758,7 @@ def test_preferred_namespace endpoint = OpenIDServiceEndpoint.new endpoint.type_uris = type_uris actual_ns = endpoint.preferred_namespace + assert_equal(actual_ns, expected_ns) end end @@ -675,41 +775,51 @@ def test_none def test_openid1_0 @endpoint.type_uris = [OPENID_1_0_TYPE] + assert(!@endpoint.is_op_identifier) end def test_openid1_1 @endpoint.type_uris = [OPENID_1_1_TYPE] + assert(!@endpoint.is_op_identifier) end def test_openid2 @endpoint.type_uris = [OPENID_2_0_TYPE] + assert(!@endpoint.is_op_identifier) end def test_openid2OP @endpoint.type_uris = [OPENID_IDP_2_0_TYPE] + assert(@endpoint.is_op_identifier) end def test_multipleMissing - @endpoint.type_uris = [OPENID_2_0_TYPE, - OPENID_1_0_TYPE] + @endpoint.type_uris = [ + OPENID_2_0_TYPE, + OPENID_1_0_TYPE, + ] + assert(!@endpoint.is_op_identifier) end def test_multiplePresent - @endpoint.type_uris = [OPENID_2_0_TYPE, - OPENID_1_0_TYPE, - OPENID_IDP_2_0_TYPE] + @endpoint.type_uris = [ + OPENID_2_0_TYPE, + OPENID_1_0_TYPE, + OPENID_IDP_2_0_TYPE, + ] + assert(@endpoint.is_op_identifier) end end class TestFromOPEndpointURL < Minitest::Test def setup - @op_endpoint_url = 'http://example.com/op/endpoint' + @op_endpoint_url = "http://example.com/op/endpoint" @endpoint = OpenIDServiceEndpoint.from_op_endpoint_url(@op_endpoint_url) end @@ -740,18 +850,18 @@ def test_discover_function # XXX these were all different tests in python, but they're # combined here so I only have to use with_method_overridden # once. - discoverXRI = proc { |_identifier| 'XRI' } + discoverXRI = proc { |_identifier| "XRI" } - discoverURI = proc { |_identifier| 'URI' } + discoverURI = proc { |_identifier| "URI" } OpenID.extend(OverrideMethodMixin) OpenID.with_method_overridden(:discover_uri, discoverURI) do OpenID.with_method_overridden(:discover_xri, discoverXRI) do - assert_equal('URI', OpenID.discover('http://woo!')) - assert_equal('URI', OpenID.discover('not a URL or XRI')) - assert_equal('XRI', OpenID.discover('xri://=something')) - assert_equal('XRI', OpenID.discover('=something')) + assert_equal("URI", OpenID.discover("http://woo!")) + assert_equal("URI", OpenID.discover("not a URL or XRI")) + assert_equal("XRI", OpenID.discover("xri://=something")) + assert_equal("XRI", OpenID.discover("=something")) end end end @@ -763,17 +873,23 @@ def setup end def failUnlessSupportsOnly(*types) - ['foo', - OPENID_1_1_TYPE, - OPENID_1_0_TYPE, - OPENID_2_0_TYPE, - OPENID_IDP_2_0_TYPE].each do |t| + [ + "foo", + OPENID_1_1_TYPE, + OPENID_1_0_TYPE, + OPENID_2_0_TYPE, + OPENID_IDP_2_0_TYPE, + ].each do |t| if types.member?(t) - assert(@endpoint.supports_type(t), - format('Must support %s', t)) + assert( + @endpoint.supports_type(t), + format("Must support %s", t), + ) else - assert(!@endpoint.supports_type(t), - format("Shouldn't support %s", t)) + assert( + !@endpoint.supports_type(t), + format("Shouldn't support %s", t), + ) end end end @@ -789,8 +905,10 @@ def test_openid2 def test_openid2provider @endpoint.type_uris = [OPENID_IDP_2_0_TYPE] - failUnlessSupportsOnly(OPENID_IDP_2_0_TYPE, - OPENID_2_0_TYPE) + failUnlessSupportsOnly( + OPENID_IDP_2_0_TYPE, + OPENID_2_0_TYPE, + ) end def test_openid1_0 @@ -804,34 +922,43 @@ def test_openid1_1 end def test_multiple - @endpoint.type_uris = [OPENID_1_1_TYPE, - OPENID_2_0_TYPE] - failUnlessSupportsOnly(OPENID_1_1_TYPE, - OPENID_2_0_TYPE) + @endpoint.type_uris = [ + OPENID_1_1_TYPE, + OPENID_2_0_TYPE, + ] + failUnlessSupportsOnly( + OPENID_1_1_TYPE, + OPENID_2_0_TYPE, + ) end def test_multipleWithProvider - @endpoint.type_uris = [OPENID_1_1_TYPE, - OPENID_2_0_TYPE, - OPENID_IDP_2_0_TYPE] - failUnlessSupportsOnly(OPENID_1_1_TYPE, - OPENID_2_0_TYPE, - OPENID_IDP_2_0_TYPE) + @endpoint.type_uris = [ + OPENID_1_1_TYPE, + OPENID_2_0_TYPE, + OPENID_IDP_2_0_TYPE, + ] + failUnlessSupportsOnly( + OPENID_1_1_TYPE, + OPENID_2_0_TYPE, + OPENID_IDP_2_0_TYPE, + ) end end class TestEndpointDisplayIdentifier < Minitest::Test def test_strip_fragment @endpoint = OpenIDServiceEndpoint.new - @endpoint.claimed_id = 'http://recycled.invalid/#123' - assert_equal 'http://recycled.invalid/', @endpoint.display_identifier + @endpoint.claimed_id = "http://recycled.invalid/#123" + + assert_equal("http://recycled.invalid/", @endpoint.display_identifier) end end class TestNormalizeURL < Minitest::Test def test_no_host assert_raises(DiscoveryFailure) do - OpenID.normalize_url('http:///too-many.invalid/slashes') + OpenID.normalize_url("http:///too-many.invalid/slashes") end end end diff --git a/test/test_discovery_manager.rb b/test/test_discovery_manager.rb index 330d34d..cc4dbc7 100644 --- a/test/test_discovery_manager.rb +++ b/test/test_discovery_manager.rb @@ -1,17 +1,19 @@ -require 'minitest/autorun' -require 'openid/consumer' -require 'testutil' +require_relative "test_helper" +require "openid/consumer" +require_relative "testutil" module OpenID class TestDiscoveredServices < Minitest::Test def setup - @starting_url = 'http://starting.url.com/' - @yadis_url = 'http://starting.url.com/xrds' + @starting_url = "http://starting.url.com/" + @yadis_url = "http://starting.url.com/xrds" @services = %w[bogus not_a_service] - @disco_services = Consumer::DiscoveredServices.new(@starting_url, - @yadis_url, - @services.dup) + @disco_services = Consumer::DiscoveredServices.new( + @starting_url, + @yadis_url, + @services.dup, + ) end def test_next @@ -30,28 +32,31 @@ def test_for_url assert(@disco_services.for_url?(@yadis_url)) assert(!@disco_services.for_url?(nil)) - assert(!@disco_services.for_url?('invalid')) + assert(!@disco_services.for_url?("invalid")) end def test_started assert(!@disco_services.started?) @disco_services.next - assert(@disco_services.started?) + + assert_predicate(@disco_services, :started?) @disco_services.next - assert(@disco_services.started?) + + assert_predicate(@disco_services, :started?) @disco_services.next + assert(!@disco_services.started?) end def test_empty - assert(Consumer::DiscoveredServices.new(nil, nil, []).empty?) + assert_empty(Consumer::DiscoveredServices.new(nil, nil, [])) assert(!@disco_services.empty?) @disco_services.next @disco_services.next - assert(@disco_services.started?) + assert_predicate(@disco_services, :started?) end end @@ -67,9 +72,9 @@ class TestDiscoveryManager < Minitest::Test def setup session = {} @session = OpenID::Consumer::Session.new(session, OpenID::Consumer::DiscoveredServices) - @url = 'http://unittest.com/' - @key_suffix = 'testing' - @yadis_url = 'http://unittest.com/xrds' + @url = "http://unittest.com/" + @key_suffix = "testing" + @yadis_url = "http://unittest.com/xrds" @manager = PassthroughDiscoveryManager.new(session, @url, @key_suffix) @key = @manager.session_key end @@ -77,10 +82,12 @@ def setup def test_construct # Make sure the default session key suffix is not nil. m = Consumer::DiscoveryManager.new(nil, nil) - assert(!m.instance_variable_get('@session_key_suffix').nil?) - m = Consumer::DiscoveryManager.new(nil, nil, 'override') - assert_equal(m.instance_variable_get('@session_key_suffix'), 'override') + assert(!m.instance_variable_get(:@session_key_suffix).nil?) + + m = Consumer::DiscoveryManager.new(nil, nil, "override") + + assert_equal("override", m.instance_variable_get(:@session_key_suffix)) end def test_get_next_service @@ -91,26 +98,29 @@ def test_get_next_service end disco = @session[@key] - assert_equal(disco.current, 'one') - assert_equal(next_service, 'one') + + assert_equal("one", disco.current) + assert_equal("one", next_service) assert(disco.for_url?(@url)) assert(disco.for_url?(@yadis_url)) # The first two calls to get_next_service should return the # services in @disco. - assert_equal(@manager.get_next_service, 'two') - assert_equal(@manager.get_next_service, 'three') + assert_equal("two", @manager.get_next_service) + assert_equal("three", @manager.get_next_service) disco = @session[@key] - assert_equal(disco.current, 'three') + + assert_equal("three", disco.current) # The manager is exhausted and should be deleted and a new one # should be created. @manager.get_next_service do - [@yadis_url, ['four']] + [@yadis_url, ["four"]] end disco2 = @session[@key] - assert_equal(disco2.current, 'four') + + assert_equal("four", disco2.current) # create_manager may return a nil manager, in which case the # next service should be nil. @@ -120,7 +130,7 @@ def test_get_next_service end result = @manager.get_next_service do |_url| - ['unused', []] + ["unused", []] end assert_nil(result) @@ -134,20 +144,22 @@ def test_cleanup disco = Consumer::DiscoveredServices.new(@url, @yadis_url, %w[one two]) @session[@key] = disco + assert_nil(@manager.cleanup) assert_nil(@session[@key]) disco.next @session[@key] = disco - assert_equal(@manager.cleanup, 'one') + + assert_equal("one", @manager.cleanup) assert_nil(@session[@key]) # The force parameter should be passed through to get_manager # and destroy_manager. - force_value = 'yo' + force_value = "yo" testcase = self - m = Consumer::DiscoveredServices.new(nil, nil, ['inner']) + m = Consumer::DiscoveredServices.new(nil, nil, ["inner"]) m.next @manager.extend(OpenID::InstanceDefExtension) @@ -160,39 +172,46 @@ def test_cleanup testcase.assert_equal(force, force_value) end - assert_equal('inner', @manager.cleanup(force_value)) + assert_equal("inner", @manager.cleanup(force_value)) end def test_get_manager # get_manager should always return the loaded manager when # forced. - @session[@key] = 'bogus' - assert_equal('bogus', @manager.get_manager(true)) + @session[@key] = "bogus" + + assert_equal("bogus", @manager.get_manager(true)) # When not forced, only managers for @url should be returned. - disco = Consumer::DiscoveredServices.new(@url, @yadis_url, ['one']) + disco = Consumer::DiscoveredServices.new(@url, @yadis_url, ["one"]) @session[@key] = disco + assert_equal(@manager.get_manager, disco) # Try to get_manager for a manger that doesn't manage @url: - disco2 = Consumer::DiscoveredServices.new('http://not.this.url.com/', - 'http://other.yadis.url/', ['one']) + disco2 = Consumer::DiscoveredServices.new( + "http://not.this.url.com/", + "http://other.yadis.url/", + ["one"], + ) @session[@key] = disco2 + assert_nil(@manager.get_manager) assert_equal(@manager.get_manager(true), disco2) end def test_create_manager - assert(@session[@key].nil?) + assert_nil(@session[@key]) services = %w[created manager] returned_disco = @manager.create_manager(@yadis_url, services) stored_disco = @session[@key] + assert_equal(stored_disco, returned_disco) assert(stored_disco.for_url?(@yadis_url)) - assert_equal(stored_disco.next, 'created') + assert_equal("created", stored_disco.next) # Calling create_manager with a preexisting manager should # result in StandardError. @@ -204,8 +223,9 @@ def test_create_manager # services. @session[@key] = nil result = @manager.create_manager(@yadis_url, []) - assert(result.nil?) - assert(@session[@key].nil?) + + assert_nil(result) + assert_nil(@session[@key]) end class DestroyCalledException < StandardError; end @@ -213,50 +233,60 @@ class DestroyCalledException < StandardError; end def test_destroy_manager # destroy_manager should remove the manager from the session, # forcibly if necessary. - valid_disco = Consumer::DiscoveredServices.new(@url, @yadis_url, ['serv']) - invalid_disco = Consumer::DiscoveredServices.new('http://not.mine.com/', - 'http://different.url.com/', - ['serv']) + valid_disco = Consumer::DiscoveredServices.new(@url, @yadis_url, ["serv"]) + invalid_disco = Consumer::DiscoveredServices.new( + "http://not.mine.com/", + "http://different.url.com/", + ["serv"], + ) @session[@key] = valid_disco @manager.destroy_manager - assert(@session[@key].nil?) + + assert_nil(@session[@key]) @session[@key] = invalid_disco @manager.destroy_manager + assert_equal(@session[@key], invalid_disco) # Force destruction of manager, no matter which URLs it's for. @manager.destroy_manager(true) - assert(@session[@key].nil?) + + assert_nil(@session[@key]) end def test_session_key assert(@manager.session_key.end_with?( - @manager.instance_variable_get('@session_key_suffix') - )) + @manager.instance_variable_get(:@session_key_suffix), + )) end def test_store - thing = 'opaque' - assert(@session[@key].nil?) + thing = "opaque" + + assert_nil(@session[@key]) @manager.store(thing) + assert_equal(@session[@key], thing) end def test_load - thing = 'opaque' + thing = "opaque" @session[@key] = thing + assert_equal(@manager.load, thing) end def test_destroy! - thing = 'opaque' + thing = "opaque" @manager.store(thing) + assert_equal(@manager.load, thing) @manager.destroy! - assert(@session[@key].nil?) - assert(@manager.load.nil?) + + assert_nil(@session[@key]) + assert_nil(@manager.load) end end end diff --git a/test/test_extension.rb b/test/test_extension.rb index e34b28c..e1d339b 100644 --- a/test/test_extension.rb +++ b/test/test_extension.rb @@ -1,11 +1,11 @@ -require 'minitest/autorun' -require 'openid/extension' -require 'openid/message' +require_relative "test_helper" +require "openid/extension" +require "openid/message" module OpenID class DummyExtension < OpenID::Extension - TEST_URI = 'http://an.extension' - TEST_ALIAS = 'dummy' + TEST_URI = "http://an.extension" + TEST_ALIAS = "dummy" def initialize @ns_uri = TEST_URI @ns_alias = TEST_ALIAS @@ -22,13 +22,16 @@ def test_OpenID1 ext = DummyExtension.new ext.to_message(oid1_msg) namespaces = oid1_msg.namespaces + assert(namespaces.implicit?(DummyExtension::TEST_URI)) assert_equal( DummyExtension::TEST_URI, - namespaces.get_namespace_uri(DummyExtension::TEST_ALIAS) + namespaces.get_namespace_uri(DummyExtension::TEST_ALIAS), + ) + assert_equal( + DummyExtension::TEST_ALIAS, + namespaces.get_alias(DummyExtension::TEST_URI), ) - assert_equal(DummyExtension::TEST_ALIAS, - namespaces.get_alias(DummyExtension::TEST_URI)) end def test_OpenID2 @@ -36,13 +39,16 @@ def test_OpenID2 ext = DummyExtension.new ext.to_message(oid2_msg) namespaces = oid2_msg.namespaces + assert(!namespaces.implicit?(DummyExtension::TEST_URI)) assert_equal( DummyExtension::TEST_URI, - namespaces.get_namespace_uri(DummyExtension::TEST_ALIAS) + namespaces.get_namespace_uri(DummyExtension::TEST_ALIAS), + ) + assert_equal( + DummyExtension::TEST_ALIAS, + namespaces.get_alias(DummyExtension::TEST_URI), ) - assert_equal(DummyExtension::TEST_ALIAS, - namespaces.get_alias(DummyExtension::TEST_URI)) end end end diff --git a/test/test_fetchers.rb b/test/test_fetchers.rb index b8a76f5..26deede 100644 --- a/test/test_fetchers.rb +++ b/test/test_fetchers.rb @@ -1,13 +1,13 @@ -require 'minitest/autorun' -require 'net/http' -require 'webrick' -require 'testutil' -require 'util' -require 'openid/fetchers' -require 'stringio' +require_relative "test_helper" +require "net/http" +require "webrick" +require_relative "testutil" +require_relative "util" +require "openid/fetchers" +require "stringio" begin - require 'net/https' + require "net/https" rescue LoadError # We need these names for testing. @@ -20,14 +20,14 @@ class SSLError < StandardError; end module HttpResultAssertions def assert_http_result_is(expected, result) - assert_equal expected.code, result.code - assert_equal expected.body, result.body - assert_equal expected.final_url, result.final_url + assert_equal(expected.code, result.code) + assert_equal(expected.body, result.body) + assert_equal(expected.final_url, result.final_url) end end class BogusFetcher - RESPONSE = 'bogus' + RESPONSE = "bogus" def fetch(_url, _body = nil, _headers = nil, _redirect_limit = 5) BogusFetcher::RESPONSE @@ -38,14 +38,14 @@ class FetcherTestCase < Minitest::Test include HttpResultAssertions include OpenID::TestUtil - @@test_header_name = 'X-test-header' - @@test_header_value = 'marmoset' + @@test_header_name = "X-test-header" + @@test_header_value = "marmoset" class ExpectedResponse < Net::HTTPResponse attr_reader :final_url, :body - def initialize(code, final_url, body = 'the expected body', - httpv = '1.1', msg = nil) + def initialize(code, final_url, body = "the expected body", + httpv = "1.1", msg = nil) super(httpv, code, msg) @code = code @body = body @@ -56,43 +56,43 @@ def initialize(code, final_url, body = 'the expected body', @@cases = [ # path, status code, expected url (nil = default to path) - ['/success', 200, nil], - ['/notfound', 404, nil], - ['/badreq', 400, nil], - ['/forbidden', 403, nil], - ['/error', 500, nil], - ['/server_error', 503, nil], - ['/301redirect', 200, '/success'], - ['/302redirect', 200, '/success'], - ['/303redirect', 200, '/success'], - ['/307redirect', 200, '/success'] + ["/success", 200, nil], + ["/notfound", 404, nil], + ["/badreq", 400, nil], + ["/forbidden", 403, nil], + ["/error", 500, nil], + ["/server_error", 503, nil], + ["/301redirect", 200, "/success"], + ["/302redirect", 200, "/success"], + ["/303redirect", 200, "/success"], + ["/307redirect", 200, "/success"], ] def _redirect_with_code(code) lambda { |_req, resp| resp.status = code - resp['Location'] = _uri_build('/success') + resp["Location"] = _uri_build("/success") } end def _respond_with_code(code) lambda { |_req, resp| resp.status = code - resp.body = 'the expected body' + resp.body = "the expected body" } end def _require_header lambda { |req, _resp| - assert_equal @@test_header_value, req[@@test_header_name] - assert_match 'ruby-openid', req['User-agent'] + assert_equal(@@test_header_value, req[@@test_header_name]) + assert_match("ruby-openid", req["User-agent"]) } end def _require_post lambda { |req, _resp| - assert_equal 'POST', req.request_method - assert_equal "postbody\n", req.body + assert_equal("POST", req.request_method) + assert_equal("postbody\n", req.body) } end @@ -100,9 +100,10 @@ def _redirect_loop lambda { |_req, resp| @_redirect_counter += 1 resp.status = 302 - resp['Location'] = _uri_build('/redirect_loop') + resp["Location"] = _uri_build("/redirect_loop") resp.body = "Fetched #{@_redirect_counter} times." - assert @_redirect_counter < 10, 'Fetched too many times.' + + assert_operator(@_redirect_counter, :<, 10, "Fetched too many times.") } end @@ -114,7 +115,7 @@ def _redirect_loop EOHTML def _utf8_page lambda { |_req, resp| - resp['Content-Type'] = 'text/html; charset=utf-8' + resp["Content-Type"] = "text/html; charset=utf-8" body = UTF8_PAGE_CONTENT.dup resp.body = body } @@ -122,16 +123,16 @@ def _utf8_page def _unencoded_page lambda { |_req, resp| - resp['Content-Type'] = 'text/html' - body = 'unencoded-body' + resp["Content-Type"] = "text/html" + body = "unencoded-body" resp.body = body } end def _badly_encoded_page lambda { |_req, resp| - resp['Content-Type'] = 'text/html; charset=wtf' - body = 'badly-encoded-body' + resp["Content-Type"] = "text/html; charset=wtf" + body = "badly-encoded-body" resp.body = body } end @@ -143,42 +144,44 @@ def setup @fetcher = OpenID::StandardFetcher.new @logfile = StringIO.new @weblog = WEBrick::Log.new(@logfile) - @server = WEBrick::HTTPServer.new(Port: 0, - Logger: @weblog, - AccessLog: []) + @server = WEBrick::HTTPServer.new( + Port: 0, + Logger: @weblog, + AccessLog: [], + ) @server_thread = Thread.new do - @server.mount_proc('/success', _respond_with_code(200)) - @server.mount_proc('/301redirect', _redirect_with_code(301)) - @server.mount_proc('/302redirect', _redirect_with_code(302)) - @server.mount_proc('/303redirect', _redirect_with_code(303)) - @server.mount_proc('/307redirect', _redirect_with_code(307)) - @server.mount_proc('/badreq', _respond_with_code(400)) - @server.mount_proc('/forbidden', _respond_with_code(403)) - @server.mount_proc('/notfound', _respond_with_code(404)) - @server.mount_proc('/error', _respond_with_code(500)) - @server.mount_proc('/server_error', _respond_with_code(503)) - @server.mount_proc('/require_header', _require_header) - @server.mount_proc('/redirect_to_reqheader') do |_req, resp| + @server.mount_proc("/success", _respond_with_code(200)) + @server.mount_proc("/301redirect", _redirect_with_code(301)) + @server.mount_proc("/302redirect", _redirect_with_code(302)) + @server.mount_proc("/303redirect", _redirect_with_code(303)) + @server.mount_proc("/307redirect", _redirect_with_code(307)) + @server.mount_proc("/badreq", _respond_with_code(400)) + @server.mount_proc("/forbidden", _respond_with_code(403)) + @server.mount_proc("/notfound", _respond_with_code(404)) + @server.mount_proc("/error", _respond_with_code(500)) + @server.mount_proc("/server_error", _respond_with_code(503)) + @server.mount_proc("/require_header", _require_header) + @server.mount_proc("/redirect_to_reqheader") do |_req, resp| resp.status = 302 - resp['Location'] = _uri_build('/require_header') + resp["Location"] = _uri_build("/require_header") end - @server.mount_proc('/post', _require_post) - @server.mount_proc('/redirect_loop', _redirect_loop) - @server.mount_proc('/utf8_page', _utf8_page) - @server.mount_proc('/unencoded_page', _unencoded_page) - @server.mount_proc('/badly_encoded_page', _badly_encoded_page) + @server.mount_proc("/post", _require_post) + @server.mount_proc("/redirect_loop", _redirect_loop) + @server.mount_proc("/utf8_page", _utf8_page) + @server.mount_proc("/unencoded_page", _unencoded_page) + @server.mount_proc("/badly_encoded_page", _badly_encoded_page) @server.start end @uri = _uri_build - sleep 0.2 + sleep(0.2) end - def _uri_build(path = '/') + def _uri_build(path = "/") u = URI::HTTP.build({ - host: 'localhost', - port: @server.config[:Port], - path: path - }) + host: "localhost", + port: @server.config[:Port], + path: path, + }) u.to_s end @@ -205,45 +208,46 @@ def teardown def test_headers headers = { - @@test_header_name => @@test_header_value + @@test_header_name => @@test_header_value, } - uri = _uri_build('/require_header') + uri = _uri_build("/require_header") result = @fetcher.fetch(uri, nil, headers) # The real test runs under the WEBrick handler _require_header, # this just checks the return code from that. - assert_equal '200', result.code, @logfile.string + assert_equal("200", result.code, @logfile.string) end def test_headers_after_redirect headers = { - @@test_header_name => @@test_header_value + @@test_header_name => @@test_header_value, } - uri = _uri_build('/redirect_to_reqheader') + uri = _uri_build("/redirect_to_reqheader") result = @fetcher.fetch(uri, nil, headers) # The real test runs under the WEBrick handler _require_header, # this just checks the return code from that. - assert_equal '200', result.code, @logfile.string + assert_equal("200", result.code, @logfile.string) end def test_post - uri = _uri_build('/post') + uri = _uri_build("/post") result = @fetcher.fetch(uri, "postbody\n") # The real test runs under the WEBrick handler _require_header, # this just checks the return code from that. - assert_equal '200', result.code, @logfile.string + assert_equal("200", result.code, @logfile.string) end def test_redirect_limit @_redirect_counter = 0 - uri = _uri_build('/redirect_loop') + uri = _uri_build("/redirect_loop") assert_raises(OpenID::HTTPRedirectLimitReached) do @fetcher.fetch(uri, body = nil, headers = nil, redirect_limit = 0) end end def test_utf8_page - uri = _uri_build('/utf8_page') + uri = _uri_build("/utf8_page") response = @fetcher.fetch(uri) + assert_equal(UTF8_PAGE_CONTENT, response.body) return unless response.body.respond_to?(:encoding) @@ -251,9 +255,10 @@ def test_utf8_page end def test_unencoded_page - uri = _uri_build('/unencoded_page') + uri = _uri_build("/unencoded_page") response = @fetcher.fetch(uri) - assert_equal('unencoded-body', response.body) + + assert_equal("unencoded-body", response.body) # The actual encoding seems to depend on the server # setting in case it is not defined explicitely # if defined?(Encoding.default_external) @@ -265,9 +270,10 @@ def test_badly_encoded_page if defined?(Encoding.default_external) Encoding.default_external = Encoding::SHIFT_JIS end - uri = _uri_build('/badly_encoded_page') + uri = _uri_build("/badly_encoded_page") response = @fetcher.fetch(uri) - assert_equal('badly-encoded-body', response.body) + + assert_equal("badly-encoded-body", response.body) return unless defined?(Encoding.default_external) assert_equal(Encoding::SHIFT_JIS, response.body.encoding) @@ -277,18 +283,18 @@ def test_cases for path, expected_code, expected_url in @@cases uri = _uri_build(path) expected_url = if expected_url.nil? - uri - else - _uri_build(expected_url) - end + uri + else + _uri_build(expected_url) + end expected = ExpectedResponse.new(expected_code.to_s, expected_url) result = @fetcher.fetch(uri) begin - assert_http_result_is expected, result + assert_http_result_is(expected, result) rescue Minitest::Assertion => e - if result.code == '500' && expected_code != 500 + if result.code == "500" && expected_code != 500 # Looks like our WEBrick harness broke. msg = <<~EOF Status #{result.code} from case #{path}. Logs: @@ -318,10 +324,11 @@ def test_https_no_openssl end begin - f.fetch('https://someurl.com/') - flunk('Expected RuntimeError') + f.fetch("https://someurl.com/") + + flunk("Expected RuntimeError") rescue RuntimeError => e - assert_equal(e.to_s, 'SSL support not found; cannot fetch https://someurl.com/') + assert_equal("SSL support not found; cannot fetch https://someurl.com/", e.to_s) end end @@ -336,7 +343,7 @@ def initialize *args def test_ssl_with_ca_file f = OpenID::StandardFetcher.new - ca_file = 'BOGUS' + ca_file = "BOGUS" f.ca_file = ca_file f.extend(OpenID::InstanceDefExtension) @@ -350,7 +357,8 @@ def test_ssl_with_ca_file testcase.assert(verified) end - conn = f.make_connection(URI.parse('https://someurl.com')) + conn = f.make_connection(URI.parse("https://someurl.com")) + assert_equal(conn.ca_file, ca_file) end @@ -370,10 +378,10 @@ def test_ssl_without_ca_file conn = nil assert_log_matches(%r{making https request to https://someurl.com without verifying}) do - conn = f.make_connection(URI.parse('https://someurl.com')) + conn = f.make_connection(URI.parse("https://someurl.com")) end - assert(conn.ca_file.nil?) + assert_nil(conn.ca_file) end def test_make_http_nil @@ -385,7 +393,7 @@ def test_make_http_nil end assert_raises(RuntimeError) do - f.make_connection(URI.parse('http://example.com/')) + f.make_connection(URI.parse("http://example.com/")) end end @@ -394,11 +402,11 @@ def test_make_http_invalid f.extend(OpenID::InstanceDefExtension) f.instance_def(:make_http) do |_uri| - 'not a Net::HTTP object' + "not a Net::HTTP object" end assert_raises(RuntimeError) do - f.make_connection(URI.parse('http://example.com/')) + f.make_connection(URI.parse("http://example.com/")) end end @@ -417,7 +425,7 @@ def test_sslfetchingerror end assert_raises(OpenID::SSLFetchingError) do - f.fetch('https://bogus.com/') + f.fetch("https://bogus.com/") end end @@ -436,7 +444,7 @@ def test_fetchingerror end assert_raises(OpenID::FetchingError) do - f.fetch('https://bogus.com/') + f.fetch("https://bogus.com/") end end @@ -480,7 +488,7 @@ def test_post_connection_check_no_support_ssl # post_connection_check should not be called. assert_raises(TestingException) do - f.fetch('https://bogus.com/') + f.fetch("https://bogus.com/") end end @@ -494,7 +502,7 @@ def test_post_connection_check_no_use_ssl # post_connection_check should not be called. assert_raises(TestingException) do - f.fetch('https://bogus.com/') + f.fetch("https://bogus.com/") end end @@ -524,7 +532,7 @@ def test_post_connection_check # post_connection_check should be called. assert_raises(PostConnectionCheckException) do - f.fetch('https://bogus.com/') + f.fetch("https://bogus.com/") end end end @@ -535,44 +543,47 @@ def setup end def test_default_fetcher - assert(OpenID.fetcher.is_a?(OpenID::StandardFetcher)) + assert_kind_of(OpenID::StandardFetcher, OpenID.fetcher) # A custom fetcher can be set OpenID.fetcher = BogusFetcher.new # A test fetch should call the new fetcher - assert(OpenID.fetch('not-a-url') == BogusFetcher::RESPONSE) + assert_equal(OpenID.fetch("not-a-url"), BogusFetcher::RESPONSE) # Set the fetcher to nil again OpenID.fetcher = nil - assert(OpenID.fetcher.is_a?(OpenID::StandardFetcher)) + + assert_kind_of(OpenID::StandardFetcher, OpenID.fetcher) end end class ProxyTest < Minitest::Test def test_proxy_unreachable begin - f = OpenID::StandardFetcher.new('127.0.0.1', 1) + f = OpenID::StandardFetcher.new("127.0.0.1", 1) # If this tries to connect to the proxy (on port 1), I expect # a 'connection refused' error. If it tries to contact the below # URI first, it will get some other sort of error. - f.fetch('http://unittest.invalid') + f.fetch("http://unittest.invalid") rescue OpenID::FetchingError => e # XXX: Is this a translatable string that is going to break? - return if e.message =~ /Connection refused/ + skip if /Connection refused/.match?(e.message) raise e end - flunk 'expected Connection Refused, but it passed.' + + flunk("expected Connection Refused, but it passed.") end def test_proxy_env - ENV['http_proxy'] = 'http://127.0.0.1:3128/' + ENV["http_proxy"] = "http://127.0.0.1:3128/" OpenID.fetcher_use_env_http_proxy # make_http just to give us something with readable attributes to inspect. - conn = OpenID.fetcher.make_http(URI.parse('http://127.0.0.2')) - assert_equal('127.0.0.1', conn.proxy_address) + conn = OpenID.fetcher.make_http(URI.parse("http://127.0.0.2")) + + assert_equal("127.0.0.1", conn.proxy_address) assert_equal(3128, conn.proxy_port) end # These aren't fully automated tests, but if you start a proxy diff --git a/test/test_filters.rb b/test/test_filters.rb index 1adf3f3..65b6043 100644 --- a/test/test_filters.rb +++ b/test/test_filters.rb @@ -1,60 +1,58 @@ -require 'minitest/autorun' -require 'testutil' -require 'rexml/document' -require 'openid/yadis/xrds' -require 'openid/yadis/filters' +require_relative "test_helper" +require_relative "testutil" +require "rexml/document" +require "openid/yadis/xrds" +require "openid/yadis/filters" module OpenID class BasicServiceEndpointTest < Minitest::Test def test_match_types # Make sure the match_types operation returns the expected # results with various inputs. - types = ['urn:bogus', 'urn:testing'] - yadis_url = 'http://yadis/' + types = ["urn:bogus", "urn:testing"] + yadis_url = "http://yadis/" no_types_endpoint = Yadis::BasicServiceEndpoint.new(yadis_url, [], nil, nil) some_types_endpoint = Yadis::BasicServiceEndpoint.new(yadis_url, types, nil, nil) - assert(no_types_endpoint.match_types([]) == []) - assert(no_types_endpoint.match_types(['urn:absent']) == []) + assert_empty(no_types_endpoint.match_types([])) + assert_empty(no_types_endpoint.match_types(["urn:absent"])) - assert(some_types_endpoint.match_types([]) == []) - assert(some_types_endpoint.match_types(['urn:absent']) == []) - assert(some_types_endpoint.match_types(types) == types) - assert(some_types_endpoint.match_types([types[1], types[0]]) == types) - assert(some_types_endpoint.match_types([types[0]]) == [types[0]]) - assert(some_types_endpoint.match_types(types + ['urn:absent']) == types) + assert_empty(some_types_endpoint.match_types([])) + assert_empty(some_types_endpoint.match_types(["urn:absent"])) + assert_equal(some_types_endpoint.match_types(types), types) + assert_equal(some_types_endpoint.match_types([types[1], types[0]]), types) + assert_equal(some_types_endpoint.match_types([types[0]]), [types[0]]) + assert_equal(some_types_endpoint.match_types(types + ["urn:absent"]), types) end def test_from_basic_service_endpoint # Check BasicServiceEndpoint.from_basic_service_endpoint - endpoint = 'unused' + endpoint = "unused" e = Yadis::BasicServiceEndpoint.new(nil, [], nil, nil) - assert(Yadis::BasicServiceEndpoint.from_basic_service_endpoint(endpoint) == - endpoint) - assert(e.from_basic_service_endpoint(endpoint) == - endpoint) + assert_equal(Yadis::BasicServiceEndpoint.from_basic_service_endpoint(endpoint), endpoint) + assert_equal(e.from_basic_service_endpoint(endpoint), endpoint) end end class TransformFilterMakerTest < Minitest::Test def make_service_element(types, uris) - service = REXML::Element.new('Service') + service = REXML::Element.new("Service") types.each do |type_text| - service.add_element('Type').text = type_text + service.add_element("Type").text = type_text end uris.each do |uri_text| - service.add_element('URI').text = uri_text + service.add_element("URI").text = uri_text end service end def test_get_service_endpoints - yadis_url = 'http://yad.is/' - uri = 'http://uri/' - type_uris = ['urn:type1', 'urn:type2'] + yadis_url = "http://yad.is/" + uri = "http://uri/" + type_uris = ["urn:type1", "urn:type2"] element = make_service_element(type_uris, [uri]) filters = [proc do |endpoint| @@ -70,17 +68,19 @@ def test_get_service_endpoints def test_empty_transform_filter # A transform filter with no filter procs should return nil. - endpoint = 'unused' + endpoint = "unused" t = Yadis::TransformFilterMaker.new([]) - assert(t.apply_filters(endpoint).nil?) + + assert_nil(t.apply_filters(endpoint)) end def test_nil_filter # A transform filter with a single nil filter should return nil. nil_filter = proc { |_endpoint| nil } t = Yadis::TransformFilterMaker.new([nil_filter]) - endpoint = 'unused' - assert(t.apply_filters(endpoint).nil?) + endpoint = "unused" + + assert_nil(t.apply_filters(endpoint)) end def test_identity_filter @@ -88,26 +88,28 @@ def test_identity_filter # input. identity_filter = proc { |endpoint| endpoint } t = Yadis::TransformFilterMaker.new([identity_filter]) - endpoint = 'unused' - assert(t.apply_filters(endpoint) == endpoint) + endpoint = "unused" + + assert_equal(t.apply_filters(endpoint), endpoint) end def test_return_different_endpoint # Make sure the result of the filter is returned, rather than # the input. - returned_endpoint = 'returned endpoint' + returned_endpoint = "returned endpoint" filter = proc { |_endpoint| returned_endpoint } t = Yadis::TransformFilterMaker.new([filter]) - endpoint = 'unused' - assert(t.apply_filters(endpoint) == returned_endpoint) + endpoint = "unused" + + assert_equal(t.apply_filters(endpoint), returned_endpoint) end def test_multiple_filters # Check filter fallback behavior on different inputs. odd = 45 - odd_result = 'odd' + odd_result = "odd" even = 46 - even_result = 'even' + even_result = "even" filter_odd = proc do |endpoint| odd_result if endpoint.odd? @@ -118,8 +120,9 @@ def test_multiple_filters end t = Yadis::TransformFilterMaker.new([filter_odd, filter_even]) - assert(t.apply_filters(odd) == odd_result) - assert(t.apply_filters(even) == even_result) + + assert_equal(t.apply_filters(odd), odd_result) + assert_equal(t.apply_filters(even), even_result) end end @@ -136,23 +139,25 @@ def get_service_endpoints(_yadis_url, _service_element) class CompoundFilterTest < Minitest::Test def test_get_service_endpoints first = %w[bogus test] - second = ['third'] + second = ["third"] all = first + second subfilters = [ BogusServiceEndpointExtractor.new(first), - BogusServiceEndpointExtractor.new(second) + BogusServiceEndpointExtractor.new(second), ] cf = Yadis::CompoundFilter.new(subfilters) - assert cf.get_service_endpoints('unused', 'unused') == all + + assert_equal(cf.get_service_endpoints("unused", "unused"), all) end end class MakeFilterTest < Minitest::Test def test_parts_nil result = Yadis.make_filter(nil) - assert result.is_a?(Yadis::TransformFilterMaker) + + assert_kind_of(Yadis::TransformFilterMaker, result) end def test_parts_array @@ -160,49 +165,56 @@ def test_parts_array e2 = Yadis::BasicServiceEndpoint.new(nil, [], nil, nil) result = Yadis.make_filter([e1, e2]) - assert result.is_a?(Yadis::TransformFilterMaker) - assert result.filter_procs[0] == e1.method('from_basic_service_endpoint') - assert result.filter_procs[1] == e2.method('from_basic_service_endpoint') + + assert_kind_of(Yadis::TransformFilterMaker, result) + assert_equal(result.filter_procs[0], e1.method(:from_basic_service_endpoint)) + assert_equal(result.filter_procs[1], e2.method(:from_basic_service_endpoint)) end def test_parts_single e = Yadis::BasicServiceEndpoint.new(nil, [], nil, nil) result = Yadis.make_filter(e) - assert result.is_a?(Yadis::TransformFilterMaker) + + assert_kind_of(Yadis::TransformFilterMaker, result) end end class MakeCompoundFilterTest < Minitest::Test def test_no_filters result = Yadis.mk_compound_filter([]) - assert result.subfilters == [] + + assert_empty(result.subfilters) end def test_single_transform_filter f = Yadis::TransformFilterMaker.new([]) - assert_equal f, Yadis.mk_compound_filter([f]) + + assert_equal(f, Yadis.mk_compound_filter([f])) end def test_single_endpoint e = Yadis::BasicServiceEndpoint.new(nil, [], nil, nil) result = Yadis.mk_compound_filter([e]) - assert result.is_a?(Yadis::TransformFilterMaker) + + assert_kind_of(Yadis::TransformFilterMaker, result) # Expect the transform filter to call # from_basic_service_endpoint on the endpoint filter = result.filter_procs[0] - assert_equal filter, e.method('from_basic_service_endpoint') + + assert_equal(filter, e.method(:from_basic_service_endpoint)) end def test_single_proc # Create a proc that just returns nil for any endpoint p = proc { |_endpoint| nil } result = Yadis.mk_compound_filter([p]) - assert result.is_a?(Yadis::TransformFilterMaker) + + assert_kind_of(Yadis::TransformFilterMaker, result) # Expect the transform filter to call # from_basic_service_endpoint on the endpoint - assert_equal result.filter_procs[0], p + assert_equal(result.filter_procs[0], p) end def test_multiple_filters_same_type @@ -213,8 +225,8 @@ def test_multiple_filters_same_type # from f1 and f2. result = Yadis.mk_compound_filter([f1, f2]) - assert result.is_a?(Yadis::CompoundFilter) - assert result.subfilters == [f1, f2] + assert_kind_of(Yadis::CompoundFilter, result) + assert_equal(result.subfilters, [f1, f2]) end def test_multiple_filters_different_type @@ -229,18 +241,18 @@ def test_multiple_filters_different_type # from f1 and f2. result = Yadis.mk_compound_filter([f1, f2, f3, f4]) - assert result.is_a?(Yadis::CompoundFilter) + assert_kind_of(Yadis::CompoundFilter, result) - assert result.subfilters[0] == f1 - assert result.subfilters[1].filter_procs[0] == e.method('from_basic_service_endpoint') - assert result.subfilters[2].filter_procs[0] == f2.method('from_basic_service_endpoint') - assert result.subfilters[2].filter_procs[1] == f3 + assert_equal(result.subfilters[0], f1) + assert_equal(result.subfilters[1].filter_procs[0], e.method(:from_basic_service_endpoint)) + assert_equal(result.subfilters[2].filter_procs[0], f2.method(:from_basic_service_endpoint)) + assert_equal(result.subfilters[2].filter_procs[1], f3) end def test_filter_type_error # Pass various non-filter objects and make sure the filter # machinery explodes. - [nil, ['bogus'], [1], [nil, 'bogus']].each do |thing| + [nil, ["bogus"], [1], [nil, "bogus"]].each do |thing| assert_raises(TypeError) do Yadis.mk_compound_filter(thing) end diff --git a/test/test_helper.rb b/test/test_helper.rb new file mode 100644 index 0000000..17575f8 --- /dev/null +++ b/test/test_helper.rb @@ -0,0 +1,16 @@ +# External dependencies +## Last thing before loading this gem is to setup code coverage +begin + # This does not require "simplecov", but + require "kettle-soup-cover" + # this next line has a side-effect of running `.simplecov` + require "simplecov" if defined?(Kettle::Soup::Cover) && Kettle::Soup::Cover::DO_COV +rescue LoadError + nil +end + +# Testing libraries +require "minitest/autorun" + +# Internal dependencies & mixins +require_relative "testutil" diff --git a/test/test_idres.rb b/test/test_idres.rb index dcab761..00ebd39 100644 --- a/test/test_idres.rb +++ b/test/test_idres.rb @@ -1,10 +1,10 @@ -require 'minitest/autorun' -require 'testutil' -require 'util' -require 'openid/consumer/idres' -require 'openid/protocolerror' -require 'openid/store/memory' -require 'openid/store/nonce' +require_relative "test_helper" +require_relative "testutil" +require_relative "util" +require "openid/consumer/idres" +require "openid/protocolerror" +require "openid/store/memory" +require "openid/store/nonce" module OpenID class Consumer @@ -13,38 +13,46 @@ class IdResHandler # construction. All of the tests call this, except for the ones # explicitly for id_res. class IdResHandler < OpenID::Consumer::IdResHandler - def id_res; end + def id_res + end end class CheckForFieldsTest < Minitest::Test include ProtocolErrorMixin BASE_FIELDS = %w[return_to assoc_handle sig signed] - OPENID2_FIELDS = BASE_FIELDS + ['op_endpoint'] - OPENID1_FIELDS = BASE_FIELDS + ['identity'] + OPENID2_FIELDS = BASE_FIELDS + ["op_endpoint"] + OPENID1_FIELDS = BASE_FIELDS + ["identity"] OPENID1_SIGNED = %w[return_to identity] OPENID2_SIGNED = - OPENID1_SIGNED + %w[response_nonce claimed_id assoc_handle - op_endpoint] + OPENID1_SIGNED + %w[ + response_nonce + claimed_id + assoc_handle + op_endpoint + ] def mkMsg(ns, fields, signed_fields) msg = Message.new(ns) fields.each do |field| msg.set_arg(OPENID_NS, field, "don't care") end - msg.set_arg(OPENID_NS, 'signed', signed_fields.join(',')) if fields.member?('signed') + msg.set_arg(OPENID_NS, "signed", signed_fields.join(",")) if fields.member?("signed") msg end 1.times do # so as not to bleed into the outer namespace n = 0 - [[], - ['foo'], - %w[bar baz]].each do |signed_fields| + [ + [], + ["foo"], + %w[bar baz], + ].each do |signed_fields| test = lambda do msg = mkMsg(OPENID2_NS, OPENID2_FIELDS, signed_fields) idres = IdResHandler.new(msg, nil) + assert_equal(signed_fields, idres.send(:signed_list)) # Do it again to make sure logic for caching is correct assert_equal(signed_fields, idres.send(:signed_list)) @@ -55,9 +63,11 @@ def mkMsg(ns, fields, signed_fields) # test all missing fields for OpenID 1 and 2 1.times do - [['openid1', OPENID1_NS, OPENID1_FIELDS], - ['openid1', OPENID11_NS, OPENID1_FIELDS], - ['openid2', OPENID2_NS, OPENID2_FIELDS]].each_with_index do |(ver, ns, all_fields), i| + [ + ["openid1", OPENID1_NS, OPENID1_FIELDS], + ["openid1", OPENID11_NS, OPENID1_FIELDS], + ["openid2", OPENID2_NS, OPENID2_FIELDS], + ].each_with_index do |(ver, ns, all_fields), i| all_fields.each do |field| test = lambda do fields = all_fields.dup @@ -68,17 +78,23 @@ def mkMsg(ns, fields, signed_fields) idres.send(:check_for_fields) end end - define_method("test_#{i}_#{ver}_check_missing_#{field}", test) + define_method(:"test_#{i}_#{ver}_check_missing_#{field}", test) end end end # Test all missing signed for OpenID 1 and 2 1.times do - [['openid1', OPENID1_NS, OPENID1_FIELDS, OPENID1_SIGNED], - ['openid1', OPENID11_NS, OPENID1_FIELDS, OPENID1_SIGNED], - ['openid2', OPENID2_NS, OPENID2_FIELDS, - OPENID2_SIGNED]].each_with_index do |(ver, ns, all_fields, signed_fields), i| + [ + ["openid1", OPENID1_NS, OPENID1_FIELDS, OPENID1_SIGNED], + ["openid1", OPENID11_NS, OPENID1_FIELDS, OPENID1_SIGNED], + [ + "openid2", + OPENID2_NS, + OPENID2_FIELDS, + OPENID2_SIGNED, + ], + ].each_with_index do |(ver, ns, all_fields, signed_fields), i| signed_fields.each do |signed_field| test = lambda do fields = signed_fields.dup @@ -91,34 +107,39 @@ def mkMsg(ns, fields, signed_fields) idres.send(:check_for_fields) end end - define_method("test_#{i}_#{ver}_check_missing_signed_#{signed_field}", test) + define_method(:"test_#{i}_#{ver}_check_missing_signed_#{signed_field}", test) end end end def test_112 - args = { 'openid.assoc_handle' => 'fa1f5ff0-cde4-11dc-a183-3714bfd55ca8', - 'openid.claimed_id' => 'http://binkley.lan/user/test01', - 'openid.identity' => 'http://test01.binkley.lan/', - 'openid.mode' => 'id_res', - 'openid.ns' => 'http://specs.openid.net/auth/2.0', - 'openid.ns.pape' => 'http://specs.openid.net/extensions/pape/1.0', - 'openid.op_endpoint' => 'http://binkley.lan/server', - 'openid.pape.auth_policies' => 'none', - 'openid.pape.auth_time' => '2008-01-28T20:42:36Z', - 'openid.pape.nist_auth_level' => '0', - 'openid.response_nonce' => '2008-01-28T21:07:04Z99Q=', - 'openid.return_to' => 'http://binkley.lan:8001/process?janrain_nonce=2008-01-28T21%3A07%3A02Z0tMIKx', - 'openid.sig' => 'YJlWH4U6SroB1HoPkmEKx9AyGGg=', - 'openid.signed' => 'assoc_handle,identity,response_nonce,return_to,claimed_id,op_endpoint,pape.auth_time,ns.pape,pape.nist_auth_level,pape.auth_policies' } - assert_equal(args['openid.ns'], OPENID2_NS) + args = { + "openid.assoc_handle" => "fa1f5ff0-cde4-11dc-a183-3714bfd55ca8", + "openid.claimed_id" => "http://binkley.lan/user/test01", + "openid.identity" => "http://test01.binkley.lan/", + "openid.mode" => "id_res", + "openid.ns" => "http://specs.openid.net/auth/2.0", + "openid.ns.pape" => "http://specs.openid.net/extensions/pape/1.0", + "openid.op_endpoint" => "http://binkley.lan/server", + "openid.pape.auth_policies" => "none", + "openid.pape.auth_time" => "2008-01-28T20:42:36Z", + "openid.pape.nist_auth_level" => "0", + "openid.response_nonce" => "2008-01-28T21:07:04Z99Q=", + "openid.return_to" => "http://binkley.lan:8001/process?janrain_nonce=2008-01-28T21%3A07%3A02Z0tMIKx", + "openid.sig" => "YJlWH4U6SroB1HoPkmEKx9AyGGg=", + "openid.signed" => "assoc_handle,identity,response_nonce,return_to,claimed_id,op_endpoint,pape.auth_time,ns.pape,pape.nist_auth_level,pape.auth_policies", + } + + assert_equal(args["openid.ns"], OPENID2_NS) incoming = Message.from_post_args(args) + assert(incoming.is_openid2) idres = IdResHandler.new(incoming, nil) car = idres.send(:create_check_auth_request) expected_args = args.dup - expected_args['openid.mode'] = 'check_authentication' + expected_args["openid.mode"] = "check_authentication" expected = Message.from_post_args(expected_args) + assert(expected.is_openid2) assert_equal(expected, car) assert_equal(expected_args, car.to_post_args) @@ -127,7 +148,7 @@ def test_112 def test_no_signed_list msg = Message.new(OPENID2_NS) idres = IdResHandler.new(msg, nil) - assert_protocol_error('Response missing signed') do + assert_protocol_error("Response missing signed") do idres.send(:signed_list) end end @@ -151,7 +172,8 @@ class ReturnToArgsTest < Minitest::Test def check_return_to_args(query) idres = IdResHandler.new(Message.from_post_args(query), nil) class << idres - def verify_return_to_base(unused); end + def verify_return_to_base(unused) + end end idres.send(:verify_return_to) end @@ -164,57 +186,57 @@ def assert_bad_args(msg, query) def test_return_to_args_okay check_return_to_args({ - 'openid.mode' => 'id_res', - 'openid.return_to' => 'http://example.com/?foo=bar', - 'foo' => 'bar' - }) + "openid.mode" => "id_res", + "openid.return_to" => "http://example.com/?foo=bar", + "foo" => "bar", + }) end def test_unexpected_arg_okay - assert_bad_args('Unexpected parameter', { - 'openid.mode' => 'id_res', - 'openid.return_to' => 'http://example.com/', - 'foo' => 'bar' - }) + assert_bad_args("Unexpected parameter", { + "openid.mode" => "id_res", + "openid.return_to" => "http://example.com/", + "foo" => "bar", + }) end def test_return_to_mismatch - assert_bad_args('Message missing ret', { - 'openid.mode' => 'id_res', - 'openid.return_to' => 'http://example.com/?foo=bar' - }) + assert_bad_args("Message missing ret", { + "openid.mode" => "id_res", + "openid.return_to" => "http://example.com/?foo=bar", + }) assert_bad_args("Parameter 'foo' val", { - 'openid.mode' => 'id_res', - 'openid.return_to' => 'http://example.com/?foo=bar', - 'foo' => 'foos' - }) + "openid.mode" => "id_res", + "openid.return_to" => "http://example.com/?foo=bar", + "foo" => "foos", + }) end end class ReturnToVerifyTest < Minitest::Test def test_bad_return_to - return_to = 'http://some.url/path?foo=bar' + return_to = "http://some.url/path?foo=bar" m = Message.new(OPENID1_NS) - m.set_arg(OPENID_NS, 'mode', 'cancel') - m.set_arg(BARE_NS, 'foo', 'bar') + m.set_arg(OPENID_NS, "mode", "cancel") + m.set_arg(BARE_NS, "foo", "bar") # Scheme, authority, and path differences are checked by # IdResHandler.verify_return_to_base. Query args checked by # IdResHandler.verify_return_to_args. [ # Scheme only - 'https://some.url/path?foo=bar', + "https://some.url/path?foo=bar", # Authority only - 'http://some.url.invalid/path?foo=bar', + "http://some.url.invalid/path?foo=bar", # Path only - 'http://some.url/path_extra?foo=bar', + "http://some.url/path_extra?foo=bar", # Query args differ - 'http://some.url/path?foo=bar2', - 'http://some.url/path?foo2=bar' + "http://some.url/path?foo=bar2", + "http://some.url/path?foo2=bar", ].each do |bad| - m.set_arg(OPENID_NS, 'return_to', bad) + m.set_arg(OPENID_NS, "return_to", bad) idres = IdResHandler.new(m, return_to) assert_raises(ProtocolError) do idres.send(:verify_return_to) @@ -223,16 +245,18 @@ def test_bad_return_to end def test_good_return_to - base = 'http://example.janrain.com/path' - [[base, {}], - [base + '?another=arg', { 'another' => 'arg' }], - [base + '?another=arg#frag', { 'another' => 'arg' }], - ['HTTP' + base[4..-1], {}], - [base.sub('com', 'COM'), {}], - ['http://example.janrain.com:80/path', {}], - ['http://example.janrain.com/p%61th', {}], - ['http://example.janrain.com/./path', {}]].each do |return_to, args| - args['openid.return_to'] = return_to + base = "http://example.janrain.com/path" + [ + [base, {}], + [base + "?another=arg", {"another" => "arg"}], + [base + "?another=arg#frag", {"another" => "arg"}], + ["HTTP" + base[4..-1], {}], + [base.sub("com", "COM"), {}], + ["http://example.janrain.com:80/path", {}], + ["http://example.janrain.com/p%61th", {}], + ["http://example.janrain.com/./path", {}], + ].each do |return_to, args| + args["openid.return_to"] = return_to msg = Message.from_post_args(args) idres = IdResHandler.new(msg, base) idres.send(:verify_return_to) @@ -253,20 +277,20 @@ class CheckSigTest < Minitest::Test include TestUtil def setup - @assoc = GoodAssoc.new('{not_dumb}') + @assoc = GoodAssoc.new("{not_dumb}") @store = Store::Memory.new - @server_url = 'http://server.url/' + @server_url = "http://server.url/" @endpoint = DummyEndpoint.new(@server_url) @store.store_association(@server_url, @assoc) @message = Message.from_post_args({ - 'openid.mode' => 'id_res', - 'openid.identity' => '=example', - 'openid.sig' => GOODSIG, - 'openid.assoc_handle' => @assoc.handle, - 'openid.signed' => 'mode,identity,assoc_handle,signed', - 'frobboz' => 'banzit' - }) + "openid.mode" => "id_res", + "openid.identity" => "=example", + "openid.sig" => GOODSIG, + "openid.assoc_handle" => @assoc.handle, + "openid.signed" => "mode,identity,assoc_handle,signed", + "frobboz" => "banzit", + }) end def call_idres_method(method_name) @@ -281,7 +305,7 @@ def call_check_sig(&proc) end def no_check_auth(idres) - idres.instance_def(:check_auth) { raise 'Called check_auth' } + idres.instance_def(:check_auth) { raise "Called check_auth" } end def test_sign_good @@ -289,20 +313,21 @@ def test_sign_good end def test_bad_sig - @message.set_arg(OPENID_NS, 'sig', 'bad sig!') - assert_protocol_error('Bad signature') do + @message.set_arg(OPENID_NS, "sig", "bad sig!") + assert_protocol_error("Bad signature") do call_check_sig(&method(:no_check_auth)) end end def test_check_auth_ok - @message.set_arg(OPENID_NS, 'assoc_handle', 'dumb-handle') + @message.set_arg(OPENID_NS, "assoc_handle", "dumb-handle") check_auth_called = false call_check_sig do |idres| idres.instance_def(:check_auth) do check_auth_called = true end end + assert(check_auth_called) end @@ -314,13 +339,14 @@ def test_check_auth_ok_no_store check_auth_called = true end end + assert(check_auth_called) end def test_expired_assoc @assoc.expires_in = -1 @store.store_association(@server_url, @assoc) - assert_protocol_error('Association with') do + assert_protocol_error("Association with") do call_check_sig(&method(:no_check_auth)) end end @@ -332,10 +358,10 @@ def call_check_auth(&proc) end def test_check_auth_create_fail - assert_protocol_error('Could not generate') do + assert_protocol_error("Could not generate") do call_check_auth do |idres| idres.instance_def(:create_check_auth_request) do - raise Message::KeyNotFound, 'Testing' + raise Message::KeyNotFound, "Testing" end end end @@ -354,6 +380,7 @@ def test_check_auth_okay idres.instance_def(:create_check_auth_request) do :req end + idres.instance_def(:process_check_auth_response) do |resp| me.assert_equal(:expected_response, resp) end @@ -370,12 +397,12 @@ def test_check_auth_process_fail end OpenID.with_method_overridden(:make_kv_post, send_resp) do - assert_protocol_error('Testing') do + assert_protocol_error("Testing") do call_check_auth do |idres| idres.instance_def(:create_check_auth_request) { :req } idres.instance_def(:process_check_auth_response) do |resp| me.assert_equal(:expected_response, resp) - raise ProtocolError, 'Testing' + raise ProtocolError, "Testing" end end end @@ -391,14 +418,15 @@ def test_check_auth_process_fail call_idres_method(:create_check_auth_request) {} end end - define_method("test_create_check_auth_missing_#{field}", test) + define_method(:"test_create_check_auth_missing_#{field}", test) end end def test_create_check_auth_request_success ca_msg = call_idres_method(:create_check_auth_request) {} expected = @message.copy - expected.set_arg(OPENID_NS, 'mode', 'check_authentication') + expected.set_arg(OPENID_NS, "mode", "check_authentication") + assert_equal(expected, ca_msg) end end @@ -409,11 +437,11 @@ class CheckAuthResponseTest < Minitest::Test def setup @message = Message.from_openid_args({ - 'is_valid' => 'true' - }) + "is_valid" => "true", + }) @assoc = GoodAssoc.new @store = Store::Memory.new - @server_url = 'http://invalid/' + @server_url = "http://invalid/" @endpoint = DummyEndpoint.new(@server_url) @idres = IdResHandler.new(nil, nil, @store, @endpoint) end @@ -428,7 +456,7 @@ def test_valid def test_invalid %w[false monkeys].each do - @message.set_arg(OPENID_NS, 'is_valid', 'false') + @message.set_arg(OPENID_NS, "is_valid", "false") assert_protocol_error("Server #{@server_url} responds") do assert_log_matches { call_process } end @@ -436,14 +464,14 @@ def test_invalid end def test_valid_invalidate - @message.set_arg(OPENID_NS, 'invalidate_handle', 'cheese') + @message.set_arg(OPENID_NS, "invalidate_handle", "cheese") assert_log_matches("Received 'invalidate_handle'") { call_process } end def test_invalid_invalidate - @message.set_arg(OPENID_NS, 'invalidate_handle', 'cheese') + @message.set_arg(OPENID_NS, "invalidate_handle", "cheese") %w[false monkeys].each do - @message.set_arg(OPENID_NS, 'is_valid', 'false') + @message.set_arg(OPENID_NS, "is_valid", "false") assert_protocol_error("Server #{@server_url} responds") do assert_log_matches("Received 'invalidate_handle'") do call_process @@ -454,9 +482,11 @@ def test_invalid_invalidate def test_invalidate_no_store @idres.instance_variable_set(:@store, nil) - @message.set_arg(OPENID_NS, 'invalidate_handle', 'cheese') - assert_log_matches("Received 'invalidate_handle'", - 'Unexpectedly got "invalidate_handle"') do + @message.set_arg(OPENID_NS, "invalidate_handle", "cheese") + assert_log_matches( + "Received 'invalidate_handle'", + 'Unexpectedly got "invalidate_handle"', + ) do call_process end end @@ -488,57 +518,70 @@ def call_check_nonce(post_args, succeed = false) end def test_openid1_success - [{}, - { 'openid.ns' => OPENID1_NS }, - { 'openid.ns' => OPENID11_NS }].each do |args| - call_check_nonce({ 'rp_nonce' => @nonce }.merge(args), true) + [ + {}, + {"openid.ns" => OPENID1_NS}, + {"openid.ns" => OPENID11_NS}, + ].each do |args| + call_check_nonce({"rp_nonce" => @nonce}.merge(args), true) end end def test_openid1_missing - [{}, - { 'openid.ns' => OPENID1_NS }, - { 'openid.ns' => OPENID11_NS }].each do |args| - assert_protocol_error('Nonce missing') { call_check_nonce(args) } + [ + {}, + {"openid.ns" => OPENID1_NS}, + {"openid.ns" => OPENID11_NS}, + ].each do |args| + assert_protocol_error("Nonce missing") { call_check_nonce(args) } end end def test_openid2_ignore_rp_nonce - assert_protocol_error('Nonce missing') do - call_check_nonce({ 'rp_nonce' => @nonce, - 'openid.ns' => OPENID2_NS }) + assert_protocol_error("Nonce missing") do + call_check_nonce({ + "rp_nonce" => @nonce, + "openid.ns" => OPENID2_NS, + }) end end def test_openid2_success - call_check_nonce({ 'openid.response_nonce' => @nonce, - 'openid.ns' => OPENID2_NS }, true) + call_check_nonce( + { + "openid.response_nonce" => @nonce, + "openid.ns" => OPENID2_NS, + }, + true, + ) end def test_openid1_ignore_response_nonce - [{}, - { 'openid.ns' => OPENID1_NS }, - { 'openid.ns' => OPENID11_NS }].each do |args| - assert_protocol_error('Nonce missing') do - call_check_nonce({ 'openid.response_nonce' => @nonce }.merge(args)) + [ + {}, + {"openid.ns" => OPENID1_NS}, + {"openid.ns" => OPENID11_NS}, + ].each do |args| + assert_protocol_error("Nonce missing") do + call_check_nonce({"openid.response_nonce" => @nonce}.merge(args)) end end end def test_no_store @store = nil - call_check_nonce({ 'rp_nonce' => @nonce }) + call_check_nonce({"rp_nonce" => @nonce}) end def test_already_used - assert_protocol_error('Nonce already used') do - call_check_nonce({ 'rp_nonce' => @nonce }, false) + assert_protocol_error("Nonce already used") do + call_check_nonce({"rp_nonce" => @nonce}, false) end end def test_malformed_nonce - assert_protocol_error('Malformed nonce') do - call_check_nonce({ 'rp_nonce' => 'whee!' }) + assert_protocol_error("Malformed nonce") do + call_check_nonce({"rp_nonce" => "whee!"}) end end end @@ -569,30 +612,34 @@ def assert_verify_protocol_error(error_prefix, openid_args) end def test_openid1_no_local_id - @endpoint.claimed_id = 'http://invalid/' - assert_verify_protocol_error('Missing required field: '\ - "<#{OPENID1_NS}>identity", {}) + @endpoint.claimed_id = "http://invalid/" + + assert_verify_protocol_error( + "Missing required field: " \ + "<#{OPENID1_NS}>identity", + {}, + ) end def test_openid1_no_endpoint @endpoint = nil assert_raises(ProtocolError) do - call_verify({ 'identity' => 'snakes on a plane' }) + call_verify({"identity" => "snakes on a plane"}) end end def test_openid1_fallback_1_0 [OPENID1_NS, OPENID11_NS].each do |openid1_ns| - claimed_id = 'http://claimed.id/' + claimed_id = "http://claimed.id/" @endpoint = nil resp_mesg = Message.from_openid_args({ - 'ns' => openid1_ns, - 'identity' => claimed_id - }) + "ns" => openid1_ns, + "identity" => claimed_id, + }) # Pass the OpenID 1 claimed_id this way since we're # passing None for the endpoint. - resp_mesg.set_arg(BARE_NS, 'openid1_claimed_id', claimed_id) + resp_mesg.set_arg(BARE_NS, "openid1_claimed_id", claimed_id) # We expect the OpenID 1 discovery verification to try # matching the discovered endpoint against the 1.1 type @@ -603,63 +650,74 @@ def test_openid1_fallback_1_0 expected_endpoint.claimed_id = claimed_id hacked_discover = proc do |_claimed_id| - ['unused', [expected_endpoint]] + ["unused", [expected_endpoint]] end idres = IdResHandler.new(resp_mesg, nil, nil, @endpoint) - assert_log_matches('Performing discovery') do + assert_log_matches("Performing discovery") do OpenID.with_method_overridden(:discover, hacked_discover) do idres.send(:verify_discovery_results) end end actual_endpoint = idres.instance_variable_get(:@endpoint) + assert_equal(actual_endpoint, expected_endpoint) end end def test_openid2_no_op_endpoint - assert_protocol_error('Missing required field: '\ - "<#{OPENID2_NS}>op_endpoint") do - call_verify({ 'ns' => OPENID2_NS }) + assert_protocol_error("Missing required field: " \ + "<#{OPENID2_NS}>op_endpoint") do + call_verify({"ns" => OPENID2_NS}) end end def test_openid2_local_id_no_claimed - assert_verify_protocol_error('openid.identity is present without', - { 'ns' => OPENID2_NS, - 'op_endpoint' => 'Phone Home', - 'identity' => 'Jorge Lius Borges' }) + assert_verify_protocol_error( + "openid.identity is present without", + { + "ns" => OPENID2_NS, + "op_endpoint" => "Phone Home", + "identity" => "Jorge Lius Borges", + }, + ) end def test_openid2_no_local_id_claimed assert_log_matches do - assert_protocol_error('openid.claimed_id is present without') do - call_verify({ 'ns' => OPENID2_NS, - 'op_endpoint' => 'Phone Home', - 'claimed_id' => 'Manuel Noriega' }) + assert_protocol_error("openid.claimed_id is present without") do + call_verify({ + "ns" => OPENID2_NS, + "op_endpoint" => "Phone Home", + "claimed_id" => "Manuel Noriega", + }) end end end def test_openid2_no_identifiers - op_endpoint = 'Phone Home' + op_endpoint = "Phone Home" result_endpoint = assert_log_matches do - call_verify({ 'ns' => OPENID2_NS, - 'op_endpoint' => op_endpoint }) + call_verify({ + "ns" => OPENID2_NS, + "op_endpoint" => op_endpoint, + }) end assert(result_endpoint.is_op_identifier) assert_equal(op_endpoint, result_endpoint.server_url) - assert(result_endpoint.claimed_id.nil?) + assert_nil(result_endpoint.claimed_id) end def test_openid2_no_endpoint_does_disco endpoint = OpenIDServiceEndpoint.new - endpoint.claimed_id = 'monkeysoft' + endpoint.claimed_id = "monkeysoft" @endpoint = nil - result = assert_log_matches('No pre-discovered') do - call_verify_modify({ 'ns' => OPENID2_NS, - 'identity' => 'sour grapes', - 'claimed_id' => 'monkeysoft', - 'op_endpoint' => 'Phone Home' }) do |idres| + result = assert_log_matches("No pre-discovered") do + call_verify_modify({ + "ns" => OPENID2_NS, + "identity" => "sour grapes", + "claimed_id" => "monkeysoft", + "op_endpoint" => "Phone Home", + }) do |idres| idres.instance_def(:discover_and_verify) do |_claimed_id, _endpoints| @endpoint = endpoint end @@ -669,51 +727,55 @@ def test_openid2_no_endpoint_does_disco end def test_openid2_mismatched_does_disco - @endpoint.claimed_id = 'nothing special, but different' - @endpoint.local_id = 'green cheese' + @endpoint.claimed_id = "nothing special, but different" + @endpoint.local_id = "green cheese" endpoint = OpenIDServiceEndpoint.new - endpoint.claimed_id = 'monkeysoft' - - result = assert_log_matches('Error attempting to use stored', - 'Attempting discovery') do - call_verify_modify({ 'ns' => OPENID2_NS, - 'identity' => 'sour grapes', - 'claimed_id' => 'monkeysoft', - 'op_endpoint' => 'Green Cheese' }) do |idres| + endpoint.claimed_id = "monkeysoft" + + result = assert_log_matches( + "Error attempting to use stored", + "Attempting discovery", + ) do + call_verify_modify({ + "ns" => OPENID2_NS, + "identity" => "sour grapes", + "claimed_id" => "monkeysoft", + "op_endpoint" => "Green Cheese", + }) do |idres| idres.instance_def(:discover_and_verify) do |_claimed_id, _endpoints| @endpoint = endpoint end end end - assert(endpoint.equal?(result)) + assert_same(endpoint, result) end def test_verify_discovery_single_claimed_id_mismatch idres = IdResHandler.new(nil, nil) - @endpoint.local_id = 'my identity' - @endpoint.claimed_id = 'http://i-am-sam/' - @endpoint.server_url = 'Phone Home' + @endpoint.local_id = "my identity" + @endpoint.claimed_id = "http://i-am-sam/" + @endpoint.server_url = "Phone Home" @endpoint.type_uris = [OPENID_2_0_TYPE] to_match = @endpoint.dup - to_match.claimed_id = 'http://something.else/' + to_match.claimed_id = "http://something.else/" e = assert_raises(ProtocolError) do idres.send(:verify_discovery_single, @endpoint, to_match) end - assert(e.to_s =~ /different subjects/) + assert_match(/different subjects/, e.to_s) end def test_openid1_1_verify_discovery_single_no_server_url idres = IdResHandler.new(nil, nil) - @endpoint.local_id = 'my identity' - @endpoint.claimed_id = 'http://i-am-sam/' - @endpoint.server_url = 'Phone Home' + @endpoint.local_id = "my identity" + @endpoint.claimed_id = "http://i-am-sam/" + @endpoint.server_url = "Phone Home" @endpoint.type_uris = [OPENID_1_1_TYPE] to_match = @endpoint.dup - to_match.claimed_id = 'http://i-am-sam/' + to_match.claimed_id = "http://i-am-sam/" to_match.type_uris = [OPENID_1_1_TYPE] to_match.server_url = nil @@ -721,36 +783,40 @@ def test_openid1_1_verify_discovery_single_no_server_url end def test_openid2_use_pre_discovered - @endpoint.local_id = 'my identity' - @endpoint.claimed_id = 'http://i-am-sam/' - @endpoint.server_url = 'Phone Home' + @endpoint.local_id = "my identity" + @endpoint.claimed_id = "http://i-am-sam/" + @endpoint.server_url = "Phone Home" @endpoint.type_uris = [OPENID_2_0_TYPE] result = assert_log_matches do - call_verify({ 'ns' => OPENID2_NS, - 'identity' => @endpoint.local_id, - 'claimed_id' => @endpoint.claimed_id, - 'op_endpoint' => @endpoint.server_url }) + call_verify({ + "ns" => OPENID2_NS, + "identity" => @endpoint.local_id, + "claimed_id" => @endpoint.claimed_id, + "op_endpoint" => @endpoint.server_url, + }) end - assert(result.equal?(@endpoint)) + assert_same(result, @endpoint) end def test_openid2_use_pre_discovered_wrong_type - text = 'verify failed' + text = "verify failed" me = self - @endpoint.local_id = 'my identity' - @endpoint.claimed_id = 'i am sam' - @endpoint.server_url = 'Phone Home' + @endpoint.local_id = "my identity" + @endpoint.claimed_id = "i am sam" + @endpoint.server_url = "Phone Home" @endpoint.type_uris = [OPENID_1_1_TYPE] endpoint = @endpoint - msg = Message.from_openid_args({ 'ns' => OPENID2_NS, - 'identity' => @endpoint.local_id, - 'claimed_id' => + msg = Message.from_openid_args({ + "ns" => OPENID2_NS, + "identity" => @endpoint.local_id, + "claimed_id" => @endpoint.claimed_id, - 'op_endpoint' => - @endpoint.server_url }) + "op_endpoint" => + @endpoint.server_url, + }) idres = IdResHandler.new(msg, nil, nil, @endpoint) idres.extend(InstanceDefExtension) @@ -759,8 +825,10 @@ def test_openid2_use_pre_discovered_wrong_type me.assert_equal(claimed_id, endpoint.claimed_id) raise ProtocolError, text end - assert_log_matches('Error attempting to use stored', - 'Attempting discovery') do + assert_log_matches( + "Error attempting to use stored", + "Attempting discovery", + ) do assert_protocol_error(text) do idres.send(:verify_discovery_results) end @@ -768,31 +836,37 @@ def test_openid2_use_pre_discovered_wrong_type end def test_openid1_use_pre_discovered - @endpoint.local_id = 'my identity' - @endpoint.claimed_id = 'http://i-am-sam/' - @endpoint.server_url = 'Phone Home' + @endpoint.local_id = "my identity" + @endpoint.claimed_id = "http://i-am-sam/" + @endpoint.server_url = "Phone Home" @endpoint.type_uris = [OPENID_1_1_TYPE] result = assert_log_matches do - call_verify({ 'ns' => OPENID1_NS, - 'identity' => @endpoint.local_id }) + call_verify({ + "ns" => OPENID1_NS, + "identity" => @endpoint.local_id, + }) end - assert(result.equal?(@endpoint)) + assert_same(result, @endpoint) end def test_openid1_use_pre_discovered_wrong_type verified_error = Class.new(Exception) - @endpoint.local_id = 'my identity' - @endpoint.claimed_id = 'i am sam' - @endpoint.server_url = 'Phone Home' + @endpoint.local_id = "my identity" + @endpoint.claimed_id = "i am sam" + @endpoint.server_url = "Phone Home" @endpoint.type_uris = [OPENID_2_0_TYPE] - assert_log_matches('Error attempting to use stored', - 'Attempting discovery') do + assert_log_matches( + "Error attempting to use stored", + "Attempting discovery", + ) do assert_raises(verified_error) do - call_verify_modify({ 'ns' => OPENID1_NS, - 'identity' => @endpoint.local_id }) do |idres| + call_verify_modify({ + "ns" => OPENID1_NS, + "identity" => @endpoint.local_id, + }) do |idres| idres.instance_def(:discover_and_verify) do |_claimed_id, _endpoints| raise verified_error end @@ -802,19 +876,21 @@ def test_openid1_use_pre_discovered_wrong_type end def test_openid2_fragment - claimed_id = 'http://unittest.invalid/' - claimed_id_frag = claimed_id + '#fragment' + claimed_id = "http://unittest.invalid/" + claimed_id_frag = claimed_id + "#fragment" - @endpoint.local_id = 'my identity' + @endpoint.local_id = "my identity" @endpoint.claimed_id = claimed_id - @endpoint.server_url = 'Phone Home' + @endpoint.server_url = "Phone Home" @endpoint.type_uris = [OPENID_2_0_TYPE] result = assert_log_matches do - call_verify({ 'ns' => OPENID2_NS, - 'identity' => @endpoint.local_id, - 'claimed_id' => claimed_id_frag, - 'op_endpoint' => @endpoint.server_url }) + call_verify({ + "ns" => OPENID2_NS, + "identity" => @endpoint.local_id, + "claimed_id" => claimed_id_frag, + "op_endpoint" => @endpoint.server_url, + }) end %i[local_id server_url type_uris].each do |sym| @@ -826,13 +902,13 @@ def test_openid2_fragment def test_endpoint_without_local_id # An endpoint like this with no local_id is generated as a result of # e.g. Yadis discovery with no LocalID tag. - @endpoint.server_url = 'http://localhost:8000/openidserver' - @endpoint.claimed_id = 'http://localhost:8000/id/id-jo' + @endpoint.server_url = "http://localhost:8000/openidserver" + @endpoint.claimed_id = "http://localhost:8000/id/id-jo" to_match = OpenIDServiceEndpoint.new - to_match.server_url = 'http://localhost:8000/openidserver' - to_match.claimed_id = 'http://localhost:8000/id/id-jo' - to_match.local_id = 'http://localhost:8000/id/id-jo' + to_match.server_url = "http://localhost:8000/openidserver" + to_match.claimed_id = "http://localhost:8000/id/id-jo" + to_match.local_id = "http://localhost:8000/id/id-jo" idres = IdResHandler.new(nil, nil) assert_log_matches do @@ -844,9 +920,9 @@ def test_endpoint_without_local_id class IdResTopLevelTest < Minitest::Test def test_id_res endpoint = OpenIDServiceEndpoint.new - endpoint.server_url = 'http://invalid/server' - endpoint.claimed_id = 'http://my.url/' - endpoint.local_id = 'http://invalid/username' + endpoint.server_url = "http://invalid/server" + endpoint.claimed_id = "http://my.url/" + endpoint.local_id = "http://invalid/username" endpoint.type_uris = [OPENID_2_0_TYPE] assoc = GoodAssoc.new @@ -864,23 +940,30 @@ def test_id_res return_to ] - return_to = 'http://return.to/' + return_to = "http://return.to/" args = { - 'ns' => OPENID2_NS, - 'return_to' => return_to, - 'claimed_id' => endpoint.claimed_id, - 'identity' => endpoint.local_id, - 'assoc_handle' => assoc.handle, - 'op_endpoint' => endpoint.server_url, - 'response_nonce' => Nonce.mk_nonce, - 'signed' => signed_fields.join(','), - 'sig' => GOODSIG + "ns" => OPENID2_NS, + "return_to" => return_to, + "claimed_id" => endpoint.claimed_id, + "identity" => endpoint.local_id, + "assoc_handle" => assoc.handle, + "op_endpoint" => endpoint.server_url, + "response_nonce" => Nonce.mk_nonce, + "signed" => signed_fields.join(","), + "sig" => GOODSIG, } msg = Message.from_openid_args(args) - idres = OpenID::Consumer::IdResHandler.new(msg, return_to, - store, endpoint) - assert_equal(idres.signed_fields, - signed_fields.map { |f| 'openid.' + f }) + idres = OpenID::Consumer::IdResHandler.new( + msg, + return_to, + store, + endpoint, + ) + + assert_equal( + idres.signed_fields, + signed_fields.map { |f| "openid." + f }, + ) end end @@ -892,14 +975,14 @@ class DiscoverAndVerifyTest < Minitest::Test def test_no_services me = self disco = proc do |e| - me.assert_equal(e, :sentinel) + me.assert_equal(:sentinel, e) [:undefined, []] end endpoint = OpenIDServiceEndpoint.new endpoint.claimed_id = :sentinel idres = IdResHandler.new(nil, nil) - assert_log_matches('Performing discovery on') do - assert_protocol_error('No OpenID information found') do + assert_log_matches("Performing discovery on") do + assert_protocol_error("No OpenID information found") do OpenID.with_method_overridden(:discover, disco) do idres.send(:discover_and_verify, :sentinel, [endpoint]) end @@ -916,10 +999,14 @@ def test_no_services endpoint = OpenIDServiceEndpoint.new endpoint.claimed_id = :sentinel idres = IdResHandler.new(nil, nil) - assert_log_matches('Discovery verification failure') do - assert_protocol_error('No matching endpoint') do - idres.send(:verify_discovered_services, - 'http://bogus.id/', [], [endpoint]) + assert_log_matches("Discovery verification failure") do + assert_protocol_error("No matching endpoint") do + idres.send( + :verify_discovered_services, + "http://bogus.id/", + [], + [endpoint], + ) end end end diff --git a/test/test_kvform.rb b/test/test_kvform.rb index 9c03b94..7e114f9 100644 --- a/test/test_kvform.rb +++ b/test/test_kvform.rb @@ -1,7 +1,7 @@ -require 'minitest/autorun' -require 'openid/kvform' -require 'openid/util' -require 'util' +require_relative "test_helper" +require "openid/kvform" +require "openid/util" +require_relative "util" include OpenID @@ -11,14 +11,22 @@ class KVFormTests < Minitest::Test def test_kvdict [ # (kvform, parsed dictionary, expected warnings) - ['', {}, 0], + ["", {}, 0], ["\n \n \n", {}, 0], - ["college:harvey mudd\n", { 'college' => 'harvey mudd' }, 0], - ["city:claremont\nstate:CA\n", - { 'city' => 'claremont', 'state' => 'CA' }, 0], - ["is_valid:true\ninvalidate_handle:{HMAC-SHA1:2398410938412093}\n", - { 'is_valid' => 'true', - 'invalidate_handle' => '{HMAC-SHA1:2398410938412093}' }, 0], + ["college:harvey mudd\n", {"college" => "harvey mudd"}, 0], + [ + "city:claremont\nstate:CA\n", + {"city" => "claremont", "state" => "CA"}, + 0, + ], + [ + "is_valid:true\ninvalidate_handle:{HMAC-SHA1:2398410938412093}\n", + { + "is_valid" => "true", + "invalidate_handle" => "{HMAC-SHA1:2398410938412093}", + }, + 0, + ], # Warnings from lines with no colon: ["x\n", {}, 1], @@ -29,17 +37,17 @@ def test_kvdict ["x\n\n", {}, 1], # Warning from empty key - [":\n", { '' => '' }, 1], - [":missing key\n", { '' => 'missing key' }, 1], + [":\n", {"" => ""}, 1], + [":missing key\n", {"" => "missing key"}, 1], # Warnings from leading or trailing whitespace in key or value - [" street:foothill blvd\n", { 'street' => 'foothill blvd' }, 1], - ["major: computer science\n", { 'major' => 'computer science' }, 1], - [" dorm : east \n", { 'dorm' => 'east' }, 2], + [" street:foothill blvd\n", {"street" => "foothill blvd"}, 1], + ["major: computer science\n", {"major" => "computer science"}, 1], + [" dorm : east \n", {"dorm" => "east"}, 2], # Warnings from missing trailing newline - ['e^(i*pi)+1:0', { 'e^(i*pi)+1' => '0' }, 1], - ["east:west\nnorth:south", { 'east' => 'west', 'north' => 'south' }, 1] + ["e^(i*pi)+1:0", {"e^(i*pi)+1" => "0"}, 1], + ["east:west\nnorth:south", {"east" => "west", "north" => "south"}, 1], ].each do |case_| _run_kvdictTest(case_) end @@ -79,23 +87,35 @@ def _run_kvdictTest(case_) def test_kvseq [ - [[], '', 0], + [[], "", 0], [[%w[openid useful], %w[a b]], "openid:useful\na:b\n", 0], # Warnings about leading whitespace - [[[' openid', 'useful'], ['a', 'b']], " openid:useful\na:b\n", 2], + [[[" openid", "useful"], ["a", "b"]], " openid:useful\na:b\n", 2], # Warnings about leading and trailing whitespace - [[[' openid ', ' useful '], - [' a ', ' b ']], " openid : useful \n a : b \n", 8], + [ + [ + [" openid ", " useful "], + [" a ", " b "], + ], + " openid : useful \n a : b \n", + 8, + ], # warnings about leading and trailing whitespace, but not about # internal whitespace. - [[[' open id ', ' use ful '], - [' a ', ' b ']], " open id : use ful \n a : b \n", 8], - - [[%w[foo bar]], "foo:bar\n", 0] + [ + [ + [" open id ", " use ful "], + [" a ", " b "], + ], + " open id : use ful \n a : b \n", + 8, + ], + + [[%w[foo bar]], "foo:bar\n", 0], ].each do |case_| _run_kvseqTest(case_) end @@ -115,7 +135,7 @@ def _run_kvseqTest(case_) actual = Util.seq_to_kv(seq) assert_equal(kvform, actual) - assert actual.is_a?(String) + assert_kind_of(String, actual) # Strict mode should raise KVFormError instead of logging # messages @@ -140,9 +160,9 @@ def test_kvexc [%W[openid use\nful]], [%W[open\nid useful]], [%W[open\nid use\nful]], - [['open:id', 'useful']], - [['foo', 'bar'], ["ba\n d", 'seed']], - [['foo', 'bar'], ['bad:', 'seed']] + [["open:id", "useful"]], + [["foo", "bar"], ["ba\n d", "seed"]], + [["foo", "bar"], ["bad:", "seed"]], ].each do |case_| _run_kvexcTest(case_) end @@ -159,7 +179,8 @@ def _run_kvexcTest(case_) def test_convert assert_log_line_count(2) do result = Util.seq_to_kv([[1, 1]]) - assert_equal(result, "1:1\n") + + assert_equal("1:1\n", result) end end end diff --git a/test/test_kvpost.rb b/test/test_kvpost.rb index 3c1d67f..555c520 100644 --- a/test/test_kvpost.rb +++ b/test/test_kvpost.rb @@ -1,8 +1,8 @@ -require 'minitest/autorun' -require 'testutil' -require 'openid/kvpost' -require 'openid/kvform' -require 'openid/message' +require_relative "test_helper" +require_relative "testutil" +require "openid/kvpost" +require "openid/kvform" +require "openid/message" module OpenID class KVPostTestCase < Minitest::Test @@ -13,20 +13,23 @@ def mk_resp(status, resp_hash) end def test_msg_from_http_resp_success - resp = mk_resp(200, { 'mode' => 'seitan' }) - msg = Message.from_http_response(resp, 'http://invalid/') - assert_equal({ 'openid.mode' => 'seitan' }, msg.to_post_args) + resp = mk_resp(200, {"mode" => "seitan"}) + msg = Message.from_http_response(resp, "http://invalid/") + + assert_equal({"openid.mode" => "seitan"}, msg.to_post_args) end def test_400 - args = { 'error' => 'I ate too much cheese', - 'error_code' => 'sadness' } + args = { + "error" => "I ate too much cheese", + "error_code" => "sadness", + } resp = mk_resp(400, args) begin - val = Message.from_http_response(resp, 'http://invalid/') + val = Message.from_http_response(resp, "http://invalid/") rescue ServerError => e - assert_equal(e.error_text, 'I ate too much cheese') - assert_equal(e.error_code, 'sadness') + assert_equal("I ate too much cheese", e.error_text) + assert_equal("sadness", e.error_code) assert_equal(e.message.to_args, args) else raise("Expected exception. Got: #{val}") @@ -34,11 +37,13 @@ def test_400 end def test_500 - args = { 'error' => 'I ate too much cheese', - 'error_code' => 'sadness' } + args = { + "error" => "I ate too much cheese", + "error_code" => "sadness", + } resp = mk_resp(500, args) assert_raises(HTTPStatusError) do - Message.from_http_response(resp, 'http://invalid') + Message.from_http_response(resp, "http://invalid") end end @@ -51,7 +56,7 @@ def make_kv_post_with_response(status, args) end with_fetcher(mock_fetcher.new) do - OpenID.make_kv_post(Message.from_openid_args(args), 'http://invalid/') + OpenID.make_kv_post(Message.from_openid_args(args), "http://invalid/") end end diff --git a/test/test_linkparse.rb b/test/test_linkparse.rb index 5dd0dfc..9479120 100644 --- a/test/test_linkparse.rb +++ b/test/test_linkparse.rb @@ -1,6 +1,6 @@ -require 'minitest/autorun' -require 'testutil' -require 'openid/consumer/html_parse' +require_relative "test_helper" +require_relative "testutil" +require "openid/consumer/html_parse" class LinkParseTestCase < Minitest::Test include OpenID::TestDataMixin @@ -12,7 +12,7 @@ def attr_cmp(expected, found) ek, ev = ep fk, fv = f.shift ok = false - while ek[-1] == '*'[0] # optional entry detected + while ek[-1] == "*"[0] # optional entry detected if fk == ek[0...-1] and fv == ev # optional entry found ok = true break @@ -34,55 +34,58 @@ def attr_cmp(expected, found) def test_attrcmp good = [ - [{ 'foo' => 'bar' }, { 'foo' => 'bar' }], - [{ 'foo*' => 'bar' }, { 'foo' => 'bar' }], - [{ 'foo' => 'bar', 'bam*' => 'baz' }, { 'foo' => 'bar' }], - [{ 'foo' => 'bar', 'bam*' => 'baz', 'tak' => 'tal' }, - { 'foo' => 'bar', 'tak' => 'tal' }] + [{"foo" => "bar"}, {"foo" => "bar"}], + [{"foo*" => "bar"}, {"foo" => "bar"}], + [{"foo" => "bar", "bam*" => "baz"}, {"foo" => "bar"}], + [ + {"foo" => "bar", "bam*" => "baz", "tak" => "tal"}, + {"foo" => "bar", "tak" => "tal"}, + ], ] bad = [ - [{}, { 'foo' => 'bar' }], - [{ 'foo' => 'bar' }, { 'bam' => 'baz' }], - [{ 'foo' => 'bar' }, {}], - [{ 'foo*' => 'bar' }, { 'foo*' => 'bar' }], - [{ 'foo' => 'bar', 'tak' => 'tal' }, { 'foo' => 'bar' }] + [{}, {"foo" => "bar"}], + [{"foo" => "bar"}, {"bam" => "baz"}], + [{"foo" => "bar"}, {}], + [{"foo*" => "bar"}, {"foo*" => "bar"}], + [{"foo" => "bar", "tak" => "tal"}, {"foo" => "bar"}], ] + good.each { |c| assert(attr_cmp(c[0], c[1]), c.inspect) } bad.each { |c| assert(!attr_cmp(c[0], c[1]), c.inspect) } end def test_linkparse - cases = read_data_file('linkparse.txt', false).split("\n\n\n") + cases = read_data_file("linkparse.txt", false).split("\n\n\n") numtests = nil testnum = 0 cases.each do |c| headers, html = c.split("\n\n", 2) expected_links = [] - name = '' + name = "" testnum += 1 headers.split("\n").each do |h| - k, v = h.split(':', 2) - v = '' if v.nil? - if k == 'Num Tests' - assert(numtests.nil?, 'datafile parsing error: there can be only one NumTests') + k, v = h.split(":", 2) + v = "" if v.nil? + if k == "Num Tests" + assert_nil(numtests, "datafile parsing error: there can be only one NumTests") numtests = v.to_i testnum = 0 next - elsif k == 'Name' + elsif k == "Name" name = v.strip - elsif ['Link', 'Link*'].include?(k) + elsif ["Link", "Link*"].include?(k) attrs = {} v.strip.split.each do |a| - kk, vv = a.split('=') + kk, vv = a.split("=") attrs[kk] = vv end - expected_links << [k == 'Link*', attrs] + expected_links << [k == "Link*", attrs] else assert(false, "datafile parsing error: bad header #{h}") end end - html = html.force_encoding('UTF-8') if html.respond_to? :force_encoding + html = html.force_encoding("UTF-8") if html.respond_to?(:force_encoding) links = OpenID.parse_link_attrs(html) found = links.dup @@ -90,17 +93,19 @@ def test_linkparse while (fl = found.shift) optional, el = expected.shift optional, el = expected.shift while optional and !attr_cmp(el, fl) and !expected.empty? + assert(attr_cmp(el, fl), "#{name}: #{fl.inspect} does not match #{el.inspect}") end end - assert_equal(numtests, testnum, 'Number of tests') + + assert_equal(numtests, testnum, "Number of tests") # test handling of invalid UTF-8 byte sequences - html = if ''.respond_to? :force_encoding - "hello joel\255".force_encoding('UTF-8') - else - "hello joel\255" - end + html = if "".respond_to?(:force_encoding) + "hello joel\255".force_encoding("UTF-8") + else + "hello joel\255" + end OpenID.parse_link_attrs(html) end end diff --git a/test/test_message.rb b/test/test_message.rb index 1ae7c22..e64dce9 100644 --- a/test/test_message.rb +++ b/test/test_message.rb @@ -1,8 +1,8 @@ # last synced with Python openid.test.test_message on 6/29/2007. -require 'minitest/autorun' -require 'util' -require 'openid/message' -require 'rexml/document' +require_relative "test_helper" +require_relative "util" +require "openid/message" +require "rexml/document" module OpenID module GetArgsMixin @@ -12,7 +12,7 @@ def get_arg_tests(ns, key, expected = nil) if expected.nil? assert_nil(@m.get_arg(ns, key)) - assert_equal(@m.get_arg(ns, key, :a_default), :a_default) + assert_equal(:a_default, @m.get_arg(ns, key, :a_default)) assert_raises(Message::KeyNotFound) { @m.get_arg(ns, key, NO_DEFAULT) } else assert_equal(expected, @m.get_arg(ns, key)) @@ -32,42 +32,43 @@ def setup def test_get_aliased_arg_no_default assert_raises(Message::KeyNotFound) do - @m.get_aliased_arg('ns.pork', NO_DEFAULT) + @m.get_aliased_arg("ns.pork", NO_DEFAULT) end - ns_uri = 'urn:pork' - @m.namespaces.add_alias(ns_uri, 'pork_alias') + ns_uri = "urn:pork" + @m.namespaces.add_alias(ns_uri, "pork_alias") # Should return ns_uri. - assert_equal(ns_uri, @m.get_aliased_arg('ns.pork_alias', NO_DEFAULT)) + assert_equal(ns_uri, @m.get_aliased_arg("ns.pork_alias", NO_DEFAULT)) end def test_to_post_args - assert_equal({}, @m.to_post_args) + assert_empty(@m.to_post_args) end def test_to_args - assert_equal({}, @m.to_args) + assert_empty(@m.to_args) end def test_to_kvform - assert_equal('', @m.to_kvform) + assert_equal("", @m.to_kvform) end def test_from_kvform kvform = "foo:bar\none:two\n" - args = { 'foo' => 'bar', 'one' => 'two' } + args = {"foo" => "bar", "one" => "two"} expected_result = Message.from_openid_args(args) assert_equal(expected_result, Message.from_kvform(kvform)) end def test_to_url_encoded - assert_equal('', @m.to_url_encoded) + assert_equal("", @m.to_url_encoded) end def test_to_url - base_url = 'http://base.url/' + base_url = "http://base.url/" + assert_equal(base_url, @m.to_url(base_url)) end @@ -82,41 +83,41 @@ def test_get_key_openid end def test_get_key_bare - assert_equal('foo', @m.get_key(BARE_NS, 'foo')) + assert_equal("foo", @m.get_key(BARE_NS, "foo")) end def test_get_key_ns1 - assert_nil(@m.get_key(OPENID1_NS, 'foo')) + assert_nil(@m.get_key(OPENID1_NS, "foo")) end def test_get_key_ns2 - assert_nil(@m.get_key(OPENID2_NS, 'foo')) + assert_nil(@m.get_key(OPENID2_NS, "foo")) end def test_get_key_ns3 - assert_nil(@m.get_key('urn:something-special', 'foo')) + assert_nil(@m.get_key("urn:something-special", "foo")) end def test_has_key assert_raises(UndefinedOpenIDNamespace) do - @m.has_key?(OPENID_NS, 'foo') + @m.has_key?(OPENID_NS, "foo") end end def test_has_key_bare - assert_equal(false, @m.has_key?(BARE_NS, 'foo')) + assert_equal(false, @m.has_key?(BARE_NS, "foo")) end def test_has_key_ns1 - assert_equal(false, @m.has_key?(OPENID1_NS, 'foo')) + assert_equal(false, @m.has_key?(OPENID1_NS, "foo")) end def test_has_key_ns2 - assert_equal(false, @m.has_key?(OPENID2_NS, 'foo')) + assert_equal(false, @m.has_key?(OPENID2_NS, "foo")) end def test_has_key_ns3 - assert_equal(false, @m.has_key?('urn:xxx', 'foo')) + assert_equal(false, @m.has_key?("urn:xxx", "foo")) end def test_get_arg @@ -126,19 +127,19 @@ def test_get_arg end def test_get_arg_bare - get_arg_tests(BARE_NS, 'foo') + get_arg_tests(BARE_NS, "foo") end def test_get_arg_ns1 - get_arg_tests(OPENID1_NS, 'foo') + get_arg_tests(OPENID1_NS, "foo") end def test_get_arg_ns2 - get_arg_tests(OPENID2_NS, 'foo') + get_arg_tests(OPENID2_NS, "foo") end def test_get_arg_ns3 - get_arg_tests('urn:nothing-significant', 'foo') + get_arg_tests("urn:nothing-significant", "foo") end def test_get_args @@ -148,34 +149,36 @@ def test_get_args end def test_get_args_bare - assert_equal({}, @m.get_args(BARE_NS)) + assert_empty(@m.get_args(BARE_NS)) end def test_get_args_ns1 - assert_equal({}, @m.get_args(OPENID1_NS)) + assert_empty(@m.get_args(OPENID1_NS)) end def test_get_args_ns2 - assert_equal({}, @m.get_args(OPENID2_NS)) + assert_empty(@m.get_args(OPENID2_NS)) end def test_get_args_ns3 - assert_equal({}, @m.get_args('urn:xxx')) + assert_empty(@m.get_args("urn:xxx")) end def test_update_args assert_raises(UndefinedOpenIDNamespace) do - @m.update_args(OPENID_NS, { 'does not' => 'matter' }) + @m.update_args(OPENID_NS, {"does not" => "matter"}) end end def _test_update_args_ns(ns) updates = { - 'camper van beethoven' => 'david l', - 'magnolia electric, co' => 'jason m' + "camper van beethoven" => "david l", + "magnolia electric, co" => "jason m", } - assert_equal({}, @m.get_args(ns)) + + assert_empty(@m.get_args(ns)) @m.update_args(ns, updates) + assert_equal(updates, @m.get_args(ns)) end @@ -192,20 +195,22 @@ def test_update_args_ns2 end def test_update_args_ns3 - _test_update_args_ns('urn:xxx') + _test_update_args_ns("urn:xxx") end def test_set_arg assert_raises(UndefinedOpenIDNamespace) do - @m.set_arg(OPENID_NS, 'does not', 'matter') + @m.set_arg(OPENID_NS, "does not", "matter") end end def _test_set_arg_ns(ns) - key = 'Camper Van Beethoven' - value = 'David Lowery' + key = "Camper Van Beethoven" + value = "David Lowery" + assert_nil(@m.get_arg(ns, key)) @m.set_arg(ns, key, value) + assert_equal(value, @m.get_arg(ns, key)) end @@ -222,17 +227,18 @@ def test_set_arg_ns2 end def test_set_arg_ns3 - _test_set_arg_ns('urn:xxx') + _test_set_arg_ns("urn:xxx") end def test_del_arg assert_raises(UndefinedOpenIDNamespace) do - @m.set_arg(OPENID_NS, 'does not', 'matter') + @m.set_arg(OPENID_NS, "does not", "matter") end end def _test_del_arg_ns(ns) - key = 'Fleeting Joys' + key = "Fleeting Joys" + assert_nil(@m.del_arg(ns, key)) end @@ -249,7 +255,7 @@ def test_del_arg_ns2 end def test_del_arg_ns3 - _test_del_arg_ns('urn:xxx') + _test_del_arg_ns("urn:xxx") end def test_isOpenID1 @@ -262,7 +268,7 @@ def test_isOpenID2 def test_set_openid_namespace assert_raises(InvalidOpenIDNamespace) do - @m.set_openid_namespace('http://invalid/', false) + @m.set_openid_namespace("http://invalid/", false) end end end @@ -271,85 +277,115 @@ class OpenID1MessageTest < Minitest::Test include GetArgsMixin def setup - @m = Message.from_post_args({ 'openid.mode' => 'error', - 'openid.error' => 'unit test' }) + @m = Message.from_post_args({ + "openid.mode" => "error", + "openid.error" => "unit test", + }) end def test_has_openid_ns assert_equal(OPENID1_NS, @m.get_openid_namespace) - assert_equal(OPENID1_NS, - @m.namespaces.get_namespace_uri(NULL_NAMESPACE)) + assert_equal( + OPENID1_NS, + @m.namespaces.get_namespace_uri(NULL_NAMESPACE), + ) end def test_get_aliased_arg - assert_equal('error', @m.get_aliased_arg('mode')) + assert_equal("error", @m.get_aliased_arg("mode")) end def test_get_aliased_arg_ns - assert_equal(OPENID1_NS, @m.get_aliased_arg('ns')) + assert_equal(OPENID1_NS, @m.get_aliased_arg("ns")) end def test_get_aliased_arg_with_ns @m = Message.from_post_args( - { 'openid.mode' => 'error', - 'openid.error' => 'unit test', - 'openid.ns.invalid' => 'http://invalid/', - 'openid.invalid.stuff' => 'things', - 'openid.invalid.stuff.blinky' => 'powerplant' } + { + "openid.mode" => "error", + "openid.error" => "unit test", + "openid.ns.invalid" => "http://invalid/", + "openid.invalid.stuff" => "things", + "openid.invalid.stuff.blinky" => "powerplant", + }, ) - assert_equal('http://invalid/', @m.get_aliased_arg('ns.invalid')) - assert_equal('things', @m.get_aliased_arg('invalid.stuff')) - assert_equal('powerplant', @m.get_aliased_arg('invalid.stuff.blinky')) + + assert_equal("http://invalid/", @m.get_aliased_arg("ns.invalid")) + assert_equal("things", @m.get_aliased_arg("invalid.stuff")) + assert_equal("powerplant", @m.get_aliased_arg("invalid.stuff.blinky")) end def test_get_aliased_arg_with_ns_default @m = Message.from_post_args({}) - assert_equal('monkeys!', @m.get_aliased_arg('ns.invalid', 'monkeys!')) + + assert_equal("monkeys!", @m.get_aliased_arg("ns.invalid", "monkeys!")) end def test_to_post_args - assert_equal({ 'openid.mode' => 'error', - 'openid.error' => 'unit test' }, - @m.to_post_args) + assert_equal( + { + "openid.mode" => "error", + "openid.error" => "unit test", + }, + @m.to_post_args, + ) end def test_to_post_args_ns - invalid_ns = 'http://invalid/' - @m.namespaces.add_alias(invalid_ns, 'foos') - @m.set_arg(invalid_ns, 'ball', 'awesome') - @m.set_arg(BARE_NS, 'xey', 'value') - assert_equal({ 'openid.mode' => 'error', - 'openid.error' => 'unit test', - 'openid.foos.ball' => 'awesome', - 'xey' => 'value', - 'openid.ns.foos' => 'http://invalid/' }, @m.to_post_args) + invalid_ns = "http://invalid/" + @m.namespaces.add_alias(invalid_ns, "foos") + @m.set_arg(invalid_ns, "ball", "awesome") + @m.set_arg(BARE_NS, "xey", "value") + + assert_equal( + { + "openid.mode" => "error", + "openid.error" => "unit test", + "openid.foos.ball" => "awesome", + "xey" => "value", + "openid.ns.foos" => "http://invalid/", + }, + @m.to_post_args, + ) end def test_to_args - assert_equal({ 'mode' => 'error', - 'error' => 'unit test' }, - @m.to_args) + assert_equal( + { + "mode" => "error", + "error" => "unit test", + }, + @m.to_args, + ) end def test_to_kvform - assert_equal("error:unit test\nmode:error\n", - @m.to_kvform) + assert_equal( + "error:unit test\nmode:error\n", + @m.to_kvform, + ) end def test_to_url_encoded - assert_equal('openid.error=unit+test&openid.mode=error', - @m.to_url_encoded) + assert_equal( + "openid.error=unit+test&openid.mode=error", + @m.to_url_encoded, + ) end def test_to_url - base_url = 'http://base.url/' + base_url = "http://base.url/" actual = @m.to_url(base_url) actual_base = actual[0...base_url.length] + assert_equal(base_url, actual_base) - assert_equal('?', actual[base_url.length].chr) + assert_equal("?", actual[base_url.length].chr) query = actual[base_url.length + 1..-1] - assert_equal({ 'openid.mode' => ['error'], 'openid.error' => ['unit test'] }, - CGI.parse(query)) + + assert_equal( + {"openid.mode" => ["error"], "openid.error" => ["unit test"]}, + CGI.parse(query), + ) end def test_get_openid @@ -357,106 +393,112 @@ def test_get_openid end def test_get_key_openid - assert_equal('openid.mode', @m.get_key(OPENID_NS, 'mode')) + assert_equal("openid.mode", @m.get_key(OPENID_NS, "mode")) end def test_get_key_bare - assert_equal('mode', @m.get_key(BARE_NS, 'mode')) + assert_equal("mode", @m.get_key(BARE_NS, "mode")) end def test_get_key_ns1 - assert_equal('openid.mode', @m.get_key(OPENID1_NS, 'mode')) + assert_equal("openid.mode", @m.get_key(OPENID1_NS, "mode")) end def test_get_key_ns2 - assert_nil(@m.get_key(OPENID2_NS, 'mode')) + assert_nil(@m.get_key(OPENID2_NS, "mode")) end def test_get_key_ns3 - assert_nil(@m.get_key('urn:xxx', 'mode')) + assert_nil(@m.get_key("urn:xxx", "mode")) end def test_has_key - assert_equal(true, @m.has_key?(OPENID_NS, 'mode')) + assert_equal(true, @m.has_key?(OPENID_NS, "mode")) end def test_has_key_bare - assert_equal(false, @m.has_key?(BARE_NS, 'mode')) + assert_equal(false, @m.has_key?(BARE_NS, "mode")) end def test_has_key_ns1 - assert_equal(true, @m.has_key?(OPENID1_NS, 'mode')) + assert_equal(true, @m.has_key?(OPENID1_NS, "mode")) end def test_has_key_ns2 - assert_equal(false, @m.has_key?(OPENID2_NS, 'mode')) + assert_equal(false, @m.has_key?(OPENID2_NS, "mode")) end def test_has_key_ns3 - assert_equal(false, @m.has_key?('urn:xxx', 'mode')) + assert_equal(false, @m.has_key?("urn:xxx", "mode")) end def test_get_arg - assert_equal('error', @m.get_arg(OPENID_NS, 'mode')) + assert_equal("error", @m.get_arg(OPENID_NS, "mode")) end def test_get_arg_bare - get_arg_tests(BARE_NS, 'mode') + get_arg_tests(BARE_NS, "mode") end def test_get_arg_ns - get_arg_tests(OPENID_NS, 'mode', 'error') + get_arg_tests(OPENID_NS, "mode", "error") end def test_get_arg_ns1 - get_arg_tests(OPENID1_NS, 'mode', 'error') + get_arg_tests(OPENID1_NS, "mode", "error") end def test_get_arg_ns2 - get_arg_tests(OPENID2_NS, 'mode') + get_arg_tests(OPENID2_NS, "mode") end def test_get_arg_ns3 - get_arg_tests('urn:nothing-significant', 'mode') + get_arg_tests("urn:nothing-significant", "mode") end def test_get_args - assert_equal({ 'mode' => 'error', 'error' => 'unit test' }, - @m.get_args(OPENID_NS)) + assert_equal( + {"mode" => "error", "error" => "unit test"}, + @m.get_args(OPENID_NS), + ) end def test_get_args_bare - assert_equal({}, @m.get_args(BARE_NS)) + assert_empty(@m.get_args(BARE_NS)) end def test_get_args_ns1 - assert_equal({ 'mode' => 'error', 'error' => 'unit test' }, - @m.get_args(OPENID1_NS)) + assert_equal( + {"mode" => "error", "error" => "unit test"}, + @m.get_args(OPENID1_NS), + ) end def test_get_args_ns2 - assert_equal({}, @m.get_args(OPENID2_NS)) + assert_empty(@m.get_args(OPENID2_NS)) end def test_get_args_ns3 - assert_equal({}, @m.get_args('urn:xxx')) + assert_empty(@m.get_args("urn:xxx")) end def _test_update_args_ns(ns, before = nil) before = {} if before.nil? update_args = { - 'Camper van Beethoven' => 'David Lowery', - 'Magnolia Electric Co.' => 'Jason Molina' + "Camper van Beethoven" => "David Lowery", + "Magnolia Electric Co." => "Jason Molina", } + assert_equal(before, @m.get_args(ns)) @m.update_args(ns, update_args) after = before.dup after.update(update_args) + assert_equal(after, @m.get_args(ns)) end def test_update_args - _test_update_args_ns(OPENID_NS, { 'mode' => 'error', 'error' => 'unit test' }) + _test_update_args_ns(OPENID_NS, {"mode" => "error", "error" => "unit test"}) end def test_update_args_bare @@ -464,7 +506,7 @@ def test_update_args_bare end def test_update_args_ns1 - _test_update_args_ns(OPENID1_NS, { 'mode' => 'error', 'error' => 'unit test' }) + _test_update_args_ns(OPENID1_NS, {"mode" => "error", "error" => "unit test"}) end def test_update_args_ns2 @@ -472,14 +514,16 @@ def test_update_args_ns2 end def test_update_args_ns3 - _test_update_args_ns('urn:xxx') + _test_update_args_ns("urn:xxx") end def _test_set_arg_ns(ns) - key = 'awesometown' - value = 'funny' + key = "awesometown" + value = "funny" + assert_nil(@m.get_arg(ns, key)) @m.set_arg(ns, key, value) + assert_equal(value, @m.get_arg(ns, key)) end @@ -500,15 +544,17 @@ def test_set_arg_ns2 end def test_set_arg_ns3 - _test_set_arg_ns('urn:xxx') + _test_set_arg_ns("urn:xxx") end def _test_del_arg_ns(ns) - key = 'marry an' - value = 'ice cream sandwich' + key = "marry an" + value = "ice cream sandwich" @m.set_arg(ns, key, value) + assert_equal(value, @m.get_arg(ns, key)) @m.del_arg(ns, key) + assert_nil(@m.get_arg(ns, key)) end @@ -529,7 +575,7 @@ def test_del_arg_ns2 end def test_del_arg_ns3 - _test_del_arg_ns('urn:yyy') + _test_del_arg_ns("urn:yyy") end def test_isOpenID1 @@ -546,21 +592,25 @@ def test_equal end def test_from_openid_args_undefined_ns - expected = 'almost.complete' - msg = Message.from_openid_args({ 'coverage.is' => expected }) - actual = msg.get_arg(OPENID1_NS, 'coverage.is') + expected = "almost.complete" + msg = Message.from_openid_args({"coverage.is" => expected}) + actual = msg.get_arg(OPENID1_NS, "coverage.is") + assert_equal(expected, actual) end - # XXX: we need to implement the KVForm module before we can fix this - def TODOtest_from_kvform + def test_test_from_kvform + skip("we need to implement the KVForm module before we can fix this") + kv = 'foos:ball\n' msg = Message.from_kvform(kv) - assert_equal(msg.get(OPENID1_NS, 'foos'), 'ball') + + assert_equal("ball", msg.get(OPENID1_NS, "foos")) end def test_initialize_sets_namespace msg = Message.new(OPENID1_NS) + assert_equal(OPENID1_NS, msg.get_openid_namespace) end end @@ -569,59 +619,85 @@ class OpenID1ExplicitMessageTest < Minitest::Test # XXX - check to make sure the test suite will get built the way this # expects. def setup - @m = Message.from_post_args({ 'openid.mode' => 'error', - 'openid.error' => 'unit test', - 'openid.ns' => OPENID1_NS }) + @m = Message.from_post_args({ + "openid.mode" => "error", + "openid.error" => "unit test", + "openid.ns" => OPENID1_NS, + }) end def test_to_post_args - assert_equal({ 'openid.mode' => 'error', - 'openid.error' => 'unit test', - 'openid.ns' => OPENID1_NS }, - @m.to_post_args) + assert_equal( + { + "openid.mode" => "error", + "openid.error" => "unit test", + "openid.ns" => OPENID1_NS, + }, + @m.to_post_args, + ) end def test_to_post_args_ns - invalid_ns = 'http://invalid/' - @m.namespaces.add_alias(invalid_ns, 'foos') - @m.set_arg(invalid_ns, 'ball', 'awesome') - @m.set_arg(BARE_NS, 'xey', 'value') - assert_equal({ 'openid.mode' => 'error', - 'openid.error' => 'unit test', - 'openid.foos.ball' => 'awesome', - 'xey' => 'value', - 'openid.ns' => OPENID1_NS, - 'openid.ns.foos' => 'http://invalid/' }, @m.to_post_args) + invalid_ns = "http://invalid/" + @m.namespaces.add_alias(invalid_ns, "foos") + @m.set_arg(invalid_ns, "ball", "awesome") + @m.set_arg(BARE_NS, "xey", "value") + + assert_equal( + { + "openid.mode" => "error", + "openid.error" => "unit test", + "openid.foos.ball" => "awesome", + "xey" => "value", + "openid.ns" => OPENID1_NS, + "openid.ns.foos" => "http://invalid/", + }, + @m.to_post_args, + ) end def test_to_args - assert_equal({ 'mode' => 'error', - 'error' => 'unit test', - 'ns' => OPENID1_NS }, - @m.to_args) + assert_equal( + { + "mode" => "error", + "error" => "unit test", + "ns" => OPENID1_NS, + }, + @m.to_args, + ) end def test_to_kvform - assert_equal("error:unit test\nmode:error\nns:#{OPENID1_NS}\n", - @m.to_kvform) + assert_equal( + "error:unit test\nmode:error\nns:#{OPENID1_NS}\n", + @m.to_kvform, + ) end def test_to_url_encoded - assert_equal('openid.error=unit+test&openid.mode=error&openid.ns=http%3A%2F%2Fopenid.net%2Fsignon%2F1.0', - @m.to_url_encoded) + assert_equal( + "openid.error=unit+test&openid.mode=error&openid.ns=http%3A%2F%2Fopenid.net%2Fsignon%2F1.0", + @m.to_url_encoded, + ) end def test_to_url - base_url = 'http://base.url/' + base_url = "http://base.url/" actual = @m.to_url(base_url) actual_base = actual[0...base_url.length] + assert_equal(base_url, actual_base) - assert_equal('?', actual[base_url.length].chr) + assert_equal("?", actual[base_url.length].chr) query = actual[base_url.length + 1..-1] - assert_equal({ 'openid.mode' => ['error'], - 'openid.error' => ['unit test'], - 'openid.ns' => [OPENID1_NS] }, - CGI.parse(query)) + + assert_equal( + { + "openid.mode" => ["error"], + "openid.error" => ["unit test"], + "openid.ns" => [OPENID1_NS], + }, + CGI.parse(query), + ) end end @@ -629,10 +705,12 @@ class OpenID2MessageTest < Minitest::Test include TestUtil def setup - @m = Message.from_post_args({ 'openid.mode' => 'error', - 'openid.error' => 'unit test', - 'openid.ns' => OPENID2_NS }) - @m.set_arg(BARE_NS, 'xey', 'value') + @m = Message.from_post_args({ + "openid.mode" => "error", + "openid.error" => "unit test", + "openid.ns" => OPENID2_NS, + }) + @m.set_arg(BARE_NS, "xey", "value") end def test_to_args_fails @@ -644,71 +722,94 @@ def test_to_args_fails def test_fix_ns_non_string # Using has_key to invoke _fix_ns since _fix_ns should be private assert_raises(ArgumentError) do - @m.has_key?(:non_string_namespace, 'key') + @m.has_key?(:non_string_namespace, "key") end end def test_fix_ns_non_uri # Using has_key to invoke _fix_ns since _fix_ns should be private assert_log_matches(/identifiers SHOULD be URIs/) do - @m.has_key?('foo', 'key') + @m.has_key?("foo", "key") end end def test_fix_ns_sreg_literal # Using has_key to invoke _fix_ns since _fix_ns should be private assert_log_matches(/identifiers SHOULD be URIs/, /instead of "sreg"/) do - @m.has_key?('sreg', 'key') + @m.has_key?("sreg", "key") end end def test_copy n = @m.copy + assert_equal(@m, n) end def test_to_post_args - assert_equal({ 'openid.mode' => 'error', - 'openid.error' => 'unit test', - 'openid.ns' => OPENID2_NS, - 'xey' => 'value' }, @m.to_post_args) + assert_equal( + { + "openid.mode" => "error", + "openid.error" => "unit test", + "openid.ns" => OPENID2_NS, + "xey" => "value", + }, + @m.to_post_args, + ) end def test_to_post_args_ns - invalid_ns = 'http://invalid/' - @m.namespaces.add_alias(invalid_ns, 'foos') - @m.set_arg(invalid_ns, 'ball', 'awesome') - assert_equal({ 'openid.mode' => 'error', - 'openid.error' => 'unit test', - 'openid.ns' => OPENID2_NS, - 'openid.ns.foos' => invalid_ns, - 'openid.foos.ball' => 'awesome', - 'xey' => 'value' }, @m.to_post_args) + invalid_ns = "http://invalid/" + @m.namespaces.add_alias(invalid_ns, "foos") + @m.set_arg(invalid_ns, "ball", "awesome") + + assert_equal( + { + "openid.mode" => "error", + "openid.error" => "unit test", + "openid.ns" => OPENID2_NS, + "openid.ns.foos" => invalid_ns, + "openid.foos.ball" => "awesome", + "xey" => "value", + }, + @m.to_post_args, + ) end def test_to_args - @m.del_arg(BARE_NS, 'xey') - assert_equal({ 'mode' => 'error', - 'error' => 'unit test', - 'ns' => OPENID2_NS }, - @m.to_args) + @m.del_arg(BARE_NS, "xey") + + assert_equal( + { + "mode" => "error", + "error" => "unit test", + "ns" => OPENID2_NS, + }, + @m.to_args, + ) end def test_to_kvform - @m.del_arg(BARE_NS, 'xey') - assert_equal("error:unit test\nmode:error\nns:#{OPENID2_NS}\n", - @m.to_kvform) + @m.del_arg(BARE_NS, "xey") + + assert_equal( + "error:unit test\nmode:error\nns:#{OPENID2_NS}\n", + @m.to_kvform, + ) end def _test_urlencoded(s) - expected_list = ['openid.error=unit+test', - 'openid.mode=error', - "openid.ns=#{CGI.escape(OPENID2_NS)}", - 'xey=value'] + expected_list = [ + "openid.error=unit+test", + "openid.mode=error", + "openid.ns=#{CGI.escape(OPENID2_NS)}", + "xey=value", + ] # Hard to do this with string comparison since the mapping doesn't # preserve order. - encoded_list = s.split('&') + encoded_list = s.split("&") encoded_list.sort! + assert_equal(expected_list, encoded_list) end @@ -717,11 +818,12 @@ def test_to_urlencoded end def test_to_url - base_url = 'http://base.url/' + base_url = "http://base.url/" actual = @m.to_url(base_url) actual_base = actual[0...base_url.length] + assert_equal(base_url, actual_base) - assert_equal('?', actual[base_url.length].chr) + assert_equal("?", actual[base_url.length].chr) query = actual[base_url.length + 1..-1] _test_urlencoded(query) end @@ -731,108 +833,117 @@ def test_get_openid end def test_get_key_openid - assert_equal('openid.mode', @m.get_key(OPENID2_NS, 'mode')) + assert_equal("openid.mode", @m.get_key(OPENID2_NS, "mode")) end def test_get_key_bare - assert_equal('mode', @m.get_key(BARE_NS, 'mode')) + assert_equal("mode", @m.get_key(BARE_NS, "mode")) end def test_get_key_ns1 - assert_nil(@m.get_key(OPENID1_NS, 'mode')) + assert_nil(@m.get_key(OPENID1_NS, "mode")) end def test_get_key_ns2 - assert_equal('openid.mode', @m.get_key(OPENID2_NS, 'mode')) + assert_equal("openid.mode", @m.get_key(OPENID2_NS, "mode")) end def test_get_key_ns3 - assert_nil(@m.get_key('urn:xxx', 'mode')) + assert_nil(@m.get_key("urn:xxx", "mode")) end def test_has_key_openid - assert_equal(true, @m.has_key?(OPENID_NS, 'mode')) + assert_equal(true, @m.has_key?(OPENID_NS, "mode")) end def test_has_key_bare - assert_equal(false, @m.has_key?(BARE_NS, 'mode')) + assert_equal(false, @m.has_key?(BARE_NS, "mode")) end def test_has_key_ns1 - assert_equal(false, @m.has_key?(OPENID1_NS, 'mode')) + assert_equal(false, @m.has_key?(OPENID1_NS, "mode")) end def test_has_key_ns2 - assert_equal(true, @m.has_key?(OPENID2_NS, 'mode')) + assert_equal(true, @m.has_key?(OPENID2_NS, "mode")) end def test_has_key_ns3 - assert_equal(false, @m.has_key?('urn:xxx', 'mode')) + assert_equal(false, @m.has_key?("urn:xxx", "mode")) end # XXX - getArgTest def test_get_arg_openid - assert_equal('error', @m.get_arg(OPENID_NS, 'mode')) + assert_equal("error", @m.get_arg(OPENID_NS, "mode")) end def test_get_arg_bare - assert_nil(@m.get_arg(BARE_NS, 'mode')) + assert_nil(@m.get_arg(BARE_NS, "mode")) end def test_get_arg_ns1 - assert_nil(@m.get_arg(OPENID1_NS, 'mode')) + assert_nil(@m.get_arg(OPENID1_NS, "mode")) end def test_get_arg_ns2 - assert_equal('error', @m.get_arg(OPENID2_NS, 'mode')) + assert_equal("error", @m.get_arg(OPENID2_NS, "mode")) end def test_get_arg_ns3 - assert_nil(@m.get_arg('urn:bananastand', 'mode')) + assert_nil(@m.get_arg("urn:bananastand", "mode")) end def test_get_args_openid - assert_equal({ 'mode' => 'error', 'error' => 'unit test' }, - @m.get_args(OPENID_NS)) + assert_equal( + {"mode" => "error", "error" => "unit test"}, + @m.get_args(OPENID_NS), + ) end def test_get_args_bare - assert_equal({ 'xey' => 'value' }, - @m.get_args(BARE_NS)) + assert_equal( + {"xey" => "value"}, + @m.get_args(BARE_NS), + ) end def test_get_args_ns1 - assert_equal({}, - @m.get_args(OPENID1_NS)) + assert_empty( + @m.get_args(OPENID1_NS), + ) end def test_get_args_ns2 - assert_equal({ 'mode' => 'error', 'error' => 'unit test' }, - @m.get_args(OPENID2_NS)) + assert_equal( + {"mode" => "error", "error" => "unit test"}, + @m.get_args(OPENID2_NS), + ) end def test_get_args_ns3 - assert_equal({}, - @m.get_args('urn:loose seal')) + assert_empty( + @m.get_args("urn:loose seal"), + ) end def _test_update_args_ns(ns, before = nil) before ||= {} - update_args = { 'aa' => 'bb', 'cc' => 'dd' } + update_args = {"aa" => "bb", "cc" => "dd"} assert_equal(before, @m.get_args(ns)) @m.update_args(ns, update_args) after = before.dup after.update(update_args) + assert_equal(after, @m.get_args(ns)) end def test_update_args_openid - _test_update_args_ns(OPENID_NS, { 'mode' => 'error', 'error' => 'unit test' }) + _test_update_args_ns(OPENID_NS, {"mode" => "error", "error" => "unit test"}) end def test_update_args_bare - _test_update_args_ns(BARE_NS, { 'xey' => 'value' }) + _test_update_args_ns(BARE_NS, {"xey" => "value"}) end def test_update_args_ns1 @@ -840,18 +951,20 @@ def test_update_args_ns1 end def test_update_args_ns2 - _test_update_args_ns(OPENID2_NS, { 'mode' => 'error', 'error' => 'unit test' }) + _test_update_args_ns(OPENID2_NS, {"mode" => "error", "error" => "unit test"}) end def test_update_args_ns3 - _test_update_args_ns('urn:sven') + _test_update_args_ns("urn:sven") end def _test_set_arg_ns(ns) key = "logan's" - value = 'run' + value = "run" + assert_nil(@m.get_arg(ns, key)) @m.set_arg(ns, key, value) + assert_equal(value, @m.get_arg(ns, key)) end @@ -872,18 +985,20 @@ def test_set_arg_ns2 end def test_set_arg_ns3 - _test_set_arg_ns('urn:g') + _test_set_arg_ns("urn:g") end def test_bad_alias # Make sure dotted aliases and OpenID protocol fields are not allowed # as namespace aliases. - fields = OPENID_PROTOCOL_FIELDS + ['dotted.alias'] + fields = OPENID_PROTOCOL_FIELDS + ["dotted.alias"] fields.each do |f| - args = { "openid.ns.#{f}" => "blah#{f}", - "openid.#{f}.foo" => "test#{f}" } + args = { + "openid.ns.#{f}" => "blah#{f}", + "openid.#{f}.foo" => "test#{f}", + } # .fromPostArgs covers .fromPostArgs, .fromOpenIDArgs, # ._fromOpenIDArgs, and .fromOpenIDArgs (since it calls @@ -895,17 +1010,21 @@ def test_bad_alias end def test_from_post_args - msg = Message.from_post_args({ 'foos' => 'ball' }) - assert_equal('ball', msg.get_arg(BARE_NS, 'foos')) + msg = Message.from_post_args({"foos" => "ball"}) + + assert_equal("ball", msg.get_arg(BARE_NS, "foos")) end def _test_del_arg_ns(ns) - key = 'no' - value = 'socks' + key = "no" + value = "socks" + assert_nil(@m.get_arg(ns, key)) @m.set_arg(ns, key, value) + assert_equal(value, @m.get_arg(ns, key)) @m.del_arg(ns, key) + assert_nil(@m.get_arg(ns, key)) end @@ -926,24 +1045,26 @@ def test_del_arg_ns2 end def test_del_arg_ns3 - _test_del_arg_ns('urn:tofu') + _test_del_arg_ns("urn:tofu") end def test_overwrite_extension_arg - ns = 'urn:unittest_extension' - key = 'mykey' - value_1 = 'value_1' - value_2 = 'value_2' + ns = "urn:unittest_extension" + key = "mykey" + value_1 = "value_1" + value_2 = "value_2" @m.set_arg(ns, key, value_1) + assert_equal(value_1, @m.get_arg(ns, key)) @m.set_arg(ns, key, value_2) + assert_equal(value_2, @m.get_arg(ns, key)) end def test_argList assert_raises(ArgumentError) do - Message.from_post_args({ 'arg' => [1, 2, 3] }) + Message.from_post_args({"arg" => [1, 2, 3]}) end end @@ -959,34 +1080,34 @@ def test_isOpenID2 class MessageTest < Minitest::Test def setup @postargs = { - 'openid.ns' => OPENID2_NS, - 'openid.mode' => 'checkid_setup', - 'openid.identity' => 'http://bogus.example.invalid:port/', - 'openid.assoc_handle' => 'FLUB', - 'openid.return_to' => 'Neverland', - 'openid.ax.value.fullname' => "Bob&Smith'" + "openid.ns" => OPENID2_NS, + "openid.mode" => "checkid_setup", + "openid.identity" => "http://bogus.example.invalid:port/", + "openid.assoc_handle" => "FLUB", + "openid.return_to" => "Neverland", + "openid.ax.value.fullname" => "Bob&Smith'", } - @action_url = 'scheme://host:port/path?query' + @action_url = "scheme://host:port/path?query" @form_tag_attrs = { - 'company' => 'janrain', - 'class' => 'fancyCSS' + "company" => "janrain", + "class" => "fancyCSS", } - @submit_text = 'GO!' + @submit_text = "GO!" ### Expected data regardless of input @required_form_attrs = { - 'accept-charset' => 'UTF-8', - 'enctype' => 'application/x-www-form-urlencoded', - 'method' => 'post' + "accept-charset" => "UTF-8", + "enctype" => "application/x-www-form-urlencoded", + "method" => "post", } end def _checkForm(html, message_, action_url, - _form_tag_attrs, submit_text) + _form_tag_attrs, submit_text) @xml = REXML::Document.new(html) # Get root element @@ -994,8 +1115,11 @@ def _checkForm(html, message_, action_url, # Check required form attributes @required_form_attrs.each do |k, v| - assert(form.attributes[k] == v, - "Expected '#{v}' for required form attribute '#{k}', got '#{form.attributes[k]}'") + assert_equal( + form.attributes[k], + v, + "Expected '#{v}' for required form attribute '#{k}', got '#{form.attributes[k]}'", + ) end # Check extra form attributes @@ -1005,15 +1129,18 @@ def _checkForm(html, message_, action_url, # code. continue if @required_form_attrs.include?(k) - assert(form.attributes[k] == v, - "Form attribute '#{k}' should be '#{v}', found '#{form.attributes[k]}'") + assert_equal( + form.attributes[k], + v, + "Form attribute '#{k}' should be '#{v}', found '#{form.attributes[k]}'", + ) # Check hidden fields against post args hiddens = [] form.each do |e| next unless e.is_a?(REXML::Element) and - (e.name.upcase == 'INPUT') and - (e.attributes['type'].upcase == 'HIDDEN') + (e.name.upcase == "INPUT") and + (e.attributes["type"].upcase == "HIDDEN") # For each post arg, make sure there is a hidden with that # value. Make sure there are no other hiddens. @@ -1024,53 +1151,76 @@ def _checkForm(html, message_, action_url, success = false hiddens.each do |e| - next unless e.attributes['name'] == name - - assert(e.attributes['value'] == value, - "Expected value of hidden input '#{e.attributes['name']}' " + - "to be '#{value}', got '#{e.attributes['value']}'") + next unless e.attributes["name"] == name + + assert_equal( + e.attributes["value"], + value, + "Expected value of hidden input '#{e.attributes["name"]}' " + + "to be '#{value}', got '#{e.attributes["value"]}'", + ) success = true break end - flunk "Post arg '#{name}' not found in form" unless success + flunk("Post arg '#{name}' not found in form") unless success end hiddens.each do |e| - assert(message_.to_post_args.keys.include?(e.attributes['name']), - "Form element for '#{e.attributes['name']}' not in " + - 'original message') + assert_includes( + message_.to_post_args.keys, + e.attributes["name"], + "Form element for '#{e.attributes["name"]}' not in " + + "original message", + ) end # Check action URL - assert(form.attributes['action'] == action_url, - "Expected form 'action' to be '#{action_url}', got '#{form.attributes['action']}'") + assert_equal( + form.attributes["action"], + action_url, + "Expected form 'action' to be '#{action_url}', got '#{form.attributes["action"]}'", + ) # Check submit text submits = [] form.each do |e| next unless e.is_a?(REXML::Element) and - (e.name.upcase == 'INPUT') and - e.attributes['type'].upcase == 'SUBMIT' + (e.name.upcase == "INPUT") and + e.attributes["type"].upcase == "SUBMIT" submits += [e] end - assert(submits.length == 1, - "Expected only one 'input' with type = 'submit', got #{submits.length}") - - assert(submits[0].attributes['value'] == submit_text, - "Expected submit value to be '#{submit_text}', " + - "got '#{submits[0].attributes['value']}'") + assert_equal( + 1, + submits.length, + "Expected only one 'input' with type = 'submit', got #{submits.length}", + ) + + assert_equal( + submits[0].attributes["value"], + submit_text, + "Expected submit value to be '#{submit_text}', " + + "got '#{submits[0].attributes["value"]}'", + ) end end def test_toFormMarkup m = Message.from_post_args(@postargs) - html = m.to_form_markup(@action_url, @form_tag_attrs, - @submit_text) - _checkForm(html, m, @action_url, - @form_tag_attrs, @submit_text) + html = m.to_form_markup( + @action_url, + @form_tag_attrs, + @submit_text, + ) + _checkForm( + html, + m, + @action_url, + @form_tag_attrs, + @submit_text, + ) end def test_overrideMethod @@ -1078,12 +1228,20 @@ def test_overrideMethod m = Message.from_post_args(@postargs) tag_attrs = @form_tag_attrs.clone - tag_attrs['method'] = 'GET' + tag_attrs["method"] = "GET" - html = m.to_form_markup(@action_url, @form_tag_attrs, - @submit_text) - _checkForm(html, m, @action_url, - @form_tag_attrs, @submit_text) + html = m.to_form_markup( + @action_url, + @form_tag_attrs, + @submit_text, + ) + _checkForm( + html, + m, + @action_url, + @form_tag_attrs, + @submit_text, + ) end def test_overrideRequired @@ -1092,42 +1250,52 @@ def test_overrideRequired m = Message.from_post_args(@postargs) tag_attrs = @form_tag_attrs.clone - tag_attrs['accept-charset'] = 'UCS4' - tag_attrs['enctype'] = 'invalid/x-broken' + tag_attrs["accept-charset"] = "UCS4" + tag_attrs["enctype"] = "invalid/x-broken" - html = m.to_form_markup(@action_url, tag_attrs, - @submit_text) - _checkForm(html, m, @action_url, - tag_attrs, @submit_text) + html = m.to_form_markup( + @action_url, + tag_attrs, + @submit_text, + ) + _checkForm( + html, + m, + @action_url, + tag_attrs, + @submit_text, + ) end end class NamespaceMapTestCase < Minitest::Test def test_onealias nsm = NamespaceMap.new - uri = 'http://example.com/foo' - _alias = 'foo' + uri = "http://example.com/foo" + _alias = "foo" nsm.add_alias(uri, _alias) + assert_equal(uri, nsm.get_namespace_uri(_alias)) assert_equal(_alias, nsm.get_alias(uri)) end def test_iteration nsm = NamespaceMap.new - uripat = 'http://example.com/foo%i' + uripat = "http://example.com/foo%i" nsm.add(uripat % 0) (1..23).each do |i| assert_equal(false, nsm.member?(uripat % i)) nsm.add(uripat % i) end + nsm.each do |uri, _alias| assert_equal(uri[22..-1], _alias[3..-1]) end nsm = NamespaceMap.new - alias_ = 'bogus' - uri = 'urn:bogus' + alias_ = "bogus" + uri = "urn:bogus" nsm.add_alias(uri, alias_) @@ -1136,24 +1304,25 @@ def test_iteration end def test_register_default_alias - invalid_ns = 'http://invalid/' - alias_ = 'invalid' + invalid_ns = "http://invalid/" + alias_ = "invalid" Message.register_namespace_alias(invalid_ns, alias_) # Doing it again doesn't raise an exception Message.register_namespace_alias(invalid_ns, alias_) # Once it's registered, you can't register it again assert_raises(NamespaceAliasRegistrationError) do - Message.register_namespace_alias(invalid_ns, 'another_alias') + Message.register_namespace_alias(invalid_ns, "another_alias") end # Once it's registered, you can't register another URL with that alias assert_raises(NamespaceAliasRegistrationError) do - Message.register_namespace_alias('http://janrain.com/', alias_) + Message.register_namespace_alias("http://janrain.com/", alias_) end # It gets used automatically by the Message class: - msg = Message.from_openid_args({ 'invalid.stuff' => 'things' }) + msg = Message.from_openid_args({"invalid.stuff" => "things"}) + assert(msg.is_openid1) assert_equal(alias_, msg.namespaces.get_alias(invalid_ns)) assert_equal(invalid_ns, msg.namespaces.get_namespace_uri(alias_)) @@ -1161,11 +1330,11 @@ def test_register_default_alias def test_alias_defined_twice nsm = NamespaceMap.new - uri = 'urn:bogus' + uri = "urn:bogus" - nsm.add_alias(uri, 'foos') + nsm.add_alias(uri, "foos") assert_raises(IndexError) do - nsm.add_alias(uri, 'ball') + nsm.add_alias(uri, "ball") end end end diff --git a/test/test_nonce.rb b/test/test_nonce.rb index 9dfcbc9..f685859 100644 --- a/test/test_nonce.rb +++ b/test/test_nonce.rb @@ -1,5 +1,5 @@ -require 'minitest/autorun' -require 'openid/store/nonce' +require_relative "test_helper" +require "openid/store/nonce" module OpenID class NonceTestCase < Minitest::Test @@ -7,22 +7,25 @@ class NonceTestCase < Minitest::Test def test_mk_nonce nonce = Nonce.mk_nonce - assert(nonce.match(NONCE_RE)) - assert(nonce.size == 26) + + assert_match(NONCE_RE, nonce) + assert_equal(26, nonce.size) end def test_mk_nonce_time nonce = Nonce.mk_nonce(0) - assert(nonce.match(NONCE_RE)) - assert(nonce.size == 26) - assert(nonce.match(/^1970-01-01T00:00:00Z/)) + + assert_match(NONCE_RE, nonce) + assert_equal(26, nonce.size) + assert_match(/^1970-01-01T00:00:00Z/, nonce) end def test_split - s = '1970-01-01T00:00:00Z' + s = "1970-01-01T00:00:00Z" expected_t = 0 - expected_salt = '' + expected_salt = "" actual_t, actual_salt = Nonce.split_nonce(s) + assert_equal(expected_t, actual_t) assert_equal(expected_salt, actual_salt) end @@ -30,22 +33,25 @@ def test_split def test_mk_split t = 42 nonce_str = Nonce.mk_nonce(t) - assert(nonce_str.match(NONCE_RE)) + + assert_match(NONCE_RE, nonce_str) at, salt = Nonce.split_nonce(nonce_str) + assert_equal(6, salt.size) assert_equal(t, at) end def test_bad_split cases = [ - '', - '1970-01-01T00:00:00+1:00', - '1969-01-01T00:00:00Z', - '1970-00-01T00:00:00Z', - '1970.01-01T00:00:00Z', - 'Thu Sep 7 13:29:31 PDT 2006', - 'monkeys' + "", + "1970-01-01T00:00:00+1:00", + "1969-01-01T00:00:00Z", + "1970-00-01T00:00:00Z", + "1970.01-01T00:00:00Z", + "Thu Sep 7 13:29:31 PDT 2006", + "monkeys", ] + cases.each do |c| assert_raises(ArgumentError, c.inspect) { Nonce.split_nonce(c) } end @@ -54,33 +60,34 @@ def test_bad_split def test_check_timestamp cases = [ # exact, no allowed skew - ['1970-01-01T00:00:00Z', 0, 0, true], + ["1970-01-01T00:00:00Z", 0, 0, true], # exact, large skew - ['1970-01-01T00:00:00Z', 1000, 0, true], + ["1970-01-01T00:00:00Z", 1000, 0, true], # no allowed skew, one second old - ['1970-01-01T00:00:00Z', 0, 1, false], + ["1970-01-01T00:00:00Z", 0, 1, false], # many seconds old, outside of skew - ['1970-01-01T00:00:00Z', 10, 50, false], + ["1970-01-01T00:00:00Z", 10, 50, false], # one second old, one second skew allowed - ['1970-01-01T00:00:00Z', 1, 1, true], + ["1970-01-01T00:00:00Z", 1, 1, true], # One second in the future, one second skew allowed - ['1970-01-01T00:00:02Z', 1, 1, true], + ["1970-01-01T00:00:02Z", 1, 1, true], # two seconds in the future, one second skew allowed - ['1970-01-01T00:00:02Z', 1, 0, false], + ["1970-01-01T00:00:02Z", 1, 0, false], # malformed nonce string - ['monkeys', 0, 0, false] + ["monkeys", 0, 0, false], ] cases.each do |c| (nonce_str, allowed_skew, now, expected) = c actual = Nonce.check_timestamp(nonce_str, allowed_skew, now) + assert_equal(expected, actual, c.inspect) end end diff --git a/test/test_oauth.rb b/test/test_oauth.rb index d267153..c65f05e 100644 --- a/test/test_oauth.rb +++ b/test/test_oauth.rb @@ -1,9 +1,9 @@ -require 'minitest/autorun' -require 'openid/extensions/oauth' -require 'openid/message' -require 'openid/server' -require 'openid/consumer/responses' -require 'openid/consumer/discovery' +require_relative "test_helper" +require "openid/extensions/oauth" +require "openid/message" +require "openid/server" +require "openid/consumer/responses" +require "openid/consumer/discovery" module OpenID module OAuthTest @@ -15,57 +15,65 @@ def setup def test_construct assert_nil(@req.consumer) assert_nil(@req.scope) - assert_equal('oauth', @req.ns_alias) + assert_equal("oauth", @req.ns_alias) - req2 = OAuth::Request.new('CONSUMER', 'http://sample.com/some_scope') - assert_equal('CONSUMER', req2.consumer) - assert_equal('http://sample.com/some_scope', req2.scope) + req2 = OAuth::Request.new("CONSUMER", "http://sample.com/some_scope") + + assert_equal("CONSUMER", req2.consumer) + assert_equal("http://sample.com/some_scope", req2.scope) end def test_add_consumer - @req.consumer = 'CONSUMER' - assert_equal('CONSUMER', @req.consumer) + @req.consumer = "CONSUMER" + + assert_equal("CONSUMER", @req.consumer) end def test_add_scope - @req.scope = 'http://sample.com/some_scope' - assert_equal('http://sample.com/some_scope', @req.scope) + @req.scope = "http://sample.com/some_scope" + + assert_equal("http://sample.com/some_scope", @req.scope) end def test_get_extension_args - assert_equal({}, @req.get_extension_args) - @req.consumer = 'CONSUMER' - assert_equal({ 'consumer' => 'CONSUMER' }, @req.get_extension_args) - @req.scope = 'http://sample.com/some_scope' - assert_equal({ 'consumer' => 'CONSUMER', 'scope' => 'http://sample.com/some_scope' }, @req.get_extension_args) + assert_empty(@req.get_extension_args) + @req.consumer = "CONSUMER" + + assert_equal({"consumer" => "CONSUMER"}, @req.get_extension_args) + @req.scope = "http://sample.com/some_scope" + + assert_equal({"consumer" => "CONSUMER", "scope" => "http://sample.com/some_scope"}, @req.get_extension_args) end def test_parse_extension_args - args = { 'consumer' => 'CONSUMER', 'scope' => 'http://sample.com/some_scope' } + args = {"consumer" => "CONSUMER", "scope" => "http://sample.com/some_scope"} @req.parse_extension_args(args) - assert_equal('CONSUMER', @req.consumer) - assert_equal('http://sample.com/some_scope', @req.scope) + + assert_equal("CONSUMER", @req.consumer) + assert_equal("http://sample.com/some_scope", @req.scope) end def test_parse_extension_args_empty @req.parse_extension_args({}) + assert_nil(@req.consumer) assert_nil(@req.scope) end def test_from_openid_request openid_req_msg = Message.from_openid_args({ - 'mode' => 'checkid_setup', - 'ns' => OPENID2_NS, - 'ns.oauth' => OAuth::NS_URI, - 'oauth.consumer' => 'CONSUMER', - 'oauth.scope' => 'http://sample.com/some_scope' - }) + "mode" => "checkid_setup", + "ns" => OPENID2_NS, + "ns.oauth" => OAuth::NS_URI, + "oauth.consumer" => "CONSUMER", + "oauth.scope" => "http://sample.com/some_scope", + }) oid_req = Server::OpenIDRequest.new oid_req.message = openid_req_msg req = OAuth::Request.from_openid_request(oid_req) - assert_equal('CONSUMER', req.consumer) - assert_equal('http://sample.com/some_scope', req.scope) + + assert_equal("CONSUMER", req.consumer) + assert_equal("http://sample.com/some_scope", req.scope) end def test_from_openid_request_no_oauth @@ -73,7 +81,8 @@ def test_from_openid_request_no_oauth openid_req = Server::OpenIDRequest.new openid_req.message = message oauth_req = OAuth::Request.from_openid_request(openid_req) - assert(oauth_req.nil?) + + assert_nil(oauth_req) end end @@ -99,74 +108,85 @@ def test_construct assert_nil(@req.request_token) assert_nil(@req.scope) - req2 = OAuth::Response.new('REQUESTTOKEN', 'http://sample.com/some_scope') - assert_equal('REQUESTTOKEN', req2.request_token) - assert_equal('http://sample.com/some_scope', req2.scope) + req2 = OAuth::Response.new("REQUESTTOKEN", "http://sample.com/some_scope") + + assert_equal("REQUESTTOKEN", req2.request_token) + assert_equal("http://sample.com/some_scope", req2.scope) end def test_add_request_token - @req.request_token = 'REQUESTTOKEN' - assert_equal('REQUESTTOKEN', @req.request_token) + @req.request_token = "REQUESTTOKEN" + + assert_equal("REQUESTTOKEN", @req.request_token) end def test_add_scope - @req.scope = 'http://sample.com/some_scope' - assert_equal('http://sample.com/some_scope', @req.scope) + @req.scope = "http://sample.com/some_scope" + + assert_equal("http://sample.com/some_scope", @req.scope) end def test_get_extension_args - assert_equal({}, @req.get_extension_args) - @req.request_token = 'REQUESTTOKEN' - assert_equal({ 'request_token' => 'REQUESTTOKEN' }, @req.get_extension_args) - @req.scope = 'http://sample.com/some_scope' - assert_equal({ 'request_token' => 'REQUESTTOKEN', 'scope' => 'http://sample.com/some_scope' }, - @req.get_extension_args) + assert_empty(@req.get_extension_args) + @req.request_token = "REQUESTTOKEN" + + assert_equal({"request_token" => "REQUESTTOKEN"}, @req.get_extension_args) + @req.scope = "http://sample.com/some_scope" + + assert_equal( + {"request_token" => "REQUESTTOKEN", "scope" => "http://sample.com/some_scope"}, + @req.get_extension_args, + ) end def test_parse_extension_args - args = { 'request_token' => 'REQUESTTOKEN', 'scope' => 'http://sample.com/some_scope' } + args = {"request_token" => "REQUESTTOKEN", "scope" => "http://sample.com/some_scope"} @req.parse_extension_args(args) - assert_equal('REQUESTTOKEN', @req.request_token) - assert_equal('http://sample.com/some_scope', @req.scope) + + assert_equal("REQUESTTOKEN", @req.request_token) + assert_equal("http://sample.com/some_scope", @req.scope) end def test_parse_extension_args_empty @req.parse_extension_args({}) + assert_nil(@req.request_token) assert_nil(@req.scope) end def test_from_success_response openid_req_msg = Message.from_openid_args({ - 'mode' => 'id_res', - 'ns' => OPENID2_NS, - 'ns.oauth' => OAuth::NS_URI, - 'oauth.request_token' => 'REQUESTTOKEN', - 'oauth.scope' => 'http://sample.com/some_scope' - }) + "mode" => "id_res", + "ns" => OPENID2_NS, + "ns.oauth" => OAuth::NS_URI, + "oauth.request_token" => "REQUESTTOKEN", + "oauth.scope" => "http://sample.com/some_scope", + }) signed_stuff = { - 'request_token' => 'REQUESTTOKEN', - 'scope' => 'http://sample.com/some_scope' + "request_token" => "REQUESTTOKEN", + "scope" => "http://sample.com/some_scope", } oid_req = DummySuccessResponse.new(openid_req_msg, signed_stuff) req = OAuth::Response.from_success_response(oid_req) - assert_equal('REQUESTTOKEN', req.request_token) - assert_equal('http://sample.com/some_scope', req.scope) + + assert_equal("REQUESTTOKEN", req.request_token) + assert_equal("http://sample.com/some_scope", req.scope) end def test_from_success_response_unsigned openid_req_msg = Message.from_openid_args({ - 'mode' => 'id_res', - 'ns' => OPENID2_NS, - 'ns.oauth' => OAuth::NS_URI, - 'oauth.request_token' => 'REQUESTTOKEN', - 'oauth.scope' => 'http://sample.com/some_scope' - }) + "mode" => "id_res", + "ns" => OPENID2_NS, + "ns.oauth" => OAuth::NS_URI, + "oauth.request_token" => "REQUESTTOKEN", + "oauth.scope" => "http://sample.com/some_scope", + }) signed_stuff = {} endpoint = OpenIDServiceEndpoint.new oid_req = Consumer::SuccessResponse.new(endpoint, openid_req_msg, signed_stuff) req = OAuth::Response.from_success_response(oid_req) - assert(req.nil?, req.inspect) + + assert_nil(req, req.inspect) end end end diff --git a/test/test_openid_yadis.rb b/test/test_openid_yadis.rb index 3861f1e..5ae1312 100644 --- a/test/test_openid_yadis.rb +++ b/test/test_openid_yadis.rb @@ -1,6 +1,6 @@ -require 'minitest/autorun' -require 'openid/consumer/discovery' -require 'openid/yadis/services' +require_relative "test_helper" +require "openid/consumer/discovery" +require "openid/yadis/services" module OpenID XRDS_BOILERPLATE = <<~EOF @@ -18,12 +18,12 @@ def self.mkXRDS(services) format(XRDS_BOILERPLATE, services) end - def self.mkService(uris = nil, type_uris = nil, local_id = nil, dent = ' ') + def self.mkService(uris = nil, type_uris = nil, local_id = nil, dent = " ") chunks = [dent, "\n"] - dent2 = dent + ' ' + dent2 = dent + " " if type_uris type_uris.each do |type_uri| - chunks += [dent2 + '', type_uri, "\n"] + chunks += [dent2 + "", type_uri, "\n"] end end @@ -35,28 +35,30 @@ def self.mkService(uris = nil, type_uris = nil, local_id = nil, dent = ' prio = nil end - chunks += [dent2, '', uri, "\n"] + chunks += [">", uri, "\n"] end end - chunks += [dent2, '', local_id, "\n"] if local_id + chunks += [dent2, "", local_id, "\n"] if local_id chunks += [dent, "\n"] - chunks.join('') + chunks.join("") end # Different sets of server URLs for use in the URI tag SERVER_URL_OPTIONS = [ [], # This case should not generate an endpoint object - ['http://server.url/'], - ['https://server.url/'], - ['https://server.url/', 'http://server.url/'], - ['https://server.url/', - 'http://server.url/', - 'http://example.server.url/'] + ["http://server.url/"], + ["https://server.url/"], + ["https://server.url/", "http://server.url/"], + [ + "https://server.url/", + "http://server.url/", + "http://example.server.url/", + ], ] # Used for generating test data @@ -72,15 +74,15 @@ def self.subsets(l) # A couple of example extension type URIs. These are not at all # official, but are just here for testing. EXT_TYPES = [ - 'http://janrain.com/extension/blah', - 'http://openid.net/sreg/1.0' + "http://janrain.com/extension/blah", + "http://openid.net/sreg/1.0", ] # Range of valid Delegate tag values for generating test data LOCAL_ID_OPTIONS = [ nil, - 'http://vanity.domain/', - 'https://somewhere/yadis/' + "http://vanity.domain/", + "https://somewhere/yadis/", ] class OpenIDYadisTest @@ -90,12 +92,14 @@ def initialize(uris, type_uris, local_id) @type_uris = type_uris @local_id = local_id - @yadis_url = 'http://unit.test/' + @yadis_url = "http://unit.test/" # Create an XRDS document to parse - services = OpenID.mkService(@uris, - @type_uris, - @local_id) + services = OpenID.mkService( + @uris, + @type_uris, + @local_id, + ) @xrds = OpenID.mkXRDS(services) end @@ -124,6 +128,7 @@ def runTest(testcase) # and types actual_types = endpoint.type_uris.dup actual_types.sort! + testcase.assert_equal(type_uris, actual_types, actual_types.inspect) end diff --git a/test/test_pape.rb b/test/test_pape.rb index 93b75a9..f470709 100644 --- a/test/test_pape.rb +++ b/test/test_pape.rb @@ -1,8 +1,8 @@ -require 'minitest/autorun' -require 'openid/extensions/pape' -require 'openid/message' -require 'openid/server' -require 'openid/consumer' +require_relative "test_helper" +require "openid/extensions/pape" +require "openid/message" +require "openid/server" +require "openid/consumer" module OpenID module PAPETest @@ -12,64 +12,81 @@ def setup end def test_construct - assert_equal([], @req.preferred_auth_policies) + assert_empty(@req.preferred_auth_policies) assert_nil(@req.max_auth_age) - assert_equal('pape', @req.ns_alias) + assert_equal("pape", @req.ns_alias) req2 = PAPE::Request.new([PAPE::AUTH_MULTI_FACTOR], 1000) + assert_equal([PAPE::AUTH_MULTI_FACTOR], req2.preferred_auth_policies) assert_equal(1000, req2.max_auth_age) end def test_add_policy_uri - assert_equal([], @req.preferred_auth_policies) + assert_empty(@req.preferred_auth_policies) @req.add_policy_uri(PAPE::AUTH_MULTI_FACTOR) + assert_equal([PAPE::AUTH_MULTI_FACTOR], @req.preferred_auth_policies) @req.add_policy_uri(PAPE::AUTH_MULTI_FACTOR) + assert_equal([PAPE::AUTH_MULTI_FACTOR], @req.preferred_auth_policies) @req.add_policy_uri(PAPE::AUTH_PHISHING_RESISTANT) + assert_equal([PAPE::AUTH_MULTI_FACTOR, PAPE::AUTH_PHISHING_RESISTANT], @req.preferred_auth_policies) @req.add_policy_uri(PAPE::AUTH_MULTI_FACTOR) + assert_equal([PAPE::AUTH_MULTI_FACTOR, PAPE::AUTH_PHISHING_RESISTANT], @req.preferred_auth_policies) end def test_get_extension_args - assert_equal({ 'preferred_auth_policies' => '' }, @req.get_extension_args) - @req.add_policy_uri('http://uri') - assert_equal({ 'preferred_auth_policies' => 'http://uri' }, @req.get_extension_args) - @req.add_policy_uri('http://zig') - assert_equal({ 'preferred_auth_policies' => 'http://uri http://zig' }, @req.get_extension_args) + assert_equal({"preferred_auth_policies" => ""}, @req.get_extension_args) + @req.add_policy_uri("http://uri") + + assert_equal({"preferred_auth_policies" => "http://uri"}, @req.get_extension_args) + @req.add_policy_uri("http://zig") + + assert_equal({"preferred_auth_policies" => "http://uri http://zig"}, @req.get_extension_args) @req.max_auth_age = 789 - assert_equal({ 'preferred_auth_policies' => 'http://uri http://zig', 'max_auth_age' => '789' }, - @req.get_extension_args) + + assert_equal( + {"preferred_auth_policies" => "http://uri http://zig", "max_auth_age" => "789"}, + @req.get_extension_args, + ) end def test_parse_extension_args - args = { 'preferred_auth_policies' => 'http://foo http://bar', - 'max_auth_age' => '9' } + args = { + "preferred_auth_policies" => "http://foo http://bar", + "max_auth_age" => "9", + } @req.parse_extension_args(args) + assert_equal(9, @req.max_auth_age) - assert_equal(['http://foo', 'http://bar'], @req.preferred_auth_policies) + assert_equal(["http://foo", "http://bar"], @req.preferred_auth_policies) end def test_parse_extension_args_empty @req.parse_extension_args({}) + assert_nil(@req.max_auth_age) - assert_equal([], @req.preferred_auth_policies) + assert_empty(@req.preferred_auth_policies) end def test_from_openid_request openid_req_msg = Message.from_openid_args({ - 'mode' => 'checkid_setup', - 'ns' => OPENID2_NS, - 'ns.pape' => PAPE::NS_URI, - 'pape.preferred_auth_policies' => [PAPE::AUTH_MULTI_FACTOR, - PAPE::AUTH_PHISHING_RESISTANT].join(' '), - 'pape.max_auth_age' => '5476' - }) + "mode" => "checkid_setup", + "ns" => OPENID2_NS, + "ns.pape" => PAPE::NS_URI, + "pape.preferred_auth_policies" => [ + PAPE::AUTH_MULTI_FACTOR, + PAPE::AUTH_PHISHING_RESISTANT, + ].join(" "), + "pape.max_auth_age" => "5476", + }) oid_req = Server::OpenIDRequest.new oid_req.message = openid_req_msg req = PAPE::Request.from_openid_request(oid_req) + assert_equal([PAPE::AUTH_MULTI_FACTOR, PAPE::AUTH_PHISHING_RESISTANT], req.preferred_auth_policies) assert_equal(5476, req.max_auth_age) end @@ -79,14 +96,18 @@ def test_from_openid_request_no_pape openid_req = Server::OpenIDRequest.new openid_req.message = message pape_req = PAPE::Request.from_openid_request(openid_req) - assert(pape_req.nil?) + + assert_nil(pape_req) end def test_preferred_types @req.add_policy_uri(PAPE::AUTH_PHISHING_RESISTANT) @req.add_policy_uri(PAPE::AUTH_MULTI_FACTOR) - pt = @req.preferred_types([PAPE::AUTH_MULTI_FACTOR, - PAPE::AUTH_MULTI_FACTOR_PHYSICAL]) + pt = @req.preferred_types([ + PAPE::AUTH_MULTI_FACTOR, + PAPE::AUTH_MULTI_FACTOR_PHYSICAL, + ]) + assert_equal([PAPE::AUTH_MULTI_FACTOR], pt) end end @@ -110,52 +131,67 @@ def setup end def test_construct - assert_equal([], @req.auth_policies) + assert_empty(@req.auth_policies) assert_nil(@req.auth_time) - assert_equal('pape', @req.ns_alias) + assert_equal("pape", @req.ns_alias) assert_nil(@req.nist_auth_level) - req2 = PAPE::Response.new([PAPE::AUTH_MULTI_FACTOR], '1983-11-05T12:30:24Z', 3) + req2 = PAPE::Response.new([PAPE::AUTH_MULTI_FACTOR], "1983-11-05T12:30:24Z", 3) + assert_equal([PAPE::AUTH_MULTI_FACTOR], req2.auth_policies) - assert_equal('1983-11-05T12:30:24Z', req2.auth_time) + assert_equal("1983-11-05T12:30:24Z", req2.auth_time) assert_equal(3, req2.nist_auth_level) end def test_add_policy_uri - assert_equal([], @req.auth_policies) + assert_empty(@req.auth_policies) @req.add_policy_uri(PAPE::AUTH_MULTI_FACTOR) + assert_equal([PAPE::AUTH_MULTI_FACTOR], @req.auth_policies) @req.add_policy_uri(PAPE::AUTH_MULTI_FACTOR) + assert_equal([PAPE::AUTH_MULTI_FACTOR], @req.auth_policies) @req.add_policy_uri(PAPE::AUTH_PHISHING_RESISTANT) + assert_equal([PAPE::AUTH_MULTI_FACTOR, PAPE::AUTH_PHISHING_RESISTANT], @req.auth_policies) @req.add_policy_uri(PAPE::AUTH_MULTI_FACTOR) + assert_equal([PAPE::AUTH_MULTI_FACTOR, PAPE::AUTH_PHISHING_RESISTANT], @req.auth_policies) end def test_get_extension_args - assert_equal({ 'auth_policies' => 'none' }, @req.get_extension_args) - @req.add_policy_uri('http://uri') - assert_equal({ 'auth_policies' => 'http://uri' }, @req.get_extension_args) - @req.add_policy_uri('http://zig') - assert_equal({ 'auth_policies' => 'http://uri http://zig' }, @req.get_extension_args) - @req.auth_time = '1983-11-05T12:30:24Z' - assert_equal({ 'auth_policies' => 'http://uri http://zig', 'auth_time' => '1983-11-05T12:30:24Z' }, - @req.get_extension_args) + assert_equal({"auth_policies" => "none"}, @req.get_extension_args) + @req.add_policy_uri("http://uri") + + assert_equal({"auth_policies" => "http://uri"}, @req.get_extension_args) + @req.add_policy_uri("http://zig") + + assert_equal({"auth_policies" => "http://uri http://zig"}, @req.get_extension_args) + @req.auth_time = "1983-11-05T12:30:24Z" + + assert_equal( + {"auth_policies" => "http://uri http://zig", "auth_time" => "1983-11-05T12:30:24Z"}, + @req.get_extension_args, + ) @req.nist_auth_level = 3 + assert_equal( - { 'auth_policies' => 'http://uri http://zig', 'auth_time' => '1983-11-05T12:30:24Z', - 'nist_auth_level' => '3' }, @req.get_extension_args + { + "auth_policies" => "http://uri http://zig", + "auth_time" => "1983-11-05T12:30:24Z", + "nist_auth_level" => "3", + }, + @req.get_extension_args, ) end def test_get_extension_args_error_auth_age - @req.auth_time = 'the beginning of time' + @req.auth_time = "the beginning of time" assert_raises(ArgumentError) { @req.get_extension_args } end def test_get_extension_args_error_nist_auth_level - @req.nist_auth_level = 'high as a kite' + @req.nist_auth_level = "high as a kite" assert_raises(ArgumentError) { @req.get_extension_args } @req.nist_auth_level = 5 assert_raises(ArgumentError) { @req.get_extension_args } @@ -164,89 +200,109 @@ def test_get_extension_args_error_nist_auth_level end def test_parse_extension_args - args = { 'auth_policies' => 'http://foo http://bar', - 'auth_time' => '1983-11-05T12:30:24Z' } + args = { + "auth_policies" => "http://foo http://bar", + "auth_time" => "1983-11-05T12:30:24Z", + } @req.parse_extension_args(args) - assert_equal('1983-11-05T12:30:24Z', @req.auth_time) - assert_equal(['http://foo', 'http://bar'], @req.auth_policies) + + assert_equal("1983-11-05T12:30:24Z", @req.auth_time) + assert_equal(["http://foo", "http://bar"], @req.auth_policies) end def test_parse_extension_args_empty @req.parse_extension_args({}) + assert_nil(@req.auth_time) - assert_equal([], @req.auth_policies) + assert_empty(@req.auth_policies) end def test_parse_extension_args_strict_bogus1 - args = { 'auth_policies' => 'http://foo http://bar', - 'auth_time' => 'this one time' } + args = { + "auth_policies" => "http://foo http://bar", + "auth_time" => "this one time", + } assert_raises(ArgumentError) do @req.parse_extension_args(args, true) end end def test_parse_extension_args_strict_bogus2 - args = { 'auth_policies' => 'http://foo http://bar', - 'auth_time' => '1983-11-05T12:30:24Z', - 'nist_auth_level' => 'some' } + args = { + "auth_policies" => "http://foo http://bar", + "auth_time" => "1983-11-05T12:30:24Z", + "nist_auth_level" => "some", + } assert_raises(ArgumentError) do @req.parse_extension_args(args, true) end end def test_parse_extension_args_strict_good - args = { 'auth_policies' => 'http://foo http://bar', - 'auth_time' => '2007-10-11T05:25:18Z', - 'nist_auth_level' => '0' } + args = { + "auth_policies" => "http://foo http://bar", + "auth_time" => "2007-10-11T05:25:18Z", + "nist_auth_level" => "0", + } @req.parse_extension_args(args, true) - assert_equal(['http://foo', 'http://bar'], @req.auth_policies) - assert_equal('2007-10-11T05:25:18Z', @req.auth_time) + + assert_equal(["http://foo", "http://bar"], @req.auth_policies) + assert_equal("2007-10-11T05:25:18Z", @req.auth_time) assert_equal(0, @req.nist_auth_level) end def test_parse_extension_args_nostrict_bogus - args = { 'auth_policies' => 'http://foo http://bar', - 'auth_time' => 'some time ago', - 'nist_auth_level' => 'some' } + args = { + "auth_policies" => "http://foo http://bar", + "auth_time" => "some time ago", + "nist_auth_level" => "some", + } @req.parse_extension_args(args) - assert_equal(['http://foo', 'http://bar'], @req.auth_policies) + + assert_equal(["http://foo", "http://bar"], @req.auth_policies) assert_nil(@req.auth_time) assert_nil(@req.nist_auth_level) end def test_from_success_response openid_req_msg = Message.from_openid_args({ - 'mode' => 'id_res', - 'ns' => OPENID2_NS, - 'ns.pape' => PAPE::NS_URI, - 'pape.auth_policies' => [PAPE::AUTH_MULTI_FACTOR, - PAPE::AUTH_PHISHING_RESISTANT].join(' '), - 'pape.auth_time' => '1983-11-05T12:30:24Z' - }) + "mode" => "id_res", + "ns" => OPENID2_NS, + "ns.pape" => PAPE::NS_URI, + "pape.auth_policies" => [ + PAPE::AUTH_MULTI_FACTOR, + PAPE::AUTH_PHISHING_RESISTANT, + ].join(" "), + "pape.auth_time" => "1983-11-05T12:30:24Z", + }) signed_stuff = { - 'auth_policies' => [PAPE::AUTH_MULTI_FACTOR, PAPE::AUTH_PHISHING_RESISTANT].join(' '), - 'auth_time' => '1983-11-05T12:30:24Z' + "auth_policies" => [PAPE::AUTH_MULTI_FACTOR, PAPE::AUTH_PHISHING_RESISTANT].join(" "), + "auth_time" => "1983-11-05T12:30:24Z", } oid_req = DummySuccessResponse.new(openid_req_msg, signed_stuff) req = PAPE::Response.from_success_response(oid_req) + assert_equal([PAPE::AUTH_MULTI_FACTOR, PAPE::AUTH_PHISHING_RESISTANT], req.auth_policies) - assert_equal('1983-11-05T12:30:24Z', req.auth_time) + assert_equal("1983-11-05T12:30:24Z", req.auth_time) end def test_from_success_response_unsigned openid_req_msg = Message.from_openid_args({ - 'mode' => 'id_res', - 'ns' => OPENID2_NS, - 'ns.pape' => PAPE::NS_URI, - 'pape.auth_policies' => [PAPE::AUTH_MULTI_FACTOR, - PAPE::AUTH_PHISHING_RESISTANT].join(' '), - 'pape.auth_time' => '1983-11-05T12:30:24Z' - }) + "mode" => "id_res", + "ns" => OPENID2_NS, + "ns.pape" => PAPE::NS_URI, + "pape.auth_policies" => [ + PAPE::AUTH_MULTI_FACTOR, + PAPE::AUTH_PHISHING_RESISTANT, + ].join(" "), + "pape.auth_time" => "1983-11-05T12:30:24Z", + }) signed_stuff = {} endpoint = OpenIDServiceEndpoint.new oid_req = Consumer::SuccessResponse.new(endpoint, openid_req_msg, signed_stuff) req = PAPE::Response.from_success_response(oid_req) - assert(req.nil?, req.inspect) + + assert_nil(req, req.inspect) end end end diff --git a/test/test_parsehtml.rb b/test/test_parsehtml.rb index dcbaadd..16baf33 100644 --- a/test/test_parsehtml.rb +++ b/test/test_parsehtml.rb @@ -1,6 +1,6 @@ -require 'minitest/autorun' -require 'testutil' -require 'openid/yadis/parsehtml' +require_relative "test_helper" +require_relative "testutil" +require "openid/yadis/parsehtml" module OpenID class ParseHTMLTestCase < Minitest::Test @@ -8,7 +8,7 @@ class ParseHTMLTestCase < Minitest::Test def test_parsehtml reserved_values = %w[None EOF] - chunks = read_data_file('test1-parsehtml.txt', false).split("\f\n") + chunks = read_data_file("test1-parsehtml.txt", false).split("\f\n") chunks.each do |c| expected, html = c.split("\n", 2) @@ -18,9 +18,10 @@ def test_parsehtml # this case is a little hard to detect and the distinction # seems unimportant - expected = 'None' if expected == 'EOF' + expected = "None" if expected == "EOF" + + found = "None" if found.nil? - found = 'None' if found.nil? assert_equal(expected, found, html.split("\n", 2)[0]) end end @@ -29,20 +30,23 @@ def test_parsehtml # the HTML tokenizer test class TC_TestHTMLTokenizer < Minitest::Test def test_bad_link - toke = HTMLTokenizer.new('

foo

') - assert('http://bad.com/link' == toke.getTag('a').attr_hash['href']) + toke = HTMLTokenizer.new("

foo

") + + assert_equal("http://bad.com/link", toke.getTag("a").attr_hash["href"]) end def test_namespace toke = HTMLTokenizer.new('') - assert('http://www.com/foo' == toke.getTag('f:table').attr_hash['xmlns:f']) + + assert_equal("http://www.com/foo", toke.getTag("f:table").attr_hash["xmlns:f"]) end def test_comment - toke = HTMLTokenizer.new('') + toke = HTMLTokenizer.new("") t = toke.getNextToken - assert(HTMLComment == t.class) - assert('comment on me' == t.contents) + + assert_instance_of(HTMLComment, t) + assert_equal("comment on me", t.contents) end def test_full @@ -68,11 +72,11 @@ def test_full " toke = HTMLTokenizer.new(page) - assert('

' == toke.getTag('h1', 'h2', 'h3').to_s.downcase) - assert(HTMLTag.new('') == toke.getTag('IMG', 'A')) - assert('links' == toke.getTrimmedText) - assert(toke.getTag('IMG', 'A').attr_hash['optional']) - assert('_blank' == toke.getTag('IMG', 'A').attr_hash['target']) + assert_equal("

", toke.getTag("h1", "h2", "h3").to_s.downcase) + assert_equal(HTMLTag.new(''), toke.getTag("IMG", "A")) + assert_equal("links", toke.getTrimmedText) + assert(toke.getTag("IMG", "A").attr_hash["optional"]) + assert_equal("_blank", toke.getTag("IMG", "A").attr_hash["target"]) end end end diff --git a/test/test_responses.rb b/test/test_responses.rb index b879969..46cc1e2 100644 --- a/test/test_responses.rb +++ b/test/test_responses.rb @@ -1,6 +1,6 @@ -require 'minitest/autorun' -require 'openid/consumer/discovery' -require 'openid/consumer/responses' +require_relative "test_helper" +require "openid/consumer/discovery" +require "openid/consumer/responses" module OpenID class Consumer @@ -8,53 +8,59 @@ module TestResponses class TestSuccessResponse < Minitest::Test def setup @endpoint = OpenIDServiceEndpoint.new - @endpoint.claimed_id = 'identity_url' + @endpoint.claimed_id = "identity_url" end def test_extension_response q = { - 'ns.sreg' => 'urn:sreg', - 'ns.unittest' => 'urn:unittest', - 'unittest.one' => '1', - 'unittest.two' => '2', - 'sreg.nickname' => 'j3h', - 'return_to' => 'return_to' + "ns.sreg" => "urn:sreg", + "ns.unittest" => "urn:unittest", + "unittest.one" => "1", + "unittest.two" => "2", + "sreg.nickname" => "j3h", + "return_to" => "return_to", } - signed_list = q.keys.map { |k| 'openid.' + k } + signed_list = q.keys.map { |k| "openid." + k } msg = Message.from_openid_args(q) resp = SuccessResponse.new(@endpoint, msg, signed_list) - utargs = resp.extension_response('urn:unittest', false) - assert_equal(utargs, { 'one' => '1', 'two' => '2' }) - sregargs = resp.extension_response('urn:sreg', false) - assert_equal(sregargs, { 'nickname' => 'j3h' }) + utargs = resp.extension_response("urn:unittest", false) + + assert_equal({"one" => "1", "two" => "2"}, utargs) + sregargs = resp.extension_response("urn:sreg", false) + + assert_equal({"nickname" => "j3h"}, sregargs) end def test_extension_response_signed args = { - 'ns.sreg' => 'urn:sreg', - 'ns.unittest' => 'urn:unittest', - 'unittest.one' => '1', - 'unittest.two' => '2', - 'sreg.nickname' => 'j3h', - 'sreg.dob' => 'yesterday', - 'return_to' => 'return_to', - 'signed' => 'sreg.nickname,unittest.one,sreg.dob' + "ns.sreg" => "urn:sreg", + "ns.unittest" => "urn:unittest", + "unittest.one" => "1", + "unittest.two" => "2", + "sreg.nickname" => "j3h", + "sreg.dob" => "yesterday", + "return_to" => "return_to", + "signed" => "sreg.nickname,unittest.one,sreg.dob", } - signed_list = ['openid.sreg.nickname', - 'openid.unittest.one', - 'openid.sreg.dob'] + signed_list = [ + "openid.sreg.nickname", + "openid.unittest.one", + "openid.sreg.dob", + ] msg = Message.from_openid_args(args) resp = SuccessResponse.new(@endpoint, msg, signed_list) # All args in this NS are signed, so expect all. - sregargs = resp.extension_response('urn:sreg', true) - assert_equal(sregargs, { 'nickname' => 'j3h', 'dob' => 'yesterday' }) + sregargs = resp.extension_response("urn:sreg", true) + + assert_equal({"nickname" => "j3h", "dob" => "yesterday"}, sregargs) # Not all args in this NS are signed, so expect nil when # asking for them. - utargs = resp.extension_response('urn:unittest', true) + utargs = resp.extension_response("urn:unittest", true) + assert_nil(utargs) end end diff --git a/test/test_server.rb b/test/test_server.rb index 865666a..f211a3d 100644 --- a/test/test_server.rb +++ b/test/test_server.rb @@ -1,15 +1,15 @@ -require 'minitest/autorun' -require 'testutil' -require 'util' -require 'uri' -require 'openid/server' -require 'openid/cryptutil' -require 'openid/association' -require 'openid/util' -require 'openid/message' -require 'openid/store/memory' -require 'openid/dh' -require 'openid/consumer/associationmanager' +require_relative "test_helper" +require_relative "testutil" +require_relative "util" +require "uri" +require "openid/server" +require "openid/cryptutil" +require "openid/association" +require "openid/util" +require "openid/message" +require "openid/store/memory" +require "openid/dh" +require "openid/consumer/associationmanager" # In general, if you edit or add tests here, try to move in the # direction of testing smaller units. For testing the external @@ -25,7 +25,7 @@ module OpenID class CatchLogs def catchlogs_setup @old_logger = Util.logger - Util.logger = method('got_log_message') + Util.logger = method(:got_log_message) @messages = [] end @@ -40,89 +40,96 @@ def teardown class TestProtocolError < Minitest::Test def test_browserWithReturnTo - return_to = 'http://rp.unittest/consumer' + return_to = "http://rp.unittest/consumer" # will be a ProtocolError raised by Decode or # CheckIDRequest.answer args = Message.from_post_args({ - 'openid.mode' => 'monkeydance', - 'openid.identity' => 'http://wagu.unittest/', - 'openid.return_to' => return_to - }) - e = Server::ProtocolError.new(args, 'plucky') + "openid.mode" => "monkeydance", + "openid.identity" => "http://wagu.unittest/", + "openid.return_to" => return_to, + }) + e = Server::ProtocolError.new(args, "plucky") + assert(e.has_return_to) expected_args = { - 'openid.mode' => 'error', - 'openid.error' => 'plucky' + "openid.mode" => "error", + "openid.error" => "plucky", } - _, result_args = e.encode_to_url.split('?', 2) + _, result_args = e.encode_to_url.split("?", 2) result_args = Util.parse_query(result_args) + assert_equal(result_args, expected_args) end def test_browserWithReturnTo_OpenID2_GET - return_to = 'http://rp.unittest/consumer' + return_to = "http://rp.unittest/consumer" # will be a ProtocolError raised by Decode or # CheckIDRequest.answer args = Message.from_post_args({ - 'openid.ns' => OPENID2_NS, - 'openid.mode' => 'monkeydance', - 'openid.identity' => 'http://wagu.unittest/', - 'openid.claimed_id' => 'http://wagu.unittest/', - 'openid.return_to' => return_to - }) - e = Server::ProtocolError.new(args, 'plucky') + "openid.ns" => OPENID2_NS, + "openid.mode" => "monkeydance", + "openid.identity" => "http://wagu.unittest/", + "openid.claimed_id" => "http://wagu.unittest/", + "openid.return_to" => return_to, + }) + e = Server::ProtocolError.new(args, "plucky") + assert(e.has_return_to) expected_args = { - 'openid.ns' => OPENID2_NS, - 'openid.mode' => 'error', - 'openid.error' => 'plucky' + "openid.ns" => OPENID2_NS, + "openid.mode" => "error", + "openid.error" => "plucky", } - _, result_args = e.encode_to_url.split('?', 2) + _, result_args = e.encode_to_url.split("?", 2) result_args = Util.parse_query(result_args) + assert_equal(result_args, expected_args) end def test_browserWithReturnTo_OpenID2_POST - return_to = 'http://rp.unittest/consumer' + ('x' * OPENID1_URL_LIMIT) + return_to = "http://rp.unittest/consumer" + ("x" * OPENID1_URL_LIMIT) # will be a ProtocolError raised by Decode or # CheckIDRequest.answer args = Message.from_post_args({ - 'openid.ns' => OPENID2_NS, - 'openid.mode' => 'monkeydance', - 'openid.identity' => 'http://wagu.unittest/', - 'openid.claimed_id' => 'http://wagu.unittest/', - 'openid.return_to' => return_to - }) - e = Server::ProtocolError.new(args, 'plucky') + "openid.ns" => OPENID2_NS, + "openid.mode" => "monkeydance", + "openid.identity" => "http://wagu.unittest/", + "openid.claimed_id" => "http://wagu.unittest/", + "openid.return_to" => return_to, + }) + e = Server::ProtocolError.new(args, "plucky") + assert(e.has_return_to) - assert(e.which_encoding == Server::ENCODE_HTML_FORM) - assert(e.to_form_markup == e.to_message.to_form_markup( - args.get_arg(OPENID_NS, 'return_to') + assert_equal(e.which_encoding, Server::ENCODE_HTML_FORM) + assert_equal(e.to_form_markup, e.to_message.to_form_markup( + args.get_arg(OPENID_NS, "return_to"), )) end def test_browserWithReturnTo_OpenID1_exceeds_limit - return_to = 'http://rp.unittest/consumer' + ('x' * OPENID1_URL_LIMIT) + return_to = "http://rp.unittest/consumer" + ("x" * OPENID1_URL_LIMIT) # will be a ProtocolError raised by Decode or # CheckIDRequest.answer args = Message.from_post_args({ - 'openid.mode' => 'monkeydance', - 'openid.identity' => 'http://wagu.unittest/', - 'openid.return_to' => return_to - }) - e = Server::ProtocolError.new(args, 'plucky') + "openid.mode" => "monkeydance", + "openid.identity" => "http://wagu.unittest/", + "openid.return_to" => return_to, + }) + e = Server::ProtocolError.new(args, "plucky") + assert(e.has_return_to) expected_args = { - 'openid.mode' => 'error', - 'openid.error' => 'plucky' + "openid.mode" => "error", + "openid.error" => "plucky", } - assert(e.which_encoding == Server::ENCODE_URL) + assert_equal(e.which_encoding, Server::ENCODE_URL) - _, result_args = e.encode_to_url.split('?', 2) + _, result_args = e.encode_to_url.split("?", 2) result_args = Util.parse_query(result_args) + assert_equal(result_args, expected_args) end @@ -130,50 +137,55 @@ def test_noReturnTo # will be a ProtocolError raised by Decode or # CheckIDRequest.answer args = Message.from_post_args({ - 'openid.mode' => 'zebradance', - 'openid.identity' => 'http://wagu.unittest/' - }) - e = Server::ProtocolError.new(args, 'waffles') + "openid.mode" => "zebradance", + "openid.identity" => "http://wagu.unittest/", + }) + e = Server::ProtocolError.new(args, "waffles") + assert(!e.has_return_to) expected = "error:waffles\nmode:error\n" + assert_equal(e.encode_to_kvform, expected) end def test_no_message - e = Server::ProtocolError.new(nil, 'no message') - assert(e.get_return_to.nil?) + e = Server::ProtocolError.new(nil, "no message") + + assert_nil(e.get_return_to) assert_nil(e.which_encoding) end def test_which_encoding_no_message - e = Server::ProtocolError.new(nil, 'no message') - assert(e.which_encoding.nil?) + e = Server::ProtocolError.new(nil, "no message") + + assert_nil(e.which_encoding) end end class TestDecode < Minitest::Test def setup - @claimed_id = 'http://de.legating.de.coder.unittest/' - @id_url = 'http://decoder.am.unittest/' - @rt_url = 'http://rp.unittest/foobot/?qux=zam' - @tr_url = 'http://rp.unittest/' - @assoc_handle = '{assoc}{handle}' - @op_endpoint = 'http://endpoint.unittest/encode' + @claimed_id = "http://de.legating.de.coder.unittest/" + @id_url = "http://decoder.am.unittest/" + @rt_url = "http://rp.unittest/foobot/?qux=zam" + @tr_url = "http://rp.unittest/" + @assoc_handle = "{assoc}{handle}" + @op_endpoint = "http://endpoint.unittest/encode" @store = Store::Memory.new @server = Server::Server.new(@store, @op_endpoint) - @decode = Server::Decoder.new(@server).method('decode') + @decode = Server::Decoder.new(@server).method(:decode) end def test_none args = {} r = @decode.call(args) + assert_nil(r) end def test_irrelevant args = { - 'pony' => 'spotted', - 'sreg.mutant_power' => 'decaffinator' + "pony" => "spotted", + "sreg.mutant_power" => "decaffinator", } assert_raises(Server::ProtocolError) do @decode.call(args) @@ -182,8 +194,8 @@ def test_irrelevant def test_bad args = { - 'openid.mode' => 'twos-compliment', - 'openid.pants' => 'zippered' + "openid.mode" => "twos-compliment", + "openid.pants" => "zippered", } assert_raises(Server::ProtocolError) do @decode.call(args) @@ -192,16 +204,16 @@ def test_bad def test_dictOfLists args = { - 'openid.mode' => ['checkid_setup'], - 'openid.identity' => @id_url, - 'openid.assoc_handle' => @assoc_handle, - 'openid.return_to' => @rt_url, - 'openid.trust_root' => @tr_url + "openid.mode" => ["checkid_setup"], + "openid.identity" => @id_url, + "openid.assoc_handle" => @assoc_handle, + "openid.return_to" => @rt_url, + "openid.trust_root" => @tr_url, } begin result = @decode.call(args) rescue ArgumentError => e - assert !e.to_s.index('values').nil? + assert(!e.to_s.index("values").nil?) else flunk("Expected ArgumentError, but got result #{result}") end @@ -209,18 +221,19 @@ def test_dictOfLists def test_checkidImmediate args = { - 'openid.mode' => 'checkid_immediate', - 'openid.identity' => @id_url, - 'openid.assoc_handle' => @assoc_handle, - 'openid.return_to' => @rt_url, - 'openid.trust_root' => @tr_url, + "openid.mode" => "checkid_immediate", + "openid.identity" => @id_url, + "openid.assoc_handle" => @assoc_handle, + "openid.return_to" => @rt_url, + "openid.trust_root" => @tr_url, # should be ignored - 'openid.some.extension' => 'junk' + "openid.some.extension" => "junk", } r = @decode.call(args) - assert(r.is_a?(Server::CheckIDRequest)) - assert_equal(r.mode, 'checkid_immediate') - assert_equal(r.immediate, true) + + assert_kind_of(Server::CheckIDRequest, r) + assert_equal("checkid_immediate", r.mode) + assert_equal(true, r.immediate) assert_equal(r.identity, @id_url) assert_equal(r.trust_root, @tr_url) assert_equal(r.return_to, @rt_url) @@ -228,19 +241,26 @@ def test_checkidImmediate end def test_checkidImmediate_constructor - r = Server::CheckIDRequest.new(@id_url, @rt_url, nil, - @rt_url, true, @assoc_handle) - assert(r.mode == 'checkid_immediate') + r = Server::CheckIDRequest.new( + @id_url, + @rt_url, + nil, + @rt_url, + true, + @assoc_handle, + ) + + assert_equal("checkid_immediate", r.mode) assert(r.immediate) end def test_checkid_missing_return_to_and_trust_root args = { - 'openid.ns' => OPENID2_NS, - 'openid.mode' => 'checkid_setup', - 'openid.identity' => @id_url, - 'openid.claimed_id' => @id_url, - 'openid.assoc_handle' => @assoc_handle + "openid.ns" => OPENID2_NS, + "openid.mode" => "checkid_setup", + "openid.identity" => @id_url, + "openid.claimed_id" => @id_url, + "openid.assoc_handle" => @assoc_handle, } assert_raises(Server::ProtocolError) do m = Message.from_post_args(args) @@ -250,55 +270,62 @@ def test_checkid_missing_return_to_and_trust_root def test_checkid_id_select args = { - 'openid.ns' => OPENID2_NS, - 'openid.mode' => 'checkid_setup', - 'openid.identity' => IDENTIFIER_SELECT, - 'openid.claimed_id' => IDENTIFIER_SELECT, - 'openid.assoc_handle' => @assoc_handle, - 'openid.return_to' => @rt_url, - 'openid.realm' => @tr_url + "openid.ns" => OPENID2_NS, + "openid.mode" => "checkid_setup", + "openid.identity" => IDENTIFIER_SELECT, + "openid.claimed_id" => IDENTIFIER_SELECT, + "openid.assoc_handle" => @assoc_handle, + "openid.return_to" => @rt_url, + "openid.realm" => @tr_url, } m = Message.from_post_args(args) req = Server::CheckIDRequest.from_message(m, @op_endpoint) + assert(req.id_select) end def test_checkid_not_id_select args = { - 'openid.ns' => OPENID2_NS, - 'openid.mode' => 'checkid_setup', - 'openid.assoc_handle' => @assoc_handle, - 'openid.return_to' => @rt_url, - 'openid.realm' => @tr_url + "openid.ns" => OPENID2_NS, + "openid.mode" => "checkid_setup", + "openid.assoc_handle" => @assoc_handle, + "openid.return_to" => @rt_url, + "openid.realm" => @tr_url, } id_args = [ - { 'openid.claimed_id' => IDENTIFIER_SELECT, - 'openid.identity' => 'http://bogus.com/' }, - - { 'openid.claimed_id' => 'http://bogus.com/', - 'openid.identity' => 'http://bogus.com/' } + { + "openid.claimed_id" => IDENTIFIER_SELECT, + "openid.identity" => "http://bogus.com/", + }, + + { + "openid.claimed_id" => "http://bogus.com/", + "openid.identity" => "http://bogus.com/", + }, ] id_args.each do |id| m = Message.from_post_args(args.merge(id)) req = Server::CheckIDRequest.from_message(m, @op_endpoint) + assert(!req.id_select) end end def test_checkidSetup args = { - 'openid.mode' => 'checkid_setup', - 'openid.identity' => @id_url, - 'openid.assoc_handle' => @assoc_handle, - 'openid.return_to' => @rt_url, - 'openid.trust_root' => @tr_url + "openid.mode" => "checkid_setup", + "openid.identity" => @id_url, + "openid.assoc_handle" => @assoc_handle, + "openid.return_to" => @rt_url, + "openid.trust_root" => @tr_url, } r = @decode.call(args) - assert(r.is_a?(Server::CheckIDRequest)) - assert_equal(r.mode, 'checkid_setup') - assert_equal(r.immediate, false) + + assert_kind_of(Server::CheckIDRequest, r) + assert_equal("checkid_setup", r.mode) + assert_equal(false, r.immediate) assert_equal(r.identity, @id_url) assert_equal(r.trust_root, @tr_url) assert_equal(r.return_to, @rt_url) @@ -306,18 +333,19 @@ def test_checkidSetup def test_checkidSetupOpenID2 args = { - 'openid.ns' => OPENID2_NS, - 'openid.mode' => 'checkid_setup', - 'openid.identity' => @id_url, - 'openid.claimed_id' => @claimed_id, - 'openid.assoc_handle' => @assoc_handle, - 'openid.return_to' => @rt_url, - 'openid.realm' => @tr_url + "openid.ns" => OPENID2_NS, + "openid.mode" => "checkid_setup", + "openid.identity" => @id_url, + "openid.claimed_id" => @claimed_id, + "openid.assoc_handle" => @assoc_handle, + "openid.return_to" => @rt_url, + "openid.realm" => @tr_url, } r = @decode.call(args) - assert(r.is_a?(Server::CheckIDRequest)) - assert_equal(r.mode, 'checkid_setup') - assert_equal(r.immediate, false) + + assert_kind_of(Server::CheckIDRequest, r) + assert_equal("checkid_setup", r.mode) + assert_equal(false, r.immediate) assert_equal(r.identity, @id_url) assert_equal(r.claimed_id, @claimed_id) assert_equal(r.trust_root, @tr_url) @@ -326,12 +354,12 @@ def test_checkidSetupOpenID2 def test_checkidSetupNoClaimedIDOpenID2 args = { - 'openid.ns' => OPENID2_NS, - 'openid.mode' => 'checkid_setup', - 'openid.identity' => @id_url, - 'openid.assoc_handle' => @assoc_handle, - 'openid.return_to' => @rt_url, - 'openid.realm' => @tr_url + "openid.ns" => OPENID2_NS, + "openid.mode" => "checkid_setup", + "openid.identity" => @id_url, + "openid.assoc_handle" => @assoc_handle, + "openid.return_to" => @rt_url, + "openid.realm" => @tr_url, } assert_raises(Server::ProtocolError) do @decode.call(args) @@ -340,16 +368,17 @@ def test_checkidSetupNoClaimedIDOpenID2 def test_checkidSetupNoIdentityOpenID2 args = { - 'openid.ns' => OPENID2_NS, - 'openid.mode' => 'checkid_setup', - 'openid.assoc_handle' => @assoc_handle, - 'openid.return_to' => @rt_url, - 'openid.realm' => @tr_url + "openid.ns" => OPENID2_NS, + "openid.mode" => "checkid_setup", + "openid.assoc_handle" => @assoc_handle, + "openid.return_to" => @rt_url, + "openid.realm" => @tr_url, } r = @decode.call(args) - assert(r.is_a?(Server::CheckIDRequest)) - assert_equal(r.mode, 'checkid_setup') - assert_equal(r.immediate, false) + + assert_kind_of(Server::CheckIDRequest, r) + assert_equal("checkid_setup", r.mode) + assert_equal(false, r.immediate) assert_nil(r.identity) assert_equal(r.trust_root, @tr_url) assert_equal(r.return_to, @rt_url) @@ -359,10 +388,10 @@ def test_checkidSetupNoReturnOpenID1 # Make sure an OpenID 1 request cannot be decoded if it lacks a # return_to. args = { - 'openid.mode' => 'checkid_setup', - 'openid.identity' => @id_url, - 'openid.assoc_handle' => @assoc_handle, - 'openid.trust_root' => @tr_url + "openid.mode" => "checkid_setup", + "openid.identity" => @id_url, + "openid.assoc_handle" => @assoc_handle, + "openid.trust_root" => @tr_url, } assert_raises(Server::ProtocolError) do @decode.call(args) @@ -374,23 +403,24 @@ def test_checkidSetupNoReturnOpenID2 # and make sure a response to such a request raises # NoReturnToError. args = { - 'openid.ns' => OPENID2_NS, - 'openid.mode' => 'checkid_setup', - 'openid.identity' => @id_url, - 'openid.claimed_id' => @id_url, - 'openid.assoc_handle' => @assoc_handle, - 'openid.realm' => @tr_url + "openid.ns" => OPENID2_NS, + "openid.mode" => "checkid_setup", + "openid.identity" => @id_url, + "openid.claimed_id" => @id_url, + "openid.assoc_handle" => @assoc_handle, + "openid.realm" => @tr_url, } req = @decode.call(args) - assert(req.is_a?(Server::CheckIDRequest)) + + assert_kind_of(Server::CheckIDRequest, req) assert_raises(Server::NoReturnToError) do req.answer(false) end assert_raises(Server::NoReturnToError) do - req.encode_to_url('bogus') + req.encode_to_url("bogus") end assert_raises(Server::NoReturnToError) do @@ -403,10 +433,10 @@ def test_checkidSetupRealmRequiredOpenID2 # be decoded if it lacks a realm. Spec => This value # (openid.realm) MUST be sent if openid.return_to is omitted. args = { - 'openid.ns' => OPENID2_NS, - 'openid.mode' => 'checkid_setup', - 'openid.identity' => @id_url, - 'openid.assoc_handle' => @assoc_handle + "openid.ns" => OPENID2_NS, + "openid.mode" => "checkid_setup", + "openid.identity" => @id_url, + "openid.assoc_handle" => @assoc_handle, } assert_raises(Server::ProtocolError) do @decode.call(args) @@ -415,10 +445,10 @@ def test_checkidSetupRealmRequiredOpenID2 def test_checkidSetupBadReturn args = { - 'openid.mode' => 'checkid_setup', - 'openid.identity' => @id_url, - 'openid.assoc_handle' => @assoc_handle, - 'openid.return_to' => 'not a url' + "openid.mode" => "checkid_setup", + "openid.identity" => @id_url, + "openid.assoc_handle" => @assoc_handle, + "openid.return_to" => "not a url", } begin result = @decode.call(args) @@ -431,11 +461,11 @@ def test_checkidSetupBadReturn def test_checkidSetupUntrustedReturn args = { - 'openid.mode' => 'checkid_setup', - 'openid.identity' => @id_url, - 'openid.assoc_handle' => @assoc_handle, - 'openid.return_to' => @rt_url, - 'openid.trust_root' => 'http://not-the-return-place.unittest/' + "openid.mode" => "checkid_setup", + "openid.identity" => @id_url, + "openid.assoc_handle" => @assoc_handle, + "openid.return_to" => @rt_url, + "openid.trust_root" => "http://not-the-return-place.unittest/", } begin result = @decode.call(args) @@ -448,45 +478,56 @@ def test_checkidSetupUntrustedReturn def test_checkidSetupUntrustedReturn_Constructor assert_raises(Server::UntrustedReturnURL) do - Server::CheckIDRequest.new(@id_url, @rt_url, nil, - 'http://not-the-return-place.unittest/', - false, @assoc_handle) + Server::CheckIDRequest.new( + @id_url, + @rt_url, + nil, + "http://not-the-return-place.unittest/", + false, + @assoc_handle, + ) end end def test_checkidSetupMalformedReturnURL_Constructor assert_raises(Server::MalformedReturnURL) do - Server::CheckIDRequest.new(@id_url, 'bogus://return.url', nil, - 'http://trustroot.com/', - false, @assoc_handle) + Server::CheckIDRequest.new( + @id_url, + "bogus://return.url", + nil, + "http://trustroot.com/", + false, + @assoc_handle, + ) end end def test_checkAuth args = { - 'openid.mode' => 'check_authentication', - 'openid.assoc_handle' => '{dumb}{handle}', - 'openid.sig' => 'sigblob', - 'openid.signed' => 'identity,return_to,response_nonce,mode', - 'openid.identity' => 'signedval1', - 'openid.return_to' => 'signedval2', - 'openid.response_nonce' => 'signedval3', - 'openid.baz' => 'unsigned' + "openid.mode" => "check_authentication", + "openid.assoc_handle" => "{dumb}{handle}", + "openid.sig" => "sigblob", + "openid.signed" => "identity,return_to,response_nonce,mode", + "openid.identity" => "signedval1", + "openid.return_to" => "signedval2", + "openid.response_nonce" => "signedval3", + "openid.baz" => "unsigned", } r = @decode.call(args) - assert(r.is_a?(Server::CheckAuthRequest)) - assert_equal(r.mode, 'check_authentication') - assert_equal(r.sig, 'sigblob') + + assert_kind_of(Server::CheckAuthRequest, r) + assert_equal("check_authentication", r.mode) + assert_equal("sigblob", r.sig) end def test_checkAuthMissingSignature args = { - 'openid.mode' => 'check_authentication', - 'openid.assoc_handle' => '{dumb}{handle}', - 'openid.signed' => 'foo,bar,mode', - 'openid.foo' => 'signedval1', - 'openid.bar' => 'signedval2', - 'openid.baz' => 'unsigned' + "openid.mode" => "check_authentication", + "openid.assoc_handle" => "{dumb}{handle}", + "openid.signed" => "foo,bar,mode", + "openid.foo" => "signedval1", + "openid.bar" => "signedval2", + "openid.baz" => "unsigned", } assert_raises(Server::ProtocolError) do @decode.call(args) @@ -495,40 +536,42 @@ def test_checkAuthMissingSignature def test_checkAuthAndInvalidate args = { - 'openid.mode' => 'check_authentication', - 'openid.assoc_handle' => '{dumb}{handle}', - 'openid.invalidate_handle' => '[[SMART_handle]]', - 'openid.sig' => 'sigblob', - 'openid.signed' => 'identity,return_to,response_nonce,mode', - 'openid.identity' => 'signedval1', - 'openid.return_to' => 'signedval2', - 'openid.response_nonce' => 'signedval3', - 'openid.baz' => 'unsigned' + "openid.mode" => "check_authentication", + "openid.assoc_handle" => "{dumb}{handle}", + "openid.invalidate_handle" => "[[SMART_handle]]", + "openid.sig" => "sigblob", + "openid.signed" => "identity,return_to,response_nonce,mode", + "openid.identity" => "signedval1", + "openid.return_to" => "signedval2", + "openid.response_nonce" => "signedval3", + "openid.baz" => "unsigned", } r = @decode.call(args) - assert(r.is_a?(Server::CheckAuthRequest)) - assert_equal(r.invalidate_handle, '[[SMART_handle]]') + + assert_kind_of(Server::CheckAuthRequest, r) + assert_equal("[[SMART_handle]]", r.invalidate_handle) end def test_associateDH args = { - 'openid.mode' => 'associate', - 'openid.session_type' => 'DH-SHA1', - 'openid.dh_consumer_public' => 'Rzup9265tw==' + "openid.mode" => "associate", + "openid.session_type" => "DH-SHA1", + "openid.dh_consumer_public" => "Rzup9265tw==", } r = @decode.call(args) - assert(r.is_a?(Server::AssociateRequest)) - assert_equal(r.mode, 'associate') - assert_equal(r.session.session_type, 'DH-SHA1') - assert_equal(r.assoc_type, 'HMAC-SHA1') + + assert_kind_of(Server::AssociateRequest, r) + assert_equal("associate", r.mode) + assert_equal("DH-SHA1", r.session.session_type) + assert_equal("HMAC-SHA1", r.assoc_type) assert(r.session.consumer_pubkey) end def test_associateDHMissingKey # Trying DH assoc w/o public key args = { - 'openid.mode' => 'associate', - 'openid.session_type' => 'DH-SHA1' + "openid.mode" => "associate", + "openid.session_type" => "DH-SHA1", } # Using DH-SHA1 without supplying dh_consumer_public is an error. assert_raises(Server::ProtocolError) do @@ -538,9 +581,9 @@ def test_associateDHMissingKey def test_associateDHpubKeyNotB64 args = { - 'openid.mode' => 'associate', - 'openid.session_type' => 'DH-SHA1', - 'openid.dh_consumer_public' => 'donkeydonkeydonkey' + "openid.mode" => "associate", + "openid.session_type" => "DH-SHA1", + "openid.dh_consumer_public" => "donkeydonkeydonkey", } assert_raises(Server::ProtocolError) do @decode.call(args) @@ -551,17 +594,18 @@ def test_associateDHModGen # test dh with non-default but valid values for dh_modulus and # dh_gen args = { - 'openid.mode' => 'associate', - 'openid.session_type' => 'DH-SHA1', - 'openid.dh_consumer_public' => 'Rzup9265tw==', - 'openid.dh_modulus' => CryptUtil.num_to_base64(ALT_MODULUS), - 'openid.dh_gen' => CryptUtil.num_to_base64(ALT_GEN) + "openid.mode" => "associate", + "openid.session_type" => "DH-SHA1", + "openid.dh_consumer_public" => "Rzup9265tw==", + "openid.dh_modulus" => CryptUtil.num_to_base64(ALT_MODULUS), + "openid.dh_gen" => CryptUtil.num_to_base64(ALT_GEN), } r = @decode.call(args) - assert(r.is_a?(Server::AssociateRequest)) - assert_equal(r.mode, 'associate') - assert_equal(r.session.session_type, 'DH-SHA1') - assert_equal(r.assoc_type, 'HMAC-SHA1') + + assert_kind_of(Server::AssociateRequest, r) + assert_equal("associate", r.mode) + assert_equal("DH-SHA1", r.session.session_type) + assert_equal("HMAC-SHA1", r.assoc_type) assert_equal(r.session.dh.modulus, ALT_MODULUS) assert_equal(r.session.dh.generator, ALT_GEN) assert(r.session.consumer_pubkey) @@ -571,11 +615,11 @@ def test_associateDHCorruptModGen # test dh with non-default but valid values for dh_modulus and # dh_gen args = { - 'openid.mode' => 'associate', - 'openid.session_type' => 'DH-SHA1', - 'openid.dh_consumer_public' => 'Rzup9265tw==', - 'openid.dh_modulus' => 'pizza', - 'openid.dh_gen' => 'gnocchi' + "openid.mode" => "associate", + "openid.session_type" => "DH-SHA1", + "openid.dh_consumer_public" => "Rzup9265tw==", + "openid.dh_modulus" => "pizza", + "openid.dh_gen" => "gnocchi", } assert_raises(Server::ProtocolError) do @decode.call(args) @@ -584,10 +628,10 @@ def test_associateDHCorruptModGen def test_associateDHMissingGen args = { - 'openid.mode' => 'associate', - 'openid.session_type' => 'DH-SHA1', - 'openid.dh_consumer_public' => 'Rzup9265tw==', - 'openid.dh_modulus' => 'pizza' + "openid.mode" => "associate", + "openid.session_type" => "DH-SHA1", + "openid.dh_consumer_public" => "Rzup9265tw==", + "openid.dh_modulus" => "pizza", } assert_raises(Server::ProtocolError) do @decode.call(args) @@ -596,10 +640,10 @@ def test_associateDHMissingGen def test_associateDHMissingMod args = { - 'openid.mode' => 'associate', - 'openid.session_type' => 'DH-SHA1', - 'openid.dh_consumer_public' => 'Rzup9265tw==', - 'openid.dh_gen' => 'pizza' + "openid.mode" => "associate", + "openid.session_type" => "DH-SHA1", + "openid.dh_consumer_public" => "Rzup9265tw==", + "openid.dh_gen" => "pizza", } assert_raises(Server::ProtocolError) do @decode.call(args) @@ -621,9 +665,9 @@ def test_associateDHMissingMod def test_associateWeirdSession args = { - 'openid.mode' => 'associate', - 'openid.session_type' => 'FLCL6', - 'openid.dh_consumer_public' => "YQ==\n" + "openid.mode" => "associate", + "openid.session_type" => "FLCL6", + "openid.dh_consumer_public" => "YQ==\n", } assert_raises(Server::ProtocolError) do @decode.call(args) @@ -632,19 +676,20 @@ def test_associateWeirdSession def test_associatePlain args = { - 'openid.mode' => 'associate' + "openid.mode" => "associate", } r = @decode.call(args) - assert(r.is_a?(Server::AssociateRequest)) - assert_equal(r.mode, 'associate') - assert_equal(r.session.session_type, 'no-encryption') - assert_equal(r.assoc_type, 'HMAC-SHA1') + + assert_kind_of(Server::AssociateRequest, r) + assert_equal("associate", r.mode) + assert_equal("no-encryption", r.session.session_type) + assert_equal("HMAC-SHA1", r.assoc_type) end def test_nomode args = { - 'openid.session_type' => 'DH-SHA1', - 'openid.dh_consumer_public' => 'my public keeey' + "openid.session_type" => "DH-SHA1", + "openid.dh_consumer_public" => "my public keeey", } assert_raises(Server::ProtocolError) do @decode.call(args) @@ -652,34 +697,36 @@ def test_nomode end def test_invalidns - args = { 'openid.ns' => 'Vegetables', - 'openid.mode' => 'associate' } + args = { + "openid.ns" => "Vegetables", + "openid.mode" => "associate", + } begin @decode.call(args) rescue Server::ProtocolError => e assert(e.openid_message) - assert(e.to_s.index('Vegetables')) + assert(e.to_s.index("Vegetables")) end end end class BogusEncoder < Server::Encoder def encode(_response) - 'BOGUS' + "BOGUS" end end class BogusDecoder < Server::Decoder def decode(_query) - 'BOGUS' + "BOGUS" end end class TestEncode < Minitest::Test def setup @encoder = Server::Encoder.new - @encode = @encoder.method('encode') - @op_endpoint = 'http://endpoint.unittest/encode' + @encode = @encoder.method(:encode) + @op_endpoint = "http://endpoint.unittest/encode" @store = Store::Memory.new @server = Server::Server.new(@store, @op_endpoint) end @@ -688,98 +735,102 @@ def test_id_res_OpenID2_GET # Check that when an OpenID 2 response does not exceed the OpenID # 1 message size, a GET response (i.e., redirect) is issued. request = Server::CheckIDRequest.new( - 'http://bombom.unittest/', - 'http://burr.unittest/999', + "http://bombom.unittest/", + "http://burr.unittest/999", @server.op_endpoint, - 'http://burr.unittest/', + "http://burr.unittest/", false, - nil + nil, ) request.message = Message.new(OPENID2_NS) response = Server::OpenIDResponse.new(request) response.fields = Message.from_openid_args({ - 'ns' => OPENID2_NS, - 'mode' => 'id_res', - 'identity' => request.identity, - 'claimed_id' => request.identity, - 'return_to' => request.return_to - }) + "ns" => OPENID2_NS, + "mode" => "id_res", + "identity" => request.identity, + "claimed_id" => request.identity, + "return_to" => request.return_to, + }) assert(!response.render_as_form) - assert(response.which_encoding == Server::ENCODE_URL) + assert_equal(response.which_encoding, Server::ENCODE_URL) webresponse = @encode.call(response) - assert(webresponse.headers.member?('location')) + + assert(webresponse.headers.member?("location")) end def test_id_res_OpenID2_POST # Check that when an OpenID 2 response exceeds the OpenID 1 # message size, a POST response (i.e., an HTML form) is returned. request = Server::CheckIDRequest.new( - 'http://bombom.unittest/', - 'http://burr.unittest/999', + "http://bombom.unittest/", + "http://burr.unittest/999", @server.op_endpoint, - 'http://burr.unittest/', + "http://burr.unittest/", false, - nil + nil, ) request.message = Message.new(OPENID2_NS) response = Server::OpenIDResponse.new(request) response.fields = Message.from_openid_args({ - 'ns' => OPENID2_NS, - 'mode' => 'id_res', - 'identity' => request.identity, - 'claimed_id' => request.identity, - 'return_to' => 'x' * OPENID1_URL_LIMIT - }) + "ns" => OPENID2_NS, + "mode" => "id_res", + "identity" => request.identity, + "claimed_id" => request.identity, + "return_to" => "x" * OPENID1_URL_LIMIT, + }) assert(response.render_as_form) - assert(response.encode_to_url.length > OPENID1_URL_LIMIT) - assert(response.which_encoding == Server::ENCODE_HTML_FORM) + assert_operator(response.encode_to_url.length, :>, OPENID1_URL_LIMIT) + assert_equal(response.which_encoding, Server::ENCODE_HTML_FORM) webresponse = @encode.call(response) + assert_equal(webresponse.body, response.to_form_markup) end def test_to_form_markup request = Server::CheckIDRequest.new( - 'http://bombom.unittest/', - 'http://burr.unittest/999', + "http://bombom.unittest/", + "http://burr.unittest/999", @server.op_endpoint, - 'http://burr.unittest/', + "http://burr.unittest/", false, - nil + nil, ) request.message = Message.new(OPENID2_NS) response = Server::OpenIDResponse.new(request) response.fields = Message.from_openid_args({ - 'ns' => OPENID2_NS, - 'mode' => 'id_res', - 'identity' => request.identity, - 'claimed_id' => request.identity, - 'return_to' => 'x' * OPENID1_URL_LIMIT - }) - form_markup = response.to_form_markup({ 'foo' => 'bar' }) + "ns" => OPENID2_NS, + "mode" => "id_res", + "identity" => request.identity, + "claimed_id" => request.identity, + "return_to" => "x" * OPENID1_URL_LIMIT, + }) + form_markup = response.to_form_markup({"foo" => "bar"}) + assert(/ foo="bar"/ =~ form_markup, form_markup) end def test_to_html request = Server::CheckIDRequest.new( - 'http://bombom.unittest/', - 'http://burr.unittest/999', + "http://bombom.unittest/", + "http://burr.unittest/999", @server.op_endpoint, - 'http://burr.unittest/', + "http://burr.unittest/", false, - nil + nil, ) request.message = Message.new(OPENID2_NS) response = Server::OpenIDResponse.new(request) response.fields = Message.from_openid_args({ - 'ns' => OPENID2_NS, - 'mode' => 'id_res', - 'identity' => request.identity, - 'claimed_id' => request.identity, - 'return_to' => 'x' * OPENID1_URL_LIMIT - }) + "ns" => OPENID2_NS, + "mode" => "id_res", + "identity" => request.identity, + "claimed_id" => request.identity, + "return_to" => "x" * OPENID1_URL_LIMIT, + }) html = response.to_html + assert(html) end @@ -789,132 +840,149 @@ def test_id_res_OpenID1_exceeds_limit # shouldn't be permitted by the library, but this test is in place # to preserve the status quo for OpenID 1. request = Server::CheckIDRequest.new( - 'http://bombom.unittest/', - 'http://burr.unittest/999', + "http://bombom.unittest/", + "http://burr.unittest/999", @server.op_endpoint, - 'http://burr.unittest/', + "http://burr.unittest/", false, - nil + nil, ) request.message = Message.new(OPENID1_NS) response = Server::OpenIDResponse.new(request) response.fields = Message.from_openid_args({ - 'mode' => 'id_res', - 'identity' => request.identity, - 'return_to' => 'x' * OPENID1_URL_LIMIT - }) + "mode" => "id_res", + "identity" => request.identity, + "return_to" => "x" * OPENID1_URL_LIMIT, + }) assert(!response.render_as_form) - assert(response.encode_to_url.length > OPENID1_URL_LIMIT) - assert(response.which_encoding == Server::ENCODE_URL) + assert_operator(response.encode_to_url.length, :>, OPENID1_URL_LIMIT) + assert_equal(response.which_encoding, Server::ENCODE_URL) webresponse = @encode.call(response) - assert_equal(webresponse.headers['location'], response.encode_to_url) + + assert_equal(webresponse.headers["location"], response.encode_to_url) end def test_id_res request = Server::CheckIDRequest.new( - 'http://bombom.unittest/', - 'http://burr.unittest/999', + "http://bombom.unittest/", + "http://burr.unittest/999", @server.op_endpoint, - 'http://burr.unittest/', - false, nil + "http://burr.unittest/", + false, + nil, ) request.message = Message.new(OPENID1_NS) response = Server::OpenIDResponse.new(request) response.fields = Message.from_openid_args({ - 'mode' => 'id_res', - 'identity' => request.identity, - 'return_to' => request.return_to - }) + "mode" => "id_res", + "identity" => request.identity, + "return_to" => request.return_to, + }) webresponse = @encode.call(response) + assert_equal(webresponse.code, Server::HTTP_REDIRECT) - assert(webresponse.headers.member?('location')) + assert(webresponse.headers.member?("location")) + + location = webresponse.headers["location"] - location = webresponse.headers['location'] - assert(location.start_with?(request.return_to), - format('%s does not start with %s', - location, request.return_to)) + assert( + location.start_with?(request.return_to), + format( + "%s does not start with %s", + location, + request.return_to, + ), + ) # argh. q2 = Util.parse_query(URI.parse(location).query) expected = response.fields.to_post_args + assert_equal(q2, expected) end def test_cancel request = Server::CheckIDRequest.new( - 'http://bombom.unittest/', - 'http://burr.unittest/999', + "http://bombom.unittest/", + "http://burr.unittest/999", @server.op_endpoint, - 'http://burr.unittest/', - false, nil + "http://burr.unittest/", + false, + nil, ) request.message = Message.new(OPENID2_NS) response = Server::OpenIDResponse.new(request) response.fields = Message.from_openid_args({ - 'mode' => 'cancel' - }) + "mode" => "cancel", + }) webresponse = @encode.call(response) + assert_equal(webresponse.code, Server::HTTP_REDIRECT) - assert(webresponse.headers.member?('location')) + assert(webresponse.headers.member?("location")) end def test_cancel_to_form request = Server::CheckIDRequest.new( - 'http://bombom.unittest/', - 'http://burr.unittest/999', + "http://bombom.unittest/", + "http://burr.unittest/999", @server.op_endpoint, - 'http://burr.unittest/', - false, nil + "http://burr.unittest/", + false, + nil, ) request.message = Message.new(OPENID2_NS) response = Server::OpenIDResponse.new(request) response.fields = Message.from_openid_args({ - 'mode' => 'cancel' - }) + "mode" => "cancel", + }) form = response.to_form_markup + assert(form.index(request.return_to)) end def test_assocReply msg = Message.new(OPENID2_NS) - msg.set_arg(OPENID2_NS, 'session_type', 'no-encryption') + msg.set_arg(OPENID2_NS, "session_type", "no-encryption") request = Server::AssociateRequest.from_message(msg) response = Server::OpenIDResponse.new(request) response.fields = Message.from_post_args( - { 'openid.assoc_handle' => 'every-zig' } + {"openid.assoc_handle" => "every-zig"}, ) webresponse = @encode.call(response) body = "assoc_handle:every-zig\n" assert_equal(webresponse.code, Server::HTTP_OK) - assert_equal(webresponse.headers, {}) + assert_empty(webresponse.headers) assert_equal(webresponse.body, body) end def test_checkauthReply - request = Server::CheckAuthRequest.new('a_sock_monkey', - 'siggggg', - []) + request = Server::CheckAuthRequest.new( + "a_sock_monkey", + "siggggg", + [], + ) request.message = Message.new(OPENID2_NS) response = Server::OpenIDResponse.new(request) response.fields = Message.from_openid_args({ - 'is_valid' => 'true', - 'invalidate_handle' => 'xXxX:xXXx' - }) + "is_valid" => "true", + "invalidate_handle" => "xXxX:xXXx", + }) body = "invalidate_handle:xXxX:xXXx\nis_valid:true\n" webresponse = @encode.call(response) + assert_equal(webresponse.code, Server::HTTP_OK) - assert_equal(webresponse.headers, {}) + assert_empty(webresponse.headers) assert_equal(webresponse.body, body) end def test_unencodableError args = Message.from_post_args({ - 'openid.identity' => 'http://limu.unittest/' - }) - e = Server::ProtocolError.new(args, 'wet paint') + "openid.identity" => "http://limu.unittest/", + }) + e = Server::ProtocolError.new(args, "wet paint") assert_raises(Server::EncodingError) do @encode.call(e) end @@ -922,13 +990,14 @@ def test_unencodableError def test_encodableError args = Message.from_post_args({ - 'openid.mode' => 'associate', - 'openid.identity' => 'http://limu.unittest/' - }) + "openid.mode" => "associate", + "openid.identity" => "http://limu.unittest/", + }) body = "error:snoot\nmode:error\n" - webresponse = @encode.call(Server::ProtocolError.new(args, 'snoot')) + webresponse = @encode.call(Server::ProtocolError.new(args, "snoot")) + assert_equal(webresponse.code, Server::HTTP_ERROR) - assert_equal(webresponse.headers, {}) + assert_empty(webresponse.headers) assert_equal(webresponse.body, body) end end @@ -938,56 +1007,65 @@ def setup @_dumb_key = Server::Signatory._dumb_key @_normal_key = Server::Signatory._normal_key @store = Store::Memory.new - @server = Server::Server.new(@store, 'http://signing.unittest/enc') + @server = Server::Server.new(@store, "http://signing.unittest/enc") @request = Server::CheckIDRequest.new( - 'http://bombom.unittest/', - 'http://burr.unittest/999', + "http://bombom.unittest/", + "http://burr.unittest/999", @server.op_endpoint, - 'http://burr.unittest/', - false, nil + "http://burr.unittest/", + false, + nil, ) @request.message = Message.new(OPENID2_NS) @response = Server::OpenIDResponse.new(@request) @response.fields = Message.from_openid_args({ - 'mode' => 'id_res', - 'identity' => @request.identity, - 'return_to' => @request.return_to - }) + "mode" => "id_res", + "identity" => @request.identity, + "return_to" => @request.return_to, + }) @signatory = Server::Signatory.new(@store) @encoder = Server::SigningEncoder.new(@signatory) - @encode = @encoder.method('encode') + @encode = @encoder.method(:encode) end def test_idres - assoc_handle = '{bicycle}{shed}' + assoc_handle = "{bicycle}{shed}" @store.store_association( @_normal_key, - Association.from_expires_in(60, assoc_handle, - 'sekrit', 'HMAC-SHA1') + Association.from_expires_in( + 60, + assoc_handle, + "sekrit", + "HMAC-SHA1", + ), ) @request.assoc_handle = assoc_handle webresponse = @encode.call(@response) + assert_equal(webresponse.code, Server::HTTP_REDIRECT) - assert(webresponse.headers.member?('location')) + assert(webresponse.headers.member?("location")) - location = webresponse.headers['location'] + location = webresponse.headers["location"] query = Util.parse_query(URI.parse(location).query) - assert(query.member?('openid.sig')) - assert(query.member?('openid.assoc_handle')) - assert(query.member?('openid.signed')) + + assert(query.member?("openid.sig")) + assert(query.member?("openid.assoc_handle")) + assert(query.member?("openid.signed")) end def test_idresDumb webresponse = @encode.call(@response) + assert_equal(webresponse.code, Server::HTTP_REDIRECT) - assert(webresponse.headers.has_key?('location')) + assert(webresponse.headers.has_key?("location")) - location = webresponse.headers['location'] + location = webresponse.headers["location"] query = Util.parse_query(URI.parse(location).query) - assert(query.member?('openid.sig')) - assert(query.member?('openid.assoc_handle')) - assert(query.member?('openid.signed')) + + assert(query.member?("openid.sig")) + assert(query.member?("openid.assoc_handle")) + assert(query.member?("openid.signed")) end def test_forgotStore @@ -999,38 +1077,42 @@ def test_forgotStore def test_cancel request = Server::CheckIDRequest.new( - 'http://bombom.unittest/', - 'http://burr.unittest/999', + "http://bombom.unittest/", + "http://burr.unittest/999", @server.op_endpoint, - 'http://burr.unittest/', - false, nil + "http://burr.unittest/", + false, + nil, ) request.message = Message.new(OPENID2_NS) response = Server::OpenIDResponse.new(request) - response.fields.set_arg(OPENID_NS, 'mode', 'cancel') + response.fields.set_arg(OPENID_NS, "mode", "cancel") webresponse = @encode.call(response) + assert_equal(webresponse.code, Server::HTTP_REDIRECT) - assert(webresponse.headers.has_key?('location')) - location = webresponse.headers['location'] + assert(webresponse.headers.has_key?("location")) + location = webresponse.headers["location"] query = Util.parse_query(URI.parse(location).query) - assert !query.has_key?('openid.sig') + + assert(!query.has_key?("openid.sig")) end def test_assocReply msg = Message.new(OPENID2_NS) - msg.set_arg(OPENID2_NS, 'session_type', 'no-encryption') + msg.set_arg(OPENID2_NS, "session_type", "no-encryption") request = Server::AssociateRequest.from_message(msg) response = Server::OpenIDResponse.new(request) - response.fields = Message.from_openid_args({ 'assoc_handle' => 'every-zig' }) + response.fields = Message.from_openid_args({"assoc_handle" => "every-zig"}) webresponse = @encode.call(response) body = "assoc_handle:every-zig\n" + assert_equal(webresponse.code, Server::HTTP_OK) - assert_equal(webresponse.headers, {}) + assert_empty(webresponse.headers) assert_equal(webresponse.body, body) end def test_alreadySigned - @response.fields.set_arg(OPENID_NS, 'sig', 'priorSig==') + @response.fields.set_arg(OPENID_NS, "sig", "priorSig==") assert_raises(Server::AlreadySigned) do @encode.call(@response) end @@ -1039,27 +1121,28 @@ def test_alreadySigned class TestCheckID < Minitest::Test def setup - @op_endpoint = 'http://endpoint.unittest/' + @op_endpoint = "http://endpoint.unittest/" @store = Store::Memory.new @server = Server::Server.new(@store, @op_endpoint) @request = Server::CheckIDRequest.new( - 'http://bambam.unittest/', - 'http://bar.unittest/999', + "http://bambam.unittest/", + "http://bar.unittest/999", @server.op_endpoint, - 'http://bar.unittest/', - false + "http://bar.unittest/", + false, ) @request.message = Message.new(OPENID2_NS) end def test_trustRootInvalid - @request.trust_root = 'http://foo.unittest/17' - @request.return_to = 'http://foo.unittest/39' + @request.trust_root = "http://foo.unittest/17" + @request.return_to = "http://foo.unittest/39" + assert(!@request.trust_root_valid) end def test_trustRootInvalid_modified - @request.trust_root = 'does://not.parse/' + @request.trust_root = "does://not.parse/" @request.message = :sentinel begin result = @request.trust_root_valid @@ -1072,22 +1155,24 @@ def test_trustRootInvalid_modified def test_trustRootvalid_absent_trust_root @request.trust_root = nil + assert(@request.trust_root_valid) end def test_trustRootValid - @request.trust_root = 'http://foo.unittest/' - @request.return_to = 'http://foo.unittest/39' + @request.trust_root = "http://foo.unittest/" + @request.return_to = "http://foo.unittest/39" + assert(@request.trust_root_valid) end def test_trustRootValidNoReturnTo request = Server::CheckIDRequest.new( - 'http://bambam.unittest/', + "http://bambam.unittest/", nil, @server.op_endpoint, - 'http://bar.unittest/', - false + "http://bar.unittest/", + false, ) assert(request.trust_root_valid) @@ -1112,9 +1197,10 @@ def test_returnToVerified_callsVerify TrustRoot.with_method_overridden(:verify_return_to, vrfyExc) do @request.return_to_verified - flunk('Expected sentinel to be raised, got success') + + flunk("Expected sentinel to be raised, got success") rescue Exception => e - assert(e.equal?(sentinel), [e, sentinel].inspect) + assert_same(e, sentinel, [e, sentinel].inspect) end # Ensure that True and False are passed through unchanged @@ -1140,32 +1226,42 @@ def test_returnToVerified_callsVerify def _expectAnswer(answer, identity = nil, claimed_id = nil) expected_list = [ %w[mode id_res], - ['return_to', @request.return_to], - ['op_endpoint', @op_endpoint] + ["return_to", @request.return_to], + ["op_endpoint", @op_endpoint], ] if identity - expected_list << ['identity', identity] + expected_list << ["identity", identity] expected_list << if claimed_id - ['claimed_id', claimed_id] - else - ['claimed_id', identity] - end + ["claimed_id", claimed_id] + else + ["claimed_id", identity] + end end expected_list.each do |k, expected| actual = answer.fields.get_arg(OPENID_NS, k) - assert_equal(expected, actual, - format('%s: expected %s, got %s', - k, expected, actual)) + + assert_equal( + expected, + actual, + format( + "%s: expected %s, got %s", + k, + expected, + actual, + ), + ) end - assert(answer.fields.has_key?(OPENID_NS, 'response_nonce')) - assert(answer.fields.get_openid_namespace == OPENID2_NS) + assert(answer.fields.has_key?(OPENID_NS, "response_nonce")) + assert_equal(answer.fields.get_openid_namespace, OPENID2_NS) # One for nonce, one for ns - assert_equal(answer.fields.to_post_args.length, - expected_list.length + 2, - answer.fields.to_post_args.inspect) + assert_equal( + answer.fields.to_post_args.length, + expected_list.length + 2, + answer.fields.to_post_args.inspect, + ) end def test_answerAllow @@ -1174,20 +1270,25 @@ def test_answerAllow # including mode=id_res, identity, claimed_id, op_endpoint, # return_to answer = @request.answer(true) + assert_equal(answer.request, @request) _expectAnswer(answer, @request.identity) end def test_answerAllowDelegatedIdentity - @request.claimed_id = 'http://delegating.unittest/' + @request.claimed_id = "http://delegating.unittest/" answer = @request.answer(true) - _expectAnswer(answer, @request.identity, - @request.claimed_id) + _expectAnswer( + answer, + @request.identity, + @request.claimed_id, + ) end def test_answerAllowWithoutIdentityReally @request.identity = nil answer = @request.answer(true) + assert_equal(answer.request, @request) _expectAnswer(answer) end @@ -1197,13 +1298,13 @@ def test_answerAllowAnonymousFail # XXX - Check on this, I think this behavior is legal in OpenID # 2.0? assert_raises(ArgumentError) do - @request.answer(true, nil, '=V') + @request.answer(true, nil, "=V") end end def test_answerAllowWithIdentity @request.identity = IDENTIFIER_SELECT - selected_id = 'http://anon.unittest/9861' + selected_id = "http://anon.unittest/9861" answer = @request.answer(true, nil, selected_id) _expectAnswer(answer, selected_id) end @@ -1218,23 +1319,25 @@ def test_answerAllowWithNoIdentity def test_immediate_openid1_no_identity @request.message = Message.new(OPENID1_NS) @request.immediate = true - @request.mode = 'checkid_immediate' + @request.mode = "checkid_immediate" resp = @request.answer(false) - assert(resp.fields.get_arg(OPENID_NS, 'mode') == 'id_res') + + assert_equal("id_res", resp.fields.get_arg(OPENID_NS, "mode")) end def test_checkid_setup_openid1_no_identity @request.message = Message.new(OPENID1_NS) @request.immediate = false - @request.mode = 'checkid_setup' + @request.mode = "checkid_setup" resp = @request.answer(false) - assert(resp.fields.get_arg(OPENID_NS, 'mode') == 'cancel') + + assert_equal("cancel", resp.fields.get_arg(OPENID_NS, "mode")) end def test_immediate_openid1_no_server_url @request.message = Message.new(OPENID1_NS) @request.immediate = true - @request.mode = 'checkid_immediate' + @request.mode = "checkid_immediate" @request.op_endpoint = nil assert_raises(ArgumentError) do @@ -1245,25 +1348,27 @@ def test_immediate_openid1_no_server_url def test_immediate_encode_to_url @request.message = Message.new(OPENID1_NS) @request.immediate = true - @request.mode = 'checkid_immediate' - @request.trust_root = 'BOGUS' - @request.assoc_handle = 'ASSOC' + @request.mode = "checkid_immediate" + @request.trust_root = "BOGUS" + @request.assoc_handle = "ASSOC" - server_url = 'http://server.com/server' + server_url = "http://server.com/server" url = @request.encode_to_url(server_url) + assert(url.start_with?(server_url)) - _, query = url.split('?', 2) + _, query = url.split("?", 2) args = Util.parse_query(query) m = Message.from_post_args(args) - assert(m.get_arg(OPENID_NS, 'trust_root') == 'BOGUS') - assert(m.get_arg(OPENID_NS, 'assoc_handle') == 'ASSOC') - assert(m.get_arg(OPENID_NS, 'mode'), 'checkid_immediate') - assert(m.get_arg(OPENID_NS, 'identity') == @request.identity) - assert(m.get_arg(OPENID_NS, 'claimed_id') == @request.claimed_id) - assert(m.get_arg(OPENID_NS, 'return_to') == @request.return_to) + + assert_equal("BOGUS", m.get_arg(OPENID_NS, "trust_root")) + assert_equal("ASSOC", m.get_arg(OPENID_NS, "assoc_handle")) + assert(m.get_arg(OPENID_NS, "mode"), "checkid_immediate") + assert_equal(m.get_arg(OPENID_NS, "identity"), @request.identity) + assert_equal(m.get_arg(OPENID_NS, "claimed_id"), @request.claimed_id) + assert_equal(m.get_arg(OPENID_NS, "return_to"), @request.return_to) end def test_answerAllowWithDelegatedIdentityOpenID2 @@ -1271,8 +1376,8 @@ def test_answerAllowWithDelegatedIdentityOpenID2 # claimed_id delegates to selected_id here. @request.identity = IDENTIFIER_SELECT - selected_id = 'http://anon.unittest/9861' - claimed_id = 'http://monkeyhat.unittest/' + selected_id = "http://anon.unittest/9861" + claimed_id = "http://monkeyhat.unittest/" answer = @request.answer(true, nil, selected_id, claimed_id) _expectAnswer(answer, selected_id, claimed_id) end @@ -1282,8 +1387,8 @@ def test_answerAllowWithDelegatedIdentityOpenID1 @request.message = Message.new(OPENID1_NS) # claimed_id delegates to selected_id here. @request.identity = IDENTIFIER_SELECT - selected_id = 'http://anon.unittest/9861' - claimed_id = 'http://monkeyhat.unittest/' + selected_id = "http://anon.unittest/9861" + claimed_id = "http://monkeyhat.unittest/" assert_raises(Server::VersionError) do @request.answer(true, nil, selected_id, claimed_id) end @@ -1293,7 +1398,7 @@ def test_answerAllowWithAnotherIdentity # XXX - Check on this, I think this behavior is legal in OpenID # 2.0? assert_raises(ArgumentError) do - @request.answer(true, nil, 'http://pebbles.unittest/') + @request.answer(true, nil, "http://pebbles.unittest/") end end @@ -1314,10 +1419,10 @@ def test_answerAllowForgotEndpoint def test_checkIDWithNoIdentityOpenID1 msg = Message.new(OPENID1_NS) - msg.set_arg(OPENID_NS, 'return_to', 'bogus') - msg.set_arg(OPENID_NS, 'trust_root', 'bogus') - msg.set_arg(OPENID_NS, 'mode', 'checkid_setup') - msg.set_arg(OPENID_NS, 'assoc_handle', 'bogus') + msg.set_arg(OPENID_NS, "return_to", "bogus") + msg.set_arg(OPENID_NS, "trust_root", "bogus") + msg.set_arg(OPENID_NS, "mode", "checkid_setup") + msg.set_arg(OPENID_NS, "assoc_handle", "bogus") assert_raises(Server::ProtocolError) do Server::CheckIDRequest.from_message(msg, @server) @@ -1326,9 +1431,9 @@ def test_checkIDWithNoIdentityOpenID1 def test_fromMessageClaimedIDWithoutIdentityOpenID2 msg = Message.new(OPENID2_NS) - msg.set_arg(OPENID_NS, 'mode', 'checkid_setup') - msg.set_arg(OPENID_NS, 'return_to', 'http://invalid:8000/rt') - msg.set_arg(OPENID_NS, 'claimed_id', 'https://example.myopenid.com') + msg.set_arg(OPENID_NS, "mode", "checkid_setup") + msg.set_arg(OPENID_NS, "return_to", "http://invalid:8000/rt") + msg.set_arg(OPENID_NS, "claimed_id", "https://example.myopenid.com") assert_raises(Server::ProtocolError) do Server::CheckIDRequest.from_message(msg, @server) @@ -1337,9 +1442,9 @@ def test_fromMessageClaimedIDWithoutIdentityOpenID2 def test_fromMessageIdentityWithoutClaimedIDOpenID2 msg = Message.new(OPENID2_NS) - msg.set_arg(OPENID_NS, 'mode', 'checkid_setup') - msg.set_arg(OPENID_NS, 'return_to', 'http://invalid:8000/rt') - msg.set_arg(OPENID_NS, 'identity', 'https://example.myopenid.com') + msg.set_arg(OPENID_NS, "mode", "checkid_setup") + msg.set_arg(OPENID_NS, "return_to", "http://invalid:8000/rt") + msg.set_arg(OPENID_NS, "identity", "https://example.myopenid.com") assert_raises(Server::ProtocolError) do Server::CheckIDRequest.from_message(msg, @server) @@ -1347,54 +1452,56 @@ def test_fromMessageIdentityWithoutClaimedIDOpenID2 end def test_fromMessageWithEmptyTrustRoot - return_to = 'http://some.url/foo?bar=baz' + return_to = "http://some.url/foo?bar=baz" msg = Message.from_post_args({ - 'openid.assoc_handle' => '{blah}{blah}{OZivdQ==}', - 'openid.claimed_id' => 'http://delegated.invalid/', - 'openid.identity' => 'http://op-local.example.com/', - 'openid.mode' => 'checkid_setup', - 'openid.ns' => 'http://openid.net/signon/1.0', - 'openid.return_to' => return_to, - 'openid.trust_root' => '' - }) + "openid.assoc_handle" => "{blah}{blah}{OZivdQ==}", + "openid.claimed_id" => "http://delegated.invalid/", + "openid.identity" => "http://op-local.example.com/", + "openid.mode" => "checkid_setup", + "openid.ns" => "http://openid.net/signon/1.0", + "openid.return_to" => return_to, + "openid.trust_root" => "", + }) result = Server::CheckIDRequest.from_message(msg, @server) + assert_equal(return_to, result.trust_root) end def test_trustRootOpenID1 # Ignore openid.realm in OpenID 1 msg = Message.new(OPENID1_NS) - msg.set_arg(OPENID_NS, 'mode', 'checkid_setup') - msg.set_arg(OPENID_NS, 'trust_root', 'http://trustroot.com/') - msg.set_arg(OPENID_NS, 'realm', 'http://fake_trust_root/') - msg.set_arg(OPENID_NS, 'return_to', 'http://trustroot.com/foo') - msg.set_arg(OPENID_NS, 'assoc_handle', 'bogus') - msg.set_arg(OPENID_NS, 'identity', 'george') + msg.set_arg(OPENID_NS, "mode", "checkid_setup") + msg.set_arg(OPENID_NS, "trust_root", "http://trustroot.com/") + msg.set_arg(OPENID_NS, "realm", "http://fake_trust_root/") + msg.set_arg(OPENID_NS, "return_to", "http://trustroot.com/foo") + msg.set_arg(OPENID_NS, "assoc_handle", "bogus") + msg.set_arg(OPENID_NS, "identity", "george") result = Server::CheckIDRequest.from_message(msg, @server.op_endpoint) - assert(result.trust_root == 'http://trustroot.com/') + assert_equal("http://trustroot.com/", result.trust_root) end def test_trustRootOpenID2 # Ignore openid.trust_root in OpenID 2 msg = Message.new(OPENID2_NS) - msg.set_arg(OPENID_NS, 'mode', 'checkid_setup') - msg.set_arg(OPENID_NS, 'realm', 'http://trustroot.com/') - msg.set_arg(OPENID_NS, 'trust_root', 'http://fake_trust_root/') - msg.set_arg(OPENID_NS, 'return_to', 'http://trustroot.com/foo') - msg.set_arg(OPENID_NS, 'assoc_handle', 'bogus') - msg.set_arg(OPENID_NS, 'identity', 'george') - msg.set_arg(OPENID_NS, 'claimed_id', 'george') + msg.set_arg(OPENID_NS, "mode", "checkid_setup") + msg.set_arg(OPENID_NS, "realm", "http://trustroot.com/") + msg.set_arg(OPENID_NS, "trust_root", "http://fake_trust_root/") + msg.set_arg(OPENID_NS, "return_to", "http://trustroot.com/foo") + msg.set_arg(OPENID_NS, "assoc_handle", "bogus") + msg.set_arg(OPENID_NS, "identity", "george") + msg.set_arg(OPENID_NS, "claimed_id", "george") result = Server::CheckIDRequest.from_message(msg, @server.op_endpoint) - assert(result.trust_root == 'http://trustroot.com/') + assert_equal("http://trustroot.com/", result.trust_root) end def test_answerAllowNoTrustRoot @request.trust_root = nil answer = @request.answer(true) + assert_equal(answer.request, @request) _expectAnswer(answer, @request.identity) end @@ -1405,17 +1512,20 @@ def test_answerImmediateDenyOpenID2 # # See specification Responding to Authentication Requests / # Negative Assertions / In Response to Immediate Requests. - @request.mode = 'checkid_immediate' + @request.mode = "checkid_immediate" @request.immediate = true - server_url = 'http://setup-url.unittest/' + server_url = "http://setup-url.unittest/" # crappiting setup_url, you dirty my interface with your presence! answer = @request.answer(false, server_url) + assert_equal(answer.request, @request) - assert_equal(answer.fields.to_post_args.length, 3, answer.fields) + assert_equal(3, answer.fields.to_post_args.length, answer.fields) assert_equal(answer.fields.get_openid_namespace, OPENID2_NS) - assert_equal(answer.fields.get_arg(OPENID_NS, 'mode'), - 'setup_needed') + assert_equal( + "setup_needed", + answer.fields.get_arg(OPENID_NS, "mode"), + ) # user_setup_url no longer required. end @@ -1423,60 +1533,76 @@ def test_answerImmediateDenyOpenID1 # Look for user_setup_url in checkid_immediate negative response # in OpenID 1 case. @request.message = Message.new(OPENID1_NS) - @request.mode = 'checkid_immediate' + @request.mode = "checkid_immediate" @request.immediate = true - @request.claimed_id = 'http://claimed-id.test/' - server_url = 'http://setup-url.unittest/' + @request.claimed_id = "http://claimed-id.test/" + server_url = "http://setup-url.unittest/" # crappiting setup_url, you dirty my interface with your presence! answer = @request.answer(false, server_url) + assert_equal(answer.request, @request) assert_equal(2, answer.fields.to_post_args.length, answer.fields) assert_equal(OPENID1_NS, answer.fields.get_openid_namespace) - assert_equal('id_res', answer.fields.get_arg(OPENID_NS, 'mode')) + assert_equal("id_res", answer.fields.get_arg(OPENID_NS, "mode")) + + usu = answer.fields.get_arg(OPENID_NS, "user_setup_url", "") - usu = answer.fields.get_arg(OPENID_NS, 'user_setup_url', '') assert(usu.start_with?(server_url)) - expected_substr = 'openid.claimed_id=http%3A%2F%2Fclaimed-id.test%2F' + expected_substr = "openid.claimed_id=http%3A%2F%2Fclaimed-id.test%2F" + assert(!usu.index(expected_substr).nil?, usu) end def test_answerSetupDeny answer = @request.answer(false) - assert_equal(answer.fields.get_args(OPENID_NS), { - 'mode' => 'cancel' - }) + + assert_equal( + { + "mode" => "cancel", + }, + answer.fields.get_args(OPENID_NS), + ) end def test_encodeToURL - server_url = 'http://openid-server.unittest/' + server_url = "http://openid-server.unittest/" result = @request.encode_to_url(server_url) # How to check? How about a round-trip test. - _, result_args = result.split('?', 2) + _, result_args = result.split("?", 2) result_args = Util.parse_query(result_args) message = Message.from_post_args(result_args) - rebuilt_request = Server::CheckIDRequest.from_message(message, - @server.op_endpoint) + rebuilt_request = Server::CheckIDRequest.from_message( + message, + @server.op_endpoint, + ) @request.message = message @request.instance_variables.each do |var| - assert_equal(@request.instance_variable_get(var), - rebuilt_request.instance_variable_get(var), var) + assert_equal( + @request.instance_variable_get(var), + rebuilt_request.instance_variable_get(var), + var, + ) end end def test_getCancelURL url = @request.cancel_url - rt, query_string = url.split('?', -1) + rt, query_string = url.split("?", -1) + assert_equal(@request.return_to, rt) query = Util.parse_query(query_string) - assert_equal(query, { 'openid.mode' => 'cancel', - 'openid.ns' => OPENID2_NS }) + + assert_equal(query, { + "openid.mode" => "cancel", + "openid.ns" => OPENID2_NS, + }) end def test_getCancelURLimmed - @request.mode = 'checkid_immediate' + @request.mode = "checkid_immediate" @request.immediate = true assert_raises(ArgumentError) do @request.cancel_url @@ -1485,23 +1611,23 @@ def test_getCancelURLimmed def test_fromMessageWithoutTrustRoot msg = Message.new(OPENID2_NS) - msg.set_arg(OPENID_NS, 'mode', 'checkid_setup') - msg.set_arg(OPENID_NS, 'return_to', 'http://real.trust.root/foo') - msg.set_arg(OPENID_NS, 'assoc_handle', 'bogus') - msg.set_arg(OPENID_NS, 'identity', 'george') - msg.set_arg(OPENID_NS, 'claimed_id', 'george') + msg.set_arg(OPENID_NS, "mode", "checkid_setup") + msg.set_arg(OPENID_NS, "return_to", "http://real.trust.root/foo") + msg.set_arg(OPENID_NS, "assoc_handle", "bogus") + msg.set_arg(OPENID_NS, "identity", "george") + msg.set_arg(OPENID_NS, "claimed_id", "george") result = Server::CheckIDRequest.from_message(msg, @server.op_endpoint) - assert_equal(result.trust_root, 'http://real.trust.root/foo') + assert_equal("http://real.trust.root/foo", result.trust_root) end def test_fromMessageWithoutTrustRootOrReturnTo msg = Message.new(OPENID2_NS) - msg.set_arg(OPENID_NS, 'mode', 'checkid_setup') - msg.set_arg(OPENID_NS, 'assoc_handle', 'bogus') - msg.set_arg(OPENID_NS, 'identity', 'george') - msg.set_arg(OPENID_NS, 'claimed_id', 'george') + msg.set_arg(OPENID_NS, "mode", "checkid_setup") + msg.set_arg(OPENID_NS, "assoc_handle", "bogus") + msg.set_arg(OPENID_NS, "identity", "george") + msg.set_arg(OPENID_NS, "claimed_id", "george") assert_raises(Server::ProtocolError) do Server::CheckIDRequest.from_message(msg, @server.op_endpoint) @@ -1511,41 +1637,55 @@ def test_fromMessageWithoutTrustRootOrReturnTo class TestCheckIDExtension < Minitest::Test def setup - @op_endpoint = 'http://endpoint.unittest/ext' + @op_endpoint = "http://endpoint.unittest/ext" @store = Store::Memory.new @server = Server::Server.new(@store, @op_endpoint) @request = Server::CheckIDRequest.new( - 'http://bambam.unittest/', - 'http://bar.unittest/999', + "http://bambam.unittest/", + "http://bar.unittest/999", @server.op_endpoint, - 'http://bar.unittest/', - false + "http://bar.unittest/", + false, ) @request.message = Message.new(OPENID2_NS) @response = Server::OpenIDResponse.new(@request) - @response.fields.set_arg(OPENID_NS, 'mode', 'id_res') - @response.fields.set_arg(OPENID_NS, 'blue', 'star') + @response.fields.set_arg(OPENID_NS, "mode", "id_res") + @response.fields.set_arg(OPENID_NS, "blue", "star") end def test_addField - namespace = 'something:' - @response.fields.set_arg(namespace, 'bright', 'potato') - assert_equal(@response.fields.get_args(OPENID_NS), - { 'blue' => 'star', - 'mode' => 'id_res' }) + namespace = "something:" + @response.fields.set_arg(namespace, "bright", "potato") + + assert_equal( + { + "blue" => "star", + "mode" => "id_res", + }, + @response.fields.get_args(OPENID_NS), + ) - assert_equal(@response.fields.get_args(namespace), - { 'bright' => 'potato' }) + assert_equal( + {"bright" => "potato"}, + @response.fields.get_args(namespace), + ) end def test_addFields - namespace = 'mi5:' - args = { 'tangy' => 'suspenders', - 'bravo' => 'inclusion' } + namespace = "mi5:" + args = { + "tangy" => "suspenders", + "bravo" => "inclusion", + } @response.fields.update_args(namespace, args) - assert_equal(@response.fields.get_args(OPENID_NS), - { 'blue' => 'star', - 'mode' => 'id_res' }) + + assert_equal( + { + "blue" => "star", + "mode" => "id_res", + }, + @response.fields.get_args(OPENID_NS), + ) assert_equal(@response.fields.get_args(namespace), args) end end @@ -1559,7 +1699,7 @@ def initialize(assoc) end def verify(assoc_handle, message) - Util.assert(message.has_key?(OPENID_NS, 'sig')) + Util.truthy_assert(message.has_key?(OPENID_NS, "sig")) return @isValid if assocs.member?([true, assoc_handle]) false @@ -1583,12 +1723,12 @@ def invalidate(assoc_handle, dumb) class TestCheckAuth < Minitest::Test def setup - @assoc_handle = 'mooooooooo' + @assoc_handle = "mooooooooo" @message = Message.from_post_args({ - 'openid.sig' => 'signarture', - 'one' => 'alpha', - 'two' => 'beta' - }) + "openid.sig" => "signarture", + "one" => "alpha", + "two" => "beta", + }) @request = Server::CheckAuthRequest.new( @assoc_handle, @message ) @@ -1603,16 +1743,22 @@ def test_to_s def test_valid r = @request.answer(@signatory) - assert_equal({ 'is_valid' => 'true' }, - r.fields.get_args(OPENID_NS)) + + assert_equal( + {"is_valid" => "true"}, + r.fields.get_args(OPENID_NS), + ) assert_equal(r.request, @request) end def test_invalid @signatory.isValid = false r = @request.answer(@signatory) - assert_equal({ 'is_valid' => 'false' }, - r.fields.get_args(OPENID_NS)) + + assert_equal( + {"is_valid" => "false"}, + r.fields.get_args(OPENID_NS), + ) end def test_replay @@ -1629,25 +1775,34 @@ def test_replay # be used with another handle without breaking the sig. r = @request.answer(@signatory) r = @request.answer(@signatory) - assert_equal({ 'is_valid' => 'false' }, - r.fields.get_args(OPENID_NS)) + + assert_equal( + {"is_valid" => "false"}, + r.fields.get_args(OPENID_NS), + ) end def test_invalidatehandle - @request.invalidate_handle = 'bogusHandle' + @request.invalidate_handle = "bogusHandle" r = @request.answer(@signatory) - assert_equal(r.fields.get_args(OPENID_NS), - { 'is_valid' => 'true', - 'invalidate_handle' => 'bogusHandle' }) + + assert_equal( + { + "is_valid" => "true", + "invalidate_handle" => "bogusHandle", + }, + r.fields.get_args(OPENID_NS), + ) assert_equal(r.request, @request) end def test_invalidatehandleNo - assoc_handle = 'goodhandle' - @signatory.assocs << [false, 'goodhandle'] + assoc_handle = "goodhandle" + @signatory.assocs << [false, "goodhandle"] @request.invalidate_handle = assoc_handle r = @request.answer(@signatory) - assert_equal(r.fields.get_args(OPENID_NS), { 'is_valid' => 'true' }) + + assert_equal({"is_valid" => "true"}, r.fields.get_args(OPENID_NS)) end end @@ -1662,67 +1817,81 @@ def setup end def test_dhSHA1 - @assoc = @signatory.create_association(false, 'HMAC-SHA1') + @assoc = @signatory.create_association(false, "HMAC-SHA1") consumer_dh = DiffieHellman.from_defaults cpub = consumer_dh.public server_dh = DiffieHellman.from_defaults session = Server::DiffieHellmanSHA1ServerSession.new(server_dh, cpub) - @request = Server::AssociateRequest.new(session, 'HMAC-SHA1') + @request = Server::AssociateRequest.new(session, "HMAC-SHA1") @request.message = Message.new(OPENID2_NS) response = @request.answer(@assoc) rfg = ->(f) { response.fields.get_arg(OPENID_NS, f) } - assert_equal(rfg.call('assoc_type'), 'HMAC-SHA1') - assert_equal(rfg.call('assoc_handle'), @assoc.handle) - assert(!rfg.call('mac_key')) - assert_equal(rfg.call('session_type'), 'DH-SHA1') - assert(rfg.call('enc_mac_key')) - assert(rfg.call('dh_server_public')) - - enc_key = Util.from_base64(rfg.call('enc_mac_key')) - spub = CryptUtil.base64_to_num(rfg.call('dh_server_public')) - secret = consumer_dh.xor_secret(CryptUtil.method('sha1'), - spub, enc_key) + + assert_equal("HMAC-SHA1", rfg.call("assoc_type")) + assert_equal(rfg.call("assoc_handle"), @assoc.handle) + assert(!rfg.call("mac_key")) + assert_equal("DH-SHA1", rfg.call("session_type")) + assert(rfg.call("enc_mac_key")) + assert(rfg.call("dh_server_public")) + + enc_key = Util.from_base64(rfg.call("enc_mac_key")) + spub = CryptUtil.base64_to_num(rfg.call("dh_server_public")) + secret = consumer_dh.xor_secret( + CryptUtil.method(:sha1), + spub, + enc_key, + ) + assert_equal(secret, @assoc.secret) end def test_dhSHA256 - @assoc = @signatory.create_association(false, 'HMAC-SHA256') + @assoc = @signatory.create_association(false, "HMAC-SHA256") consumer_dh = DiffieHellman.from_defaults cpub = consumer_dh.public server_dh = DiffieHellman.from_defaults session = Server::DiffieHellmanSHA256ServerSession.new(server_dh, cpub) - @request = Server::AssociateRequest.new(session, 'HMAC-SHA256') + @request = Server::AssociateRequest.new(session, "HMAC-SHA256") @request.message = Message.new(OPENID2_NS) response = @request.answer(@assoc) rfg = ->(f) { response.fields.get_arg(OPENID_NS, f) } - assert_equal(rfg.call('assoc_type'), 'HMAC-SHA256') - assert_equal(rfg.call('assoc_handle'), @assoc.handle) - assert(!rfg.call('mac_key')) - assert_equal(rfg.call('session_type'), 'DH-SHA256') - assert(rfg.call('enc_mac_key')) - assert(rfg.call('dh_server_public')) - - enc_key = Util.from_base64(rfg.call('enc_mac_key')) - spub = CryptUtil.base64_to_num(rfg.call('dh_server_public')) - secret = consumer_dh.xor_secret(CryptUtil.method('sha256'), - spub, enc_key) + + assert_equal("HMAC-SHA256", rfg.call("assoc_type")) + assert_equal(rfg.call("assoc_handle"), @assoc.handle) + assert(!rfg.call("mac_key")) + assert_equal("DH-SHA256", rfg.call("session_type")) + assert(rfg.call("enc_mac_key")) + assert(rfg.call("dh_server_public")) + + enc_key = Util.from_base64(rfg.call("enc_mac_key")) + spub = CryptUtil.base64_to_num(rfg.call("dh_server_public")) + secret = consumer_dh.xor_secret( + CryptUtil.method(:sha256), + spub, + enc_key, + ) + assert_equal(secret, @assoc.secret) end def test_protoError256 s256_session = Consumer::DiffieHellmanSHA256Session.new - invalid_s256 = { 'openid.assoc_type' => 'HMAC-SHA1', - 'openid.session_type' => 'DH-SHA256' } + invalid_s256 = { + "openid.assoc_type" => "HMAC-SHA1", + "openid.session_type" => "DH-SHA256", + } invalid_s256.merge!(s256_session.get_request) - invalid_s256_2 = { 'openid.assoc_type' => 'MONKEY-PIRATE', - 'openid.session_type' => 'DH-SHA256' } + invalid_s256_2 = { + "openid.assoc_type" => "MONKEY-PIRATE", + "openid.session_type" => "DH-SHA256", + } invalid_s256_2.merge!(s256_session.get_request) bad_request_argss = [ invalid_s256, - invalid_s256_2 + invalid_s256_2, ] bad_request_argss.each do |request_args| @@ -1736,18 +1905,22 @@ def test_protoError256 def test_protoError s1_session = Consumer::DiffieHellmanSHA1Session.new - invalid_s1 = { 'openid.assoc_type' => 'HMAC-SHA256', - 'openid.session_type' => 'DH-SHA1' } + invalid_s1 = { + "openid.assoc_type" => "HMAC-SHA256", + "openid.session_type" => "DH-SHA1", + } invalid_s1.merge!(s1_session.get_request) - invalid_s1_2 = { 'openid.assoc_type' => 'ROBOT-NINJA', - 'openid.session_type' => 'DH-SHA1' } + invalid_s1_2 = { + "openid.assoc_type" => "ROBOT-NINJA", + "openid.session_type" => "DH-SHA1", + } invalid_s1_2.merge!(s1_session.get_request) bad_request_argss = [ - { 'openid.assoc_type' => 'Wha?' }, + {"openid.assoc_type" => "Wha?"}, invalid_s1, - invalid_s1_2 + invalid_s1_2, ] bad_request_argss.each do |request_args| @@ -1759,39 +1932,47 @@ def test_protoError end def test_protoErrorFields - contact = 'user@example.invalid' - reference = 'Trac ticket number MAX_INT' - error = 'poltergeist' + contact = "user@example.invalid" + reference = "Trac ticket number MAX_INT" + error = "poltergeist" openid1_args = { - 'openid.identitiy' => 'invalid', - 'openid.mode' => 'checkid_setup' + "openid.identitiy" => "invalid", + "openid.mode" => "checkid_setup", } openid2_args = openid1_args.dup - openid2_args.merge!({ 'openid.ns' => OPENID2_NS }) + openid2_args.merge!({"openid.ns" => OPENID2_NS}) # Check presence of optional fields in both protocol versions openid1_msg = Message.from_post_args(openid1_args) - p = Server::ProtocolError.new(openid1_msg, error, - reference, contact) + p = Server::ProtocolError.new( + openid1_msg, + error, + reference, + contact, + ) reply = p.to_message - assert_equal(reply.get_arg(OPENID_NS, 'reference'), reference) - assert_equal(reply.get_arg(OPENID_NS, 'contact'), contact) + assert_equal(reply.get_arg(OPENID_NS, "reference"), reference) + assert_equal(reply.get_arg(OPENID_NS, "contact"), contact) openid2_msg = Message.from_post_args(openid2_args) - p = Server::ProtocolError.new(openid2_msg, error, - reference, contact) + p = Server::ProtocolError.new( + openid2_msg, + error, + reference, + contact, + ) reply = p.to_message - assert_equal(reply.get_arg(OPENID_NS, 'reference'), reference) - assert_equal(reply.get_arg(OPENID_NS, 'contact'), contact) + assert_equal(reply.get_arg(OPENID_NS, "reference"), reference) + assert_equal(reply.get_arg(OPENID_NS, "contact"), contact) end def failUnlessExpiresInMatches(msg, expected_expires_in) - expires_in_str = msg.get_arg(OPENID_NS, 'expires_in', NO_DEFAULT) + expires_in_str = msg.get_arg(OPENID_NS, "expires_in", NO_DEFAULT) expires_in = expires_in_str.to_i # Slop is necessary because the tests can sometimes get run @@ -1799,107 +1980,117 @@ def failUnlessExpiresInMatches(msg, expected_expires_in) slop = 1 # second difference = expected_expires_in - expires_in - error_message = format('"expires_in" value not within %s of expected: ' + - 'expected=%s, actual=%s', slop, expected_expires_in, - expires_in) + error_message = format( + '"expires_in" value not within %s of expected: ' + + "expected=%s, actual=%s", + slop, + expected_expires_in, + expires_in, + ) + assert((0 <= difference and difference <= slop), error_message) end def test_plaintext - @assoc = @signatory.create_association(false, 'HMAC-SHA1') + @assoc = @signatory.create_association(false, "HMAC-SHA1") response = @request.answer(@assoc) rfg = ->(f) { response.fields.get_arg(OPENID_NS, f) } - assert_equal(rfg.call('assoc_type'), 'HMAC-SHA1') - assert_equal(rfg.call('assoc_handle'), @assoc.handle) + assert_equal("HMAC-SHA1", rfg.call("assoc_type")) + assert_equal(rfg.call("assoc_handle"), @assoc.handle) - failUnlessExpiresInMatches(response.fields, - @signatory.secret_lifetime) + failUnlessExpiresInMatches( + response.fields, + @signatory.secret_lifetime, + ) assert_equal( - rfg.call('mac_key'), Util.to_base64(@assoc.secret) + rfg.call("mac_key"), Util.to_base64(@assoc.secret) ) - assert(!rfg.call('session_type')) - assert(!rfg.call('enc_mac_key')) - assert(!rfg.call('dh_server_public')) + assert(!rfg.call("session_type")) + assert(!rfg.call("enc_mac_key")) + assert(!rfg.call("dh_server_public")) end def test_plaintext_v2 # The main difference between this and the v1 test is that # session_type is always returned in v2. args = { - 'openid.ns' => OPENID2_NS, - 'openid.mode' => 'associate', - 'openid.assoc_type' => 'HMAC-SHA1', - 'openid.session_type' => 'no-encryption' + "openid.ns" => OPENID2_NS, + "openid.mode" => "associate", + "openid.assoc_type" => "HMAC-SHA1", + "openid.session_type" => "no-encryption", } @request = Server::AssociateRequest.from_message( - Message.from_post_args(args) + Message.from_post_args(args), ) assert(!@request.message.is_openid1) - @assoc = @signatory.create_association(false, 'HMAC-SHA1') + @assoc = @signatory.create_association(false, "HMAC-SHA1") response = @request.answer(@assoc) rfg = ->(f) { response.fields.get_arg(OPENID_NS, f) } - assert_equal(rfg.call('assoc_type'), 'HMAC-SHA1') - assert_equal(rfg.call('assoc_handle'), @assoc.handle) + assert_equal("HMAC-SHA1", rfg.call("assoc_type")) + assert_equal(rfg.call("assoc_handle"), @assoc.handle) failUnlessExpiresInMatches( response.fields, @signatory.secret_lifetime ) assert_equal( - rfg.call('mac_key'), Util.to_base64(@assoc.secret) + rfg.call("mac_key"), Util.to_base64(@assoc.secret) ) - assert_equal(rfg.call('session_type'), 'no-encryption') - assert(!rfg.call('enc_mac_key')) - assert(!rfg.call('dh_server_public')) + assert_equal("no-encryption", rfg.call("session_type")) + assert(!rfg.call("enc_mac_key")) + assert(!rfg.call("dh_server_public")) end def test_plaintext256 - @assoc = @signatory.create_association(false, 'HMAC-SHA256') + @assoc = @signatory.create_association(false, "HMAC-SHA256") response = @request.answer(@assoc) rfg = ->(f) { response.fields.get_arg(OPENID_NS, f) } - assert_equal(rfg.call('assoc_type'), 'HMAC-SHA1') - assert_equal(rfg.call('assoc_handle'), @assoc.handle) + assert_equal("HMAC-SHA1", rfg.call("assoc_type")) + assert_equal(rfg.call("assoc_handle"), @assoc.handle) failUnlessExpiresInMatches( response.fields, @signatory.secret_lifetime ) assert_equal( - rfg.call('mac_key'), Util.to_base64(@assoc.secret) + rfg.call("mac_key"), Util.to_base64(@assoc.secret) ) - assert(!rfg.call('session_type')) - assert(!rfg.call('enc_mac_key')) - assert(!rfg.call('dh_server_public')) + assert(!rfg.call("session_type")) + assert(!rfg.call("enc_mac_key")) + assert(!rfg.call("dh_server_public")) end def test_unsupportedPrefer - allowed_assoc = 'COLD-PET-RAT' - allowed_sess = 'FROG-BONES' - message = 'This is a unit test' + allowed_assoc = "COLD-PET-RAT" + allowed_sess = "FROG-BONES" + message = "This is a unit test" # Set an OpenID 2 message so answerUnsupported doesn't raise # ProtocolError. @request.message = Message.new(OPENID2_NS) - response = @request.answer_unsupported(message, - allowed_assoc, - allowed_sess) + response = @request.answer_unsupported( + message, + allowed_assoc, + allowed_sess, + ) rfg = ->(f) { response.fields.get_arg(OPENID_NS, f) } - assert_equal(rfg.call('error_code'), 'unsupported-type') - assert_equal(rfg.call('assoc_type'), allowed_assoc) - assert_equal(rfg.call('error'), message) - assert_equal(rfg.call('session_type'), allowed_sess) + + assert_equal("unsupported-type", rfg.call("error_code")) + assert_equal(rfg.call("assoc_type"), allowed_assoc) + assert_equal(rfg.call("error"), message) + assert_equal(rfg.call("session_type"), allowed_sess) end def test_unsupported - message = 'This is a unit test' + message = "This is a unit test" # Set an OpenID 2 message so answerUnsupported doesn't raise # ProtocolError. @@ -1907,10 +2098,11 @@ def test_unsupported response = @request.answer_unsupported(message) rfg = ->(f) { response.fields.get_arg(OPENID_NS, f) } - assert_equal(rfg.call('error_code'), 'unsupported-type') - assert_nil(rfg.call('assoc_type')) - assert_equal(rfg.call('error'), message) - assert_nil(rfg.call('session_type')) + + assert_equal("unsupported-type", rfg.call("error_code")) + assert_nil(rfg.call("assoc_type")) + assert_equal(rfg.call("error"), message) + assert_nil(rfg.call("session_type")) end def test_openid1_unsupported_explode @@ -1932,13 +2124,13 @@ class TestServer < Minitest::Test def setup @store = Store::Memory.new - @server = Server::Server.new(@store, 'http://server.unittest/endpt') + @server = Server::Server.new(@store, "http://server.unittest/endpt") # catchlogs_setup() end def test_failed_dispatch request = Server::OpenIDRequest.new - request.mode = 'monkeymode' + request.mode = "monkeymode" request.message = Message.new(OPENID1_NS) assert_raises(RuntimeError) do @server.handle_request(request) @@ -1947,12 +2139,14 @@ def test_failed_dispatch def test_decode_request @server.decoder = BogusDecoder.new(@server) - assert(@server.decode_request({}) == 'BOGUS') + + assert_equal("BOGUS", @server.decode_request({})) end def test_encode_response @server.encoder = BogusEncoder.new - assert(@server.encode_response(nil) == 'BOGUS') + + assert_equal("BOGUS", @server.encode_response(nil)) end def test_dispatch @@ -1962,7 +2156,7 @@ def test_dispatch end request = Server::OpenIDRequest.new - request.mode = 'monkeymode' + request.mode = "monkeymode" request.message = Message.new(OPENID1_NS) assert_raises(UnhandledError) do @server.handle_request(request) @@ -1972,8 +2166,11 @@ def test_dispatch def test_associate request = Server::AssociateRequest.from_message(Message.from_post_args({})) response = @server.openid_associate(request) - assert(response.fields.has_key?(OPENID_NS, 'assoc_handle'), - format('No assoc_handle here: %s', response.fields.inspect)) + + assert( + response.fields.has_key?(OPENID_NS, "assoc_handle"), + format("No assoc_handle here: %s", response.fields.inspect), + ) end def test_associate2 @@ -1986,18 +2183,19 @@ def test_associate2 # Set an OpenID 2 message so answerUnsupported doesn't raise # ProtocolError. msg = Message.from_post_args({ - 'openid.ns' => OPENID2_NS, - 'openid.session_type' => 'no-encryption' - }) + "openid.ns" => OPENID2_NS, + "openid.session_type" => "no-encryption", + }) request = Server::AssociateRequest.from_message(msg) response = @server.openid_associate(request) - assert(response.fields.has_key?(OPENID_NS, 'error')) - assert(response.fields.has_key?(OPENID_NS, 'error_code')) - assert(!response.fields.has_key?(OPENID_NS, 'assoc_handle')) - assert(!response.fields.has_key?(OPENID_NS, 'assoc_type')) - assert(!response.fields.has_key?(OPENID_NS, 'session_type')) + + assert(response.fields.has_key?(OPENID_NS, "error")) + assert(response.fields.has_key?(OPENID_NS, "error_code")) + assert(!response.fields.has_key?(OPENID_NS, "assoc_handle")) + assert(!response.fields.has_key?(OPENID_NS, "assoc_type")) + assert(!response.fields.has_key?(OPENID_NS, "session_type")) end def test_associate3 @@ -2008,21 +2206,25 @@ def test_associate3 @server.negotiator.allowed_types = [%w[HMAC-SHA256 DH-SHA256]] msg = Message.from_post_args({ - 'openid.ns' => OPENID2_NS, - 'openid.session_type' => 'no-encryption' - }) + "openid.ns" => OPENID2_NS, + "openid.session_type" => "no-encryption", + }) request = Server::AssociateRequest.from_message(msg) response = @server.openid_associate(request) - assert(response.fields.has_key?(OPENID_NS, 'error')) - assert(response.fields.has_key?(OPENID_NS, 'error_code')) - assert(!response.fields.has_key?(OPENID_NS, 'assoc_handle')) + assert(response.fields.has_key?(OPENID_NS, "error")) + assert(response.fields.has_key?(OPENID_NS, "error_code")) + assert(!response.fields.has_key?(OPENID_NS, "assoc_handle")) - assert_equal(response.fields.get_arg(OPENID_NS, 'assoc_type'), - 'HMAC-SHA256') - assert_equal(response.fields.get_arg(OPENID_NS, 'session_type'), - 'DH-SHA256') + assert_equal( + "HMAC-SHA256", + response.fields.get_arg(OPENID_NS, "assoc_type"), + ) + assert_equal( + "DH-SHA256", + response.fields.get_arg(OPENID_NS, "session_type"), + ) end def test_associate4 @@ -2030,19 +2232,20 @@ def test_associate4 @server.negotiator.allowed_types = [%w[HMAC-SHA256 DH-SHA256]] query = { - 'openid.dh_consumer_public' => - 'ALZgnx8N5Lgd7pCj8K86T/DDMFjJXSss1SKoLmxE72kJTzOtG6I2PaYrHX' + - 'xku4jMQWSsGfLJxwCZ6280uYjUST/9NWmuAfcrBfmDHIBc3H8xh6RBnlXJ' + - '1WxJY3jHd5k1/ZReyRZOxZTKdF/dnIqwF8ZXUwI6peV0TyS/K1fOfF/s', + "openid.dh_consumer_public" => + "ALZgnx8N5Lgd7pCj8K86T/DDMFjJXSss1SKoLmxE72kJTzOtG6I2PaYrHX" + + "xku4jMQWSsGfLJxwCZ6280uYjUST/9NWmuAfcrBfmDHIBc3H8xh6RBnlXJ" + + "1WxJY3jHd5k1/ZReyRZOxZTKdF/dnIqwF8ZXUwI6peV0TyS/K1fOfF/s", - 'openid.assoc_type' => 'HMAC-SHA256', - 'openid.session_type' => 'DH-SHA256' + "openid.assoc_type" => "HMAC-SHA256", + "openid.session_type" => "DH-SHA256", } message = Message.from_post_args(query) request = Server::AssociateRequest.from_message(message) response = @server.openid_associate(request) - assert(response.fields.has_key?(OPENID_NS, 'assoc_handle')) + + assert(response.fields.has_key?(OPENID_NS, "assoc_handle")) end def test_no_encryption_openid1 @@ -2050,8 +2253,8 @@ def test_no_encryption_openid1 # logged. assert_log_matches(/Continuing anyway./) do m = Message.from_openid_args({ - 'session_type' => 'no-encryption' - }) + "session_type" => "no-encryption", + }) Server::AssociateRequest.from_message(m) end @@ -2060,8 +2263,8 @@ def test_no_encryption_openid1 def test_missingSessionTypeOpenID2 # Make sure session_type is required in OpenID 2 msg = Message.from_post_args({ - 'openid.ns' => OPENID2_NS - }) + "openid.ns" => OPENID2_NS, + }) assert_raises(Server::ProtocolError) do Server::AssociateRequest.from_message(msg) @@ -2069,13 +2272,14 @@ def test_missingSessionTypeOpenID2 end def test_checkAuth - request = Server::CheckAuthRequest.new('arrrrrf', '0x3999', []) + request = Server::CheckAuthRequest.new("arrrrrf", "0x3999", []) request.message = Message.new(OPENID2_NS) response = nil silence_logging do response = @server.openid_check_authentication(request) end - assert(response.fields.has_key?(OPENID_NS, 'is_valid')) + + assert(response.fields.has_key?(OPENID_NS, "is_valid")) end end @@ -2102,28 +2306,35 @@ def test_get_association_nil def test_sign request = TestingRequest.new - assoc_handle = '{assoc}{lookatme}' + assoc_handle = "{assoc}{lookatme}" @store.store_association( @_normal_key, - Association.from_expires_in(60, assoc_handle, - 'sekrit', 'HMAC-SHA1') + Association.from_expires_in( + 60, + assoc_handle, + "sekrit", + "HMAC-SHA1", + ), ) request.assoc_handle = assoc_handle request.namespace = OPENID1_NS response = Server::OpenIDResponse.new(request) response.fields = Message.from_openid_args({ - 'foo' => 'amsigned', - 'bar' => 'notsigned', - 'azu' => 'alsosigned' - }) + "foo" => "amsigned", + "bar" => "notsigned", + "azu" => "alsosigned", + }) sresponse = @signatory.sign(response) + + assert_equal( + sresponse.fields.get_arg(OPENID_NS, "assoc_handle"), + assoc_handle, + ) assert_equal( - sresponse.fields.get_arg(OPENID_NS, 'assoc_handle'), - assoc_handle + "assoc_handle,azu,bar,foo,signed", + sresponse.fields.get_arg(OPENID_NS, "signed"), ) - assert_equal(sresponse.fields.get_arg(OPENID_NS, 'signed'), - 'assoc_handle,azu,bar,foo,signed') - assert(sresponse.fields.get_arg(OPENID_NS, 'sig')) + assert(sresponse.fields.get_arg(OPENID_NS, "sig")) # assert(!@messages, @messages) end @@ -2133,19 +2344,23 @@ def test_signDumb request.namespace = OPENID2_NS response = Server::OpenIDResponse.new(request) response.fields = Message.from_openid_args({ - 'foo' => 'amsigned', - 'bar' => 'notsigned', - 'azu' => 'alsosigned', - 'ns' => OPENID2_NS - }) + "foo" => "amsigned", + "bar" => "notsigned", + "azu" => "alsosigned", + "ns" => OPENID2_NS, + }) sresponse = @signatory.sign(response) - assoc_handle = sresponse.fields.get_arg(OPENID_NS, 'assoc_handle') + assoc_handle = sresponse.fields.get_arg(OPENID_NS, "assoc_handle") + assert(assoc_handle) assoc = @signatory.get_association(assoc_handle, true) + assert(assoc) - assert_equal(sresponse.fields.get_arg(OPENID_NS, 'signed'), - 'assoc_handle,azu,bar,foo,ns,signed') - assert(sresponse.fields.get_arg(OPENID_NS, 'sig')) + assert_equal( + "assoc_handle,azu,bar,foo,ns,signed", + sresponse.fields.get_arg(OPENID_NS, "signed"), + ) + assert(sresponse.fields.get_arg(OPENID_NS, "sig")) # assert(!@messages, @messages) end @@ -2166,42 +2381,52 @@ def test_signExpired # that the Relying Party included with the original request. request = TestingRequest.new request.namespace = OPENID2_NS - assoc_handle = '{assoc}{lookatme}' + assoc_handle = "{assoc}{lookatme}" @store.store_association( @_normal_key, - Association.from_expires_in(-10, assoc_handle, - 'sekrit', 'HMAC-SHA1') + Association.from_expires_in( + -10, + assoc_handle, + "sekrit", + "HMAC-SHA1", + ), ) + assert(@store.get_association(@_normal_key, assoc_handle)) request.assoc_handle = assoc_handle response = Server::OpenIDResponse.new(request) response.fields = Message.from_openid_args({ - 'foo' => 'amsigned', - 'bar' => 'notsigned', - 'azu' => 'alsosigned' - }) + "foo" => "amsigned", + "bar" => "notsigned", + "azu" => "alsosigned", + }) sresponse = nil silence_logging do sresponse = @signatory.sign(response) end - new_assoc_handle = sresponse.fields.get_arg(OPENID_NS, 'assoc_handle') + new_assoc_handle = sresponse.fields.get_arg(OPENID_NS, "assoc_handle") + assert(new_assoc_handle) - assert(new_assoc_handle != assoc_handle) + refute_equal(new_assoc_handle, assoc_handle) assert_equal( - sresponse.fields.get_arg(OPENID_NS, 'invalidate_handle'), - assoc_handle + sresponse.fields.get_arg(OPENID_NS, "invalidate_handle"), + assoc_handle, ) - assert_equal(sresponse.fields.get_arg(OPENID_NS, 'signed'), - 'assoc_handle,azu,bar,foo,invalidate_handle,signed') - assert(sresponse.fields.get_arg(OPENID_NS, 'sig')) + assert_equal( + "assoc_handle,azu,bar,foo,invalidate_handle,signed", + sresponse.fields.get_arg(OPENID_NS, "signed"), + ) + assert(sresponse.fields.get_arg(OPENID_NS, "sig")) # make sure the expired association is gone - assert(!@store.get_association(@_normal_key, assoc_handle), - 'expired association is still retrievable.') + assert( + !@store.get_association(@_normal_key, assoc_handle), + "expired association is still retrievable.", + ) # make sure the new key is a dumb mode association assert(@store.get_association(@_dumb_key, new_assoc_handle)) @@ -2212,31 +2437,32 @@ def test_signExpired def test_signInvalidHandle request = TestingRequest.new request.namespace = OPENID2_NS - assoc_handle = '{bogus-assoc}{notvalid}' + assoc_handle = "{bogus-assoc}{notvalid}" request.assoc_handle = assoc_handle response = Server::OpenIDResponse.new(request) response.fields = Message.from_openid_args({ - 'foo' => 'amsigned', - 'bar' => 'notsigned', - 'azu' => 'alsosigned' - }) + "foo" => "amsigned", + "bar" => "notsigned", + "azu" => "alsosigned", + }) sresponse = @signatory.sign(response) - new_assoc_handle = sresponse.fields.get_arg(OPENID_NS, 'assoc_handle') + new_assoc_handle = sresponse.fields.get_arg(OPENID_NS, "assoc_handle") + assert(new_assoc_handle) - assert(new_assoc_handle != assoc_handle) + refute_equal(new_assoc_handle, assoc_handle) assert_equal( - sresponse.fields.get_arg(OPENID_NS, 'invalidate_handle'), - assoc_handle + sresponse.fields.get_arg(OPENID_NS, "invalidate_handle"), + assoc_handle, ) assert_equal( - sresponse.fields.get_arg(OPENID_NS, 'signed'), - 'assoc_handle,azu,bar,foo,invalidate_handle,signed' + "assoc_handle,azu,bar,foo,invalidate_handle,signed", + sresponse.fields.get_arg(OPENID_NS, "signed"), ) - assert(sresponse.fields.get_arg(OPENID_NS, 'sig')) + assert(sresponse.fields.get_arg(OPENID_NS, "sig")) # make sure the new key is a dumb mode association assert(@store.get_association(@_dumb_key, new_assoc_handle)) @@ -2245,41 +2471,42 @@ def test_signInvalidHandle end def test_verify - assoc_handle = '{vroom}{zoom}' + assoc_handle = "{vroom}{zoom}" assoc = Association.from_expires_in( - 60, assoc_handle, 'sekrit', 'HMAC-SHA1' + 60, assoc_handle, "sekrit", "HMAC-SHA1" ) @store.store_association(@_dumb_key, assoc) signed = Message.from_post_args({ - 'openid.foo' => 'bar', - 'openid.apple' => 'orange', - 'openid.assoc_handle' => assoc_handle, - 'openid.signed' => 'apple,assoc_handle,foo,signed', - 'openid.sig' => 'uXoT1qm62/BB09Xbj98TQ8mlBco=' - }) + "openid.foo" => "bar", + "openid.apple" => "orange", + "openid.assoc_handle" => assoc_handle, + "openid.signed" => "apple,assoc_handle,foo,signed", + "openid.sig" => "uXoT1qm62/BB09Xbj98TQ8mlBco=", + }) verified = @signatory.verify(assoc_handle, signed) + assert(verified) # assert(!@messages, @messages) end def test_verifyBadSig - assoc_handle = '{vroom}{zoom}' + assoc_handle = "{vroom}{zoom}" assoc = Association.from_expires_in( - 60, assoc_handle, 'sekrit', 'HMAC-SHA1' + 60, assoc_handle, "sekrit", "HMAC-SHA1" ) @store.store_association(@_dumb_key, assoc) signed = Message.from_post_args({ - 'openid.foo' => 'bar', - 'openid.apple' => 'orange', - 'openid.assoc_handle' => assoc_handle, - 'openid.signed' => 'apple,assoc_handle,foo,signed', - 'openid.sig' => 'uXoT1qm62/BB09Xbj98TQ8mlBco=BOGUS' - }) + "openid.foo" => "bar", + "openid.apple" => "orange", + "openid.assoc_handle" => assoc_handle, + "openid.signed" => "apple,assoc_handle,foo,signed", + "openid.sig" => "uXoT1qm62/BB09Xbj98TQ8mlBco=BOGUS", + }) verified = @signatory.verify(assoc_handle, signed) # @failIf(@messages, @messages) @@ -2287,49 +2514,50 @@ def test_verifyBadSig end def test_verifyBadHandle - assoc_handle = '{vroom}{zoom}' + assoc_handle = "{vroom}{zoom}" signed = Message.from_post_args({ - 'foo' => 'bar', - 'apple' => 'orange', - 'openid.sig' => 'Ylu0KcIR7PvNegB/K41KpnRgJl0=' - }) + "foo" => "bar", + "apple" => "orange", + "openid.sig" => "Ylu0KcIR7PvNegB/K41KpnRgJl0=", + }) verified = nil silence_logging do verified = @signatory.verify(assoc_handle, signed) end - assert !verified + assert(!verified) end def test_verifyAssocMismatch # Attempt to validate sign-all message with a signed-list assoc. - assoc_handle = '{vroom}{zoom}' + assoc_handle = "{vroom}{zoom}" assoc = Association.from_expires_in( - 60, assoc_handle, 'sekrit', 'HMAC-SHA1' + 60, assoc_handle, "sekrit", "HMAC-SHA1" ) @store.store_association(@_dumb_key, assoc) signed = Message.from_post_args({ - 'foo' => 'bar', - 'apple' => 'orange', - 'openid.sig' => 'd71xlHtqnq98DonoSgoK/nD+QRM=' - }) + "foo" => "bar", + "apple" => "orange", + "openid.sig" => "d71xlHtqnq98DonoSgoK/nD+QRM=", + }) verified = nil silence_logging do verified = @signatory.verify(assoc_handle, signed) end - assert !verified + assert(!verified) end def test_getAssoc assoc_handle = makeAssoc(true) assoc = @signatory.get_association(assoc_handle, true) - assert assoc - assert_equal assoc.handle, assoc_handle + + assert(assoc) + assert_equal(assoc.handle, assoc_handle) end def test_getAssocExpired @@ -2338,11 +2566,13 @@ def test_getAssocExpired silence_logging do assoc = @signatory.get_association(assoc_handle, true) end - assert !assoc + + assert(!assoc) end def test_getAssocInvalid - ah = 'no-such-handle' + ah = "no-such-handle" + silence_logging do assert_nil(@signatory.get_association(ah, false)) end @@ -2352,6 +2582,7 @@ def test_getAssocInvalid def test_getAssocDumbVsNormal # getAssociation(dumb=False) cannot get a dumb assoc assoc_handle = makeAssoc(true) + silence_logging do assert_nil(@signatory.get_association(assoc_handle, false)) end @@ -2366,6 +2597,7 @@ def test_getAssocNormalVsDumb # An OP MUST NOT verify signatures for associations that have shared # MAC keys. assoc_handle = makeAssoc(false) + silence_logging do assert_nil(@signatory.get_association(assoc_handle, true)) end @@ -2374,6 +2606,7 @@ def test_getAssocNormalVsDumb def test_createAssociation assoc = @signatory.create_association(false) + silence_logging do assert(@signatory.get_association(assoc.handle, false)) end @@ -2381,9 +2614,13 @@ def test_createAssociation end def makeAssoc(dumb, lifetime = 60) - assoc_handle = '{bling}' - assoc = Association.from_expires_in(lifetime, assoc_handle, - 'sekrit', 'HMAC-SHA1') + assoc_handle = "{bling}" + assoc = Association.from_expires_in( + lifetime, + assoc_handle, + "sekrit", + "HMAC-SHA1", + ) silence_logging do @store.store_association(((dumb and @_dumb_key) or @_normal_key), assoc) @@ -2393,18 +2630,25 @@ def makeAssoc(dumb, lifetime = 60) end def test_invalidate - assoc_handle = '-squash-' - assoc = Association.from_expires_in(60, assoc_handle, - 'sekrit', 'HMAC-SHA1') + assoc_handle = "-squash-" + assoc = Association.from_expires_in( + 60, + assoc_handle, + "sekrit", + "HMAC-SHA1", + ) silence_logging do @store.store_association(@_dumb_key, assoc) assoc = @signatory.get_association(assoc_handle, true) + assert(assoc) assoc = @signatory.get_association(assoc_handle, true) + assert(assoc) @signatory.invalidate(assoc_handle, true) assoc = @signatory.get_association(assoc_handle, true) + assert(!assoc) end # @failIf(@messages, @messages) @@ -2414,34 +2658,43 @@ def test_invalidate class RunthroughTestCase < Minitest::Test def setup @store = Store::Memory.new - @server = Server::Server.new(@store, 'http://example.com/openid/server') + @server = Server::Server.new(@store, "http://example.com/openid/server") end def test_openid1_assoc_checkid - assoc_args = { 'openid.mode' => 'associate', - 'openid.assoc_type' => 'HMAC-SHA1' } + assoc_args = { + "openid.mode" => "associate", + "openid.assoc_type" => "HMAC-SHA1", + } areq = @server.decode_request(assoc_args) aresp = @server.handle_request(areq) amess = aresp.fields + assert(amess.is_openid1) - ahandle = amess.get_arg(OPENID_NS, 'assoc_handle') + ahandle = amess.get_arg(OPENID_NS, "assoc_handle") + assert(ahandle) - assoc = @store.get_association('http://localhost/|normal', ahandle) - assert(assoc.is_a?(Association)) + assoc = @store.get_association("http://localhost/|normal", ahandle) + + assert_kind_of(Association, assoc) - checkid_args = { 'openid.mode' => 'checkid_setup', - 'openid.return_to' => 'http://example.com/openid/consumer', - 'openid.assoc_handle' => ahandle, - 'openid.identity' => 'http://foo.com/' } + checkid_args = { + "openid.mode" => "checkid_setup", + "openid.return_to" => "http://example.com/openid/consumer", + "openid.assoc_handle" => ahandle, + "openid.identity" => "http://foo.com/", + } cireq = @server.decode_request(checkid_args) ciresp = cireq.answer(true) signed_resp = @server.signatory.sign(ciresp) - assert_equal(assoc.get_message_signature(signed_resp.fields), - signed_resp.fields.get_arg(OPENID_NS, 'sig')) + assert_equal( + assoc.get_message_signature(signed_resp.fields), + signed_resp.fields.get_arg(OPENID_NS, "sig"), + ) assert(assoc.check_message_signature(signed_resp.fields)) end diff --git a/test/test_sreg.rb b/test/test_sreg.rb index 2ccb213..1826a61 100644 --- a/test/test_sreg.rb +++ b/test/test_sreg.rb @@ -1,20 +1,20 @@ -require 'minitest/autorun' -require 'openid/extensions/sreg' -require 'openid/message' -require 'openid/server' +require_relative "test_helper" +require "openid/extensions/sreg" +require "openid/message" +require "openid/server" module OpenID module SReg module SRegTest SOME_DATA = { - 'nickname' => 'linusaur', - 'postcode' => '12345', - 'country' => 'US', - 'gender' => 'M', - 'fullname' => 'Leonhard Euler', - 'email' => 'president@whitehouse.gov', - 'dob' => '0000-00-00', - 'language' => 'en-us' + "nickname" => "linusaur", + "postcode" => "12345", + "country" => "US", + "gender" => "M", + "fullname" => "Leonhard Euler", + "email" => "president@whitehouse.gov", + "dob" => "0000-00-00", + "language" => "en-us", } class SRegTest < Minitest::Test @@ -26,24 +26,27 @@ def test_check_field_name DATA_FIELDS.keys.each do |field_name| OpenID.check_sreg_field_name(field_name) end - assert_raises(ArgumentError) { OpenID.check_sreg_field_name('invalid') } + assert_raises(ArgumentError) { OpenID.check_sreg_field_name("invalid") } assert_raises(ArgumentError) { OpenID.check_sreg_field_name(nil) } end def test_unsupported endpoint = FakeEndpoint.new([]) + assert(!OpenID.supports_sreg?(endpoint)) assert_equal([NS_URI_1_1, NS_URI_1_0], endpoint.checked_uris) end def test_supported_1_1 endpoint = FakeEndpoint.new([NS_URI_1_1]) + assert(OpenID.supports_sreg?(endpoint)) assert_equal([NS_URI_1_1], endpoint.checked_uris) end def test_supported_1_0 endpoint = FakeEndpoint.new([NS_URI_1_0]) + assert(OpenID.supports_sreg?(endpoint)) assert_equal([NS_URI_1_1, NS_URI_1_0], endpoint.checked_uris) end @@ -83,14 +86,16 @@ def setup def test_openid2_empty ns_uri = OpenID.get_sreg_ns(@msg) - assert_equal('sreg', @msg.namespaces.get_alias(ns_uri)) + + assert_equal("sreg", @msg.namespaces.get_alias(ns_uri)) assert_equal(NS_URI, ns_uri) end def test_openid1_empty @msg.openid1 = true ns_uri = OpenID.get_sreg_ns(@msg) - assert_equal('sreg', @msg.namespaces.get_alias(ns_uri)) + + assert_equal("sreg", @msg.namespaces.get_alias(ns_uri)) assert_equal(NS_URI, ns_uri) end @@ -98,6 +103,7 @@ def test_openid1defined_1_0 @msg.openid1 = true @msg.namespaces.add(NS_URI_1_0) ns_uri = OpenID.get_sreg_ns(@msg) + assert_equal(NS_URI_1_0, ns_uri) end @@ -109,6 +115,7 @@ def test_openid1_defined_1_0_override_alias @msg.openid1 = openid_version @msg.namespaces.add_alias(sreg_version, name) ns_uri = OpenID.get_sreg_ns(@msg) + assert_equal(name, @msg.namespaces.get_alias(ns_uri)) assert_equal(sreg_version, ns_uri) end @@ -118,74 +125,80 @@ def test_openid1_defined_1_0_override_alias def test_openid1_defined_badly @msg.openid1 = true - @msg.namespaces.add_alias('http://invalid/', 'sreg') + @msg.namespaces.add_alias("http://invalid/", "sreg") assert_raises(NamespaceError) { OpenID.get_sreg_ns(@msg) } end def test_openid2_defined_badly - @msg.namespaces.add_alias('http://invalid/', 'sreg') + @msg.namespaces.add_alias("http://invalid/", "sreg") assert_raises(NamespaceError) { OpenID.get_sreg_ns(@msg) } end def test_openid2_defined_1_0 @msg.namespaces.add(NS_URI_1_0) ns_uri = OpenID.get_sreg_ns(@msg) + assert_equal(NS_URI_1_0, ns_uri) end def test_openid1_sreg_ns_from_args args = { - 'sreg.optional' => 'nickname', - 'sreg.required' => 'dob' + "sreg.optional" => "nickname", + "sreg.required" => "dob", } m = Message.from_openid_args(args) - assert_equal('nickname', m.get_arg(NS_URI_1_1, 'optional')) - assert_equal('dob', m.get_arg(NS_URI_1_1, 'required')) + assert_equal("nickname", m.get_arg(NS_URI_1_1, "optional")) + assert_equal("dob", m.get_arg(NS_URI_1_1, "required")) end end class SRegRequestTest < Minitest::Test def test_construct_empty req = Request.new - assert_equal([], req.optional) - assert_equal([], req.required) + + assert_empty(req.optional) + assert_empty(req.required) assert_nil(req.policy_url) assert_equal(NS_URI, req.ns_uri) end def test_construct_fields - req = Request.new(['nickname'], ['gender'], 'http://policy', 'http://sreg.ns_uri') - assert_equal(['gender'], req.optional) - assert_equal(['nickname'], req.required) - assert_equal('http://policy', req.policy_url) - assert_equal('http://sreg.ns_uri', req.ns_uri) + req = Request.new(["nickname"], ["gender"], "http://policy", "http://sreg.ns_uri") + + assert_equal(["gender"], req.optional) + assert_equal(["nickname"], req.required) + assert_equal("http://policy", req.policy_url) + assert_equal("http://sreg.ns_uri", req.ns_uri) end def test_construct_bad_fields - assert_raises(ArgumentError) { Request.new(['elvis']) } + assert_raises(ArgumentError) { Request.new(["elvis"]) } end def test_from_openid_request_message_copied - message = Message.from_openid_args({ 'sreg.required' => 'nickname' }) + message = Message.from_openid_args({"sreg.required" => "nickname"}) openid_req = Server::OpenIDRequest.new openid_req.message = message sreg_req = Request.from_openid_request(openid_req) # check that the message is copied by looking at sreg namespace - assert_equal(NS_URI_1_1, message.namespaces.get_namespace_uri('sreg')) + assert_equal(NS_URI_1_1, message.namespaces.get_namespace_uri("sreg")) assert_equal(NS_URI, sreg_req.ns_uri) - assert_equal(['nickname'], sreg_req.required) + assert_equal(["nickname"], sreg_req.required) end def test_from_openid_request_ns_1_0 - message = Message.from_openid_args({ 'ns.sreg' => NS_URI_1_0, - 'sreg.required' => 'nickname' }) + message = Message.from_openid_args({ + "ns.sreg" => NS_URI_1_0, + "sreg.required" => "nickname", + }) openid_req = Server::OpenIDRequest.new openid_req.message = message sreg_req = Request.from_openid_request(openid_req) + assert_equal(NS_URI_1_0, sreg_req.ns_uri) - assert_equal(['nickname'], sreg_req.required) + assert_equal(["nickname"], sreg_req.required) end def test_from_openid_request_no_sreg @@ -193,7 +206,8 @@ def test_from_openid_request_no_sreg openid_req = Server::OpenIDRequest.new openid_req.message = message sreg_req = Request.from_openid_request(openid_req) - assert(sreg_req.nil?) + + assert_nil(sreg_req) end def test_parse_extension_args_empty @@ -203,112 +217,128 @@ def test_parse_extension_args_empty def test_parse_extension_args_extra_ignored req = Request.new - req.parse_extension_args({ 'extra' => 'stuff' }) + req.parse_extension_args({"extra" => "stuff"}) end def test_parse_extension_args_non_strict req = Request.new - req.parse_extension_args({ 'required' => 'stuff' }) - assert_equal([], req.required) + req.parse_extension_args({"required" => "stuff"}) + + assert_empty(req.required) end def test_parse_extension_args_strict req = Request.new assert_raises(ArgumentError) do - req.parse_extension_args({ 'required' => 'stuff' }, true) + req.parse_extension_args({"required" => "stuff"}, true) end end def test_parse_extension_args_policy req = Request.new - req.parse_extension_args({ 'policy_url' => 'http://policy' }, true) - assert_equal('http://policy', req.policy_url) + req.parse_extension_args({"policy_url" => "http://policy"}, true) + + assert_equal("http://policy", req.policy_url) end def test_parse_extension_args_required_empty req = Request.new - req.parse_extension_args({ 'required' => '' }, true) - assert_equal([], req.required) + req.parse_extension_args({"required" => ""}, true) + + assert_empty(req.required) end def test_parse_extension_args_optional_empty req = Request.new - req.parse_extension_args({ 'optional' => '' }, true) - assert_equal([], req.optional) + req.parse_extension_args({"optional" => ""}, true) + + assert_empty(req.optional) end def test_parse_extension_args_optional_single req = Request.new - req.parse_extension_args({ 'optional' => 'nickname' }, true) - assert_equal(['nickname'], req.optional) + req.parse_extension_args({"optional" => "nickname"}, true) + + assert_equal(["nickname"], req.optional) end def test_parse_extension_args_optional_list req = Request.new - req.parse_extension_args({ 'optional' => 'nickname,email' }, true) + req.parse_extension_args({"optional" => "nickname,email"}, true) + assert_equal(%w[nickname email], req.optional) end def test_parse_extension_args_optional_list_bad_nonstrict req = Request.new - req.parse_extension_args({ 'optional' => 'nickname,email,beer' }) + req.parse_extension_args({"optional" => "nickname,email,beer"}) + assert_equal(%w[nickname email], req.optional) end def test_parse_extension_args_optional_list_bad_strict req = Request.new assert_raises(ArgumentError) do - req.parse_extension_args({ 'optional' => 'nickname,email,beer' }, true) + req.parse_extension_args({"optional" => "nickname,email,beer"}, true) end end def test_parse_extension_args_both_nonstrict req = Request.new - req.parse_extension_args({ 'optional' => 'nickname', 'required' => 'nickname' }) - assert_equal(['nickname'], req.required) - assert_equal([], req.optional) + req.parse_extension_args({"optional" => "nickname", "required" => "nickname"}) + + assert_equal(["nickname"], req.required) + assert_empty(req.optional) end def test_parse_extension_args_both_strict req = Request.new assert_raises(ArgumentError) do - req.parse_extension_args({ 'optional' => 'nickname', 'required' => 'nickname' }, true) + req.parse_extension_args({"optional" => "nickname", "required" => "nickname"}, true) end end def test_parse_extension_args_both_list req = Request.new - req.parse_extension_args({ 'optional' => 'nickname,email', 'required' => 'country,postcode' }, true) + req.parse_extension_args({"optional" => "nickname,email", "required" => "country,postcode"}, true) + assert_equal(%w[nickname email], req.optional) assert_equal(%w[country postcode], req.required) end def test_all_requested_fields req = Request.new - assert_equal([], req.all_requested_fields) - req.request_field('nickname') - assert_equal(['nickname'], req.all_requested_fields) - req.request_field('gender', true) + + assert_empty(req.all_requested_fields) + req.request_field("nickname") + + assert_equal(["nickname"], req.all_requested_fields) + req.request_field("gender", true) requested = req.all_requested_fields.sort + assert_equal(%w[gender nickname], requested) end def test_were_fields_requested req = Request.new + assert(!req.were_fields_requested?) - req.request_field('nickname') - assert(req.were_fields_requested?) + req.request_field("nickname") + + assert_predicate(req, :were_fields_requested?) end def test_member req = Request.new + DATA_FIELDS.keys.each do |f| assert(!req.member?(f)) end - assert(!req.member?('something else')) - req.request_field('nickname') + assert(!req.member?("something else")) + req.request_field("nickname") + DATA_FIELDS.keys.each do |f| - assert_equal(f == 'nickname', req.member?(f)) + assert_equal(f == "nickname", req.member?(f)) end end @@ -316,29 +346,33 @@ def test_request_field_bogus req = Request.new fields = DATA_FIELDS.keys fields.each { |f| req.request_field(f) } + assert_equal(fields, req.optional) - assert_equal([], req.required) + assert_empty(req.required) # By default, adding the same fields over again has no effect fields.each { |f| req.request_field(f) } + assert_equal(fields, req.optional) - assert_equal([], req.required) + assert_empty(req.required) # Requesting a field as required overrides requesting it as optional expected = fields[1..-1] overridden = fields[0] req.request_field(overridden, true) + assert_equal(expected, req.optional) assert_equal([overridden], req.required) fields.each { |f| req.request_field(f, true) } + assert_equal(fields, req.required) - assert_equal([], req.optional) + assert_empty(req.optional) end def test_request_fields_type req = Request.new - assert_raises(ArgumentError) { req.request_fields('nickname') } + assert_raises(ArgumentError) { req.request_fields("nickname") } end def test_request_fields @@ -346,54 +380,79 @@ def test_request_fields fields = DATA_FIELDS.keys req.request_fields(fields) + assert_equal(fields, req.optional) - assert_equal([], req.required) + assert_empty(req.required) # By default, adding the same fields over again has no effect req.request_fields(fields) + assert_equal(fields, req.optional) - assert_equal([], req.required) + assert_empty(req.required) # required overrides optional expected = fields[1..-1] overridden = fields[0] req.request_fields([overridden], true) + assert_equal(expected, req.optional) assert_equal([overridden], req.required) req.request_fields(fields, true) + assert_equal(fields, req.required) - assert_equal([], req.optional) + assert_empty(req.optional) # optional does not override required req.request_fields(fields) + assert_equal(fields, req.required) - assert_equal([], req.optional) + assert_empty(req.optional) end def test_get_extension_args req = Request.new - assert_equal({}, req.get_extension_args) - req.request_field('nickname') - assert_equal({ 'optional' => 'nickname' }, req.get_extension_args) + assert_empty(req.get_extension_args) + + req.request_field("nickname") + + assert_equal({"optional" => "nickname"}, req.get_extension_args) + + req.request_field("email") + + assert_equal({"optional" => "nickname,email"}, req.get_extension_args) + + req.request_field("gender", true) - req.request_field('email') - assert_equal({ 'optional' => 'nickname,email' }, req.get_extension_args) + assert_equal( + { + "optional" => "nickname,email", + "required" => "gender", + }, + req.get_extension_args, + ) - req.request_field('gender', true) - assert_equal({ 'optional' => 'nickname,email', - 'required' => 'gender' }, req.get_extension_args) + req.request_field("dob", true) - req.request_field('dob', true) - assert_equal({ 'optional' => 'nickname,email', - 'required' => 'gender,dob' }, req.get_extension_args) + assert_equal( + { + "optional" => "nickname,email", + "required" => "gender,dob", + }, + req.get_extension_args, + ) - req.policy_url = 'http://policy' - assert_equal({ 'optional' => 'nickname,email', - 'required' => 'gender,dob', - 'policy_url' => 'http://policy' }, - req.get_extension_args) + req.policy_url = "http://policy" + + assert_equal( + { + "optional" => "nickname,email", + "required" => "gender,dob", + "policy_url" => "http://policy", + }, + req.get_extension_args, + ) end end @@ -413,31 +472,37 @@ def get_signed_ns(_ns_uri) class SRegResponseTest < Minitest::Test def test_construct resp = Response.new(SOME_DATA) + assert_equal(SOME_DATA, resp.get_extension_args) assert_equal(NS_URI, resp.ns_uri) - resp2 = Response.new({}, 'http://foo') - assert_equal({}, resp2.get_extension_args) - assert_equal('http://foo', resp2.ns_uri) + resp2 = Response.new({}, "http://foo") + + assert_empty(resp2.get_extension_args) + assert_equal("http://foo", resp2.ns_uri) end def test_from_success_response_signed message = Message.from_openid_args({ - 'sreg.nickname' => 'The Mad Stork' - }) + "sreg.nickname" => "The Mad Stork", + }) success_resp = DummySuccessResponse.new(message, {}) sreg_resp = Response.from_success_response(success_resp) - assert_equal({}, sreg_resp.get_extension_args) + + assert_empty(sreg_resp.get_extension_args) end def test_from_success_response_unsigned message = Message.from_openid_args({ - 'ns.sreg' => NS_URI, - 'sreg.nickname' => 'The Mad Stork' - }) + "ns.sreg" => NS_URI, + "sreg.nickname" => "The Mad Stork", + }) success_resp = DummySuccessResponse.new(message, {}) sreg_resp = Response.from_success_response(success_resp, false) - assert_equal({ 'nickname' => 'The Mad Stork' }, - sreg_resp.get_extension_args) + + assert_equal( + {"nickname" => "The Mad Stork"}, + sreg_resp.get_extension_args, + ) end end @@ -445,7 +510,7 @@ class SendFieldsTest < Minitest::Test # class SendFieldsTest < Object def test_send_fields # create a request message with simple reg fields - sreg_req = Request.new(%w[nickname email], ['fullname']) + sreg_req = Request.new(%w[nickname email], ["fullname"]) req_msg = Message.new req_msg.update_args(NS_URI, sreg_req.get_extension_args) req = Server::OpenIDRequest.new @@ -464,9 +529,15 @@ def test_send_fields # extract sent fields sreg_data_resp = resp_msg.get_args(NS_URI) - assert_equal({ 'nickname' => 'linusaur', - 'email' => 'president@whitehouse.gov', - 'fullname' => 'Leonhard Euler' }, sreg_data_resp) + + assert_equal( + { + "nickname" => "linusaur", + "email" => "president@whitehouse.gov", + "fullname" => "Leonhard Euler", + }, + sreg_data_resp, + ) end end end diff --git a/test/test_stores.rb b/test/test_stores.rb index 7fef94c..a965110 100644 --- a/test/test_stores.rb +++ b/test/test_stores.rb @@ -1,17 +1,17 @@ -require 'minitest/autorun' -require 'openid/store/interface' -require 'openid/store/filesystem' -require 'openid/store/memcache' -require 'openid/store/memory' -require 'openid/util' -require 'openid/store/nonce' -require 'openid/association' +require_relative "test_helper" +require "openid/store/interface" +require "openid/store/filesystem" +require "openid/store/memcache" +require "openid/store/memory" +require "openid/util" +require "openid/store/nonce" +require "openid/association" module OpenID module Store module StoreTestCase @@allowed_handle = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~' - @@allowed_nonce = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' + @@allowed_nonce = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" def _gen_nonce OpenID::CryptUtil.random_string(8, @@allowed_nonce) @@ -28,8 +28,13 @@ def _gen_secret(n, chars = nil) def _gen_assoc(issued, lifetime = 600) secret = _gen_secret(20) handle = _gen_handle(128) - OpenID::Association.new(handle, secret, Time.now + issued, lifetime, - 'HMAC-SHA1') + OpenID::Association.new( + handle, + secret, + Time.now + issued, + lifetime, + "HMAC-SHA1", + ) end def _check_retrieve(url, handle = nil, expected = nil) @@ -46,6 +51,7 @@ def _check_retrieve(url, handle = nil, expected = nil) def _check_remove(url, handle, expected) present = @store.remove_association(url, handle) + assert_equal(expected, present) end @@ -67,10 +73,10 @@ def test_store _check_retrieve(server_url, nil, assoc) # Removing an association that does not exist returns not present - _check_remove(server_url, assoc.handle + 'x', false) + _check_remove(server_url, assoc.handle + "x", false) # Removing an association that does not exist returns not present - _check_remove(server_url + 'x', assoc.handle, false) + _check_remove(server_url + "x", assoc.handle, false) # Removing an association that is present returns present _check_remove(server_url, assoc.handle, true) @@ -119,7 +125,8 @@ def test_store ret_assoc = @store.get_association(server_url, nil) unexpected = [assoc2.handle, assoc3.handle] - assert ret_assoc.nil? || !unexpected.member?(ret_assoc.handle) + + assert(ret_assoc.nil? || !unexpected.member?(ret_assoc.handle)) _check_retrieve(server_url, assoc.handle, assoc) _check_retrieve(server_url, assoc2.handle, nil) @@ -146,27 +153,29 @@ def test_assoc_cleanup assocExpired2 = _gen_assoc(-7200, 3600) @store.cleanup_associations - @store.store_association(server_url + '1', assocValid1) - @store.store_association(server_url + '1', assocExpired1) - @store.store_association(server_url + '2', assocExpired2) - @store.store_association(server_url + '3', assocValid2) + @store.store_association(server_url + "1", assocValid1) + @store.store_association(server_url + "1", assocExpired1) + @store.store_association(server_url + "2", assocExpired2) + @store.store_association(server_url + "3", assocValid2) cleaned = @store.cleanup_associations - assert_equal(2, cleaned, 'cleaned up associations') + + assert_equal(2, cleaned, "cleaned up associations") end - def _check_use_nonce(nonce, expected, server_url, msg = '') + def _check_use_nonce(nonce, expected, server_url, msg = "") stamp, salt = Nonce.split_nonce(nonce) actual = @store.use_nonce(server_url, stamp, salt) + assert_equal(expected, actual, msg) end def server_url - 'http://www.myopenid.com/openid' + "http://www.myopenid.com/openid" end def test_nonce - [server_url, ''].each do |url| + [server_url, ""].each do |url| nonce1 = Nonce.mk_nonce _check_use_nonce(nonce1, true, url, "#{url}: nonce allowed by default") @@ -190,23 +199,30 @@ def test_nonce_cleanup @store.cleanup_nonces Nonce.skew = 1_000_000 ts, salt = Nonce.split_nonce(old_nonce1) - assert(@store.use_nonce(server_url, ts, salt), 'oldnonce1') + + assert(@store.use_nonce(server_url, ts, salt), "oldnonce1") ts, salt = Nonce.split_nonce(old_nonce2) - assert(@store.use_nonce(server_url, ts, salt), 'oldnonce2') + + assert(@store.use_nonce(server_url, ts, salt), "oldnonce2") ts, salt = Nonce.split_nonce(recent_nonce) - assert(@store.use_nonce(server_url, ts, salt), 'recent_nonce') + + assert(@store.use_nonce(server_url, ts, salt), "recent_nonce") Nonce.skew = 1000 cleaned = @store.cleanup_nonces + assert_equal(2, cleaned, "Cleaned #{cleaned} nonces") Nonce.skew = 100_000 ts, salt = Nonce.split_nonce(old_nonce1) - assert(@store.use_nonce(server_url, ts, salt), 'oldnonce1 after cleanup') + + assert(@store.use_nonce(server_url, ts, salt), "oldnonce1 after cleanup") ts, salt = Nonce.split_nonce(old_nonce2) - assert(@store.use_nonce(server_url, ts, salt), 'oldnonce2 after cleanup') + + assert(@store.use_nonce(server_url, ts, salt), "oldnonce2 after cleanup") ts, salt = Nonce.split_nonce(recent_nonce) - assert(!@store.use_nonce(server_url, ts, salt), 'recent_nonce after cleanup') + + assert(!@store.use_nonce(server_url, ts, salt), "recent_nonce after cleanup") Nonce.skew = orig_skew end @@ -216,13 +232,13 @@ class FileStoreTestCase < Minitest::Test include StoreTestCase def setup - raise 'filestoretest directory exists' if File.exist?('filestoretest') + raise "filestoretest directory exists" if File.exist?("filestoretest") - @store = Filesystem.new('filestoretest') + @store = Filesystem.new("filestoretest") end def teardown - Kernel.system('rm -r filestoretest') + Kernel.system("rm -r filestoretest") end end @@ -241,14 +257,16 @@ def setup class MemcacheStoreTestCase < Minitest::Test include StoreTestCase def setup - store_uniq = OpenID::CryptUtil.random_string(6, '0123456789') + store_uniq = OpenID::CryptUtil.random_string(6, "0123456789") store_namespace = "openid-store-#{store_uniq}:" @store = Memcache.new(::TESTING_MEMCACHE, store_namespace) end - def test_nonce_cleanup; end + def test_nonce_cleanup + end - def test_assoc_cleanup; end + def test_assoc_cleanup + end end end @@ -256,8 +274,8 @@ class AbstractStoreTestCase < Minitest::Test def test_abstract_class # the abstract made concrete abc = Interface.new - server_url = 'http://server.com/' - association = OpenID::Association.new('foo', 'bar', Time.now, Time.now + 10, 'dummy') + server_url = "http://server.com/" + association = OpenID::Association.new("foo", "bar", Time.now, Time.now + 10, "dummy") assert_raises(NotImplementedError) do abc.store_association(server_url, association) @@ -272,7 +290,7 @@ def test_abstract_class end assert_raises(NotImplementedError) do - abc.use_nonce(server_url, Time.now.to_i, 'foo') + abc.use_nonce(server_url, Time.now.to_i, "foo") end assert_raises(NotImplementedError) do diff --git a/test/test_trustroot.rb b/test/test_trustroot.rb index 2a800e5..895be92 100644 --- a/test/test_trustroot.rb +++ b/test/test_trustroot.rb @@ -1,21 +1,21 @@ -require 'minitest/autorun' -require 'testutil' -require 'openid/trustroot' +require_relative "test_helper" +require_relative "testutil" +require "openid/trustroot" class TrustRootTest < Minitest::Test include OpenID::TestDataMixin def _test_sanity(case_, sanity, desc) tr = OpenID::TrustRoot::TrustRoot.parse(case_) - if sanity == 'sane' - assert !tr.nil? - assert tr.sane?, [case_, desc].join(' ') - assert OpenID::TrustRoot::TrustRoot.check_sanity(case_), [case_, desc].join(' ') - elsif sanity == 'insane' - assert !tr.sane?, [case_, desc].join(' ') - assert !OpenID::TrustRoot::TrustRoot.check_sanity(case_), [case_, desc].join(' ') + if sanity == "sane" + assert(!tr.nil?) + assert_predicate(tr, :sane?, [case_, desc].join(" ")) + assert(OpenID::TrustRoot::TrustRoot.check_sanity(case_), [case_, desc].join(" ")) + elsif sanity == "insane" + assert(!tr.sane?, [case_, desc].join(" ")) + assert(!OpenID::TrustRoot::TrustRoot.check_sanity(case_), [case_, desc].join(" ")) else - assert tr.nil?, case_ + assert_nil(tr, case_) end end @@ -23,19 +23,20 @@ def _test_match(trust_root, url, expected_match) tr = OpenID::TrustRoot::TrustRoot.parse(trust_root) actual_match = tr.validate_url(url) if expected_match - assert actual_match, [trust_root, url].join(' ') - assert OpenID::TrustRoot::TrustRoot.check_url(trust_root, url) + assert(actual_match, [trust_root, url].join(" ")) + assert(OpenID::TrustRoot::TrustRoot.check_url(trust_root, url)) else - assert !actual_match, [expected_match, actual_match, trust_root, url].join(' ') - assert !OpenID::TrustRoot::TrustRoot.check_url(trust_root, url) + assert(!actual_match, [expected_match, actual_match, trust_root, url].join(" ")) + assert(!OpenID::TrustRoot::TrustRoot.check_url(trust_root, url)) end end def test_trustroots - data = read_data_file('trustroot.txt', false) + data = read_data_file("trustroot.txt", false) - parts = data.split('=' * 40 + "\n").collect { |i| i.strip } - assert(parts[0] == '') + parts = data.split("=" * 40 + "\n").collect { |i| i.strip } + + assert_equal("", parts[0]) _, ph, pdat, mh, mdat = parts getTests(%w[bad insane sane], ph, pdat).each do |tc| @@ -53,16 +54,18 @@ def test_trustroots def getTests(grps, head, dat) tests = [] top = head.strip - gdat = dat.split('-' * 40 + "\n").collect { |i| i.strip } - assert gdat[0] == '' - assert gdat.length == (grps.length * 2 + 1) + gdat = dat.split("-" * 40 + "\n").collect { |i| i.strip } + + assert_equal("", gdat[0]) + assert_equal(gdat.length, (grps.length * 2 + 1)) i = 1 grps.each do |x| - n, desc = gdat[i].split(': ') + n, desc = gdat[i].split(": ") cases = gdat[i + 1].split("\n") - assert(cases.length == n.to_i, 'Number of cases differs from header count') + + assert_equal(cases.length, n.to_i, "Number of cases differs from header count") cases.each do |case_| - tests += [[x, top + ' - ' + desc, case_]] + tests += [[x, top + " - " + desc, case_]] end i += 2 end @@ -73,40 +76,44 @@ def getTests(grps, head, dat) def test_return_to_matches data = [ [[], nil, false], - [[], '', false], - [[], 'http://bogus/return_to', false], - [['http://bogus/'], nil, false], - [['://broken/'], nil, false], - [['://broken/'], 'http://broken/', false], - [['http://*.broken/'], 'http://foo.broken/', false], - [['http://x.broken/'], 'http://foo.broken/', false], - [['http://first/', 'http://second/path/'], 'http://second/?query=x', false], - - [['http://broken/'], 'http://broken/', true], - [['http://first/', 'http://second/'], 'http://second/?query=x', true] + [[], "", false], + [[], "http://bogus/return_to", false], + [["http://bogus/"], nil, false], + [["://broken/"], nil, false], + [["://broken/"], "http://broken/", false], + [["http://*.broken/"], "http://foo.broken/", false], + [["http://x.broken/"], "http://foo.broken/", false], + [["http://first/", "http://second/path/"], "http://second/?query=x", false], + + [["http://broken/"], "http://broken/", true], + [["http://first/", "http://second/"], "http://second/?query=x", true], ] data.each do |case_| allowed_return_urls, return_to, expected_result = case_ - actual_result = OpenID::TrustRoot.return_to_matches(allowed_return_urls, - return_to) - assert(expected_result == actual_result) + actual_result = OpenID::TrustRoot.return_to_matches( + allowed_return_urls, + return_to, + ) + + assert_equal(expected_result, actual_result) end end def test_build_discovery_url data = [ - ['http://foo.com/path', 'http://foo.com/path'], - ['http://foo.com/path?foo=bar', 'http://foo.com/path?foo=bar'], - ['http://*.bogus.com/path', 'http://www.bogus.com/path'], - ['http://*.bogus.com:122/path', 'http://www.bogus.com:122/path'] + ["http://foo.com/path", "http://foo.com/path"], + ["http://foo.com/path?foo=bar", "http://foo.com/path?foo=bar"], + ["http://*.bogus.com/path", "http://www.bogus.com/path"], + ["http://*.bogus.com:122/path", "http://www.bogus.com:122/path"], ] data.each do |case_| trust_root, expected_disco_url = case_ tr = OpenID::TrustRoot::TrustRoot.parse(trust_root) actual_disco_url = tr.build_discovery_url - assert actual_disco_url == expected_disco_url + + assert_equal(actual_disco_url, expected_disco_url) end end end diff --git a/test/test_ui.rb b/test/test_ui.rb index 2d6ab63..b665249 100644 --- a/test/test_ui.rb +++ b/test/test_ui.rb @@ -1,7 +1,7 @@ -require 'openid/extensions/ui' -require 'openid/message' -require 'openid/server' -require 'minitest/autorun' +require "openid/extensions/ui" +require "openid/message" +require "openid/server" +require_relative "test_helper" module OpenID module UITest @@ -11,80 +11,91 @@ def setup end def test_construct - assert_nil @req.mode - assert_nil @req.icon - assert_nil @req.lang - assert_equal 'ui', @req.ns_alias - - req2 = UI::Request.new('popup', true, 'ja-JP') - assert_equal 'popup', req2.mode - assert_equal true, req2.icon - assert_equal 'ja-JP', req2.lang + assert_nil(@req.mode) + assert_nil(@req.icon) + assert_nil(@req.lang) + assert_equal("ui", @req.ns_alias) + + req2 = UI::Request.new("popup", true, "ja-JP") + + assert_equal("popup", req2.mode) + assert_equal(true, req2.icon) + assert_equal("ja-JP", req2.lang) end def test_add_mode - @req.mode = 'popup' - assert_equal 'popup', @req.mode + @req.mode = "popup" + + assert_equal("popup", @req.mode) end def test_add_icon @req.icon = true - assert_equal true, @req.icon + + assert_equal(true, @req.icon) end def test_add_lang - @req.lang = 'ja-JP' - assert_equal 'ja-JP', @req.lang + @req.lang = "ja-JP" + + assert_equal("ja-JP", @req.lang) end def test_get_extension_args - assert_equal({}, @req.get_extension_args) - @req.mode = 'popup' - assert_equal({ 'mode' => 'popup' }, @req.get_extension_args) + assert_empty(@req.get_extension_args) + @req.mode = "popup" + + assert_equal({"mode" => "popup"}, @req.get_extension_args) @req.icon = true - assert_equal({ 'mode' => 'popup', 'icon' => true }, @req.get_extension_args) - @req.lang = 'ja-JP' - assert_equal({ 'mode' => 'popup', 'icon' => true, 'lang' => 'ja-JP' }, @req.get_extension_args) + + assert_equal({"mode" => "popup", "icon" => true}, @req.get_extension_args) + @req.lang = "ja-JP" + + assert_equal({"mode" => "popup", "icon" => true, "lang" => "ja-JP"}, @req.get_extension_args) end def test_parse_extension_args - args = { 'mode' => 'popup', 'icon' => true, 'lang' => 'ja-JP' } - @req.parse_extension_args args - assert_equal 'popup', @req.mode - assert_equal true, @req.icon - assert_equal 'ja-JP', @req.lang + args = {"mode" => "popup", "icon" => true, "lang" => "ja-JP"} + @req.parse_extension_args(args) + + assert_equal("popup", @req.mode) + assert_equal(true, @req.icon) + assert_equal("ja-JP", @req.lang) end def test_parse_extension_args_empty @req.parse_extension_args({}) - assert_nil @req.mode - assert_nil @req.icon - assert_nil @req.lang + + assert_nil(@req.mode) + assert_nil(@req.icon) + assert_nil(@req.lang) end def test_from_openid_request openid_req_msg = Message.from_openid_args( - 'mode' => 'checkid_setup', - 'ns' => OPENID2_NS, - 'ns.ui' => UI::NS_URI, - 'ui.mode' => 'popup', - 'ui.icon' => true, - 'ui.lang' => 'ja-JP' + "mode" => "checkid_setup", + "ns" => OPENID2_NS, + "ns.ui" => UI::NS_URI, + "ui.mode" => "popup", + "ui.icon" => true, + "ui.lang" => "ja-JP", ) oid_req = Server::OpenIDRequest.new oid_req.message = openid_req_msg - req = UI::Request.from_openid_request oid_req - assert_equal 'popup', req.mode - assert_equal true, req.icon - assert_equal 'ja-JP', req.lang + req = UI::Request.from_openid_request(oid_req) + + assert_equal("popup", req.mode) + assert_equal(true, req.icon) + assert_equal("ja-JP", req.lang) end def test_from_openid_request_no_ui_params message = Message.new openid_req = Server::OpenIDRequest.new openid_req.message = message - ui_req = UI::Request.from_openid_request openid_req - assert ui_req.nil? + ui_req = UI::Request.from_openid_request(openid_req) + + assert_nil(ui_req) end end end diff --git a/test/test_urinorm.rb b/test/test_urinorm.rb index 9b7ca73..0f6904f 100644 --- a/test/test_urinorm.rb +++ b/test/test_urinorm.rb @@ -1,12 +1,12 @@ -require 'minitest/autorun' -require 'testutil' -require 'openid/urinorm' +require_relative "test_helper" +require_relative "testutil" +require "openid/urinorm" class URINormTestCase < Minitest::Test include OpenID::TestDataMixin def test_normalize - lines = read_data_file('urinorm.txt') + lines = read_data_file("urinorm.txt") while lines.length > 0 @@ -15,16 +15,17 @@ def test_normalize expected = lines.shift.strip lines.shift #=> newline - if expected == 'fail' + if expected == "fail" begin OpenID::URINorm.urinorm(actual) rescue URI::InvalidURIError - assert true + assert(true) else - raise 'Should have gotten URI error' + raise "Should have gotten URI error" end else normalized = OpenID::URINorm.urinorm(actual) + assert_equal(expected, normalized, case_name) end end diff --git a/test/test_util.rb b/test/test_util.rb index 1605863..19fc3b0 100644 --- a/test/test_util.rb +++ b/test/test_util.rb @@ -1,46 +1,51 @@ -# encoding: ASCII-8BIT +# encoding: ascii-8bit -require 'minitest/autorun' -require 'openid/util' +require_relative "test_helper" +require "openid/util" module OpenID class UtilTestCase < Minitest::Test def test_base64 cases = [ - '', + "", "\000", "\001", "\000" * 100, - (0...256).collect { |i| i.chr }.join('') + (0...256).collect { |i| i.chr }.join(""), ] cases.each do |c| encoded = Util.to_base64(c) decoded = Util.from_base64(encoded) - assert(c == decoded) + + assert_equal(c, decoded) end end def test_base64_valid - [['foos', "~\212,"], - ['++++', "\373\357\276"], - ['/+==', "\377"], - ['', ''], - ['FOOSBALL', "\024\343\222\004\002\313"], - ['FoosBL==', "\026\212,\004"], - ["Foos\nBall", "\026\212,\005\251e"], - ["Foo\r\ns\nBall", "\026\212,\005\251e"]].each do |input, expected| + [ + ["foos", "~\212,"], + ["++++", "\373\357\276"], + ["/+==", "\377"], + ["", ""], + ["FOOSBALL", "\024\343\222\004\002\313"], + ["FoosBL==", "\026\212,\004"], + ["Foos\nBall", "\026\212,\005\251e"], + ["Foo\r\ns\nBall", "\026\212,\005\251e"], + ].each do |input, expected| assert_equal(expected, Util.from_base64(input)) end end def test_base64_invalid - ['!', - 'Foos!', - 'Balls', - 'B===', - 'Foos Ball', - '=foo'].each do |invalid_input| + [ + "!", + "Foos!", + "Balls", + "B===", + "Foos Ball", + "=foo", + ].each do |invalid_input| assert_raises(ArgumentError) do Util.from_base64(invalid_input) end @@ -48,92 +53,129 @@ def test_base64_invalid end def test_append_args - simple = 'http://www.example.com/' + simple = "http://www.example.com/" cases = [ - ['empty list', - [simple, []], - simple], - - ['empty dict', - [simple, {}], - simple], - - ['one list', - [simple, [%w[a b]]], - simple + '?a=b'], - - ['one dict', - [simple, { 'a' => 'b' }], - simple + '?a=b'], - - ['two list (same)', - [simple, [%w[a b], %w[a c]]], - simple + '?a=b&a=c'], - - ['two list', - [simple, [%w[a b], %w[b c]]], - simple + '?a=b&b=c'], - - ['two list (order)', - [simple, [%w[b c], %w[a b]]], - simple + '?b=c&a=b'], - - ['two dict [order]', - [simple, { 'b' => 'c', 'a' => 'b' }], - simple + '?a=b&b=c'], - - ['args exist [empty]', - [simple + '?stuff=bother', []], - simple + '?stuff=bother'], - - ['escape', - [simple, [['=', '=']]], - simple + '?%3D=%3D'], - - ['escape [URL]', - [simple, [['this_url', simple]]], - simple + '?this_url=http%3A%2F%2Fwww.example.com%2F'], - - ['use dots', - [simple, [['openid.stuff', 'bother']]], - simple + '?openid.stuff=bother'], - - ['args exist', - [simple + '?stuff=bother', [%w[ack ack]]], - simple + '?stuff=bother&ack=ack'], - - ['args exist', - [simple + '?stuff=bother', [%w[ack ack]]], - simple + '?stuff=bother&ack=ack'], - - ['args exist [dict]', - [simple + '?stuff=bother', { 'ack' => 'ack' }], - simple + '?stuff=bother&ack=ack'], - - ['args exist [dict 2]', - [simple + '?stuff=bother', { 'ack' => 'ack', 'zebra' => 'lion' }], - simple + '?stuff=bother&ack=ack&zebra=lion'], - - ['three args [dict]', - [simple, { 'stuff' => 'bother', 'ack' => 'ack', 'zebra' => 'lion' }], - simple + '?ack=ack&stuff=bother&zebra=lion'], - - ['three args [list]', - [simple, [%w[stuff bother], %w[ack ack], %w[zebra lion]]], - simple + '?stuff=bother&ack=ack&zebra=lion'] + [ + "empty list", + [simple, []], + simple, + ], + + [ + "empty dict", + [simple, {}], + simple, + ], + + [ + "one list", + [simple, [%w[a b]]], + simple + "?a=b", + ], + + [ + "one dict", + [simple, {"a" => "b"}], + simple + "?a=b", + ], + + [ + "two list (same)", + [simple, [%w[a b], %w[a c]]], + simple + "?a=b&a=c", + ], + + [ + "two list", + [simple, [%w[a b], %w[b c]]], + simple + "?a=b&b=c", + ], + + [ + "two list (order)", + [simple, [%w[b c], %w[a b]]], + simple + "?b=c&a=b", + ], + + [ + "two dict [order]", + [simple, {"b" => "c", "a" => "b"}], + simple + "?a=b&b=c", + ], + + [ + "args exist [empty]", + [simple + "?stuff=bother", []], + simple + "?stuff=bother", + ], + + [ + "escape", + [simple, [["=", "="]]], + simple + "?%3D=%3D", + ], + + [ + "escape [URL]", + [simple, [["this_url", simple]]], + simple + "?this_url=http%3A%2F%2Fwww.example.com%2F", + ], + + [ + "use dots", + [simple, [["openid.stuff", "bother"]]], + simple + "?openid.stuff=bother", + ], + + [ + "args exist", + [simple + "?stuff=bother", [%w[ack ack]]], + simple + "?stuff=bother&ack=ack", + ], + + [ + "args exist", + [simple + "?stuff=bother", [%w[ack ack]]], + simple + "?stuff=bother&ack=ack", + ], + + [ + "args exist [dict]", + [simple + "?stuff=bother", {"ack" => "ack"}], + simple + "?stuff=bother&ack=ack", + ], + + [ + "args exist [dict 2]", + [simple + "?stuff=bother", {"ack" => "ack", "zebra" => "lion"}], + simple + "?stuff=bother&ack=ack&zebra=lion", + ], + + [ + "three args [dict]", + [simple, {"stuff" => "bother", "ack" => "ack", "zebra" => "lion"}], + simple + "?ack=ack&stuff=bother&zebra=lion", + ], + + [ + "three args [list]", + [simple, [%w[stuff bother], %w[ack ack], %w[zebra lion]]], + simple + "?stuff=bother&ack=ack&zebra=lion", + ], ] cases.each do |name, args, expected| url, pairs = args actual = Util.append_args(url, pairs) msg = "[#{name}] Expected: #{expected}, actual: #{actual}" + assert_equal(expected, actual, msg) end end def test_parse_query - assert_equal({ 'foo' => 'bar' }, Util.parse_query('foo=bar')) + assert_equal({"foo" => "bar"}, Util.parse_query("foo=bar")) end end end diff --git a/test/test_xrds.rb b/test/test_xrds.rb index 6c7708f..b96960f 100644 --- a/test/test_xrds.rb +++ b/test/test_xrds.rb @@ -1,17 +1,17 @@ -require 'minitest/autorun' -require 'testutil' -require 'openid/yadis/xrds' +require_relative "test_helper" +require_relative "testutil" +require "openid/yadis/xrds" module OpenID module Yadis module XRDSTestMixin include TestDataMixin - XRD_FILE = 'valid-populated-xrds.xml' - NOXRDS_FILE = 'not-xrds.xml' - NOXRD_FILE = 'no-xrd.xml' + XRD_FILE = "valid-populated-xrds.xml" + NOXRDS_FILE = "not-xrds.xml" + NOXRD_FILE = "no-xrd.xml" - XRDS_DATA_DIR = TEST_DATA_DIR.join('test_xrds') + XRDS_DATA_DIR = TEST_DATA_DIR.join("test_xrds") def read_xrds_data_file(filename) read_data_file(filename, false, XRDS_DATA_DIR) @@ -24,7 +24,8 @@ class ParseXRDSTestCase < Minitest::Test # Check that parsing succeeds at all. def test_parse result = Yadis.parseXRDS(read_xrds_data_file(XRD_FILE)) - refute_nil result + + refute_nil(result) end def test_parse_no_xrds_xml @@ -36,15 +37,16 @@ def test_parse_no_xrds_xml def test_parse_no_xrds_empty assert_raises(Yadis::XRDSError) do - Yadis.parseXRDS('') + Yadis.parseXRDS("") end end def test_is_xrds isnt = REXML::Document.new(read_xrds_data_file(NOXRDS_FILE)) should_be = Yadis.parseXRDS(read_xrds_data_file(XRD_FILE)) - assert_equal false, Yadis.is_xrds?(isnt) - assert Yadis.is_xrds?(should_be) + + assert_equal(false, Yadis.is_xrds?(isnt)) + assert(Yadis.is_xrds?(should_be)) end end @@ -55,9 +57,10 @@ class GetYadisXRDTestCase < Minitest::Test def test_get_xrd doc = Yadis.parseXRDS(read_xrds_data_file(XRD_FILE)) result = Yadis.get_yadis_xrd(doc) - refute_nil result - assert_equal 'XRD', result.name - assert_equal Yadis::XRD_NS_2_0, result.namespace + + refute_nil(result) + assert_equal("XRD", result.name) + assert_equal(Yadis::XRD_NS_2_0, result.namespace) end def test_no_xrd @@ -76,11 +79,12 @@ def test_get_xrd doc = Yadis.parseXRDS(read_xrds_data_file(XRD_FILE)) count = 0 result = Yadis.each_service(doc) do |e| - assert_equal 'Service', e.name + assert_equal("Service", e.name) count += 1 end - refute_nil result - assert_equal 5, count + + refute_nil(result) + assert_equal(5, count) end def test_no_xrd @@ -92,14 +96,15 @@ def test_no_xrd end def test_equal_j3h - doc = Yadis.parseXRDS(read_xrds_data_file('=j3h.2007.11.14.xrds')) + doc = Yadis.parseXRDS(read_xrds_data_file("=j3h.2007.11.14.xrds")) count = 0 result = Yadis.each_service(doc) do |e| - assert_equal 'Service', e.name + assert_equal("Service", e.name) count += 1 end - refute_nil result - assert_equal 2, count + + refute_nil(result) + assert_equal(2, count) end end @@ -120,22 +125,26 @@ class ExpandServiceTestCase < Minitest::Test def test_expand_service service_element = REXML::Document.new(@@service_xml).root result = Yadis.expand_service(service_element) - assert_equal 3, result.length + + assert_equal(3, result.length) types, uri, result_element = result[0] - assert_same service_element, result_element - assert_equal 'http://0.invalid/', uri - assert_equal ['urn://foo', 'urn://bar'], types + + assert_same(service_element, result_element) + assert_equal("http://0.invalid/", uri) + assert_equal(["urn://foo", "urn://bar"], types) types, uri, result_element = result[1] - assert_equal 'http://1.invalid/', uri + + assert_equal("http://1.invalid/", uri) types, uri, result_element = result[2] - assert_equal 'http://2.invalid/', uri + + assert_equal("http://2.invalid/", uri) end end class PrioSortTestCase < Minitest::Test def new_uri(priority) - e = REXML::Element.new('URI') - e.add_attribute('priority', priority.to_s) unless e.nil? + e = REXML::Element.new("URI") + e.add_attribute("priority", priority.to_s) unless e.nil? e end @@ -144,13 +153,14 @@ def test_sorting e7 = new_uri(7), e1 = new_uri(1), e0 = new_uri(nil), - e2 = new_uri(2) + e2 = new_uri(2), ] sorted = Yadis.prio_sort(l) - assert_same e0, sorted[0] - assert_same e1, sorted[1] - assert_same e2, sorted[2] - assert_same e7, sorted[3] + + assert_same(e0, sorted[0]) + assert_same(e1, sorted[1]) + assert_same(e2, sorted[2]) + assert_same(e7, sorted[3]) end end @@ -158,8 +168,8 @@ class GetCanonicalIDTestCase < Minitest::Test include XRDSTestMixin def test_multisegment_xri - xmldoc = Yadis.parseXRDS(read_xrds_data_file('subsegments.xrds')) - Yadis.get_canonical_id('xri://=nishitani*masaki', xmldoc) + xmldoc = Yadis.parseXRDS(read_xrds_data_file("subsegments.xrds")) + Yadis.get_canonical_id("xri://=nishitani*masaki", xmldoc) end end end diff --git a/test/test_xri.rb b/test/test_xri.rb index e3d5517..00483e0 100644 --- a/test/test_xri.rb +++ b/test/test_xri.rb @@ -1,42 +1,50 @@ -require 'minitest/autorun' -require 'openid/yadis/xri' +require_relative "test_helper" +require "openid/yadis/xri" module OpenID module Yadis class XriDiscoveryTestCase < Minitest::Test def test_isXRI? - assert_equal(:xri, XRI.identifier_scheme('=john.smith')) - assert_equal(:xri, XRI.identifier_scheme('@smiths/john')) - assert_equal(:xri, XRI.identifier_scheme('xri://=john')) - assert_equal(:xri, XRI.identifier_scheme('@ootao*test1')) - assert_equal(:uri, XRI.identifier_scheme('smoker.myopenid.com')) - assert_equal(:uri, XRI.identifier_scheme('http://smoker.myopenid.com')) - assert_equal(:uri, XRI.identifier_scheme('https://smoker.myopenid.com')) + assert_equal(:xri, XRI.identifier_scheme("=john.smith")) + assert_equal(:xri, XRI.identifier_scheme("@smiths/john")) + assert_equal(:xri, XRI.identifier_scheme("xri://=john")) + assert_equal(:xri, XRI.identifier_scheme("@ootao*test1")) + assert_equal(:uri, XRI.identifier_scheme("smoker.myopenid.com")) + assert_equal(:uri, XRI.identifier_scheme("http://smoker.myopenid.com")) + assert_equal(:uri, XRI.identifier_scheme("https://smoker.myopenid.com")) end end class XriEscapingTestCase < Minitest::Test def test_escaping_percents - assert_equal('@example/abc%252Fd/ef', - XRI.escape_for_iri('@example/abc%2Fd/ef')) + assert_equal( + "@example/abc%252Fd/ef", + XRI.escape_for_iri("@example/abc%2Fd/ef"), + ) end def test_escaping_xref # no escapes - assert_equal('@example/foo/(@bar)', - XRI.escape_for_iri('@example/foo/(@bar)')) + assert_equal( + "@example/foo/(@bar)", + XRI.escape_for_iri("@example/foo/(@bar)"), + ) # escape slashes - assert_equal('@example/foo/(@bar%2Fbaz)', - XRI.escape_for_iri('@example/foo/(@bar/baz)')) + assert_equal( + "@example/foo/(@bar%2Fbaz)", + XRI.escape_for_iri("@example/foo/(@bar/baz)"), + ) # escape query ? and fragment # - assert_equal('@example/foo/(@baz%3Fp=q%23r)?i=j#k', - XRI.escape_for_iri('@example/foo/(@baz?p=q#r)?i=j#k')) + assert_equal( + "@example/foo/(@baz%3Fp=q%23r)?i=j#k", + XRI.escape_for_iri("@example/foo/(@baz?p=q#r)?i=j#k"), + ) end end class XriTransformationTestCase < Minitest::Test def test_to_iri_normal - assert_equal('xri://@example', XRI.to_iri_normal('@example')) + assert_equal("xri://@example", XRI.to_iri_normal("@example")) end # iri_to_url: # various ucschar to hex diff --git a/test/test_xrires.rb b/test/test_xrires.rb index f7b7b4d..431885c 100644 --- a/test/test_xrires.rb +++ b/test/test_xrires.rb @@ -1,5 +1,5 @@ -require 'minitest/autorun' -require 'openid/yadis/xrires' +require_relative "test_helper" +require "openid/yadis/xrires" module OpenID module Yadis @@ -17,56 +17,56 @@ def fetch(_url, _body = nil, _headers = nil, _redirect_limit = nil) class ProxyQueryTestCase < Minitest::Test def setup - @proxy_url = 'http://xri.example.com/' + @proxy_url = "http://xri.example.com/" @proxy = XRI::ProxyResolver.new(@proxy_url) - @servicetype = 'xri://+i-service*(+forwarding)*($v*1.0)' - @servicetype_enc = 'xri%3A%2F%2F%2Bi-service%2A%28%2Bforwarding%29%2A%28%24v%2A1.0%29' + @servicetype = "xri://+i-service*(+forwarding)*($v*1.0)" + @servicetype_enc = "xri%3A%2F%2F%2Bi-service%2A%28%2Bforwarding%29%2A%28%24v%2A1.0%29" end def test_proxy_url st = @servicetype ste = @servicetype_enc - args_esc = ['_xrd_r=application%2Fxrds%2Bxml', "_xrd_t=#{ste}"] - pqu = @proxy.method('query_url') + args_esc = ["_xrd_r=application%2Fxrds%2Bxml", "_xrd_t=#{ste}"] + pqu = @proxy.method(:query_url) h = @proxy_url - assert_match h + '=foo?', pqu.call('=foo', st) - assert_match args_esc[0], pqu.call('=foo', st) - assert_match args_esc[1], pqu.call('=foo', st) + assert_match(h + "=foo?", pqu.call("=foo", st)) + assert_match(args_esc[0], pqu.call("=foo", st)) + assert_match(args_esc[1], pqu.call("=foo", st)) - assert_match h + '=foo/bar?baz&', pqu.call('=foo/bar?baz', st) - assert_match args_esc[0], pqu.call('=foo/bar?baz', st) - assert_match args_esc[1], pqu.call('=foo/bar?baz', st) + assert_match(h + "=foo/bar?baz&", pqu.call("=foo/bar?baz", st)) + assert_match(args_esc[0], pqu.call("=foo/bar?baz", st)) + assert_match(args_esc[1], pqu.call("=foo/bar?baz", st)) - assert_match h + '=foo/bar?baz=quux&', pqu.call('=foo/bar?baz=quux', st) - assert_match args_esc[0], pqu.call('=foo/bar?baz=quux', st) - assert_match args_esc[1], pqu.call('=foo/bar?baz=quux', st) + assert_match(h + "=foo/bar?baz=quux&", pqu.call("=foo/bar?baz=quux", st)) + assert_match(args_esc[0], pqu.call("=foo/bar?baz=quux", st)) + assert_match(args_esc[1], pqu.call("=foo/bar?baz=quux", st)) - assert_match h + '=foo/bar?mi=fa&so=la&', pqu.call('=foo/bar?mi=fa&so=la', st) - assert_match args_esc[0], pqu.call('=foo/bar?mi=fa&so=la', st) - assert_match args_esc[1], pqu.call('=foo/bar?mi=fa&so=la', st) + assert_match(h + "=foo/bar?mi=fa&so=la&", pqu.call("=foo/bar?mi=fa&so=la", st)) + assert_match(args_esc[0], pqu.call("=foo/bar?mi=fa&so=la", st)) + assert_match(args_esc[1], pqu.call("=foo/bar?mi=fa&so=la", st)) # With no service endpoint selection. - args_esc = '_xrd_r=application%2Fxrds%2Bxml%3Bsep%3Dfalse' + args_esc = "_xrd_r=application%2Fxrds%2Bxml%3Bsep%3Dfalse" - assert_match h + '=foo?', pqu.call('=foo', nil) - assert_match args_esc, pqu.call('=foo', nil) + assert_match(h + "=foo?", pqu.call("=foo", nil)) + assert_match(args_esc, pqu.call("=foo", nil)) end def test_proxy_url_qmarks st = @servicetype ste = @servicetype_enc - args_esc = ['_xrd_r=application%2Fxrds%2Bxml', "_xrd_t=#{ste}"] - pqu = @proxy.method('query_url') + args_esc = ["_xrd_r=application%2Fxrds%2Bxml", "_xrd_t=#{ste}"] + pqu = @proxy.method(:query_url) h = @proxy_url - assert_match h + '=foo/bar??', pqu.call('=foo/bar?', st) - assert_match args_esc[0], pqu.call('=foo/bar?', st) - assert_match args_esc[1], pqu.call('=foo/bar?', st) + assert_match(h + "=foo/bar??", pqu.call("=foo/bar?", st)) + assert_match(args_esc[0], pqu.call("=foo/bar?", st)) + assert_match(args_esc[1], pqu.call("=foo/bar?", st)) - assert_match h + '=foo/bar????', pqu.call('=foo/bar???', st) - assert_match args_esc[0], pqu.call('=foo/bar???', st) - assert_match args_esc[1], pqu.call('=foo/bar???', st) + assert_match(h + "=foo/bar????", pqu.call("=foo/bar???", st)) + assert_match(args_esc[0], pqu.call("=foo/bar???", st)) + assert_match(args_esc[1], pqu.call("=foo/bar???", st)) end end end diff --git a/test/test_yadis_discovery.rb b/test/test_yadis_discovery.rb index 6727ac7..b97ba9a 100644 --- a/test/test_yadis_discovery.rb +++ b/test/test_yadis_discovery.rb @@ -1,10 +1,10 @@ -require 'minitest/autorun' -require 'testutil' -require 'uri' -require 'openid/yadis/discovery' -require 'openid/fetchers' -require 'openid/util' -require 'discoverdata' +require_relative "test_helper" +require_relative "testutil" +require "uri" +require "openid/yadis/discovery" +require "openid/fetchers" +require "openid/util" +require "discoverdata" module OpenID module YadisDiscovery @@ -18,14 +18,17 @@ def self.mkResponse(data) headers_str, body = data.split("\n\n", 2) headers = {} headers_str.split("\n", -1).each do |line| - k, v = line.split(':', 2) + k, v = line.split(":", 2) k = k.strip.downcase v = v.strip headers[k] = v end status = status_mo[0][0].to_i - HTTPResponse._from_raw_data(status, body, - headers) + HTTPResponse._from_raw_data( + status, + body, + headers, + ) end class TestFetcher @@ -44,13 +47,17 @@ def fetch(url, _headers, _body, _redirect_limit = nil) begin data = generateSample(path, @base_url) rescue ArgumentError - return HTTPResponse._from_raw_data(404, '', {}, - current_url) + return HTTPResponse._from_raw_data( + 404, + "", + {}, + current_url, + ) end response = YadisDiscovery.mkResponse(data) if %w[301 302 303 307].member?(response.code) - current_url = response['location'] + current_url = response["location"] else response.final_url = current_url return response @@ -66,12 +73,12 @@ def initialize def fetch(uri, headers = nil, _body = nil, _redirect_limit = nil) @count += 1 - return HTTPResponse._from_raw_data(404, '', {}, uri) unless @count == 1 + return HTTPResponse._from_raw_data(404, "", {}, uri) unless @count == 1 headers = { - 'X-XRDS-Location'.downcase => 'http://unittest/404' + "X-XRDS-Location".downcase => "http://unittest/404", } - HTTPResponse._from_raw_data(200, '', headers, uri) + HTTPResponse._from_raw_data(200, "", headers, uri) end end @@ -79,7 +86,7 @@ class TestSecondGet < Minitest::Test include FetcherMixin def test_404 - uri = 'http://something.unittest/' + uri = "http://something.unittest/" assert_raises(DiscoveryFailure) do with_fetcher(MockFetcher.new) { Yadis.discover(uri) } end @@ -91,7 +98,7 @@ class DiscoveryTestCase include FetcherMixin def initialize(testcase, input_name, id_name, result_name, success) - @base_url = 'http://invalid.unittest/' + @base_url = "http://invalid.unittest/" @testcase = testcase @input_name = input_name @id_name = id_name @@ -100,11 +107,13 @@ def initialize(testcase, input_name, id_name, result_name, success) end def setup - @input_url, @expected = generateResult(@base_url, - @input_name, - @id_name, - @result_name, - @success) + @input_url, @expected = generateResult( + @base_url, + @input_name, + @id_name, + @result_name, + @success, + ) end def do_discovery @@ -116,20 +125,29 @@ def do_discovery def runCustomTest setup - if @expected.respond_to?('ancestors') and @expected.ancestors.member?(DiscoveryFailure) + if @expected.respond_to?(:ancestors) and @expected.ancestors.member?(DiscoveryFailure) @testcase.assert_raises(DiscoveryFailure) do do_discovery end else result = do_discovery + @testcase.assert_equal(@input_url, result.request_uri) - msg = format('Identity URL mismatch: actual = %s, expected = %s', - result.normalized_uri, @expected.normalized_uri) + msg = format( + "Identity URL mismatch: actual = %s, expected = %s", + result.normalized_uri, + @expected.normalized_uri, + ) + @testcase.assert_equal(@expected.normalized_uri, result.normalized_uri, msg) - msg = format('Content mismatch: actual = %s, expected = %s', - result.response_text, @expected.response_text) + msg = format( + "Content mismatch: actual = %s, expected = %s", + result.response_text, + @expected.response_text, + ) + @testcase.assert_equal(@expected.response_text, result.response_text, msg) expected_keys = @expected.instance_variables @@ -143,6 +161,7 @@ def runCustomTest @expected.instance_variables.each do |k| exp_v = @expected.instance_variable_get(k) act_v = result.instance_variable_get(k) + @testcase.assert_equal(act_v, exp_v, [k, exp_v, act_v]) end end @@ -151,13 +170,13 @@ def runCustomTest class NoContentTypeFetcher def fetch(_url, _body = nil, _headers = nil, _redirect_limit = nil) - OpenID::HTTPResponse._from_raw_data(200, '', {}, nil) + OpenID::HTTPResponse._from_raw_data(200, "", {}, nil) end end class BlankContentTypeFetcher def fetch(_url, _body = nil, _headers = nil, _redirect_limit = nil) - OpenID::HTTPResponse._from_raw_data(200, '', { 'Content-Type' => '' }, nil) + OpenID::HTTPResponse._from_raw_data(200, "", {"Content-Type" => ""}, nil) end end @@ -172,40 +191,42 @@ def test_yadis_discovery end def test_is_xrds_yadis_location - result = Yadis::DiscoveryResult.new('http://request.uri/') - result.normalized_uri = 'http://normalized/' - result.xrds_uri = 'http://normalized/xrds' + result = Yadis::DiscoveryResult.new("http://request.uri/") + result.normalized_uri = "http://normalized/" + result.xrds_uri = "http://normalized/xrds" assert(result.is_xrds) end def test_is_xrds_content_type - result = Yadis::DiscoveryResult.new('http://request.uri/') - result.normalized_uri = result.xrds_uri = 'http://normalized/' + result = Yadis::DiscoveryResult.new("http://request.uri/") + result.normalized_uri = result.xrds_uri = "http://normalized/" result.content_type = Yadis::YADIS_CONTENT_TYPE assert(result.is_xrds) end def test_is_xrds_neither - result = Yadis::DiscoveryResult.new('http://request.uri/') - result.normalized_uri = result.xrds_uri = 'http://normalized/' - result.content_type = 'another/content-type' + result = Yadis::DiscoveryResult.new("http://request.uri/") + result.normalized_uri = result.xrds_uri = "http://normalized/" + result.content_type = "another/content-type" assert(!result.is_xrds) end def test_no_content_type with_fetcher(NoContentTypeFetcher.new) do - result = Yadis.discover('http://bogus') + result = Yadis.discover("http://bogus") + assert_nil(result.content_type) end end def test_blank_content_type with_fetcher(BlankContentTypeFetcher.new) do - result = Yadis.discover('http://bogus') - assert_equal('', result.content_type) + result = Yadis.discover("http://bogus") + + assert_equal("", result.content_type) end end end