brauchbar 0.1.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.
- data/Gemfile +7 -0
- data/README.md +71 -0
- data/Rakefile +77 -0
- data/lib/brauchbar/request.rb +26 -0
- data/lib/brauchbar/response.rb +16 -0
- data/lib/brauchbar.rb +18 -0
- metadata +97 -0
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
# brauchbar
|
2
|
+
|
3
|
+
Adj, German.
|
4
|
+
practical, convenient, utilizable, feasible
|
5
|
+
|
6
|
+
In other words, a decent HTTP client for Ruby!
|
7
|
+
|
8
|
+
## Introduction
|
9
|
+
|
10
|
+
### But what.... what is wrong with all the other client?
|
11
|
+
|
12
|
+
The majority of other clients are built on top off Net::HTTP. This is the HTTP library built into Ruby, and [it is slow](http://pivotallabs.com/users/steve/blog/articles/644-net-http-alternatives)... It also has a few annoying features, such as downcasing all headers. Oh, and they don't have a cool German name!
|
13
|
+
|
14
|
+
### So, this is special how?
|
15
|
+
|
16
|
+
brauchbar is built on top of the [patron](http://github.com/toland/patron) gem, which itself is based upon libcurl. In other words, it has history. History is good.
|
17
|
+
The brauchbar API is based upon a number of other good HTTP clients and is designed to be simple and easy to integrate to your application.
|
18
|
+
|
19
|
+
brauchbar doesn't introduce anything new into the world of HTTP clients, however it brings the best parts of all of them into one place, which is accessible by a simple, future-proof API.
|
20
|
+
|
21
|
+
## Install
|
22
|
+
|
23
|
+
gem install brauchbar
|
24
|
+
|
25
|
+
## Usage
|
26
|
+
|
27
|
+
### Basic usage
|
28
|
+
|
29
|
+
Brauchbar.get "http://www.google.co.uk/search?hl=en&q=brauchbar&meta=&esrch=FT1"
|
30
|
+
|
31
|
+
### Headers can be added
|
32
|
+
|
33
|
+
Brauchbar.get "http://www.google.co.uk/search?hl=en&q=brauchbar&meta=&esrch=FT1",
|
34
|
+
:headers => { 'Accept' => 'text/html', 'User-Agent' => 'brauchbar test 1.0' }
|
35
|
+
|
36
|
+
### A Response object is returned
|
37
|
+
|
38
|
+
res = Brauchbar.get "http://www.google.co.uk/search?hl=en&q=brauchbar&meta=&esrch=FT1"
|
39
|
+
|
40
|
+
# response body
|
41
|
+
# <html><head>.....</html>
|
42
|
+
puts res
|
43
|
+
|
44
|
+
# headers
|
45
|
+
# { 'Content-Type' => 'text/html' }
|
46
|
+
puts res.headers
|
47
|
+
|
48
|
+
# http status
|
49
|
+
# 200
|
50
|
+
puts res.status
|
51
|
+
|
52
|
+
## Hacking
|
53
|
+
|
54
|
+
Feel free to hack away at this, however I won't merge anything unless you have adequate tests for it! Once you have done, send a pull request.
|
55
|
+
|
56
|
+
## Todo / What would be nice
|
57
|
+
|
58
|
+
* POST requests with POST data
|
59
|
+
* Remembering of cookies between requests
|
60
|
+
* Changing of timeouts
|
61
|
+
* HTTP authentication
|
62
|
+
|
63
|
+
## Contributors
|
64
|
+
|
65
|
+
* [Luca Spiller](http://github.com/lucaspiller/)
|
66
|
+
|
67
|
+
## License
|
68
|
+
|
69
|
+
brauchbar is licensed under a [Creative Commons Attribution 2.0 UK: England & Wales License](http://creativecommons.org/licenses/by/2.0/uk/).
|
70
|
+
|
71
|
+

|
data/Rakefile
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
$LOAD_PATH.unshift 'lib'
|
5
|
+
|
6
|
+
require 'rake/rdoctask'
|
7
|
+
require 'rspec/core/rake_task'
|
8
|
+
require 'rspec/core/version'
|
9
|
+
|
10
|
+
Rspec::Core::RakeTask.new(:spec)
|
11
|
+
task :default => :spec
|
12
|
+
|
13
|
+
|
14
|
+
require 'rake/gempackagetask'
|
15
|
+
require 'rake/rdoctask'
|
16
|
+
|
17
|
+
# This builds the actual gem. For details of what all these options
|
18
|
+
# mean, and other ones you can add, check the documentation here:
|
19
|
+
#
|
20
|
+
# http://rubygems.org/read/chapter/20
|
21
|
+
#
|
22
|
+
spec = Gem::Specification.new do |s|
|
23
|
+
|
24
|
+
# Change these as appropriate
|
25
|
+
s.name = "brauchbar"
|
26
|
+
s.version = "0.1.0"
|
27
|
+
s.summary = "adj, German. practical, convenient, utilizable, feasible AKA a decent HTTP client for Ruby"
|
28
|
+
s.author = "Luca Spiller"
|
29
|
+
s.email = "luca@stackednotion.com"
|
30
|
+
s.homepage = "http://www.stackednotion.com/"
|
31
|
+
|
32
|
+
s.has_rdoc = true
|
33
|
+
s.extra_rdoc_files = %w(README.md)
|
34
|
+
s.rdoc_options = %w(--main README.md)
|
35
|
+
|
36
|
+
# Add any extra files to include in the gem
|
37
|
+
s.files = %w(Gemfile Rakefile README.md) + Dir.glob("{spec,lib/**/*}")
|
38
|
+
s.require_paths = ["lib"]
|
39
|
+
|
40
|
+
# If you want to depend on other gems, add them here, along with any
|
41
|
+
# relevant versions
|
42
|
+
s.add_dependency("patron", "0.4.6")
|
43
|
+
|
44
|
+
# If your tests use any gems, include them here
|
45
|
+
s.add_development_dependency("rspec", ">=2.0.0.beta.5")
|
46
|
+
end
|
47
|
+
|
48
|
+
# This task actually builds the gem. We also regenerate a static
|
49
|
+
# .gemspec file, which is useful if something (i.e. GitHub) will
|
50
|
+
# be automatically building a gem for this project. If you're not
|
51
|
+
# using GitHub, edit as appropriate.
|
52
|
+
#
|
53
|
+
# To publish your gem online, install the 'gemcutter' gem; Read more
|
54
|
+
# about that here: http://gemcutter.org/pages/gem_docs
|
55
|
+
Rake::GemPackageTask.new(spec) do |pkg|
|
56
|
+
pkg.gem_spec = spec
|
57
|
+
end
|
58
|
+
|
59
|
+
desc "Build the gemspec file #{spec.name}.gemspec"
|
60
|
+
task :gemspec do
|
61
|
+
file = File.dirname(__FILE__) + "/#{spec.name}.gemspec"
|
62
|
+
File.open(file, "w") {|f| f << spec.to_ruby }
|
63
|
+
end
|
64
|
+
|
65
|
+
task :package => :gemspec
|
66
|
+
|
67
|
+
# Generate documentation
|
68
|
+
Rake::RDocTask.new do |rd|
|
69
|
+
rd.main = "README.md"
|
70
|
+
rd.rdoc_files.include("README.md", "lib/**/*.rb")
|
71
|
+
rd.rdoc_dir = "rdoc"
|
72
|
+
end
|
73
|
+
|
74
|
+
desc 'Clear out RDoc and generated packages'
|
75
|
+
task :clean => [:clobber_rdoc, :clobber_package] do
|
76
|
+
rm "#{spec.name}.gemspec"
|
77
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class Brauchbar::Request
|
2
|
+
def self.execute(params = {})
|
3
|
+
# validation
|
4
|
+
raise ArgumentError.new('Method option required') if params[:method].nil?
|
5
|
+
raise ArgumentError.new('Unsupported Method') unless %w{ get }.include?(params[:method].to_s)
|
6
|
+
|
7
|
+
raise ArgumentError.new('URI option required') if params[:uri].nil?
|
8
|
+
begin
|
9
|
+
URI.parse(params[:uri])
|
10
|
+
rescue URI::InvalidURIError => e
|
11
|
+
raise ArgumentError.new('Invalid URI')
|
12
|
+
end
|
13
|
+
|
14
|
+
# clear headers
|
15
|
+
params[:headers] ||= {}
|
16
|
+
|
17
|
+
# create request
|
18
|
+
session = Patron::Session.new
|
19
|
+
|
20
|
+
# make request
|
21
|
+
response = session.request(params[:method], params[:uri], params[:headers])
|
22
|
+
|
23
|
+
# create brauchbar response object
|
24
|
+
Brauchbar::Response.new response
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class Brauchbar::Response < String
|
2
|
+
attr_reader :raw_status, :raw_body, :raw_headers
|
3
|
+
|
4
|
+
def initialize(response)
|
5
|
+
@raw_status = response.status
|
6
|
+
@raw_body = response.body
|
7
|
+
@raw_headers = response.headers
|
8
|
+
|
9
|
+
# no need to overwrite to_s :)
|
10
|
+
super(body)
|
11
|
+
end
|
12
|
+
|
13
|
+
alias :status :raw_status
|
14
|
+
alias :body :raw_body
|
15
|
+
alias :headers :raw_headers
|
16
|
+
end
|
data/lib/brauchbar.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'uri'
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'patron'
|
5
|
+
|
6
|
+
class Brauchbar
|
7
|
+
autoload :Request, 'brauchbar/request'
|
8
|
+
autoload :Response, 'brauchbar/response'
|
9
|
+
|
10
|
+
def self.get(uri, params = {})
|
11
|
+
options = {
|
12
|
+
:method => :get,
|
13
|
+
:uri => uri
|
14
|
+
}.merge(params)
|
15
|
+
|
16
|
+
Request.execute options
|
17
|
+
end
|
18
|
+
end
|
metadata
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: brauchbar
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
version: 0.1.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Luca Spiller
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-04-08 00:00:00 +01:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: patron
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - "="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
- 4
|
30
|
+
- 6
|
31
|
+
version: 0.4.6
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: rspec
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 2
|
43
|
+
- 0
|
44
|
+
- 0
|
45
|
+
- beta
|
46
|
+
- 5
|
47
|
+
version: 2.0.0.beta.5
|
48
|
+
type: :development
|
49
|
+
version_requirements: *id002
|
50
|
+
description:
|
51
|
+
email: luca@stackednotion.com
|
52
|
+
executables: []
|
53
|
+
|
54
|
+
extensions: []
|
55
|
+
|
56
|
+
extra_rdoc_files:
|
57
|
+
- README.md
|
58
|
+
files:
|
59
|
+
- Gemfile
|
60
|
+
- Rakefile
|
61
|
+
- README.md
|
62
|
+
- lib/brauchbar/request.rb
|
63
|
+
- lib/brauchbar/response.rb
|
64
|
+
- lib/brauchbar.rb
|
65
|
+
has_rdoc: true
|
66
|
+
homepage: http://www.stackednotion.com/
|
67
|
+
licenses: []
|
68
|
+
|
69
|
+
post_install_message:
|
70
|
+
rdoc_options:
|
71
|
+
- --main
|
72
|
+
- README.md
|
73
|
+
require_paths:
|
74
|
+
- lib
|
75
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
segments:
|
80
|
+
- 0
|
81
|
+
version: "0"
|
82
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
segments:
|
87
|
+
- 0
|
88
|
+
version: "0"
|
89
|
+
requirements: []
|
90
|
+
|
91
|
+
rubyforge_project:
|
92
|
+
rubygems_version: 1.3.6
|
93
|
+
signing_key:
|
94
|
+
specification_version: 3
|
95
|
+
summary: adj, German. practical, convenient, utilizable, feasible AKA a decent HTTP client for Ruby
|
96
|
+
test_files: []
|
97
|
+
|