class Apogee::Installer

Creates an empty apogee site

Constants

FILES_WITH_SITE_NAME
VALID_FILENAME_PATTERN

Attributes

destination_root_dir[R]
site_name[R]

Public Class Methods

new(site_name, destination_root_dir: Dir.pwd) click to toggle source
# File lib/apogee/installer.rb, line 17
def initialize(site_name, destination_root_dir: Dir.pwd)
  @site_name = site_name
  @destination_root_dir = destination_root_dir
  validate
end

Public Instance Methods

copy_template_files() click to toggle source
# File lib/apogee/installer.rb, line 33
def copy_template_files
  FileUtils.mkdir_p(destination_root_dir) unless Dir.exist?(destination_root_dir)
  FileUtils.cp_r(template_dir, destination_dir)
end
gsub_site_name() click to toggle source
# File lib/apogee/installer.rb, line 38
def gsub_site_name
  FILES_WITH_SITE_NAME.each do |file|
    path = File.join(destination_dir, file)
    FileHelpers.file_gsub(path, '{{site_name}}', site_name)
  end
end
install() click to toggle source
# File lib/apogee/installer.rb, line 23
def install
  copy_template_files
  gsub_site_name
end
validate() click to toggle source
# File lib/apogee/installer.rb, line 28
def validate
  validate_destination_dir
  validate_site_name
end

Private Instance Methods

destination_dir() click to toggle source
# File lib/apogee/installer.rb, line 47
def destination_dir
  File.join(destination_root_dir, site_name)
end
template_dir() click to toggle source
# File lib/apogee/installer.rb, line 51
def template_dir
  File.join(File.dirname(__FILE__), 'templates', 'new_site')
end
validate_destination_dir() click to toggle source
# File lib/apogee/installer.rb, line 55
def validate_destination_dir
  return unless Dir.exist?(destination_dir)

  raise InstallDirectoryAlreadyExistsError, "#{destination_dir} already exists."
end
validate_site_name() click to toggle source
# File lib/apogee/installer.rb, line 61
def validate_site_name
  return if site_name.match?(VALID_FILENAME_PATTERN)

  raise ApplicationNameInvalidError, \
        "#{site_name} is not a valid site name. Please use only " \
        'letters, numbers, underscores and dashes in the application name'
end