Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
rbe / lib / rbe / data / command.rb
Size: Mime:
module Rbe::Data
  class Command
    attr_reader :data_hash, :list, :name

    attr_accessor :sudo_override, :silent, :local, :should_loop

    class << self
      def prop(*fields, &get_block)
        fields = update_props(fields)
        get_block ||=->(_, _, dv) { dv }
        fields.each { |field|
          self.create_method(field) { get_block.call(self, field, self[field]) }
          self.create_method("#{field.to_s}=".to_sym) { |value| self[field] = value }
        }
      end

      def update_props(fields)
        fields = fields.map(&:to_sym)
        @props ||= []
        @props += fields
        @props.uniq!
        fields
      end

      def validate!(hash)
        hash && hash.is_a?(Hash) && @props.all? { |p| hash.has_key?(p) }
      end

      protected :prop
    end

    protected :list

    prop(:command, :sudo, :args, :vars) { |command, field, data_value|
      if field == :sudo && command.sudo_override
        command.sudo_override
      else
        data_value
      end
    }

    def initialize(name, list, data_hash, local = false)
      raise ArgumentError, 'Invalid data hash' unless Rbe::Data::Command.validate!(data_hash)
      @name      = name
      @list      = list
      @data_hash = data_hash
      @local     = local
    end

    def [](key)
      self.data_hash[key.to_sym]
    end

    def []=(key, value)
      self.data_hash[key.to_sym] = value
      self.list.update_command(self.name, self.data_hash, self.local)
    end

    def delete(key)
      self.data_hash.delete(key.to_sym)
      self.list.update_command(self.name, self.data_hash, self.local)
    end
  end
end