Sha256: d1506e3babc3afc59b8e0c6d0b23542bc0e622b701d597c49de15180f139d8d3

Contents?: true

Size: 1.54 KB

Versions: 7

Compression:

Stored size: 1.54 KB

Contents

module Adapters
  # This is an adapter that is plugged into a Rack outlet.
  #
  # It looks at what is given to it and generate an appropriate
  # adapter for it.
  #
  # For example, if you give it a query, it will extract the query param etc.
  # and call search_with_text on it if it is called by Rack.
  #
  module Rack
    
    class Query < Base
      
      @@defaults = {
        query_key:    'query'.freeze,
        offset_key:   'offset'.freeze,
        content_type: 'application/json'.freeze
      }

      def initialize query
        @query    = query
        @defaults = @@defaults.dup
      end
      
      def to_app options = {}
        # For capturing in the lambda.
        #
        query        = @query
        query_key    = options[:query_key]    || @defaults[:query_key]
        content_type = options[:content_type] || @defaults[:content_type]

        lambda do |env|
          params  = ::Rack::Request.new(env).params

          results = query.search_with_text *extracted(params)

          PickyLog.log results.to_log(params[query_key])

          respond_with results.to_response, content_type
        end
      end
      
      # Helper method to extract the params
      #
      UTF8_STRING = 'UTF-8'.freeze
      def extracted params
        [
          # query is encoded in ASCII
          #
          params[@defaults[:query_key]]  && params[@defaults[:query_key]].force_encoding(UTF8_STRING),
          params[@defaults[:offset_key]] && params[@defaults[:offset_key]].to_i || 0
        ]
      end
      
    end
    
  end
  
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
picky-1.4.1 lib/picky/adapters/rack/query.rb
picky-1.4.0 lib/picky/adapters/rack/query.rb
picky-1.3.4 lib/picky/adapters/rack/query.rb
picky-1.3.3 lib/picky/adapters/rack/query.rb
picky-1.3.2 lib/picky/adapters/rack/query.rb
picky-1.3.1 lib/picky/adapters/rack/query.rb
picky-1.3.0 lib/picky/adapters/rack/query.rb