diff options
Diffstat (limited to 'lib/oxidized/model')
| -rw-r--r-- | lib/oxidized/model/junos.rb | 2 | ||||
| -rw-r--r-- | lib/oxidized/model/model.rb | 46 | 
2 files changed, 42 insertions, 6 deletions
| diff --git a/lib/oxidized/model/junos.rb b/lib/oxidized/model/junos.rb index a7080e1..4bca998 100644 --- a/lib/oxidized/model/junos.rb +++ b/lib/oxidized/model/junos.rb @@ -19,7 +19,7 @@ class JunOS < Oxidized::Model      comment cfg    end -  def main +  post do      case @model      when 'mx960'        cmd('show chassis fabric reachability')  { |cfg| comment cfg } diff --git a/lib/oxidized/model/model.rb b/lib/oxidized/model/model.rb index f95443d..70b307f 100644 --- a/lib/oxidized/model/model.rb +++ b/lib/oxidized/model/model.rb @@ -2,8 +2,9 @@ module Oxidized    class Model      class << self        def inherited klass -        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 '@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.const_set :CFG, CFG          Oxidized.mgr.loader = { :class => klass } @@ -39,6 +40,35 @@ module Oxidized        def expects          @expect        end + +      # 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] +      def pre &block +        @procs[:pre] << block +      end + +      # 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] +      def post &block +        @procs[:post] << block +      end + +      # @author Saku Ytti <saku@ytti.fi> +      # @since 0.0.39 +      # @return [Hash] hash proc procs :pre+:post to be prepended/postfixed to output +      def procs +        @procs +      end      end      attr_accessor :input @@ -87,14 +117,20 @@ module Oxidized      end      def get -      data = '' +      data, pre = '', '' +      procs = self.class.procs        self.class.cmds[:cmd].each do |command, block|          out = cmd command, &block          return false unless out          data << out.to_s        end -      data << main.to_s if respond_to? :main -      data +      procs[:pre].each do |pre_proc| +        pre << instance_eval(&pre_proc) +      end +      procs[:post].each do |post_proc| +        data << instance_eval(&post_proc) +      end +      pre + data      end      def comment _comment | 
