Sha256: 4c597aa6f941394be7e48168da0f9e72b82bac2b88de92a896eb28497de55f1a

Contents?: true

Size: 1.11 KB

Versions: 4

Compression:

Stored size: 1.11 KB

Contents

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

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

4 entries across 4 versions & 1 rubygems

Version Path
taps-0.3.3 lib/taps/multipart.rb
taps-0.3.2 lib/taps/multipart.rb
taps-0.3.1 lib/taps/multipart.rb
taps-0.3.0 lib/taps/multipart.rb