Sha256: 139a5fc8e5511d83707db25a30094e487321f16e569c50e62e59a96ae5c4e185

Contents?: true

Size: 1.52 KB

Versions: 4

Compression:

Stored size: 1.52 KB

Contents

module SousChef
  module Resource
    class Base
      attr_reader :name

      def initialize(context, name, &block)
        @context = context
        @name = name
        @block = block
        @only_if = nil
        @commands = []
      end

      def setup
        if @block
          instance_eval &@block
          @block = nil
        end
      end

      def not_if(cmd=nil)
        only_if "! #{cmd}"
      end

      def only_if(cmd=nil)
        if cmd
          @only_if = cmd
        else
          @only_if
        end
      end

      alias_method :resource_respond_to?, :respond_to?
      def respond_to?(meth)
        super || context.respond_to?(meth)
      end

      def prepend(cmd)
        @commands.unshift(cmd)
      end

      def append(cmd)
        @commands.push(cmd)
      end

      alias_method :command, :append

      def to_script
        setup
        if only_if
          @commands.compact!
          @commands.map! { |line| "  #{line}" }
          prepend "if #{only_if}; then"
          append  "fi"
        end
        @commands.join("\n").strip
      end

      protected
        attr_reader :context

        def set_or_return(attr, val)
          if val.nil?
            instance_variable_get("@#{attr}")
          else
            instance_variable_set("@#{attr}", val)
          end
        end

        def method_missing(meth, *args, &block)
          if context.respond_to?(meth)
            context.__send__(meth, *args, &block)
          else
            super
          end
        end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
sous_chef-0.0.4 lib/sous_chef/resource/base.rb
sous_chef-0.0.3 lib/sous_chef/resource/base.rb
sous_chef-0.0.2 lib/sous_chef/resource/base.rb
sous_chef-0.0.1 lib/sous_chef/resource/base.rb