diff --git a/.rubocop.yml b/.rubocop.yml index a995857..435df4c 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,941 +1,5 @@ -# Common configuration. AllCops: - RubyInterpreters: - - ruby - - rake - # Include common Ruby source files. - Include: - - '**/*.rb' - - '**/*.gemfile' - - '**/*.gemspec' - - '**/*.rake' - - '**/Gemfile' - - '**/Rakefile' - Exclude: - - 'node_modules/**/*' - - 'vendor/**/*' - - '.git/**/*' - # Default formatter will be used if no `-f/--format` option is given. - DefaultFormatter: progress - # Cop names are displayed in offense messages by default. Change behavior - # by overriding DisplayCopNames, or by giving the `--no-display-cop-names` - # option. - DisplayCopNames: true - # Style guide URLs are not displayed in offense messages by default. Change - # behavior by overriding `DisplayStyleGuide`, or by giving the - # `-S/--display-style-guide` option. - DisplayStyleGuide: false - # When specifying style guide URLs, any paths and/or fragments will be - # evaluated relative to the base URL. - StyleGuideBaseURL: https://github.com/rubocop-hq/ruby-style-guide - # Extra details are not displayed in offense messages by default. Change - # behavior by overriding ExtraDetails, or by giving the - # `-E/--extra-details` option. - ExtraDetails: false - # Additional cops that do not reference a style guide rule may be enabled by - # default. Change behavior by overriding `StyleGuideCopsOnly`, or by giving - # the `--only-guide-cops` option. - StyleGuideCopsOnly: false - # All cops except the ones in disabled.yml are enabled by default. Change - # this behavior by overriding either `DisabledByDefault` or `EnabledByDefault`. - # When `DisabledByDefault` is `true`, all cops in the default configuration - # are disabled, and only cops in user configuration are enabled. This makes - # cops opt-in instead of opt-out. Note that when `DisabledByDefault` is `true`, - # cops in user configuration will be enabled even if they don't set the - # Enabled parameter. - # When `EnabledByDefault` is `true`, all cops, even those in disabled.yml, - # are enabled by default. Cops can still be disabled in user configuration. - # Note that it is invalid to set both EnabledByDefault and DisabledByDefault - # to true in the same configuration. - EnabledByDefault: false - DisabledByDefault: false - # Enables the result cache if `true`. Can be overridden by the `--cache` command - # line option. - UseCache: true - # Threshold for how many files can be stored in the result cache before some - # of the files are automatically removed. - MaxFilesInCache: 20000 - # The cache will be stored in "rubocop_cache" under this directory. If - # CacheRootDirectory is ~ (nil), which it is by default, the root will be - # taken from the environment variable `$XDG_CACHE_HOME` if it is set, or if - # `$XDG_CACHE_HOME` is not set, it will be `$HOME/.cache/`. - CacheRootDirectory: ~ - # It is possible for a malicious user to know the location of RuboCop's cache - # directory by looking at CacheRootDirectory, and create a symlink in its - # place that could cause RuboCop to overwrite unintended files, or read - # malicious input. If you are certain that your cache location is secure from - # this kind of attack, and wish to use a symlinked cache location, set this - # value to "true". - AllowSymlinksInCacheRootDirectory: false - # What MRI version of the Ruby interpreter is the inspected code intended to - # run on? (If there is more than one, set this to the lowest version.) - # If a value is specified for TargetRubyVersion then it is used. Acceptable - # values are specificed as a float (i.e. 2.5); the teeny version of Ruby - # should not be included. If the project specifies a Ruby version in the - # .ruby-version file, Gemfile or gems.rb file, RuboCop will try to determine - # the desired version of Ruby by inspecting the .ruby-version file first, - # followed by the Gemfile.lock or gems.locked file. (Although the Ruby version - # is specified in the Gemfile or gems.rb file, RuboCop reads the final value - # from the lock file.) If the Ruby version is still unresolved, RuboCop will - # use the oldest officially supported Ruby version (currently Ruby 2.2). - TargetRubyVersion: 2.3 - # What version of Rails is the inspected code using? If a value is specified - # for TargetRailsVersion then it is used. Acceptable values are specificed - # as a float (i.e. 5.1); the patch version of Rails should not be included. - # If TargetRailsVersion is not set, RuboCop will parse the Gemfile.lock or - # gems.locked file to find the version of Rails that has been bound to the - # application. If neither of those files exist, RuboCop will use Rails 5.0 - # as the default. - TargetRailsVersion: ~ - -#################### Layout ########################### - -# Indent private/protected/public as deep as method definitions -Layout/AccessModifierIndentation: - EnforcedStyle: indent - SupportedStyles: - - outdent - - indent - # By default, the indentation width from Layout/IndentationWidth is used - # But it can be overridden by setting this parameter - IndentationWidth: ~ - -# Align the elements of a hash literal if they span more than one line. -Layout/AlignHash: - # Alignment of entries using hash rocket as separator. Valid values are: - # - # key - left alignment of keys - # 'a' => 2 - # 'bb' => 3 - # separator - alignment of hash rockets, keys are right aligned - # 'a' => 2 - # 'bb' => 3 - # table - left alignment of keys, hash rockets, and values - # 'a' => 2 - # 'bb' => 3 - EnforcedHashRocketStyle: key - SupportedHashRocketStyles: - - key - - separator - - table - # Alignment of entries using colon as separator. Valid values are: - # - # key - left alignment of keys - # a: 0 - # bb: 1 - # separator - alignment of colons, keys are right aligned - # a: 0 - # bb: 1 - # table - left alignment of keys and values - # a: 0 - # bb: 1 - EnforcedColonStyle: key - SupportedColonStyles: - - key - - separator - - table - # Select whether hashes that are the last argument in a method call should be - # inspected? Valid values are: - # - # always_inspect - Inspect both implicit and explicit hashes. - # Registers an offense for: - # function(a: 1, - # b: 2) - # Registers an offense for: - # function({a: 1, - # b: 2}) - # always_ignore - Ignore both implicit and explicit hashes. - # Accepts: - # function(a: 1, - # b: 2) - # Accepts: - # function({a: 1, - # b: 2}) - # ignore_implicit - Ignore only implicit hashes. - # Accepts: - # function(a: 1, - # b: 2) - # Registers an offense for: - # function({a: 1, - # b: 2}) - # ignore_explicit - Ignore only explicit hashes. - # Accepts: - # function({a: 1, - # b: 2}) - # Registers an offense for: - # function(a: 1, - # b: 2) - EnforcedLastArgumentHashStyle: always_inspect - SupportedLastArgumentHashStyles: - - always_inspect - - always_ignore - - ignore_implicit - - ignore_explicit - -Layout/AlignParameters: - # Alignment of parameters in multi-line method calls. - # - # The `with_first_parameter` style aligns the following lines along the same - # column as the first parameter. - # - # method_call(a, - # b) - # - # The `with_fixed_indentation` style aligns the following lines with one - # level of indentation relative to the start of the line with the method call. - # - # method_call(a, - # b) - EnforcedStyle: with_first_parameter - SupportedStyles: - - with_first_parameter - - with_fixed_indentation - # By default, the indentation width from Layout/IndentationWidth is used - # But it can be overridden by setting this parameter - IndentationWidth: ~ - -# checks whether the end keywords are aligned properly for `do` `end` blocks. -Layout/BlockAlignment: - # The value `start_of_block` means that the `end` should be aligned with line - # where the `do` keyword appears. - # The value `start_of_line` means it should be aligned with the whole - # expression's starting line. - # The value `either` means both are allowed. - EnforcedStyleAlignWith: either - SupportedStylesAlignWith: - - either - - start_of_block - - start_of_line - -# Indentation of `when`. -Layout/CaseIndentation: - EnforcedStyle: case - SupportedStyles: - - case - - end - IndentOneStep: false - # By default, the indentation width from `Layout/IndentationWidth` is used. - # But it can be overridden by setting this parameter. - # This only matters if `IndentOneStep` is `true` - IndentationWidth: ~ - -Layout/DefEndAlignment: - # The value `def` means that `end` should be aligned with the def keyword. - # The value `start_of_line` means that `end` should be aligned with method - # calls like `private`, `public`, etc, if present in front of the `def` - # keyword on the same line. - EnforcedStyleAlignWith: start_of_line - SupportedStylesAlignWith: - - start_of_line - - def - AutoCorrect: false - Severity: warning - -# Multi-line method chaining should be done with leading dots. -Layout/DotPosition: - EnforcedStyle: leading - SupportedStyles: - - leading - - trailing - -Layout/EmptyComment: - AllowBorderComment: true - AllowMarginComment: true - -# Use empty lines between defs. -Layout/EmptyLineBetweenDefs: - # If `true`, this parameter means that single line method definitions don't - # need an empty line between them. - AllowAdjacentOneLineDefs: false - # Can be array to specify minimum and maximum number of empty lines, e.g. [1, 2] - NumberOfEmptyLines: 1 - -Layout/EmptyLinesAroundBlockBody: - EnforcedStyle: no_empty_lines - SupportedStyles: - - empty_lines - - no_empty_lines - -Layout/EmptyLinesAroundClassBody: - EnforcedStyle: no_empty_lines - SupportedStyles: - - empty_lines - - empty_lines_except_namespace - - empty_lines_special - - no_empty_lines - - beginning_only - - ending_only - -Layout/EmptyLinesAroundModuleBody: - EnforcedStyle: no_empty_lines - SupportedStyles: - - empty_lines - - empty_lines_except_namespace - - empty_lines_special - - no_empty_lines - -# Align ends correctly. -Layout/EndAlignment: - # The value `keyword` means that `end` should be aligned with the matching - # keyword (`if`, `while`, etc.). - # The value `variable` means that in assignments, `end` should be aligned - # with the start of the variable on the left hand side of `=`. In all other - # situations, `end` should still be aligned with the keyword. - # The value `start_of_line` means that `end` should be aligned with the start - # of the line which the matching keyword appears on. - EnforcedStyleAlignWith: keyword - SupportedStylesAlignWith: - - keyword - - variable - - start_of_line - AutoCorrect: false - Severity: warning - -Layout/EndOfLine: - # The `native` style means that CR+LF (Carriage Return + Line Feed) is - # enforced on Windows, and LF is enforced on other platforms. The other styles - # mean LF and CR+LF, respectively. - EnforcedStyle: lf - SupportedStyles: - - native - - lf - - crlf - -Layout/ExtraSpacing: - # When true, allows most uses of extra spacing if the intent is to align - # things with the previous or next line, not counting empty lines or comment - # lines. - AllowForAlignment: true - # When true, forces the alignment of `=` in assignments on consecutive lines. - ForceEqualSignAlignment: false - -Layout/FirstParameterIndentation: - EnforcedStyle: special_for_inner_method_call_in_parentheses - SupportedStyles: - # The first parameter should always be indented one step more than the - # preceding line. - - consistent - # The first parameter should always be indented one level relative to the - # parent that is receiving the parameter - - consistent_relative_to_receiver - # The first parameter should normally be indented one step more than the - # preceding line, but if it's a parameter for a method call that is itself - # a parameter in a method call, then the inner parameter should be indented - # relative to the inner method. - - special_for_inner_method_call - # Same as `special_for_inner_method_call` except that the special rule only - # applies if the outer method call encloses its arguments in parentheses. - - special_for_inner_method_call_in_parentheses - # By default, the indentation width from `Layout/IndentationWidth` is used - # But it can be overridden by setting this parameter - IndentationWidth: ~ - -Layout/IndentationConsistency: - # The difference between `rails` and `normal` is that the `rails` style - # prescribes that in classes and modules the `protected` and `private` - # modifier keywords shall be indented the same as public methods and that - # protected and private members shall be indented one step more than the - # modifiers. Other than that, both styles mean that entities on the same - # logical depth shall have the same indentation. - EnforcedStyle: normal - SupportedStyles: - - normal - - rails - -Layout/IndentationWidth: - # Number of spaces for each indentation level. - Width: 2 - IgnoredPatterns: [] - -# Checks the indentation of the first element in an array literal. -Layout/IndentArray: - # The value `special_inside_parentheses` means that array literals with - # brackets that have their opening bracket on the same line as a surrounding - # opening round parenthesis, shall have their first element indented relative - # to the first position inside the parenthesis. - # - # The value `consistent` means that the indentation of the first element shall - # always be relative to the first position of the line where the opening - # bracket is. - # - # The value `align_brackets` means that the indentation of the first element - # shall always be relative to the position of the opening bracket. - EnforcedStyle: special_inside_parentheses - SupportedStyles: - - special_inside_parentheses - - consistent - - align_brackets - # By default, the indentation width from `Layout/IndentationWidth` is used - # But it can be overridden by setting this parameter - IndentationWidth: ~ - -# Checks the indentation of assignment RHS, when on a different line from LHS -Layout/IndentAssignment: - # By default, the indentation width from `Layout/IndentationWidth` is used - # But it can be overridden by setting this parameter - IndentationWidth: ~ - -# Checks the indentation of the first key in a hash literal. -Layout/IndentHash: - # The value `special_inside_parentheses` means that hash literals with braces - # that have their opening brace on the same line as a surrounding opening - # round parenthesis, shall have their first key indented relative to the - # first position inside the parenthesis. - # - # The value `consistent` means that the indentation of the first key shall - # always be relative to the first position of the line where the opening - # brace is. - # - # The value `align_braces` means that the indentation of the first key shall - # always be relative to the position of the opening brace. - EnforcedStyle: special_inside_parentheses - SupportedStyles: - - special_inside_parentheses - - consistent - - align_braces - # By default, the indentation width from `Layout/IndentationWidth` is used - # But it can be overridden by setting this parameter - IndentationWidth: ~ - -Layout/IndentHeredoc: - EnforcedStyle: auto_detection - SupportedStyles: - - auto_detection - - squiggly - - active_support - - powerpack - - unindent - -Layout/SpaceInLambdaLiteral: - EnforcedStyle: require_no_space - SupportedStyles: - - require_no_space - - require_space - -Layout/MultilineArrayBraceLayout: - EnforcedStyle: symmetrical - SupportedStyles: - # symmetrical: closing brace is positioned in same way as opening brace - # new_line: closing brace is always on a new line - # same_line: closing brace is always on the same line as last element - - symmetrical - - new_line - - same_line - -Layout/MultilineAssignmentLayout: - # The types of assignments which are subject to this rule. - SupportedTypes: - - block - - case - - class - - if - - kwbegin - - module - EnforcedStyle: new_line - SupportedStyles: - # Ensures that the assignment operator and the rhs are on the same line for - # the set of supported types. - - same_line - # Ensures that the assignment operator and the rhs are on separate lines - # for the set of supported types. - - new_line - -Layout/MultilineHashBraceLayout: - EnforcedStyle: symmetrical - SupportedStyles: - # symmetrical: closing brace is positioned in same way as opening brace - # new_line: closing brace is always on a new line - # same_line: closing brace is always on same line as last element - - symmetrical - - new_line - - same_line - -Layout/MultilineMethodCallBraceLayout: - EnforcedStyle: symmetrical - SupportedStyles: - # symmetrical: closing brace is positioned in same way as opening brace - # new_line: closing brace is always on a new line - # same_line: closing brace is always on the same line as last argument - - symmetrical - - new_line - - same_line - -Layout/MultilineMethodCallIndentation: - EnforcedStyle: aligned - SupportedStyles: - - aligned - - indented - - indented_relative_to_receiver - # By default, the indentation width from Layout/IndentationWidth is used - # But it can be overridden by setting this parameter - IndentationWidth: ~ - -Layout/MultilineMethodDefinitionBraceLayout: - EnforcedStyle: symmetrical - SupportedStyles: - # symmetrical: closing brace is positioned in same way as opening brace - # new_line: closing brace is always on a new line - # same_line: closing brace is always on the same line as last parameter - - symmetrical - - new_line - - same_line - -Layout/MultilineOperationIndentation: - EnforcedStyle: aligned - SupportedStyles: - - aligned - - indented - # By default, the indentation width from `Layout/IndentationWidth` is used - # But it can be overridden by setting this parameter - IndentationWidth: ~ - -Layout/SpaceAroundBlockParameters: - EnforcedStyleInsidePipes: no_space - SupportedStylesInsidePipes: - - space - - no_space - -Layout/SpaceAroundEqualsInParameterDefault: - EnforcedStyle: space - SupportedStyles: - - space - - no_space - -Layout/SpaceAroundOperators: - # When `true`, allows most uses of extra spacing if the intent is to align - # with an operator on the previous or next line, not counting empty lines - # or comment lines. - AllowForAlignment: true - -Layout/SpaceBeforeBlockBraces: - EnforcedStyle: space - SupportedStyles: - - space - - no_space - EnforcedStyleForEmptyBraces: space - SupportedStylesForEmptyBraces: - - space - - no_space - -Layout/SpaceBeforeFirstArg: - # When `true`, allows most uses of extra spacing if the intent is to align - # things with the previous or next line, not counting empty lines or comment - # lines. - AllowForAlignment: true - -Layout/SpaceInsideArrayLiteralBrackets: - EnforcedStyle: no_space - SupportedStyles: - - space - - no_space - # 'compact' normally requires a space inside the brackets, with the exception - # that successive left brackets or right brackets are collapsed together - - compact - EnforcedStyleForEmptyBrackets: no_space - SupportedStylesForEmptyBrackets: - - space - - no_space - -Layout/SpaceInsideBlockBraces: - EnforcedStyle: space - SupportedStyles: - - space - - no_space - EnforcedStyleForEmptyBraces: no_space - SupportedStylesForEmptyBraces: - - space - - no_space - # Space between `{` and `|`. Overrides `EnforcedStyle` if there is a conflict. - SpaceBeforeBlockParameters: true - -Layout/SpaceInsideHashLiteralBraces: - EnforcedStyle: space - SupportedStyles: - - space - - no_space - # 'compact' normally requires a space inside hash braces, with the exception - # that successive left braces or right braces are collapsed together - - compact - EnforcedStyleForEmptyBraces: no_space - SupportedStylesForEmptyBraces: - - space - - no_space - -Layout/SpaceInsideParens: - EnforcedStyle: no_space - SupportedStyles: - - space - - no_space - -Layout/SpaceInsideReferenceBrackets: - EnforcedStyle: no_space - SupportedStyles: - - space - - no_space - EnforcedStyleForEmptyBrackets: no_space - SupportedStylesForEmptyBrackets: - - space - - no_space - -Layout/SpaceInsideStringInterpolation: - EnforcedStyle: no_space - SupportedStyles: - - space - - no_space - -Layout/ClassStructure: - Categories: - module_inclusion: - - include - - prepend - - extend - ExpectedOrder: - - module_inclusion - - constants - - public_class_methods - - initializer - - public_methods - - protected_methods - - private_methods - -Layout/Tab: - # By default, the indentation width from Layout/IndentationWidth is used - # But it can be overridden by setting this parameter - # It is used during auto-correction to determine how many spaces should - # replace each tab. - IndentationWidth: ~ - -Layout/TrailingBlankLines: - EnforcedStyle: final_newline - SupportedStyles: - - final_newline - - final_blank_line - -Layout/TrailingWhitespace: - AllowInHeredoc: false - -#################### Naming ########################## - -Naming/FileName: - # File names listed in `AllCops:Include` are excluded by default. Add extra - # excludes here. - Exclude: [] - # When `true`, requires that each source file should define a class or module - # with a name which matches the file name (converted to ... case). - # It further expects it to be nested inside modules which match the names - # of subdirectories in its path. - ExpectMatchingDefinition: false - # If non-`nil`, expect all source file names to match the following regex. - # Only the file name itself is matched, not the entire file path. - # Use anchors as necessary if you want to match the entire name rather than - # just a part of it. - Regex: ~ - # With `IgnoreExecutableScripts` set to `true`, this cop does not - # report offending filenames for executable scripts (i.e. source - # files with a shebang in the first line). - IgnoreExecutableScripts: true - AllowedAcronyms: - - CLI - - DSL - - ACL - - API - - ASCII - - CPU - - CSS - - DNS - - EOF - - GUID - - HTML - - HTTP - - HTTPS - - ID - - IP - - JSON - - LHS - - QPS - - RAM - - RHS - - RPC - - SLA - - SMTP - - SQL - - SSH - - TCP - - TLS - - TTL - - UDP - - UI - - UID - - UUID - - URI - - URL - - UTF8 - - VM - - XML - - XMPP - - XSRF - - XSS - -Naming/HeredocDelimiterNaming: - Blacklist: - - !ruby/regexp '/(^|\s)(EO[A-Z]{1}|END)(\s|$)/' - -Naming/HeredocDelimiterCase: - EnforcedStyle: uppercase - SupportedStyles: - - lowercase - - uppercase - -Naming/MethodName: - EnforcedStyle: snake_case - SupportedStyles: - - snake_case - - camelCase - -Naming/PredicateName: - # Predicate name prefixes. - NamePrefix: - - is_ - - has_ - - have_ - # Predicate name prefixes that should be removed. - NamePrefixBlacklist: - - is_ - - has_ - - have_ - # Predicate names which, despite having a blacklisted prefix, or no `?`, - # should still be accepted - NameWhitelist: - - is_a? - # Method definition macros for dynamically generated methods. - MethodDefinitionMacros: - - define_method - - define_singleton_method - # Exclude Rspec specs because there is a strong convention to write spec - # helpers in the form of `have_something` or `be_something`. - Exclude: - - 'spec/**/*' - -Naming/UncommunicativeBlockParamName: - # Parameter names may be equal to or greater than this value - MinNameLength: 1 - AllowNamesEndingInNumbers: true - # Whitelisted names that will not register an offense - AllowedNames: [] - # Blacklisted names that will register an offense - ForbiddenNames: [] - -Naming/UncommunicativeMethodParamName: - # Parameter names may be equal to or greater than this value - MinNameLength: 3 - AllowNamesEndingInNumbers: true - # Whitelisted names that will not register an offense - AllowedNames: - - io - - id - - to - - by - - 'on' - - in - - at - # Blacklisted names that will register an offense - ForbiddenNames: [] - -Naming/VariableName: - EnforcedStyle: snake_case - SupportedStyles: - - snake_case - - camelCase - -Naming/VariableNumber: - EnforcedStyle: snake_case - SupportedStyles: - - snake_case - - normalcase - - non_integer - -#################### Style ########################### - -Style/AccessModifierDeclarations: - EnforcedStyle: group - SupportedStyles: - - inline - - group - -Style/Alias: - EnforcedStyle: prefer_alias - SupportedStyles: - - prefer_alias - - prefer_alias_method - -Style/AndOr: - # Whether `and` and `or` are banned only in conditionals (conditionals) - # or completely (always). - EnforcedStyle: always - SupportedStyles: - - always - - conditionals - -Style/AsciiComments: - AllowedChars: [] - -# Checks if usage of `%()` or `%Q()` matches configuration. -Style/BarePercentLiterals: - EnforcedStyle: bare_percent - SupportedStyles: - - percent_q - - bare_percent - -Style/BlockDelimiters: - EnforcedStyle: line_count_based - SupportedStyles: - # The `line_count_based` style enforces braces around single line blocks and - # do..end around multi-line blocks. - - line_count_based - # The `semantic` style enforces braces around functional blocks, where the - # primary purpose of the block is to return a value and do..end for - # procedural blocks, where the primary purpose of the block is its - # side-effects. - # - # This looks at the usage of a block's method to determine its type (e.g. is - # the result of a `map` assigned to a variable or passed to another - # method) but exceptions are permitted in the `ProceduralMethods`, - # `FunctionalMethods` and `IgnoredMethods` sections below. - - semantic - # The `braces_for_chaining` style enforces braces around single line blocks - # and do..end around multi-line blocks, except for multi-line blocks whose - # return value is being chained with another method (in which case braces - # are enforced). - - braces_for_chaining - ProceduralMethods: - # Methods that are known to be procedural in nature but look functional from - # their usage, e.g. - # - # time = Benchmark.realtime do - # foo.bar - # end - # - # Here, the return value of the block is discarded but the return value of - # `Benchmark.realtime` is used. - - benchmark - - bm - - bmbm - - create - - each_with_object - - measure - - new - - realtime - - tap - - with_object - FunctionalMethods: - # Methods that are known to be functional in nature but look procedural from - # their usage, e.g. - # - # let(:foo) { Foo.new } - # - # Here, the return value of `Foo.new` is used to define a `foo` helper but - # doesn't appear to be used from the return value of `let`. - - let - - let! - - subject - - watch - IgnoredMethods: - # Methods that can be either procedural or functional and cannot be - # categorised from their usage alone, e.g. - # - # foo = lambda do |x| - # puts "Hello, #{x}" - # end - # - # foo = lambda do |x| - # x * 100 - # end - # - # Here, it is impossible to tell from the return value of `lambda` whether - # the inner block's return value is significant. - - lambda - - proc - - it - -Style/BracesAroundHashParameters: - EnforcedStyle: no_braces - SupportedStyles: - # The `braces` style enforces braces around all method parameters that are - # hashes. - - braces - # The `no_braces` style checks that the last parameter doesn't have braces - # around it. - - no_braces - # The `context_dependent` style checks that the last parameter doesn't have - # braces around it, but requires braces if the second to last parameter is - # also a hash literal. - - context_dependent - -Style/ClassAndModuleChildren: - # Checks the style of children definitions at classes and modules. - # - # Basically there are two different styles: - # - # `nested` - have each child on a separate line - # class Foo - # class Bar - # end - # end - # - # `compact` - combine definitions as much as possible - # class Foo::Bar - # end - # - # The compact style is only forced, for classes or modules with one child. - EnforcedStyle: nested - SupportedStyles: - - nested - - compact - -Style/ClassCheck: - EnforcedStyle: is_a? - SupportedStyles: - - is_a? - - kind_of? - -# Align with the style guide. -Style/CollectionMethods: - # Mapping from undesired method to desired_method - # e.g. to use `detect` over `find`: - # - # CollectionMethods: - # PreferredMethods: - # find: detect - PreferredMethods: - collect: 'map' - collect!: 'map!' - inject: 'reduce' - detect: 'find' - find_all: 'select' - -# Use '`' or '%x' around command literals. -Style/CommandLiteral: - EnforcedStyle: backticks - # backticks: Always use backticks. - # percent_x: Always use `%x`. - # mixed: Use backticks on single-line commands, and `%x` on multi-line commands. - SupportedStyles: - - backticks - - percent_x - - mixed - # If `false`, the cop will always recommend using `%x` if one or more backticks - # are found in the command string. - AllowInnerBackticks: false - -# Checks formatting of special comments -Style/CommentAnnotation: - Keywords: - - TODO - - FIXME - - OPTIMIZE - - HACK - - REVIEW - + TargetRubyVersion: 2.7 Style/ConditionalAssignment: EnforcedStyle: assign_to_condition SupportedStyles: @@ -950,388 +14,11 @@ Style/ConditionalAssignment: SingleLineConditionsOnly: true IncludeTernaryExpressions: true Enabled: false - -# Checks that you have put a copyright in a comment before any code. -# -# You can override the default Notice in your .rubocop.yml file. -# -# In order to use autocorrect, you must supply a value for the -# `AutocorrectNotice` key that matches the regexp Notice. A blank -# `AutocorrectNotice` will cause an error during autocorrect. -# -# Autocorrect will add a copyright notice in a comment at the top -# of the file immediately after any shebang or encoding comments. -# -# Example rubocop.yml: -# -# Style/Copyright: -# Enabled: true -# Notice: 'Copyright (\(c\) )?2015 Yahoo! Inc' -# AutocorrectNotice: '# Copyright (c) 2015 Yahoo! Inc.' -# -Style/Copyright: - Notice: '^Copyright (\(c\) )?2[0-9]{3} .+' - AutocorrectNotice: '' - -Style/DocumentationMethod: - RequireForNonPublicMethods: false - -# Warn on empty else statements -# empty - warn only on empty `else` -# nil - warn on `else` with nil in it -# both - warn on empty `else` and `else` with `nil` in it -Style/EmptyElse: - EnforcedStyle: both - SupportedStyles: - - empty - - nil - - both - -Style/EmptyMethod: - EnforcedStyle: compact - SupportedStyles: - - compact - - expanded - -# Checks use of for or each in multiline loops. -Style/For: - EnforcedStyle: each - SupportedStyles: - - each - - for - -# Enforce the method used for string formatting. -Style/FormatString: - EnforcedStyle: percent - SupportedStyles: - - format - - sprintf - - percent - -# Enforce using either `%s` or `%{token}` -Style/FormatStringToken: - EnforcedStyle: unannotated - SupportedStyles: - # Prefer tokens which contain a sprintf like type annotation like - # `%s`, `%d`, `%f` - - annotated - # Prefer simple looking "template" style tokens like `%{name}`, `%{age}` - - template - - unannotated - -Style/FrozenStringLiteralComment: - EnforcedStyle: when_needed - SupportedStyles: - # `when_needed` will add the frozen string literal comment to files - # only when the `TargetRubyVersion` is set to 2.3+. - - when_needed - # `always` will always add the frozen string literal comment to a file - # regardless of the Ruby version or if `freeze` or `<<` are called on a - # string literal. If you run code against multiple versions of Ruby, it is - # possible that this will create errors in Ruby 2.3.0+. - - always - # `never` will enforce that the frozen string literal comment does not - # exist in a file. - - never - -# Built-in global variables are allowed by default. -Style/GlobalVars: - AllowedVariables: [] - -# `MinBodyLength` defines the number of lines of the a body of an `if` or `unless` -# needs to have to trigger this cop -Style/GuardClause: - MinBodyLength: 1 - -Style/HashSyntax: - EnforcedStyle: ruby19 - SupportedStyles: - # checks for 1.9 syntax (e.g. {a: 1}) for all symbol keys - - ruby19 - # checks for hash rocket syntax for all hashes - - hash_rockets - # forbids mixed key syntaxes (e.g. {a: 1, :b => 2}) - - no_mixed_keys - # enforces both ruby19 and no_mixed_keys styles - - ruby19_no_mixed_keys - # Force hashes that have a symbol value to use hash rockets - UseHashRocketsWithSymbolValues: false - # Do not suggest { a?: 1 } over { :a? => 1 } in ruby19 style - PreferHashRocketsForNonAlnumEndingSymbols: false - -Style/InverseMethods: - # `InverseMethods` are methods that can be inverted by a not (`not` or `!`) - # The relationship of inverse methods only needs to be defined in one direction. - # Keys and values both need to be defined as symbols. - InverseMethods: - :any?: :none? - :even?: :odd? - :==: :!= - :=~: :!~ - :<: :>= - :>: :<= - # `ActiveSupport` defines some common inverse methods. They are listed below, - # and not enabled by default. - #:present?: :blank?, - #:include?: :exclude? - # `InverseBlocks` are methods that are inverted by inverting the return - # of the block that is passed to the method - InverseBlocks: - :select: :reject - :select!: :reject! - -Style/Lambda: - EnforcedStyle: line_count_dependent - SupportedStyles: - - line_count_dependent - - lambda - - literal - -Style/LambdaCall: - EnforcedStyle: call - SupportedStyles: - - call - - braces - -Style/MethodCallWithArgsParentheses: - IgnoreMacros: true - IgnoredMethods: [] - -Style/MethodCallWithoutArgsParentheses: - IgnoredMethods: [] - -Style/MethodDefParentheses: - EnforcedStyle: require_parentheses - SupportedStyles: - - require_parentheses - - require_no_parentheses - - require_no_parentheses_except_multiline - -Style/MissingElse: - EnforcedStyle: both - SupportedStyles: - # if - warn when an if expression is missing an else branch - # case - warn when a case expression is missing an else branch - # both - warn when an if or case expression is missing an else branch - - if - - case - - both - -# Checks the grouping of mixins (`include`, `extend`, `prepend`) in `class` and -# `module` bodies. -Style/MixinGrouping: - EnforcedStyle: separated - SupportedStyles: - # separated: each mixed in module goes in a separate statement. - # grouped: mixed in modules are grouped into a single statement. - - separated - - grouped - -Style/ModuleFunction: - EnforcedStyle: module_function - SupportedStyles: - - module_function - - extend_self - -Style/MultilineMemoization: - EnforcedStyle: keyword - SupportedStyles: - - keyword - - braces - -Style/NegatedIf: - EnforcedStyle: both - SupportedStyles: - # both: prefix and postfix negated `if` should both use `unless` - # prefix: only use `unless` for negated `if` statements positioned before the body of the statement - # postfix: only use `unless` for negated `if` statements positioned after the body of the statement - - both - - prefix - - postfix - -Style/NestedParenthesizedCalls: - Whitelist: - - be - - be_a - - be_an - - be_between - - be_falsey - - be_kind_of - - be_instance_of - - be_truthy - - be_within - - eq - - eql - - end_with - - include - - match - - raise_error - - respond_to - - start_with - -Style/Next: - # With `always` all conditions at the end of an iteration needs to be - # replaced by next - with `skip_modifier_ifs` the modifier if like this one - # are ignored: [1, 2].each { |a| return 'yes' if a == 1 } - EnforcedStyle: skip_modifier_ifs - # `MinBodyLength` defines the number of lines of the a body of an `if` or `unless` - # needs to have to trigger this cop - MinBodyLength: 3 - SupportedStyles: - - skip_modifier_ifs - - always - -Style/NonNilCheck: - # With `IncludeSemanticChanges` set to `true`, this cop reports offenses for - # `!x.nil?` and autocorrects that and `x != nil` to solely `x`, which is - # **usually** OK, but might change behavior. - # - # With `IncludeSemanticChanges` set to `false`, this cop does not report - # offenses for `!x.nil?` and does no changes that might change behavior. - IncludeSemanticChanges: false - -Style/NumericLiterals: - MinDigits: 5 - Strict: false - -Style/NumericLiteralPrefix: - EnforcedOctalStyle: zero_with_o - SupportedOctalStyles: - - zero_with_o - - zero_only - -Style/NumericPredicate: - EnforcedStyle: predicate - SupportedStyles: - - predicate - - comparison - # Exclude RSpec specs because assertions like `expect(1).to be > 0` cause - # false positives. - Exclude: - - 'spec/**/*' - -Style/OptionHash: - # A list of parameter names that will be flagged by this cop. - SuspiciousParamNames: - - options - - opts - - args - - params - - parameters - -# Allow safe assignment in conditions. -Style/ParenthesesAroundCondition: - AllowSafeAssignment: true - AllowInMultilineConditions: false - -Style/PercentLiteralDelimiters: - # Specify the default preferred delimiter for all types with the 'default' key - # Override individual delimiters (even with default specified) by specifying - # an individual key - PreferredDelimiters: - default: () - '%i': '[]' - '%I': '[]' - '%r': '{}' - '%w': '[]' - '%W': '[]' - -Style/PercentQLiterals: - EnforcedStyle: lower_case_q - SupportedStyles: - - lower_case_q # Use `%q` when possible, `%Q` when necessary - - upper_case_q # Always use `%Q` - -Style/PreferredHashMethods: - EnforcedStyle: short - SupportedStyles: - - short - - verbose - Style/RaiseArgs: EnforcedStyle: compact SupportedStyles: - compact # raise Exception.new(msg) - exploded # raise Exception, msg - -Style/RedundantReturn: - # When `true` allows code like `return x, y`. - AllowMultipleReturnValues: false - -# Use `/` or `%r` around regular expressions. -Style/RegexpLiteral: - EnforcedStyle: slashes - # slashes: Always use slashes. - # percent_r: Always use `%r`. - # mixed: Use slashes on single-line regexes, and `%r` on multi-line regexes. - SupportedStyles: - - slashes - - percent_r - - mixed - # If `false`, the cop will always recommend using `%r` if one or more slashes - # are found in the regexp string. - AllowInnerSlashes: false - -Style/RescueStandardError: - EnforcedStyle: explicit - # implicit: Do not include the error class, `rescue` - # explicit: Require an error class `rescue StandardError` - SupportedStyles: - - implicit - - explicit - -Style/ReturnNil: - EnforcedStyle: return - SupportedStyles: - - return - - return_nil - -Style/SafeNavigation: - # Safe navigation may cause a statement to start returning `nil` in addition - # to whatever it used to return. - ConvertCodeThatCanStartToReturnNil: false - Whitelist: - - present? - - blank? - - presence - - try - - try! - -Style/Semicolon: - # Allow `;` to separate several expressions on the same line. - AllowAsExpressionSeparator: false - -Style/SignalException: - EnforcedStyle: only_raise - SupportedStyles: - - only_raise - - only_fail - - semantic - -Style/SingleLineBlockParams: - Methods: - - reduce: - - acc - - elem - - inject: - - acc - - elem - -Style/SingleLineMethods: - AllowIfMethodIsEmpty: true - -Style/SpecialGlobalVars: - EnforcedStyle: use_english_names - SupportedStyles: - - use_perl_names - - use_english_names - -Style/StabbyLambdaParentheses: - EnforcedStyle: require_parentheses - SupportedStyles: - - require_parentheses - - require_no_parentheses - Style/StringLiterals: EnforcedStyle: double_quotes SupportedStyles: @@ -1341,164 +28,24 @@ Style/StringLiterals: # use the same type of quotes on each line. ConsistentQuotesInMultiline: false Enabled: true - Style/StringLiteralsInInterpolation: EnforcedStyle: double_quotes SupportedStyles: - single_quotes - double_quotes - -Style/StringMethods: - # Mapping from undesired method to desired_method - # e.g. to use `to_sym` over `intern`: - # - # StringMethods: - # PreferredMethods: - # intern: to_sym - PreferredMethods: - intern: to_sym - -Style/SymbolArray: - EnforcedStyle: percent - MinSize: 2 - SupportedStyles: - - percent - - brackets - -Style/SymbolProc: - # A list of method names to be ignored by the check. - # The names should be fairly unique, otherwise you'll end up ignoring lots of code. - IgnoredMethods: - - respond_to - - define_method - -Style/TernaryParentheses: - EnforcedStyle: require_no_parentheses - SupportedStyles: - - require_parentheses - - require_no_parentheses - - require_parentheses_when_complex - AllowSafeAssignment: true - -Style/TrailingCommaInArguments: - # If `comma`, the cop requires a comma after the last argument, but only for - # parenthesized method calls where each argument is on its own line. - # If `consistent_comma`, the cop requires a comma after the last argument, - # for all parenthesized method calls with arguments. - EnforcedStyleForMultiline: no_comma - SupportedStylesForMultiline: - - comma - - consistent_comma - - no_comma - -Style/TrailingCommaInArrayLiteral: - # If `comma`, the cop requires a comma after the last item in an array, - # but only when each item is on its own line. - # If `consistent_comma`, the cop requires a comma after the last item of all - # non-empty array literals. - EnforcedStyleForMultiline: no_comma - SupportedStylesForMultiline: - - comma - - consistent_comma - - no_comma - -Style/TrailingCommaInHashLiteral: - # If `comma`, the cop requires a comma after the last item in a hash, - # but only when each item is on its own line. - # If `consistent_comma`, the cop requires a comma after the last item of all - # non-empty hash literals. - EnforcedStyleForMultiline: no_comma - SupportedStylesForMultiline: - - comma - - consistent_comma - - no_comma - -# `TrivialAccessors` requires exact name matches and doesn't allow -# predicated methods by default. -Style/TrivialAccessors: - # When set to `false` the cop will suggest the use of accessor methods - # in situations like: - # - # def name - # @other_name - # end - # - # This way you can uncover "hidden" attributes in your code. - ExactNameMatch: true - AllowPredicates: true - # Allows trivial writers that don't end in an equal sign. e.g. - # - # def on_exception(action) - # @on_exception=action - # end - # on_exception :restart - # - # Commonly used in DSLs - AllowDSLWriters: false - IgnoreClassMethods: false - 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 - -# `WordArray` enforces how array literals of word-like strings should be expressed. -Style/WordArray: - EnforcedStyle: percent - SupportedStyles: - # percent style: %w(word1 word2) - - percent - # bracket style: ['word1', 'word2'] - - brackets - # The `MinSize` option causes the `WordArray` rule to be ignored for arrays - # smaller than a certain size. The rule is only applied to arrays - # whose element count is greater than or equal to `MinSize`. - MinSize: 2 - # The regular expression `WordRegex` decides what is considered a word. - WordRegex: !ruby/regexp '/\A[\p{Word}\n\t]+\z/' - -Style/YodaCondition: - EnforcedStyle: all_comparison_operators - SupportedStyles: - # check all comparison operators - - all_comparison_operators - # check only equality operators: `!=` and `==` - - equality_operators_only - -#################### Metrics ############################### - Metrics/AbcSize: # The ABC size is a calculated magnitude, so this number can be an Integer or # a Float. Enabled: false - Metrics/BlockLength: Enabled: false - Metrics/BlockNesting: Enabled: false - Metrics/ClassLength: Enabled: false - -# Avoid complex methods. Metrics/CyclomaticComplexity: Enabled: false - -Metrics/LineLength: +Layout/LineLength: Max: 160 # To make it possible to copy or click on URIs in the code, we allow lines # containing a URI to be longer than Max. @@ -1513,93 +60,17 @@ Metrics/LineLength: # The IgnoredPatterns option is a list of !ruby/regexp and/or string # elements. Strings will be converted to Regexp objects. A line that matches # any regular expression listed in this option will be ignored by LineLength. - IgnoredPatterns: [] + AllowedPatterns: [] + Enabled: false +# TODO: Review the missing super calls in initialize and fix. +# These might actually be real bugs. +Lint/MissingSuper: Enabled: false - Metrics/MethodLength: Enabled: false - Metrics/ModuleLength: Enabled: false - Metrics/ParameterLists: Enabled: false - Metrics/PerceivedComplexity: Enabled: false - -#################### Lint ################################## - -# Allow safe assignment in conditions. -Lint/AssignmentInCondition: - AllowSafeAssignment: true - -Lint/InheritException: - # The default base class in favour of `Exception`. - EnforcedStyle: runtime_error - SupportedStyles: - - runtime_error - - standard_error - -Lint/MissingCopEnableDirective: - # Maximum number of consecutive lines the cop can be disabled for. - # 0 allows only single-line disables - # 1 would mean the maximum allowed is the following: - # # rubocop:disable SomeCop - # a = 1 - # # rubocop:enable SomeCop - # .inf for any size - MaximumRangeSize: .inf - -Lint/SafeNavigationChain: - Whitelist: - - present? - - blank? - - presence - - try - - try! - -Lint/SafeNavigationConsistency: - Whitelist: - - present? - - blank? - - presence - - try - - try! - -# Checks for shadowed arguments -Lint/ShadowedArgument: - IgnoreImplicitReferences: false - -# Checks for unused block arguments -Lint/UnusedBlockArgument: - IgnoreEmptyBlocks: true - AllowUnusedKeywordArguments: false - -# Checks for unused method arguments. -Lint/UnusedMethodArgument: - AllowUnusedKeywordArguments: false - IgnoreEmptyMethods: true - -Lint/Void: - CheckForMethodsWithNoSideEffects: false - -Rails: - Enabled: false - -#################### Performance ########################### - -Performance/DoubleStartEndWith: - # Used to check for `starts_with?` and `ends_with?`. - # These methods are defined by `ActiveSupport`. - IncludeActiveSupportAliases: false - -Performance/RedundantMerge: - # Max number of key-value pairs to consider an offense - MaxKeyValuePairs: 2 - -Bundler/OrderedGems: - TreatCommentsAsGroupSeparators: true - -Gemspec/OrderedDependencies: - TreatCommentsAsGroupSeparators: true diff --git a/.travis.yml b/.travis.yml index b3f323b..2362659 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,16 +2,16 @@ language: ruby cache: bundler rvm: -- 2.3.7 -- 2.4.5 -- 2.5.3 +- 2.7 +- 3.0 +- 3.1 before_install: - sudo apt-get update - sudo apt-get install python - nvm install node - nvm use node - - gem install bundler:1.16.3 + - gem install bundler install: - pip install --user bumpversion @@ -20,7 +20,7 @@ install: - npm install -g @semantic-release/git - npm install @semantic-release/github - npm install -g @semantic-release/commit-analyzer - - bundle _1.16.3_ install + - bundle install script: - bundle exec rake @@ -30,14 +30,14 @@ deploy: script: npx semantic-release on: branch: main - rvm: 2.5.3 + rvm: 2.7 - provider: rubygems api_key: $RUBYGEMS_API_KEY gem: ibm_cloud_sdk_core on: branch: main - rvm: 2.5.3 + rvm: 2.7 matrix: fast_finish: true diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4af5e18..f9d4b72 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,9 +6,9 @@ If you want to contribute to the repository, here's a quick guide: 2. Clone the repository into a local directory. 3. Install `Ruby`. Supported versions in the core are: - - 2.3.7 - - 2.4.5 - - 2.5.3 + - 2.7 + - 3.0 + - 3.1 4. Run ```sh gem install bundler diff --git a/ibm_cloud_sdk_core.gemspec b/ibm_cloud_sdk_core.gemspec index efc21ea..9b45ef2 100644 --- a/ibm_cloud_sdk_core.gemspec +++ b/ibm_cloud_sdk_core.gemspec @@ -12,7 +12,7 @@ Gem::Specification.new do |spec| spec.summary = "Official IBM Cloud SDK core library" spec.homepage = "https://www.github.com/IBM" spec.licenses = ["Apache-2.0"] - spec.required_ruby_version = ">= 2.3" + spec.required_ruby_version = ">= 2.7" # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host' # to allow pushing to a single host or delete this section to allow pushing to any host. @@ -36,7 +36,7 @@ Gem::Specification.new do |spec| spec.add_runtime_dependency "http", "~> 5.1.1" spec.add_runtime_dependency "jwt", "~> 2.2.1" - spec.add_development_dependency "bundler", "~> 1.6" + spec.add_development_dependency "bundler", "~> 2" spec.add_development_dependency "codecov", "~> 0.1" spec.add_development_dependency "dotenv", "~> 2.4" spec.add_development_dependency "httplog", "~> 1.0" @@ -45,7 +45,9 @@ Gem::Specification.new do |spec| spec.add_development_dependency "minitest-reporters", "~> 1.3" spec.add_development_dependency "minitest-retry", "~> 0.1" spec.add_development_dependency "rake", "~> 13.0" - spec.add_development_dependency "rubocop", "0.62" + spec.add_development_dependency "rubocop", ">=1.40" + spec.add_development_dependency "rubocop-performance" + spec.add_development_dependency "rubocop-rails" spec.add_development_dependency "simplecov", "~> 0.16" spec.add_development_dependency "webmock", "~> 3.4" end diff --git a/lib/ibm_cloud_sdk_core.rb b/lib/ibm_cloud_sdk_core.rb index 8c22c11..4126c2e 100644 --- a/lib/ibm_cloud_sdk_core.rb +++ b/lib/ibm_cloud_sdk_core.rb @@ -2,5 +2,5 @@ # Module for the IBM Cloud SDK Core module IBMCloudSdkCore - require_relative("./ibm_cloud_sdk_core/base_service.rb") + require_relative("./ibm_cloud_sdk_core/base_service") end diff --git a/lib/ibm_cloud_sdk_core/api_exception.rb b/lib/ibm_cloud_sdk_core/api_exception.rb index f50f534..359f2be 100644 --- a/lib/ibm_cloud_sdk_core/api_exception.rb +++ b/lib/ibm_cloud_sdk_core/api_exception.rb @@ -6,6 +6,7 @@ module IBMCloudSdkCore # Custom exception class for errors returned from the APIs class ApiException < StandardError attr_reader :code, :error, :info, :transaction_id, :global_transaction_id + # :param HTTP::Response response: The response object from the API def initialize(code: nil, error: nil, info: nil, transaction_id: nil, global_transaction_id: nil, response: nil) if code.nil? || error.nil? diff --git a/lib/ibm_cloud_sdk_core/authenticators/basic_authenticator.rb b/lib/ibm_cloud_sdk_core/authenticators/basic_authenticator.rb index f70a0a8..60c220f 100644 --- a/lib/ibm_cloud_sdk_core/authenticators/basic_authenticator.rb +++ b/lib/ibm_cloud_sdk_core/authenticators/basic_authenticator.rb @@ -1,13 +1,14 @@ # frozen_string_literal: true require("json") -require_relative("./authenticator.rb") -require_relative("../utils.rb") +require_relative("./authenticator") +require_relative("../utils") module IBMCloudSdkCore # Basic Authenticator class BasicAuthenticator < Authenticator attr_accessor :username, :password, :authentication_type + def initialize(vars) defaults = { username: nil, diff --git a/lib/ibm_cloud_sdk_core/authenticators/bearer_token_authenticator.rb b/lib/ibm_cloud_sdk_core/authenticators/bearer_token_authenticator.rb index 7377fac..bc6e476 100644 --- a/lib/ibm_cloud_sdk_core/authenticators/bearer_token_authenticator.rb +++ b/lib/ibm_cloud_sdk_core/authenticators/bearer_token_authenticator.rb @@ -1,13 +1,14 @@ # frozen_string_literal: true require("json") -require_relative("./authenticator.rb") -require_relative("../utils.rb") +require_relative("./authenticator") +require_relative("../utils") module IBMCloudSdkCore # Basic Authenticator class BearerTokenAuthenticator < Authenticator attr_accessor :authentication_type + def initialize(vars) defaults = { bearer_token: nil diff --git a/lib/ibm_cloud_sdk_core/authenticators/config_based_authenticator_factory.rb b/lib/ibm_cloud_sdk_core/authenticators/config_based_authenticator_factory.rb index c6c3092..a304838 100644 --- a/lib/ibm_cloud_sdk_core/authenticators/config_based_authenticator_factory.rb +++ b/lib/ibm_cloud_sdk_core/authenticators/config_based_authenticator_factory.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true require("json") -require_relative("./authenticator.rb") -require_relative("./basic_authenticator.rb") -require_relative("./bearer_token_authenticator.rb") -require_relative("./cp4d_authenticator.rb") -require_relative("./iam_authenticator.rb") -require_relative("./no_auth_authenticator.rb") -require_relative("../utils.rb") +require_relative("./authenticator") +require_relative("./basic_authenticator") +require_relative("./bearer_token_authenticator") +require_relative("./cp4d_authenticator") +require_relative("./iam_authenticator") +require_relative("./no_auth_authenticator") +require_relative("../utils") module IBMCloudSdkCore # Authenticator @@ -17,7 +17,7 @@ class ConfigBasedAuthenticatorFactory < Authenticator # :return: the authenticator def get_authenticator(service_name:) config = get_service_properties(service_name) - return construct_authenticator(config) unless config.nil? || config.empty? + construct_authenticator(config) unless config.nil? || config.empty? end def construct_authenticator(config) @@ -32,7 +32,8 @@ def construct_authenticator(config) return BearerTokenAuthenticator.new(config) if auth_type.casecmp(AUTH_TYPE_BEARER_TOKEN).zero? return CloudPakForDataAuthenticator.new(config) if auth_type.casecmp(AUTH_TYPE_CP4D).zero? return IamAuthenticator.new(config) if auth_type.casecmp(AUTH_TYPE_IAM).zero? - return NoAuthAuthenticator.new if auth_type.casecmp(AUTH_TYPE_NO_AUTH).zero? + + NoAuthAuthenticator.new if auth_type.casecmp(AUTH_TYPE_NO_AUTH).zero? end end end diff --git a/lib/ibm_cloud_sdk_core/authenticators/cp4d_authenticator.rb b/lib/ibm_cloud_sdk_core/authenticators/cp4d_authenticator.rb index 09ca7e1..43c17c9 100644 --- a/lib/ibm_cloud_sdk_core/authenticators/cp4d_authenticator.rb +++ b/lib/ibm_cloud_sdk_core/authenticators/cp4d_authenticator.rb @@ -1,14 +1,15 @@ # frozen_string_literal: true require("json") -require_relative("./authenticator.rb") -require_relative("../token_managers/cp4d_token_manager.rb") -require_relative("../utils.rb") +require_relative("./authenticator") +require_relative("../token_managers/cp4d_token_manager") +require_relative("../utils") module IBMCloudSdkCore # Basic Authenticator class CloudPakForDataAuthenticator < Authenticator attr_accessor :authentication_type, :disable_ssl_verification + def initialize(vars) defaults = { username: nil, diff --git a/lib/ibm_cloud_sdk_core/authenticators/iam_authenticator.rb b/lib/ibm_cloud_sdk_core/authenticators/iam_authenticator.rb index 2e5d12d..e507859 100644 --- a/lib/ibm_cloud_sdk_core/authenticators/iam_authenticator.rb +++ b/lib/ibm_cloud_sdk_core/authenticators/iam_authenticator.rb @@ -1,14 +1,15 @@ # frozen_string_literal: true require("json") -require_relative("./authenticator.rb") -require_relative("../token_managers/iam_token_manager.rb") -require_relative("../utils.rb") +require_relative("./authenticator") +require_relative("../token_managers/iam_token_manager") +require_relative("../utils") module IBMCloudSdkCore # Basic Authenticator class IamAuthenticator < Authenticator attr_accessor :authentication_type, :disable_ssl_verification, :client_id, :client_secret + def initialize(vars) defaults = { url: nil, diff --git a/lib/ibm_cloud_sdk_core/authenticators/no_auth_authenticator.rb b/lib/ibm_cloud_sdk_core/authenticators/no_auth_authenticator.rb index 3f7af10..a1c6397 100644 --- a/lib/ibm_cloud_sdk_core/authenticators/no_auth_authenticator.rb +++ b/lib/ibm_cloud_sdk_core/authenticators/no_auth_authenticator.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require("json") -require_relative("./authenticator.rb") +require_relative("./authenticator") module IBMCloudSdkCore # Authenticator diff --git a/lib/ibm_cloud_sdk_core/base_service.rb b/lib/ibm_cloud_sdk_core/base_service.rb index 87738e9..b41773e 100644 --- a/lib/ibm_cloud_sdk_core/base_service.rb +++ b/lib/ibm_cloud_sdk_core/base_service.rb @@ -4,10 +4,10 @@ require("rbconfig") require("stringio") require("json") -require_relative("./version.rb") -require_relative("./detailed_response.rb") -require_relative("./api_exception.rb") -require_relative("./utils.rb") +require_relative("./version") +require_relative("./detailed_response") +require_relative("./api_exception") +require_relative("./utils") require_relative("./authenticators/authenticator") require_relative("./authenticators/basic_authenticator") require_relative("./authenticators/bearer_token_authenticator") @@ -25,6 +25,7 @@ module IBMCloudSdkCore class BaseService attr_accessor :service_name, :service_url attr_reader :conn, :authenticator, :disable_ssl_verification + def initialize(vars) defaults = { authenticator: nil, @@ -148,7 +149,7 @@ def configure_http_client(proxy: {}, timeout: {}, disable_ssl_verification: fals ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE @conn.default_options = { ssl_context: ssl_context } end - add_proxy(proxy) unless proxy.empty? || !proxy.dig(:address).is_a?(String) || !proxy.dig(:port).is_a?(Integer) + add_proxy(proxy) unless proxy.empty? || !proxy[:address].is_a?(String) || !proxy[:port].is_a?(Integer) add_timeout(timeout) unless timeout.empty? || (!timeout.key?(:per_operation) && !timeout.key?(:global)) end diff --git a/lib/ibm_cloud_sdk_core/detailed_response.rb b/lib/ibm_cloud_sdk_core/detailed_response.rb index 471a83c..a17ae0f 100644 --- a/lib/ibm_cloud_sdk_core/detailed_response.rb +++ b/lib/ibm_cloud_sdk_core/detailed_response.rb @@ -6,6 +6,7 @@ module IBMCloudSdkCore # Custom class for objects returned from API calls class DetailedResponse attr_reader :status, :headers, :result + def initialize(status: nil, headers: nil, body: nil, response: nil) if status.nil? || headers.nil? || body.nil? @status = response.code diff --git a/lib/ibm_cloud_sdk_core/token_managers/cp4d_token_manager.rb b/lib/ibm_cloud_sdk_core/token_managers/cp4d_token_manager.rb index 843496a..0e6b92b 100644 --- a/lib/ibm_cloud_sdk_core/token_managers/cp4d_token_manager.rb +++ b/lib/ibm_cloud_sdk_core/token_managers/cp4d_token_manager.rb @@ -3,7 +3,7 @@ require("http") require("json") require("rbconfig") -require_relative("./../version.rb") +require_relative("./../version") require_relative("./jwt_token_manager") module IBMCloudSdkCore diff --git a/lib/ibm_cloud_sdk_core/token_managers/iam_token_manager.rb b/lib/ibm_cloud_sdk_core/token_managers/iam_token_manager.rb index 8b927d5..9715567 100644 --- a/lib/ibm_cloud_sdk_core/token_managers/iam_token_manager.rb +++ b/lib/ibm_cloud_sdk_core/token_managers/iam_token_manager.rb @@ -3,7 +3,7 @@ require("http") require("json") require("rbconfig") -require_relative("./../version.rb") +require_relative("./../version") require_relative("./jwt_token_manager") module IBMCloudSdkCore @@ -17,6 +17,7 @@ class IAMTokenManager < JWTTokenManager TOKEN_NAME = "access_token" attr_accessor :token_info, :token_name, :client_id, :client_secret + def initialize( apikey: nil, url: nil, @@ -51,7 +52,7 @@ def request_token "response_type" => REQUEST_TOKEN_RESPONSE_TYPE } # @headers.add - response = request( + request( method: "POST", url: @url, headers: headers, @@ -59,7 +60,6 @@ def request_token username: @client_id, password: @client_secret ) - response end end end diff --git a/lib/ibm_cloud_sdk_core/token_managers/jwt_token_manager.rb b/lib/ibm_cloud_sdk_core/token_managers/jwt_token_manager.rb index a67c46a..bb3d44f 100644 --- a/lib/ibm_cloud_sdk_core/token_managers/jwt_token_manager.rb +++ b/lib/ibm_cloud_sdk_core/token_managers/jwt_token_manager.rb @@ -4,7 +4,7 @@ require("json") require("jwt") require("rbconfig") -require_relative("./../version.rb") +require_relative("./../version") module IBMCloudSdkCore # Class to manage JWT Token Authentication @@ -84,7 +84,7 @@ def request(method:, url:, headers: nil, params: nil, data: nil, username: nil, end return JSON.parse(response.body.to_s) if (200..299).cover?(response.code) - require_relative("./../api_exception.rb") + require_relative("./../api_exception") raise ApiException.new(response: response) end end diff --git a/lib/ibm_cloud_sdk_core/utils.rb b/lib/ibm_cloud_sdk_core/utils.rb index d6ae14a..b072141 100644 --- a/lib/ibm_cloud_sdk_core/utils.rb +++ b/lib/ibm_cloud_sdk_core/utils.rb @@ -13,7 +13,7 @@ def get_service_properties(service_name) end def check_bad_first_or_last_char(str) - return str.start_with?("{", "\"") || str.end_with?("}", "\"") unless str.nil? + str.start_with?("{", "\"") || str.end_with?("}", "\"") unless str.nil? end # checks if the provided value is truthy @@ -29,13 +29,13 @@ def load_from_credential_file(service_name, separator = "=") # Top-level directory of the project if credential_file_path.nil? - file_path = File.join(File.dirname(__FILE__), "/../../" + DEFAULT_CREDENTIALS_FILE_NAME) + file_path = File.join(File.dirname(__FILE__), "/../../#{DEFAULT_CREDENTIALS_FILE_NAME}") credential_file_path = file_path if File.exist?(file_path) end # Home directory if credential_file_path.nil? - file_path = ENV["HOME"] + "/" + DEFAULT_CREDENTIALS_FILE_NAME + file_path = "#{ENV["HOME"]}/#{DEFAULT_CREDENTIALS_FILE_NAME}" credential_file_path = file_path if File.exist?(file_path) end diff --git a/test/test_helper.rb b/test/test_helper.rb index b0bda00..4027f73 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -19,7 +19,7 @@ end require("minitest/autorun") -require_relative("./../lib/ibm_cloud_sdk_core.rb") +require_relative("./../lib/ibm_cloud_sdk_core") require("minitest/retry") Minitest::Retry.use! diff --git a/test/unit/test_base_service.rb b/test/unit/test_base_service.rb index 705bd2e..7108bd8 100644 --- a/test/unit/test_base_service.rb +++ b/test/unit/test_base_service.rb @@ -2,7 +2,7 @@ require("json") require("jwt") -require_relative("./../test_helper.rb") +require_relative("./../test_helper") require_relative("./../../lib/ibm_cloud_sdk_core/authenticators/basic_authenticator") require_relative("./../../lib/ibm_cloud_sdk_core/authenticators/config_based_authenticator_factory") require("webmock/minitest") @@ -135,7 +135,7 @@ def test_set_credentials_from_path_in_env_bearer_token end def test_vcap_services - ENV["VCAP_SERVICES"] = JSON.parse(File.read(Dir.getwd + "/resources/vcap-testing.json")).to_json + ENV["VCAP_SERVICES"] = JSON.parse(File.read("#{Dir.getwd}/resources/vcap-testing.json")).to_json authenticator = IBMCloudSdkCore::ConfigBasedAuthenticatorFactory.new.get_authenticator(service_name: "salah") service = IBMCloudSdkCore::BaseService.new(service_name: "salah", authenticator: authenticator) assert_equal(authenticator.username, "mo") @@ -144,7 +144,7 @@ def test_vcap_services end def test_dummy_request - ENV["VCAP_SERVICES"] = JSON.parse(File.read(Dir.getwd + "/resources/vcap-testing.json")).to_json + ENV["VCAP_SERVICES"] = JSON.parse(File.read("#{Dir.getwd}/resources/vcap-testing.json")).to_json stub_request(:get, "https://we.the.best/music") .with( headers: { @@ -167,7 +167,7 @@ def test_dummy_request_form_data ) service.service_url = "https://gateway.watsonplatform.net/assistant/api/" form_data = {} - file = File.open(Dir.getwd + "/resources/cnc_test.pdf") + file = File.open("#{Dir.getwd}/resources/cnc_test.pdf") filename = file.path if filename.nil? && file.respond_to?(:path) form_data[:file] = HTTP::FormData::File.new(file, content_type: "application/octet-stream", filename: filename) @@ -185,7 +185,7 @@ def test_dummy_request_form_data end def test_dummy_request_fails - ENV["VCAP_SERVICES"] = JSON.parse(File.read(Dir.getwd + "/resources/vcap-testing.json")).to_json + ENV["VCAP_SERVICES"] = JSON.parse(File.read("#{Dir.getwd}/resources/vcap-testing.json")).to_json response = { "code" => "500", "error" => "Oh no" @@ -262,7 +262,7 @@ def test_configure_service_using_credentials_in_vcap_match_outer_key authenticator: authenticator, service_name: "key_to_service_entry_1" ) - ENV["VCAP_SERVICES"] = JSON.parse(File.read(Dir.getwd + "/resources/vcap-testing.json")).to_json + ENV["VCAP_SERVICES"] = JSON.parse(File.read("#{Dir.getwd}/resources/vcap-testing.json")).to_json service.configure_service("key_to_service_entry_1") assert_equal("https://on.the.toolchainplatform.net/devops-insights/api", service.service_url) @@ -278,7 +278,7 @@ def test_configure_service_using_credentials_in_vcap_match_inner_key authenticator: authenticator, service_name: "devops_insights" ) - ENV["VCAP_SERVICES"] = JSON.parse(File.read(Dir.getwd + "/resources/vcap-testing.json")).to_json + ENV["VCAP_SERVICES"] = JSON.parse(File.read("#{Dir.getwd}/resources/vcap-testing.json")).to_json service.configure_service("devops_insights") assert_equal("https://ibmtesturl.net/devops_insights/api", service.service_url) @@ -294,7 +294,7 @@ def test_configure_service_using_credentials_in_vcap_no_matching_key authenticator: authenticator, service_name: "different_name_two" ) - ENV["VCAP_SERVICES"] = JSON.parse(File.read(Dir.getwd + "/resources/vcap-testing.json")).to_json + ENV["VCAP_SERVICES"] = JSON.parse(File.read("#{Dir.getwd}/resources/vcap-testing.json")).to_json service.configure_service("different_name_two") assert_equal("https://gateway.watsonplatform.net/different-name-two/api", service.service_url) @@ -310,7 +310,7 @@ def test_configure_service_using_credentials_in_vcap_empty_entry authenticator: authenticator, service_name: "empty_service" ) - ENV["VCAP_SERVICES"] = JSON.parse(File.read(Dir.getwd + "/resources/vcap-testing.json")).to_json + ENV["VCAP_SERVICES"] = JSON.parse(File.read("#{Dir.getwd}/resources/vcap-testing.json")).to_json service.configure_service("empty_service") assert_nil(service.service_url) @@ -326,7 +326,7 @@ def test_configure_service_using_credentials_in_vcap_no_creds authenticator: authenticator, service_name: "no-creds-service-two" ) - ENV["VCAP_SERVICES"] = JSON.parse(File.read(Dir.getwd + "/resources/vcap-testing.json")).to_json + ENV["VCAP_SERVICES"] = JSON.parse(File.read("#{Dir.getwd}/resources/vcap-testing.json")).to_json service.configure_service("no-creds-service-two") assert_nil(service.service_url) diff --git a/test/unit/test_configure_http_proxy.rb b/test/unit/test_configure_http_proxy.rb index 94efec6..196e4e9 100644 --- a/test/unit/test_configure_http_proxy.rb +++ b/test/unit/test_configure_http_proxy.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require("json") -require_relative("./../test_helper.rb") +require_relative("./../test_helper") require("webmock/minitest") WebMock.disable_net_connect!(allow_localhost: true) diff --git a/test/unit/test_cp4d_authenticator.rb b/test/unit/test_cp4d_authenticator.rb index ea9860f..5e1eb2e 100644 --- a/test/unit/test_cp4d_authenticator.rb +++ b/test/unit/test_cp4d_authenticator.rb @@ -2,7 +2,7 @@ require("json") require("jwt") -require_relative("./../test_helper.rb") +require_relative("./../test_helper") require_relative("./../../lib/ibm_cloud_sdk_core/authenticators/basic_authenticator") require_relative("./../../lib/ibm_cloud_sdk_core/authenticators/config_based_authenticator_factory") require("webmock/minitest") @@ -90,7 +90,7 @@ def test_cp4d_authenticator_authenticate refute_nil(authenticator) assert_equal(authenticator.instance_variable_get(:@token_manager).access_token, token) headers = {} - authenticated_headers = { "Authorization" => "Bearer " + token } + authenticated_headers = { "Authorization" => "Bearer #{token}" } authenticator.authenticate(headers) assert_equal(headers, authenticated_headers) end diff --git a/test/unit/test_cp4d_token_manager.rb b/test/unit/test_cp4d_token_manager.rb index cd3d855..03ddb1d 100644 --- a/test/unit/test_cp4d_token_manager.rb +++ b/test/unit/test_cp4d_token_manager.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require_relative("./../test_helper.rb") +require_relative("./../test_helper") require("webmock/minitest") WebMock.disable_net_connect!(allow_localhost: true) diff --git a/test/unit/test_detailed_response.rb b/test/unit/test_detailed_response.rb index 4ecda4f..5620aee 100644 --- a/test/unit/test_detailed_response.rb +++ b/test/unit/test_detailed_response.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require_relative("./../test_helper.rb") +require_relative("./../test_helper") require("webmock/minitest") require("http") diff --git a/test/unit/test_iam_authenticator.rb b/test/unit/test_iam_authenticator.rb index dbcd0e7..b4caef2 100644 --- a/test/unit/test_iam_authenticator.rb +++ b/test/unit/test_iam_authenticator.rb @@ -2,7 +2,7 @@ require("json") require("jwt") -require_relative("./../test_helper.rb") +require_relative("./../test_helper") require_relative("./../../lib/ibm_cloud_sdk_core/authenticators/basic_authenticator") require_relative("./../../lib/ibm_cloud_sdk_core/authenticators/config_based_authenticator_factory") require("webmock/minitest") @@ -136,7 +136,7 @@ def test_cp4d_authenticator_authenticate refute_nil(authenticator) assert_equal(authenticator.instance_variable_get(:@token_manager).access_token, token) headers = {} - authenticated_headers = { "Authorization" => "Bearer " + token } + authenticated_headers = { "Authorization" => "Bearer #{token}" } authenticator.authenticate(headers) assert_equal(headers, authenticated_headers) end diff --git a/test/unit/test_iam_token_manager.rb b/test/unit/test_iam_token_manager.rb index 650e7b8..da59349 100644 --- a/test/unit/test_iam_token_manager.rb +++ b/test/unit/test_iam_token_manager.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require_relative("./../test_helper.rb") +require_relative("./../test_helper") require("webmock/minitest") WebMock.disable_net_connect!(allow_localhost: true) diff --git a/test/unit/test_jwt_token_manager.rb b/test/unit/test_jwt_token_manager.rb index 0aeda04..d01990c 100644 --- a/test/unit/test_jwt_token_manager.rb +++ b/test/unit/test_jwt_token_manager.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require_relative("./../test_helper.rb") +require_relative("./../test_helper") require("jwt") require("webmock/minitest") diff --git a/test/unit/test_utils.rb b/test/unit/test_utils.rb index 7d4b326..107b3db 100644 --- a/test/unit/test_utils.rb +++ b/test/unit/test_utils.rb @@ -2,7 +2,7 @@ require("json") require("jwt") -require_relative("./../test_helper.rb") +require_relative("./../test_helper") require_relative("./../../lib/ibm_cloud_sdk_core/authenticators/basic_authenticator") require_relative("./../../lib/ibm_cloud_sdk_core/authenticators/config_based_authenticator_factory") require("webmock/minitest") @@ -93,7 +93,7 @@ def test_get_configuration_from_env end def test_get_configuration_from_vcap - ENV["VCAP_SERVICES"] = JSON.parse(File.read(Dir.getwd + "/resources/vcap-testing.json")).to_json + ENV["VCAP_SERVICES"] = JSON.parse(File.read("#{Dir.getwd}/resources/vcap-testing.json")).to_json # get properties config = get_service_properties("equals-sign-test") auth_type = config[:auth_type] unless config.nil?