aio_elin 1.0.1 → 1.0.2

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
  SHA256:
3
- metadata.gz: 5dc376260ef7b6941766c63d9065a5dfdca7ab8b331f5b6c7d261b536e2899c9
4
- data.tar.gz: bb4e56cbcd6dfa81f724fe03d845f6b0fa3b8d35d3d18c4b9a2ae10b76cb288e
3
+ metadata.gz: ec78b85511d7bf50150105a4a9c4668ce103ea9f4440b5536e1af0c2be9d309f
4
+ data.tar.gz: ca257da733025cf4ccb5dc2297da2ea088b286bf27375fb8c2e53e58c0575020
5
5
  SHA512:
6
- metadata.gz: 8c589c05598e29ab273e5d886acbdc48f6876b4b1f0d421f38be29045aaf6b1391c6f04a8dd71f7268917b3064d6cde80d05f6a14c1565897c3ae4823ce1e6c9
7
- data.tar.gz: f7a265cc7c2d00d6d2340e0df5ae29712241061543305555fed0d4cef9fc3111003c2266d53b897980050323d7ce02648aa11134ebacaa88b08111f770c3f302
6
+ metadata.gz: f90bd170d42af4e816ab04fc345a9b54bee66ea65c757c432290ca692997b4713299f1b0f8b2f18e83707774790a0a7e0460891b41e2c48c0629329d781d943a
7
+ data.tar.gz: ee6f3299b774d705de437a1a7fcadd4428e665630a9656ad80860e954e1a21d2198a982d7314c19ca2ffd3fab2870eef06ff7d8b9192894018d1ba5834a5ba18
@@ -138,6 +138,14 @@ module Aio::Base::Toolkit
138
138
  (old_line || new_line).text
139
139
  end
140
140
 
141
+ def old_text
142
+ old_line.text
143
+ end
144
+
145
+ def new_text
146
+ new_line.text
147
+ end
148
+
141
149
  def empty?
142
150
  (old_line.empty? and new_line.empty?)
143
151
  end
@@ -3,220 +3,221 @@
3
3
  require "aio/core"
4
4
 
5
5
  class Aio::Module::InputStyle::Console < Aio::Module::InputStyle
6
- include Aio::Module
7
- include Aio::Ui::Verbose
8
-
9
- class Machine
10
-
11
- attr_accessor :regs, :state
12
-
13
- def initialize
14
- @cmd_state = CmdState.new(self)
15
- @context_state = ContextState.new(self)
16
- @empty_state = EmptyState.new(self)
17
- @cmd_context = CmdContext.new
18
-
19
- @state = @empty_state
20
- end
21
-
22
- def state
23
- @state.class
24
- end
25
-
26
- def cmd_context
27
- @cmd_context
28
- end
29
-
30
- def to_cmd_state
31
- @state = @cmd_state
32
- end
33
-
34
- def to_context_state
35
- @state = @context_state
36
- end
37
-
38
- def to_empty_state
39
- @state = @empty_state
40
- end
41
-
42
- def parse_line(line)
43
- @state.parse_line(line)
44
- end
45
- end
46
-
47
- class CmdContext
48
-
49
- attr_accessor :device_name, :cmd, :context
50
-
51
- # all_info = [[device_name, cmd, context] ... ]
52
- attr_accessor :all_info
53
-
54
- def initialize
55
- @device_name = ""
56
- @cmd = ""
57
- @context = []
58
- @all_info = []
59
- end
60
-
61
- def done
62
- # 当之前有cmd内容的时候,比较两个的长度
63
- # 长的保留
64
- info_idx = has_cmd?
65
- if info_idx
66
- if @all_info[info_idx][2].size < context.size
67
- @all_info[info_idx][2] = context
68
- end
69
- else
70
-
71
- # 如果都没有,那么就直接添加
72
- @all_info << [device_name, cmd, context]
73
- end
74
- self.clear
75
- end
76
-
77
- def has_cmd?
78
- @all_info.each_with_index do |info, idx|
79
- next unless info[1] == device_name
80
- return idx if info[2] == cmd
81
- end
82
-
83
- return nil
84
- end
85
-
86
- def clear
87
- @device_name = ""
88
- @cmd = ""
89
- @context = []
90
- end
91
- end
92
-
93
- class State
94
-
95
- include Aio::Ui::Verbose
96
-
97
- def initialize(machine)
98
- @machine = machine
99
- end
100
-
101
- def cmd_context
102
- @machine.cmd_context
103
- end
104
- end
105
-
106
- class EmptyState < State
107
- def parse_line(line)
108
-
109
- # 当前是空的状态
110
- # 判断当前行有没有模块中的命令
111
- line = Aio::Base::Toolkit::String.safe(line)
112
- return unless @machine.regs.match(line)
113
-
114
- @machine.to_cmd_state
115
- @machine.parse_line(line)
116
- end
117
- end
118
-
119
- class CmdState < State
120
- def parse_line(line)
121
- # 判断是不是cmd命令行
122
- res = /^[\[|<]?(?<name>.*)(#|>|\])(?<cmd>.*)/.match(line)
123
- if res.nil?
124
- @machine.to_empty_state
125
- return
126
- end
127
-
128
- # 当已经发现了是cmd行,那么紧接下来就是收集文本内容
129
- cmd_context.device_name = res[:name]
130
- cmd_context.cmd = res[:cmd]
131
- @machine.to_context_state
132
- end
133
- end
134
-
135
- class ContextState < State
136
-
137
- def parse_line(line)
138
- # 如果这行是命令行格式,那么就代表上一个cmd内容结束
139
- tmp_reg = ::Regexp.new "^[\\[|<]?#{cmd_context.device_name}(#|>|\\])"
140
-
141
- # 可能会出现UTF-8识别不出摄氏度符号的问题
142
- # 已经通过安全字符解决
143
- begin
144
- if tmp_reg.match(line)
145
- cmd_context.done
146
-
147
- # 完成后将状态设置为空,并且重新分析这一行
148
- # 毕竟如果这行也cmd行呢
149
- @machine.to_empty_state
150
- return @machine.parse_line(line)
151
- end
152
- rescue => e
153
- print_error cmd_context.device_name + " 设备巡检信息编码出现问题"
154
- print_error line + " : " + e.message
155
- end
156
-
157
-
158
- cmd_context.context << line
159
- end
160
- end
161
-
162
- def initialize
163
- super({
164
- :author => "Elin",
165
- :description => "这个模块用于对命令行格式的输入处理",
166
- :platform => "all",
167
- })
168
- @machine = Machine.new
169
- end
170
-
171
- def parse
172
- dir = self.input_file
173
- dir_pn = Pathname.new(dir)
174
-
175
- # 加载所有的cmd正则表达式
176
- @machine.regs = merge_regs(ext_info[:cmds_reg])
177
-
178
- # 如果是单个文件的话,直接进入文件解析模式
179
- if dir_pn.file?
180
- parse_file(dir_pn)
181
- else
182
-
183
- # 如果是文件夹的话,那么就对每个文件进行解析
184
- Find.find(dir) do |file|
185
- fn = Pathname.new(file)
186
- parse_file(file) if fn.file?
187
- end
188
- end
189
-
190
- @machine.cmd_context.all_info.each do |info|
191
- yield info[0], info[1], info[2]
192
- end
193
- end
194
-
195
- def parse_file(file)
196
- fo = File.open(file, "r+", :encoding => "utf-8")
197
-
198
- fo.each_line do |line|
199
- begin
200
- line = Aio::Base::Toolkit::String.safe(line)
201
- line = line.strip
202
- rescue => e
203
- print_error line + " : " + e.message
204
- end
205
-
206
- @machine.parse_line(line)
207
- end
208
-
209
- # 如果最后没有done结束,则手动结束
210
- if @machine.state == ContextState
211
- @machine.cmd_context.done
212
- end
213
- end
214
-
215
- def merge_regs(arr_regs)
216
- regs = Aio::Base::Toolkit::Regexp.merge(arr_regs).to_s
217
- regs.gsub!('(^', '(')
218
- ::Regexp.new(regs)
219
- end
6
+ include Aio::Module
7
+ include Aio::Ui::Verbose
8
+
9
+ class Machine
10
+
11
+ attr_accessor :regs, :state
12
+
13
+ def initialize
14
+ @cmd_state = CmdState.new(self)
15
+ @context_state = ContextState.new(self)
16
+ @empty_state = EmptyState.new(self)
17
+ @cmd_context = CmdContext.new
18
+
19
+ @state = @empty_state
20
+ end
21
+
22
+ def state
23
+ @state.class
24
+ end
25
+
26
+ def cmd_context
27
+ @cmd_context
28
+ end
29
+
30
+ def to_cmd_state
31
+ @state = @cmd_state
32
+ end
33
+
34
+ def to_context_state
35
+ @state = @context_state
36
+ end
37
+
38
+ def to_empty_state
39
+ @state = @empty_state
40
+ end
41
+
42
+ def parse_line(line)
43
+ @state.parse_line(line)
44
+ end
45
+ end
46
+
47
+ class CmdContext
48
+
49
+ attr_accessor :device_name, :cmd, :context
50
+
51
+ # all_info = [[device_name, cmd, context] ... ]
52
+ attr_accessor :all_info
53
+
54
+ def initialize
55
+ @device_name = ""
56
+ @cmd = ""
57
+ @context = []
58
+ @all_info = []
59
+ end
60
+
61
+ def done
62
+ # 当之前有cmd内容的时候,比较两个的长度
63
+ # 长的保留
64
+ info_idx = has_cmd?
65
+ if info_idx
66
+ if @all_info[info_idx][2].size < context.size
67
+ @all_info[info_idx][2] = context
68
+ end
69
+ else
70
+
71
+ # 如果都没有,那么就直接添加
72
+ @all_info << [device_name, cmd, context]
73
+ end
74
+ self.clear
75
+ end
76
+
77
+ def has_cmd?
78
+ @all_info.each_with_index do |info, idx|
79
+ next unless info[0] == device_name
80
+ return idx if info[1] == cmd
81
+ end
82
+
83
+ return nil
84
+ end
85
+
86
+ def clear
87
+ @device_name = ""
88
+ @cmd = ""
89
+ @context = []
90
+ end
91
+ end
92
+
93
+ class State
94
+
95
+ include Aio::Ui::Verbose
96
+
97
+ def initialize(machine)
98
+ @machine = machine
99
+ end
100
+
101
+ def cmd_context
102
+ @machine.cmd_context
103
+ end
104
+ end
105
+
106
+ class EmptyState < State
107
+ def parse_line(line)
108
+
109
+ # 当前是空的状态
110
+ # 判断当前行有没有模块中的命令
111
+ line = Aio::Base::Toolkit::String.safe(line)
112
+ return unless @machine.regs.match(line)
113
+
114
+ @machine.to_cmd_state
115
+ @machine.parse_line(line)
116
+ end
117
+ end
118
+
119
+ class CmdState < State
120
+ def parse_line(line)
121
+ # 判断是不是cmd命令行
122
+ res = /^[\[|<]?(?<name>.*)(#|>|\])(?<cmd>.*)/.match(line)
123
+ if res.nil?
124
+ @machine.to_empty_state
125
+ return
126
+ end
127
+
128
+ # 当已经发现了是cmd行,那么紧接下来就是收集文本内容
129
+ cmd_context.device_name = res[:name]
130
+ cmd_context.cmd = res[:cmd]
131
+ @machine.to_context_state
132
+ end
133
+ end
134
+
135
+ class ContextState < State
136
+
137
+ def parse_line(line)
138
+ # 如果这行是命令行格式,那么就代表上一个cmd内容结束
139
+ tmp_reg = ::Regexp.new "^[\\[|<]?#{cmd_context.device_name}(#|>|\\])"
140
+
141
+ # 可能会出现UTF-8识别不出摄氏度符号的问题
142
+ # 已经通过安全字符解决
143
+ begin
144
+ if tmp_reg.match(line)
145
+ cmd_context.done
146
+
147
+ # 完成后将状态设置为空,并且重新分析这一行
148
+ # 毕竟如果这行也cmd行呢
149
+ @machine.to_empty_state
150
+ return @machine.parse_line(line)
151
+ end
152
+ rescue => e
153
+ print_error cmd_context.device_name + " 设备巡检信息编码出现问题"
154
+ print_error line + " : " + e.message
155
+ end
156
+
157
+
158
+ cmd_context.context << line
159
+ end
160
+ end
161
+
162
+ def initialize
163
+ super({
164
+ :author => "Elin",
165
+ :description => "这个模块用于对命令行格式的输入处理",
166
+ :platform => "all",
167
+ })
168
+ @machine = Machine.new
169
+ end
170
+
171
+ def parse
172
+ dir = self.input_file
173
+ dir_pn = Pathname.new(dir)
174
+
175
+ # 加载所有的cmd正则表达式
176
+ @machine.regs = merge_regs(ext_info[:cmds_reg])
177
+
178
+ # 如果是单个文件的话,直接进入文件解析模式
179
+ if dir_pn.file?
180
+ parse_file(dir_pn)
181
+ else
182
+
183
+ # 如果是文件夹的话,那么就对每个文件进行解析
184
+ Find.find(dir) do |file|
185
+ fn = Pathname.new(file)
186
+ parse_file(file) if fn.file?
187
+ end
188
+ end
189
+
190
+ @machine.cmd_context.all_info.each do |info|
191
+ yield info[0], info[1], info[2]
192
+ end
193
+ end
194
+
195
+ def parse_file(file)
196
+ fo = File.open(file, "r+", :encoding => "utf-8")
197
+
198
+ fo.each_line do |line|
199
+ begin
200
+ line = Aio::Base::Toolkit::String.safe(line)
201
+ line = line.strip
202
+ rescue => e
203
+ print_error line + " : " + e.message
204
+ end
205
+
206
+ @machine.parse_line(line)
207
+ end
208
+
209
+ # 如果最后没有done结束,则手动结束
210
+ if @machine.state == ContextState
211
+ @machine.cmd_context.done
212
+ @machine.to_cmd_state
213
+ end
214
+ end
215
+
216
+ def merge_regs(arr_regs)
217
+ regs = Aio::Base::Toolkit::Regexp.merge(arr_regs).to_s
218
+ regs.gsub!('(^', '(')
219
+ ::Regexp.new(regs)
220
+ end
220
221
  end
221
222
 
222
223
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aio_elin
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-28 00:00:00.000000000 Z
11
+ date: 2018-12-04 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: 网络设备巡检工具
14
14
  email: 365433079@qq.com