web_client 0.0.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.
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ .idea
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in web_client.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # WebClient
2
+
3
+ Net::HTTP wrapper easy to use
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'web_client'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install web_client
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,38 @@
1
+ module WebClient
2
+ class Base
3
+ include Net
4
+
5
+ attr_reader :http
6
+
7
+ def initialize(host, port=nil)
8
+ @http = HTTP.new(host, port)
9
+ end
10
+
11
+ def get(path, data={}, &block)
12
+ request(HTTP::Get, path, data, &block)
13
+ end
14
+
15
+ def post(path, data, &block)
16
+ request(HTTP::Post, path, data, &block)
17
+ end
18
+
19
+ def put(path, data, &block)
20
+ request(HTTP::Put, path, data, &block)
21
+ end
22
+
23
+ def delete(path, data={}, &block)
24
+ request(HTTP::Delete, path, data, &block)
25
+ end
26
+
27
+ private
28
+
29
+ def request(method_class, path, data=nil)
30
+ request = method_class.new(path)
31
+ request.set_form_data(data) if data.is_a? Hash
32
+ request.body = data if data.is_a? String
33
+ yield(request, http) if block_given?
34
+ http.request(request)
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,31 @@
1
+ module WebClient
2
+ class Resource < Base
3
+ attr_reader :resource
4
+
5
+ def initialize(resource, *args)
6
+ @resource = resource
7
+ super(*args)
8
+ end
9
+
10
+ def index(&block)
11
+ get("/#{resource}.json", &block)
12
+ end
13
+
14
+ def show(id, &block)
15
+ get("/#{resource}/#{id}.json", &block)
16
+ end
17
+
18
+ def create(data, &block)
19
+ post("/#{resource}.json", data, &block)
20
+ end
21
+
22
+ def update(id, data, &block)
23
+ put("/#{resource}/#{id}.json", data, &block)
24
+ end
25
+
26
+ def destroy(id, &block)
27
+ delete("/#{resource}/#{id}.json", &block)
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,3 @@
1
+ module WebClient
2
+ VERSION = "0.0.1"
3
+ end
data/lib/web_client.rb ADDED
@@ -0,0 +1,7 @@
1
+ require 'net/http'
2
+
3
+ require 'web_client/version'
4
+ require 'web_client/base'
5
+ require 'web_client/resource'
6
+
7
+
data/spec/base_spec.rb ADDED
@@ -0,0 +1,77 @@
1
+ require 'spec_helper'
2
+
3
+ HOST = 'www.mock.dev'
4
+
5
+ describe WebClient::Base do
6
+
7
+ let(:client) { WebClient::Base.new(HOST) }
8
+
9
+ context 'HTTP methods' do
10
+
11
+ it 'get' do
12
+ stub_request(:get, "#{HOST}/get_stub").to_return(body: 'content')
13
+ response = client.get('/get_stub')
14
+ response.should be_a Net::HTTPOK
15
+ response.body.should eq 'content'
16
+ end
17
+
18
+ it 'post' do
19
+ stub_request(:post, "#{HOST}/post_stub").with(body: 'form_data')
20
+ response = client.post('/post_stub', 'form_data')
21
+ response.should be_a Net::HTTPOK
22
+ response.body.should be_nil
23
+ end
24
+
25
+ it 'put' do
26
+ stub_request(:put, "#{HOST}/put_stub").with(body: 'form_data')
27
+ response = client.put('/put_stub', 'form_data')
28
+ response.should be_a Net::HTTPOK
29
+ response.body.should be_nil
30
+ end
31
+
32
+ it 'delete' do
33
+ stub_request(:delete, "#{HOST}/delete_stub").with(body: 'form_data')
34
+ response = client.delete('/delete_stub', 'form_data')
35
+ response.should be_a Net::HTTPOK
36
+ response.body.should be_nil
37
+ end
38
+
39
+ end
40
+
41
+ context 'Actions with a block' do
42
+
43
+ it 'get' do
44
+ stub_request(:get, /.*/)
45
+ client.get('/get_stub') do |request, http|
46
+ request.path.should eq '/get_stub'
47
+ http.address.should eq HOST
48
+ end
49
+ end
50
+
51
+ it 'post' do
52
+ stub_request(:post, /.*/)
53
+ client.post('/post_stub', {}) do |request, http|
54
+ request.path.should eq '/post_stub'
55
+ http.address.should eq HOST
56
+ end
57
+ end
58
+
59
+ it 'put' do
60
+ stub_request(:put, /.*/)
61
+ client.put('/put_stub', {}) do |request, http|
62
+ request.path.should eq '/put_stub'
63
+ http.address.should eq HOST
64
+ end
65
+ end
66
+
67
+ it 'delete' do
68
+ stub_request(:delete, /.*/)
69
+ client.delete('/delete_stub') do |request, http|
70
+ request.path.should eq '/delete_stub'
71
+ http.address.should eq HOST
72
+ end
73
+ end
74
+
75
+ end
76
+
77
+ end
@@ -0,0 +1,83 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ describe WebClient::Resource do
5
+
6
+ let(:resource) { WebClient::Resource.new(:users, 'localhost', 3000) }
7
+
8
+ it 'index' do
9
+ content = '[{"email":"jperez@mail.com","first_name":"Juan","id":1,"last_name":"Perez","organization":"Test"}]'
10
+ stub_request(:get, "http://localhost:3000/users.json").to_return(body: content)
11
+
12
+ response = resource.index
13
+
14
+ response.should be_a Net::HTTPOK
15
+ data = JSON.parse(response.body)
16
+ data.should be_a Array
17
+ data.first['id'].should_not be_nil
18
+ data.first['first_name'].should_not be_nil
19
+ data.first['last_name'].should_not be_nil
20
+ data.first['email'].should_not be_nil
21
+ data.first['organization'].should_not be_nil
22
+ end
23
+
24
+ it 'show' do
25
+ content = '{"email":"jperez@mail.com","first_name":"Juan","id":1,"last_name":"Perez","organization":"Test"}'
26
+ stub_request(:get, "http://localhost:3000/users/1.json").to_return(body: content)
27
+
28
+ response = resource.show(1)
29
+
30
+ response.should be_a Net::HTTPOK
31
+ data = JSON.parse(response.body)
32
+ data['id'].should_not be_nil
33
+ data['first_name'].should eq 'Juan'
34
+ data['last_name'].should eq 'Perez'
35
+ data['email'].should eq 'jperez@mail.com'
36
+ data['organization'].should eq 'Test'
37
+ end
38
+
39
+ it 'create' do
40
+ content = '{"email":"jperez@mail.com","first_name":"Juan","id":1,"last_name":"Perez","organization":"Test"}'
41
+ stub_request(:post, "http://localhost:3000/users.json").to_return(body: content, status: 201)
42
+
43
+ params = {
44
+ 'user[first_name]' => 'Juan',
45
+ 'user[last_name]' => 'Perez',
46
+ 'user[email]' => 'jperez@mail.com',
47
+ 'user[organization]' => 'Test'
48
+ }
49
+ response = resource.create(params)
50
+
51
+ response.should be_a Net::HTTPCreated
52
+ data = JSON.parse(response.body)
53
+ data['id'].should_not be_nil
54
+ data['first_name'].should eq 'Juan'
55
+ data['last_name'].should eq 'Perez'
56
+ data['email'].should eq 'jperez@mail.com'
57
+ data['organization'].should eq 'Test'
58
+ end
59
+
60
+ it 'update' do
61
+ stub_request(:put, "http://localhost:3000/users/1.json").to_return(status: 204)
62
+
63
+ params = {
64
+ 'user[first_name]' => 'Juan',
65
+ 'user[last_name]' => 'Perez',
66
+ 'user[email]' => 'jperez@mail.com',
67
+ 'user[organization]' => 'Test'
68
+ }
69
+ response = resource.update(1, params)
70
+
71
+ response.should be_a Net::HTTPNoContent
72
+ response.body.should be_nil
73
+ end
74
+
75
+ it 'destroy' do
76
+ stub_request(:delete, "http://localhost:3000/users/1.json").to_return(status: 204)
77
+
78
+ response = resource.destroy(1)
79
+
80
+ response.should be_a Net::HTTPNoContent
81
+ response.body.should be_nil
82
+ end
83
+ end
@@ -0,0 +1,3 @@
1
+ require 'webmock/rspec'
2
+ require 'json'
3
+ require 'web_client'
@@ -0,0 +1,20 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "web_client/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'web_client'
7
+ s.version = WebClient::VERSION
8
+ s.authors = ['Gabriel Naiman']
9
+ s.email = ['gabynaiman@gmail.com']
10
+ s.homepage = 'https://github.com/gabynaiman/web_client'
11
+ s.summary = %q{Net::HTTP wrapper easy to use}
12
+ s.description = %q{Net::HTTP wrapper easy to use}
13
+ s.files = `git ls-files`.split("\n")
14
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
15
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
16
+ s.require_paths = ["lib"]
17
+
18
+ s.add_development_dependency 'rspec'
19
+ s.add_development_dependency 'webmock'
20
+ end
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: web_client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Gabriel Naiman
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-08-24 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: &20428260 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *20428260
25
+ - !ruby/object:Gem::Dependency
26
+ name: webmock
27
+ requirement: &20427120 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *20427120
36
+ description: Net::HTTP wrapper easy to use
37
+ email:
38
+ - gabynaiman@gmail.com
39
+ executables: []
40
+ extensions: []
41
+ extra_rdoc_files: []
42
+ files:
43
+ - .gitignore
44
+ - Gemfile
45
+ - README.md
46
+ - Rakefile
47
+ - lib/web_client.rb
48
+ - lib/web_client/base.rb
49
+ - lib/web_client/resource.rb
50
+ - lib/web_client/version.rb
51
+ - spec/base_spec.rb
52
+ - spec/resource_spec.rb
53
+ - spec/spec_helper.rb
54
+ - web_client.gemspec
55
+ homepage: https://github.com/gabynaiman/web_client
56
+ licenses: []
57
+ post_install_message:
58
+ rdoc_options: []
59
+ require_paths:
60
+ - lib
61
+ required_ruby_version: !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ! '>='
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ requirements: []
74
+ rubyforge_project:
75
+ rubygems_version: 1.8.16
76
+ signing_key:
77
+ specification_version: 3
78
+ summary: Net::HTTP wrapper easy to use
79
+ test_files: []