Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/helpers/__snapshots__/utils.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -330,6 +330,12 @@ Array [
"link": "http://ruby-doc.org/stdlib-2.2.1/libdoc/net/http/rdoc/Net/HTTP.html",
"title": "net::http",
},
Object {
"description": "Faraday HTTP client",
"key": "faraday",
"link": "https://github.com/lostisland/faraday",
"title": "faraday",
},
],
"default": "native",
"extname": ".rb",
Expand Down
107 changes: 107 additions & 0 deletions src/targets/ruby/faraday/client.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
import { CodeBuilder } from '../../../helpers/code-builder';
import { escapeForSingleQuotes } from '../../../helpers/escape';
import { Client } from '../../targets';

export const faraday: Client = {
info: {
key: 'faraday',
title: 'faraday',
link: 'https://github.com/lostisland/faraday',
description: 'Faraday HTTP client',
},
convert: ({ uriObj, queryObj, method: rawMethod, fullUrl, postData, allHeaders }, options = {}) => {
const { push, blank, join } = new CodeBuilder();

// To support custom methods we check for the supported methods
// and if doesn't exist then we build a custom class for it
const method = rawMethod.toUpperCase();
const methods = [
'GET',
'POST',
'HEAD',
'DELETE',
'PATCH',
'PUT',
'OPTIONS',
'COPY',
'LOCK',
'UNLOCK',
'MOVE',
'TRACE',
];

if(!methods.includes(method)) {
push(`# Faraday cannot currently run ${method} requests. Please use another client.`)
return join();
}

push("require 'faraday'");
blank();

// Write body to beginning of script
if(postData.mimeType === 'application/x-www-form-urlencoded') {
if (postData.params) {
push(`data = {`);
postData.params.forEach(param => {
push(` :${param.name} => ${JSON.stringify(param.value)},`);
});
push(`}`);
blank();
}
}

push(`conn = Faraday.new(`);
push(` url: '${uriObj.protocol}//${uriObj.host}',`);
if(allHeaders['content-type'] || allHeaders['Content-Type']) {
push(` headers: {'Content-Type' => '${allHeaders['content-type'] || allHeaders['Content-Type']}'}`);
}
push(`)`);

blank();
push(`response = conn.${method.toLowerCase()}('${uriObj.pathname}') do |req|`);

const headers = Object.keys(allHeaders);
if (headers.length) {
headers.forEach(key => {
if(key.toLowerCase() !== 'content-type') {
push(` req.headers['${key}'] = '${escapeForSingleQuotes(allHeaders[key])}'`);
}
});
}

Object.keys(queryObj).forEach(name => {
const value = queryObj[name];
if (Array.isArray(value)) {
push(` req.params['${name}'] = ${JSON.stringify(value)}`)
} else {
push(` req.params['${name}'] = '${value}'`)
}
});

switch (postData.mimeType) {
case 'application/x-www-form-urlencoded':
if (postData.params) {
push(` req.body = URI.encode_www_form(data)`);
}
break;

case 'application/json':
if (postData.jsonObj) {
push(` req.body = ${JSON.stringify(postData.text)}`);
}
break;

default:
if (postData.text) {
push(` req.body = ${JSON.stringify(postData.text)}`);
}
}

push('end');
blank()
push('puts response.status');
push('puts response.body');

return join();
},
};
18 changes: 18 additions & 0 deletions src/targets/ruby/faraday/fixtures/application-form-encoded.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
require 'faraday'

data = {
:foo => "bar",
:hello => "world",
}

conn = Faraday.new(
url: 'http://mockbin.com',
headers: {'Content-Type' => 'application/x-www-form-urlencoded'}
)

response = conn.post('/har') do |req|
req.body = URI.encode_www_form(data)
end

puts response.status
puts response.body
13 changes: 13 additions & 0 deletions src/targets/ruby/faraday/fixtures/application-json.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
require 'faraday'

conn = Faraday.new(
url: 'http://mockbin.com',
headers: {'Content-Type' => 'application/json'}
)

response = conn.post('/har') do |req|
req.body = "{\"number\":1,\"string\":\"f\\\"oo\",\"arr\":[1,2,3],\"nested\":{\"a\":\"b\"},\"arr_mix\":[1,\"a\",{\"arr_mix_nested\":{}}],\"boolean\":false}"
end

puts response.status
puts response.body
12 changes: 12 additions & 0 deletions src/targets/ruby/faraday/fixtures/cookies.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
require 'faraday'

conn = Faraday.new(
url: 'http://mockbin.com',
)

response = conn.post('/har') do |req|
req.headers['cookie'] = 'foo=bar; bar=baz'
end

puts response.status
puts response.body
1 change: 1 addition & 0 deletions src/targets/ruby/faraday/fixtures/custom-method.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Faraday cannot currently run PROPFIND requests. Please use another client.
22 changes: 22 additions & 0 deletions src/targets/ruby/faraday/fixtures/full.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
require 'faraday'

data = {
:foo => "bar",
}

conn = Faraday.new(
url: 'http://mockbin.com',
headers: {'Content-Type' => 'application/x-www-form-urlencoded'}
)

response = conn.post('/har') do |req|
req.headers['cookie'] = 'foo=bar; bar=baz'
req.headers['accept'] = 'application/json'
req.params['foo'] = ["bar","baz"]
req.params['baz'] = 'abc'
req.params['key'] = 'value'
req.body = URI.encode_www_form(data)
end

puts response.status
puts response.body
14 changes: 14 additions & 0 deletions src/targets/ruby/faraday/fixtures/headers.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
require 'faraday'

conn = Faraday.new(
url: 'http://mockbin.com',
)

response = conn.get('/har') do |req|
req.headers['accept'] = 'application/json'
req.headers['x-foo'] = 'Bar'
req.headers['quoted-value'] = '"quoted" \'string\''
end

puts response.status
puts response.body
11 changes: 11 additions & 0 deletions src/targets/ruby/faraday/fixtures/https.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
require 'faraday'

conn = Faraday.new(
url: 'https://mockbin.com',
)

response = conn.get('/har') do |req|
end

puts response.status
puts response.body
13 changes: 13 additions & 0 deletions src/targets/ruby/faraday/fixtures/jsonObj-multiline.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
require 'faraday'

conn = Faraday.new(
url: 'http://mockbin.com',
headers: {'Content-Type' => 'application/json'}
)

response = conn.post('/har') do |req|
req.body = "{\n \"foo\": \"bar\"\n}"
end

puts response.status
puts response.body
13 changes: 13 additions & 0 deletions src/targets/ruby/faraday/fixtures/jsonObj-null-value.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
require 'faraday'

conn = Faraday.new(
url: 'http://mockbin.com',
headers: {'Content-Type' => 'application/json'}
)

response = conn.post('/har') do |req|
req.body = "{\"foo\":null}"
end

puts response.status
puts response.body
13 changes: 13 additions & 0 deletions src/targets/ruby/faraday/fixtures/multipart-data.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
require 'faraday'

conn = Faraday.new(
url: 'http://mockbin.com',
headers: {'Content-Type' => 'multipart/form-data; boundary=---011000010111000001101001'}
)

response = conn.post('/har') do |req|
req.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"foo\"; filename=\"hello.txt\"\r\nContent-Type: text/plain\r\n\r\nHello World\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bar\"\r\n\r\nBonjour le monde\r\n-----011000010111000001101001--\r\n"
end

puts response.status
puts response.body
13 changes: 13 additions & 0 deletions src/targets/ruby/faraday/fixtures/multipart-file.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
require 'faraday'

conn = Faraday.new(
url: 'http://mockbin.com',
headers: {'Content-Type' => 'multipart/form-data; boundary=---011000010111000001101001'}
)

response = conn.post('/har') do |req|
req.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"foo\"; filename=\"hello.txt\"\r\nContent-Type: text/plain\r\n\r\n\r\n-----011000010111000001101001--\r\n"
end

puts response.status
puts response.body
12 changes: 12 additions & 0 deletions src/targets/ruby/faraday/fixtures/multipart-form-data-no-params.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
require 'faraday'

conn = Faraday.new(
url: 'http://mockbin.com',
headers: {'Content-Type' => 'multipart/form-data'}
)

response = conn.post('/har') do |req|
end

puts response.status
puts response.body
13 changes: 13 additions & 0 deletions src/targets/ruby/faraday/fixtures/multipart-form-data.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
require 'faraday'

conn = Faraday.new(
url: 'http://mockbin.com',
headers: {'Content-Type' => 'multipart/form-data; boundary=---011000010111000001101001'}
)

response = conn.post('/har') do |req|
req.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"foo\"\r\n\r\nbar\r\n-----011000010111000001101001--\r\n"
end

puts response.status
puts response.body
14 changes: 14 additions & 0 deletions src/targets/ruby/faraday/fixtures/nested.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
require 'faraday'

conn = Faraday.new(
url: 'http://mockbin.com',
)

response = conn.get('/har') do |req|
req.params['foo[bar]'] = 'baz,zap'
req.params['fiz'] = 'buz'
req.params['key'] = 'value'
end

puts response.status
puts response.body
14 changes: 14 additions & 0 deletions src/targets/ruby/faraday/fixtures/query.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
require 'faraday'

conn = Faraday.new(
url: 'http://mockbin.com',
)

response = conn.get('/har') do |req|
req.params['foo'] = ["bar","baz"]
req.params['baz'] = 'abc'
req.params['key'] = 'value'
end

puts response.status
puts response.body
11 changes: 11 additions & 0 deletions src/targets/ruby/faraday/fixtures/short.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
require 'faraday'

conn = Faraday.new(
url: 'http://mockbin.com',
)

response = conn.get('/har') do |req|
end

puts response.status
puts response.body
13 changes: 13 additions & 0 deletions src/targets/ruby/faraday/fixtures/text-plain.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
require 'faraday'

conn = Faraday.new(
url: 'http://mockbin.com',
headers: {'Content-Type' => 'text/plain'}
)

response = conn.post('/har') do |req|
req.body = "Hello World"
end

puts response.status
puts response.body
2 changes: 2 additions & 0 deletions src/targets/ruby/target.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { Target } from '../targets';
import { native } from './native/client';
import { faraday } from './faraday/client';

export const ruby: Target = {
info: {
Expand All @@ -10,5 +11,6 @@ export const ruby: Target = {
},
clientsById: {
native,
faraday
},
};