paper-cup 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +13 -0
- data/Gemfile +3 -0
- data/README.md +37 -0
- data/lib/paper_cup/request.rb +45 -0
- data/lib/paper_cup/response.rb +27 -0
- data/lib/paper_cup/utils.rb +8 -0
- data/lib/paper_cup.rb +13 -0
- data/paper-cup.gemspec +18 -0
- data/test/paper_cup_test/request_test.rb +60 -0
- data/test/paper_cup_test/response_test.rb +28 -0
- data/test/paper_cup_test.rb +23 -0
- data/test/test_helper.rb +28 -0
- metadata +100 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d26bd9a2d6d938e5548afdc7d6fc007351bce1aa
|
4
|
+
data.tar.gz: 72d254b6cecb88fc6218ad3dcdf125a01da5dfed
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c13a59518e7e3839d5945b40c7e4a33ac6d755afe4bf74c7adf19477ba90bae302b370e5134c3480080c49e2e7bb6ba7ab3c2d6129f782a3ab274cd077f2408c
|
7
|
+
data.tar.gz: 3425637ac57ea033ff2e7e113802bf858eee11d131a352425e2e4d76a966f2e3a48d277cdeb4c0e85a8a67e1738b726a5d40e29b21dafe94ac099bf883597ac0
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
Instalation
|
2
|
+
----
|
3
|
+
|
4
|
+
Add `gem paper-cup` to your gemfile.
|
5
|
+
|
6
|
+
Configuration
|
7
|
+
-----
|
8
|
+
|
9
|
+
None!!! Yeaaaah!
|
10
|
+
|
11
|
+
Usage
|
12
|
+
-----
|
13
|
+
|
14
|
+
At the moment it only works for `POSTs`, `GETs` and `PUTs`. If the the response is a JSON the gem will parse it, if not it will show as it cames
|
15
|
+
|
16
|
+
GET
|
17
|
+
----
|
18
|
+
|
19
|
+
`PaperCup.get(url: url)`
|
20
|
+
|
21
|
+
POST - PUT
|
22
|
+
----------
|
23
|
+
|
24
|
+
`PaperCup.post(url: url, body: {name: 'pepe'}, headers: { "Content-Type" => "application/json"})`
|
25
|
+
|
26
|
+
|
27
|
+
Response
|
28
|
+
---------
|
29
|
+
Each request will return a `Response` object.
|
30
|
+
|
31
|
+
Example:
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
r = PaperCup.post(url, some_hash.to_json)
|
35
|
+
puts r.response # It will print the response returned by the endpoint
|
36
|
+
puts r.status # It will print the status code returned by the endpoint
|
37
|
+
```
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require "open3"
|
2
|
+
require_relative 'response'
|
3
|
+
|
4
|
+
module PaperCup
|
5
|
+
class Request
|
6
|
+
|
7
|
+
attr_accessor :method, :url, :headers, :params, :body
|
8
|
+
|
9
|
+
COMMAND_TEMPLATE = "curl -X %{method} -w %%{http_code} %{headers} %{params} %{body} %{url}"
|
10
|
+
|
11
|
+
def initialize(method:, url:, headers: {}, params: {}, body: "")
|
12
|
+
@url, @method, @headers, @params, @body = url, method, headers, params, body
|
13
|
+
end
|
14
|
+
|
15
|
+
def exec
|
16
|
+
Response.new(Open3.capture3(command).first)
|
17
|
+
end
|
18
|
+
|
19
|
+
def command
|
20
|
+
COMMAND_TEMPLATE % {
|
21
|
+
method: method.upcase,
|
22
|
+
headers: build_headers,
|
23
|
+
params: build_params,
|
24
|
+
body: build_body,
|
25
|
+
url: url
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
def build_headers
|
30
|
+
@headers.map { |k, v| "-H '#{k}: #{v}'" }.join(" ")
|
31
|
+
end
|
32
|
+
|
33
|
+
def build_params
|
34
|
+
json_request? ? "-d '#{params.to_json}'" : "-d '#{params}'"
|
35
|
+
end
|
36
|
+
|
37
|
+
def json_request?
|
38
|
+
@headers["Content-Type"] && @headers["Content-Type"].include?("json")
|
39
|
+
end
|
40
|
+
|
41
|
+
def build_body
|
42
|
+
body.empty? ? "" : "-d '#{body}'"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'json'
|
2
|
+
require_relative 'utils'
|
3
|
+
|
4
|
+
module PaperCup
|
5
|
+
class Response
|
6
|
+
attr_accessor :status, :response
|
7
|
+
|
8
|
+
def initialize(raw_response)
|
9
|
+
@raw_response = raw_response
|
10
|
+
end
|
11
|
+
|
12
|
+
def response
|
13
|
+
@response ||= begin
|
14
|
+
str = @raw_response[0..-4]
|
15
|
+
PaperCup.valid_json?(str) ? JSON.parse(str) : str
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def status
|
20
|
+
@status ||= @raw_response[-3..-1].to_i
|
21
|
+
end
|
22
|
+
|
23
|
+
def success?
|
24
|
+
status.between?(200, 299)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/paper_cup.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require "./lib/paper_cup/request.rb"
|
2
|
+
module PaperCup
|
3
|
+
|
4
|
+
INSERT_METHODS = %w(post put)
|
5
|
+
QUERY_METHODS = %w(get head)
|
6
|
+
METHODS = INSERT_METHODS + QUERY_METHODS
|
7
|
+
|
8
|
+
METHODS.each do |method|
|
9
|
+
define_singleton_method(method) do |url, opts = {}|
|
10
|
+
Request.new(opts.merge(url: url, method: method)).exec
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/paper-cup.gemspec
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.platform = Gem::Platform::RUBY
|
3
|
+
s.name = 'paper-cup'
|
4
|
+
s.version = '0.1.0'
|
5
|
+
s.date = '2015-08-05'
|
6
|
+
s.summary = "Use of Open3 to make request"
|
7
|
+
s.description = "Use curl with Open3 for making request"
|
8
|
+
s.authors = ["Mariano Matayoshi", "Ricardo Kleine Samson", "Nicolas Oga"]
|
9
|
+
s.email = 'matayoshi.mariano@gmail.com'
|
10
|
+
s.files = `git ls-files`.split("\n")
|
11
|
+
s.homepage = 'https://github.com/casapick/paper-cup'
|
12
|
+
s.license = 'MIT'
|
13
|
+
s.require_paths = ["lib"]
|
14
|
+
|
15
|
+
s.add_development_dependency "minitest", '~> 0'
|
16
|
+
s.add_development_dependency "minitest-happy", '~> 0'
|
17
|
+
s.add_development_dependency "pry-byebug", '~> 0'
|
18
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
describe PaperCup::Request do
|
4
|
+
|
5
|
+
describe "when the request is only url and method" do
|
6
|
+
it "must upcase the method for the command" do
|
7
|
+
r = PaperCup::Request.new(method: "get", url: "https://www.google.com.ar")
|
8
|
+
assert r.command.include?("-X GET"), "The command does not have the method upcased"
|
9
|
+
end
|
10
|
+
|
11
|
+
it "must add 'httt_code' to the command in order to get the status code" do
|
12
|
+
r = PaperCup::Request.new(method: "get", url: "https://www.google.com.ar")
|
13
|
+
assert r.command.include?("-w %{http_code}"), "The command does not include 'http_code'"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "when the request have headers" do
|
18
|
+
it "must add them to the command" do
|
19
|
+
r = PaperCup::Request.new(method: "get", url: "https://www.google.com.ar",
|
20
|
+
headers: { "Content-Type" => "application/json"})
|
21
|
+
assert r.command.include?("-H 'Content-Type: application/json'"), "The command does not have the method upcased"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "when the request\'s content type is json" do
|
26
|
+
it "the params must be json" do
|
27
|
+
params = { pepe: { holis: 3 }, pepa: 3 }
|
28
|
+
r = PaperCup::Request.new(method: "get", url: "https://www.google.com.ar",
|
29
|
+
params: params,
|
30
|
+
headers: { "Content-Type" => "application/json"})
|
31
|
+
assert r.command.include?(params.to_json), "The command does not have the params as a json"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "when the request\'s content type is not json" do
|
36
|
+
it "the params must be json" do
|
37
|
+
params = "<html><header></header><body><h1>HOLA</h1></body></html>"
|
38
|
+
r = PaperCup::Request.new(method: "get", url: "https://www.google.com.ar",
|
39
|
+
params: params,
|
40
|
+
headers: { "Content-Type" => "application/xml"})
|
41
|
+
assert r.command.include?(params), "The command does not have the params"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "when the request\'s have body" do
|
46
|
+
it "the body must be present" do
|
47
|
+
body = { total: 3.12 }.to_json
|
48
|
+
r = PaperCup::Request.new(method: "get", url: "https://www.google.com.ar",
|
49
|
+
body: body, headers: { "Content-Type" => "application/json"})
|
50
|
+
assert r.command.include?(body), "The command does not have the body"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "when the request\'s have no body" do
|
55
|
+
it "there must not be an empty body" do
|
56
|
+
r = PaperCup::Request.new(method: "get", url: "https://www.google.com.ar")
|
57
|
+
refute r.command.include?("-d ''"), "The command does have the body"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
describe PaperCup::Response do
|
4
|
+
|
5
|
+
describe "when the response is not JSON" do
|
6
|
+
it "must set the response as it came " do
|
7
|
+
assert_nothing_raised { PaperCup::Response.new(Mock.html) }
|
8
|
+
end
|
9
|
+
|
10
|
+
it "must set the status code response properly" do
|
11
|
+
r = PaperCup::Response.new(Mock.html)
|
12
|
+
assert_equal 404, r.status
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "when the response is a JSON" do
|
18
|
+
it "must set the response properly" do
|
19
|
+
r = PaperCup::Response.new(Mock.json)
|
20
|
+
assert_equal JSON.parse(Mock.json[0..-4]), r.response
|
21
|
+
end
|
22
|
+
|
23
|
+
it "must set the status code response properly" do
|
24
|
+
r = PaperCup::Response.new(Mock.json)
|
25
|
+
assert_equal 200, r.status
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
describe PaperCup do
|
4
|
+
|
5
|
+
describe "when doing a GET request to an url" do
|
6
|
+
describe "that respond with a JSON" do
|
7
|
+
it "must parse the response" do
|
8
|
+
Open3.stub :capture3, [Mock.json] do # stub goes away once the block is done
|
9
|
+
r = PaperCup.get("http://www.google.com")
|
10
|
+
assert_equal "Rails", r.response.first["framework"], "The framework must be rails"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
describe "that does not respond with a JSON" do
|
15
|
+
it "must set the response as it come" do
|
16
|
+
Open3.stub :capture3, [Mock.html] do # stub goes away once the block is done
|
17
|
+
r = PaperCup.get("http://www.google.com")
|
18
|
+
assert_equal Mock.html, "#{r.response}#{r.status}", "The response must be the same"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'minitest/pride'
|
3
|
+
require 'pry'
|
4
|
+
require './lib/paper_cup.rb'
|
5
|
+
Dir.glob(['./lib/**/*.rb']).each { |r| require r }
|
6
|
+
|
7
|
+
module Mock
|
8
|
+
class << self
|
9
|
+
def html
|
10
|
+
"<html>\n<head>\n<meta charset=\"UTF-8\">\n<title>404</title>\n</head>\n<body>\n<code>404</code>\n</body>\n</html>\n404"
|
11
|
+
end
|
12
|
+
|
13
|
+
def json
|
14
|
+
"[{\"framework\":\"Rails\",\"language\":\"ruby\"}]200"
|
15
|
+
end
|
16
|
+
|
17
|
+
def params
|
18
|
+
{ framework: 'cuba', language: 'ruby' }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
module Minitest::Assertions
|
24
|
+
def assert_nothing_raised(*)
|
25
|
+
yield
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
metadata
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: paper-cup
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mariano Matayoshi
|
8
|
+
- Ricardo Kleine Samson
|
9
|
+
- Nicolas Oga
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2015-08-05 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: minitest
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - "~>"
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - "~>"
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: '0'
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: minitest-happy
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - "~>"
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '0'
|
36
|
+
type: :development
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - "~>"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0'
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: pry-byebug
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
type: :development
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - "~>"
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
57
|
+
description: Use curl with Open3 for making request
|
58
|
+
email: matayoshi.mariano@gmail.com
|
59
|
+
executables: []
|
60
|
+
extensions: []
|
61
|
+
extra_rdoc_files: []
|
62
|
+
files:
|
63
|
+
- ".gitignore"
|
64
|
+
- Gemfile
|
65
|
+
- README.md
|
66
|
+
- lib/paper_cup.rb
|
67
|
+
- lib/paper_cup/request.rb
|
68
|
+
- lib/paper_cup/response.rb
|
69
|
+
- lib/paper_cup/utils.rb
|
70
|
+
- paper-cup.gemspec
|
71
|
+
- test/paper_cup_test.rb
|
72
|
+
- test/paper_cup_test/request_test.rb
|
73
|
+
- test/paper_cup_test/response_test.rb
|
74
|
+
- test/test_helper.rb
|
75
|
+
homepage: https://github.com/casapick/paper-cup
|
76
|
+
licenses:
|
77
|
+
- MIT
|
78
|
+
metadata: {}
|
79
|
+
post_install_message:
|
80
|
+
rdoc_options: []
|
81
|
+
require_paths:
|
82
|
+
- lib
|
83
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - ">="
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
89
|
+
requirements:
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0'
|
93
|
+
requirements: []
|
94
|
+
rubyforge_project:
|
95
|
+
rubygems_version: 2.4.8
|
96
|
+
signing_key:
|
97
|
+
specification_version: 4
|
98
|
+
summary: Use of Open3 to make request
|
99
|
+
test_files: []
|
100
|
+
has_rdoc:
|