class Freshener

Public Class Methods

all() click to toggle source

Returns a Hash of all installed fresheners.

Example:

>> Freshener.all
=> { "rubygems" => #<RubyGems:0x00000000000000> }
# File lib/freshener.rb, line 17
def self.all
  fresheners = Dir.glob(File.join(Freshen::FRESHENERS_DIR, "*.rb"))
  fresheners.map! { |path| File.basename(path, ".rb") }
  instances_of(*fresheners)
end
class_for(name) click to toggle source

Get the class name for a freshener.

Arguments:

name: (String)

Example:

>> Freshener.class_for :ruby_gems
=> "RubyGems"
# File lib/freshener.rb, line 68
def self.class_for(name)
  klass = name.to_s.capitalize
  klass.gsub!(/[-_.\s]([a-zA-Z0-9])/) { $1.upcase }
  klass.tr!("+", "x")
  klass
end
ensure_installed!(*fresheners) click to toggle source

Ensure that the specified fresheners are installed.

Arguments:

>> Freshener.ensure_installed! :ruby_gems
=> nil
# File lib/freshener.rb, line 121
def self.ensure_installed!(*fresheners)
  fresheners.each do |name|
    unless installed? name
      raise Freshen::FreshenerNotInstalled.new(name)
    end
  end
  
  nil
end
installed?(*fresheners) click to toggle source

Check that the specified fresheners are installed.

Arguments:

fresheners: (Splat)

Example:

>> Freshener.installed? :ruby_gems
=> true
# File lib/freshener.rb, line 107
def self.installed?(*fresheners)
  fresheners.each do |name|
    return false unless File.file? File.join(Freshen::FRESHENERS_DIR, "#{name}.rb")
  end
  
  true
end
instance_of(name) click to toggle source

Returns an instance of the specified freshener.

Arguments:

name: (String)

Example:

>> Freshener.instance_of :ruby_gems
=> #<RubyGems:0x00000000000000>
# File lib/freshener.rb, line 51
def self.instance_of(name)
  load_by_name(name)
  
  klass = class_for(name)
  klass = Object.const_get(klass)
  klass.new
end
instances_of(*fresheners) click to toggle source

Returns a Hash containing instances of the specified freshehers.

Example:

>> Freshener.instances_of :ruby_gems
=> { "rubygems" => #<RubyGems:0x00000000000000> }
# File lib/freshener.rb, line 30
def self.instances_of(*fresheners)
  fresheners.sort_by! do |name|
    name
  end
  
  fresheners.map! do |name|
    [name.to_s, instance_of(name.to_s)]
  end
  
  Hash[*fresheners.flatten]
end

Private Class Methods

load_by_name(name) click to toggle source

Load a freshener from the fresheners directory.

Arguments:

name: (String)

Example:

>> Freshener.load_by_name :ruby_gems
=> nil

Raises:

FreshenerNotInstalled: When the specified freshener is not installed.
FreshenerLoadError: When the specified freshener could not be loaded.
# File lib/freshener.rb, line 88
def self.load_by_name(name)
  begin
    require File.join(Freshen::FRESHENERS_DIR, "#{name}.rb")
  rescue LoadError
    raise Freshen::FreshenerLoadError.new(name)
  end
  
  nil
end

Public Instance Methods

freshen() click to toggle source

Freshen up the freshener!

Example:

>> rubygems = RubyGems.new
>> rubygems.freshen
=> nil
# File lib/freshener.rb, line 153
    def freshen
raise Freshen::UpdateMethodNotImplementedError.new(self)
    end
needs_freshening?() click to toggle source

Whether or not we the freshener needs freshening up.

Example:

>> rubygems = RubyGems.new
>> rubygems.needs_freshening?
=> true
# File lib/freshener.rb, line 142
def needs_freshening?
  true
end