Class: SchemaEvolutionManager::InstallTemplate

Inherits:
Object
  • Object
show all
Defined in:
lib/schema-evolution-manager/install_template.rb

Constant Summary collapse

TEMPLATE =
"#!/usr/bin/env ruby\n#\n# Generated on %%timestamp%%\n#\n\nload File.join(File.dirname(__FILE__), 'lib/schema-evolution-manager.rb')\nSchemaEvolutionManager::Library.set_verbose(true)\n\nlib_dir = '%%lib_dir%%'\nbin_dir = '%%bin_dir%%'\nversion = SchemaEvolutionManager::Version.read\n\nversion_name = \"schema-evolution-manager-%s\" % version.to_version_string\nversion_dir = File.join(lib_dir, version_name)\nversion_bin_dir = File.join(version_dir, 'bin')\n\nSchemaEvolutionManager::Library.ensure_dir!(version_dir)\nSchemaEvolutionManager::Library.ensure_dir!(bin_dir)\n\nDir.chdir(lib_dir) do\n  if File.exist?(\"schema-evolution-manager\")\n    if File.symlink?(\"schema-evolution-manager\")\n      SchemaEvolutionManager::Library.system_or_error(\"rm schema-evolution-manager\")\n      SchemaEvolutionManager::Library.system_or_error(\"ln -s %s %s\" % [version_name, 'schema-evolution-manager'])\n    else\n      puts \"*** WARNING: File[%s] already exists. Not creating symlink\" % File.join(lib_dir, \"schema-evolution-manager\")\n    end\n  else\n    SchemaEvolutionManager::Library.system_or_error(\"ln -s %s %s\" % [version_name, 'schema-evolution-manager'])\n  end\nend\n\n['CONVENTIONS.md', 'LICENSE', 'README.md', 'VERSION', 'install.sh'].each do |filename|\n  SchemaEvolutionManager::Library.system_or_error(\"cp %s %s\" % [filename, version_dir])\nend\n\n['bin', 'lib', 'lib/schema-evolution-manager', 'template', 'scripts'].each do |dir|\n  this_dir = File.join(version_dir, dir)\n  SchemaEvolutionManager::Library.ensure_dir!(this_dir)\n  Dir.foreach(dir) do |filename|\n    path = File.join(dir, filename)\n    if File.file?(path)\n      SchemaEvolutionManager::Library.system_or_error(\"cp %s %s\" % [path, this_dir])\n      if dir == \"bin\" && filename != \"sem-config\"\n        SchemaEvolutionManager::Library.system_or_error(\"chmod +x %s/%s\" % [this_dir, filename])\n      end\n    end\n  end\nend\n\naliased_bin_dir = File.join(lib_dir, \"schema-evolution-manager\", \"bin\")\nDir.chdir(bin_dir) do\n  Dir.foreach(aliased_bin_dir) do |filename|\n    path = File.join(aliased_bin_dir, filename)\n    if File.file?(path)\n      SchemaEvolutionManager::Library.system_or_error(\"rm -f %s && ln -s %s\" % [filename, path])\n    end\n  end\nend\n\n# Overrwrite bin/sem-config with proper location of lib dir\ninit_file = File.join(version_dir, \"bin/sem-config\")\nSchemaEvolutionManager::Preconditions.check_state(File.exist?(init_file), \"Init file[%s] not found\" % init_file)\nFile.open(init_file, \"w\") do |out|\n  out << \"load File.join('%s')\\n\" % File.join(version_dir, 'lib/schema-evolution-manager.rb')\nend\n\nputs \"\"\nputs \"schema-evolution-manager %s installed in %s\" % [version.to_version_string, version_dir]\nputs \"  - lib dir: %s\" % lib_dir\nputs \"  - bin dir: %s\" % bin_dir\nputs \"\"\n\nfound = `which sem-add`.strip\nif found == \"\"\n  puts \"Recommend adding the bin directory to your path\"\n  puts \"  export PATH=%s:$PATH\" % bin_dir\n  puts \"\"\nend\n\nputs \"installation complete\"\nputs \"\"\n\n"

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ InstallTemplate

Returns a new instance of InstallTemplate.



5
6
7
8
9
# File 'lib/schema-evolution-manager/install_template.rb', line 5

def initialize(opts={})
  @lib_dir = Preconditions.check_not_blank(opts.delete(:lib_dir), "lib_dir is required")
  @bin_dir = Preconditions.check_not_blank(opts.delete(:bin_dir), "bin_dir is required")
  Preconditions.assert_empty_opts(opts)
end

Instance Method Details

#generateObject

Generates the actual contents of the install file



12
13
14
15
16
17
18
# File 'lib/schema-evolution-manager/install_template.rb', line 12

def generate
  template = Template.new
  template.add('timestamp', Time.now.to_s)
  template.add('lib_dir', @lib_dir)
  template.add('bin_dir', @bin_dir)
  template.parse(TEMPLATE)
end

#write_to_file(path) ⇒ Object



20
21
22
23
24
25
26
# File 'lib/schema-evolution-manager/install_template.rb', line 20

def write_to_file(path)
  puts "Writing %s" % path
  File.open(path, "w") do |out|
    out << generate
  end
  Library.system_or_error("chmod +x %s" % path)
end