Sha256: a92f10980ad5604cad5bf203e3fe0d0dca8b944beb7604b5b76969dac9b84417

Contents?: true

Size: 1.5 KB

Versions: 30

Compression:

Stored size: 1.5 KB

Contents

module Footnotes
  module Notes
    class FiltersNote < AbstractNote
      def initialize(controller)
        @controller = controller
        @parsed_filters = parse_filters
      end

      def legend
        "Filter chain for #{@controller.class.to_s}"
      end

      def content
        mount_table(@parsed_filters.unshift([:name, :type, :actions]), :summary => "Debug information for #{title}")
      end

      protected
        # Get controller filter chain
        #
        def parse_filters
          return [] # TODO @controller.class.filter_chain.collect do |filter|
#            [parse_method(filter.method), filter.type.inspect, controller_filtered_actions(filter).inspect]
#          end
        end

        # This receives a filter, creates a mock controller and check in which
        # actions the filter is performed
        #
        def controller_filtered_actions(filter)
          mock_controller = Footnotes::Extensions::MockController.new

          return @controller.class.action_methods.select { |action|
            mock_controller.action_name = action

            #remove conditions (this would call a Proc on the mock_controller)
            filter.options.merge!(:if => nil, :unless => nil)

            filter.__send__(:should_run_callback?, mock_controller)
          }.map(&:to_sym)
        end

        def parse_method(method = '')
          escape(method.inspect.gsub(RAILS_ROOT, ''))
        end
    end
  end

  module Extensions
    class MockController < Struct.new(:action_name); end
  end
end

Version data entries

30 entries across 30 versions & 2 rubygems

Version Path
rails-footnotes-7.1.0 lib/rails-footnotes/notes/filters_note.rb
rails-footnotes-7.0.1 lib/rails-footnotes/notes/filters_note.rb
rails-footnotes-7.0.0 lib/rails-footnotes/notes/filters_note.rb
rails-footnotes-5.0.0 lib/rails-footnotes/notes/filters_note.rb
rails6-footnotes-5.0.2 lib/rails-footnotes/notes/filters_note.rb
rails6-footnotes-5.0.1 lib/rails-footnotes/notes/filters_note.rb
rails6-footnotes-5.0.0 lib/rails-footnotes/notes/filters_note.rb
rails-footnotes-4.1.8 lib/rails-footnotes/notes/filters_note.rb
rails-footnotes-4.1.7 lib/rails-footnotes/notes/filters_note.rb
rails-footnotes-4.1.6 lib/rails-footnotes/notes/filters_note.rb
rails-footnotes-4.1.5 lib/rails-footnotes/notes/filters_note.rb
rails-footnotes-4.1.4 lib/rails-footnotes/notes/filters_note.rb
rails-footnotes-4.1.3 lib/rails-footnotes/notes/filters_note.rb
rails-footnotes-4.1.2 lib/rails-footnotes/notes/filters_note.rb
rails-footnotes-4.1.1 lib/rails-footnotes/notes/filters_note.rb
rails-footnotes-4.1.0 lib/rails-footnotes/notes/filters_note.rb
rails-footnotes-4.0.2 lib/rails-footnotes/notes/filters_note.rb
rails-footnotes-4.0.1 lib/rails-footnotes/notes/filters_note.rb
rails-footnotes-4.0.0 lib/rails-footnotes/notes/filters_note.rb
rails-footnotes-3.7.9 lib/rails-footnotes/notes/filters_note.rb