class Luban::Deployment::Project

Attributes

apps[R]

Public Instance Methods

display_name() click to toggle source
# File lib/luban/deployment/cli/project.rb, line 13
def display_name; @display_name ||= "#{stage} #{project.camelcase}"; end
init_application(args:, opts:) click to toggle source
# File lib/luban/deployment/cli/project.rb, line 92
def init_application(args:, opts:)
  singleton_class.send(:include, Luban::Deployment::Helpers::Generator::Application)
  define_singleton_method(:application) { args[:application] }
  create_application_skeleton
end
package_users_for(package_name, package_version, exclude: [], servers: []) click to toggle source
# File lib/luban/deployment/cli/project.rb, line 15
def package_users_for(package_name, package_version, exclude: [], servers: [])
  apps.values.inject([]) do |package_users, app|
    unless exclude.include?(app.name)
      package_users |= app.package_users_for(package_name, package_version, servers: servers)
    end
    package_users
  end
end
password_for(user) click to toggle source
# File lib/luban/deployment/cli/project.rb, line 24
def password_for(user)
  @passwords_mutex.synchronize do
    if @passwords[user].nil?
      @passwords[user] = ask(prompt: "Password for #{user}", echo: false)
    end
    @passwords[user]
  end
end
start_sequence() click to toggle source

Luban::Deployment::Command::Tasks::Control::Actions.each do |action|

define_method(action) do |args:, opts:|
  apps.each_value do |app|
    app.send(__method__, args: args, opts: opts) if app.controllable?
  end
end

end

# File lib/luban/deployment/cli/project.rb, line 65
def start_sequence; @start_sequence ||= apps.keys; end
stop_sequence() click to toggle source
# File lib/luban/deployment/cli/project.rb, line 66
def stop_sequence; @stop_sequence ||= start_sequence.reverse; end

Protected Instance Methods

application_base_class(app) click to toggle source
# File lib/luban/deployment/cli/project.rb, line 118
def application_base_class(app)
  Object.const_get("#{project}:#{app}".camelcase)
end
application_initialized?(app) click to toggle source
# File lib/luban/deployment/cli/project.rb, line 149
def application_initialized?(app)
  File.file?("#{apps_path}/#{app}/config/deploy/#{stage}.rb")
end
load_libraries() click to toggle source
# File lib/luban/deployment/cli/project.rb, line 112
def load_libraries
  applications.each do |app|
    require "#{apps_path}/#{app}/lib/application"
  end
end
set_default_parameters() click to toggle source
# File lib/luban/deployment/cli/project.rb, line 106
def set_default_parameters
  super
  @passwords = {}
  @passwords_mutex = Mutex.new
end
set_parameters() click to toggle source
# File lib/luban/deployment/cli/project.rb, line 100
def set_parameters
  super
  set :stage, self.class.name.split('::').first.snakecase
  set :project, self.class.name.split('::').last.snakecase
end
setup_applications() click to toggle source
# File lib/luban/deployment/cli/project.rb, line 132
def setup_applications
  @apps = {}
  applications.map(&:to_sym).each do |app|
    if application_initialized?(app)
      @apps[app] = command(app, base: application_base_class(app))
    end
  end
end
setup_cli() click to toggle source
Calls superclass method Luban::Deployment::Command#setup_cli
# File lib/luban/deployment/cli/project.rb, line 122
def setup_cli
  setup_applications
  setup_init_application
  super
end
setup_descriptions() click to toggle source
# File lib/luban/deployment/cli/project.rb, line 128
def setup_descriptions
  desc "Manage apps in #{display_name}"
end
setup_init_application() click to toggle source
# File lib/luban/deployment/cli/project.rb, line 141
def setup_init_application
  command :init do
    desc 'Initialize a Luban deployment application'
    argument :application, 'Application name', required: true
    action! :init_application
  end
end