|
|
@@ -1,6 +1,3 @@
|
|
|
-class RimeDeployError < StandardError
|
|
|
-end
|
|
|
-
|
|
|
module FontStylePatch
|
|
|
RESET_COLOR = "\e[0m" #重置所有颜色和样式
|
|
|
COLORS = {
|
|
|
@@ -31,126 +28,91 @@ class String
|
|
|
include StringPatch
|
|
|
end
|
|
|
|
|
|
-class ChooseSession
|
|
|
- def initialize(items)
|
|
|
- @items = items #[[intro, method]] auto index
|
|
|
+module RimeDeploy
|
|
|
+ class RimeDeployError < StandardError
|
|
|
end
|
|
|
|
|
|
- def call
|
|
|
- message = nil
|
|
|
- choose = nil
|
|
|
- while true
|
|
|
- puts @title
|
|
|
- puts "Choose mode:"
|
|
|
- @items.each_with_index { |item, index| puts "[#{index + 1}] " + item[0] }
|
|
|
- puts "Tips: input the index. e.g: 01"
|
|
|
- puts "Message: #{message}".red if message
|
|
|
- print ">>".green
|
|
|
- choose_mode = gets
|
|
|
- choose_index = choose_mode.strip
|
|
|
- if choose_index =~ /\d+/ && choose_index.to_i <= @items.length
|
|
|
- choose = @items[choose_index.to_i - 1]
|
|
|
- break
|
|
|
- else
|
|
|
- message = "Wrong Index, try again."
|
|
|
- end
|
|
|
+ class ChooseSession
|
|
|
+ def initialize(items)
|
|
|
+ @items = items #[[intro, method]] auto index
|
|
|
end
|
|
|
|
|
|
- choose[1].call
|
|
|
- end
|
|
|
-end
|
|
|
-
|
|
|
-class Job
|
|
|
- attr_accessor :status, :intro
|
|
|
- def initialize
|
|
|
- @status = :waiting # :waiting, :processing, :done, :fail
|
|
|
- @intro = self.class.to_s.sub(/Job$/, "").nature_case
|
|
|
- end
|
|
|
-
|
|
|
- def call
|
|
|
- end
|
|
|
+ def call
|
|
|
+ message = nil
|
|
|
+ choose = nil
|
|
|
+ while true
|
|
|
+ puts @title
|
|
|
+ puts "Choose mode:"
|
|
|
+ @items.each_with_index do |item, index|
|
|
|
+ puts "[#{index + 1}] " + item[0]
|
|
|
+ end
|
|
|
+ puts "Tips: input the index. e.g: 01"
|
|
|
+ puts "Message: #{message}".red if message
|
|
|
+ print ">>".green
|
|
|
+ choose_mode = gets
|
|
|
+ choose_index = choose_mode.strip
|
|
|
+ if choose_index =~ /\d+/ && choose_index.to_i <= @items.length
|
|
|
+ choose = @items[choose_index.to_i - 1]
|
|
|
+ break
|
|
|
+ else
|
|
|
+ message = "Wrong Index, try again."
|
|
|
+ end
|
|
|
+ end
|
|
|
|
|
|
- def rollback
|
|
|
+ choose[1].call
|
|
|
+ end
|
|
|
end
|
|
|
-end
|
|
|
-
|
|
|
-class JobGroup
|
|
|
- def initialize(jobs)
|
|
|
- @title = "=== Rime Deploy ===="
|
|
|
- @queue = []
|
|
|
- jobs.each { |job| @queue << job.new }
|
|
|
|
|
|
- @current_index = 0
|
|
|
- end
|
|
|
+ class Job
|
|
|
+ attr_accessor :status, :intro
|
|
|
+ def initialize
|
|
|
+ @status = :waiting # :waiting, :processing, :done, :fail
|
|
|
+ klass_name = self.class.to_s.split("::").last.sub(/Job$/, "")
|
|
|
+ @intro = klass_name.nature_case
|
|
|
+ end
|
|
|
|
|
|
- def print_progress
|
|
|
- system("clear")
|
|
|
- puts @title
|
|
|
- @queue.each_with_index do |job, index|
|
|
|
- job_id = "[%02d]" % (index + 1)
|
|
|
- job_intro = job.intro.to_s.ljust(20).green
|
|
|
- job_status = job.status
|
|
|
- case job_status
|
|
|
- when :waiting
|
|
|
- job_status = job_status.to_s.white
|
|
|
- when :processing
|
|
|
- job_status = job_status.to_s.yellow
|
|
|
- when :done
|
|
|
- job_status = job_status.to_s.green
|
|
|
- end
|
|
|
- job_status = job_status.rjust(15)
|
|
|
- puts "#{job_id} #{job_intro}\t#{job_status}"
|
|
|
+ def call
|
|
|
end
|
|
|
|
|
|
- if @current_index < @queue.length
|
|
|
- puts "total: #{@queue.length}".ljust(10)
|
|
|
- puts "Detail " + "-" * 20
|
|
|
+ def rollback
|
|
|
end
|
|
|
end
|
|
|
|
|
|
- def run_job_with_info_wrapper(current_job)
|
|
|
- print_progress
|
|
|
- begin
|
|
|
- result = current_job.call
|
|
|
- if result == :next
|
|
|
- current_job.status = :done
|
|
|
- @current_index += 1
|
|
|
- else
|
|
|
- # 失败处理
|
|
|
- raise RimeDeployError
|
|
|
- end
|
|
|
- print_progress
|
|
|
- rescue RimeDeployError
|
|
|
- run_jobs_handle
|
|
|
+ class JobGroup
|
|
|
+ def initialize(jobs)
|
|
|
+ @title = "=== Rime Deploy ===="
|
|
|
+ @queue = []
|
|
|
+ jobs.each { |job| @queue << job.new }
|
|
|
+
|
|
|
+ @current_index = 0
|
|
|
end
|
|
|
- end
|
|
|
|
|
|
- def guidance
|
|
|
- ChooseSession.new(
|
|
|
- [
|
|
|
- ["Auto mode: Suitable for first-time operation.", -> { run_jobs_auto }],
|
|
|
- ["Handle mode: Decide to execute on your own.", -> { run_jobs_handle }]
|
|
|
- ]
|
|
|
- ).call
|
|
|
- end
|
|
|
- def call
|
|
|
- guidance
|
|
|
- end
|
|
|
+ def print_progress
|
|
|
+ system("clear")
|
|
|
+ puts @title
|
|
|
+ @queue.each_with_index do |job, index|
|
|
|
+ job_id = "[%02d]" % (index + 1)
|
|
|
+ job_intro = job.intro.to_s.ljust(20).green
|
|
|
+ job_status = job.status
|
|
|
+ case job_status
|
|
|
+ when :waiting
|
|
|
+ job_status = job_status.to_s.white
|
|
|
+ when :processing
|
|
|
+ job_status = job_status.to_s.yellow
|
|
|
+ when :done
|
|
|
+ job_status = job_status.to_s.green
|
|
|
+ end
|
|
|
+ job_status = job_status.rjust(15)
|
|
|
+ puts "#{job_id} #{job_intro}\t#{job_status}"
|
|
|
+ end
|
|
|
|
|
|
- def run_jobs_handle
|
|
|
- handle_jobs = []
|
|
|
- @queue.each_with_index do |job, index|
|
|
|
- job_intro = job.intro.to_s.ljust(20).green
|
|
|
- handle_jobs.push(["#{job_intro}", -> { run_job_with_info_wrapper(job) }])
|
|
|
+ if @current_index < @queue.length
|
|
|
+ puts "total: #{@queue.length}".ljust(10)
|
|
|
+ puts "Detail " + "-" * 20
|
|
|
+ end
|
|
|
end
|
|
|
- ChooseSession.new(handle_jobs).call
|
|
|
- end
|
|
|
|
|
|
- def run_jobs_auto
|
|
|
- print_progress
|
|
|
- while @current_index < @queue.length
|
|
|
- current_job = @queue[@current_index]
|
|
|
- current_job.status = :processing
|
|
|
+ def run_job_with_info_wrapper(current_job)
|
|
|
print_progress
|
|
|
begin
|
|
|
result = current_job.call
|
|
|
@@ -166,5 +128,56 @@ class JobGroup
|
|
|
run_jobs_handle
|
|
|
end
|
|
|
end
|
|
|
+
|
|
|
+ def guidance
|
|
|
+ ChooseSession.new(
|
|
|
+ [
|
|
|
+ [
|
|
|
+ "Auto mode: Suitable for first-time operation.",
|
|
|
+ -> { run_jobs_auto }
|
|
|
+ ],
|
|
|
+ [
|
|
|
+ "Handle mode: Decide to execute on your own.",
|
|
|
+ -> { run_jobs_handle }
|
|
|
+ ]
|
|
|
+ ]
|
|
|
+ ).call
|
|
|
+ end
|
|
|
+ def call
|
|
|
+ guidance
|
|
|
+ end
|
|
|
+
|
|
|
+ def run_jobs_handle
|
|
|
+ handle_jobs = []
|
|
|
+ @queue.each_with_index do |job, index|
|
|
|
+ job_intro = job.intro.to_s.ljust(20).green
|
|
|
+ handle_jobs.push(
|
|
|
+ ["#{job_intro}", -> { run_job_with_info_wrapper(job) }]
|
|
|
+ )
|
|
|
+ end
|
|
|
+ ChooseSession.new(handle_jobs).call
|
|
|
+ end
|
|
|
+
|
|
|
+ def run_jobs_auto
|
|
|
+ print_progress
|
|
|
+ while @current_index < @queue.length
|
|
|
+ current_job = @queue[@current_index]
|
|
|
+ current_job.status = :processing
|
|
|
+ print_progress
|
|
|
+ begin
|
|
|
+ result = current_job.call
|
|
|
+ if result == :next
|
|
|
+ current_job.status = :done
|
|
|
+ @current_index += 1
|
|
|
+ else
|
|
|
+ # 失败处理
|
|
|
+ raise RimeDeployError
|
|
|
+ end
|
|
|
+ print_progress
|
|
|
+ rescue RimeDeployError
|
|
|
+ run_jobs_handle
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
end
|
|
|
end
|