class Oxidized::Model
Attributes
procs[R]
@author Saku Ytti <saku@ytti.fi> @since 0.0.39 @return [Hash] hash proc procs :pre+:post to be prepended/postfixed to output
input[RW]
node[RW]
Public Class Methods
cfg(*methods, **args, &block)
click to toggle source
# File lib/oxidized/model/model.rb, line 38 def cfg(*methods, **args, &block) [methods].flatten.each do |method| process_args_block(@cfg[method.to_s], args, block) end end
cfgs()
click to toggle source
# File lib/oxidized/model/model.rb, line 44 def cfgs @cfg end
cmd(cmd_arg = nil, **args, &block)
click to toggle source
# File lib/oxidized/model/model.rb, line 48 def cmd(cmd_arg = nil, **args, &block) if cmd_arg.class == Symbol process_args_block(@cmd[cmd_arg], args, block) else process_args_block(@cmd[:cmd], args, [cmd_arg, block]) end Oxidized.logger.debug "lib/oxidized/model/model.rb Added #{cmd_arg} to the commands list" end
cmds()
click to toggle source
# File lib/oxidized/model/model.rb, line 57 def cmds @cmd end
comment(str = " { || ... }
click to toggle source
# File lib/oxidized/model/model.rb, line 24 def comment(str = "# ") @comment = if block_given? yield elsif not @comment str else @comment end end
expect(regex, **args, &block)
click to toggle source
# File lib/oxidized/model/model.rb, line 61 def expect(regex, **args, &block) process_args_block(@expect, args, [regex, block]) end
expects()
click to toggle source
# File lib/oxidized/model/model.rb, line 65 def expects @expect end
inherited(klass)
click to toggle source
# File lib/oxidized/model/model.rb, line 9 def inherited(klass) if klass.superclass == Oxidized::Model klass.instance_variable_set '@cmd', (Hash.new { |h, k| h[k] = [] }) klass.instance_variable_set '@cfg', (Hash.new { |h, k| h[k] = [] }) klass.instance_variable_set '@procs', (Hash.new { |h, k| h[k] = [] }) klass.instance_variable_set '@expect', [] klass.instance_variable_set '@comment', nil klass.instance_variable_set '@prompt', nil else # we're subclassing some existing model, take its variables instance_variables.each do |var| klass.instance_variable_set var, instance_variable_get(var) end end end
post(**args, &block)
click to toggle source
calls the block at the end of the model, adding the output of the block to the output string
@author Saku Ytti <saku@ytti.fi> @since 0.0.39 @yield expects block which should return [String] @return [void]
# File lib/oxidized/model/model.rb, line 87 def post(**args, &block) process_args_block(@procs[:post], args, block) end
pre(**args, &block)
click to toggle source
calls the block at the end of the model, prepending the output of the block to the output string
@author Saku Ytti <saku@ytti.fi> @since 0.0.39 @yield expects block which should return [String] @return [void]
# File lib/oxidized/model/model.rb, line 76 def pre(**args, &block) process_args_block(@procs[:pre], args, block) end
prompt(regex = nil)
click to toggle source
# File lib/oxidized/model/model.rb, line 34 def prompt(regex = nil) @prompt = regex || @prompt end
Private Class Methods
process_args_block(target, args, block)
click to toggle source
# File lib/oxidized/model/model.rb, line 98 def process_args_block(target, args, block) if args[:clear] target.replace([block]) else method = args[:prepend] ? :unshift : :push target.send(method, block) end end
Public Instance Methods
cfg()
click to toggle source
# File lib/oxidized/model/model.rb, line 140 def cfg self.class.cfgs end
cmd(string, &block)
click to toggle source
# File lib/oxidized/model/model.rb, line 110 def cmd(string, &block) Oxidized.logger.debug "lib/oxidized/model/model.rb Executing #{string}" out = @input.cmd(string) return false unless out out = out.b unless Oxidized.config.input.utf8_encoded? self.class.cmds[:all].each do |all_block| out = instance_exec Oxidized::String.new(out), string, &all_block end if vars :remove_secret self.class.cmds[:secret].each do |all_block| out = instance_exec Oxidized::String.new(out), string, &all_block end end out = instance_exec Oxidized::String.new(out), &block if block process_cmd_output out, string end
comment(str)
click to toggle source
# File lib/oxidized/model/model.rb, line 176 def comment(str) data = '' str.each_line do |line| data << self.class.comment << line end data end
expect(regex, &block)
click to toggle source
# File lib/oxidized/model/model.rb, line 136 def expect(regex, &block) self.class.expect regex, &block end
expects(data)
click to toggle source
# File lib/oxidized/model/model.rb, line 148 def expects(data) self.class.expects.each do |re, cb| if data.match re data = cb.arity == 2 ? instance_exec([data, re], &cb) : instance_exec(data, &cb) end end data end
get()
click to toggle source
# File lib/oxidized/model/model.rb, line 157 def get Oxidized.logger.debug 'lib/oxidized/model/model.rb Collecting commands\' outputs' outputs = Outputs.new procs = self.class.procs self.class.cmds[:cmd].each do |command, block| out = cmd command, &block return false unless out outputs << out end procs[:pre].each do |pre_proc| outputs.unshift process_cmd_output(instance_eval(&pre_proc), '') end procs[:post].each do |post_proc| outputs << process_cmd_output(instance_eval(&post_proc), '') end outputs end
output()
click to toggle source
# File lib/oxidized/model/model.rb, line 128 def output @input.output end
prompt()
click to toggle source
# File lib/oxidized/model/model.rb, line 144 def prompt self.class.prompt end
screenscrape()
click to toggle source
# File lib/oxidized/model/model.rb, line 184 def screenscrape @input.class.to_s.match(/Telnet/) || vars(:ssh_no_exec) end
send(data)
click to toggle source
# File lib/oxidized/model/model.rb, line 132 def send(data) @input.send data end
Private Instance Methods
process_cmd_output(output, name)
click to toggle source
# File lib/oxidized/model/model.rb, line 190 def process_cmd_output(output, name) output = Oxidized::String.new(output) if output.is_a?(::String) output = Oxidized::String.new('') unless output.instance_of?(Oxidized::String) output.set_cmd(name) output end