class CapistranoMulticonfigParallel::DependencyTracker

class used to find application dependencies

Attributes

job_manager[RW]

Public Class Methods

new(job_manager) click to toggle source
# File lib/capistrano_multiconfig_parallel/classes/dependency_tracker.rb, line 9
def initialize(job_manager)
  @job_manager = job_manager
end

Public Instance Methods

fetch_apps_needed_for_deployment(application, action) click to toggle source
# File lib/capistrano_multiconfig_parallel/classes/dependency_tracker.rb, line 13
def fetch_apps_needed_for_deployment(application, action)
  return [[], {}] unless @job_manager.send(:multi_apps?)
  if @job_manager.custom_command?
    show_interactive_menu(action)
  else
    fetch_application_dependencies(application, action)
  end
end

Private Instance Methods

add_dependency_app(app_to_deploy, apps_dependencies, applications_to_deploy) click to toggle source
# File lib/capistrano_multiconfig_parallel/classes/dependency_tracker.rb, line 51
def add_dependency_app(app_to_deploy, apps_dependencies, applications_to_deploy)
  return unless app_to_deploy.present?
  applications_to_deploy << app_to_deploy
  return unless app_to_deploy['dependencies'].present?
  app_to_deploy['dependencies'].each do |dependency|
    dependency_app = application_dependencies.find { |hash| hash['app'] == dependency }
    apps_dependencies << dependency_app if dependency_app.present?
  end
end
application_dependencies() click to toggle source
# File lib/capistrano_multiconfig_parallel/classes/dependency_tracker.rb, line 40
def application_dependencies
  deps = configuration.application_dependencies
  value_is_array?(deps) ? deps.map(&:stringify_keys) : []
end
available_apps() click to toggle source
# File lib/capistrano_multiconfig_parallel/classes/dependency_tracker.rb, line 45
def available_apps
  applications = application_dependencies.map { |hash| hash['app'].camelcase }
  applications << 'all_frameworks'
  applications
end
check_app_dependency_unique(applications_selected, apps_dependencies, applications_to_deploy, action) click to toggle source
# File lib/capistrano_multiconfig_parallel/classes/dependency_tracker.rb, line 71
def check_app_dependency_unique(applications_selected, apps_dependencies, applications_to_deploy, action)
  return applications_to_deploy if applications_selected.blank? || apps_dependencies.blank? || (apps_dependencies.map { |app| app['app'] } - applications_to_deploy.map { |app| app['app'] }).blank?
  apps_dependency_confirmation = ask_confirm("Do you want to  #{action} all dependencies also ?", 'Y/N')
  applications_to_deploy = applications_to_deploy.concat(apps_dependencies) if action_confirmed?(apps_dependency_confirmation)
  applications_to_deploy
end
fetch_application_dependencies(application, action) click to toggle source
# File lib/capistrano_multiconfig_parallel/classes/dependency_tracker.rb, line 24
def fetch_application_dependencies(application, action)
  return [[], {}] if configuration.application_dependencies.blank? || application.blank?
  applications = get_applications_to_deploy(action, [application.camelcase])
  applications = applications.present? ? applications : []
  app_options = applications.find { |hash| hash['app'] == application }
  app_options = app_options.present? ? app_options.dup : app_options
  applications.delete_if { |hash| hash['app'] == application }
  [applications, (app_options || {})]
end
find_apps_and_deps(applications_selected) click to toggle source
# File lib/capistrano_multiconfig_parallel/classes/dependency_tracker.rb, line 61
def find_apps_and_deps(applications_selected)
  applications_to_deploy = []
  apps_dependencies = []
  applications_selected.each do |app|
    app_to_deploy = application_dependencies.find { |hash| hash['app'].camelcase == app }
    add_dependency_app(app_to_deploy, apps_dependencies, applications_to_deploy)
  end
  [applications_to_deploy, apps_dependencies]
end
get_applications_to_deploy(action, applications_selected) click to toggle source
# File lib/capistrano_multiconfig_parallel/classes/dependency_tracker.rb, line 78
def get_applications_to_deploy(action, applications_selected)
  all_frameworks = applications_selected.find { |app| app == 'all_frameworks' }
  if all_frameworks.present?
    applications_to_deploy = application_dependencies.map { |hash| hash }
  else
    applications_to_deploy, apps_dependencies = find_apps_and_deps(applications_selected)
    applications_to_deploy = check_app_dependency_unique(applications_selected, apps_dependencies, applications_to_deploy, action)
  end
  if applications_to_deploy.present?
    applications_to_deploy = applications_to_deploy.uniq
    applications_to_deploy = applications_to_deploy.sort_by { |hash| hash['priority'] }
  end
  show_frameworks_used(applications_to_deploy, all_frameworks, action)
end
print_frameworks_used(app_names, applications_to_deploy, action) click to toggle source
show_frameworks_used(applications_to_deploy, all_frameworks, action) click to toggle source
# File lib/capistrano_multiconfig_parallel/classes/dependency_tracker.rb, line 93
def show_frameworks_used(applications_to_deploy, all_frameworks, action)
  return [] if applications_to_deploy.blank? || applications_to_deploy.size < 1
  puts 'The following frameworks will be used:'
  app_names = []
  if all_frameworks.present?
    app_names = applications_to_deploy.map { |app| app['app'].camelcase }
  else
    app_names = applications_to_deploy.map { |app| application_dependencies.find { |hash| hash['app'] == app['app'] }['app'].camelcase }
  end
  print_frameworks_used(app_names, applications_to_deploy, action)
end
show_interactive_menu(action) click to toggle source
# File lib/capistrano_multiconfig_parallel/classes/dependency_tracker.rb, line 34
def show_interactive_menu(action)
  apps_selected = CapistranoMulticonfigParallel::InteractiveMenu.new(available_apps).fetch_menu
  apps = get_applications_to_deploy(action, apps_selected)
  [apps, {}]
end