module ConfHelpers::ClassMethods

Attributes

conf_attrs[R]

Public Instance Methods

cmd_available?(cmd) click to toggle source
# File lib/polisher/util/conf_helpers.rb, line 49
def cmd_available?(cmd)
  File.exist?(cmd) && File.executable?(cmd)
end
conf_attr(name, default = nil) click to toggle source

Defines a ‘config attribute’ or attribute on the class which this is defined in. Accessors to the single shared attribute will be added to the class as well as instances of the class. Specify the default value with the attr name or via an env variable

@example

class Custom
  extend ConfHelpers
  conf_attr :data_dir, '/etc/'
end
Custom.data_dir # => '/etc/'
ENV['POLISHER_DATA_DIR'] = '/usr/'
Custom.data_dir # => '/usr/'
Custom.data_dir == Custom.new.data_dir # => true
# File lib/polisher/util/conf_helpers.rb, line 30
def conf_attr(name, default = nil)
  @conf_attrs ||= []
  @conf_attrs  << name

  send(:define_singleton_method, name) do |*args|
    nvar = "@#{name}".intern
    current = instance_variable_get(nvar)
    envk    = "POLISHER_#{name.to_s.upcase}"
    instance_variable_set(nvar, default)    unless current
    instance_variable_set(nvar, ENV[envk])  if ENV.key?(envk)
    instance_variable_set(nvar, args.first) unless args.empty?
    instance_variable_get(nvar)
  end

  send(:define_method, name) do
    self.class.send(name)
  end
end
conf_attrs?() click to toggle source
# File lib/polisher/util/conf_helpers.rb, line 10
def conf_attrs?
  conf_attrs.is_a?(Array)
end
require_cmd!(cmd) click to toggle source
# File lib/polisher/util/conf_helpers.rb, line 53
def require_cmd!(cmd)
  raise "command #{cmd} not available" unless cmd_available?(cmd)
end
require_dep!(dep, obj=nil) click to toggle source
# File lib/polisher/util/conf_helpers.rb, line 57
def require_dep!(dep, obj=nil)
  require dep
rescue LoadError => e
  m  = e.backtrace[obj.nil? ? 3 : 4].split.last
  ms = obj.nil? ? m : "#{obj.class} #{m}"
  raise "dependency #{dep} is not available - cannot invoke #{ms}"
end