paper-cup 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6156fc04976c406a46b84b646cdc3f975b4c53e9
4
- data.tar.gz: 40c7abe81e80b6934f1906f30ebd209fbfd7c704
3
+ metadata.gz: 8c341398114a2a9df8db16fdabaafaeddc12112c
4
+ data.tar.gz: faf80ab69ab9ab93de024834cd141791c6332b06
5
5
  SHA512:
6
- metadata.gz: fed562528e8e17efda88a0ee1ccb92f8a444feab8776c6d8680125281beeb92fe07373b285a490332b44329cd65bf517ab7fc20347591ed2271f69915eb5798e
7
- data.tar.gz: 75a5813a7847d2eae1a5f1df5b3d1b3c5412ee096a02e1107b29345d0d6c0413c27017927d4c2fb4c0835d884f9d2dc2d4dba706f827757c5c93be89ffc6ccb8
6
+ metadata.gz: d438c4b0506ccd7bb9da19cb1f8a02f533ac3b82fd278d0a37afde50cfbad6fbfb72e2a510bb07cf13665bc890cc4331585830aeeba48418d40af6d58c90d544
7
+ data.tar.gz: 817983209a7a5605beba459718e75b225c6d2b65a911f381dd46cade61bc9f357632f3cdd78f6c71a028a0bf9916dbec7e1c2e41d3ae29de3f5d7f3bd7771702
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # PaperCup
2
2
 
3
- ![TravisCI Badge](https://magnum.travis-ci.com/casapick/paper-cup.svg?token=MzqzdCmqpmmxRGFLmFqv&branch=master)
3
+ ![TravisCI Badge](https://travis-ci.org/casapick/paper-cup.svg)
4
4
 
5
5
  Instalation
6
6
  ----
@@ -23,20 +23,44 @@ For all the methods it accepts the next parameters:
23
23
 
24
24
  * url: is mandatory
25
25
  * headers: optional, it has to be a hash. Example: `{ "Content-Type" => "application/json"}`
26
- * params: optional, same as the header. Example: { name: "Goku", race: "Saiyan" }
26
+ * params: optional, same as the header. Example: `{ name: "Goku", race: "Saiyan" }`
27
27
  * body: optional, the body will be inserted with the [`-d`](http://curl.haxx.se/docs/manpage.html#-d) option of curl as it come.
28
28
 
29
- All the method returns a [`Response`](https://github.com/casapick/paper-cup/blob/master/lib/paper_cup/response.rb) object, that has two attributes status and body. The status is the status code of the respond and the body is the response.
29
+ All the method returns a [`Response`](https://github.com/casapick/paper-cup/blob/master/lib/paper_cup/response.rb) object, that has two attributes `status` and `body`.
30
+
31
+ ### Using a client
32
+ You can also instantiate a client and store to make continous calls to the same domain. It can have default params and headers that will be used on all calls.
33
+
34
+ ~~~ruby
35
+ client = PaperCup::Client.new url: 'https://api.github.com'
36
+ client.get('users/casapick')
37
+ ~~~
38
+
39
+ You can also "persist" an endpoint. You also can append headers and params:
40
+
41
+ ~~~ruby
42
+ users = client.endpoint(:users)
43
+ => #<PaperCup::Client:0x007fba325a5188 @options={:url=>"https://api.github.com/users", :headers=>{}, :params=>{}}>
44
+
45
+ response = users.get(:casapick)
46
+ response.body
47
+ => {"login"=>"casapick",
48
+ "id"=>8136680,
49
+ "avatar_url"=>"https://avatars.githubusercontent.com/u/8136680?v=3",
50
+ # ...
51
+ "created_at"=>"2014-07-11T15:41:22Z",
52
+ "updated_at"=>"2015-07-29T18:39:00Z"}
53
+ ~~~
30
54
 
31
55
  GET
32
56
  ----
33
57
 
34
- `PaperCup.get(url: url)`
58
+ `PaperCup.get(url)`
35
59
 
36
60
  POST - PUT
37
61
  ----------
38
62
 
39
- `PaperCup.post(url: url, params: {name: 'pepe'}, headers: { "Content-Type" => "application/json"})`
63
+ `PaperCup.post(url, params: {name: 'pepe'}, headers: { "Content-Type" => "application/json"})`
40
64
 
41
65
 
42
66
  Response
@@ -0,0 +1,52 @@
1
+ module PaperCup
2
+ class Client
3
+ attr_accessor :options
4
+
5
+ def initialize(opts)
6
+ @options = opts
7
+ end
8
+
9
+ def url
10
+ options.fetch(:url)
11
+ end
12
+
13
+ def headers
14
+ options[:headers] || {}
15
+ end
16
+
17
+ def params
18
+ options[:params] || {}
19
+ end
20
+
21
+ PaperCup::METHODS.each do |method|
22
+ define_method(method) do |path, opts = {}|
23
+ opts = merged_opts_for_request(
24
+ method: method,
25
+ path: path,
26
+ **opts
27
+ )
28
+ Request.new(opts).exec
29
+ end
30
+ end
31
+
32
+ def endpoint(path, opts = {})
33
+ opts = merged_opts_for_request opts.merge(path: path)
34
+ opts.reject! do |k,v|
35
+ k == :method
36
+ end
37
+
38
+ return self.class.new(opts)
39
+ end
40
+
41
+ private
42
+
43
+ def merged_opts_for_request(opts)
44
+ _method = opts[:method] || :get
45
+ _url = File.join(url, opts.fetch(:path).to_s)
46
+ _headers = headers.merge(opts[:headers] || {})
47
+ _params = params.merge(opts[:params] || {})
48
+
49
+ { method: _method, url: _url, headers: _headers, params: _params }
50
+ end
51
+ end
52
+ end
data/lib/paper_cup.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require "paper_cup/request"
2
- module PaperCup
3
2
 
3
+ module PaperCup
4
4
  INSERT_METHODS = %w(post put)
5
5
  QUERY_METHODS = %w(get head)
6
6
  METHODS = INSERT_METHODS + QUERY_METHODS
@@ -11,3 +11,5 @@ module PaperCup
11
11
  end
12
12
  end
13
13
  end
14
+
15
+ require "paper_cup/client"
data/paper-cup.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.platform = Gem::Platform::RUBY
3
3
  s.name = 'paper-cup'
4
- s.version = '0.1.2'
4
+ s.version = '0.2.0'
5
5
  s.date = '2015-08-05'
6
6
  s.summary = "Use of Open3 to make request"
7
7
  s.description = "Use curl with Open3 for making request"
@@ -0,0 +1,36 @@
1
+ require 'test_helper'
2
+
3
+ def client
4
+ @client ||= PaperCup::Client.new(
5
+ url: 'http://api.github.com',
6
+ params: { test_param_1: :pepito, test_param_2: :pepita },
7
+ headers: { 'X-Test-Header-1': :pepote, 'X-Test-Header-2': :papita }
8
+ )
9
+ end
10
+
11
+ describe PaperCup::Client do
12
+ it '#merged_opts_for_request merges options properly' do
13
+ result = client.send :merged_opts_for_request, {
14
+ method: :get,
15
+ path: '/users/casapick',
16
+ params: { test_param_2: :popote, test_param_3: :papota },
17
+ headers: { 'X-Test-Header-2': :popote, 'X-Test-Header-3': :papota }
18
+ }
19
+
20
+ assert_equal result.fetch(:method), :get
21
+ assert_equal result.fetch(:url), 'http://api.github.com/users/casapick'
22
+ assert_equal result.fetch(:params), test_param_1: :pepito, test_param_2: :popote, test_param_3: :papota
23
+ assert_equal result.fetch(:headers), 'X-Test-Header-1': :pepote, 'X-Test-Header-2': :popote, 'X-Test-Header-3': :papota
24
+ end
25
+
26
+ it '#endpoint returns a new client with merged url, params and headers' do
27
+ users = client.endpoint(:users,
28
+ params: { test_param_2: :popote, test_param_3: :papota },
29
+ headers: { 'X-Test-Header-2': :popote, 'X-Test-Header-3': :papota }
30
+ )
31
+
32
+ assert_equal users.url, 'http://api.github.com/users'
33
+ assert_equal users.params, test_param_1: :pepito, test_param_2: :popote, test_param_3: :papota
34
+ assert_equal users.headers, 'X-Test-Header-1': :pepote, 'X-Test-Header-2': :popote, 'X-Test-Header-3': :papota
35
+ end
36
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paper-cup
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mariano Matayoshi
@@ -80,11 +80,13 @@ files:
80
80
  - README.md
81
81
  - Rakefile
82
82
  - lib/paper_cup.rb
83
+ - lib/paper_cup/client.rb
83
84
  - lib/paper_cup/request.rb
84
85
  - lib/paper_cup/response.rb
85
86
  - lib/paper_cup/utils.rb
86
87
  - paper-cup.gemspec
87
88
  - test/paper_cup_test.rb
89
+ - test/paper_cup_test/client_test.rb
88
90
  - test/paper_cup_test/request_test.rb
89
91
  - test/paper_cup_test/response_test.rb
90
92
  - test/test_helper.rb