expect4r 0.0.7.dev → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/expect/io.rb +9 -78
- data/lib/expect4r.rb +6 -0
- data/lib/router/cisco/common/ping.rb +10 -3
- data/lib/router/juniper/junos/ping.rb +6 -2
- data/lib/router/vyatta/modes.rb +124 -0
- data/lib/router/vyatta/ping.rb +96 -0
- data/lib/router/vyatta/show.rb +23 -0
- data/lib/router/vyatta/vyatta.rb +74 -0
- metadata +39 -53
data/lib/expect/io.rb
CHANGED
@@ -119,6 +119,7 @@ module Expect4r
|
|
119
119
|
|
120
120
|
def logout
|
121
121
|
child_exit
|
122
|
+
@lp, @_lp_1 = nil,nil
|
122
123
|
@pid
|
123
124
|
end
|
124
125
|
|
@@ -150,11 +151,13 @@ module Expect4r
|
|
150
151
|
raise
|
151
152
|
end
|
152
153
|
|
153
|
-
def interact(k
|
154
|
+
def interact(k="C-z")
|
155
|
+
k.upcase!
|
156
|
+
raise unless k =~ /C\-[A-Z]/
|
154
157
|
login unless connected?
|
155
|
-
STDOUT.puts "\n\#\n\# #{
|
158
|
+
STDOUT.puts "\n\#\n\# #{k.gsub(/C\-/,'^')} to terminate.\n\#\n"
|
156
159
|
reader :start
|
157
|
-
writer k
|
160
|
+
writer(eval "?\\#{k}")
|
158
161
|
rescue
|
159
162
|
ensure
|
160
163
|
begin
|
@@ -228,74 +231,6 @@ module Expect4r
|
|
228
231
|
def get_prompt
|
229
232
|
putline '', :no_trim=>true, :no_echo=>true
|
230
233
|
end
|
231
|
-
|
232
|
-
def putline(line, arg={})
|
233
|
-
raise ConnectionError.new(line) if child_exited?
|
234
|
-
|
235
|
-
arg = {:ti=>13, :no_echo=>false, :debug=>0, :sync=> false, :no_trim=>false}.merge(arg)
|
236
|
-
no_echo = arg[:no_echo]
|
237
|
-
ti = arg[:ti]
|
238
|
-
unless arg[:no_trim]==true
|
239
|
-
line = line.gsub(/\s+/,' ').gsub(/^\s+/,'')
|
240
|
-
if line.size==0
|
241
|
-
log "DEBUG PUTLINE: NOT SENDING **** line = '#{line.inspect}' arg=#{arg.inspect}"
|
242
|
-
return [[], :empty_line]
|
243
|
-
end
|
244
|
-
end
|
245
|
-
sync if arg[:sync]
|
246
|
-
t0 = Time.now
|
247
|
-
exp_puts line
|
248
|
-
output=[]
|
249
|
-
rc, buf = catch(:done) do
|
250
|
-
@r.readbuf(arg[:ti]) do |r|
|
251
|
-
if r._io_exit?
|
252
|
-
r._io_save(no_echo)
|
253
|
-
throw :done, [ :abort, r._io_buf1]
|
254
|
-
end
|
255
|
-
case r._io_string
|
256
|
-
when @ps1, @ps1_bis
|
257
|
-
unless r._io_more?
|
258
|
-
r._io_save no_echo, "matching PROMPT"
|
259
|
-
# puts "debug IO BUF 1 #{r._io_buf1.inspect}"
|
260
|
-
throw(:done, [:ok, r._io_buf1])
|
261
|
-
end
|
262
|
-
exp_internal "more..."
|
263
|
-
when /(.+)\r\n/, "\r\n"
|
264
|
-
r._io_save no_echo, "matching EOL"
|
265
|
-
when @more
|
266
|
-
r._io_save no_echo, "matching MORE"
|
267
|
-
putc ' '
|
268
|
-
else
|
269
|
-
# For objects that include Expect4r but do not subclass base Login class.
|
270
|
-
@matches ||= []
|
271
|
-
@matches.each { |match, _send|
|
272
|
-
if r._io_string =~ match
|
273
|
-
r._io_save no_echo, "match #{match}"
|
274
|
-
if _send.is_a?(Proc)
|
275
|
-
_send.call(self)
|
276
|
-
else
|
277
|
-
exp_puts _send
|
278
|
-
end
|
279
|
-
end
|
280
|
-
}
|
281
|
-
end
|
282
|
-
end
|
283
|
-
end
|
284
|
-
|
285
|
-
case rc
|
286
|
-
when :abort
|
287
|
-
elapsed = Time.now - t0
|
288
|
-
if elapsed < ti
|
289
|
-
child_exit
|
290
|
-
raise ConnectionError.new(line)
|
291
|
-
else
|
292
|
-
raise ExpTimeoutError.new(line, elapsed)
|
293
|
-
end
|
294
|
-
else
|
295
|
-
@lp = buf.last
|
296
|
-
end
|
297
|
-
[buf, rc]
|
298
|
-
end
|
299
234
|
|
300
235
|
def readline(ti=0.2, matches=[])
|
301
236
|
ret = expect(/(.+)\r\n/, ti, matches)
|
@@ -383,6 +318,7 @@ module Expect4r
|
|
383
318
|
err_msg += buf.join("\n ")
|
384
319
|
raise ConnectionError.new(err_msg)
|
385
320
|
else
|
321
|
+
@_lp_1 = buf[-2]
|
386
322
|
@lp = buf.last
|
387
323
|
end
|
388
324
|
[buf, ev]
|
@@ -457,17 +393,11 @@ module Expect4r
|
|
457
393
|
raise ExpTimeoutError.new(line, elapsed)
|
458
394
|
end
|
459
395
|
else
|
396
|
+
@_lp_1 = buf[-2]
|
460
397
|
@lp = buf.last
|
461
398
|
end
|
462
399
|
[buf, rc]
|
463
400
|
end
|
464
|
-
def ctrl_key(k)
|
465
|
-
case k
|
466
|
-
when ?\C-c ; '^C'
|
467
|
-
when ?\C-q ; '^Q'
|
468
|
-
when ?\C-z ; '^Z'
|
469
|
-
end
|
470
|
-
end
|
471
401
|
|
472
402
|
def writer(k)
|
473
403
|
stty_raw
|
@@ -494,6 +424,7 @@ module Expect4r
|
|
494
424
|
break if c.nil?
|
495
425
|
STDOUT.putc c
|
496
426
|
end
|
427
|
+
rescue Errno::EIO
|
497
428
|
rescue => e
|
498
429
|
p e
|
499
430
|
p '7777777'
|
data/lib/expect4r.rb
CHANGED
@@ -6,6 +6,7 @@ module Expect4r
|
|
6
6
|
autoload :Iox, 'router/cisco/iox/iox'
|
7
7
|
autoload :Ios, 'router/cisco/ios/ios'
|
8
8
|
autoload :J, 'router/juniper/junos/junos'
|
9
|
+
autoload :V, 'router/vyatta/vyatta'
|
9
10
|
autoload :Shell, 'misc/shell'
|
10
11
|
autoload :RShell, 'misc/shell'
|
11
12
|
|
@@ -31,6 +32,11 @@ module Expect4r
|
|
31
32
|
module Iox
|
32
33
|
autoload :Modes, 'router/cisco/iox/modes'
|
33
34
|
end
|
35
|
+
module Vyatta
|
36
|
+
autoload :Modes, 'router/vyatta/modes'
|
37
|
+
autoload :Ping, 'router/vyatta/ping'
|
38
|
+
autoload :Show, 'router/vyatta/show'
|
39
|
+
end
|
34
40
|
module Junos
|
35
41
|
autoload :Modes, 'router/juniper/junos/modes'
|
36
42
|
autoload :Show, 'router/juniper/junos/show'
|
@@ -27,7 +27,7 @@ module Ping
|
|
27
27
|
# :size=> 512
|
28
28
|
# :protocol=> 'ipv4', :count=> 20, :size=> 1500, :timeout=>5
|
29
29
|
#
|
30
|
-
def ping(target_ip_address, arg={})
|
30
|
+
def ping(target_ip_address, arg={}, &on_error)
|
31
31
|
|
32
32
|
pct_success = arg.delete(:pct_success) || 99
|
33
33
|
|
@@ -47,7 +47,8 @@ module Ping
|
|
47
47
|
|
48
48
|
end
|
49
49
|
|
50
|
-
r = output[0].find { |x| x =~/Success.*[^\d](\d+) percent \((\d+)\/(\d+)\)/}
|
50
|
+
# r = output[0].find { |x| x =~/Success.*[^\d](\d+) percent \((\d+)\/(\d+)\)/}
|
51
|
+
r = output.join =~/Success.*[^\d](\d+) percent \((\d+)\/(\d+)\)/
|
51
52
|
|
52
53
|
if r &&
|
53
54
|
Regexp.last_match(1) &&
|
@@ -65,7 +66,13 @@ module Ping
|
|
65
66
|
end
|
66
67
|
|
67
68
|
else
|
68
|
-
|
69
|
+
|
70
|
+
if on_error
|
71
|
+
on_error.call(self)
|
72
|
+
else
|
73
|
+
raise ::Expect4r::Router::Error::PingError.new(@host, target_ip_address, pct_success, pct, tx, rx, output)
|
74
|
+
end
|
75
|
+
|
69
76
|
end
|
70
77
|
|
71
78
|
end
|
@@ -21,7 +21,7 @@ module Ping
|
|
21
21
|
# :size=> 512
|
22
22
|
# :protocol=> 'ipv4', :count=> 20, :size=> 1500, :timeout=>5, :ttl=>16
|
23
23
|
#
|
24
|
-
def ping(host, arg={})
|
24
|
+
def ping(host, arg={}, &on_error)
|
25
25
|
|
26
26
|
pct_success = arg.delete(:pct_success) || 99
|
27
27
|
|
@@ -45,7 +45,11 @@ module Ping
|
|
45
45
|
end
|
46
46
|
|
47
47
|
else
|
48
|
-
|
48
|
+
if on_error
|
49
|
+
on_error.call(self)
|
50
|
+
else
|
51
|
+
raise ::Expect4r::Router::Error::PingError.new(@host, host, pct_success, $1.to_i, tx, rx, output)
|
52
|
+
end
|
49
53
|
end
|
50
54
|
|
51
55
|
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
require 'router/modes'
|
2
|
+
|
3
|
+
module Expect4r::Router::Vyatta
|
4
|
+
module Modes
|
5
|
+
|
6
|
+
# Adds a Vyatta <tt>config</tt> mixin.
|
7
|
+
#
|
8
|
+
# Example:
|
9
|
+
#
|
10
|
+
# c.config %{
|
11
|
+
# edit protocols bgp 100
|
12
|
+
# set neighbor 192.168.129.1
|
13
|
+
# set neighbor 192.168.129.1 capability orf prefix-list receive
|
14
|
+
# set neighbor 192.168.129.1 ebgp-multihop 10
|
15
|
+
# set neighbor 192.168.129.1 remote-as 200
|
16
|
+
# }
|
17
|
+
#
|
18
|
+
def config(stmts=nil, arg={})
|
19
|
+
login unless connected?
|
20
|
+
if stmts
|
21
|
+
mode = in?
|
22
|
+
to_config
|
23
|
+
output = exp_send(stmts, arg)
|
24
|
+
output << commit
|
25
|
+
change_mode_to(mode)
|
26
|
+
output.flatten
|
27
|
+
else
|
28
|
+
to_config
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# Adds a Vyatta <tt>exec</tt> mixin.
|
33
|
+
#
|
34
|
+
# Example:
|
35
|
+
#
|
36
|
+
# v.exec 'set cli screen-length 0'
|
37
|
+
#
|
38
|
+
def exec(cmd=nil, *args)
|
39
|
+
login unless connected?
|
40
|
+
if cmd.nil?
|
41
|
+
to_exec
|
42
|
+
else
|
43
|
+
if config?
|
44
|
+
exp_send("run #{cmd}", *args)
|
45
|
+
elsif exec?
|
46
|
+
exp_send cmd, *args
|
47
|
+
else
|
48
|
+
mode = _mode_?
|
49
|
+
to_exec
|
50
|
+
output = exp_send(cmd, *args)
|
51
|
+
change_mode_to mode
|
52
|
+
output
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def exec?
|
58
|
+
if logged_as_root?
|
59
|
+
! config?
|
60
|
+
else
|
61
|
+
@lp =~ /\$ $/ ? true : false
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def config?
|
66
|
+
if logged_as_root?
|
67
|
+
@_lp_1 =~ /\[edit\]/ ? true : false
|
68
|
+
else
|
69
|
+
@lp =~ /^.+# $/ ? true : false
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def in?(mode=:none)
|
74
|
+
login unless connected?
|
75
|
+
case mode
|
76
|
+
when :exec ; exec?
|
77
|
+
when :config ; config?
|
78
|
+
else
|
79
|
+
_mode_?
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def to_config
|
84
|
+
return :config if config?
|
85
|
+
to_exec
|
86
|
+
putline 'configure', :debug=>1
|
87
|
+
raise RuntimeError, "unable to get to config mode" unless config?
|
88
|
+
:config
|
89
|
+
end
|
90
|
+
|
91
|
+
def to_exec
|
92
|
+
return :exec if exec?
|
93
|
+
top if config?
|
94
|
+
exit
|
95
|
+
raise RuntimeError, "unable to get to exec mode" unless exec?
|
96
|
+
:exec
|
97
|
+
end
|
98
|
+
|
99
|
+
def change_mode_to(mode)
|
100
|
+
login unless connected?
|
101
|
+
case mode
|
102
|
+
when :exec ; to_exec
|
103
|
+
when :config ; to_config
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
private
|
108
|
+
|
109
|
+
def logged_as_root?
|
110
|
+
! (@_is_root_ ||= (@user=='root' and @lp =~ /root@/)).nil?
|
111
|
+
end
|
112
|
+
|
113
|
+
def _mode_?
|
114
|
+
putline ' ', :no_trim=>true, :no_echo=>true unless @lp
|
115
|
+
if exec?
|
116
|
+
:exec
|
117
|
+
elsif config?
|
118
|
+
:config
|
119
|
+
else
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
124
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
require 'router/error'
|
2
|
+
|
3
|
+
module Expect4r::Router::Vyatta
|
4
|
+
module Ping
|
5
|
+
|
6
|
+
# Adds a ping method to V class:
|
7
|
+
#
|
8
|
+
# Options are:
|
9
|
+
# * <tt>:count</tt> or <tt>:repeat_count</tt>
|
10
|
+
# * <tt>:size</tt> or <tt>:datagram_size</tt>
|
11
|
+
# * <tt>:datagram_size</tt> or <tt>:size</tt>
|
12
|
+
# * <tt>:timeout</tt>
|
13
|
+
# * <tt>:tos</tt>
|
14
|
+
# * <tt>:ttl</tt>
|
15
|
+
# * <tt>:pattern</tt>
|
16
|
+
# * <tt>:pct_success</tt> - default is 99.
|
17
|
+
#
|
18
|
+
# Option examples:
|
19
|
+
# :count => 10
|
20
|
+
# :timeout => 1
|
21
|
+
# :size=> 512
|
22
|
+
# :protocol=> 'ipv4', :count=> 20, :size=> 1500, :timeout=>5, :ttl=>16
|
23
|
+
# Example:
|
24
|
+
# v.ping('192.168.129.1', :count=>10, :size=>256) { |r| r.interact }
|
25
|
+
#--
|
26
|
+
# PING 192.168.129.1 (192.168.129.1) 56(84) bytes of data.
|
27
|
+
# 64 bytes from 192.168.129.1: icmp_req=1 ttl=64 time=0.173 ms
|
28
|
+
# 64 bytes from 192.168.129.1: icmp_req=2 ttl=64 time=0.132 ms
|
29
|
+
# 64 bytes from 192.168.129.1: icmp_req=3 ttl=64 time=0.144 ms
|
30
|
+
# 64 bytes from 192.168.129.1: icmp_req=4 ttl=64 time=0.128 ms
|
31
|
+
# 64 bytes from 192.168.129.1: icmp_req=5 ttl=64 time=0.225 ms
|
32
|
+
#
|
33
|
+
# --- 192.168.129.1 ping statistics ---
|
34
|
+
# 5 packets transmitted, 5 received, 0% packet loss, time 3996ms
|
35
|
+
# rtt min/avg/max/mdev = 0.128/0.160/0.225/0.037 ms
|
36
|
+
# vyatta@vyatta2:~$
|
37
|
+
#++
|
38
|
+
def ping(host, arg={}, &on_error)
|
39
|
+
|
40
|
+
pct_success = arg.delete(:pct_success) || 99
|
41
|
+
|
42
|
+
output = exp_send(ping_cmd(host, arg), arg)
|
43
|
+
|
44
|
+
r = output[0].find { |x| x =~/(\d+) packets transmitted, (\d+) received, (\d+)\% packet loss/}
|
45
|
+
|
46
|
+
if r &&
|
47
|
+
Regexp.last_match(1) &&
|
48
|
+
Regexp.last_match(2) &&
|
49
|
+
Regexp.last_match(3)
|
50
|
+
|
51
|
+
success = 100 - $3.to_i
|
52
|
+
tx = $2.to_i
|
53
|
+
rx = $3.to_i
|
54
|
+
|
55
|
+
if (100 - $3.to_i) < pct_success
|
56
|
+
raise ::Expect4r::Router::Error::PingError.new(@host, host, pct_success, tx, rx, output)
|
57
|
+
else
|
58
|
+
[$1.to_i,[$2.to_i,$3.to_i],output]
|
59
|
+
end
|
60
|
+
|
61
|
+
else
|
62
|
+
|
63
|
+
if on_error
|
64
|
+
on_error.call(self)
|
65
|
+
else
|
66
|
+
raise ::Expect4r::Router::Error::PingError.new(@host, host, pct_success, $1.to_i, tx, rx, output)
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
# vyatta@vyatta2:~$ /bin/ping
|
76
|
+
# Usage: ping [-LRUbdfnqrvVaAD] [-c count] [-i interval] [-w deadline]
|
77
|
+
# [-p pattern] [-s packetsize] [-t ttl] [-I interface]
|
78
|
+
# [-M pmtudisc-hint] [-m mark] [-S sndbuf]
|
79
|
+
# [-T tstamp-options] [-Q tos] [hop1 ...] destination
|
80
|
+
def ping_cmd(host, arg={})
|
81
|
+
arg = {:count=>5}.merge(arg)
|
82
|
+
cmd = "/bin/ping"
|
83
|
+
cmd += " -c #{arg[:count] || arg[:repeat_count]}" if arg[:count] || arg[:repeat_count]
|
84
|
+
cmd += " -s #{arg[:size] || arg[:datagram_size]}" if arg[:size] || arg[:datagram_size]
|
85
|
+
cmd += " -p #{arg[:pattern]}" if arg[:pattern]
|
86
|
+
cmd += " -Q #{arg[:tos]}" if arg[:tos]
|
87
|
+
cmd += " -t #{arg[:ttl]}" if arg[:ttl]
|
88
|
+
cmd += " -S #{arg[:sndbuf]}" if arg[:sndbuf]
|
89
|
+
cmd += " -c #{arg[:intf] || arg[:interface]}" if arg[:intf] || arg[:interface]
|
90
|
+
cmd += " -w #{arg[:deadline]}" if arg[:deadline]
|
91
|
+
cmd += " #{host}"
|
92
|
+
cmd
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
|
2
|
+
module Expect4r::Router::Vyatta
|
3
|
+
module Show
|
4
|
+
|
5
|
+
def show(s, arg={})
|
6
|
+
output = []
|
7
|
+
s.each_line { |l|
|
8
|
+
output << exec("show #{l}", arg) if l.strip.size>0
|
9
|
+
}
|
10
|
+
output
|
11
|
+
end
|
12
|
+
|
13
|
+
def method_missing(name, *args, &block)
|
14
|
+
if name.to_s =~ /^show_/
|
15
|
+
cmd = name.to_s.split('_').join(' ') + args.join(' ')
|
16
|
+
output = __send__ :exec, cmd, *args
|
17
|
+
else
|
18
|
+
super
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
class Expect4r::V < ::Expect4r::BaseLoginObject
|
2
|
+
include Expect4r
|
3
|
+
include Expect4r::Router::Error
|
4
|
+
include Expect4r::Router::Common
|
5
|
+
include Expect4r::Router::Common::Modes
|
6
|
+
include Expect4r::Router::Vyatta::Modes
|
7
|
+
include Expect4r::Router::Vyatta::Ping
|
8
|
+
include Expect4r::Router::Vyatta::Show
|
9
|
+
|
10
|
+
class << self
|
11
|
+
# v = V.new_telnet 'hostname'
|
12
|
+
def new_telnet(*args)
|
13
|
+
if args.size==1 and args[0].is_a?(String)
|
14
|
+
super :host=> args[0], :user=>'vyatta', :pwd=>'vyatta'
|
15
|
+
else
|
16
|
+
super
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# v = V.new_ssh 'hostname'
|
21
|
+
def new_ssh(*args)
|
22
|
+
if args.size==1 and args[0].is_a?(String)
|
23
|
+
super :host=> args[0], :user=>'vyatta', :pwd=>'vyatta'
|
24
|
+
else
|
25
|
+
super
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def initialize(*args)
|
31
|
+
super
|
32
|
+
@ps1 = /([A-z\d]+)@([A-z\d]+)(:[^\$]+|)(#|\$) $/
|
33
|
+
end
|
34
|
+
|
35
|
+
def login(arg={})
|
36
|
+
super(spawnee, arg)
|
37
|
+
putline "terminal length 0"
|
38
|
+
putline "terminal width 0"
|
39
|
+
self
|
40
|
+
end
|
41
|
+
alias :_login_ :login
|
42
|
+
|
43
|
+
def putline(line,arg={})
|
44
|
+
o, rc = super
|
45
|
+
raise SyntaxError.new(self.class.to_s, line) if o.join =~ /(% unknown|Invalid command)/
|
46
|
+
o
|
47
|
+
end
|
48
|
+
|
49
|
+
def top
|
50
|
+
putline 'top'
|
51
|
+
end
|
52
|
+
|
53
|
+
def exit
|
54
|
+
putline 'exit'
|
55
|
+
end
|
56
|
+
|
57
|
+
def exit_discard
|
58
|
+
putline 'exit discard'
|
59
|
+
end
|
60
|
+
|
61
|
+
def commit(arg={})
|
62
|
+
return unless config?
|
63
|
+
@matches << [/Exit with uncommitted changes.+\(yes\)/, 'yes']
|
64
|
+
output = putline "commit", arg
|
65
|
+
if /error: configuration check-out failed/.match(output.join)
|
66
|
+
rollack
|
67
|
+
raise SemanticError.new(self.class.to_s, output)
|
68
|
+
end
|
69
|
+
output
|
70
|
+
end
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
end
|
metadata
CHANGED
@@ -1,47 +1,35 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: expect4r
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 0
|
8
|
-
- 7
|
9
|
-
- dev
|
10
|
-
version: 0.0.7.dev
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.8
|
5
|
+
prerelease:
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Jean-Michel Esnault
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-02-20 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
22
15
|
name: highline
|
23
|
-
|
24
|
-
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
segments:
|
29
|
-
- 1
|
30
|
-
- 5
|
31
|
-
- 0
|
16
|
+
requirement: &70302466268900 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
32
21
|
version: 1.5.0
|
33
22
|
type: :runtime
|
34
|
-
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70302466268900
|
35
25
|
description: A Ruby Library for interacting with IOS, IOS-XR, and JUNOS CLI.
|
36
26
|
email: jesnault@gmail.com
|
37
27
|
executables: []
|
38
|
-
|
39
28
|
extensions: []
|
40
|
-
|
41
|
-
extra_rdoc_files:
|
29
|
+
extra_rdoc_files:
|
42
30
|
- LICENSE
|
43
31
|
- README.rdoc
|
44
|
-
files:
|
32
|
+
files:
|
45
33
|
- COPYING
|
46
34
|
- LICENSE
|
47
35
|
- README.rdoc
|
@@ -67,44 +55,42 @@ files:
|
|
67
55
|
- lib/router/juniper/junos/ping.rb
|
68
56
|
- lib/router/juniper/junos/show.rb
|
69
57
|
- lib/router/modes.rb
|
70
|
-
|
58
|
+
- lib/router/vyatta/modes.rb
|
59
|
+
- lib/router/vyatta/ping.rb
|
60
|
+
- lib/router/vyatta/show.rb
|
61
|
+
- lib/router/vyatta/vyatta.rb
|
62
|
+
- test/expect4r_test.rb
|
63
|
+
- test/misc/passwd_test.rb
|
64
|
+
- test/router/cisco/iox/iox_test.rb
|
71
65
|
homepage: http://github.com/jesnault/expect4r
|
72
66
|
licenses: []
|
73
|
-
|
74
67
|
post_install_message:
|
75
|
-
rdoc_options:
|
68
|
+
rdoc_options:
|
76
69
|
- --quiet
|
77
70
|
- --title
|
78
71
|
- Expect4r
|
79
72
|
- --line-numbers
|
80
|
-
require_paths:
|
73
|
+
require_paths:
|
81
74
|
- lib
|
82
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
- 1
|
88
|
-
- 8
|
89
|
-
- 6
|
75
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
77
|
+
requirements:
|
78
|
+
- - ! '>='
|
79
|
+
- !ruby/object:Gem::Version
|
90
80
|
version: 1.8.6
|
91
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
- 3
|
98
|
-
- 1
|
99
|
-
version: 1.3.1
|
81
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
83
|
+
requirements:
|
84
|
+
- - ! '>='
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
100
87
|
requirements: []
|
101
|
-
|
102
88
|
rubyforge_project:
|
103
|
-
rubygems_version: 1.
|
89
|
+
rubygems_version: 1.8.10
|
104
90
|
signing_key:
|
105
91
|
specification_version: 3
|
106
92
|
summary: Expect4r
|
107
|
-
test_files:
|
93
|
+
test_files:
|
108
94
|
- test/expect4r_test.rb
|
109
95
|
- test/misc/passwd_test.rb
|
110
96
|
- test/router/cisco/iox/iox_test.rb
|