Sha256: c50497b4df5ffd6341f4db3253a8bb70576f7c8b5b3ce77aa40f3a34ffcf1b3d

Contents?: true

Size: 1.16 KB

Versions: 5

Compression:

Stored size: 1.16 KB

Contents

require 'rack/schmobile/filters/mobile_session'
require 'rack/schmobile/filters/is_mobile_param'
require 'rack/schmobile/filters/mobile_user_agent'

module Rack
  module Schmobile
    # Filters are tests that get run against a request to determine if it's a mobile request or not.
    # A filter can return true, false or nil. The first non-nil value of the filter chain is the
    # one that gets used and this also gets used to mark the session as a "mobile session"
    #
    # You can manipulate the chain to add new conditions that check on e.g. request format.
    module Filters
      CHAIN = [
        Rack::Schmobile::Filters::IsMobileParam, # Must come before session check
        Rack::Schmobile::Filters::MobileSession,
        Rack::Schmobile::Filters::MobileUserAgent # Always returns either true or false
      ]

      def self.apply(request)
        Rack::Schmobile::Filters::CHAIN.each do |filter|
          result = filter.call(request)
          unless result.nil?
            request.session[Rack::Schmobile::IS_MOBILE] = result
            break
          end
        end

        request.session[Rack::Schmobile::IS_MOBILE] ||= false
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
schmobile-0.4.1 lib/rack/schmobile/filters.rb
schmobile-0.4.0 lib/rack/schmobile/filters.rb
schmobile-0.3.2 lib/rack/schmobile/filters.rb
schmobile-0.3.1 lib/rack/schmobile/filters.rb
schmobile-0.3.0 lib/rack/schmobile/filters.rb