Sha256: 4a3dd4c44ce97c239709f3a7266e296d391abb9c234c7cfbefc80e1a14cdf69c

Contents?: true

Size: 1.21 KB

Versions: 8

Compression:

Stored size: 1.21 KB

Contents

require 'restclient'
require 'rack/utils'
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::Utils::Multipart.parse_multipart(env)
    params.symbolize_keys!
    params
  end

end
end

Version data entries

8 entries across 8 versions & 4 rubygems

Version Path
tinroof-taps-0.3.24 lib/taps/multipart.rb
tapsicle-0.4.1 lib/taps/multipart.rb
taps-taps-0.3.24 lib/taps/multipart.rb
taps-0.3.24 lib/taps/multipart.rb
taps-0.3.23 lib/taps/multipart.rb
taps-0.3.23.pre1 lib/taps/multipart.rb
taps-0.3.22.pre2 lib/taps/multipart.rb
taps-0.3.22.pre1 lib/taps/multipart.rb