Sha256: fba29ece464a613ee6d49aa4ea0e0c3c48d914d7fecd998ed5e45ba557319ca7

Contents?: true

Size: 1.91 KB

Versions: 1

Compression:

Stored size: 1.91 KB

Contents

namespace :operator do
  desc 'Install Capistrano-operator, operator install'
  task :install do
    src_import_sample_files = %i[import-sample.yml]
    src_import_sample_dir = '../../../../operations'
    dst_import_dir_name = 'operations'
    src_op_sample_files = %i[rm.yml touch.yml]
    src_op_sample_dir = '../../../../operations/imports'
    dst_op_sample_dir_name = 'operations/imports'

    cap_str = 'require "capistrano/operator"'
    cap_file = 'Capfile'

    init_file(src_import_sample_dir, src_import_sample_files, dst_import_dir_name)
    init_file(src_op_sample_dir, src_op_sample_files, dst_op_sample_dir_name)

    insert_str_in_file(cap_str, cap_file)

    puts 'operator is installed.'
  end

  def init_file(src_dir, src_files, dst_dir_name)
    files_hash = generate_file_hash(src_dir, src_files)
    dst_dir = make_dir(dst_dir_name)

    src_files.each do |file|
      dst_file = File.join(dst_dir, file.to_s)
      if File.exist?(dst_file)
        warn "[skip] #{dst_file} already exists"
      else
        FileUtils.cp(files_hash[file], dst_file)
        puts "create #{dst_file}"
      end
    end
  end

  def generate_file_hash(dir, files)
    files_hash = array_to_hash(files)
    files.each { |file| files_hash[file] = File.expand_path(File.join(dir, file.to_s), __FILE__) }
    files_hash
  end

  def array_to_hash(array)
    Hash[*array.zip(Array.new(array.count) { [] }).flatten(1)]
  end

  def make_dir(dir_name)
    dir = Pathname.new(dir_name)
    mkdir_p dir
    dir
  end

  def insert_str_in_file(str, path)
    str_include = nil
    File.open(path, 'a+') do |file|
      file.each_line do |line|
        if line.start_with?(str)
          str_include = true
          break
        end
      end

      if str_include
        warn "[skip] string:#{str} already exists in #{path}"
      else
        file.write(str) unless str_include
        puts "insert string:#{str} in #{path}"
      end
    end
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
capistrano-operator-1.0.0 lib/capistrano/tasks/install.rake