paper-cup 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8c341398114a2a9df8db16fdabaafaeddc12112c
4
- data.tar.gz: faf80ab69ab9ab93de024834cd141791c6332b06
3
+ metadata.gz: 2fe587af3f94b03560c48e7230b74463eeb6b8f5
4
+ data.tar.gz: a58fa340c4a8c565964e7a33d7f646b6a03711d5
5
5
  SHA512:
6
- metadata.gz: d438c4b0506ccd7bb9da19cb1f8a02f533ac3b82fd278d0a37afde50cfbad6fbfb72e2a510bb07cf13665bc890cc4331585830aeeba48418d40af6d58c90d544
7
- data.tar.gz: 817983209a7a5605beba459718e75b225c6d2b65a911f381dd46cade61bc9f357632f3cdd78f6c71a028a0bf9916dbec7e1c2e41d3ae29de3f5d7f3bd7771702
6
+ metadata.gz: 89d19d3bef95afa1467681a6cdf7ddb732fd58817e51b71dd6d684af9a3361fc686a6673c39b52295c7f4c57da48108dc55076c929bc4c8a660dbbfda21ac150
7
+ data.tar.gz: c8e58104bcae79dff315f1c9e76bb95e5ecf4ed0a9696446b7b66fb56248cff22d5e6af31397d3bc07e80c34b1a510a5144d958c3e434dede1407039a7a6d287
data/CHANGELOG.md ADDED
@@ -0,0 +1,16 @@
1
+ 0.2.1 / August 5, 2015
2
+ ==================
3
+
4
+ * Start usign [Recursive Open Struct] for the response.
5
+
6
+ 0.2.0 / August 5, 2015
7
+ ==================
8
+
9
+ * Added Client.
10
+
11
+ 0.1.0 / August 5, 2015
12
+ ==================
13
+
14
+ * Initial release.
15
+
16
+ [Recursive Open Struct]: <https://github.com/aetherknight/recursive-open-struct>
data/README.md CHANGED
@@ -44,12 +44,12 @@ users = client.endpoint(:users)
44
44
 
45
45
  response = users.get(:casapick)
46
46
  response.body
47
- => {"login"=>"casapick",
48
- "id"=>8136680,
49
- "avatar_url"=>"https://avatars.githubusercontent.com/u/8136680?v=3",
47
+ => #<RecursiveOpenStruct login="casapick",
48
+ id=8136680,
49
+ avatar_url="https://avatars.githubusercontent.com/u/8136680?v=3",
50
50
  # ...
51
- "created_at"=>"2014-07-11T15:41:22Z",
52
- "updated_at"=>"2015-07-29T18:39:00Z"}
51
+ created_at="2014-07-11T15:41:22Z",
52
+ updated_at="2015-07-29T18:39:00Z">
53
53
  ~~~
54
54
 
55
55
  GET
@@ -1,4 +1,5 @@
1
1
  require 'json'
2
+ require 'recursive_open_struct'
2
3
  require_relative 'utils'
3
4
 
4
5
  module PaperCup
@@ -12,7 +13,7 @@ module PaperCup
12
13
  def body
13
14
  @body ||= begin
14
15
  str = @raw_response[0..-4]
15
- PaperCup.valid_json?(str) ? JSON.parse(str) : str
16
+ PaperCup.valid_json?(str) ? build_body(JSON.parse(str)) : str
16
17
  end
17
18
  end
18
19
 
@@ -23,5 +24,15 @@ module PaperCup
23
24
  def success?
24
25
  status.between?(200, 299)
25
26
  end
27
+
28
+ private
29
+
30
+ def build_body(str)
31
+ if str.class == Array
32
+ str.map { |e| RecursiveOpenStruct.new(e, recurse_over_arrays: true) }
33
+ else
34
+ RecursiveOpenStruct.new(str, recurse_over_arrays: true)
35
+ end
36
+ end
26
37
  end
27
38
  end
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.2.0'
4
+ s.version = '0.2.1'
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"
@@ -16,4 +16,5 @@ Gem::Specification.new do |s|
16
16
  s.add_development_dependency "minitest-happy", '~> 1.0.0'
17
17
  s.add_development_dependency "pry", '~> 0.10.1'
18
18
  s.add_development_dependency "rake", '~> 10.4.2'
19
+ s.add_development_dependency "recursive-open-struct", '~> 0.6.5'
19
20
  end
@@ -5,7 +5,7 @@ describe PaperCup do
5
5
  describe "when doing a GET request to an url" do
6
6
  describe "that respond with a JSON" do
7
7
  it "must parse the response" do
8
- Open3.stub :capture3, [Mock.json] do # stub goes away once the block is done
8
+ Open3.stub :capture3, [Mock.json_array] do # stub goes away once the block is done
9
9
  r = PaperCup.get("http://www.google.com")
10
10
  assert_equal "Rails", r.body.first["framework"], "The framework must be rails"
11
11
  end
@@ -4,7 +4,7 @@ def client
4
4
  @client ||= PaperCup::Client.new(
5
5
  url: 'http://api.github.com',
6
6
  params: { test_param_1: :pepito, test_param_2: :pepita },
7
- headers: { 'X-Test-Header-1': :pepote, 'X-Test-Header-2': :papita }
7
+ headers: { 'X-Test-Header-1' => :pepote, 'X-Test-Header-2' => :papita }
8
8
  )
9
9
  end
10
10
 
@@ -14,23 +14,23 @@ describe PaperCup::Client do
14
14
  method: :get,
15
15
  path: '/users/casapick',
16
16
  params: { test_param_2: :popote, test_param_3: :papota },
17
- headers: { 'X-Test-Header-2': :popote, 'X-Test-Header-3': :papota }
17
+ headers: { 'X-Test-Header-2' => :popote, 'X-Test-Header-3' => :papota }
18
18
  }
19
19
 
20
20
  assert_equal result.fetch(:method), :get
21
21
  assert_equal result.fetch(:url), 'http://api.github.com/users/casapick'
22
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
23
+ assert_equal result.fetch(:headers), 'X-Test-Header-1' => :pepote, 'X-Test-Header-2' => :popote, 'X-Test-Header-3' => :papota
24
24
  end
25
25
 
26
26
  it '#endpoint returns a new client with merged url, params and headers' do
27
27
  users = client.endpoint(:users,
28
28
  params: { test_param_2: :popote, test_param_3: :papota },
29
- headers: { 'X-Test-Header-2': :popote, 'X-Test-Header-3': :papota }
29
+ headers: { 'X-Test-Header-2' => :popote, 'X-Test-Header-3' => :papota }
30
30
  )
31
31
 
32
32
  assert_equal users.url, 'http://api.github.com/users'
33
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
34
+ assert_equal users.headers, 'X-Test-Header-1' => :pepote, 'X-Test-Header-2' => :popote, 'X-Test-Header-3' => :papota
35
35
  end
36
36
  end
@@ -15,14 +15,38 @@ describe PaperCup::Response do
15
15
  end
16
16
 
17
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.body
18
+ describe "and an array" do
19
+ it "must be an array of RecursiveOpenStruct" do
20
+ r = PaperCup::Response.new(Mock.json_array)
21
+ assert_equal 1, r.body.map(&:class).uniq.count, "There must be only one kind of objects"
22
+ assert_equal RecursiveOpenStruct, r.body.map(&:class).uniq.first, "The class of the elements must be RecursiveOpenStruct"
23
+ end
24
+
25
+ it "must set the response properly" do
26
+ r = PaperCup::Response.new(Mock.json_array)
27
+ assert_equal JSON.parse(Mock.json_array[0..-4]).first["framework"], r.body.first.framework
28
+ end
29
+
30
+ it "must set the status code response properly" do
31
+ r = PaperCup::Response.new(Mock.json_array)
32
+ assert_equal 200, r.status
33
+ end
21
34
  end
35
+ describe "and not an array" do
36
+ it "must be a RecursiveOpenStruct object" do
37
+ r = PaperCup::Response.new(Mock.json)
38
+ assert_equal RecursiveOpenStruct, r.body.class, "The class of the elements must be RecursiveOpenStruct"
39
+ end
22
40
 
23
- it "must set the status code response properly" do
24
- r = PaperCup::Response.new(Mock.json)
25
- assert_equal 200, r.status
41
+ it "must set the response properly" do
42
+ r = PaperCup::Response.new(Mock.json)
43
+ assert_equal JSON.parse(Mock.json[0..-4])["framework"], r.body.framework
44
+ end
45
+
46
+ it "must set the status code response properly" do
47
+ r = PaperCup::Response.new(Mock.json)
48
+ assert_equal 200, r.status
49
+ end
26
50
  end
27
51
  end
28
52
  end
data/test/test_helper.rb CHANGED
@@ -10,10 +10,14 @@ module Mock
10
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
11
  end
12
12
 
13
- def json
13
+ def json_array
14
14
  "[{\"framework\":\"Rails\",\"language\":\"ruby\"}]200"
15
15
  end
16
16
 
17
+ def json
18
+ "{\"framework\":\"Rails\",\"language\":\"ruby\"}200"
19
+ end
20
+
17
21
  def params
18
22
  { framework: 'cuba', language: 'ruby' }
19
23
  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.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mariano Matayoshi
@@ -68,6 +68,20 @@ dependencies:
68
68
  - - "~>"
69
69
  - !ruby/object:Gem::Version
70
70
  version: 10.4.2
71
+ - !ruby/object:Gem::Dependency
72
+ name: recursive-open-struct
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - "~>"
76
+ - !ruby/object:Gem::Version
77
+ version: 0.6.5
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - "~>"
83
+ - !ruby/object:Gem::Version
84
+ version: 0.6.5
71
85
  description: Use curl with Open3 for making request
72
86
  email: matayoshi.mariano@gmail.com
73
87
  executables: []
@@ -76,6 +90,7 @@ extra_rdoc_files: []
76
90
  files:
77
91
  - ".gitignore"
78
92
  - ".travis.yml"
93
+ - CHANGELOG.md
79
94
  - Gemfile
80
95
  - README.md
81
96
  - Rakefile