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