class Barkest::InstallGenerator

Installs Barkest modules into an application.

Public Instance Methods

install_modules() click to toggle source
# File lib/generators/barkest/install_generator.rb, line 14
def install_modules
  meth = action_name.to_s == '' ? nil : action_name.to_sym

  installers.each do |inst|
    sep = '-' + ('=---' * 19) + '=-'
    tell "#{sep}\nProcessing #{inst.class}\n#{sep}", :bold
    if meth
      inst.send(meth) if inst.respond_to?(meth)
    else
      inst.public_methods(false).each { |method| inst.send(method) }
    end
  end

end

Private Instance Methods

find_modules() click to toggle source
# File lib/generators/barkest/install_generator.rb, line 40
def find_modules
  ret = []
  verbose_module_scan = (ENV['VERBOSE_MODULE_SCAN'].to_s.to_i != 0)

  # generator is run from root of app directory
  Gem::Specification.each do |gem|
    if gem_should_be_checked?(gem.name)
      puts "Checking for installer in '#{gem.name}' gem." if verbose_module_scan
      installer =
          begin
            # ensure the gem has been loaded.
            require gem.name
            # then ensure the install_generator (if any) has been loaded.
            inst_path = "generators/#{gem.name}/install_generator"
            begin
              require inst_path
              # finally load the class and generate an instance.
              klass_name = "#{gem.name.camelcase}::InstallGenerator"
              begin
                klass = Object.const_get(klass_name)
                inst = klass.new
                puts "Generated instance of class '#{klass_name}'." if verbose_module_scan
                inst
              rescue NameError
                puts "Failed to load class '#{klass_name}'." if verbose_module_scan
                nil
              end
            rescue LoadError
              puts "Failed to load file '#{inst_path}'." if verbose_module_scan
              nil
            end
          rescue LoadError
            puts "Failed to load gem '#{gem.name}'." if verbose_module_scan
            nil
          end
      ret << installer unless installer.nil?
    end
  end

  ret.sort do |a,b|
    ka = a.class.name
    kb = b.class.name

    # ensure Core installers run first.
    kac = ka.index('BarkestCore::') == 0
    kbc = kb.index('BarkestCore::') == 0

    if kac && kbc
      ka <=> kb
    elsif kac
      -1
    elsif kbc
      1
    else
      ka <=> kb
    end
  end

  ret
end
gem_should_be_checked?(gem_name) click to toggle source

override this to process additional gems.

# File lib/generators/barkest/install_generator.rb, line 32
def gem_should_be_checked?(gem_name)
  gem_name.index('barkest_') == 0
end
installers() click to toggle source
# File lib/generators/barkest/install_generator.rb, line 36
def installers
  @installers ||= find_modules
end