class NoTBJ::CLI
Public Instance Methods
add_bundler_script()
click to toggle source
# File lib/no_tbj/core.rb, line 129 def add_bundler_script bundler_ruby = <<~RUBY #!/usr/bin/env ruby # # This file was generated by RubyGems. # # The application 'bundler' is installed as part of a gem, and # this file is here to facilitate running it. # require 'rubygems' version = ">= 0.a" str = ARGV.first if str str = str.b[/\A_(.*)_\z/, 1] if str and Gem::Version.correct?(str) version = str ARGV.shift end end if Gem.respond_to?(:activate_bin_path) load Gem.activate_bin_path('bundler', '!name!', version) else gem "bundler", version load Gem.bin_path("bundler", "!name!", version) end RUBY File.write(File.join(RbConfig::CONFIG["bindir"], "bundler"), bundler_ruby.sub("!name!", "bundler")) File.write(File.join(RbConfig::CONFIG["bindir"], "bundle"), bundler_ruby.sub("!name!", "bundle")) end
install()
click to toggle source
# File lib/no_tbj/core.rb, line 30 def install files = { skipped_exist: [], skipped_nobat: [], skipped_exception: [], installed: [] } add_bundler_script unless File.exist?(File.join(RbConfig::CONFIG["bindir"], "bundler")) force_level = ARGV.count("-f") verbose_level = ARGV.count("-v") bindirs.each do |bindir| Dir.glob(File.join(bindir, "*")).each do |file| next if File.directory?(file) next if File.fnmatch?("*.*", File.basename(file)) if File.exist?(file + ".exe") && force_level < 1 next files[:skipped_exist] << file end unless [ File.exist?(file + ".bat"), File.exist?(file + ".cmd"), ].any? files[:skipped_nobat] << file puts "Could not find bat file for #{file}".minfo next end begin if File.read(Dir.glob(file + ".{bat,cmd}")[0]).include?("../../../../../bin/") FileUtils.cp(exepath_gemlib, file + ".exe") else FileUtils.cp(exepath, file + ".exe") end rescue => e if verbose_level > 0 puts "Failed to copy {#{exepath}} to {#{file}.exe}.".red puts (verbose_level > 1 ? e.full_message : e.message).lines.map { |l| " " + l }.join end files[:skipped_exception] << file else files[:installed] << file end end end files = files.map { |k, v| [k, v.map { |f| File.basename(f) }] }.to_h puts "Installed for {#{files[:installed].length}} files.".green puts "Skipped {#{files[:skipped_exist].length}} files because they already exist, use {-f} to overwrite.".minfo unless files[:skipped_exist].empty? puts "Skipped {#{files[:skipped_nobat].length}} files because they don't have a bat or cmd file.".minfo unless files[:skipped_nobat].empty? unless files[:skipped_exception].empty? puts "Skipped {#{files[:skipped_exception].length}} files because of an exception.".warn puts "This usually occurs that the executable is already installed and running.".minfo end end
run()
click to toggle source
# File lib/no_tbj/core.rb, line 10 def run if ARGV.empty? puts "No arguments given.".red puts "Please specify a command, {no_tbj help} for more information.".minfo exit end case ARGV[0] when "install" install when "uninstall" uninstall when "help" show_help when "info" show_info else puts "Unrecognized command.".red end end
show_help()
click to toggle source
# File lib/no_tbj/core.rb, line 104 def show_help puts "no_tbj lets you ignore {`Terminate Batch Job (Y/N)`} dialogs.".green puts "It installs executable to your Ruby's executable directory." puts "{install:}".green puts " no_tbj install".info puts " You can specify {-f} to overwrite existing files.".minfo puts " You can specify {-v} to show verbose output.".minfo puts "{uninstall:}".green puts " no_tbj uninstall".info puts " You can specify {-v} to show verbose output.".minfo puts "{info:}".green puts " no_tbj info".info puts " Shows some information.".minfo end
show_info()
click to toggle source
# File lib/no_tbj/core.rb, line 119 def show_info puts "no_tbj version: {#{NoTBJ::VERSION}}".minfo puts "Bindirs: {#{bindirs.join("}, {")}}".minfo puts "Executables: {#{tbj_executables.length}}".minfo puts "Executables path: {#{exepath}}".minfo puts "" puts "GitHub: {https://github.com/sevenc-nanashi/no_tbj}".minfo puts "Copyright (c) 2021 {sevenc-nanashi}.".info end
uninstall()
click to toggle source
# File lib/no_tbj/core.rb, line 78 def uninstall files = { skipped_notnotbj: [], skipped_exception: [], uninstalled: [] } verbose_level = ARGV.count("-v") tbj_executables.each do |file| next if File.directory?(file) begin FileUtils.rm(file) rescue => e if verbose_level > 0 puts "Failed to remove {#{file}}.".red puts (verbose_level > 1 ? e.full_message : e.message).lines.map { |l| " " + l }.join end files[:skipped_exception] << file else files[:uninstalled] << file end end files = files.map { |k, v| [k, v.map { |f| File.basename(f) }] }.to_h puts "Uninstalled {#{files[:uninstalled].length}} files.".success unless files[:skipped_exception].empty? puts "Skipped {#{files[:skipped_exception].length}} files because of an exception.".minfo puts "This usually occurs that the executable is running.".minfo end end
Private Instance Methods
bindirs()
click to toggle source
# File lib/no_tbj/core.rb, line 187 def bindirs [RbConfig::CONFIG["bindir"], RbConfig::CONFIG["libdir"] + "/ruby/gems/" + RbConfig::CONFIG["ruby_version"] + "/bin"] end
exepath()
click to toggle source
# File lib/no_tbj/core.rb, line 179 def exepath File.join(__dir__, "runner.exe") end
exepath_gemlib()
click to toggle source
# File lib/no_tbj/core.rb, line 183 def exepath_gemlib File.join(__dir__, "runner_gemlib.exe") end
tbj_executables()
click to toggle source
# File lib/no_tbj/core.rb, line 165 def tbj_executables res = [] bindirs.each do |bindir| res += Dir.glob(File.join(bindir, "*.exe")).filter do |file| next if File.directory?(file) File.open(file, "rb") do |f| f.seek(-CHECKS.length, IO::SEEK_END) f.read(CHECKS.length) == CHECKS end end end res end