Sha256: d782ff8af7c8f41fca2ae2128e697833724a0c15c46f21307c3d0e3a456a7849

Contents?: true

Size: 1.91 KB

Versions: 1

Compression:

Stored size: 1.91 KB

Contents

require 'json'

module JsonRequest
  def json_patch(path, data = {}, rack_env = {})
    patch path, data.to_json,  { 'CONTENT_TYPE' => TentD::API::MEDIA_TYPE }.merge(rack_env)
  end

  def json_put(path, data = {}, rack_env= {})
    put path, data.to_json, { 'CONTENT_TYPE' => TentD::API::MEDIA_TYPE }.merge(rack_env)
  end

  def json_post(path, data = {}, rack_env = {})
    post path, data.to_json, { 'CONTENT_TYPE' => TentD::API::MEDIA_TYPE }.merge(rack_env)
  end

  def json_get(path, data = {}, rack_env = {})
    get path, data, { 'HTTP_ACCEPT' => TentD::API::MEDIA_TYPE }.merge(rack_env)
  end

  def multipart_post(path, json, parts, rack_env = {})
    body = build_json_part(json) + build_parts(parts) + "--#{Rack::Multipart::MULTIPART_BOUNDARY}--\r"
    post path, body, { 'CONTENT_TYPE' => "multipart/form-data; boundary=#{Rack::Multipart::MULTIPART_BOUNDARY}",
                       'HTTP_ACCEPT' =>  TentD::API::MEDIA_TYPE }.merge(rack_env)
  end

  def multipart_put(path, json, parts, rack_env = {})
    body = build_json_part(json) + build_parts(parts) + "--#{Rack::Multipart::MULTIPART_BOUNDARY}--\r"
    put path, body, { 'CONTENT_TYPE' => "multipart/form-data; boundary=#{Rack::Multipart::MULTIPART_BOUNDARY}",
                       'HTTP_ACCEPT' =>  TentD::API::MEDIA_TYPE }.merge(rack_env)
  end

  private

  def build_json_part(json)
    build_part('post', :filename => 'post.json', :content_type => TentD::API::MEDIA_TYPE, :content => json.to_json)
  end

  def build_parts(parts)
    parts.map do |k,v|
      v.kind_of?(Array) ? v.each_with_index.map { |part,i| build_part("#{k}[#{i}]", part) } : build_part(k, v)
    end.join
  end

  def build_part(name, data)
<<-EOF
--#{Rack::Multipart::MULTIPART_BOUNDARY}\r
Content-Disposition: form-data; name="#{name}"; filename="#{Rack::Utils.escape(data[:filename])}"\r
Content-Type: #{data[:content_type]}\r
Content-Length: #{data[:content].size}\r
\r
#{data[:content]}\r
EOF
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
tentd-0.0.1 spec/support/json_request.rb