class Rbdock::Generate

Public Class Methods

new(options) click to toggle source
# File lib/rbdock/generate.rb, line 11
def initialize options
  @logger        = Log4r::Logger.new("rbdock::generate")
  @logger.info("Generate options: #{options.inspect}")
  
  @image            = options[:image]
  @ruby_versions    = options[:ruby_versions]
  @dockerfile_name  = options[:output_filename]
  @force_write_mode = options[:force_write_mode]
  @use_rbenv        = options[:use_rbenv]
  @use_rvm          = options[:use_rvm]
  @app_path         = options[:app_path]
end
ruby_versions() click to toggle source
# File lib/rbdock/generate.rb, line 105
def self.ruby_versions
  [
   "1.8.6-p383",      
   "1.8.6-p420", 
   "1.8.7-p249", 
   "1.8.7-p302", 
   "1.8.7-p334", 
   "1.8.7-p352", 
   "1.8.7-p357", 
   "1.8.7-p358", 
   "1.8.7-p370", 
   "1.8.7-p371", 
   "1.8.7-p374", 
   "1.8.7-p375", 
   "1.9.1-p378", 
   "1.9.1-p430", 
   "1.9.2-p0", 
   "1.9.2-p180", 
   "1.9.2-p290", 
   "1.9.2-p318", 
   "1.9.2-p320", 
   "1.9.2-p326", 
   "1.9.3-dev", 
   "1.9.3-p0", 
   "1.9.3-p125", 
   "1.9.3-p194", 
   "1.9.3-p286", 
   "1.9.3-p327", 
   "1.9.3-p362", 
   "1.9.3-p374", 
   "1.9.3-p385", 
   "1.9.3-p392", 
   "1.9.3-p429", 
   "1.9.3-p448", 
   "1.9.3-p484", 
   "1.9.3-preview1", 
   "1.9.3-rc1", 
   "2.0.0-dev", 
   "2.0.0-p0", 
   "2.0.0-p195", 
   "2.0.0-p247", 
   "2.0.0-p353", 
   "2.0.0-preview1", 
   "2.0.0-preview2", 
   "2.0.0-rc1", 
   "2.0.0-rc2", 
   "2.1.0", 
   "2.1.0-dev", 
   "2.1.0-preview1", 
   "2.1.0-preview2", 
   "2.1.0-rc1", 
   "2.2.0-dev"  
  ]
end
run(options) click to toggle source
# File lib/rbdock/generate.rb, line 7
def self.run options
  new(options).execute
end

Public Instance Methods

base_package_template() click to toggle source
# File lib/rbdock/generate.rb, line 74
def base_package_template
  erubis Rbdock.source_root.join("templates/base_package/#{@image}.erb")
end
default_template() click to toggle source
# File lib/rbdock/generate.rb, line 78
def default_template
  @logger.debug("No ruby version manager")
  template = base_package_template
  template << erubis(Rbdock.source_root.join("templates/default/ruby.erb"))           
  template << erubis(Rbdock.source_root.join("templates/default/bundler.erb"))
  template << erubis(Rbdock.source_root.join("templates/default/app.erb")) if @app_path
  template
end
erubis(template_path) click to toggle source
# File lib/rbdock/generate.rb, line 70
def erubis template_path
  Erubis::Eruby.new(template_path.read, trim: true).result(binding)
end
execute() click to toggle source
# File lib/rbdock/generate.rb, line 24
def execute      
  if @use_rbenv
    safe_write rbenv_template
  elsif @use_rvm
    safe_write rvm_template
  elsif mutiple_rubies?
    safe_write rbenv_template
  else
    safe_write default_template
  end
end
mutiple_rubies?() click to toggle source
# File lib/rbdock/generate.rb, line 66
def mutiple_rubies?
  @ruby_versions.length > 1
end
rbenv_template() click to toggle source
# File lib/rbdock/generate.rb, line 87
def rbenv_template
  @logger.debug("Use rbenv for ruby version manager")
  template = base_package_template
  template << erubis(Rbdock.source_root.join("templates/rbenv/ruby.erb"))           
  template << erubis(Rbdock.source_root.join("templates/rbenv/bundler.erb"))
  template << erubis(Rbdock.source_root.join("templates/rbenv/app.erb")) if @app_path
  template
end
rvm_template() click to toggle source
# File lib/rbdock/generate.rb, line 96
def rvm_template
  @logger.debug("Use rvm for ruby version manager")
  template = base_package_template
  template << erubis(Rbdock.source_root.join("templates/rvm/ruby.erb"))           
  template << erubis(Rbdock.source_root.join("templates/rvm/bundler.erb"))
  template << erubis(Rbdock.source_root.join("templates/rvm/app.erb")) if @app_path
  template
end
safe_write(content) click to toggle source
# File lib/rbdock/generate.rb, line 36
def safe_write content
  if !@force_write_mode && File.exist?(@dockerfile_name)
    STDERR.print "Overwrite #{@dockerfile_name}? Y/n: "
    if $stdin.gets.chomp == 'Y'
      File.open(@dockerfile_name,'w') do |f|
        f.puts content
      end
      
      if @dockerfile_name == 'Dockerfile'
        STDERR.puts "Dockerfile is successfully generated"
      else
        STDERR.puts "Dockerfile named '#{@dockerfile_name}' is successfully generated"
      end
      
    else          
      puts content
    end
  else
    File.open(@dockerfile_name,'w') do |f|
      f.puts content
    end

    if @dockerfile_name == 'Dockerfile'
      STDERR.puts "Dockerfile is successfully generated"
    else
      STDERR.puts "Dockerfile named '#{@dockerfile_name}' is successfully generated"
    end
  end
end