class Xezat::Command::Init

Public Class Methods

new(options, cygport) click to toggle source
# File lib/xezat/command/init.rb, line 25
def initialize(options, cygport)
  @options = options
  @cygport = cygport
end

Public Instance Methods

execute() click to toggle source
# File lib/xezat/command/init.rb, line 30
def execute
  cygclass_dir = config(@options[:config])['cygwin']['cygclassdir']
  repository_variables = get_repository_variables(@options['repository'])
  raise UnoverwritableCygportError, "#{@cygport} already exists" if FileTest.exist?(@cygport) && !@options['overwrite']

  cygclasses = (@options['inherit'] || '').split(',')
  template_variables = get_template_variables(repository_variables, CygclassManager.new(cygclass_dir), cygclasses)
  File.atomic_write(@cygport) do |f|
    f.write(get_cygport(template_variables, @options['category'], @options['summary'], @options['description'], cygclasses, @cygport))
  end
end
get_cygport(template_variables, category, summary, description, cygclasses, cygport) click to toggle source
# File lib/xezat/command/init.rb, line 75
def get_cygport(template_variables, category, summary, description, cygclasses, cygport)
  erb = File.expand_path(File.join(TEMPLATE_DIR, 'cygport.erb'))
  ERB.new(File.readlines(erb).join(nil), trim_mode: '%-').result(binding)
end
get_repository_variables(repository) click to toggle source
# File lib/xezat/command/init.rb, line 42
def get_repository_variables(repository)
  if repository
    repository_file = File.expand_path(File.join(REPOSITORY_DIR, "#{repository}.json"))
    raise NoSuchRepositoryError, "No such repository: #{template}" unless FileTest.exist?(repository_file) || FileTest.readable?(repository_file)

    JSON.parse(File.read(repository_file), symbolize_names: true)
  else
    {
      HOMEPAGE: '',
      SRC_URI: ''
    }
  end
end
get_template_variables(original_template_variables, cygclass_manager, cygclasses) click to toggle source
# File lib/xezat/command/init.rb, line 56
def get_template_variables(original_template_variables, cygclass_manager, cygclasses)
  vcs_class = nil
  vcs_prefix = 'SRC'
  cygclasses.each do |cygclass|
    raise NoSuchCygclassError, "No such cygclass: #{cygclass}" unless cygclass_manager.include?(cygclass.intern)

    next unless cygclass_manager.vcs?(cygclass.intern)
    raise CygclassConflictError, "#{cygclass} conflict with #{vcs_class}" if vcs_class

    vcs_class = cygclass
  end
  vcs_prefix = vcs_class.to_s.upcase if vcs_class
  vcs_uri = "#{vcs_prefix}_URI".intern
  {
    :HOMEPAGE => original_template_variables[:HOMEPAGE],
    vcs_uri => original_template_variables[vcs_uri]
  }
end