class DTK::Client::Operation::ClientModuleDir::ServiceInstance::Internal

All Internal methods do not have wrap_operation and can only be accessed by a method that wraps it

Attributes

base_module[R]
nested_modules[R]
remove_existing[R]
repo_dir[R]
service_instance[R]

Public Class Methods

clone(args) click to toggle source
# File lib/client/operation/client_module_dir/service_instance/internal.rb, line 34
def self.clone(args)
  new(args).clone
end
clone_nested_modules(args) click to toggle source
# File lib/client/operation/client_module_dir/service_instance/internal.rb, line 38
def self.clone_nested_modules(args)
  new(args).clone_nested_modules
end
commit_and_push_nested_modules(args) click to toggle source
# File lib/client/operation/client_module_dir/service_instance/internal.rb, line 55
def self.commit_and_push_nested_modules(args)
  service_instance     = args[:service_instance]
  service_instance_dir = args[:service_instance_dir] || ret_base_path(:service, service_instance)

  nested_modules_dir = find_nested_modules_dir(service_instance_dir)
  nested_modules     = Dir.glob("#{nested_modules_dir}/*")

  nested_modules_with_sha = []
  nested_modules.each do |nested_module|
    nested_module_name = nested_module.split('/').last
    response = ClientModuleDir::GitRepo.commit_and_push_to_nested_module_repo({target_repo_dir: nested_module})
    if head_sha = response.data(:head_sha)
      nested_modules_with_sha << { nested_module_name => head_sha }
    end
  end

  nested_modules_with_sha
end
modified_service_instance_or_nested_modules?(args) click to toggle source
# File lib/client/operation/client_module_dir/service_instance/internal.rb, line 74
def self.modified_service_instance_or_nested_modules?(args)
  service_instance_dir = args.required(:dir)
  command   = args.required(:command)
  error_msg = args.required(:error_msg)

  is_modified?(service_instance_dir, command, error_msg)

  nested_modules_dir = find_nested_modules_dir(service_instance_dir)
  nested_modules     = Dir.glob("#{nested_modules_dir}/*")

  nested_modules.each do |nested_module|
    nested_module_name = nested_module.split('/').last
    nested_error_msg = "There are uncommitted changes in nested module '#{nested_module_name}'! #{error_msg}"
    is_modified?(nested_module, command, nested_error_msg)
  end
end
new(args) click to toggle source
# File lib/client/operation/client_module_dir/service_instance/internal.rb, line 25
def initialize(args)
  @base_module      = args.required(:base_module)
  @nested_modules   = args.required(:nested_modules)
  @service_instance = args.required(:service_instance)
  @remove_existing  = args[:remove_existing]
  @repo_dir         = args[:repo_dir]
end
remove_nested_module_dirs(args) click to toggle source
# File lib/client/operation/client_module_dir/service_instance/internal.rb, line 91
def self.remove_nested_module_dirs(args)
  service_instance     = args[:service_instance]
  service_instance_dir = args[:service_instance_dir] || ret_base_path(:service, service_instance)

  nested_modules_dir = find_nested_modules_dir(service_instance_dir)
  nested_modules     = Dir.glob("#{nested_modules_dir}/*")

  args[:nested_modules_to_delete].each do |nested_module|
    module_to_delete_path = "#{nested_modules_dir}/#{nested_module['display_name']}"
    FileUtils.remove_dir(module_to_delete_path) if nested_modules.include? module_to_delete_path
  end
  args[:nested_modules_to_delete]
end

Private Class Methods

find_nested_modules_dir(service_instance_dir) click to toggle source
# File lib/client/operation/client_module_dir/service_instance/internal.rb, line 148
def self.find_nested_modules_dir(service_instance_dir)
  self.possible_nested_module_base_dirs.map { |dir| "#{service_instance_dir}/#{dir}" }.find { |full_path| File.exists?(full_path) }
end
is_modified?(path, command, error_msg) click to toggle source
# File lib/client/operation/client_module_dir/service_instance/internal.rb, line 166
def self.is_modified?(path, command, error_msg)
  repo_dir = {
    :path    => path,
    :branch  => Git.open(path).branches.local,
    :command => command
  }
  message = ClientModuleDir::GitRepo.modified_with_diff(repo_dir)
  raise Error::Usage, error_msg if message.data(:modified)
end
possible_nested_module_base_dirs() click to toggle source
# File lib/client/operation/client_module_dir/service_instance/internal.rb, line 162
def self.possible_nested_module_base_dirs
  @possible_nested_module_base_dirs ||= ::DTK::DSL::DirectoryType::ServiceInstance::NestedModule.possible_paths
end

Public Instance Methods

clone() click to toggle source
# File lib/client/operation/client_module_dir/service_instance/internal.rb, line 48
def clone
  @target_repo_dir = clone_base_module
  @nested_module_base = make_nested_module_base
  self.nested_modules.each { |nested_module| clone_nested_module(nested_module) }
  self.target_repo_dir
end
clone_nested_modules() click to toggle source
# File lib/client/operation/client_module_dir/service_instance/internal.rb, line 42
def clone_nested_modules
  @target_repo_dir = self.repo_dir
  @nested_module_base = self.class.find_nested_modules_dir(self.repo_dir)
  self.nested_modules.each { |nested_module| clone_nested_module(nested_module) }
end

Protected Instance Methods

nested_module_base() click to toggle source
# File lib/client/operation/client_module_dir/service_instance/internal.rb, line 113
def nested_module_base
  @nested_module_base || raise(Error, "Unexpected that @nested_module_base is nil")
end
possible_nested_module_base_dirs() click to toggle source
# File lib/client/operation/client_module_dir/service_instance/internal.rb, line 117
def possible_nested_module_base_dirs
  self.class.possible_nested_module_base_dirs
end
target_repo_dir() click to toggle source
# File lib/client/operation/client_module_dir/service_instance/internal.rb, line 109
def target_repo_dir
  @target_repo_dir || raise(Error, "Unexpected that @target_repo_dir is nil")
end

Private Instance Methods

clone_base_module() click to toggle source
# File lib/client/operation/client_module_dir/service_instance/internal.rb, line 123
def clone_base_module
  module_info = ModuleInfo.new(self.base_module)
  target_repo_dir = self.class.create_service_dir(self.service_instance, :remove_existing => self.remove_existing, :path => self.repo_dir)
  clone_repo(module_info, target_repo_dir)
  target_repo_dir
end
clone_nested_module(nested_module_hash) click to toggle source
# File lib/client/operation/client_module_dir/service_instance/internal.rb, line 130
def clone_nested_module(nested_module_hash)
  module_info     = ModuleInfo.new(nested_module_hash)
  nested_repo_dir = "#{self.nested_module_base}/#{module_info.module_name}"
  clone_repo(module_info, nested_repo_dir)
end
clone_repo(module_info, target_repo_dir) click to toggle source
# File lib/client/operation/client_module_dir/service_instance/internal.rb, line 152
def clone_repo(module_info, target_repo_dir)
  clone_args = {
    :repo_url        => module_info.repo_url,
    :branch          => module_info.branch,
    :target_repo_dir => target_repo_dir
  }
  response = ClientModuleDir::GitRepo.clone(clone_args)
  raise Error::Usage, response.data unless response.ok?
end
find_unused_path?(dirs) click to toggle source
# File lib/client/operation/client_module_dir/service_instance/internal.rb, line 144
def find_unused_path?(dirs)
  dirs.map { |dir| "#{self.target_repo_dir}/#{dir}" }.find { |full_path| ! File.exists?(full_path) }
end
make_nested_module_base() click to toggle source
# File lib/client/operation/client_module_dir/service_instance/internal.rb, line 136
def make_nested_module_base
  unless nested_module_base = find_unused_path?(self.possible_nested_module_base_dirs)
    raise Error::Usage, "The module must not have files/directories that conflict with each of #{self.possible_nested_module_base_dirs.join(', ')}"
  end
  FileUtils.mkdir_p(nested_module_base)
  nested_module_base
end