| Class | Gem::Commands::SpecificationCommand |
| In: |
lib/rubygems/commands/specification_command.rb
|
| Parent: | Gem::Command |
# File lib/rubygems/commands/specification_command.rb, line 11
11: def initialize
12: Gem.load_yaml
13:
14: super 'specification', 'Display gem specification (in yaml)',
15: :domain => :local, :version => Gem::Requirement.default,
16: :format => :yaml
17:
18: add_version_option('examine')
19: add_platform_option
20:
21: add_option('--all', 'Output specifications for all versions of',
22: 'the gem') do |value, options|
23: options[:all] = true
24: end
25:
26: add_option('--ruby', 'Output ruby format') do |value, options|
27: options[:format] = :ruby
28: end
29:
30: add_option('--yaml', 'Output RUBY format') do |value, options|
31: options[:format] = :yaml
32: end
33:
34: add_option('--marshal', 'Output Marshal format') do |value, options|
35: options[:format] = :marshal
36: end
37:
38: add_local_remote_options
39: end
# File lib/rubygems/commands/specification_command.rb, line 57
57: def execute
58: specs = []
59: gem = options[:args].shift
60:
61: unless gem then
62: raise Gem::CommandLineError,
63: "Please specify a gem name or file on the command line"
64: end
65:
66: case options[:version]
67: when String
68: req = Gem::Requirement.parse options[:version]
69: when Gem::Requirement
70: req = options[:version]
71: else
72: raise Gem::CommandLineError, "Unsupported version type: #{options[:version]}"
73: end
74:
75: if !req.none? and options[:all]
76: alert_error "Specify --all or -v, not both"
77: terminate_interaction 1
78: end
79:
80: if options[:all]
81: dep = Gem::Dependency.new gem
82: else
83: dep = Gem::Dependency.new gem, options[:version]
84: end
85:
86: field = get_one_optional_argument
87:
88: raise Gem::CommandLineError, "--ruby and FIELD are mutually exclusive" if
89: field and options[:format] == :ruby
90:
91: if local? then
92: if File.exist? gem then
93: specs << Gem::Format.from_file_by_path(gem).spec rescue nil
94: end
95:
96: if specs.empty? then
97: specs.push(*dep.matching_specs)
98: end
99: end
100:
101: if remote? then
102: found = Gem::SpecFetcher.fetcher.fetch dep, true
103:
104: if dep.prerelease? or options[:prerelease]
105: found += Gem::SpecFetcher.fetcher.fetch dep, false, true, true
106: end
107:
108: specs.push(*found.map { |spec,| spec })
109: end
110:
111: if specs.empty? then
112: alert_error "Unknown gem '#{gem}'"
113: terminate_interaction 1
114: end
115:
116: unless options[:all] then
117: specs = [specs.sort_by { |s| s.version }.last]
118: end
119:
120: specs.each do |s|
121: s = s.send field if field
122:
123: say case options[:format]
124: when :ruby then s.to_ruby
125: when :marshal then Marshal.dump s
126: else s.to_yaml
127: end
128:
129: say "\n"
130: end
131: end