Sha256: 446d109a2f9e04f0ddf6796a6478efce9da0c0d1d7746c59072456320d1fd613

Contents?: true

Size: 1.32 KB

Versions: 4

Compression:

Stored size: 1.32 KB

Contents

# frozen_string_literal: true

module RuboCop
  module Cop
    module Cobra
      # This cop disallows adding global presenters to the `app/presenters` directory.
      #
      # The goal is to encourage developers to put new presenters inside the correct
      # namespace, where they can be more modularly isolated and ownership is clear.
      #
      # @example
      #   # bad
      #   # path: components/my_component/app/presenters/foo_presenter.rb
      #   class FooPresenter
      #     # ...
      #   end
      #
      #   # good
      #   # path: components/my_component/app/presenters/my_component/foo_presenter.rb
      #   module MyComponent
      #     class FooPresenter
      #       # ...
      #     end
      #   end
      #
      class PresenterFilePlacement < RuboCop::Cop::Cop
        include FilePlacementHelp

        def investigate(processed_source)
          return if processed_source.blank?

          path = processed_source.file_path
          return unless applicable_component_path?(path, presenters_path)
          return if namespaced_correctly?(path, presenters_path)

          add_offense(processed_source.ast,
                      message: file_placement_msg(path, presenters_path))
        end

      private

        def presenters_path
          "app/presenters/"
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
rubocop-cobra-0.4.3 lib/rubocop/cop/cobra/presenter_file_placement.rb
rubocop-cobra-0.4.2 lib/rubocop/cop/cobra/presenter_file_placement.rb
rubocop-cobra-0.4.0 lib/rubocop/cop/cobra/presenter_file_placement.rb
rubocop-cobra-0.3.0 lib/rubocop/cop/cobra/presenter_file_placement.rb