xlogin 0.2.5 → 0.3.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.
- checksums.yaml +4 -4
- data/bin/xlogin +1 -2
- data/lib/xlogin/delegator.rb +2 -2
- data/lib/xlogin/firmware_factory.rb +20 -37
- data/lib/xlogin/queue.rb +2 -3
- data/lib/xlogin/version.rb +1 -1
- data/lib/xlogin.rb +29 -16
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 236da0f51f5506ec90714afb37232998575b0fe0
|
4
|
+
data.tar.gz: 3907742fb721d176716f845f1575f09edae86f73
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 143ba3dd1a9f1f9a8dc2d9a8d9fe5121a1d8421d22117b56c6e3a83ed283aa55e80cf91a3f2c02785e8b1ca281bf183e2627a90b4d5ea99f7466ff278b14aa5b
|
7
|
+
data.tar.gz: 1193fa2db3d0876788e33856d59b4f74cba71400de2d5f479a476ce6453e5226081158a53204f5ff5d4888dcef2ff67113f28c747e63d0f67097263ff1799f20
|
data/bin/xlogin
CHANGED
data/lib/xlogin/delegator.rb
CHANGED
@@ -8,8 +8,8 @@ module Xlogin
|
|
8
8
|
uri = URI(uri.to_s)
|
9
9
|
|
10
10
|
if hostname = opts.delete(:delegate)
|
11
|
-
target =
|
12
|
-
target_os =
|
11
|
+
target = Xlogin.factory.get(hostname)
|
12
|
+
target_os = Xlogin.factory.template_for(target[:type])
|
13
13
|
target_uri = URI(target[:uri])
|
14
14
|
|
15
15
|
login = @methods.delete(:login)
|
@@ -1,42 +1,28 @@
|
|
1
1
|
require 'uri'
|
2
|
+
require 'singleton'
|
2
3
|
require 'stringio'
|
3
4
|
require 'xlogin/firmware'
|
4
5
|
|
5
6
|
module Xlogin
|
6
7
|
class FirmwareFactory
|
7
8
|
|
8
|
-
|
9
|
-
def [](name)
|
10
|
-
firmwares[name.to_s.downcase]
|
11
|
-
end
|
12
|
-
|
13
|
-
def register(name, firmware)
|
14
|
-
firmwares[name.to_s.downcase] = firmware
|
15
|
-
end
|
16
|
-
|
17
|
-
def register_file(file)
|
18
|
-
require file if file =~ /.rb$/
|
19
|
-
end
|
20
|
-
|
21
|
-
def register_dir(dir)
|
22
|
-
Dir.entries(dir).each do |file|
|
23
|
-
register_file(File.join(dir, file))
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
private
|
28
|
-
def firmwares
|
29
|
-
@firmwares ||= Hash.new
|
30
|
-
end
|
31
|
-
end
|
9
|
+
include Singleton
|
32
10
|
|
33
11
|
def initialize
|
34
|
-
@database
|
12
|
+
@database = Hash.new
|
13
|
+
@templates = Hash.new
|
14
|
+
end
|
15
|
+
|
16
|
+
def register_template_file(file)
|
17
|
+
require file if file =~ /.rb$/
|
18
|
+
end
|
19
|
+
|
20
|
+
def register_template(name, template)
|
21
|
+
@templates[name.to_s.downcase] = template
|
22
|
+
end
|
35
23
|
|
36
|
-
|
37
|
-
|
38
|
-
source(File.join(dir, '_xloginrc'))
|
39
|
-
end
|
24
|
+
def template_for(name)
|
25
|
+
@templates[name.to_s.downcase]
|
40
26
|
end
|
41
27
|
|
42
28
|
def source(db_file)
|
@@ -51,7 +37,6 @@ module Xlogin
|
|
51
37
|
end
|
52
38
|
|
53
39
|
def set(**opts)
|
54
|
-
opts[:type] = opts[:type].to_s
|
55
40
|
@database[opts[:name]] = opts
|
56
41
|
end
|
57
42
|
|
@@ -61,14 +46,13 @@ module Xlogin
|
|
61
46
|
|
62
47
|
def build(args)
|
63
48
|
uri = args.delete(:uri)
|
64
|
-
type = args.delete(:type)
|
49
|
+
type = args.delete(:type)
|
65
50
|
name = args.delete(:name)
|
66
51
|
opts = args.reduce({}) { |a, (k, v)| a.merge(k.to_s.downcase.to_sym => v) }
|
67
52
|
raise Xlogin::GeneralError.new("Host not found: #{args}") unless uri && type
|
68
53
|
|
69
|
-
|
70
|
-
session
|
71
|
-
session.name = name
|
54
|
+
session = template_for(type).dup.run(uri, opts)
|
55
|
+
session.name = name if name
|
72
56
|
session
|
73
57
|
end
|
74
58
|
|
@@ -80,10 +64,9 @@ module Xlogin
|
|
80
64
|
end
|
81
65
|
|
82
66
|
def method_missing(name, *args, &block)
|
83
|
-
|
84
|
-
super unless firmware && args.size >= 2
|
67
|
+
super unless template_for(name) && args.size >= 2
|
85
68
|
|
86
|
-
type = name
|
69
|
+
type = name.to_s.downcase
|
87
70
|
name = args.shift
|
88
71
|
uri = args.shift
|
89
72
|
opts = args.shift || {}
|
data/lib/xlogin/queue.rb
CHANGED
@@ -16,9 +16,8 @@ module Xlogin
|
|
16
16
|
@args = args
|
17
17
|
@mutex = Mutex.new
|
18
18
|
|
19
|
-
hostinfo = Xlogin
|
20
|
-
|
21
|
-
firmware = Xlogin::FirmwareFactory[hostinfo[:type]]
|
19
|
+
if hostinfo = Xlogin.factory.get(hostname)
|
20
|
+
firmware = Xlogin.factory.template_for(hostinfo[:type])
|
22
21
|
@timeout = firmware.timeout
|
23
22
|
end
|
24
23
|
|
data/lib/xlogin/version.rb
CHANGED
data/lib/xlogin.rb
CHANGED
@@ -7,35 +7,52 @@ require 'xlogin/version'
|
|
7
7
|
|
8
8
|
module Xlogin
|
9
9
|
|
10
|
+
## where firmware templates locate.
|
11
|
+
TemplateDir = File.join(File.dirname(__FILE__), 'xlogin', 'firmwares')
|
10
12
|
|
11
|
-
|
13
|
+
## where instance parameter definitions locate.
|
14
|
+
SourceDirs = [
|
12
15
|
File.join(File.dirname(__FILE__), 'xlogin'),
|
13
|
-
ENV['HOME'],
|
14
|
-
ENV['XLOGIN_HOME'],
|
16
|
+
ENV['HOME'], ENV['XLOGIN_HOME'],
|
15
17
|
Dir.pwd
|
16
18
|
]
|
17
19
|
|
18
20
|
class GeneralError < StandardError; end
|
19
21
|
|
20
22
|
class << self
|
23
|
+
def factory
|
24
|
+
unless @factory
|
25
|
+
@factory = Xlogin::FirmwareFactory.instance
|
26
|
+
|
27
|
+
Dir.entries(TemplateDir).each do |file|
|
28
|
+
@factory.register_template_file(File.join(TemplateDir, file))
|
29
|
+
end
|
30
|
+
|
31
|
+
SourceDirs.compact.uniq.each do |dir|
|
32
|
+
@factory.source(File.join(dir, '.xloginrc'))
|
33
|
+
@factory.source(File.join(dir, '_xloginrc'))
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
@factory
|
38
|
+
end
|
39
|
+
|
21
40
|
def configure(name)
|
22
|
-
|
23
|
-
|
24
|
-
yield firmware if block_given?
|
41
|
+
template = factory.template_for(name) || Xlogin::Firmware.new
|
42
|
+
yield template if block_given?
|
25
43
|
|
26
|
-
|
44
|
+
factory.register_template(name, template)
|
27
45
|
end
|
28
46
|
|
29
47
|
def alias(new_name, original_name)
|
30
|
-
|
31
|
-
raise Xlogin::GeneralError.new("'#{original_name}' not found") unless
|
48
|
+
template = factory.template_for(original_name)
|
49
|
+
raise Xlogin::GeneralError.new("'#{original_name}' not found") unless template
|
32
50
|
|
33
|
-
|
51
|
+
factory.register_template(new_name, template)
|
34
52
|
end
|
35
53
|
|
36
54
|
def get(hostname, args = {})
|
37
|
-
|
38
|
-
session = @factory.build_from_hostname(hostname, args)
|
55
|
+
session = factory.build_from_hostname(hostname, args)
|
39
56
|
|
40
57
|
if block_given?
|
41
58
|
begin yield session ensure session.close end
|
@@ -43,10 +60,6 @@ module Xlogin
|
|
43
60
|
session
|
44
61
|
end
|
45
62
|
end
|
46
|
-
|
47
63
|
end
|
48
64
|
|
49
|
-
Directory = File.join(File.dirname(__FILE__), 'xlogin', 'firmwares')
|
50
|
-
Xlogin::FirmwareFactory.register_dir(Directory)
|
51
|
-
|
52
65
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xlogin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- haccht
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-07-
|
11
|
+
date: 2017-07-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|