diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2f8b6a92..0014a2f9 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -5,7 +5,7 @@ on: pull_request: push: branches: - - master + - main - spec_live jobs: @@ -13,26 +13,25 @@ jobs: name: Test and lint runs-on: ubuntu-latest strategy: + fail-fast: false matrix: ruby: - - "2.7" - - "3.0" - "3.1" - "3.2" - "3.3" - "3.4" - "jruby-9.4" + - "jruby-10.0" steps: - name: Checkout code - uses: zendesk/checkout@v2 + uses: actions/checkout@v5 - name: Set up Ruby - uses: zendesk/setup-ruby@v1 + uses: ruby/setup-ruby@v1 with: bundler-cache: true ruby-version: ${{ matrix.ruby }} - name: Test and Lint run: | - bundle install bundle exec rake bundle exec rubocop spec-live: @@ -45,15 +44,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout code - uses: zendesk/checkout@v2 + uses: actions/checkout@v5 - name: Set up Ruby - uses: zendesk/setup-ruby@v1 + uses: ruby/setup-ruby@v1 with: bundler-cache: true - ruby-version: 3.1 - name: spec:live run: | - bundle install bundle exec rake clean_live set_ci_credentials spec:live || bundle exec rake clean_live && bundle exec rspec spec/live --only-failures diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index c48177ff..58264186 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -15,7 +15,7 @@ jobs: id-token: write contents: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: diff --git a/.gitignore b/.gitignore index e34dc540..e8366c3b 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,5 @@ spec/fixtures/cassettes spec/fixtures/credentials.yml coverage/** .yardoc/** -Gemfile.lock -.ruby-version vendor/bundle/** pkg/** diff --git a/.rspec b/.rspec index 4e1e0d2f..09127182 100644 --- a/.rspec +++ b/.rspec @@ -1 +1,2 @@ --color +--order random diff --git a/.rubocop.yml b/.rubocop.yml index 2a3baf2d..286003c4 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,18 +1,15 @@ inherit_from: .rubocop_todo.yml AllCops: - TargetRubyVersion: 2.7 + TargetRubyVersion: 3.1 DisplayCopNames: true + SuggestExtensions: false + NewCops: enable Exclude: - .git/**/* - spec/core/middleware/response/sanitize_response_spec.rb - vendor/**/* -# Prevents Ruby 3.1 incompatibility error. You can enable this cop when Ruby 2.7 support is dropped. -# See https://github.com/rubocop/rubocop/issues/10258 -Layout/BlockAlignment: - Enabled: false - # Align ends correctly. Layout/EndAlignment: EnforcedStyleAlignWith: variable @@ -46,3 +43,16 @@ Metrics: Style/DoubleNegation: Enabled: false + +Style/OptionalBooleanParameter: + Enabled: false + +Naming/PredicateMethod: + Enabled: false + +Style/HashEachMethods: + Enabled: false + +Style/RedundantFetchBlock: + Exclude: + - spec/core/lru_cache_spec.rb diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 834e4ac8..eb88916d 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,42 +1,29 @@ # This configuration was generated by # `rubocop --auto-gen-config` -# on 2019-03-12 16:33:35 -0700 using RuboCop version 0.64.0. +# on 2025-08-12 17:05:00 UTC using RuboCop version 1.79.2. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new # versions of RuboCop, may require this file to be generated again. -# Offense count: 4 -# Cop supports --auto-correct. -# Configuration parameters: TreatCommentsAsGroupSeparators, Include. +# Offense count: 5 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: TreatCommentsAsGroupSeparators, ConsiderPunctuation, Include. # Include: **/*.gemfile, **/Gemfile, **/gems.rb Bundler/OrderedGems: Exclude: - 'Gemfile' # Offense count: 1 -# Cop supports --auto-correct. -# Configuration parameters: TreatCommentsAsGroupSeparators, Include. +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: TreatCommentsAsGroupSeparators, ConsiderPunctuation, Include. # Include: **/*.gemspec Gemspec/OrderedDependencies: Exclude: - 'zendesk_api.gemspec' -# Offense count: 1 -# Cop supports --auto-correct. -# Configuration parameters: EnforcedHashRocketStyle, EnforcedColonStyle, EnforcedLastArgumentHashStyle. -# SupportedHashRocketStyles: key, separator, table -# SupportedColonStyles: key, separator, table -# SupportedLastArgumentHashStyles: always_inspect, always_ignore, ignore_implicit, ignore_explicit -Layout/HashAlignment: - Exclude: - - 'spec/live/user_view_spec.rb' - -Layout/LineLength: - Max: 160 - -# Offense count: 17 -# Cop supports --auto-correct. +# Offense count: 19 +# This cop supports safe autocorrection (--autocorrect). # Configuration parameters: EnforcedStyle. # SupportedStyles: leading, trailing Layout/DotPosition: @@ -47,7 +34,7 @@ Layout/DotPosition: - 'spec/core/middleware/request/retry_spec.rb' # Offense count: 14 -# Cop supports --auto-correct. +# This cop supports safe autocorrection (--autocorrect). Layout/EmptyLineAfterGuardClause: Exclude: - 'lib/zendesk_api/actions.rb' @@ -58,8 +45,18 @@ Layout/EmptyLineAfterGuardClause: - 'lib/zendesk_api/sideloading.rb' - 'spec/live/ticket_spec.rb' -# Offense count: 5 -# Cop supports --auto-correct. +# Offense count: 1 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: AllowMultipleStyles, EnforcedHashRocketStyle, EnforcedColonStyle, EnforcedLastArgumentHashStyle. +# SupportedHashRocketStyles: key, separator, table +# SupportedColonStyles: key, separator, table +# SupportedLastArgumentHashStyles: always_inspect, always_ignore, ignore_implicit, ignore_explicit +Layout/HashAlignment: + Exclude: + - 'spec/live/user_view_spec.rb' + +# Offense count: 8 +# This cop supports safe autocorrection (--autocorrect). # Configuration parameters: EnforcedStyle. # SupportedStyles: symmetrical, new_line, same_line Layout/MultilineMethodCallBraceLayout: @@ -68,7 +65,7 @@ Layout/MultilineMethodCallBraceLayout: - 'spec/core/collection_spec.rb' # Offense count: 3 -# Cop supports --auto-correct. +# This cop supports safe autocorrection (--autocorrect). # Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces. # SupportedStyles: space, no_space # SupportedStylesForEmptyBraces: space, no_space @@ -79,7 +76,7 @@ Layout/SpaceBeforeBlockBraces: - 'spec/core/resource_spec.rb' # Offense count: 2 -# Cop supports --auto-correct. +# This cop supports safe autocorrection (--autocorrect). # Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces, SpaceBeforeBlockParameters. # SupportedStyles: space, no_space # SupportedStylesForEmptyBraces: space, no_space @@ -87,7 +84,8 @@ Layout/SpaceInsideBlockBraces: Exclude: - 'lib/zendesk_api/association.rb' -# Offense count: 11 +# Offense count: 9 +# This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: AllowSafeAssignment. Lint/AssignmentInCondition: Exclude: @@ -95,90 +93,106 @@ Lint/AssignmentInCondition: - 'lib/zendesk_api/association.rb' - 'lib/zendesk_api/associations.rb' - 'lib/zendesk_api/client.rb' - - 'lib/zendesk_api/collection.rb' - 'lib/zendesk_api/resources.rb' # Offense count: 1 +# This cop supports unsafe autocorrection (--autocorrect-all). Lint/BooleanSymbol: Exclude: - 'spec/live/target_spec.rb' -# Offense count: 1 +# Offense count: 2 +# Configuration parameters: AllowedMethods. +# AllowedMethods: enums +Lint/ConstantDefinitionInBlock: + Exclude: + - 'spec/core/collection_spec.rb' + - 'spec/core/resource_spec.rb' + +# Offense count: 2 Lint/DuplicateMethods: Exclude: - 'lib/zendesk_api/resource.rb' -# Offense count: 3 -Lint/SuppressedException: +# Offense count: 1 +# Configuration parameters: AllowComments, AllowEmptyLambdas. +Lint/EmptyBlock: Exclude: - - 'Rakefile' - 'spec/core/collection_spec.rb' - - 'spec/core/spec_helper.rb' + +# Offense count: 2 +# Configuration parameters: AllowComments. +Lint/EmptyClass: + Exclude: + - 'spec/core/data_namespace_spec.rb' + - 'spec/fixtures/test_resources.rb' # Offense count: 1 -# Cop supports --auto-correct. +# This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: EnforcedStyle. -# SupportedStyles: runtime_error, standard_error +# SupportedStyles: standard_error, runtime_error Lint/InheritException: Exclude: - 'spec/core/collection_spec.rb' -# Offense count: 1 -# Configuration parameters: IgnoreImplicitReferences. -Lint/ShadowedArgument: - Exclude: - - 'lib/zendesk_api/association.rb' - -# Offense count: 6 -Lint/ShadowingOuterLocalVariable: +# Offense count: 2 +# Configuration parameters: AllowedParentClasses. +Lint/MissingSuper: Exclude: - - 'lib/zendesk_api/association.rb' - - 'lib/zendesk_api/middleware/response/callback.rb' - - 'lib/zendesk_api/middleware/response/logger.rb' - - 'lib/zendesk_api/middleware/response/parse_iso_dates.rb' - - 'spec/live/ticket_spec.rb' - - 'util/resource_handler.rb' + - 'lib/zendesk_api/middleware/request/etag_cache.rb' + - 'lib/zendesk_api/resource.rb' # Offense count: 10 -# Cop supports --auto-correct. +# This cop supports safe autocorrection (--autocorrect). Lint/RedundantStringCoercion: Exclude: - 'lib/zendesk_api/middleware/response/logger.rb' - 'spec/live/macro_spec.rb' - 'spec/macros/resource_macros.rb' +# Offense count: 1 +# Configuration parameters: IgnoreImplicitReferences. +Lint/ShadowedArgument: + Exclude: + - 'lib/zendesk_api/association.rb' + +# Offense count: 1 +# Configuration parameters: AllowComments, AllowNil. +Lint/SuppressedException: + Exclude: + - 'spec/core/collection_spec.rb' + # Offense count: 4 -# Cop supports --auto-correct. -# Configuration parameters: IgnoreEmptyBlocks, AllowUnusedKeywordArguments. +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: AutoCorrect, IgnoreEmptyBlocks, AllowUnusedKeywordArguments. Lint/UnusedBlockArgument: Exclude: - 'lib/zendesk_api/track_changes.rb' - 'spec/core/collection_spec.rb' -# Offense count: 3 -# Cop supports --auto-correct. -# Configuration parameters: AllowUnusedKeywordArguments, IgnoreEmptyMethods. +# Offense count: 1 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: AutoCorrect, AllowUnusedKeywordArguments, IgnoreEmptyMethods, IgnoreNotImplementedMethods, NotImplementedExceptions. +# NotImplementedExceptions: NotImplementedError Lint/UnusedMethodArgument: Exclude: - - 'lib/zendesk_api/client.rb' - - 'lib/zendesk_api/collection.rb' - 'spec/fixtures/test_resources.rb' # Offense count: 1 -# Configuration parameters: CheckForMethodsWithNoSideEffects. +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: AutoCorrect, CheckForMethodsWithNoSideEffects. Lint/Void: Exclude: - 'lib/zendesk_api/middleware/request/encode_json.rb' -# Offense count: 4 +# Offense count: 3 Naming/AccessorMethodName: Exclude: - - 'lib/zendesk_api/collection.rb' - 'lib/zendesk_api/lru_cache.rb' - - 'lib/zendesk_api/resources.rb' - 'lib/zendesk_api/pagination.rb' # Offense count: 1 +# This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: EnforcedStyleForLeadingUnderscores. # SupportedStylesForLeadingUnderscores: disallowed, required, optional Naming/MemoizedInstanceVariableName: @@ -186,46 +200,45 @@ Naming/MemoizedInstanceVariableName: - 'lib/zendesk_api/collection.rb' # Offense count: 1 -# Configuration parameters: NamePrefix, NamePrefixBlacklist, NameWhitelist, MethodDefinitionMacros. -# NamePrefix: is_, has_, have_ -# NamePrefixBlacklist: is_, has_, have_ -# NameWhitelist: is_a? +# Configuration parameters: NamePrefix, ForbiddenPrefixes, AllowedMethods, MethodDefinitionMacros, UseSorbetSigs. +# NamePrefix: is_, has_, have_, does_ +# ForbiddenPrefixes: is_, has_, have_, does_ +# AllowedMethods: is_a? # MethodDefinitionMacros: define_method, define_singleton_method -Naming/PredicateName: +Naming/PredicatePrefix: Exclude: - 'spec/**/*' - 'lib/zendesk_api/associations.rb' -# Offense count: 1 -# Cop supports --auto-correct. -Security/YAMLLoad: - Exclude: - - 'spec/core/spec_helper.rb' - -# Offense count: 13 -# Cop supports --auto-correct. +# Offense count: 11 +# This cop supports safe autocorrection (--autocorrect). # Configuration parameters: EnforcedStyle. # SupportedStyles: prefer_alias, prefer_alias_method Style/Alias: Exclude: - - 'lib/zendesk_api/collection.rb' - 'lib/zendesk_api/resource.rb' - 'lib/zendesk_api/resources.rb' - 'lib/zendesk_api/track_changes.rb' # Offense count: 1 -# Cop supports --auto-correct. +# This cop supports unsafe autocorrection (--autocorrect-all). +Style/ArrayIntersect: + Exclude: + - 'lib/zendesk_api/search.rb' + +# Offense count: 1 +# This cop supports safe autocorrection (--autocorrect). Style/BlockComments: Exclude: - 'spec/core/trackie_spec.rb' -# Offense count: 9 -# Cop supports --auto-correct. -# Configuration parameters: EnforcedStyle, ProceduralMethods, FunctionalMethods, IgnoredMethods. -# SupportedStyles: line_count_based, semantic, braces_for_chaining +# Offense count: 10 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: EnforcedStyle, ProceduralMethods, FunctionalMethods, AllowedMethods, AllowedPatterns, AllowBracesOnProceduralOneLiners, BracesRequiredMethods. +# SupportedStyles: line_count_based, semantic, braces_for_chaining, always_braces # ProceduralMethods: benchmark, bm, bmbm, create, each_with_object, measure, new, realtime, tap, with_object # FunctionalMethods: let, let!, subject, watch -# IgnoredMethods: lambda, proc, it +# AllowedMethods: lambda, proc, it Style/BlockDelimiters: Exclude: - 'lib/zendesk_api/association.rb' @@ -235,29 +248,12 @@ Style/BlockDelimiters: - 'spec/core/read_resource_spec.rb' - 'spec/core/resource_spec.rb' -# Offense count: 18 -# Cop supports --auto-correct. -# Configuration parameters: EnforcedStyle. -# SupportedStyles: braces, no_braces, context_dependent -Style/BracesAroundHashParameters: - Exclude: - - 'spec/core/collection_spec.rb' - - 'spec/core/middleware/request/etag_cache_spec.rb' - - 'spec/core/middleware/response/callback_spec.rb' - - 'spec/core/middleware/response/parse_iso_dates_spec.rb' - - 'spec/core/resource_spec.rb' - - 'spec/core/search_spec.rb' - - 'spec/live/app_spec.rb' - - 'spec/live/automation_spec.rb' - - 'spec/live/request_spec.rb' - - 'spec/live/ticket_spec.rb' - - 'spec/live/trigger_spec.rb' - - 'spec/live/view_spec.rb' - -# Offense count: 8 -# Cop supports --auto-correct. -# Configuration parameters: AutoCorrect, EnforcedStyle. +# Offense count: 9 +# This cop supports unsafe autocorrection (--autocorrect-all). +# Configuration parameters: EnforcedStyle, EnforcedStyleForClasses, EnforcedStyleForModules. # SupportedStyles: nested, compact +# SupportedStylesForClasses: ~, nested, compact +# SupportedStylesForModules: ~, nested, compact Style/ClassAndModuleChildren: Exclude: - 'lib/zendesk_api/lru_cache.rb' @@ -265,7 +261,8 @@ Style/ClassAndModuleChildren: - 'spec/core/resource_spec.rb' - 'spec/fixtures/test_resources.rb' -# Offense count: 94 +# Offense count: 99 +# Configuration parameters: AllowedConstants. Style/Documentation: Exclude: - 'spec/**/*' @@ -284,29 +281,22 @@ Style/Documentation: - 'util/resource_handler.rb' - 'util/verb_handler.rb' -# Offense count: 3 -Style/DoubleNegation: - Exclude: - - 'lib/zendesk_api/associations.rb' - - 'lib/zendesk_api/client.rb' - - 'spec/macros/resource_macros.rb' - # Offense count: 1 -# Cop supports --auto-correct. +# This cop supports safe autocorrection (--autocorrect). Style/EachWithObject: Exclude: - 'lib/zendesk_api/associations.rb' # Offense count: 1 -# Cop supports --auto-correct. +# This cop supports safe autocorrection (--autocorrect). Style/ExpandPathArguments: Exclude: - 'zendesk_api.gemspec' -# Offense count: 116 -# Cop supports --auto-correct. +# Offense count: 126 +# This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: EnforcedStyle. -# SupportedStyles: when_needed, always, never +# SupportedStyles: always, always_true, never Style/FrozenStringLiteralComment: Enabled: false @@ -316,8 +306,9 @@ Style/GlobalVars: Exclude: - 'spec/core/spec_helper.rb' -# Offense count: 13 -# Configuration parameters: MinBodyLength. +# Offense count: 11 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: MinBodyLength, AllowConsecutiveConditionals. Style/GuardClause: Exclude: - 'lib/zendesk_api/actions.rb' @@ -325,25 +316,24 @@ Style/GuardClause: - 'lib/zendesk_api/client.rb' - 'lib/zendesk_api/collection.rb' - 'lib/zendesk_api/middleware/request/upload.rb' - - 'lib/zendesk_api/middleware/response/deflate.rb' - - 'lib/zendesk_api/middleware/response/gzip.rb' - 'lib/zendesk_api/middleware/response/parse_json.rb' - 'lib/zendesk_api/resources.rb' -# Offense count: 892 -# Cop supports --auto-correct. -# Configuration parameters: EnforcedStyle, UseHashRocketsWithSymbolValues, PreferHashRocketsForNonAlnumEndingSymbols. +# Offense count: 865 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: EnforcedStyle, EnforcedShorthandSyntax, UseHashRocketsWithSymbolValues, PreferHashRocketsForNonAlnumEndingSymbols. # SupportedStyles: ruby19, hash_rockets, no_mixed_keys, ruby19_no_mixed_keys +# SupportedShorthandSyntax: always, never, either, consistent, either_consistent Style/HashSyntax: Enabled: false -# Offense count: 33 -# Cop supports --auto-correct. +# Offense count: 27 +# This cop supports safe autocorrection (--autocorrect). Style/IfUnlessModifier: Enabled: false # Offense count: 2 -# Cop supports --auto-correct. +# This cop supports safe autocorrection (--autocorrect). # Configuration parameters: EnforcedStyle. # SupportedStyles: line_count_dependent, lambda, literal Style/Lambda: @@ -351,18 +341,10 @@ Style/Lambda: - 'spec/core/middleware/request/encode_json_spec.rb' - 'spec/core/middleware/request/upload_spec.rb' -# Offense count: 3 -Style/MethodMissingSuper: - Exclude: - - 'lib/zendesk_api/client.rb' - - 'lib/zendesk_api/collection.rb' - - 'lib/zendesk_api/resource.rb' - -# Offense count: 2 +# Offense count: 1 Style/MissingRespondToMissing: Exclude: - 'lib/zendesk_api/client.rb' - - 'lib/zendesk_api/resource.rb' # Offense count: 1 Style/MixinUsage: @@ -370,13 +352,15 @@ Style/MixinUsage: - 'spec/core/spec_helper.rb' # Offense count: 4 -# Cop supports --auto-correct. +# This cop supports safe autocorrection (--autocorrect). Style/MultilineIfModifier: Exclude: - 'spec/macros/resource_macros.rb' # Offense count: 4 -# Cop supports --auto-correct. +# This cop supports unsafe autocorrection (--autocorrect-all). +# Configuration parameters: EnforcedStyle. +# SupportedStyles: literals, strict Style/MutableConstant: Exclude: - 'lib/zendesk_api/client.rb' @@ -385,43 +369,43 @@ Style/MutableConstant: - 'lib/zendesk_api/version.rb' # Offense count: 1 -# Cop supports --auto-correct. +# This cop supports safe autocorrection (--autocorrect). # Configuration parameters: EnforcedStyle. # SupportedStyles: both, prefix, postfix Style/NegatedIf: Exclude: - 'lib/zendesk_api/middleware/request/upload.rb' -# Offense count: 4 -# Cop supports --auto-correct. -# Configuration parameters: Strict. +# Offense count: 5 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: Strict, AllowedNumbers, AllowedPatterns. Style/NumericLiterals: MinDigits: 11 # Offense count: 2 -# Cop supports --auto-correct. -# Configuration parameters: AutoCorrect, EnforcedStyle, IgnoredMethods. +# This cop supports unsafe autocorrection (--autocorrect-all). +# Configuration parameters: EnforcedStyle, AllowedMethods, AllowedPatterns. # SupportedStyles: predicate, comparison Style/NumericPredicate: Exclude: - 'spec/**/*' - 'lib/zendesk_api/middleware/request/retry.rb' -# Offense count: 2 -# Cop supports --auto-correct. +# Offense count: 1 +# This cop supports safe autocorrection (--autocorrect). Style/ParallelAssignment: Exclude: - 'lib/zendesk_api/collection.rb' # Offense count: 1 -# Cop supports --auto-correct. +# This cop supports safe autocorrection (--autocorrect). # Configuration parameters: AllowSafeAssignment, AllowInMultilineConditions. Style/ParenthesesAroundCondition: Exclude: - 'lib/zendesk_api/collection.rb' -# Offense count: 22 -# Cop supports --auto-correct. +# Offense count: 21 +# This cop supports safe autocorrection (--autocorrect). # Configuration parameters: PreferredDelimiters. Style/PercentLiteralDelimiters: Exclude: @@ -438,15 +422,14 @@ Style/PercentLiteralDelimiters: - 'spec/live/tag_spec.rb' - 'spec/live/ticket_spec.rb' -# Offense count: 7 -# Cop supports --auto-correct. +# Offense count: 5 +# This cop supports safe autocorrection (--autocorrect). Style/PerlBackrefs: Exclude: - - 'lib/zendesk_api/collection.rb' - 'lib/zendesk_api/helpers.rb' # Offense count: 6 -# Cop supports --auto-correct. +# This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: EnforcedStyle. # SupportedStyles: short, verbose Style/PreferredHashMethods: @@ -456,29 +439,22 @@ Style/PreferredHashMethods: - 'lib/zendesk_api/track_changes.rb' # Offense count: 1 -# Cop supports --auto-correct. +# This cop supports safe autocorrection (--autocorrect). Style/Proc: Exclude: - 'spec/core/collection_spec.rb' # Offense count: 4 -# Cop supports --auto-correct. -# Configuration parameters: EnforcedStyle. +# This cop supports unsafe autocorrection (--autocorrect-all). +# Configuration parameters: EnforcedStyle, AllowedCompactTypes. # SupportedStyles: compact, exploded Style/RaiseArgs: Exclude: - 'lib/zendesk_api/association.rb' - 'lib/zendesk_api/middleware/response/raise_error.rb' -# Offense count: 1 -# Cop supports --auto-correct. -# Configuration parameters: AllowMultipleReturnValues. -Style/RedundantReturn: - Exclude: - - 'lib/zendesk_api/client.rb' - -# Offense count: 52 -# Cop supports --auto-correct. +# Offense count: 60 +# This cop supports safe autocorrection (--autocorrect). # Configuration parameters: EnforcedStyle, AllowInnerSlashes. # SupportedStyles: slashes, percent_r, mixed Style/RegexpLiteral: @@ -496,16 +472,10 @@ Style/RegexpLiteral: - 'spec/core/middleware/response/parse_json_spec.rb' - 'spec/core/resource_spec.rb' -# Offense count: 1 -# Cop supports --auto-correct. -Style/RescueModifier: - Exclude: - - 'lib/zendesk_api/resources.rb' - -# Offense count: 4 -# Cop supports --auto-correct. -# Configuration parameters: ConvertCodeThatCanStartToReturnNil, Whitelist. -# Whitelist: present?, blank?, presence, try, try! +# Offense count: 6 +# This cop supports unsafe autocorrection (--autocorrect-all). +# Configuration parameters: ConvertCodeThatCanStartToReturnNil, AllowedMethods, MaxChainLength. +# AllowedMethods: present?, blank?, presence, try, try! Style/SafeNavigation: Exclude: - 'lib/zendesk_api/association.rb' @@ -513,7 +483,7 @@ Style/SafeNavigation: - 'lib/zendesk_api/middleware/request/retry.rb' # Offense count: 5 -# Cop supports --auto-correct. +# This cop supports safe autocorrection (--autocorrect). # Configuration parameters: EnforcedStyle. # SupportedStyles: only_raise, only_fail, semantic Style/SignalException: @@ -524,31 +494,30 @@ Style/SignalException: - 'spec/live/ticket_spec.rb' # Offense count: 1 -# Cop supports --auto-correct. -# Configuration parameters: EnforcedStyle. -# SupportedStyles: use_perl_names, use_english_names +# This cop supports unsafe autocorrection (--autocorrect-all). +# Configuration parameters: RequireEnglish, EnforcedStyle. +# SupportedStyles: use_perl_names, use_english_names, use_builtin_english_names Style/SpecialGlobalVars: Exclude: - 'spec/core/spec_helper.rb' -# Offense count: 1412 -# Cop supports --auto-correct. +# Offense count: 1742 +# This cop supports safe autocorrection (--autocorrect). # Configuration parameters: EnforcedStyle, ConsistentQuotesInMultiline. # SupportedStyles: single_quotes, double_quotes Style/StringLiterals: Enabled: false -# Offense count: 8 -# Cop supports --auto-correct. +# Offense count: 5 +# This cop supports safe autocorrection (--autocorrect). # Configuration parameters: MinSize. # SupportedStyles: percent, brackets Style/SymbolArray: EnforcedStyle: brackets -# Offense count: 1 -# Cop supports --auto-correct. -# Configuration parameters: ExactNameMatch, AllowPredicates, AllowDSLWriters, IgnoreClassMethods, Whitelist. -# Whitelist: to_ary, to_a, to_c, to_enum, to_h, to_hash, to_i, to_int, to_io, to_open, to_path, to_proc, to_r, to_regexp, to_str, to_s, to_sym -Style/TrivialAccessors: - Exclude: - - 'lib/zendesk_api/resource.rb' +# Offense count: 61 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: AllowHeredoc, AllowURI, AllowQualifiedName, URISchemes, IgnoreCopDirectives, AllowedPatterns, SplitStrings. +# URISchemes: http, https +Layout/LineLength: + Max: 160 diff --git a/.ruby-version b/.ruby-version index 49cdd668..23887f6e 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.7.6 +3.1.7 diff --git a/CHANGELOG.md b/CHANGELOG.md index c7473040..fbfcb1ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # CHANGELOG +## Unreleased + +Drops support for Ruby 2.7 and 3.0. + ## v3.1.1 Adding CBP support to requested tickets (api/v2/users/:id/tickets/requested) diff --git a/Gemfile b/Gemfile index 969434e5..06fc3cd1 100644 --- a/Gemfile +++ b/Gemfile @@ -8,7 +8,7 @@ gem "yard" gem "json", ">= 2.3.0", platforms: :ruby gem "scrub_rb" -gem "rubocop", "~> 0.79.0", require: false # Handling of Ruby 2.7 syntax +gem "rubocop" group :test do gem "webmock" diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 00000000..eccc83aa --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,191 @@ +PATH + remote: . + specs: + zendesk_api (3.1.1) + faraday (> 2.0.0) + faraday-multipart + hashie (>= 3.5.2) + inflection + mini_mime + multipart-post (~> 2.0) + +GEM + remote: https://rubygems.org/ + specs: + actionpack (7.2.2.1) + actionview (= 7.2.2.1) + activesupport (= 7.2.2.1) + nokogiri (>= 1.8.5) + racc + rack (>= 2.2.4, < 3.2) + rack-session (>= 1.0.1) + rack-test (>= 0.6.3) + rails-dom-testing (~> 2.2) + rails-html-sanitizer (~> 1.6) + useragent (~> 0.16) + actionview (7.2.2.1) + activesupport (= 7.2.2.1) + builder (~> 3.1) + erubi (~> 1.11) + rails-dom-testing (~> 2.2) + rails-html-sanitizer (~> 1.6) + activesupport (7.2.2.1) + base64 + benchmark (>= 0.3) + bigdecimal + concurrent-ruby (~> 1.0, >= 1.3.1) + connection_pool (>= 2.2.5) + drb + i18n (>= 1.6, < 2) + logger (>= 1.4.2) + minitest (>= 5.1) + securerandom (>= 0.3) + tzinfo (~> 2.0, >= 2.0.5) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + ast (2.4.3) + base64 (0.3.0) + benchmark (0.4.1) + bigdecimal (3.2.2) + bigdecimal (3.2.2-java) + builder (3.3.0) + bump (0.10.0) + byebug (12.0.0) + concurrent-ruby (1.3.5) + connection_pool (2.5.3) + crack (1.0.0) + bigdecimal + rexml + crass (1.0.6) + diff-lcs (1.6.2) + drb (2.2.3) + erubi (1.13.1) + faraday (2.13.4) + faraday-net_http (>= 2.0, < 3.5) + json + logger + faraday-multipart (1.1.1) + multipart-post (~> 2.0) + faraday-net_http (3.4.1) + net-http (>= 0.5.0) + hashdiff (1.2.0) + hashie (5.0.0) + i18n (1.14.7) + concurrent-ruby (~> 1.0) + inflection (1.0.0) + jruby-openssl (0.15.5-java) + json (2.13.2) + language_server-protocol (3.17.0.5) + lint_roller (1.1.0) + logger (1.7.0) + loofah (2.24.1) + crass (~> 1.0.2) + nokogiri (>= 1.12.0) + mini_mime (1.1.5) + mini_portile2 (2.8.9) + minitest (5.25.5) + multipart-post (2.4.1) + net-http (0.6.0) + uri + nokogiri (1.18.9) + mini_portile2 (~> 2.8.2) + racc (~> 1.4) + nokogiri (1.18.9-java) + racc (~> 1.4) + parallel (1.27.0) + parser (3.3.9.0) + ast (~> 2.4.1) + racc + prism (1.4.0) + public_suffix (6.0.2) + racc (1.8.1) + racc (1.8.1-java) + rack (3.1.16) + rack-session (2.1.1) + base64 (>= 0.1.0) + rack (>= 3.0.0) + rack-test (2.2.0) + rack (>= 1.3) + rails-dom-testing (2.3.0) + activesupport (>= 5.0.0) + minitest + nokogiri (>= 1.6) + rails-html-sanitizer (1.6.2) + loofah (~> 2.21) + nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0) + rainbow (3.1.1) + rake (13.3.0) + regexp_parser (2.11.1) + rexml (3.4.1) + rspec (3.10.0) + rspec-core (~> 3.10.0) + rspec-expectations (~> 3.10.0) + rspec-mocks (~> 3.10.0) + rspec-core (3.10.1) + rspec-support (~> 3.10.0) + rspec-expectations (3.10.2) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-mocks (3.10.2) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-support (3.10.3) + rubocop (1.79.2) + json (~> 2.3) + language_server-protocol (~> 3.17.0.2) + lint_roller (~> 1.1.0) + parallel (~> 1.10) + parser (>= 3.3.0.2) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 2.9.3, < 3.0) + rubocop-ast (>= 1.46.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 2.4.0, < 4.0) + rubocop-ast (1.46.0) + parser (>= 3.3.7.2) + prism (~> 1.4) + ruby-progressbar (1.13.0) + scrub_rb (1.0.1) + securerandom (0.4.1) + tzinfo (2.0.6) + concurrent-ruby (~> 1.0) + unicode-display_width (3.1.4) + unicode-emoji (~> 4.0, >= 4.0.4) + unicode-emoji (4.0.4) + uri (1.0.3) + useragent (0.16.11) + vcr (6.3.1) + base64 + webmock (3.25.1) + addressable (>= 2.8.0) + crack (>= 0.3.2) + hashdiff (>= 0.4.0, < 2.0.0) + yard (0.9.37) + +PLATFORMS + java + ruby + +DEPENDENCIES + actionpack (>= 5.2.4.6) + addressable (>= 2.8.0) + bump + byebug + jruby-openssl + json (>= 2.3.0) + mini_mime + rake + rspec (= 3.10.0) + rspec-core (= 3.10.1) + rspec-expectations (= 3.10.2) + rspec-mocks (= 3.10.2) + rspec-support (= 3.10.3) + rubocop + scrub_rb + vcr (~> 6.0) + webmock + yard + zendesk_api! + +BUNDLED WITH + 2.5.23 diff --git a/Rakefile b/Rakefile index 80718147..89f66011 100644 --- a/Rakefile +++ b/Rakefile @@ -26,14 +26,10 @@ if defined?(RSpec) end task :set_ci_credentials do - File.open("spec/fixtures/credentials.yml", "w") do |f| - f.write( - File.read("spec/fixtures/credentials.yml.example") + File.write("spec/fixtures/credentials.yml", File.read("spec/fixtures/credentials.yml.example") .sub("your_username", ENV.fetch("SPEC_LIVE_USERNAME")) .sub("your_password", ENV.fetch("SPEC_LIVE_PASSWORD")) - .sub("your_zendesk_host", ENV.fetch("SPEC_LIVE_ZENDESK_HOST")) - ) - end + .sub("your_zendesk_host", ENV.fetch("SPEC_LIVE_ZENDESK_HOST"))) end desc 'Default: run specs.' @@ -52,7 +48,7 @@ rule(/^version:bump:.*/) do |t| version_parts[2] = 0 if index < 2 # remove patch for minor version_parts[1] = 0 if index < 1 # remove minor for major new_version = version_parts * '.' - File.open(file, 'w') { |f| f.write(version_file.sub(old_version, new_version)) } + File.write(file, version_file.sub(old_version, new_version)) sh "bundle && git add #{file} Gemfile.lock && git commit -m 'bump version to #{new_version}'" end diff --git a/lib/zendesk_api/actions.rb b/lib/zendesk_api/actions.rb index 1fa82346..91c712fe 100644 --- a/lib/zendesk_api/actions.rb +++ b/lib/zendesk_api/actions.rb @@ -43,8 +43,8 @@ def save!(options = {}) end # Saves, returning false if it fails and attaching the errors - def save(options = {}, &block) - save!(options, &block) + def save(options = {}, &) + save!(options, &) rescue ZendeskAPI::Error::RecordInvalid => e @errors = e.errors false @@ -127,8 +127,8 @@ def find!(client, options = {}) # Finds, returning nil if it fails # @param [Client] client The {Client} object to be used # @param [Hash] options Any additional GET parameters to be added - def find(client, options = {}, &block) - find!(client, options, &block) + def find(client, options = {}, &) + find!(client, options, &) rescue ZendeskAPI::Error::ClientError nil end @@ -157,8 +157,8 @@ def create!(client, attributes = {}, &block) # Creates, returning nil if it fails # @param [Client] client The {Client} object to be used # @param [Hash] options Any additional GET parameters to be added - def create(client, attributes = {}, &block) - create!(client, attributes, &block) + def create(client, attributes = {}, &) + create!(client, attributes, &) rescue ZendeskAPI::Error::ClientError nil end @@ -239,8 +239,8 @@ def destroy! end # Destroys, returning false on error. - def destroy(&block) - destroy!(&block) + def destroy(&) + destroy!(&) rescue ZendeskAPI::Error::ClientError false end @@ -249,15 +249,15 @@ module ClassMethod # Deletes a resource given the id passed in. # @param [Client] client The {Client} object to be used # @param [Hash] opts The optional parameters to pass. Defaults to {} - def destroy!(client, opts = {}, &block) - new(client, opts).destroy!(&block) + def destroy!(client, opts = {}, &) + new(client, opts).destroy!(&) true end # Destroys, returning false on error. - def destroy(client, attributes = {}, &block) - destroy!(client, attributes, &block) + def destroy(client, attributes = {}, &) + destroy!(client, attributes, &) rescue ZendeskAPI::Error::ClientError false end @@ -289,8 +289,8 @@ def self.included(klass) module ClassMethod # Updates, returning false on error. - def update(client, attributes = {}, &block) - update!(client, attributes, &block) + def update(client, attributes = {}, &) + update!(client, attributes, &) rescue ZendeskAPI::Error::ClientError false end @@ -298,11 +298,11 @@ def update(client, attributes = {}, &block) # Updates a resource given the id passed in. # @param [Client] client The {Client} object to be used # @param [Hash] attributes The attributes to update. Default to { - def update!(client, attributes = {}, &block) + def update!(client, attributes = {}, &) ZendeskAPI::Client.check_deprecated_namespace_usage attributes, singular_resource_name resource = new(client, :id => attributes.delete(:id), :global => attributes.delete(:global), :association => attributes.delete(:association)) resource.attributes.merge!(attributes) - resource.save!(:force_update => resource.is_a?(SingularResource), &block) + resource.save!(:force_update => resource.is_a?(SingularResource), &) resource end end diff --git a/lib/zendesk_api/associations.rb b/lib/zendesk_api/associations.rb index a025d3ca..8ec8b015 100644 --- a/lib/zendesk_api/associations.rb +++ b/lib/zendesk_api/associations.rb @@ -21,7 +21,7 @@ def wrap_resource(resource, class_level_association, options = {}) when Hash klass.new(@client, resource.merge(:association => instance_association)) when String, Integer - klass.new(@client, (options[:include_key] || :id) => resource, :association => instance_association) + klass.new(@client, options[:include_key] || :id => resource, :association => instance_association) else resource.association = instance_association resource diff --git a/lib/zendesk_api/client.rb b/lib/zendesk_api/client.rb index 47c19676..ec5fed22 100644 --- a/lib/zendesk_api/client.rb +++ b/lib/zendesk_api/client.rb @@ -34,7 +34,7 @@ class Client # Handles resources such as 'tickets'. Any options are passed to the underlying collection, except reload which disregards # memoization and creates a new Collection instance. # @return [Collection] Collection instance for resource - def method_missing(method, *args, &block) + def method_missing(method, *args, &) method = method.to_s options = args.last.is_a?(Hash) ? args.pop : {} unless config.use_resource_cache diff --git a/lib/zendesk_api/collection.rb b/lib/zendesk_api/collection.rb index 9c21079e..3848c1c3 100644 --- a/lib/zendesk_api/collection.rb +++ b/lib/zendesk_api/collection.rb @@ -51,7 +51,7 @@ def initialize(client, resource, options = {}) # Methods that take a Hash argument methods = %w{create find update update_many destroy create_or_update} - methods += methods.map { |method| method + "!" } + methods += methods.map { |method| "#{method}!" } methods.each do |deferrable| # Passes arguments and the proper path to the resource class method. # @param [Hash] options Options or attributes to pass @@ -188,24 +188,24 @@ def to_a! # Calls #each on every page with the passed in block # @param [Block] block Passed to #each - def all!(start_page = @options["page"], &block) - _all(start_page, :bang, &block) + def all!(start_page = @options["page"], &) + _all(start_page, :bang, &) end # Calls #each on every page with the passed in block # @param [Block] block Passed to #each - def all(start_page = @options["page"], &block) - _all(start_page, &block) + def all(start_page = @options["page"], &) + _all(start_page, &) end - def each_page!(*args, &block) + def each_page!(...) warn "ZendeskAPI::Collection#each_page! is deprecated, please use ZendeskAPI::Collection#all!" - all!(*args, &block) + all!(...) end - def each_page(*args, &block) + def each_page(...) warn "ZendeskAPI::Collection#each_page is deprecated, please use ZendeskAPI::Collection#all" - all(*args, &block) + all(...) end # Replaces the current (loaded or not) resources with the passed in collection @@ -271,13 +271,13 @@ def respond_to_missing?(name, include_all) end # Sends methods to underlying array of resources. - def method_missing(name, *args, &block) + def method_missing(name, ...) if resource_methods.include?(name) - collection_method(name, *args, &block) + collection_method(name, ...) elsif [].respond_to?(name, false) - array_method(name, *args, &block) + array_method(name, ...) else - next_collection(name, *args, &block) + next_collection(name, ...) end end @@ -457,12 +457,12 @@ def with_association? ## Method missing - def array_method(name, *args, &block) - to_a.public_send(name, *args, &block) + def array_method(name, ...) + to_a.public_send(name, ...) end # If you call client.tickets.foo - and foo is not an attribute nor an association, it ends up here, as a new collection - def next_collection(name, *args, &block) + def next_collection(name, *args, &) opts = args.last.is_a?(Hash) ? args.last : {} opts.merge!(collection_path: [*@collection_path, name], page: nil) # Why `page: nil`? @@ -471,8 +471,8 @@ def next_collection(name, *args, &block) self.class.new(@client, @resource_class, @options.merge(opts)) end - def collection_method(name, *args, &block) - @resource_class.send(name, @client, *args, &block) + def collection_method(name, ...) + @resource_class.send(name, @client, ...) end def resource_methods diff --git a/lib/zendesk_api/middleware/response/logger.rb b/lib/zendesk_api/middleware/response/logger.rb index c9972779..d74ce80e 100644 --- a/lib/zendesk_api/middleware/response/logger.rb +++ b/lib/zendesk_api/middleware/response/logger.rb @@ -11,7 +11,7 @@ def initialize(app, logger = nil) @logger = logger || begin require 'logger' - ::Logger.new(STDOUT) + ::Logger.new($stdout) end end diff --git a/lib/zendesk_api/pagination.rb b/lib/zendesk_api/pagination.rb index e8d6e64b..06dd2150 100644 --- a/lib/zendesk_api/pagination.rb +++ b/lib/zendesk_api/pagination.rb @@ -49,7 +49,7 @@ def cbp_response?(body) def set_cbp_options @options_per_page_was = @options.delete("per_page") # Default to CBP by using the page param as a map - @options.page = { size: (@options_per_page_was || DEFAULT_PAGE_SIZE) } + @options.page = { size: @options_per_page_was || DEFAULT_PAGE_SIZE } end # CBP requests look like: `/resources?page[size]=100` diff --git a/lib/zendesk_api/resource.rb b/lib/zendesk_api/resource.rb index 7f64c749..ffe526c3 100644 --- a/lib/zendesk_api/resource.rb +++ b/lib/zendesk_api/resource.rb @@ -86,9 +86,9 @@ def self.new_from_response(client, response, includes = nil) # Passes the method onto the attributes hash. # If the attributes are nested (e.g. { :tickets => { :id => 1 } }), passes the method onto the nested hash. - def method_missing(*args, &block) + def method_missing(*args, &) raise NoMethodError, ":save is not defined" if args.first.to_sym == :save - @attributes.send(*args, &block) + @attributes.send(*args, &) end def respond_to_missing?(method, include_private = false) @@ -167,6 +167,7 @@ def attribute_changes # Indexable resource class DataResource < Data attr_accessor :error, :error_message + extend Verbs def self.cbp_path_regexes diff --git a/lib/zendesk_api/resources.rb b/lib/zendesk_api/resources.rb index 12779f0d..7df38c4e 100644 --- a/lib/zendesk_api/resources.rb +++ b/lib/zendesk_api/resources.rb @@ -263,6 +263,7 @@ def resource_path class Section < Resource end + class Translation < Resource; end has_many Section @@ -280,6 +281,7 @@ def resource_path class Vote < Resource; end class Translation < Resource; end + class Article < Resource has_many Vote has_many Translation @@ -521,11 +523,11 @@ class << self has :submitter, :class => User has :assignee, :class => User - has_many :collaborators, class: User, inline: true, extend: (Module.new do + has_many :collaborators, class: User, inline: true, extend: Module.new do def to_param map(&:id) end - end) + end has_many Audit has :metrics, class: TicketMetric @@ -858,7 +860,7 @@ def current_session delete :logout def clear_sessions! - @client.connection.delete(path + '/sessions') + @client.connection.delete("#{path}/sessions") end def clear_sessions @@ -929,6 +931,7 @@ def self.cbp_path_regexes class OauthToken < ReadResource include Destroy + namespace "oauth" def self.singular_resource_name @@ -939,6 +942,7 @@ def self.singular_resource_name class Target < Resource; end class Invocation < Resource; end + class Webhook < Resource has_many Invocation end @@ -976,7 +980,7 @@ def new_record? def self.display!(client, options) new(client, options).tap do |resource| - resource.save!(path: resource.path + '/display') + resource.save!(path: "#{resource.path}/display") end end end @@ -1031,7 +1035,7 @@ def initialize(client, attributes = {}) super end - def self.create!(client, attributes = {}, &block) + def self.create!(client, attributes = {}, &) if file_path = attributes.delete(:upload) attributes[:upload_id] = client.apps.uploads.create!(:file => file_path).id end @@ -1075,12 +1079,12 @@ def attributes_for_save end end - def self.uploads(client, *args, &block) - ZendeskAPI::Collection.new(client, Upload, *args, &block) + def self.uploads(client, ...) + ZendeskAPI::Collection.new(client, Upload, ...) end - def self.installations(client, *args, &block) - ZendeskAPI::Collection.new(client, AppInstallation, *args, &block) + def self.installations(client, ...) + ZendeskAPI::Collection.new(client, AppInstallation, ...) end has Upload, :path => "uploads" diff --git a/lib/zendesk_api/search.rb b/lib/zendesk_api/search.rb index ddeb0a1b..e7707e67 100644 --- a/lib/zendesk_api/search.rb +++ b/lib/zendesk_api/search.rb @@ -17,10 +17,10 @@ def self.new(client, attributes) present_result_type = (attributes[:result_type] || attributes["result_type"]).to_s result_type = ZendeskAPI::Helpers.modulize_string(present_result_type) klass = begin - ZendeskAPI.const_get(result_type) - rescue NameError - Result - end + ZendeskAPI.const_get(result_type) + rescue NameError + Result + end (klass || Result).new(client, attributes) end diff --git a/lib/zendesk_api/track_changes.rb b/lib/zendesk_api/track_changes.rb index 666eb702..df8dd427 100644 --- a/lib/zendesk_api/track_changes.rb +++ b/lib/zendesk_api/track_changes.rb @@ -49,7 +49,7 @@ def regular_writer(key, value) value else changes[key] = value - defined?(_store) ? _store(key, value) : super(key, value) + defined?(_store) ? _store(key, value) : super end end diff --git a/spec/core/client_spec.rb b/spec/core/client_spec.rb index a2c7c44f..d19914a0 100644 --- a/spec/core/client_spec.rb +++ b/spec/core/client_spec.rb @@ -17,7 +17,7 @@ def build_connection config.adapter = :test config.adapter_proc = proc do |stub| stub.get "/api/v2/tickets" do |_env| - [200, { "Content-Type": "application/json" }, "null"] + [200, { 'Content-Type': "application/json" }, "null"] end end end diff --git a/spec/core/collection_spec.rb b/spec/core/collection_spec.rb index b38db4df..6d9fffa7 100644 --- a/spec/core/collection_spec.rb +++ b/spec/core/collection_spec.rb @@ -128,7 +128,7 @@ context "with a class with a parent" do let(:association) do ZendeskAPI::Association.new(:class => ZendeskAPI::TestResource::TestChild, - :parent => ZendeskAPI::TestResource.new(client, :id => 1), :name => :children) + :parent => ZendeskAPI::TestResource.new(client, :id => 1), :name => :children) end subject do @@ -1034,7 +1034,7 @@ def to_proc context "when we know for sure that the endpoint does not support CBP" do before do - stub_json_request(:get, %r{test_resources\/show_many}, json(:test_resources => [{ :id => 1 }])) + stub_json_request(:get, %r{test_resources/show_many}, json(:test_resources => [{ :id => 1 }])) end it "does not try to default to CBP" do @@ -1080,19 +1080,19 @@ def generate_response(index, has_more) before do allow(ZendeskAPI::TestResource).to receive(:cbp_path_regexes).and_return([/test_resources/]) stub_json_request(:get, %r{test_resources\?page%5Bsize%5D=1}, json(generate_response(1, true))) - stub_json_request(:get, %r{test_resources.json\/\?page%5Bafter%5D=after1&page%5Bsize%5D=1}, json(generate_response(2, true))) - stub_json_request(:get, %r{test_resources.json\/\?page%5Bafter%5D=after2&page%5Bsize%5D=1}, json(generate_response(3, true))) - stub_json_request(:get, %r{test_resources.json\/\?page%5Bafter%5D=after3&page%5Bsize%5D=1}, json(generate_response(4, false))) + stub_json_request(:get, %r{test_resources.json/\?page%5Bafter%5D=after1&page%5Bsize%5D=1}, json(generate_response(2, true))) + stub_json_request(:get, %r{test_resources.json/\?page%5Bafter%5D=after2&page%5Bsize%5D=1}, json(generate_response(3, true))) + stub_json_request(:get, %r{test_resources.json/\?page%5Bafter%5D=after3&page%5Bsize%5D=1}, json(generate_response(4, false))) end it "fetches all pages and yields the correct arguments" do expect do |b| silence_logger { subject.per_page(1).all(&b) } end.to yield_successive_args( - [ZendeskAPI::TestResource.new(client, id: 1), "after" => "after1", "before" => "before0", "size" => 1], - [ZendeskAPI::TestResource.new(client, id: 2), "after" => "after2", "before" => "before1", "size" => 1], - [ZendeskAPI::TestResource.new(client, id: 3), "after" => "after3", "before" => "before2", "size" => 1], - [ZendeskAPI::TestResource.new(client, id: 4), "after" => "after4", "before" => "before3", "size" => 1] + [ZendeskAPI::TestResource.new(client, id: 1), { "after" => "after1", "before" => "before0", "size" => 1 }], + [ZendeskAPI::TestResource.new(client, id: 2), { "after" => "after2", "before" => "before1", "size" => 1 }], + [ZendeskAPI::TestResource.new(client, id: 3), { "after" => "after3", "before" => "before2", "size" => 1 }], + [ZendeskAPI::TestResource.new(client, id: 4), { "after" => "after4", "before" => "before3", "size" => 1 }] ) end end diff --git a/spec/core/middleware/response/raise_error_spec.rb b/spec/core/middleware/response/raise_error_spec.rb index 81a39020..a6c42cea 100644 --- a/spec/core/middleware/response/raise_error_spec.rb +++ b/spec/core/middleware/response/raise_error_spec.rb @@ -28,7 +28,7 @@ before(:each) do stub_request(:any, /.*/).to_return(:status => status, :body => body, - :headers => { :content_type => "application/json" }) + :headers => { :content_type => "application/json" }) end context "with status = 404" do @@ -69,7 +69,7 @@ it "raises NetworkError with the right message" do expect { client.connection.get "/non_existent" }.to raise_error( ZendeskAPI::Error::NetworkError, - "the server responded with status 302 -- get https://#{client.connection.host}/non_existent" + "the server responded with status 302 for GET https://#{client.connection.host}/non_existent -- get https://#{client.connection.host}/non_existent" ) end end diff --git a/spec/core/middleware/response/sanitize_response_spec.rb b/spec/core/middleware/response/sanitize_response_spec.rb index 53393191..93247594 100644 --- a/spec/core/middleware/response/sanitize_response_spec.rb +++ b/spec/core/middleware/response/sanitize_response_spec.rb @@ -2,14 +2,14 @@ describe ZendeskAPI::Middleware::Response::SanitizeResponse do def fake_response(data) - stub_json_request(:get, %r{blergh}, data) + stub_json_request(:get, /blergh/, data) response = client.connection.get('blergh') expect(response.status).to eq(200) response end describe 'with bad characters' do - let(:response) { fake_response("{\"x\":\"2012-02-01T13:14:15Z\", \"y\":\"\u0315\u0316\u01333\u0270\u022712awesome!"+[0xd83d,0xdc4d].pack('U*')+"\"}") } + let(:response) { fake_response("{\"x\":\"2012-02-01T13:14:15Z\", \"y\":\"\u0315\u0316\u01333\u0270\u022712awesome!" + [0xd83d, 0xdc4d].pack('U*') + "\"}") } it 'removes bad characters' do expect(response.body.to_s.valid_encoding?).to be(true) diff --git a/spec/core/spec_helper.rb b/spec/core/spec_helper.rb index f2c898f2..02c910f0 100644 --- a/spec/core/spec_helper.rb +++ b/spec/core/spec_helper.rb @@ -31,7 +31,7 @@ def client @client ||= begin client = ZendeskAPI::Client.new do |config| if File.exist?(credentials) - data = YAML.load(File.read(credentials)) + data = YAML.load_file(credentials) config.username = data["username"] if data["token"] @@ -73,7 +73,7 @@ def options config.url = "https://my.zendesk.com/api/v2" end - config.logger = Logger.new("/dev/null") + config.logger = Logger.new(File::NULL) config.retry = true end @@ -108,7 +108,7 @@ def silence_logger end def silence_stderr - $stderr = File.new('/dev/null', 'w') + $stderr = File.new(File::NULL, 'w') yield ensure $stderr = STDERR diff --git a/spec/live/ticket_spec.rb b/spec/live/ticket_spec.rb index 4a5cc290..72646b32 100644 --- a/spec/live/ticket_spec.rb +++ b/spec/live/ticket_spec.rb @@ -13,7 +13,7 @@ def valid_attributes :collaborator_ids => [agent.id], :tags => %w(awesome blossom), :email_ccs => [ - { :user_id => agent.id, "action": "put" } + { :user_id => agent.id, action: "put" } ] } end @@ -142,7 +142,7 @@ def valid_attributes describe ".import" do it "can import" do VCR.use_cassette("ticket_import_can_import") do - old = Time.now - 5 * 365 * 24 * 60 * 60 + old = Time.now - (5 * 365 * 24 * 60 * 60) ticket = ZendeskAPI::Ticket.import(client, valid_attributes.merge(:created_at => old.iso8601)) expect(ZendeskAPI::Ticket.find(client, :id => ticket.id).created_at.year).to eq(old.year) end diff --git a/spec/live/user_spec.rb b/spec/live/user_spec.rb index cdc5db79..fa66f394 100644 --- a/spec/live/user_spec.rb +++ b/spec/live/user_spec.rb @@ -27,7 +27,7 @@ def valid_attributes end context "passwords", :vcr do - let(:password) { client.config.password || ENV['PASSWORD'] } + let(:password) { client.config.password || ENV.fetch('PASSWORD', nil) } it "sets the password" do agent.set_password!(:password => password) diff --git a/spec/live/voice/phone_number_spec.rb b/spec/live/voice/phone_number_spec.rb index 59d82e8d..9a39fe60 100644 --- a/spec/live/voice/phone_number_spec.rb +++ b/spec/live/voice/phone_number_spec.rb @@ -3,12 +3,10 @@ describe ZendeskAPI::Voice::PhoneNumber, :delete_after do # We have to find a valid token before we create a phone number def available_phone_token - @available_phone_token ||= begin - VCR.use_cassette("find_valid_phone_number_token_for_creation") do - client.voice.phone_numbers( - path: "channels/voice/phone_numbers/search.json", country: "US" - ).first.token - end + @available_phone_token ||= VCR.use_cassette("find_valid_phone_number_token_for_creation") do + client.voice.phone_numbers( + path: "channels/voice/phone_numbers/search.json", country: "US" + ).first.token end end diff --git a/util/resource_handler.rb b/util/resource_handler.rb index 7ccd062a..18926b02 100644 --- a/util/resource_handler.rb +++ b/util/resource_handler.rb @@ -62,7 +62,7 @@ def get_klass(statement) statement.traverse do |node| if node.type == :assoc && node.jump(:kw).source == "class" node.traverse do |value| - if value.type == :const_path_ref || value.type == :var_ref + if [:const_path_ref, :var_ref].include?(value.type) return value.source end end diff --git a/zendesk_api.gemspec b/zendesk_api.gemspec index 2590f53d..fec405c3 100644 --- a/zendesk_api.gemspec +++ b/zendesk_api.gemspec @@ -18,18 +18,19 @@ Gem::Specification.new do |s| 'changelog_uri' => "https://github.com/zendesk/zendesk_api_client_rb/blob/v#{s.version}/CHANGELOG.md", 'documentation_uri' => "https://www.rubydoc.info/gems/zendesk_api/#{s.version}", 'source_code_uri' => "https://github.com/zendesk/zendesk_api_client_rb/tree/v#{s.version}", - 'wiki_uri' => 'https://github.com/zendesk/zendesk_api_client_rb/wiki' + 'wiki_uri' => 'https://github.com/zendesk/zendesk_api_client_rb/wiki', + 'rubygems_mfa_required' => 'true' } s.files = Dir.glob('{lib,util}/**/*') << 'LICENSE' - s.required_ruby_version = ">= 2.7" + s.required_ruby_version = ">= 3.1" s.required_rubygems_version = ">= 1.3.6" - s.add_runtime_dependency "faraday", "> 2.0.0" - s.add_runtime_dependency "faraday-multipart" - s.add_runtime_dependency "hashie", ">= 3.5.2", "< 6.0.0" - s.add_runtime_dependency "inflection" - s.add_runtime_dependency "multipart-post", "~> 2.0" - s.add_runtime_dependency "mini_mime" + s.add_dependency "faraday", "> 2.0.0" + s.add_dependency "faraday-multipart" + s.add_dependency "hashie", ">= 3.5.2" + s.add_dependency "inflection" + s.add_dependency "multipart-post", "~> 2.0" + s.add_dependency "mini_mime" end