paper-cup 0.2.0 → 0.2.1

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: 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