thoughtbot/paperclip

View on GitHub
lib/paperclip/storage/s3.rb

Summary

Maintainability
D
1 day
Test Coverage

Module has too many lines. [275/100]
Open

    module S3
      def self.extended base
        begin
          require "aws-sdk-s3"
        rescue LoadError => e
Severity: Minor
Found in lib/paperclip/storage/s3.rb by rubocop

This cop checks if the length a module exceeds some maximum value. Comment lines can optionally be ignored. The maximum allowed length is configurable.

Assignment Branch Condition size for extended is too high. [71.72/15]
Open

      def self.extended base
        begin
          require "aws-sdk-s3"
        rescue LoadError => e
          e.message << " (You may need to install the aws-sdk-s3 gem)"
Severity: Minor
Found in lib/paperclip/storage/s3.rb by rubocop

This cop checks that the ABC size of methods is not higher than the configured maximum. The ABC size is based on assignments, branches (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric

Assignment Branch Condition size for flush_writes is too high. [30.48/15]
Open

      def flush_writes #:nodoc:
        @queued_for_write.each do |style, file|
        retries = 0
          begin
            log("saving #{path(style)}")
Severity: Minor
Found in lib/paperclip/storage/s3.rb by rubocop

This cop checks that the ABC size of methods is not higher than the configured maximum. The ABC size is based on assignments, branches (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric

Method flush_writes has a Cognitive Complexity of 23 (exceeds 5 allowed). Consider refactoring.
Open

      def flush_writes #:nodoc:
        @queued_for_write.each do |style, file|
        retries = 0
          begin
            log("saving #{path(style)}")
Severity: Minor
Found in lib/paperclip/storage/s3.rb - About 3 hrs to fix

Cognitive Complexity

Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

A method's cognitive complexity is based on a few simple rules:

  • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
  • Code is considered more complex for each "break in the linear flow of the code"
  • Code is considered more complex when "flow breaking structures are nested"

Further reading

Method extended has a Cognitive Complexity of 20 (exceeds 5 allowed). Consider refactoring.
Open

      def self.extended base
        begin
          require "aws-sdk-s3"
        rescue LoadError => e
          e.message << " (You may need to install the aws-sdk-s3 gem)"
Severity: Minor
Found in lib/paperclip/storage/s3.rb - About 2 hrs to fix

Cognitive Complexity

Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

A method's cognitive complexity is based on a few simple rules:

  • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
  • Code is considered more complex for each "break in the linear flow of the code"
  • Code is considered more complex when "flow breaking structures are nested"

Further reading

File s3.rb has 281 lines of code (exceeds 250 allowed). Consider refactoring.
Open

module Paperclip
  module Storage
    # Amazon's S3 file hosting service is a scalable, easy place to store files for
    # distribution. You can find out more about it at http://aws.amazon.com/s3
    #
Severity: Minor
Found in lib/paperclip/storage/s3.rb - About 2 hrs to fix

    Assignment Branch Condition size for s3_interface is too high. [23.02/15]
    Open

          def s3_interface
            @s3_interface ||= begin
              config = { region: s3_region }
    
              if using_http_proxy?
    Severity: Minor
    Found in lib/paperclip/storage/s3.rb by rubocop

    This cop checks that the ABC size of methods is not higher than the configured maximum. The ABC size is based on assignments, branches (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric

    Method extended has 47 lines of code (exceeds 25 allowed). Consider refactoring.
    Open

          def self.extended base
            begin
              require "aws-sdk-s3"
            rescue LoadError => e
              e.message << " (You may need to install the aws-sdk-s3 gem)"
    Severity: Minor
    Found in lib/paperclip/storage/s3.rb - About 1 hr to fix

      Method flush_writes has 38 lines of code (exceeds 25 allowed). Consider refactoring.
      Open

            def flush_writes #:nodoc:
              @queued_for_write.each do |style, file|
              retries = 0
                begin
                  log("saving #{path(style)}")
      Severity: Minor
      Found in lib/paperclip/storage/s3.rb - About 1 hr to fix

        Block has too many lines. [34/25]
        Open

                @queued_for_write.each do |style, file|
                retries = 0
                  begin
                    log("saving #{path(style)}")
                    write_options = {
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cop checks if the length of a block exceeds some maximum value. Comment lines can optionally be ignored. The maximum allowed length is configurable. The cop can be configured to ignore blocks passed to certain methods.

        Use write_options[:storage_class] = storage_class instead of write_options.merge!(:storage_class => storage_class).
        Open

                    write_options.merge!(:storage_class => storage_class) if storage_class
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cop identifies places where Hash#merge! can be replaced by Hash#[]=.

        Example:

        hash.merge!(a: 1)
        hash.merge!({'key' => 'value'})
        hash.merge!(a: 1, b: 2)

        Similar blocks of code found in 2 locations. Consider refactoring.
        Open

                Paperclip.interpolates(:s3_path_url) do |attachment, style|
                  "#{attachment.s3_protocol(style, true)}//#{attachment.s3_host_name}/#{attachment.bucket_name}/#{attachment.path(style).sub(%r{\A/}, "".freeze)}"
                end unless Paperclip::Interpolations.respond_to? :s3_path_url
                Paperclip.interpolates(:s3_domain_url) do |attachment, style|
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb and 1 other location - About 30 mins to fix
        lib/paperclip/storage/s3.rb on lines 173..176

        Duplicated Code

        Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

        Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

        When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

        Tuning

        This issue has a mass of 33.

        We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

        The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

        If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

        See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

        Refactorings

        Further Reading

        Similar blocks of code found in 2 locations. Consider refactoring.
        Open

                Paperclip.interpolates(:s3_domain_url) do |attachment, style|
                  "#{attachment.s3_protocol(style, true)}//#{attachment.bucket_name}.#{attachment.s3_host_name}/#{attachment.path(style).sub(%r{\A/}, "".freeze)}"
                end unless Paperclip::Interpolations.respond_to? :s3_domain_url
                Paperclip.interpolates(:asset_host) do |attachment, style|
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb and 1 other location - About 30 mins to fix
        lib/paperclip/storage/s3.rb on lines 170..173

        Duplicated Code

        Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

        Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

        When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

        Tuning

        This issue has a mass of 33.

        We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

        The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

        If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

        See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

        Refactorings

        Further Reading

        Line is too long. [88/80]
        Open

            #   method #instance is available on the attachment which will take you back to your
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Use the new Ruby 1.9 hash syntax.
        Open

                      :acl => s3_permissions(style)
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cop checks hash literal syntax.

        It can enforce either the use of the class hash rocket syntax or the use of the newer Ruby 1.9 syntax (when applicable).

        A separate offense is registered for each problematic pair.

        The supported styles are:

        • ruby19 - forces use of the 1.9 syntax (e.g. {a: 1}) when hashes have all symbols for keys
        • hash_rockets - forces use of hash rockets for all hashes
        • nomixedkeys - simply checks for hashes with mixed syntaxes
        • ruby19nomixed_keys - forces use of ruby 1.9 syntax and forbids mixed syntax hashes

        Example: EnforcedStyle: ruby19 (default)

        # bad
        {:a => 2}
        {b: 1, :c => 2}
        
        # good
        {a: 2, b: 1}
        {:c => 2, 'd' => 2} # acceptable since 'd' isn't a symbol
        {d: 1, 'e' => 2} # technically not forbidden

        Example: EnforcedStyle: hash_rockets

        # bad
        {a: 1, b: 2}
        {c: 1, 'd' => 5}
        
        # good
        {:a => 1, :b => 2}

        Example: EnforcedStyle: nomixedkeys

        # bad
        {:a => 1, b: 2}
        {c: 1, 'd' => 2}
        
        # good
        {:a => 1, :b => 2}
        {c: 1, d: 2}

        Example: EnforcedStyle: ruby19nomixed_keys

        # bad
        {:a => 1, :b => 2}
        {c: 2, 'd' => 3} # should just use hash rockets
        
        # good
        {a: 1, b: 2}
        {:c => 3, 'd' => 4}

        Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.
        Open

                path(style_name).sub(%r{\A/},'')
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Checks if uses of quotes match the configured preference.

        Example: EnforcedStyle: single_quotes (default)

        # bad
        "No special symbols"
        "No string interpolation"
        "Just text"
        
        # good
        'No special symbols'
        'No string interpolation'
        'Just text'
        "Wait! What's #{this}!"

        Example: EnforcedStyle: double_quotes

        # bad
        'Just some text'
        'No special chars or interpolation'
        
        # good
        "Just some text"
        "No special chars or interpolation"
        "Every string in #{project} uses double_quotes"

        Align sub with attachment.path(style). on line 164.
        Open

                    sub(%r{\A/}, "".freeze)
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cop checks the indentation of the method name part in method calls that span more than one line.

        Example: EnforcedStyle: aligned

        # bad
        while myvariable
        .b
          # do something
        end
        
        # good
        while myvariable
              .b
          # do something
        end
        
        # good
        Thing.a
             .b
             .c

        Example: EnforcedStyle: indented

        # good
        while myvariable
          .b
        
          # do something
        end

        Example: EnforcedStyle: indentedrelativeto_receiver

        # good
        while myvariable
                .a
                .b
        
          # do something
        end
        
        # good
        myvariable = Thing
                       .a
                       .b
                       .c

        Line is too long. [81/80]
        Open

            # * +s3_headers+: A hash of headers or a Proc. You may specify a hash such as
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [94/80]
        Open

            #   the domain-style (:s3_domain_url). Anything else here will be treated like path-style.
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [86/80]
        Open

            #   Paperclip will attempt to create it. The bucket name will not be interpolated.
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [82/80]
        Open

            #   link in the +url+ entry for more information about S3 domains and buckets.
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [86/80]
        Open

            #   upload request. Can be defined both globally and within a style-specific hash.
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [88/80]
        Open

            #   to interpolate. Keys should be unique, like filenames, and despite the fact that
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Favor a normal unless-statement over a modifier clause in a multiline statement.
        Open

                Paperclip.interpolates(:asset_host) do |attachment, style|
                  "#{attachment.path(style).sub(%r{\A/}, "".freeze)}"
                end unless Paperclip::Interpolations.respond_to? :asset_host
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Checks for uses of if/unless modifiers with multiple-lines bodies.

        Example:

        # bad
        {
          result: 'this should not happen'
        } unless cond
        
        # good
        { result: 'ok' } if cond

        Line is too long. [81/80]
        Open

                  @options[:url] = @options[:url].inspect if @options[:url].is_a?(Symbol)
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [82/80]
        Open

                    write_options.merge!(:storage_class => storage_class) if storage_class
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [81/80]
        Open

                      write_options[:server_side_encryption] = @s3_server_side_encryption
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Use the new Ruby 1.9 hash syntax.
        Open

                    write_options.merge!(:storage_class => storage_class) if storage_class
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cop checks hash literal syntax.

        It can enforce either the use of the class hash rocket syntax or the use of the newer Ruby 1.9 syntax (when applicable).

        A separate offense is registered for each problematic pair.

        The supported styles are:

        • ruby19 - forces use of the 1.9 syntax (e.g. {a: 1}) when hashes have all symbols for keys
        • hash_rockets - forces use of hash rockets for all hashes
        • nomixedkeys - simply checks for hashes with mixed syntaxes
        • ruby19nomixed_keys - forces use of ruby 1.9 syntax and forbids mixed syntax hashes

        Example: EnforcedStyle: ruby19 (default)

        # bad
        {:a => 2}
        {b: 1, :c => 2}
        
        # good
        {a: 2, b: 1}
        {:c => 2, 'd' => 2} # acceptable since 'd' isn't a symbol
        {d: 1, 'e' => 2} # technically not forbidden

        Example: EnforcedStyle: hash_rockets

        # bad
        {a: 1, b: 2}
        {c: 1, 'd' => 5}
        
        # good
        {:a => 1, :b => 2}

        Example: EnforcedStyle: nomixedkeys

        # bad
        {:a => 1, b: 2}
        {c: 1, 'd' => 2}
        
        # good
        {:a => 1, :b => 2}
        {c: 1, d: 2}

        Example: EnforcedStyle: ruby19nomixed_keys

        # bad
        {:a => 1, :b => 2}
        {c: 2, 'd' => 3} # should just use hash rockets
        
        # good
        {a: 1, b: 2}
        {:c => 3, 'd' => 4}

        Prefer single-quoted strings inside interpolations.
        Open

                  "#{attachment.s3_protocol(style, true)}//#{attachment.s3_host_name}/#{attachment.bucket_name}/#{attachment.path(style).sub(%r{\A/}, "".freeze)}"
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cop checks that quotes inside the string interpolation match the configured preference.

        Example: EnforcedStyle: single_quotes (default)

        # bad
        result = "Tests #{success ? "PASS" : "FAIL"}"
        
        # good
        result = "Tests #{success ? 'PASS' : 'FAIL'}"

        Example: EnforcedStyle: double_quotes

        # bad
        result = "Tests #{success ? 'PASS' : 'FAIL'}"
        
        # good
        result = "Tests #{success ? "PASS" : "FAIL"}"

        Prefer using YAML.safe_load over YAML.load.
        Open

                  YAML::load(ERB.new(File.read(creds)).result)
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cop checks for the use of YAML class methods which have potential security issues leading to remote code execution when loading from an untrusted source.

        Example:

        # bad
        YAML.load("--- foo")
        
        # good
        YAML.safe_load("--- foo")
        YAML.dump("foo")

        Align join with attachment.path(style). on line 164.
        Open

                    join("/").
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cop checks the indentation of the method name part in method calls that span more than one line.

        Example: EnforcedStyle: aligned

        # bad
        while myvariable
        .b
          # do something
        end
        
        # good
        while myvariable
              .b
          # do something
        end
        
        # good
        Thing.a
             .b
             .c

        Example: EnforcedStyle: indented

        # good
        while myvariable
          .b
        
          # do something
        end

        Example: EnforcedStyle: indentedrelativeto_receiver

        # good
        while myvariable
                .a
                .b
        
          # do something
        end
        
        # good
        myvariable = Thing
                       .a
                       .b
                       .c

        Space inside parentheses detected.
        Open

                      merge_s3_headers( style_specific_options[:s3_headers], @s3_headers, @s3_metadata) if style_specific_options[:s3_headers]
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Checks for spaces inside ordinary round parentheses.

        Example:

        # bad
        f( 3)
        g = (a + 3 )
        
        # good
        f(3)
        g = (a + 3)

        Line is too long. [89/80]
        Open

            #   to a YAML file containing the +access_key_id+ and +secret_access_key+ that Amazon
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [85/80]
        Open

            #   put your bucket name in this file, instead of adding it to the code directly.
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [89/80]
        Open

            #   You can define the bucket as a Proc if you want to determine its name at runtime.
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Use the new Ruby 1.9 hash syntax.
        Open

                permissions = { :default => permissions } unless permissions.respond_to?(:merge)
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cop checks hash literal syntax.

        It can enforce either the use of the class hash rocket syntax or the use of the newer Ruby 1.9 syntax (when applicable).

        A separate offense is registered for each problematic pair.

        The supported styles are:

        • ruby19 - forces use of the 1.9 syntax (e.g. {a: 1}) when hashes have all symbols for keys
        • hash_rockets - forces use of hash rockets for all hashes
        • nomixedkeys - simply checks for hashes with mixed syntaxes
        • ruby19nomixed_keys - forces use of ruby 1.9 syntax and forbids mixed syntax hashes

        Example: EnforcedStyle: ruby19 (default)

        # bad
        {:a => 2}
        {b: 1, :c => 2}
        
        # good
        {a: 2, b: 1}
        {:c => 2, 'd' => 2} # acceptable since 'd' isn't a symbol
        {d: 1, 'e' => 2} # technically not forbidden

        Example: EnforcedStyle: hash_rockets

        # bad
        {a: 1, b: 2}
        {c: 1, 'd' => 5}
        
        # good
        {:a => 1, :b => 2}

        Example: EnforcedStyle: nomixedkeys

        # bad
        {:a => 1, b: 2}
        {c: 1, 'd' => 2}
        
        # good
        {:a => 1, :b => 2}
        {c: 1, d: 2}

        Example: EnforcedStyle: ruby19nomixed_keys

        # bad
        {:a => 1, :b => 2}
        {c: 2, 'd' => 3} # should just use hash rockets
        
        # good
        {a: 1, b: 2}
        {:c => 3, 'd' => 4}

        Space inside } missing.
        Open

                storage_class = {:default => storage_class} unless storage_class.respond_to?(:merge)
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Checks that braces used for hash literals have or don't have surrounding space depending on configuration.

        Example: EnforcedStyle: space

        # The `space` style enforces that hash literals have
        # surrounding space.
        
        # bad
        h = {a: 1, b: 2}
        
        # good
        h = { a: 1, b: 2 }

        Example: EnforcedStyle: no_space

        # The `no_space` style enforces that hash literals have
        # no surrounding space.
        
        # bad
        h = { a: 1, b: 2 }
        
        # good
        h = {a: 1, b: 2}

        Example: EnforcedStyle: compact

        # The `compact` style normally requires a space inside
        # hash braces, with the exception that successive left
        # braces or right braces are collapsed together in nested hashes.
        
        # bad
        h = { a: { b: 2 } }
        
        # good
        h = { a: { b: 2 }}

        Line is too long. [90/80]
        Open

            #   When using a Proc it provides a single parameter which is the attachment itself. A
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [89/80]
        Open

            #                         :s3_credentials => Proc.new{|a| a.instance.s3_credentials }
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [87/80]
        Open

                @s3_host_alias = @s3_host_alias.call(self) if @s3_host_alias.respond_to?(:call)
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [111/80]
        Open

                      @s3_metadata.merge!(style_specific_options[:s3_metadata]) if style_specific_options[:s3_metadata]
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Use the new Ruby 1.9 hash syntax.
        Open

                storage_class = {:default => storage_class} unless storage_class.respond_to?(:merge)
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cop checks hash literal syntax.

        It can enforce either the use of the class hash rocket syntax or the use of the newer Ruby 1.9 syntax (when applicable).

        A separate offense is registered for each problematic pair.

        The supported styles are:

        • ruby19 - forces use of the 1.9 syntax (e.g. {a: 1}) when hashes have all symbols for keys
        • hash_rockets - forces use of hash rockets for all hashes
        • nomixedkeys - simply checks for hashes with mixed syntaxes
        • ruby19nomixed_keys - forces use of ruby 1.9 syntax and forbids mixed syntax hashes

        Example: EnforcedStyle: ruby19 (default)

        # bad
        {:a => 2}
        {b: 1, :c => 2}
        
        # good
        {a: 2, b: 1}
        {:c => 2, 'd' => 2} # acceptable since 'd' isn't a symbol
        {d: 1, 'e' => 2} # technically not forbidden

        Example: EnforcedStyle: hash_rockets

        # bad
        {a: 1, b: 2}
        {c: 1, 'd' => 5}
        
        # good
        {:a => 1, :b => 2}

        Example: EnforcedStyle: nomixedkeys

        # bad
        {:a => 1, b: 2}
        {c: 1, 'd' => 2}
        
        # good
        {:a => 1, :b => 2}
        {c: 1, d: 2}

        Example: EnforcedStyle: ruby19nomixed_keys

        # bad
        {:a => 1, :b => 2}
        {c: 2, 'd' => 3} # should just use hash rockets
        
        # good
        {a: 1, b: 2}
        {:c => 3, 'd' => 4}

        Use def with parentheses when there are parameters.
        Open

              def s3_object style_name = default_style
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cops checks for parentheses around the arguments in method definitions. Both instance and class/singleton methods are checked.

        Example: EnforcedStyle: require_parentheses (default)

        # The `require_parentheses` style requires method definitions
        # to always use parentheses
        
        # bad
        def bar num1, num2
          num1 + num2
        end
        
        def foo descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name
          do_something
        end
        
        # good
        def bar(num1, num2)
          num1 + num2
        end
        
        def foo(descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name)
          do_something
        end

        Example: EnforcedStyle: requirenoparentheses

        # The `require_no_parentheses` style requires method definitions
        # to never use parentheses
        
        # bad
        def bar(num1, num2)
          num1 + num2
        end
        
        def foo(descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name)
          do_something
        end
        
        # good
        def bar num1, num2
          num1 + num2
        end
        
        def foo descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name
          do_something
        end

        Example: EnforcedStyle: requirenoparenthesesexceptmultiline

        # The `require_no_parentheses_except_multiline` style prefers no
        # parantheses when method definition arguments fit on single line,
        # but prefers parantheses when arguments span multiple lines.
        
        # bad
        def bar(num1, num2)
          num1 + num2
        end
        
        def foo descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name
          do_something
        end
        
        # good
        def bar num1, num2
          num1 + num2
        end
        
        def foo(descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name)
          do_something
        end

        Use 2 (not 0) spaces for indentation.
        Open

                retries = 0
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cops checks for indentation that doesn't use the specified number of spaces.

        See also the IndentationConsistency cop which is the companion to this one.

        Example:

        # bad
        class A
         def test
          puts 'hello'
         end
        end
        
        # good
        class A
          def test
            puts 'hello'
          end
        end

        Example: IgnoredPatterns: ['^\s*module']

        # bad
        module A
        class B
          def test
          puts 'hello'
          end
        end
        end
        
        # good
        module A
        class B
          def test
            puts 'hello'
          end
        end
        end

        Space inside { missing.
        Open

                storage_class = {:default => storage_class} unless storage_class.respond_to?(:merge)
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Checks that braces used for hash literals have or don't have surrounding space depending on configuration.

        Example: EnforcedStyle: space

        # The `space` style enforces that hash literals have
        # surrounding space.
        
        # bad
        h = {a: 1, b: 2}
        
        # good
        h = { a: 1, b: 2 }

        Example: EnforcedStyle: no_space

        # The `no_space` style enforces that hash literals have
        # no surrounding space.
        
        # bad
        h = { a: 1, b: 2 }
        
        # good
        h = {a: 1, b: 2}

        Example: EnforcedStyle: compact

        # The `compact` style normally requires a space inside
        # hash braces, with the exception that successive left
        # braces or right braces are collapsed together in nested hashes.
        
        # bad
        h = { a: { b: 2 } }
        
        # good
        h = { a: { b: 2 }}

        Line is too long. [83/80]
        Open

            # Amazon's S3 file hosting service is a scalable, easy place to store files for
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [95/80]
        Open

            # * +s3_credentials+: Takes a path, a File, a Hash or a Proc. The path (or File) must point
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [84/80]
        Open

            #   runtime. Paperclip will call that Proc with attachment as the only argument.
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [88/80]
        Open

            #   S3 domain of your bucket. Used with the :s3_alias_url url interpolation. See the
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Use the new Ruby 1.9 hash syntax.
        Open

                    proxy_opts = { :host => http_proxy_host }
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cop checks hash literal syntax.

        It can enforce either the use of the class hash rocket syntax or the use of the newer Ruby 1.9 syntax (when applicable).

        A separate offense is registered for each problematic pair.

        The supported styles are:

        • ruby19 - forces use of the 1.9 syntax (e.g. {a: 1}) when hashes have all symbols for keys
        • hash_rockets - forces use of hash rockets for all hashes
        • nomixedkeys - simply checks for hashes with mixed syntaxes
        • ruby19nomixed_keys - forces use of ruby 1.9 syntax and forbids mixed syntax hashes

        Example: EnforcedStyle: ruby19 (default)

        # bad
        {:a => 2}
        {b: 1, :c => 2}
        
        # good
        {a: 2, b: 1}
        {:c => 2, 'd' => 2} # acceptable since 'd' isn't a symbol
        {d: 1, 'e' => 2} # technically not forbidden

        Example: EnforcedStyle: hash_rockets

        # bad
        {a: 1, b: 2}
        {c: 1, 'd' => 5}
        
        # good
        {:a => 1, :b => 2}

        Example: EnforcedStyle: nomixedkeys

        # bad
        {:a => 1, b: 2}
        {c: 1, 'd' => 2}
        
        # good
        {:a => 1, :b => 2}
        {c: 1, d: 2}

        Example: EnforcedStyle: ruby19nomixed_keys

        # bad
        {:a => 1, :b => 2}
        {c: 2, 'd' => 3} # should just use hash rockets
        
        # good
        {a: 1, b: 2}
        {:c => 3, 'd' => 4}

        Space missing after comma.
        Open

                    s3_headers[name.to_s.downcase.sub(/\Ax-amz-/,'').tr("-","_").to_sym] = value
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Checks for comma (,) not followed by some kind of space.

        Example:

        # bad
        [1,2]
        { foo:bar,}
        
        # good
        [1, 2]
        { foo:bar, }

        Operator || should be surrounded by a single space.
        Open

                  @s3_options     = @options[:s3_options]     || {}
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Checks that operators have space around them, except for ** which should not have surrounding space.

        Example:

        # bad
        total = 3*4
        "apple"+"juice"
        my_number = 38/4
        a ** b
        
        # good
        total = 3 * 4
        "apple" + "juice"
        my_number = 38 / 4
        a**b

        Space around operator ** detected.
        Open

                      sleep((2 ** retries) * 0.5)
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Checks that operators have space around them, except for ** which should not have surrounding space.

        Example:

        # bad
        total = 3*4
        "apple"+"juice"
        my_number = 38/4
        a ** b
        
        # good
        total = 3 * 4
        "apple" + "juice"
        my_number = 38 / 4
        a**b

        Useless assignment to variable - e.
        Open

              rescue Aws::Errors::ServiceError => e
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cop checks for every useless assignment to local variable in every scope. The basic idea for this cop was from the warning of ruby -cw:

        assigned but unused variable - foo

        Currently this cop has advanced logic that detects unreferenced reassignments and properly handles varied cases such as branch, loop, rescue, ensure, etc.

        Example:

        # bad
        
        def some_method
          some_var = 1
          do_something
        end

        Example:

        # good
        
        def some_method
          some_var = 1
          do_something(some_var)
        end

        Line is too long. [92/80]
        Open

            #   that the bucket must be unique across all of Amazon S3. If the bucket does not exist
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [94/80]
        Open

                s3_permissions = s3_permissions.call(self, style) if s3_permissions.respond_to?(:call)
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [84/80]
        Open

            # * +s3_permissions+: This is a String that should be one of the "canned" access
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [94/80]
        Open

            #   placed domain-style (bucket.s3.amazonaws.com) or path-style (s3.amazonaws.com/bucket).
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [93/80]
        Open

            #     alias, the :bucket parameter is ignored, as the hostname is used as the bucket name
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [87/80]
        Open

            #   In which case, those access keys will be used in all environments. You can also
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [93/80]
        Open

            #   {'Expires' => 1.year.from_now.httpdate}. If you use a Proc, headers are determined at
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [81/80]
        Open

            #   You can also specify a CNAME (which requires the CNAME to be specified as
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [82/80]
        Open

                warn("#{e} - cannot copy #{path(style)} to local file #{local_dest_path}")
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [87/80]
        Open

                  raise ArgumentError, "Credentials given are not a path, file, proc, or hash."
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Prefer single-quoted strings inside interpolations.
        Open

                  "#{attachment.s3_protocol(style, true)}//#{attachment.bucket_name}.#{attachment.s3_host_name}/#{attachment.path(style).sub(%r{\A/}, "".freeze)}"
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cop checks that quotes inside the string interpolation match the configured preference.

        Example: EnforcedStyle: single_quotes (default)

        # bad
        result = "Tests #{success ? "PASS" : "FAIL"}"
        
        # good
        result = "Tests #{success ? 'PASS' : 'FAIL'}"

        Example: EnforcedStyle: double_quotes

        # bad
        result = "Tests #{success ? 'PASS' : 'FAIL'}"
        
        # good
        result = "Tests #{success ? "PASS" : "FAIL"}"

        Prefer to_s over string interpolation.
        Open

                  "#{attachment.path(style).sub(%r{\A/}, "".freeze)}"
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cop checks for strings that are just an interpolated expression.

        Example:

        # bad
        "#{@var}"
        
        # good
        @var.to_s
        
        # good if @var is already a String
        @var

        Useless assignment to variable - e.
        Open

                  rescue Aws::Errors::ServiceError => e
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cop checks for every useless assignment to local variable in every scope. The basic idea for this cop was from the warning of ruby -cw:

        assigned but unused variable - foo

        Currently this cop has advanced logic that detects unreferenced reassignments and properly handles varied cases such as branch, loop, rescue, ensure, etc.

        Example:

        # bad
        
        def some_method
          some_var = 1
          do_something
        end

        Example:

        # good
        
        def some_method
          some_var = 1
          do_something(some_var)
        end

        Line is too long. [92/80]
        Open

            #   Normally, this won't matter in the slightest and you can leave the default (which is
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [92/80]
        Open

            #     by S3. The fourth option for the S3 url is :asset_host, which uses Rails' built-in
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [88/80]
        Open

                    s3_headers[name.to_s.downcase.sub(/\Ax-amz-/,'').tr("-","_").to_sym] = value
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Use the new Ruby 1.9 hash syntax.
        Open

                      :content_type => file.content_type,
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cop checks hash literal syntax.

        It can enforce either the use of the class hash rocket syntax or the use of the newer Ruby 1.9 syntax (when applicable).

        A separate offense is registered for each problematic pair.

        The supported styles are:

        • ruby19 - forces use of the 1.9 syntax (e.g. {a: 1}) when hashes have all symbols for keys
        • hash_rockets - forces use of hash rockets for all hashes
        • nomixedkeys - simply checks for hashes with mixed syntaxes
        • ruby19nomixed_keys - forces use of ruby 1.9 syntax and forbids mixed syntax hashes

        Example: EnforcedStyle: ruby19 (default)

        # bad
        {:a => 2}
        {b: 1, :c => 2}
        
        # good
        {a: 2, b: 1}
        {:c => 2, 'd' => 2} # acceptable since 'd' isn't a symbol
        {d: 1, 'e' => 2} # technically not forbidden

        Example: EnforcedStyle: hash_rockets

        # bad
        {a: 1, b: 2}
        {c: 1, 'd' => 5}
        
        # good
        {:a => 1, :b => 2}

        Example: EnforcedStyle: nomixedkeys

        # bad
        {:a => 1, b: 2}
        {c: 1, 'd' => 2}
        
        # good
        {:a => 1, :b => 2}
        {c: 1, d: 2}

        Example: EnforcedStyle: ruby19nomixed_keys

        # bad
        {:a => 1, :b => 2}
        {c: 2, 'd' => 3} # should just use hash rockets
        
        # good
        {a: 1, b: 2}
        {:c => 3, 'd' => 4}

        Inconsistent indentation detected.
        Open

                  begin
                    log("saving #{path(style)}")
                    write_options = {
                      :content_type => file.content_type,
                      :acl => s3_permissions(style)
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cops checks for inconsistent indentation.

        Example:

        class A
          def test
            puts 'hello'
             puts 'world'
          end
        end

        Space missing after comma.
        Open

                    s3_headers[name.to_s.downcase.sub(/\Ax-amz-/,'').tr("-","_").to_sym] = value
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Checks for comma (,) not followed by some kind of space.

        Example:

        # bad
        [1,2]
        { foo:bar,}
        
        # good
        [1, 2]
        { foo:bar, }

        Line is too long. [88/80]
        Open

            # * +s3_host_alias+: The fully-qualified domain name (FQDN) that is the alias to the
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [86/80]
        Open

            # * +path+: This is the key under the bucket in which the file will be stored. The
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [88/80]
        Open

            #   Other storage classes, such as <tt>:STANDARD_IA</tt>, are also available—see the
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [100/80]
        Open

                  unless @options[:url].to_s.match(/\A:s3.*url\z/) || @options[:url] == ":asset_host".freeze
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [134/80]
        Open

                      merge_s3_headers( style_specific_options[:s3_headers], @s3_headers, @s3_metadata) if style_specific_options[:s3_headers]
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [85/80]
        Open

                http_headers = http_headers.call(instance) if http_headers.respond_to?(:call)
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Use || instead of or.
        Open

                @bucket or raise ArgumentError, "missing required :bucket option"
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cop checks for uses of and and or, and suggests using && and || instead. It can be configured to check only in conditions, or in all contexts.

        Example: EnforcedStyle: always (default)

        # bad
        foo.save and return
        
        # bad
        if foo and bar
        end
        
        # good
        foo.save && return
        
        # good
        if foo && bar
        end

        Example: EnforcedStyle: conditionals

        # bad
        if foo and bar
        end
        
        # good
        foo.save && return
        
        # good
        foo.save and return
        
        # good
        if foo && bar
        end

        Use the new Ruby 1.9 hash syntax.
        Open

                permissions.merge :default => (permissions[:default] || :"public-read")
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cop checks hash literal syntax.

        It can enforce either the use of the class hash rocket syntax or the use of the newer Ruby 1.9 syntax (when applicable).

        A separate offense is registered for each problematic pair.

        The supported styles are:

        • ruby19 - forces use of the 1.9 syntax (e.g. {a: 1}) when hashes have all symbols for keys
        • hash_rockets - forces use of hash rockets for all hashes
        • nomixedkeys - simply checks for hashes with mixed syntaxes
        • ruby19nomixed_keys - forces use of ruby 1.9 syntax and forbids mixed syntax hashes

        Example: EnforcedStyle: ruby19 (default)

        # bad
        {:a => 2}
        {b: 1, :c => 2}
        
        # good
        {a: 2, b: 1}
        {:c => 2, 'd' => 2} # acceptable since 'd' isn't a symbol
        {d: 1, 'e' => 2} # technically not forbidden

        Example: EnforcedStyle: hash_rockets

        # bad
        {a: 1, b: 2}
        {c: 1, 'd' => 5}
        
        # good
        {:a => 1, :b => 2}

        Example: EnforcedStyle: nomixedkeys

        # bad
        {:a => 1, b: 2}
        {c: 1, 'd' => 2}
        
        # good
        {:a => 1, :b => 2}
        {c: 1, d: 2}

        Example: EnforcedStyle: ruby19nomixed_keys

        # bad
        {:a => 1, :b => 2}
        {c: 2, 'd' => 3} # should just use hash rockets
        
        # good
        {a: 1, b: 2}
        {:c => 3, 'd' => 4}

        Favor a normal unless-statement over a modifier clause in a multiline statement.
        Open

                Paperclip.interpolates(:s3_alias_url) do |attachment, style|
                  protocol = attachment.s3_protocol(style, true)
                  host = attachment.s3_host_alias
                  path = attachment.path(style).
                    split("/")[attachment.s3_prefixes_in_alias..-1].
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Checks for uses of if/unless modifiers with multiple-lines bodies.

        Example:

        # bad
        {
          result: 'this should not happen'
        } unless cond
        
        # good
        { result: 'ok' } if cond

        Favor a normal unless-statement over a modifier clause in a multiline statement.
        Open

                Paperclip.interpolates(:s3_path_url) do |attachment, style|
                  "#{attachment.s3_protocol(style, true)}//#{attachment.s3_host_name}/#{attachment.bucket_name}/#{attachment.path(style).sub(%r{\A/}, "".freeze)}"
                end unless Paperclip::Interpolations.respond_to? :s3_path_url
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Checks for uses of if/unless modifiers with multiple-lines bodies.

        Example:

        # bad
        {
          result: 'this should not happen'
        } unless cond
        
        # good
        { result: 'ok' } if cond

        Avoid comma after the last parameter of a method call.
        Open

                    base_options.merge(s3_url_options),
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cop checks for trailing comma in argument lists.

        Example: EnforcedStyleForMultiline: consistent_comma

        # bad
        method(1, 2,)
        
        # good
        method(
          1, 2,
          3,
        )
        
        # good
        method(
          1,
          2,
        )

        Example: EnforcedStyleForMultiline: comma

        # bad
        method(1, 2,)
        
        # good
        method(
          1,
          2,
        )

        Example: EnforcedStyleForMultiline: no_comma (default)

        # bad
        method(1, 2,)
        
        # good
        method(
          1,
          2
        )

        Prefer using YAML.safe_load over YAML.load.
        Open

                  YAML::load(ERB.new(File.read(creds.path)).result)
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cop checks for the use of YAML class methods which have potential security issues leading to remote code execution when loading from an untrusted source.

        Example:

        # bad
        YAML.load("--- foo")
        
        # good
        YAML.safe_load("--- foo")
        YAML.dump("foo")

        Align split with attachment.path(style). on line 164.
        Open

                    split("/")[attachment.s3_prefixes_in_alias..-1].
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cop checks the indentation of the method name part in method calls that span more than one line.

        Example: EnforcedStyle: aligned

        # bad
        while myvariable
        .b
          # do something
        end
        
        # good
        while myvariable
              .b
          # do something
        end
        
        # good
        Thing.a
             .b
             .c

        Example: EnforcedStyle: indented

        # good
        while myvariable
          .b
        
          # do something
        end

        Example: EnforcedStyle: indentedrelativeto_receiver

        # good
        while myvariable
                .a
                .b
        
          # do something
        end
        
        # good
        myvariable = Thing
                       .a
                       .b
                       .c

        Space missing after comma.
        Open

                http_headers.inject({}) do |headers,(name,value)|
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Checks for comma (,) not followed by some kind of space.

        Example:

        # bad
        [1,2]
        { foo:bar,}
        
        # good
        [1, 2]
        { foo:bar, }

        Space missing after comma.
        Open

                http_headers.inject({}) do |headers,(name,value)|
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Checks for comma (,) not followed by some kind of space.

        Example:

        # bad
        [1,2]
        { foo:bar,}
        
        # good
        [1, 2]
        { foo:bar, }

        Unused block argument - headers. If it's necessary, use _ or _headers as an argument name to indicate that it won't be used.
        Open

                http_headers.inject({}) do |headers,(name,value)|
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cop checks for unused block arguments.

        Example:

        # bad
        
        do_something do |used, unused|
          puts used
        end
        
        do_something do |bar|
          puts :foo
        end
        
        define_method(:foo) do |bar|
          puts :baz
        end

        Example:

        #good
        
        do_something do |used, _unused|
          puts used
        end
        
        do_something do
          puts :foo
        end
        
        define_method(:foo) do |_bar|
          puts :baz
        end

        Line is too long. [154/80]
        Open

                  "#{attachment.s3_protocol(style, true)}//#{attachment.s3_host_name}/#{attachment.bucket_name}/#{attachment.path(style).sub(%r{\A/}, "".freeze)}"
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [91/80]
        Open

                s3_url_options = s3_url_options.call(instance) if s3_url_options.respond_to?(:call)
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Prefer single-quoted strings inside interpolations.
        Open

                  "#{attachment.path(style).sub(%r{\A/}, "".freeze)}"
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cop checks that quotes inside the string interpolation match the configured preference.

        Example: EnforcedStyle: single_quotes (default)

        # bad
        result = "Tests #{success ? "PASS" : "FAIL"}"
        
        # good
        result = "Tests #{success ? 'PASS' : 'FAIL'}"

        Example: EnforcedStyle: double_quotes

        # bad
        result = "Tests #{success ? 'PASS' : 'FAIL'}"
        
        # good
        result = "Tests #{success ? "PASS" : "FAIL"}"

        Line is too long. [87/80]
        Open

            #   * If you use a CNAME for use with CloudFront, you can NOT specify https as your
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [118/80]
        Open

                    @options[:path] = path_option.gsub(/:url/, @options[:url]).sub(/\A:rails_root\/public\/system/, "".freeze)
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [154/80]
        Open

                  "#{attachment.s3_protocol(style, true)}//#{attachment.bucket_name}.#{attachment.s3_host_name}/#{attachment.path(style).sub(%r{\A/}, "".freeze)}"
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Space missing after comma.
        Open

                path(style_name).sub(%r{\A/},'')
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Checks for comma (,) not followed by some kind of space.

        Example:

        # bad
        [1,2]
        { foo:bar,}
        
        # good
        [1, 2]
        { foo:bar, }

        Line is too long. [88/80]
        Open

            # * +bucket+: This is the name of the S3 bucket that will store your files. Remember
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [96/80]
        Open

                  [:access_key_id, :secret_access_key, :credential_provider, :credentials].each do |opt|
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Use def with parentheses when there are parameters.
        Open

              def self.extended base
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cops checks for parentheses around the arguments in method definitions. Both instance and class/singleton methods are checked.

        Example: EnforcedStyle: require_parentheses (default)

        # The `require_parentheses` style requires method definitions
        # to always use parentheses
        
        # bad
        def bar num1, num2
          num1 + num2
        end
        
        def foo descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name
          do_something
        end
        
        # good
        def bar(num1, num2)
          num1 + num2
        end
        
        def foo(descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name)
          do_something
        end

        Example: EnforcedStyle: requirenoparentheses

        # The `require_no_parentheses` style requires method definitions
        # to never use parentheses
        
        # bad
        def bar(num1, num2)
          num1 + num2
        end
        
        def foo(descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name)
          do_something
        end
        
        # good
        def bar num1, num2
          num1 + num2
        end
        
        def foo descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name
          do_something
        end

        Example: EnforcedStyle: requirenoparenthesesexceptmultiline

        # The `require_no_parentheses_except_multiline` style prefers no
        # parantheses when method definition arguments fit on single line,
        # but prefers parantheses when arguments span multiple lines.
        
        # bad
        def bar(num1, num2)
          num1 + num2
        end
        
        def foo descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name
          do_something
        end
        
        # good
        def bar num1, num2
          num1 + num2
        end
        
        def foo(descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name)
          do_something
        end

        Use def with parentheses when there are parameters.
        Open

              def parse_credentials creds
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cops checks for parentheses around the arguments in method definitions. Both instance and class/singleton methods are checked.

        Example: EnforcedStyle: require_parentheses (default)

        # The `require_parentheses` style requires method definitions
        # to always use parentheses
        
        # bad
        def bar num1, num2
          num1 + num2
        end
        
        def foo descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name
          do_something
        end
        
        # good
        def bar(num1, num2)
          num1 + num2
        end
        
        def foo(descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name)
          do_something
        end

        Example: EnforcedStyle: requirenoparentheses

        # The `require_no_parentheses` style requires method definitions
        # to never use parentheses
        
        # bad
        def bar(num1, num2)
          num1 + num2
        end
        
        def foo(descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name)
          do_something
        end
        
        # good
        def bar num1, num2
          num1 + num2
        end
        
        def foo descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name
          do_something
        end

        Example: EnforcedStyle: requirenoparenthesesexceptmultiline

        # The `require_no_parentheses_except_multiline` style prefers no
        # parantheses when method definition arguments fit on single line,
        # but prefers parantheses when arguments span multiple lines.
        
        # bad
        def bar(num1, num2)
          num1 + num2
        end
        
        def foo descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name
          do_something
        end
        
        # good
        def bar num1, num2
          num1 + num2
        end
        
        def foo(descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name)
          do_something
        end

        Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.
        Open

                    s3_headers[name.to_s.downcase.sub(/\Ax-amz-/,'').tr("-","_").to_sym] = value
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Checks if uses of quotes match the configured preference.

        Example: EnforcedStyle: single_quotes (default)

        # bad
        "No special symbols"
        "No string interpolation"
        "Just text"
        
        # good
        'No special symbols'
        'No string interpolation'
        'Just text'
        "Wait! What's #{this}!"

        Example: EnforcedStyle: double_quotes

        # bad
        'Just some text'
        'No special chars or interpolation'
        
        # good
        "Just some text"
        "No special chars or interpolation"
        "Every string in #{project} uses double_quotes"

        Line is too long. [86/80]
        Open

            #         {:bucket => "xxx", :access_key_id => "xxx", :secret_access_key => "xxx"}
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [92/80]
        Open

            #   path-style, or :s3_path_url). But in some cases paths don't work and you need to use
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [88/80]
        Open

            #   URL will be constructed from the bucket and the path. This is what you will want
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Use def with parentheses when there are parameters.
        Open

              def find_credentials creds
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cops checks for parentheses around the arguments in method definitions. Both instance and class/singleton methods are checked.

        Example: EnforcedStyle: require_parentheses (default)

        # The `require_parentheses` style requires method definitions
        # to always use parentheses
        
        # bad
        def bar num1, num2
          num1 + num2
        end
        
        def foo descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name
          do_something
        end
        
        # good
        def bar(num1, num2)
          num1 + num2
        end
        
        def foo(descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name)
          do_something
        end

        Example: EnforcedStyle: requirenoparentheses

        # The `require_no_parentheses` style requires method definitions
        # to never use parentheses
        
        # bad
        def bar(num1, num2)
          num1 + num2
        end
        
        def foo(descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name)
          do_something
        end
        
        # good
        def bar num1, num2
          num1 + num2
        end
        
        def foo descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name
          do_something
        end

        Example: EnforcedStyle: requirenoparenthesesexceptmultiline

        # The `require_no_parentheses_except_multiline` style prefers no
        # parantheses when method definition arguments fit on single line,
        # but prefers parantheses when arguments span multiple lines.
        
        # bad
        def bar(num1, num2)
          num1 + num2
        end
        
        def foo descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name
          do_something
        end
        
        # good
        def bar num1, num2
          num1 + num2
        end
        
        def foo(descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name)
          do_something
        end

        Unnecessary spacing detected.
        Open

                  @s3_options     = @options[:s3_options]     || {}
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cop checks for extra/unnecessary whitespace.

        Example:

        # good if AllowForAlignment is true
        name      = "RuboCop"
        # Some comment and an empty line
        
        website  += "/bbatsov/rubocop" unless cond
        puts        "rubocop"          if     debug
        
        # bad for any configuration
        set_app("RuboCop")
        website  = "https://github.com/bbatsov/rubocop"

        Line is too long. [94/80]
        Open

            # * +url+: There are four options for the S3 url. You can choose to have the bucket's name
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [92/80]
        Open

            #     image_path helper; this is what image_tag uses to generate the url for an img tag.
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [85/80]
        Open

            #   S3 (strictly speaking) does not support directories, you can still use a / to
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [88/80]
        Open

                permissions = { :default => permissions } unless permissions.respond_to?(:merge)
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Line is too long. [92/80]
        Open

                storage_class = {:default => storage_class} unless storage_class.respond_to?(:merge)
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Use def with parentheses when there are parameters.
        Open

              def set_permissions permissions
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        This cops checks for parentheses around the arguments in method definitions. Both instance and class/singleton methods are checked.

        Example: EnforcedStyle: require_parentheses (default)

        # The `require_parentheses` style requires method definitions
        # to always use parentheses
        
        # bad
        def bar num1, num2
          num1 + num2
        end
        
        def foo descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name
          do_something
        end
        
        # good
        def bar(num1, num2)
          num1 + num2
        end
        
        def foo(descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name)
          do_something
        end

        Example: EnforcedStyle: requirenoparentheses

        # The `require_no_parentheses` style requires method definitions
        # to never use parentheses
        
        # bad
        def bar(num1, num2)
          num1 + num2
        end
        
        def foo(descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name)
          do_something
        end
        
        # good
        def bar num1, num2
          num1 + num2
        end
        
        def foo descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name
          do_something
        end

        Example: EnforcedStyle: requirenoparenthesesexceptmultiline

        # The `require_no_parentheses_except_multiline` style prefers no
        # parantheses when method definition arguments fit on single line,
        # but prefers parantheses when arguments span multiple lines.
        
        # bad
        def bar(num1, num2)
          num1 + num2
        end
        
        def foo descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name
          do_something
        end
        
        # good
        def bar num1, num2
          num1 + num2
        end
        
        def foo(descriptive_var_name,
                another_descriptive_var_name,
                last_descriptive_var_name)
          do_something
        end

        Favor a normal unless-statement over a modifier clause in a multiline statement.
        Open

                Paperclip.interpolates(:s3_domain_url) do |attachment, style|
                  "#{attachment.s3_protocol(style, true)}//#{attachment.bucket_name}.#{attachment.s3_host_name}/#{attachment.path(style).sub(%r{\A/}, "".freeze)}"
                end unless Paperclip::Interpolations.respond_to? :s3_domain_url
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Checks for uses of if/unless modifiers with multiple-lines bodies.

        Example:

        # bad
        {
          result: 'this should not happen'
        } unless cond
        
        # good
        { result: 'ok' } if cond

        Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.
        Open

                ::File.open(local_dest_path, 'wb') do |local_file|
        Severity: Minor
        Found in lib/paperclip/storage/s3.rb by rubocop

        Checks if uses of quotes match the configured preference.

        Example: EnforcedStyle: single_quotes (default)

        # bad
        "No special symbols"
        "No string interpolation"
        "Just text"
        
        # good
        'No special symbols'
        'No string interpolation'
        'Just text'
        "Wait! What's #{this}!"

        Example: EnforcedStyle: double_quotes

        # bad
        'Just some text'
        'No special chars or interpolation'
        
        # good
        "Just some text"
        "No special chars or interpolation"
        "Every string in #{project} uses double_quotes"

        There are no issues that match your filters.

        Category
        Status