class DTK::Client::Operation::Module::Install::DependentModules

Constants

BaseRoute

Public Class Methods

add_to_resolved(module_name) click to toggle source
# File lib/client/operation/module/install/dependent_modules.rb, line 54
def self.add_to_resolved(module_name)
  resolved << module_name
end
create_module_ref(ref_hash, opts = {}) click to toggle source
# File lib/client/operation/module/install/dependent_modules.rb, line 127
def self.create_module_ref(ref_hash, opts = {})
  module_ref_hash = {
    :namespace => ref_hash['namespace'], 
    :module_name => ref_hash['name'], 
    :version => ref_hash['version']
  }
  Install::ModuleRef.new(module_ref_hash)
end
get_server_dependencies(component_module_ref) click to toggle source
# File lib/client/operation/module/install/dependent_modules.rb, line 147
def self.get_server_dependencies(component_module_ref)
  hash = {
    :module_name => component_module_ref.module_name,
    :namespace   => component_module_ref.namespace,
    :version?    => component_module_ref.version
  }
  rest_get "#{BaseRoute}/module_info_with_local_dependencies", QueryStringHash.new(hash)
end
install(*args) click to toggle source

same args as initialize

# File lib/client/operation/module/install/dependent_modules.rb, line 42
def self.install(*args)
  new(*args).install
end
install_with_local(*args) click to toggle source
# File lib/client/operation/module/install/dependent_modules.rb, line 46
def self.install_with_local(*args)
  new(*args).install_with_local
end
new(base_module_ref, component_module_refs, opts = {}) click to toggle source

opts can have keys:

:update_deps
# File lib/client/operation/module/install/dependent_modules.rb, line 30
def initialize(base_module_ref, component_module_refs, opts = {})
  # TODO: DTK-2766: in an later release will changes this so iterating over module_refs, which could have component and service info,
  # not just component modules
  @base_module_ref       = base_module_ref
  @component_module_refs = component_module_refs 
  @print_helper          = PrintHelper.new(:module_ref => @base_module_ref, :source => :remote)
  @prompt_helper         = PromptHelper.new(:update_all => opts[:update_deps], :update_none => opts[:update_none] || opts[:no_update_deps])
  @opts                  = opts
end
resolved() click to toggle source
# File lib/client/operation/module/install/dependent_modules.rb, line 50
def self.resolved
  @resolved ||= []
end

Public Instance Methods

get_local_modules_info() click to toggle source
# File lib/client/operation/module/install/dependent_modules.rb, line 142
def get_local_modules_info
  component_dependency_tree = ComponentDependencyTree.create(@base_module_ref, @component_module_refs, @print_helper, 'local')
  component_dependency_tree.resolve_conflicts_and_versions
end
get_unified_dependent_module_refs() click to toggle source
# File lib/client/operation/module/install/dependent_modules.rb, line 136
def get_unified_dependent_module_refs
  component_dependency_tree = ComponentDependencyTree.create(@base_module_ref, @component_module_refs, @print_helper)
  # returns an array of module_refs that have been unified so only one version and namespace per module name
  component_dependency_tree.resolve_conflicts_and_versions(@opts)
end
install() click to toggle source
# File lib/client/operation/module/install/dependent_modules.rb, line 58
def install
  @print_helper.print_getting_dependencies unless @prompt_helper.update_none
  unified_module_refs = get_unified_dependent_module_refs
  unless unified_module_refs.empty?
    case @opts[:mode]
    when 'pull'
      @print_helper.print_pulling_dependencies unless @prompt_helper.update_none
    else
      @print_helper.print_installing_dependencies
    end
    unified_module_refs.each do |module_ref|
      # Using unless module_ref.is_base_module? because Base component module is installed when base is installed
      ComponentModule.install_or_pull?(module_ref, @prompt_helper, @print_helper) unless module_ref.is_base_module?
    end
  end
end
install_with_local() click to toggle source
# File lib/client/operation/module/install/dependent_modules.rb, line 75
def install_with_local
  @component_module_refs.each do |component_module_ref|
    unless self.class.resolved.include?("#{component_module_ref.namespace}:#{component_module_ref.module_name}")
      self.class.add_to_resolved("#{component_module_ref.namespace}:#{component_module_ref.module_name}")
      if component_module_ref.is_master_version?
        server_response = self.class.get_server_dependencies(component_module_ref)
        if module_info = server_response.data(:module_info)
          if module_info['has_remote']
            new_print_helper  = PrintHelper.new(:module_ref => component_module_ref, :source => :remote)
            if @prompt_helper.pull_module_update?(new_print_helper)
              ComponentModule.install_or_pull_new?(component_module_ref, @prompt_helper, new_print_helper) unless component_module_ref.is_base_module?
              RemoteDependencies.install_or_pull?(component_module_ref, @prompt_helper, new_print_helper)
            else
              new_print_helper.print_using_installed_dependent_module
              LocalDependencies.install_or_pull?(server_response, @prompt_helper, new_print_helper)
            end
          else
            # does not have remote but exist locally
            new_print_helper = PrintHelper.new(:module_ref => component_module_ref, :source => :remote)
            new_print_helper.print_using_installed_dependent_module

            LocalDependencies.install_or_pull?(server_response, @prompt_helper, new_print_helper)
          end
        else
          remote_response  = nil
          new_print_helper = PrintHelper.new(:module_ref => component_module_ref, :source => :remote)
          cmp              = ComponentModule.new(component_module_ref, @prompt_helper, new_print_helper)
          if component_module_ref.module_installed?(cmp)
            if @prompt_helper.pull_module_update?(new_print_helper)
              ComponentModule.install_or_pull_new?(component_module_ref, @prompt_helper, new_print_helper) unless component_module_ref.is_base_module?
            else
              new_print_helper.print_using_installed_dependent_module
            end
          else
            ComponentModule.install_or_pull_new?(component_module_ref, @prompt_helper, new_print_helper) unless component_module_ref.is_base_module?
          end
        end
      else
        new_print_helper = PrintHelper.new(:module_ref => component_module_ref, :source => :remote)
        new_print_helper.print_using_installed_dependent_module
        cmp = ComponentModule.new(component_module_ref, @prompt_helper, new_print_helper)
        unless component_module_ref.module_installed?(cmp)
          ComponentModule.install_or_pull_new?(component_module_ref, @prompt_helper, new_print_helper)
        end

        server_response = self.class.get_server_dependencies(component_module_ref)
        LocalDependencies.install_or_pull?(server_response, @prompt_helper, new_print_helper)
      end
    end
  end
end