em-resolv-replace 1.0.0 → 1.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/README.rdoc +8 -0
- data/VERSION +1 -1
- data/lib/em-resolv-replace.rb +21 -3
- data/test/test_em-resolv-replace.rb +12 -0
- metadata +28 -13
data/README.rdoc
CHANGED
@@ -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.
|
1
|
+
1.1.0
|
data/lib/em-resolv-replace.rb
CHANGED
@@ -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? ?
|
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? ?
|
32
|
+
EM.reactor_running? ? em_getaddresses(host) : orig_getaddresses(host)
|
22
33
|
end
|
23
34
|
|
24
35
|
private
|
25
36
|
|
26
|
-
def
|
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
|
-
|
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-
|
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
|
-
|
18
|
-
|
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
|
-
|
32
|
+
type: :development
|
33
|
+
version_requirements: *id001
|
25
34
|
- !ruby/object:Gem::Dependency
|
26
35
|
name: mocha
|
27
|
-
|
28
|
-
|
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
|
-
|
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.
|
94
|
+
rubygems_version: 1.3.6
|
80
95
|
signing_key:
|
81
96
|
specification_version: 3
|
82
97
|
summary: EventMachine-aware DNS lookup for Ruby
|