class Luban::Deployment::Runner

Public Instance Methods

config_file() click to toggle source
# File lib/luban/deployment/runner.rb, line 21
def config_file
  @config_file ||= work_dir.join(lubanfile)
end
default_rc() click to toggle source
# File lib/luban/deployment/runner.rb, line 10
def default_rc
  @default_rc ||= { 'luban_roles' => %i(app),
                    'luban_root_path' => Parameters::General::DefaultLubanRootPath,
                    'stages' => %w(development staging production),
                    'author' => { 'name' => 'author name', 'email' => 'author@email.com' },
                    'user' => current_user
                  }
end
init_project(args:, opts:) click to toggle source
# File lib/luban/deployment/runner.rb, line 27
def init_project(args:, opts:)
  if new_project?
    project args[:project]
    if project == '.'
      work_dir Pathname.pwd
      project work_dir.basename(".deploy").to_s
    end
  end
  singleton_class.send(:include, Luban::Deployment::Helpers::Generator::Project)
  create_project_skeleton
end
lubanfile() click to toggle source
# File lib/luban/deployment/runner.rb, line 19
def lubanfile; @lubanfile ||= 'Lubanfile.rb'; end
new_project?() click to toggle source
# File lib/luban/deployment/runner.rb, line 25
def new_project?; !!@new_project; end

Protected Instance Methods

find_applications() click to toggle source
# File lib/luban/deployment/runner.rb, line 59
def find_applications
  apps_path.children.select(&:directory?).map(&:basename).map(&:to_s)
end
find_lubanfile() click to toggle source
# File lib/luban/deployment/runner.rb, line 71
def find_lubanfile
  original = current = Dir.pwd
  until File.exist?(lubanfile)
    Dir.chdir('..')
    return nil if Dir.pwd == current
   current = Dir.pwd
  end
  current
ensure
  Dir.chdir(original)
end
load_libraries() click to toggle source
# File lib/luban/deployment/runner.rb, line 83
def load_libraries
  require "#{work_dir}/lib/project"
end
on_configure() click to toggle source
Calls superclass method
# File lib/luban/deployment/runner.rb, line 41
def on_configure
  super
  if set_work_dir
    setup_cli_with_projects
  else
    setup_cli_without_projects
  end
end
project_base_class() click to toggle source
# File lib/luban/deployment/runner.rb, line 87
def project_base_class
  Object.const_get(project.camelcase)
end
project_class(stg) click to toggle source
# File lib/luban/deployment/runner.rb, line 113
def project_class(stg)
  mod = Object.const_set(stg.camelcase, Module.new)
  mod.const_set(project.camelcase, Class.new(project_base_class))
end
set_default_common_parameters() click to toggle source
# File lib/luban/deployment/runner.rb, line 50
def set_default_common_parameters
  %i(luban_roles luban_root_path stages author user).each { |p| set_default p, rc[p.to_s] }
end
set_default_project_parameters() click to toggle source
# File lib/luban/deployment/runner.rb, line 54
def set_default_project_parameters
  set_default :applications, find_applications
  set_default :project, File.basename(work_dir)
end
set_work_dir() click to toggle source
# File lib/luban/deployment/runner.rb, line 63
def set_work_dir
  project_root = find_lubanfile
  unless project_root.nil?
    work_dir Pathname.new(project_root)
    apps_path work_dir.join('apps')
  end
end
setup_cli_with_projects() click to toggle source
# File lib/luban/deployment/runner.rb, line 91
def setup_cli_with_projects
  @new_project = false
  load_configuration_file(config_file)
  set_default_common_parameters
  set_default_project_parameters
  load_libraries

  version Luban::Deployment::VERSION
  desc "Manage the deployment of project #{project.camelcase}"
  setup_init_project
  setup_projects
end
setup_cli_without_projects() click to toggle source
# File lib/luban/deployment/runner.rb, line 118
def setup_cli_without_projects
  @new_project = true
  set_default_common_parameters

  version Luban::Deployment::VERSION
  desc "Framework to manage project deployment"
  
  setup_init_project
end
setup_init_project() click to toggle source
# File lib/luban/deployment/runner.rb, line 128
def setup_init_project
  _self = self
  command :init do
    desc 'Initialize a Luban deployment project'
    if _self.new_project?
      argument :project, 'Project name', required: true, assure: ->(name) { !name.empty? }
    end
    action! :init_project
  end
end
setup_project(stg) click to toggle source
# File lib/luban/deployment/runner.rb, line 108
def setup_project(stg)
  stg = stg.to_sym
  commands[stg] = project_class(stg).new(self, stg)
end
setup_projects() click to toggle source
# File lib/luban/deployment/runner.rb, line 104
def setup_projects
  stages.each { |stg| setup_project(stg) }
end