Class: Gem::Commands::SpecificationCommand
- Inherits:
-
Gem::Command
- Object
- Gem::Command
- Gem::Commands::SpecificationCommand
- Includes:
- LocalRemoteOptions, VersionOption
- Defined in:
- lib/rubygems/commands/specification_command.rb
Instance Attribute Summary
Attributes inherited from Gem::Command
#command, #defaults, #options, #program_name, #summary
Instance Method Summary collapse
-
#arguments ⇒ Object
:nodoc:.
-
#defaults_str ⇒ Object
:nodoc:.
-
#description ⇒ Object
:nodoc:.
- #execute ⇒ Object
-
#initialize ⇒ SpecificationCommand
constructor
A new instance of SpecificationCommand.
-
#usage ⇒ Object
:nodoc:.
Methods included from VersionOption
#add_platform_option, #add_prerelease_option, #add_version_option, #get_platform_from_requirements
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=, #check_deprecated_options, common_options, #deprecate_option, #deprecated?, extra_args, extra_args=, #extract_gem_name_and_version, #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
Methods included from Text
#clean_text, #format_text, #levenshtein_distance, #min3, #truncate_text
Constructor Details
#initialize ⇒ SpecificationCommand
Returns a new instance of SpecificationCommand.
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/rubygems/commands/specification_command.rb', line 12 def initialize Gem.load_yaml super "specification", "Display gem specification (in yaml)", domain: :local, version: Gem::Requirement.default, format: :yaml add_version_option("examine") add_platform_option add_prerelease_option add_option("--all", "Output specifications for all versions of", "the gem") do |_value, | [:all] = true end add_option("--ruby", "Output ruby format") do |_value, | [:format] = :ruby end add_option("--yaml", "Output YAML format") do |_value, | [:format] = :yaml end add_option("--marshal", "Output Marshal format") do |_value, | [:format] = :marshal end end |
Instance Method Details
#arguments ⇒ Object
:nodoc:
43 44 45 46 47 48 |
# File 'lib/rubygems/commands/specification_command.rb', line 43 def arguments # :nodoc: <<-ARGS GEMFILE name of gem to show the gemspec for FIELD name of gemspec field to show ARGS end |
#defaults_str ⇒ Object
:nodoc:
50 51 52 |
# File 'lib/rubygems/commands/specification_command.rb', line 50 def defaults_str # :nodoc: "--local --version '#{Gem::Requirement.default}' --yaml" end |
#description ⇒ Object
:nodoc:
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/rubygems/commands/specification_command.rb', line 54 def description # :nodoc: <<-EOF The specification command allows you to extract the specification from a gem for examination. The specification can be output in YAML, ruby or Marshal formats. Specific fields in the specification can be extracted in YAML format: $ gem spec rake summary --- Ruby based make-like utility. ... EOF end |
#execute ⇒ Object
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 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'lib/rubygems/commands/specification_command.rb', line 74 def execute specs = [] gem = [:args].shift unless gem raise Gem::CommandLineError, "Please specify a gem name or file on the command line" end case v = [:version] when String req = Gem::Requirement.create v when Gem::Requirement req = v else raise Gem::CommandLineError, "Unsupported version type: '#{v}'" end if !req.none? && [:all] alert_error "Specify --all or -v, not both" terminate_interaction 1 end if [:all] dep = Gem::Dependency.new gem else dep = Gem::Dependency.new gem, req end field = get_one_optional_argument raise Gem::CommandLineError, "--ruby and FIELD are mutually exclusive" if field && [:format] == :ruby if local? if File.exist? gem begin specs << Gem::Package.new(gem).spec rescue StandardError nil end end if specs.empty? specs.push(*dep.matching_specs) end end if remote? dep.prerelease = [:prerelease] found, _ = Gem::SpecFetcher.fetcher.spec_for_dependency dep specs.push(*found.map {|spec,| spec }) end if specs.empty? alert_error "No gem matching '#{dep}' found" terminate_interaction 1 end platform = get_platform_from_requirements() if platform specs = specs.select {|s| s.platform.to_s == platform } end unless [:all] specs = [specs.max_by(&:version)] end specs.each do |s| s = s.send field if field say case [:format] when :ruby then s.to_ruby when :marshal then Marshal.dump s else s.to_yaml end say "\n" end end |
#usage ⇒ Object
:nodoc:
70 71 72 |
# File 'lib/rubygems/commands/specification_command.rb', line 70 def usage # :nodoc: "#{program_name} [GEMFILE] [FIELD]" end |