lib/pbmenv.rb in pbmenv-0.1.9 vs lib/pbmenv.rb in pbmenv-0.1.10

- old
+ new

@@ -4,10 +4,16 @@ require "pathname" require_relative "pbmenv/version" require_relative "pbmenv/cli" require_relative "pbmenv/pbm" +require_relative "pbmenv/helper" +require_relative "pbmenv/version_pathname" +require_relative "pbmenv/create_version_service" +require_relative "pbmenv/destroy_version_service" +require_relative "pbmenv/use_version_service" +require_relative "pbmenv/download_src_service" module Pbmenv PBM_DIR = "/usr/share/pbm" def self.available_versions @@ -18,104 +24,49 @@ Pbmenv::PBM.new.versions.map { |name| Pathname.new(name).basename.to_s =~ /^v([\d.]+)/ && $1 }.compact.sort_by {|x| Gem::Version.new(x) }.compact end def self.install(version, use_option: false, enable_pbm_cloud: false) raise "Need a version" if version.nil? - if version == 'latest' - version = available_versions.first - end + version = + if version == 'latest' + available_versions.first + else + Helper.normalize_version(version) or raise "mismatch version number!" + end - if File.exists?("/usr/share/pbm/v#{version}") + begin + CreateVersionService.new(version: version, use_option: use_option, enable_pbm_cloud: enable_pbm_cloud).execute! + rescue CreateVersionService::AlreadyCreatedError return false + rescue CreateVersionService::NotSupportVersionError + return false end - - download_src(version) - system_and_puts <<~SHELL - mkdir -p #{PBM_DIR}/v#{version} && cp -r procon_bypass_man-#{version}/project_template/* #{PBM_DIR}/v#{version}/ - SHELL - - if enable_pbm_cloud - text = File.read("#{PBM_DIR}/v#{version}/app.rb") - if text =~ /config\.api_servers\s+=\s+\['(https:\/\/.+)'\]/ && (url = $1) - text.gsub!(/#\s+config\.api_servers\s+=\s+.+$/, "config.api_servers = '#{url}'") - end - File.write("#{PBM_DIR}/v#{version}/app.rb", text) - end - - unless File.exists?("#{PBM_DIR}/shared") - system_and_puts <<~SHELL - mkdir -p #{PBM_DIR}/shared - SHELL - end - - unless File.exists?("#{PBM_DIR}/shared/device_id") - File.write("#{PBM_DIR}/shared/device_id", "d_#{SecureRandom.uuid}") - end - - system_and_puts <<~SHELL - ln -s #{PBM_DIR}/shared/device_id #{PBM_DIR}/v#{version}/device_id - SHELL - - # 初回だけinstall時にcurrentを作成する - if !File.exists?("#{PBM_DIR}/current") || use_option - use(version) - end - rescue => e - system_and_puts "rm -rf #{PBM_DIR}/v#{version}" - raise - ensure - if Dir.exists?("./procon_bypass_man-#{version}") - system_and_puts "rm -rf ./procon_bypass_man-#{version}" - end end # TODO currentが挿しているバージョンはどうする? def self.uninstall(version) raise "Need a version" if version.nil? + version = Helper.normalize_version(version) or raise "mismatch version number!" - unless File.exists?("/usr/share/pbm/v#{version}") + begin + DestroyVersionService.new(version: version).execute! + rescue DestroyVersionService::VersionNotFoundError return false end - system_and_puts "rm -rf #{PBM_DIR}/v#{version}" end def self.use(version) raise "Need a version" if version.nil? - version = versions.last if version == "latest" + version = + if version == 'latest' + versions.last + else + Helper.normalize_version(version) or raise "mismatch version number!" + end - if !File.exists?("/usr/share/pbm/#{version}") && !File.exists?("/usr/share/pbm/v#{version}") + begin + UseVersionService.new(version: version).execute! + rescue UseVersionService::VersionNotFoundError return false end - - if File.symlink?("#{PBM_DIR}/current") - system_and_puts "unlink #{PBM_DIR}/current" - end - - if(version_number = version.match(/v?([\w.]+)/)[1]) - system_and_puts "ln -s #{PBM_DIR}/v#{version_number} #{PBM_DIR}/current" - else - raise "mismatch version number!" - end - end - - def self.download_src(version) - if ENV["DEBUG_INSTALL"] - shell = <<~SHELL - git clone https://github.com/splaplapla/procon_bypass_man.git procon_bypass_man-#{version} - SHELL - else - # TODO cache for testing - shell = <<~SHELL - curl -L https://github.com/splaplapla/procon_bypass_man/archive/refs/tags/v#{version}.tar.gz | tar xvz - SHELL - end - system_and_puts(shell) - unless File.exists?("procon_bypass_man-#{version}/project_template") - raise "This version is not support by pbmenv" - end - end - - def self.system_and_puts(shell) - puts "[SHELL] #{shell}" - system(shell) end end