Class: Gem::Commands::PushCommand

Inherits:
Gem::Command show all
Includes:
GemcutterUtilities, LocalRemoteOptions
Defined in:
lib/rubygems/commands/push_command.rb

Instance Attribute Summary

Attributes included from GemcutterUtilities

#host

Attributes inherited from Gem::Command

#command, #defaults, #options, #program_name, #summary

Instance Method Summary collapse

Methods included from GemcutterUtilities

#add_key_option, #api_key, #rubygems_api_request, #sign_in, #verify_api_key, #with_response

Methods included from LocalRemoteOptions

#accept_uri_http, #add_bulk_threshold_option, #add_clear_sources_option, #add_local_remote_options, #add_proxy_option, #add_source_option, #add_update_sources_option, #both?, #local?, #remote?

Methods inherited from Gem::Command

add_common_option, #add_extra_args, #add_option, add_specific_extra_args, #begins?, build_args, build_args=, common_options, #defaults_str, 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

#initializePushCommand

Returns a new instance of PushCommand.



29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/rubygems/commands/push_command.rb', line 29

def initialize
  super 'push', 'Push a gem up to the gem server', :host => self.host

  add_proxy_option
  add_key_option

  add_option('--host HOST',
             'Push to another gemcutter-compatible host') do |value, options|
    options[:host] = value
  end

  @host = nil
end

Instance Method Details

#argumentsObject

:nodoc:



21
22
23
# File 'lib/rubygems/commands/push_command.rb', line 21

def arguments # :nodoc:
  "GEM       built gem to push up"
end

#descriptionObject

:nodoc:



11
12
13
14
15
16
17
18
19
# File 'lib/rubygems/commands/push_command.rb', line 11

def description # :nodoc:
  "The push command uploads a gem to the push server (the default is\nhttps://rubygems.org) and adds it to the index.\n\nThe gem can be removed from the index (but only the index) using the yank\ncommand.  For further discussion see the help for the yank command.\n  EOF\nend\n"

#executeObject



43
44
45
46
47
48
49
# File 'lib/rubygems/commands/push_command.rb', line 43

def execute
  @host = options[:host]

   @host

  send_gem get_one_gem_name
end

#send_gem(name) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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
# File 'lib/rubygems/commands/push_command.rb', line 51

def send_gem name
  args = [:post, "api/v1/gems"]

  latest_rubygems_version = Gem.latest_rubygems_version

  if latest_rubygems_version < Gem.rubygems_version and
       Gem.rubygems_version.prerelease? and
       Gem::Version.new('2.0.0.rc.2') != Gem.rubygems_version then
    alert_error "You are using a beta release of RubyGems (\#{Gem::VERSION}) which is not\nallowed to push gems.  Please downgrade or upgrade to a release version.\n\nThe latest released RubyGems version is \#{latest_rubygems_version}\n\nYou can upgrade or downgrade to the latest release version with:\n\ngem update --system=\#{latest_rubygems_version}\n\n    ERROR\n    terminate_interaction 1\n  end\n\n  gem_data = Gem::Package.new(name)\n\n  unless @host then\n    @host = gem_data.spec.metadata['default_gem_server']\n  end\n\n  # Always include this, even if it's nil\n  args << @host\n\n  if gem_data.spec.metadata.has_key?('allowed_push_host')\n    args << gem_data.spec.metadata['allowed_push_host']\n  end\n\n  say \"Pushing gem to \#{@host || Gem.host}...\"\n\n  response = rubygems_api_request(*args) do |request|\n    request.body = Gem.read_binary name\n    request.add_field \"Content-Length\", request.body.size\n    request.add_field \"Content-Type\",   \"application/octet-stream\"\n    request.add_field \"Authorization\",  api_key\n  end\n\n  with_response response\nend\n"

#usageObject

:nodoc:



25
26
27
# File 'lib/rubygems/commands/push_command.rb', line 25

def usage # :nodoc:
  "#{program_name} GEM"
end