Module: Gem::MiniGems::ScriptHelper
- Defined in:
- lib/minigems/script_helper.rb
Instance Method Summary collapse
- #adapt_executables_for(gemspec) ⇒ Object
- #ensure_in_load_path!(force = false) ⇒ Object
- #interpolate_wrapper(gem_name, executable_name, mode = 'minigems') ⇒ Object
- #minigems_path ⇒ Object
- #remove_minigems! ⇒ Object
- #revert_executables_for(gemspec) ⇒ Object
Instance Method Details
#adapt_executables_for(gemspec) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/minigems/script_helper.rb', line 58 def adapt_executables_for(gemspec) gemspec.executables.each do |executable| next if executable == 'minigem' # better not modify minigem itself if File.exists?(wrapper_path = File.join(Gem.bindir, executable)) wrapper_code = interpolate_wrapper(gemspec.name, executable) begin if File.open(wrapper_path, 'w') { |f| f.write(wrapper_code) } puts "Adapted #{wrapper_path} to use minigems instead of rubygems." else puts "Failed to adapt #{wrapper_path} - maybe you need sudo permissions?" end rescue Errno::EACCES => e puts "Failed to adapt #{wrapper_path} - maybe you need sudo permissions?" end end end end |
#ensure_in_load_path!(force = false) ⇒ Object
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/minigems/script_helper.rb', line 94 def ensure_in_load_path!(force = false) install_path = File.join(Gem::ConfigMap[:sitelibdir], 'minigems.rb') if force || !File.exists?(install_path) if File.exists?(source_path = File.join(minigems_path, 'lib', 'minigems.rb')) begin minigems_code = File.read(source_path) placeholder = "FULL_RUBYGEMS_METHODS = []" replacement = "FULL_RUBYGEMS_METHODS = %w[\n " replacement << (Gem.methods - Object.methods).sort.join("\n ") replacement << "\n ]" File.open(install_path, 'w') do |f| f.write minigems_code.sub(placeholder, replacement) end minigems_dir = File.join(minigems_path, 'lib', 'minigems') FileUtils.cp_r(minigems_dir, Gem::ConfigMap[:sitelibdir]) puts "Installed minigems at #{install_path}" rescue Errno::EACCES puts "Could not install minigems at #{install_path} (try sudo)" end end end end |
#interpolate_wrapper(gem_name, executable_name, mode = 'minigems') ⇒ Object
130 131 132 133 134 135 136 |
# File 'lib/minigems/script_helper.rb', line 130 def interpolate_wrapper(gem_name, executable_name, mode = 'minigems') @template_code ||= File.read(File.join(minigems_path, 'lib', 'minigems', 'executable_wrapper')) vars = { 'GEM_NAME' => gem_name, 'EXECUTABLE_NAME' => executable_name } vars['SHEBANG'] = "#!/usr/bin/env " + Gem::ConfigMap[:ruby_install_name] vars['GEM_MODE'] = mode vars.inject(@template_code) { |str,(k,v)| str.gsub(k,v) } end |
#minigems_path ⇒ Object
48 49 50 51 52 53 54 55 56 |
# File 'lib/minigems/script_helper.rb', line 48 def minigems_path @minigems_path ||= begin if (gem_spec = Gem.source_index.find_name('minigems').sort_by { |g| g.version }.last) gem_spec.full_gem_path else raise "Minigems gem not found!" end end end |
#remove_minigems! ⇒ Object
117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/minigems/script_helper.rb', line 117 def remove_minigems! minigems_dir = File.join(Gem::ConfigMap[:sitelibdir], 'minigems') if File.exists?(install_path = File.join(Gem::ConfigMap[:sitelibdir], 'minigems.rb')) if FileUtils.rm(install_path) && FileUtils.rm_rf(minigems_dir) puts "Succesfully removed #{install_path}" return end end rescue => e puts e. puts "Could not remove #{install_path} (try sudo)" end |
#revert_executables_for(gemspec) ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/minigems/script_helper.rb', line 76 def revert_executables_for(gemspec) gemspec.executables.each do |executable| next if executable == 'minigem' # better not modify minigem itself if File.exists?(wrapper_path = File.join(Gem.bindir, executable)) wrapper_code = interpolate_wrapper(gemspec.name, executable, 'rubygems') begin if File.open(wrapper_path, 'w') { |f| f.write(wrapper_code) } puts "Reverted #{wrapper_path} to use rubygems instead of minigems." else puts "Failed to revert #{wrapper_path} - maybe you need sudo permissions?" end rescue Errno::EACCES => e puts "Failed to revert #{wrapper_path} - maybe you need sudo permissions?" end end end end |