Class: Aio::ModuleManager

Inherits:
Object
  • Object
show all
Includes:
Ui::Verbose
Defined in:
lib/aio/core/module_manager.rb

Overview

管理,保存各个加载的模块

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Ui::Verbose

#clear_line, #print_error, #print_good, #progress_bar

Constructor Details

#initializeModuleManager

:klass



13
14
15
16
17
18
19
# File 'lib/aio/core/module_manager.rb', line 13

def initialize
#		self.module_info_by_path = {}
#		self.module_load_error_by_path = {}
#		self.module_paths = []
	self.modules = {}
	self.modules_count = {}
end

Instance Attribute Details

#modulesObject

Returns the value of attribute modules.



4
5
6
# File 'lib/aio/core/module_manager.rb', line 4

def modules
  @modules
end

#modules_countObject

Returns the value of attribute modules_count.



4
5
6
# File 'lib/aio/core/module_manager.rb', line 4

def modules_count
  @modules_count
end

Instance Method Details

#add_module(path, module_type, module_layer_2, reference_name, module_klass) ⇒ Object

将实例化后的模块类放到 modules 中



28
29
30
31
32
33
34
35
# File 'lib/aio/core/module_manager.rb', line 28

def add_module(path, module_type, module_layer_2, reference_name, module_klass)

	modules[reference_name] = {:module_type => module_type,
														 :module_layer_2 => module_layer_2,
														 :full_path => path, 
														 :klass	=> module_klass
														}
end

#device_type_enable?(device_type) ⇒ Boolean

判断此设备类型的模块是否加载

Returns:

  • (Boolean)


87
88
89
# File 'lib/aio/core/module_manager.rb', line 87

def device_type_enable?(device_type)
	true
end

#get_module_klass_by_name(reference_name) ⇒ Object

通过参考名获得模块类



102
103
104
105
106
107
108
109
# File 'lib/aio/core/module_manager.rb', line 102

def get_module_klass_by_name(reference_name)
	begin
		self.modules[reference_name][:klass]
	rescue Exception
		print_error "未找到指定模块: #{reference_name}"
		exit 0
	end
end

#get_modules_by_device_type(device_type) ⇒ Object

通过设备类型获得模块类返回类型为: 数组



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/aio/core/module_manager.rb', line 55

def get_modules_by_device_type(device_type)
	return_array = []

	device_type = device_type.to_s
	modules.each_pair do |_, m|
		if m[:module_type] != "cmd"
			next
		end

		type = m[:module_layer_2]
		if device_type == type
			return_array << m[:klass]
		end
	end

	return return_array
end

#get_modules_by_type(type) ⇒ Object

获得指定模块类型返回类型: Hash



39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/aio/core/module_manager.rb', line 39

def get_modules_by_type(type)
	return_hash = {}

	type = type.to_s
	modules.each_pair do |n, m|
		if m[:module_type] != type
			next
		end
		return_hash[n] = m
	end

	return return_hash
end

#get_modules_device_type_to_sObject

获得所有加载模块的设备类型的字符串型返回类型为: 数组



75
76
77
78
79
80
81
82
83
# File 'lib/aio/core/module_manager.rb', line 75

def get_modules_device_type_to_s
	return_array = []
	
	modules_count["cmd"].keys.each do |key|
		return_array << key.to_s
	end

	return return_array
end

#load_modules(path, options = {}) ⇒ Object

加载一个目录下的所有模块

Parameters:

  • path (String)

    目录的路径

  • options (Hash) (defaults to: {})


24
25
# File 'lib/aio/core/module_manager.rb', line 24

def load_modules(path, options={})
end

#module_type_enable?(module_type) ⇒ Boolean

Returns:

  • (Boolean)


91
92
93
# File 'lib/aio/core/module_manager.rb', line 91

def module_type_enable?(module_type)
	["cmd", "input", "output", "special", "description"].include?(module_type)
end

#notify(opts = {}) ⇒ Object



95
96
97
98
99
# File 'lib/aio/core/module_manager.rb', line 95

def notify(opts={})
	if opts[:count_by_module_type]
		@modules_count = opts[:count_by_module_type]
	end
end