Sha256: 071edc6eb45be3a0b089a09770f84f483ed60e1d39a4b263245e1104bbbeedd6

Contents?: true

Size: 1.26 KB

Versions: 35

Compression:

Stored size: 1.26 KB

Contents

module Padrino
  class Filter
    attr_reader :block

    def initialize(mode, scoped_controller, options, args, &block)
      @mode = mode
      @scoped_controller = scoped_controller
      @options = options
      @args = args
      @block = block
    end

    def apply?(request)
      detect = match_with_arguments?(request) || match_with_options?(request)
      detect ^ !@mode
    end

    def to_proc
      if @args.empty? && @options.empty?
        block
      else
        filter = self
        proc { instance_eval(&filter.block) if filter.apply?(request) }
      end
    end

    private

    def scoped_controller_name
      @scoped_controller_name ||= Array(@scoped_controller).join("_")
    end

    def match_with_arguments?(request)
      route = request.route_obj
      path = request.path_info
      @args.any? do |argument|
        if argument.instance_of?(Symbol)
          next unless route
          name = route.name
          argument == name || name == [scoped_controller_name, argument].join(" ").to_sym
        else
          argument === path
        end
      end
    end

    def match_with_options?(request)
      user_agent = request.user_agent
      @options.any?{|name, value| value === (name == :agent ? user_agent : request.send(name)) }
    end
  end
end

Version data entries

35 entries across 35 versions & 1 rubygems

Version Path
padrino-core-0.16.0.pre3 lib/padrino-core/filter.rb
padrino-core-0.16.0.pre2 lib/padrino-core/filter.rb
padrino-core-0.15.3 lib/padrino-core/filter.rb
padrino-core-0.15.2 lib/padrino-core/filter.rb
padrino-core-0.15.1 lib/padrino-core/filter.rb
padrino-core-0.15.0 lib/padrino-core/filter.rb
padrino-core-0.14.4 lib/padrino-core/filter.rb
padrino-core-0.14.3 lib/padrino-core/filter.rb
padrino-core-0.12.9 lib/padrino-core/filter.rb
padrino-core-0.14.2 lib/padrino-core/filter.rb
padrino-core-0.13.3.4 lib/padrino-core/filter.rb
padrino-core-0.14.1.1 lib/padrino-core/filter.rb
padrino-core-0.14.1 lib/padrino-core/filter.rb
padrino-core-0.14.0.2 lib/padrino-core/filter.rb
padrino-core-0.14.0.1 lib/padrino-core/filter.rb
padrino-core-0.14.0 lib/padrino-core/filter.rb
padrino-core-0.14.0.rc2 lib/padrino-core/filter.rb
padrino-core-0.14.0.rc1 lib/padrino-core/filter.rb
padrino-core-0.13.3.3 lib/padrino-core/filter.rb
padrino-core-0.13.3.2 lib/padrino-core/filter.rb