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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ac8f3ae4ad7a17da2c37a40f5c6e0a32545501be
4
- data.tar.gz: 88dc898abf314811283b50ee0d6b8d62dc31c641
3
+ metadata.gz: 236da0f51f5506ec90714afb37232998575b0fe0
4
+ data.tar.gz: 3907742fb721d176716f845f1575f09edae86f73
5
5
  SHA512:
6
- metadata.gz: 7813c69c44723ef01af12d89f8b2970aca9a4215676fd30adcb7bd304d5e13a7c175c714e821e08d51d7fb88b487a5ffcf95095c94507b0f2360a0a6d56ff671
7
- data.tar.gz: 00fa87b310643a1de8986586bc5889ad75caeaf8065d226996a41721a58ef81953a2310c7bae37bf3c765ce2a5b8331ed194a453958d8402dc2ce8fbf326b735
6
+ metadata.gz: 143ba3dd1a9f1f9a8dc2d9a8d9fe5121a1d8421d22117b56c6e3a83ed283aa55e80cf91a3f2c02785e8b1ca281bf183e2627a90b4d5ea99f7466ff278b14aa5b
7
+ data.tar.gz: 1193fa2db3d0876788e33856d59b4f74cba71400de2d5f479a476ce6453e5226081158a53204f5ff5d4888dcef2ff67113f28c747e63d0f67097263ff1799f20
data/bin/xlogin CHANGED
@@ -39,8 +39,7 @@ module Xlogin
39
39
  end
40
40
 
41
41
  if options[:list]
42
- factory = FirmwareFactory.new
43
- puts factory.list.map { |e| "#{e[:name]}\t#{e[:type]}" }
42
+ puts Xlogin.factory.list.map { |e| "#{e[:name]}\t#{e[:type]}" }
44
43
  exit 0
45
44
  end
46
45
 
@@ -8,8 +8,8 @@ module Xlogin
8
8
  uri = URI(uri.to_s)
9
9
 
10
10
  if hostname = opts.delete(:delegate)
11
- target = FirmwareFactory.new.get(hostname)
12
- target_os = FirmwareFactory[target[:type]]
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
- class << self
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 = Hash.new
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
- SourceDir.compact.each do |dir|
37
- source(File.join(dir, '.xloginrc'))
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).to_s
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
- firmware = Xlogin::FirmwareFactory[type].dup
70
- session = firmware.run(uri, opts)
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
- firmware = Xlogin::FirmwareFactory[name]
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::FirmwareFactory.new.get(hostname)
20
- if hostinfo
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
 
@@ -1,3 +1,3 @@
1
1
  module Xlogin
2
- VERSION = "0.2.5"
2
+ VERSION = "0.3.0"
3
3
  end
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
- SourceDir = [
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
- name = name.to_s
23
- firmware = Xlogin::FirmwareFactory[name] || Xlogin::Firmware.new
24
- yield firmware if block_given?
41
+ template = factory.template_for(name) || Xlogin::Firmware.new
42
+ yield template if block_given?
25
43
 
26
- Xlogin::FirmwareFactory.register(name, firmware)
44
+ factory.register_template(name, template)
27
45
  end
28
46
 
29
47
  def alias(new_name, original_name)
30
- firmware = Xlogin::FirmwareFactory[original_name]
31
- raise Xlogin::GeneralError.new("'#{original_name}' not found") unless firmware
48
+ template = factory.template_for(original_name)
49
+ raise Xlogin::GeneralError.new("'#{original_name}' not found") unless template
32
50
 
33
- Xlogin::FirmwareFactory.register(new_name, firmware)
51
+ factory.register_template(new_name, template)
34
52
  end
35
53
 
36
54
  def get(hostname, args = {})
37
- @factory ||= Xlogin::FirmwareFactory.new
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.2.5
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-03 00:00:00.000000000 Z
11
+ date: 2017-07-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler