Sha256: 42226a3177cb72ef235b2fe6f136413228fbb928b9ee12ba502339c694141e8a

Contents?: true

Size: 1.09 KB

Versions: 7

Compression:

Stored size: 1.09 KB

Contents

module CabbageDoc
  class Params
    include Enumerable

    ACTION  = '__action'.freeze
    METHOD  = '__method'.freeze
    TAG     = '__tag'.freeze

    def initialize(params, collection)
      @_params = convert(params, collection)
    end

    def each
      @_params.each do |k, v|
        yield(k, v)
      end
    end

    def delete(key)
      @_params.delete(key)
    end

    def find(key)
      @_params[key]
    end

    def valid?
      @_params.any?
    end

    def to_hash
      @_params
    end

    def to_query
      @_params.map do |k, v|
        if v.is_a?(Array)
          v.map { |vv| "#{k}[]=#{CGI.escape(vv)}" }
        else
          "#{k}=#{CGI.escape(v)}"
        end
      end.flatten.join('&')
    end

    private

    def convert(params, collection)
      method = params[METHOD]
      action = params[ACTION]

      return {} unless action && method

      action = collection.find_action(method, action)
      return {} unless action

      {}.tap do |hash|
        params.each do |k, v|
          hash[k] = v if action.param?(k.sub(/\[\]$/, ''))
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
cabbage_doc-0.1.4 lib/cabbage_doc/params.rb
cabbage_doc-0.1.3 lib/cabbage_doc/params.rb
cabbage_doc-0.1.2 lib/cabbage_doc/params.rb
cabbage_doc-0.1.1 lib/cabbage_doc/params.rb
cabbage_doc-0.1.0 lib/cabbage_doc/params.rb
cabbage_doc-0.0.9 lib/cabbage_doc/params.rb
cabbage_doc-0.0.8 lib/cabbage_doc/params.rb