em-net-http 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,4 +1,8 @@
1
1
  source :rubygems
2
2
 
3
3
  gem 'em-http-request'
4
- gem 'right_aws'
4
+ group :development do
5
+ gem 'rspec', '>= 1.2.9'
6
+ gem 'weary'
7
+ gem 'right_aws'
8
+ end
data/Rakefile CHANGED
@@ -11,6 +11,9 @@ begin
11
11
  gem.homepage = "http://github.com/jfairbairn/em-net-http"
12
12
  gem.authors = ["James Fairbairn"]
13
13
  gem.add_development_dependency "rspec", ">= 1.2.9"
14
+ gem.add_development_dependency "weary"
15
+ gem.add_development_dependency "right_aws"
16
+
14
17
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
15
18
  end
16
19
  Jeweler::GemcutterTasks.new
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
data/em-net-http.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{em-net-http}
8
- s.version = "0.1.0"
8
+ s.version = "0.1.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["James Fairbairn"]
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
27
27
  "em-net-http.gemspec",
28
28
  "lib/em-net-http.rb",
29
29
  "lib/test.rb",
30
+ "lib/test_weary.rb",
30
31
  "spec/em-net-http_spec.rb",
31
32
  "spec/spec.opts",
32
33
  "spec/spec_helper.rb"
@@ -47,11 +48,17 @@ Gem::Specification.new do |s|
47
48
 
48
49
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
49
50
  s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
51
+ s.add_development_dependency(%q<weary>, [">= 0"])
52
+ s.add_development_dependency(%q<right_aws>, [">= 0"])
50
53
  else
51
54
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
55
+ s.add_dependency(%q<weary>, [">= 0"])
56
+ s.add_dependency(%q<right_aws>, [">= 0"])
52
57
  end
53
58
  else
54
59
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
60
+ s.add_dependency(%q<weary>, [">= 0"])
61
+ s.add_dependency(%q<right_aws>, [">= 0"])
55
62
  end
56
63
  end
57
64
 
data/lib/em-net-http.rb CHANGED
@@ -6,19 +6,21 @@ require 'fiber'
6
6
 
7
7
  module EventMachine
8
8
  class NetHTTPResponse
9
- include Enumerable
10
- def each(&blk)
11
- @header.each(&blk)
12
- end
13
-
14
- attr_reader :code, :body, :header
9
+ attr_reader :code, :body, :header, :message, :http_version
10
+ alias_method :msg, :message
15
11
 
16
12
  def initialize(res)
17
- @code = res.response_header.status.to_s
13
+ @code = res.response_header.http_status
14
+ @message = res.response_header.http_reason
15
+ @http_version = res.response_header.http_version
18
16
  @header = res.response_header
19
17
  @body = res.response
20
18
  end
21
19
 
20
+ def content_type
21
+ self['content-type']
22
+ end
23
+
22
24
  def [](k)
23
25
  @header[key(k)]
24
26
  end
@@ -31,11 +33,28 @@ module EventMachine
31
33
  @body
32
34
  end
33
35
 
36
+ def to_hash
37
+ h={}
38
+ @header.each do |k, v|
39
+ h[fromkey(k)] = v
40
+ end
41
+ h
42
+ end
43
+
34
44
  private
35
45
  def key(k)
36
46
  k.upcase.tr('-','_')
37
47
  end
38
48
 
49
+ def fromkey(k)
50
+ k.tr('_', '-').split('-').map{|i|i.capitalize}.join('-')
51
+ end
52
+
53
+ include Enumerable
54
+ def each(&blk)
55
+ @header.each(&blk)
56
+ end
57
+
39
58
  end
40
59
  end
41
60
 
@@ -43,10 +62,18 @@ end
43
62
  module Net
44
63
  class HTTP
45
64
  def request(req, body = nil, &block)
46
- uri = Addressable::URI.parse("#{use_ssl? ? 'https://' : 'http://'}#{addr_port}#{req.path}")
47
- req = EM::HttpRequest.new(uri).send(req.class::METHOD.downcase.to_sym)
48
65
  f=Fiber.current
49
- req.callback {|res|f.resume(EM::NetHTTPResponse.new(res))}
66
+ uri = Addressable::URI.parse("#{use_ssl? ? 'https://' : 'http://'}#{addr_port}#{req.path}")
67
+ opts = body.nil? ? {} : {:body => body}
68
+ if use_ssl?
69
+ sslopts = opts[:ssl] = {}
70
+ sslopts[:verify_peer] = verify_mode == OpenSSL::SSL::VERIFY_PEER
71
+ sslopts[:private_key_file] = key if key
72
+ sslopts[:cert_chain_file] = ca_file if ca_file
73
+ end
74
+ httpreq = EM::HttpRequest.new(uri).send(req.class::METHOD.downcase.to_sym, opts)
75
+ httpreq.callback {|res|f.resume(EM::NetHTTPResponse.new(res))}
76
+ httpreq.errback {|res|f.resume(EM::NetHTTPResponse.new(res))}
50
77
  res = Fiber.yield
51
78
  yield res if block_given?
52
79
  res
data/lib/test.rb CHANGED
@@ -3,10 +3,9 @@ require File.dirname(__FILE__) + '/em-net-http'
3
3
 
4
4
  EM.run do
5
5
  Fiber.new do
6
- http = Net::HTTP.new('www.google.com')
7
- http.start do |http|
6
+ Net::HTTP.start('encrypted.google.com', :use_ssl=>true, :verify_mode => OpenSSL::SSL::VERIFY_NONE) do |http|
8
7
  res = http.get('/search?q=james')
9
- p res['transfer-encoding']
8
+ puts res.body
10
9
  end
11
10
  EM.stop_event_loop
12
11
  end.resume
data/lib/test_weary.rb ADDED
@@ -0,0 +1,44 @@
1
+ $: << '.'
2
+ require File.dirname(__FILE__) + '/em-net-http'
3
+ require 'weary'
4
+
5
+ module Weary
6
+ class Response
7
+ def content_type ; @content_type.split(';').first ; end
8
+
9
+ def value ; self ; end
10
+ end
11
+
12
+ class Request
13
+ def perform!(&block)
14
+ @on_complete = block if block_given?
15
+ before_send.call(self) if before_send
16
+ req = http.request(request)
17
+ response = Response.new(req, self)
18
+ if response.redirected? && follows?
19
+ response.follow_redirect
20
+ else
21
+ on_complete.call(response) if on_complete
22
+ response
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ EM.run do
29
+ Fiber.new do
30
+ class TwitterUser < Weary::Base
31
+ domain "http://twitter.com/users/"
32
+
33
+ get "show" do |resource|
34
+ resource.with = [:id, :user_id, :screen_name]
35
+ end
36
+ end
37
+
38
+ user = TwitterUser.new
39
+ me = user.show(:id => "jfairbairn").perform
40
+ puts me['status']['text']
41
+
42
+ EM.stop_event_loop
43
+ end.resume
44
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 0
9
- version: 0.1.0
8
+ - 1
9
+ version: 0.1.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - James Fairbairn
@@ -32,6 +32,32 @@ dependencies:
32
32
  version: 1.2.9
33
33
  type: :development
34
34
  version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: weary
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ segments:
44
+ - 0
45
+ version: "0"
46
+ type: :development
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: right_aws
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ segments:
57
+ - 0
58
+ version: "0"
59
+ type: :development
60
+ version_requirements: *id003
35
61
  description: Monkeypatching Net::HTTP to use em-http-request under the hood.
36
62
  email: james@netlagoon.com
37
63
  executables: []
@@ -52,6 +78,7 @@ files:
52
78
  - em-net-http.gemspec
53
79
  - lib/em-net-http.rb
54
80
  - lib/test.rb
81
+ - lib/test_weary.rb
55
82
  - spec/em-net-http_spec.rb
56
83
  - spec/spec.opts
57
84
  - spec/spec_helper.rb