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=, common_options, 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, #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
Constructor Details
#initialize ⇒ LockCommand
Returns a new instance of LockCommand.
6 7 8 9 10 11 12 13 14 |
# File 'lib/rubygems/commands/lock_command.rb', line 6 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:
16 17 18 |
# File 'lib/rubygems/commands/lock_command.rb', line 16 def arguments # :nodoc: "GEMNAME name of gem to lock\nVERSION version of gem to lock" end |
#complain(message) ⇒ Object
61 62 63 64 65 66 67 |
# File 'lib/rubygems/commands/lock_command.rb', line 61 def complain() if [:strict] then raise Gem::Exception, else say "# #{message}" end end |
#defaults_str ⇒ Object
:nodoc:
20 21 22 |
# File 'lib/rubygems/commands/lock_command.rb', line 20 def defaults_str # :nodoc: "--no-strict" end |
#description ⇒ Object
:nodoc:
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 55 |
# File 'lib/rubygems/commands/lock_command.rb', line 24 def description # :nodoc: "The lock command will generate a list of +gem+ statements that will lock down\nthe versions for the gem given in the command line. It will specify exact\nversions in the requirements list to ensure that the gems loaded will always\nbe consistent. A full recursive search of all effected gems will be\ngenerated.\n\nExample:\n\ngem lock rails-1.0.0 > lockdown.rb\n\nwill produce in lockdown.rb:\n\nrequire \"rubygems\"\ngem 'rails', '= 1.0.0'\ngem 'rake', '= 0.7.0.1'\ngem 'activesupport', '= 1.2.5'\ngem 'activerecord', '= 1.13.2'\ngem 'actionpack', '= 1.11.2'\ngem 'actionmailer', '= 1.1.5'\ngem 'actionwebservice', '= 1.0.0'\n\nJust load lockdown.rb from your application to ensure that the current\nversions are loaded. Make sure that lockdown.rb is loaded *before* any\nother require statements.\n\nNotice that rails 1.0.0 only requires that rake 0.6.2 or better be used.\nRake-0.7.0.1 is the most recent version installed that satisfies that, so we\nlock it down to the exact version.\n EOF\nend\n" |
#execute ⇒ Object
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 100 |
# File 'lib/rubygems/commands/lock_command.rb', line 69 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? then 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? then 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
102 103 104 105 106 107 108 |
# File 'lib/rubygems/commands/lock_command.rb', line 102 def spec_path(gem_full_name) gemspecs = Gem.path.map { |path| File.join path, "specifications", "#{gem_full_name}.gemspec" } gemspecs.find { |path| File.exist? path } end |
#usage ⇒ Object
:nodoc:
57 58 59 |
# File 'lib/rubygems/commands/lock_command.rb', line 57 def usage # :nodoc: "#{program_name} GEMNAME-VERSION [GEMNAME-VERSION ...]" end |