Class: Gem::Commands::UnpackCommand
- Inherits:
-
Gem::Command
- Object
- Gem::Command
- Gem::Commands::UnpackCommand
- Includes:
- VersionOption
- Defined in:
- lib/rubygems/commands/unpack_command.rb
Constant Summary
Constant Summary
Constants inherited from Gem::Command
Instance Attribute Summary
Attributes inherited from Gem::Command
#command, #defaults, #options, #program_name, #summary
Instance Method Summary (collapse)
-
- (Object) arguments
:nodoc:.
-
- (Object) defaults_str
:nodoc:.
- - (Object) download(dependency)
-
- (Object) execute
-- TODO: allow, e.g., 'gem unpack rake-0.3.1'.
-
- (Object) get_path(dependency)
Return the full path to the cached gem file matching the given name and version requirement.
-
- (UnpackCommand) initialize
constructor
A new instance of UnpackCommand.
-
- (Object) usage
:nodoc:.
Methods included from VersionOption
#add_platform_option, #add_prerelease_option, #add_version_option
Methods inherited from Gem::Command
add_common_option, #add_extra_args, #add_option, add_specific_extra_args, #begins?, build_args, build_args=, common_options, #description, extra_args, extra_args=, #get_all_gem_names, #get_one_gem_name, #get_one_optional_argument, #handle_options, #handles?, #invoke, #merge_options, #remove_option, #show_help, #show_lookup_failure, specific_extra_args, specific_extra_args_hash, #when_invoked
Methods included from UserInteraction
Methods included from DefaultUserInteraction
ui, #ui, #ui=, ui=, use_ui, #use_ui
Constructor Details
- (UnpackCommand) initialize
A new instance of UnpackCommand
9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/rubygems/commands/unpack_command.rb', line 9 def initialize require 'fileutils' super 'unpack', 'Unpack an installed gem to the current directory', :version => Gem::Requirement.default, :target => Dir.pwd add_option('--target=DIR', 'target directory for unpacking') do |value, | [:target] = value end add_version_option end |
Instance Method Details
- (Object) arguments
:nodoc:
24 25 26 |
# File 'lib/rubygems/commands/unpack_command.rb', line 24 def arguments # :nodoc: "GEMNAME name of gem to unpack" end |
- (Object) defaults_str
:nodoc:
28 29 30 |
# File 'lib/rubygems/commands/unpack_command.rb', line 28 def defaults_str # :nodoc: "--version '#{Gem::Requirement.default}'" end |
- (Object) download(dependency)
36 37 38 39 40 41 42 43 44 |
# File 'lib/rubygems/commands/unpack_command.rb', line 36 def download dependency found = Gem::SpecFetcher.fetcher.fetch dependency return if found.empty? spec, source_uri = found.first Gem::RemoteFetcher.fetcher.download spec, source_uri end |
- (Object) execute
-- TODO: allow, e.g., 'gem unpack rake-0.3.1'. Find a general solution for this, so that it works for uninstall as well. (And check other commands at the same time.)
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/rubygems/commands/unpack_command.rb', line 51 def execute get_all_gem_names.each do |name| dependency = Gem::Dependency.new name, [:version] path = get_path dependency if path then basename = File.basename path, '.gem' target_dir = File. basename, [:target] FileUtils.mkdir_p target_dir Gem::Installer.new(path, :unpack => true).unpack target_dir say "Unpacked gem: '#{target_dir}'" else alert_error "Gem '#{name}' not installed." end end end |
- (Object) get_path(dependency)
Return the full path to the cached gem file matching the given name and version requirement. Returns 'nil' if no match.
Example:
get_path 'rake', '> 0.4' # "/usr/lib/ruby/gems/1.8/cache/rake-0.4.2.gem"
get_path 'rake', '< 0.1' # nil
get_path 'rak' # nil (exact name required)
-- TODO: This should be refactored so that it's a general service. I don't think any of our existing classes are the right place though. Just maybe 'Cache'?
TODO: It just uses Gem.dir for now. What's an easy way to get the list of source directories?
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/rubygems/commands/unpack_command.rb', line 85 def get_path dependency return dependency.name if dependency.name =~ /\.gem$/i specs = Gem.source_index.search dependency selected = specs.sort_by { |s| s.version }.last return download(dependency) if selected.nil? return unless dependency.name =~ /^#{selected.name}$/i # We expect to find (basename).gem in the 'cache' directory. Furthermore, # the name match must be exact (ignoring case). filename = selected.file_name path = nil Gem.path.find do |gem_dir| path = File.join gem_dir, 'cache', filename File.exist? path end path end |
- (Object) usage
:nodoc:
32 33 34 |
# File 'lib/rubygems/commands/unpack_command.rb', line 32 def usage # :nodoc: "#{program_name} GEMNAME" end |