Class: Gem::Commands::LockCommand
- Inherits:
-
Gem::Command
- Object
- Gem::Command
- Gem::Commands::LockCommand
- Defined in:
- lib/rubygems/commands/lock_command.rb
Instance Attribute Summary
Attributes inherited from Gem::Command
#command, #defaults, #options, #program_name, #summary
Instance Method Summary collapse
-
#arguments ⇒ Object
:nodoc:.
- #complain(message) ⇒ Object
-
#defaults_str ⇒ Object
:nodoc:.
-
#description ⇒ Object
:nodoc:.
- #execute ⇒ Object
-
#initialize ⇒ LockCommand
constructor
A new instance of LockCommand.
- #spec_path(gem_full_name) ⇒ Object
-
#usage ⇒ Object
:nodoc:.
Methods inherited from Gem::Command
add_common_option, #add_extra_args, #add_option, add_specific_extra_args, #begins?, build_args, build_args=, #check_deprecated_options, common_options, #deprecate_option, #deprecated?, extra_args, extra_args=, #get_all_gem_names, #get_all_gem_names_and_versions, #get_one_gem_name, #get_one_optional_argument, #handle_options, #handles?, #invoke, #invoke_with_build_args, #merge_options, #remove_option, #show_help, #show_lookup_failure, specific_extra_args, specific_extra_args_hash, specific_extra_args_hash=, #when_invoked
Methods included from UserInteraction
#alert, #alert_error, #alert_warning, #ask, #ask_for_password, #ask_yes_no, #choose_from_list, #say, #terminate_interaction, #verbose
Methods included from DefaultUserInteraction
ui, #ui, ui=, #ui=, use_ui, #use_ui
Methods included from Text
#clean_text, #format_text, #levenshtein_distance, #min3, #truncate_text
Constructor Details
#initialize ⇒ LockCommand
Returns a new instance of LockCommand.
5 6 7 8 9 10 11 12 13 |
# File 'lib/rubygems/commands/lock_command.rb', line 5 def initialize super 'lock', 'Generate a lockdown list of gems', :strict => false add_option '-s', '--[no-]strict', 'fail if unable to satisfy a dependency' do |strict, | [:strict] = strict end end |
Instance Method Details
#arguments ⇒ Object
:nodoc:
15 16 17 |
# File 'lib/rubygems/commands/lock_command.rb', line 15 def arguments # :nodoc: "GEMNAME name of gem to lock\nVERSION version of gem to lock" end |
#complain(message) ⇒ Object
60 61 62 63 64 65 66 |
# File 'lib/rubygems/commands/lock_command.rb', line 60 def complain() if [:strict] raise Gem::Exception, else say "# #{}" end end |
#defaults_str ⇒ Object
:nodoc:
19 20 21 |
# File 'lib/rubygems/commands/lock_command.rb', line 19 def defaults_str # :nodoc: "--no-strict" end |
#description ⇒ Object
:nodoc:
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/rubygems/commands/lock_command.rb', line 23 def description # :nodoc: <<-EOF The lock command will generate a list of +gem+ statements that will lock down the versions for the gem given in the command line. It will specify exact versions in the requirements list to ensure that the gems loaded will always be consistent. A full recursive search of all effected gems will be generated. Example: gem lock rails-1.0.0 > lockdown.rb will produce in lockdown.rb: require "rubygems" gem 'rails', '= 1.0.0' gem 'rake', '= 0.7.0.1' gem 'activesupport', '= 1.2.5' gem 'activerecord', '= 1.13.2' gem 'actionpack', '= 1.11.2' gem 'actionmailer', '= 1.1.5' gem 'actionwebservice', '= 1.0.0' Just load lockdown.rb from your application to ensure that the current versions are loaded. Make sure that lockdown.rb is loaded *before* any other require statements. Notice that rails 1.0.0 only requires that rake 0.6.2 or better be used. Rake-0.7.0.1 is the most recent version installed that satisfies that, so we lock it down to the exact version. EOF end |
#execute ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/rubygems/commands/lock_command.rb', line 68 def execute say "require 'rubygems'" locked = {} pending = [:args] until pending.empty? do full_name = pending.shift spec = Gem::Specification.load spec_path(full_name) if spec.nil? complain "Could not find gem #{full_name}, try using the full name" next end say "gem '#{spec.name}', '= #{spec.version}'" unless locked[spec.name] locked[spec.name] = true spec.runtime_dependencies.each do |dep| next if locked[dep.name] candidates = dep.matching_specs if candidates.empty? complain "Unable to satisfy '#{dep}' from currently installed gems" else pending << candidates.last.full_name end end end end |
#spec_path(gem_full_name) ⇒ Object
101 102 103 104 105 106 107 |
# File 'lib/rubygems/commands/lock_command.rb', line 101 def spec_path(gem_full_name) gemspecs = Gem.path.map do |path| File.join path, "specifications", "#{gem_full_name}.gemspec" end gemspecs.find {|path| File.exist? path } end |
#usage ⇒ Object
:nodoc:
56 57 58 |
# File 'lib/rubygems/commands/lock_command.rb', line 56 def usage # :nodoc: "#{program_name} GEMNAME-VERSION [GEMNAME-VERSION ...]" end |