Sha256: f29d2f4d9bf90f5cf3249730576c8ebadefef84d38d5b9206ef9ee696a8cbe6a

Contents?: true

Size: 1.21 KB

Versions: 6

Compression:

Stored size: 1.21 KB

Contents

require 'restclient'
require 'rack/utils'
require 'stringio'
require 'taps/json'

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::Utils::Multipart.parse_multipart(env)
    params.symbolize_keys!
    params
  end

end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
taps-0.3.21 lib/taps/multipart.rb
taps-0.3.20 lib/taps/multipart.rb
taps-0.3.20.pre2 lib/taps/multipart.rb
taps-0.3.20.pre1 lib/taps/multipart.rb
taps-0.3.19 lib/taps/multipart.rb
taps-0.3.19.pre1 lib/taps/multipart.rb