Sha256: aef6a27152b8dd229260ac7565d2767ed1f8a04648275f92c1958dec74cd2db8

Contents?: true

Size: 944 Bytes

Versions: 1

Compression:

Stored size: 944 Bytes

Contents

require 'mime/types/columnar'

module RestMan
  module Payload
    extend self

    def generate(params)
      if params.is_a?(RestMan::Payload::Base)
        params

      elsif params.is_a?(String)
        Base.new(params)

      elsif params.is_a?(Hash)
        if params.delete(:multipart) == true || has_file?(params)
          Multipart.new(params)

        else
          UrlEncoded.new(params)
        end

      elsif params.is_a?(ParamsArray)
        if has_file?(params)
          Multipart.new(params)

        else
          UrlEncoded.new(params)

        end
      elsif params.respond_to?(:read)
        Streamed.new(params)

      else
        nil
      end
    end

    def has_file?(obj)
      case obj
      when Hash, ParamsArray
        obj.any? {|_, v| has_file?(v) }

      when Array
        obj.any? {|v| has_file?(v) }

      else
        obj.respond_to?(:path) && obj.respond_to?(:read)
      end
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rest-man-1.1.0 lib/restman/payload.rb