em-resolv-replace 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -14,6 +14,14 @@ Ruby replacement that is not loaded by default:
14
14
  Socket objects to use resolv. This gem monkeypatches the monkeypatch so that the Socket
15
15
  classes will use an EventMachine-aware resolver, em-dns-resolver.
16
16
 
17
+ == Requirements
18
+
19
+ em-resolv-replace requires Ruby 1.9.
20
+
21
+ == Installation
22
+
23
+ gem install em-resolv-replace
24
+
17
25
  == Usage
18
26
 
19
27
  Just require em-resolv-replace when initializing your application:
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0
1
+ 1.1.0
@@ -6,24 +6,42 @@ require 'resolv-replace'
6
6
  require 'em-dns-resolver'
7
7
  require 'fiber'
8
8
 
9
+ #
10
+ =begin
11
+ require './em-resolv-replace'
12
+ EM.run {
13
+ Fiber.new do
14
+ p Resolv.getaddresses('localhost')
15
+ p Resolv.getaddress('localhost')
16
+ EM.stop
17
+ end.resume
18
+ }
19
+ =end
9
20
  # Now override the override with EM-aware functions
10
21
  class Resolv
11
22
 
12
23
  alias :orig_getaddress :getaddress
13
24
 
14
25
  def getaddress(host)
15
- EM.reactor_running? ? em_getaddress(host)[0] : orig_getaddress(host)
26
+ EM.reactor_running? ? em_getaddresses(host)[0] : orig_getaddress(host)
16
27
  end
17
28
 
18
29
  alias :orig_getaddresses :getaddresses
19
30
 
20
31
  def getaddresses(host)
21
- EM.reactor_running? ? em_getaddress(host) : orig_getaddresses(host)
32
+ EM.reactor_running? ? em_getaddresses(host) : orig_getaddresses(host)
22
33
  end
23
34
 
24
35
  private
25
36
 
26
- def em_getaddress(host)
37
+ def em_getaddresses(host)
38
+ # Lookup in /etc/hosts
39
+ x = []
40
+ @hosts ||= Resolv::Hosts.new
41
+ @hosts.each_address(host) {|addr| x << addr.to_s }
42
+ return x unless x.empty?
43
+
44
+ # Nothing, hit DNS
27
45
  fiber = Fiber.current
28
46
  df = EM::DnsResolver.resolve(host)
29
47
  df.callback do |a|
@@ -40,4 +40,16 @@ class TestEmResolvReplace < Test::Unit::TestCase
40
40
  end
41
41
  end
42
42
 
43
+ should "resolve localhost with eventmachine" do
44
+ Resolv.any_instance.expects(:orig_getaddresses).times(0)
45
+
46
+ EM.run do
47
+ Fiber.new do
48
+ results = Resolv.getaddresses('localhost')
49
+ assert (results.first =~ IPv4 || results.first =~ /::/), "Invalid IP #{results}"
50
+ EM.stop
51
+ end.resume
52
+ end
53
+ end
54
+
43
55
  end
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: em-resolv-replace
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ prerelease: false
5
+ segments:
6
+ - 1
7
+ - 1
8
+ - 0
9
+ version: 1.1.0
5
10
  platform: ruby
6
11
  authors:
7
12
  - Mike Perham
@@ -9,29 +14,37 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2010-02-10 00:00:00 -06:00
17
+ date: 2010-04-05 00:00:00 -05:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: shoulda
17
- type: :development
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - ">="
22
26
  - !ruby/object:Gem::Version
27
+ segments:
28
+ - 2
29
+ - 10
30
+ - 3
23
31
  version: 2.10.3
24
- version:
32
+ type: :development
33
+ version_requirements: *id001
25
34
  - !ruby/object:Gem::Dependency
26
35
  name: mocha
27
- type: :development
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
30
38
  requirements:
31
39
  - - ">="
32
40
  - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ - 9
44
+ - 8
33
45
  version: 0.9.8
34
- version:
46
+ type: :development
47
+ version_requirements: *id002
35
48
  description:
36
49
  email: mperham@gmail.com
37
50
  executables: []
@@ -65,18 +78,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
65
78
  requirements:
66
79
  - - ">="
67
80
  - !ruby/object:Gem::Version
81
+ segments:
82
+ - 0
68
83
  version: "0"
69
- version:
70
84
  required_rubygems_version: !ruby/object:Gem::Requirement
71
85
  requirements:
72
86
  - - ">="
73
87
  - !ruby/object:Gem::Version
88
+ segments:
89
+ - 0
74
90
  version: "0"
75
- version:
76
91
  requirements: []
77
92
 
78
93
  rubyforge_project:
79
- rubygems_version: 1.3.5
94
+ rubygems_version: 1.3.6
80
95
  signing_key:
81
96
  specification_version: 3
82
97
  summary: EventMachine-aware DNS lookup for Ruby