diff options
Diffstat (limited to 'lib/oxidized/model')
| -rw-r--r-- | lib/oxidized/model/model.rb | 28 | ||||
| -rw-r--r-- | lib/oxidized/model/outputs.rb | 43 | 
2 files changed, 63 insertions, 8 deletions
| diff --git a/lib/oxidized/model/model.rb b/lib/oxidized/model/model.rb index c3d8760..af86f1d 100644 --- a/lib/oxidized/model/model.rb +++ b/lib/oxidized/model/model.rb @@ -1,3 +1,5 @@ +require_relative 'outputs' +  module Oxidized    class Model      include Oxidized::Config::Vars @@ -87,7 +89,7 @@ module Oxidized          end        end        out = instance_exec out, &block if block -      out +      process_cmd_output out, string      end      def output @@ -124,20 +126,20 @@ module Oxidized      end      def get -      data, pre = '', '' +      outputs = Outputs.new        procs = self.class.procs +      procs[:pre].each do |pre_proc| +        outputs << instance_eval(&pre_proc) +      end        self.class.cmds[:cmd].each do |command, block|          out = cmd command, &block          return false unless out -        data << out.to_s -      end -      procs[:pre].each do |pre_proc| -        pre << instance_eval(&pre_proc).to_s +        outputs << out        end        procs[:post].each do |post_proc| -        data << instance_eval(&post_proc).to_s +        outputs << instance_eval(&post_proc)        end -      pre + data +      outputs      end      def comment _comment @@ -148,5 +150,15 @@ module Oxidized        data      end +    private + +    def process_cmd_output cmd, name +      if Hash === cmd +        cmd[:name] = name +        return cmd +      end +      {:output=>cmd, :type=>'cfg', :name=>name} +    end +    end  end diff --git a/lib/oxidized/model/outputs.rb b/lib/oxidized/model/outputs.rb new file mode 100644 index 0000000..5ef9bc4 --- /dev/null +++ b/lib/oxidized/model/outputs.rb @@ -0,0 +1,43 @@ +module Oxidized +  class Model +    class Outputs + +      def to_cfg +        type_to_str('cfg') +      end + +      def type_to_str want_type +        type(want_type).map { |h| h[:output] }.join +      end + +      def each_type &block +        types.each do |want_type| +          yield [want_type, type(want_type)] +        end +      end + +      def << output +        @outputs << output +      end + +      def all +        @outputs +      end + +      def type type +        @outputs.select { |h| h[:type]==type } +      end + +      def types +        @outputs.map { |h| h[:type] }.uniq +      end + +      private + +      def initialize +        @outputs = [] +      end + +    end +  end +end | 
