Sha256: 90b9cddfbda208360ef4267e571e0d06bd66066c99ec911107b5245ba3d8bd4a

Contents?: true

Size: 1.92 KB

Versions: 1

Compression:

Stored size: 1.92 KB

Contents

module Freyr
  class ServiceInfo
    attr_reader :groups
    
    ATTRS = [:name,:dir,:log_cmd,:log,:err_log_cmd,:err_log,:umask,
              :uid,:gid,:chroot,:proc_match,:restart,:stop,:stop_sig,
              :restart_sig,:sudo,:groups,:ping,:also]
    
    def initialize(name=nil, args={}, &block)
      @groups = []
      @also = []
      if name.is_a?(Hash)
        @name = name.keys.first
        @groups << name[@name]
      else
        @name = name
      end
      
      instance_eval(&block)
    end
    
    def use_sudo
      @sudo = true
    end
    
    def group(*val)
      @groups |= val
    end
    
    def also_as(*val)
      @also |= val
    end
    
    MODIFIERS = {
      :start => :_sudo_checker,
      :restart => :_sudo_checker,
      :stop => :_sudo_checker
    }
    
    def method_missing key, val=nil
      key = key.to_s.gsub(/\=$/,'').to_sym
      
      if val
        val = send(MODIFIERS[key],val) if MODIFIERS[key]
        instance_variable_set("@#{key}", val)
      else
        instance_variable_get("@#{key}")
      end
    end
    
    SUDO_MATCHER = /^sudo\s+/
    
  private
    
    # If someone doesn't explicitly not want the script running as admin
    # and the val looks like it's supposed to be run in sudo remove sudo
    # and force to be run as admin
    def _sudo_checker(val)
      if @admin != false && val =~ SUDO_MATCHER
        val.gsub!(SUDO_MATCHER,'')
        use_sudo
      end
      val.chomp
    end
    
    class << self
      
      def from_file file
        file = File.expand_path(file)
        return [] unless File.exist?(file)
        @added_services = []
        instance_eval(File.open(file).read)
        @added_services
      end
      
    private
      
      def namespace name
        @namespace = name
      end
      
      def service name=nil, &blk
        name = "#{@namespace}:#{name}" if @namespace
        @added_services << new(name,&blk)
      end
    end
    
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
freyr-0.3.0 lib/freyr/service_info.rb