Sha256: 9205d3139e941b2fb55137893b4bffe38b42e76aa036719dc6b82193c2a0563a

Contents?: true

Size: 1.3 KB

Versions: 1

Compression:

Stored size: 1.3 KB

Contents

require 'restclient'
require 'rack'
require 'stringio'
require 'vendor/okjson'

module Taps
  class Multipart
    class Container
      attr_accessor :attachments

      def initialize
        @attachments = []
      end

      def attach(opts)
        mp = Taps::Multipart.new(opts)
        attachments << mp
      end

      def generate
        hash = {}
        attachments.each do |mp|
          hash[mp.name] = mp
        end
        m = RestClient::Payload::Multipart.new(hash)
        [m.to_s, m.headers['Content-Type']]
      end
    end

    attr_reader :opts

    def initialize(opts = {})
      @opts = opts
    end

    def name
      opts[:name]
    end

    def to_s
      opts[:payload]
    end

    def content_type
      opts[:content_type] || 'text/plain'
    end

    def original_filename
      opts[:original_filename]
    end

    def self.create
      c = Taps::Multipart::Container.new
      yield c
      c.generate
    end

    # response is a rest-client response
    def self.parse(response)
      content = response.to_s
      env = {
        'CONTENT_TYPE' => response.headers[:content_type],
        'CONTENT_LENGTH' => content.size,
        'rack.input' => StringIO.new(content)
      }

      params = Rack::Multipart.parse_multipart(env)
      params.symbolize_keys!
      params
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
taps2-0.6.10 lib/taps/multipart.rb