rubygems-update 1.6.2 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rubygems-update might be problematic. Click here for more details.
- data.tar.gz.sig +0 -0
- data/.autotest +0 -1
- data/History.txt +70 -4
- data/README.rdoc +3 -0
- data/Rakefile +76 -0
- data/lib/rubygems.rb +57 -27
- data/lib/rubygems/command.rb +6 -4
- data/lib/rubygems/commands/contents_command.rb +14 -11
- data/lib/rubygems/commands/fetch_command.rb +6 -3
- data/lib/rubygems/commands/outdated_command.rb +2 -1
- data/lib/rubygems/commands/pristine_command.rb +4 -3
- data/lib/rubygems/commands/unpack_command.rb +46 -4
- data/lib/rubygems/commands/update_command.rb +24 -10
- data/lib/rubygems/custom_require.rb +1 -2
- data/lib/rubygems/dependency_installer.rb +1 -1
- data/lib/rubygems/ext/rake_builder.rb +1 -1
- data/lib/rubygems/gem_runner.rb +1 -0
- data/lib/rubygems/mock_gem_ui.rb +2 -1
- data/lib/rubygems/package/tar_input.rb +1 -0
- data/lib/rubygems/remote_fetcher.rb +62 -39
- data/lib/rubygems/server.rb +1 -1
- data/lib/rubygems/source_index.rb +64 -43
- data/lib/rubygems/spec_fetcher.rb +5 -6
- data/lib/rubygems/specification.rb +375 -402
- data/lib/rubygems/test_case.rb +7 -8
- data/lib/rubygems/uninstaller.rb +2 -2
- data/lib/rubygems/user_interaction.rb +27 -31
- data/test/rubygems/test_gem.rb +2 -44
- data/test/rubygems/test_gem_commands_contents_command.rb +19 -30
- data/test/rubygems/test_gem_commands_unpack_command.rb +24 -0
- data/test/rubygems/test_gem_commands_update_command.rb +26 -1
- data/test/rubygems/test_gem_dependency_installer.rb +9 -5
- data/test/rubygems/test_gem_dependency_list.rb +2 -6
- data/test/rubygems/test_gem_gem_runner.rb +1 -4
- data/test/rubygems/test_gem_installer.rb +1 -2
- data/test/rubygems/test_gem_remote_fetcher.rb +131 -24
- data/test/rubygems/test_gem_source_index.rb +7 -192
- data/test/rubygems/test_gem_specification.rb +132 -103
- metadata +9 -9
- metadata.gz.sig +0 -0
@@ -251,13 +251,12 @@ class Gem::SpecFetcher
|
|
251
251
|
loaded = false
|
252
252
|
|
253
253
|
if File.exist? local_file then
|
254
|
-
spec_dump =
|
254
|
+
spec_dump =
|
255
|
+
@fetcher.fetch_path(spec_path, File.mtime(local_file)) rescue nil
|
255
256
|
|
256
|
-
if spec_dump
|
257
|
-
|
258
|
-
|
259
|
-
loaded = true
|
260
|
-
end
|
257
|
+
loaded = true if spec_dump
|
258
|
+
|
259
|
+
spec_dump ||= Gem.read_binary local_file
|
261
260
|
else
|
262
261
|
spec_dump = @fetcher.fetch_path spec_path
|
263
262
|
loaded = true
|
@@ -7,6 +7,7 @@
|
|
7
7
|
require 'rubygems/version'
|
8
8
|
require 'rubygems/requirement'
|
9
9
|
require 'rubygems/platform'
|
10
|
+
require "rubygems/deprecate"
|
10
11
|
|
11
12
|
# :stopdoc:
|
12
13
|
class Date; end # for ruby_code if date.rb wasn't required
|
@@ -42,6 +43,17 @@ class Gem::Specification
|
|
42
43
|
# The specification version applied to any new Specification instances
|
43
44
|
# created. This should be bumped whenever something in the spec format
|
44
45
|
# changes.
|
46
|
+
#
|
47
|
+
# Specification Version History:
|
48
|
+
#
|
49
|
+
# spec ruby
|
50
|
+
# ver ver yyyy-mm-dd description
|
51
|
+
# -1 <0.8.0 pre-spec-version-history
|
52
|
+
# 1 0.8.0 2004-08-01 Deprecated "test_suite_file" for "test_files"
|
53
|
+
# "test_file=x" is a shortcut for "test_files=[x]"
|
54
|
+
# 2 0.9.5 2007-10-01 Added "required_rubygems_version"
|
55
|
+
# Now forward-compatible with future versions
|
56
|
+
# 3 1.3.2 2009-01-03 Added Fixnum validation to specification_version
|
45
57
|
#--
|
46
58
|
# When updating this number, be sure to also update #to_ruby.
|
47
59
|
#
|
@@ -49,82 +61,76 @@ class Gem::Specification
|
|
49
61
|
|
50
62
|
CURRENT_SPECIFICATION_VERSION = 3
|
51
63
|
|
52
|
-
##
|
53
|
-
# An informal list of changes to the specification. The highest-valued
|
54
|
-
# key should be equal to the CURRENT_SPECIFICATION_VERSION.
|
55
|
-
|
56
|
-
SPECIFICATION_VERSION_HISTORY = {
|
57
|
-
-1 => ['(RubyGems versions up to and including 0.7 did not have versioned specifications)'],
|
58
|
-
1 => [
|
59
|
-
'Deprecated "test_suite_file" in favor of the new, but equivalent, "test_files"',
|
60
|
-
'"test_file=x" is a shortcut for "test_files=[x]"'
|
61
|
-
],
|
62
|
-
2 => [
|
63
|
-
'Added "required_rubygems_version"',
|
64
|
-
'Now forward-compatible with future versions',
|
65
|
-
],
|
66
|
-
3 => [
|
67
|
-
'Added Fixnum validation to the specification_version'
|
68
|
-
]
|
69
|
-
}
|
70
|
-
|
71
64
|
# :stopdoc:
|
72
|
-
MARSHAL_FIELDS = { -1 => 16, 1 => 16, 2 => 16, 3 => 17 }
|
73
65
|
|
74
|
-
|
75
|
-
|
76
|
-
# :startdoc:
|
66
|
+
# version => # of fields
|
67
|
+
MARSHAL_FIELDS = { -1 => 16, 1 => 16, 2 => 16, 3 => 17 }
|
77
68
|
|
78
|
-
|
79
|
-
|
69
|
+
today = Time.now.utc
|
70
|
+
TODAY = Time.utc(today.year, today.month, today.day)
|
80
71
|
|
81
|
-
|
72
|
+
# :startdoc:
|
82
73
|
|
83
74
|
##
|
84
75
|
# List of attribute names: [:name, :version, ...]
|
85
76
|
|
86
|
-
@@required_attributes = [
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
# ...]
|
94
|
-
|
95
|
-
@@attributes = []
|
96
|
-
|
97
|
-
@@nil_attributes = []
|
98
|
-
@@non_nil_attributes = [:@original_platform]
|
99
|
-
|
100
|
-
##
|
101
|
-
# List of array attributes
|
102
|
-
|
103
|
-
@@array_attributes = []
|
77
|
+
@@required_attributes = [:rubygems_version,
|
78
|
+
:specification_version,
|
79
|
+
:name,
|
80
|
+
:version,
|
81
|
+
:date,
|
82
|
+
:summary,
|
83
|
+
:require_paths]
|
104
84
|
|
105
85
|
##
|
106
86
|
# Map of attribute names to default values.
|
107
87
|
|
108
|
-
@@default_value = {
|
88
|
+
@@default_value = {
|
89
|
+
:authors => [],
|
90
|
+
:autorequire => nil,
|
91
|
+
:bindir => "bin",
|
92
|
+
:cert_chain => [],
|
93
|
+
:date => TODAY,
|
94
|
+
:dependencies => [],
|
95
|
+
:description => nil,
|
96
|
+
:email => nil,
|
97
|
+
:executables => [],
|
98
|
+
:extensions => [],
|
99
|
+
:extra_rdoc_files => [],
|
100
|
+
:files => [],
|
101
|
+
:homepage => nil,
|
102
|
+
:licenses => [],
|
103
|
+
:name => nil,
|
104
|
+
:platform => Gem::Platform::RUBY,
|
105
|
+
:post_install_message => nil,
|
106
|
+
:rdoc_options => [],
|
107
|
+
:require_paths => ["lib"],
|
108
|
+
:required_ruby_version => Gem::Requirement.default,
|
109
|
+
:required_rubygems_version => Gem::Requirement.default,
|
110
|
+
:requirements => [],
|
111
|
+
:rubyforge_project => nil,
|
112
|
+
:rubygems_version => Gem::VERSION,
|
113
|
+
:signing_key => nil,
|
114
|
+
:specification_version => CURRENT_SPECIFICATION_VERSION,
|
115
|
+
:summary => nil,
|
116
|
+
:test_files => [],
|
117
|
+
:version => nil,
|
118
|
+
}
|
109
119
|
|
110
|
-
|
111
|
-
|
120
|
+
@@attributes = @@default_value.keys.sort_by { |s| s.to_s }
|
121
|
+
@@array_attributes = @@default_value.reject { |k,v| v != [] }.keys
|
122
|
+
@@nil_attributes, @@non_nil_attributes = @@default_value.keys.partition { |k|
|
123
|
+
@@default_value[k].nil?
|
124
|
+
}
|
112
125
|
|
113
126
|
def self.attribute_names
|
114
|
-
@@attributes.map { |name, default| name }
|
115
|
-
end
|
116
|
-
|
117
|
-
##
|
118
|
-
# Default values for specification attributes
|
119
|
-
|
120
|
-
def self.attribute_defaults
|
121
127
|
@@attributes.dup
|
122
128
|
end
|
123
129
|
|
124
130
|
##
|
125
131
|
# The default value for specification attribute +name+
|
126
132
|
|
127
|
-
def
|
133
|
+
def default_value(name)
|
128
134
|
@@default_value[name]
|
129
135
|
end
|
130
136
|
|
@@ -150,114 +156,17 @@ class Gem::Specification
|
|
150
156
|
end
|
151
157
|
|
152
158
|
##
|
153
|
-
#
|
154
|
-
# creates a reader and writer method like Module#attr_accessor.
|
155
|
-
#
|
156
|
-
# The reader method returns the default if the value hasn't been set.
|
157
|
-
|
158
|
-
def self.attribute(name, default=nil)
|
159
|
-
ivar_name = "@#{name}".intern
|
160
|
-
if default.nil? then
|
161
|
-
@@nil_attributes << ivar_name
|
162
|
-
else
|
163
|
-
@@non_nil_attributes << [ivar_name, default]
|
164
|
-
end
|
165
|
-
|
166
|
-
@@attributes << [name, default]
|
167
|
-
@@default_value[name] = default
|
168
|
-
attr_accessor(name)
|
169
|
-
end
|
170
|
-
|
171
|
-
##
|
172
|
-
# Same as :attribute, but ensures that values assigned to the attribute
|
173
|
-
# are array values by applying :to_a to the value.
|
174
|
-
|
175
|
-
def self.array_attribute(name)
|
176
|
-
@@non_nil_attributes << ["@#{name}".intern, []]
|
177
|
-
|
178
|
-
@@array_attributes << name
|
179
|
-
@@attributes << [name, []]
|
180
|
-
@@default_value[name] = []
|
181
|
-
code = %{
|
182
|
-
def #{name}
|
183
|
-
@#{name} ||= []
|
184
|
-
end
|
185
|
-
def #{name}=(value)
|
186
|
-
@#{name} = Array(value)
|
187
|
-
end
|
188
|
-
}
|
189
|
-
|
190
|
-
module_eval code, __FILE__, __LINE__ - 9
|
191
|
-
end
|
192
|
-
|
193
|
-
##
|
194
|
-
# Same as attribute above, but also records this attribute as mandatory.
|
195
|
-
|
196
|
-
def self.required_attribute(*args)
|
197
|
-
@@required_attributes << args.first
|
198
|
-
attribute(*args)
|
199
|
-
end
|
200
|
-
|
201
|
-
##
|
202
|
-
# Sometimes we don't want the world to use a setter method for a
|
203
|
-
# particular attribute.
|
204
|
-
#
|
205
|
-
# +read_only+ makes it private so we can still use it internally.
|
159
|
+
# Specification attributes that must be non-nil
|
206
160
|
|
207
|
-
def self.
|
208
|
-
|
209
|
-
private "#{name}="
|
210
|
-
end
|
211
|
-
end
|
212
|
-
|
213
|
-
# Shortcut for creating several attributes at once (each with a default
|
214
|
-
# value of +nil+).
|
215
|
-
|
216
|
-
def self.attributes(*args)
|
217
|
-
args.each do |arg|
|
218
|
-
attribute(arg, nil)
|
219
|
-
end
|
220
|
-
end
|
221
|
-
|
222
|
-
##
|
223
|
-
# Some attributes require special behaviour when they are accessed. This
|
224
|
-
# allows for that.
|
225
|
-
|
226
|
-
def self.overwrite_accessor(name, &block)
|
227
|
-
remove_method name
|
228
|
-
define_method(name, &block)
|
229
|
-
end
|
230
|
-
|
231
|
-
##
|
232
|
-
# Defines a _singular_ version of an existing _plural_ attribute (i.e. one
|
233
|
-
# whose value is expected to be an array). This means just creating a
|
234
|
-
# helper method that takes a single value and appends it to the array.
|
235
|
-
# These are created for convenience, so that in a spec, one can write
|
236
|
-
#
|
237
|
-
# s.require_path = 'mylib'
|
238
|
-
#
|
239
|
-
# instead of:
|
240
|
-
#
|
241
|
-
# s.require_paths = ['mylib']
|
242
|
-
#
|
243
|
-
# That above convenience is available courtesy of:
|
244
|
-
#
|
245
|
-
# attribute_alias_singular :require_path, :require_paths
|
246
|
-
|
247
|
-
def self.attribute_alias_singular(singular, plural)
|
248
|
-
define_method("#{singular}=") { |val|
|
249
|
-
send("#{plural}=", [val])
|
250
|
-
}
|
251
|
-
define_method("#{singular}") {
|
252
|
-
val = send("#{plural}")
|
253
|
-
val.nil? ? nil : val.first
|
254
|
-
}
|
161
|
+
def self.non_nil_attributes
|
162
|
+
@@non_nil_attributes.dup
|
255
163
|
end
|
256
164
|
|
257
165
|
##
|
258
166
|
# Dump only crucial instance variables.
|
259
167
|
#--
|
260
168
|
# MAINTAIN ORDER!
|
169
|
+
# (down with the man)
|
261
170
|
|
262
171
|
def _dump(limit)
|
263
172
|
Marshal.dump [
|
@@ -265,7 +174,7 @@ class Gem::Specification
|
|
265
174
|
@specification_version,
|
266
175
|
@name,
|
267
176
|
@version,
|
268
|
-
|
177
|
+
date,
|
269
178
|
@summary,
|
270
179
|
@required_ruby_version,
|
271
180
|
@required_rubygems_version,
|
@@ -276,7 +185,7 @@ class Gem::Specification
|
|
276
185
|
@authors,
|
277
186
|
@description,
|
278
187
|
@homepage,
|
279
|
-
|
188
|
+
true, # has_rdoc
|
280
189
|
@new_platform,
|
281
190
|
@licenses
|
282
191
|
]
|
@@ -333,7 +242,6 @@ class Gem::Specification
|
|
333
242
|
# List of dependencies that will automatically be activated at runtime.
|
334
243
|
|
335
244
|
def runtime_dependencies
|
336
|
-
# TODO: fix #type to return :runtime if nil
|
337
245
|
dependencies.select { |d| d.type == :runtime }
|
338
246
|
end
|
339
247
|
|
@@ -345,12 +253,10 @@ class Gem::Specification
|
|
345
253
|
end
|
346
254
|
|
347
255
|
def test_suite_file # :nodoc:
|
348
|
-
warn 'test_suite_file deprecated, use test_files'
|
349
256
|
test_files.first
|
350
257
|
end
|
351
258
|
|
352
259
|
def test_suite_file=(val) # :nodoc:
|
353
|
-
warn 'test_suite_file= deprecated, use test_files='
|
354
260
|
@test_files = [] unless defined? @test_files
|
355
261
|
@test_files << val
|
356
262
|
end
|
@@ -416,16 +322,31 @@ class Gem::Specification
|
|
416
322
|
|
417
323
|
def initialize name = nil, version = nil
|
418
324
|
@new_platform = nil
|
419
|
-
assign_defaults
|
420
325
|
@loaded = false
|
421
326
|
@loaded_from = nil
|
327
|
+
@original_platform = nil
|
328
|
+
|
329
|
+
@@nil_attributes.each do |key|
|
330
|
+
instance_variable_set "@#{key}", nil
|
331
|
+
end
|
332
|
+
|
333
|
+
@@non_nil_attributes.each do |key|
|
334
|
+
default = default_value(key)
|
335
|
+
value = case default
|
336
|
+
when Time, Numeric, Symbol, true, false, nil then default
|
337
|
+
else default.dup
|
338
|
+
end
|
339
|
+
|
340
|
+
instance_variable_set "@#{key}", value
|
341
|
+
end
|
342
|
+
|
343
|
+
# HACK
|
344
|
+
instance_variable_set :@new_platform, Gem::Platform::RUBY
|
422
345
|
|
423
346
|
self.name = name if name
|
424
347
|
self.version = version if version
|
425
348
|
|
426
349
|
yield self if block_given?
|
427
|
-
|
428
|
-
@@gather.call(self) if @@gather
|
429
350
|
end
|
430
351
|
|
431
352
|
##
|
@@ -434,38 +355,22 @@ class Gem::Specification
|
|
434
355
|
def initialize_copy(other_spec)
|
435
356
|
other_ivars = other_spec.instance_variables
|
436
357
|
other_ivars = other_ivars.map { |ivar| ivar.intern } if # for 1.9
|
437
|
-
|
358
|
+
String === other_ivars.first
|
438
359
|
|
439
360
|
self.class.array_attributes.each do |name|
|
440
361
|
name = :"@#{name}"
|
441
362
|
next unless other_ivars.include? name
|
442
|
-
instance_variable_set name, other_spec.instance_variable_get(name).dup
|
443
|
-
end
|
444
|
-
end
|
445
363
|
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
# own empty arrays, etc.
|
364
|
+
begin
|
365
|
+
instance_variable_set name, other_spec.instance_variable_get(name).dup
|
366
|
+
rescue TypeError
|
367
|
+
e = Gem::FormatException.new \
|
368
|
+
"#{full_name} has an invalid value for #{name}"
|
452
369
|
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
end
|
457
|
-
|
458
|
-
@@non_nil_attributes.each do |name, default|
|
459
|
-
value = case default
|
460
|
-
when Time, Numeric, Symbol, true, false, nil then default
|
461
|
-
else default.dup
|
462
|
-
end
|
463
|
-
|
464
|
-
instance_variable_set name, value
|
370
|
+
e.file_path = loaded_from
|
371
|
+
raise e
|
372
|
+
end
|
465
373
|
end
|
466
|
-
|
467
|
-
# HACK
|
468
|
-
instance_variable_set :@new_platform, Gem::Platform::RUBY
|
469
374
|
end
|
470
375
|
|
471
376
|
##
|
@@ -628,7 +533,7 @@ class Gem::Specification
|
|
628
533
|
# spec.file_name # => "example-1.0.gem"
|
629
534
|
|
630
535
|
def file_name
|
631
|
-
full_name
|
536
|
+
"#{full_name}.gem"
|
632
537
|
end
|
633
538
|
|
634
539
|
##
|
@@ -663,7 +568,7 @@ class Gem::Specification
|
|
663
568
|
# spec.spec_name # => "example-1.0.gemspec"
|
664
569
|
|
665
570
|
def spec_name
|
666
|
-
full_name
|
571
|
+
"#{full_name}.gemspec"
|
667
572
|
end
|
668
573
|
|
669
574
|
def <=>(other) # :nodoc:
|
@@ -708,9 +613,6 @@ class Gem::Specification
|
|
708
613
|
def encode_with coder # :nodoc:
|
709
614
|
mark_version
|
710
615
|
|
711
|
-
attributes = @@attributes.map { |name,| name.to_s }.sort
|
712
|
-
attributes = attributes - %w[name version platform]
|
713
|
-
|
714
616
|
coder.add 'name', @name
|
715
617
|
coder.add 'version', @version
|
716
618
|
platform = case @original_platform
|
@@ -723,11 +625,24 @@ class Gem::Specification
|
|
723
625
|
end
|
724
626
|
coder.add 'platform', platform
|
725
627
|
|
628
|
+
attributes = @@attributes.map(&:to_s) - %w[name version platform]
|
726
629
|
attributes.each do |name|
|
727
630
|
coder.add name, instance_variable_get("@#{name}")
|
728
631
|
end
|
729
632
|
end
|
730
633
|
|
634
|
+
##
|
635
|
+
# Creates a duplicate spec without large blobs that aren't used at runtime.
|
636
|
+
|
637
|
+
def for_cache
|
638
|
+
spec = dup
|
639
|
+
|
640
|
+
spec.files = nil
|
641
|
+
spec.test_files = nil
|
642
|
+
|
643
|
+
spec
|
644
|
+
end
|
645
|
+
|
731
646
|
def to_yaml(opts = {}) # :nodoc:
|
732
647
|
if YAML.const_defined?(:ENGINE) && !YAML::ENGINE.syck? then
|
733
648
|
super.gsub(/ !!null \n/, " \n")
|
@@ -780,14 +695,13 @@ class Gem::Specification
|
|
780
695
|
:required_rubygems_version,
|
781
696
|
:specification_version,
|
782
697
|
:version,
|
698
|
+
:has_rdoc,
|
783
699
|
]
|
784
700
|
|
785
|
-
|
786
|
-
|
787
|
-
attributes.each do |attr_name, default|
|
701
|
+
@@attributes.each do |attr_name|
|
788
702
|
next if handled.include? attr_name
|
789
703
|
current_value = self.send(attr_name)
|
790
|
-
if current_value !=
|
704
|
+
if current_value != default_value(attr_name) or
|
791
705
|
self.class.required_attribute? attr_name then
|
792
706
|
result << " s.#{attr_name} = #{ruby_code current_value}"
|
793
707
|
end
|
@@ -829,12 +743,7 @@ class Gem::Specification
|
|
829
743
|
end
|
830
744
|
|
831
745
|
def to_ruby_for_cache
|
832
|
-
|
833
|
-
# remove large blobs that aren't used at runtime:
|
834
|
-
s.files = nil
|
835
|
-
s.extra_rdoc_files = nil
|
836
|
-
s.rdoc_options = nil
|
837
|
-
s.to_ruby
|
746
|
+
for_cache.to_ruby
|
838
747
|
end
|
839
748
|
|
840
749
|
##
|
@@ -844,12 +753,21 @@ class Gem::Specification
|
|
844
753
|
# Raises InvalidSpecificationException if the spec does not pass the
|
845
754
|
# checks..
|
846
755
|
|
847
|
-
def validate
|
756
|
+
def validate packaging = true
|
848
757
|
require 'rubygems/user_interaction'
|
849
758
|
extend Gem::UserInteraction
|
850
759
|
normalize
|
851
760
|
|
852
|
-
|
761
|
+
nil_attributes = self.class.non_nil_attributes.find_all do |name|
|
762
|
+
instance_variable_get("@#{name}").nil?
|
763
|
+
end
|
764
|
+
|
765
|
+
unless nil_attributes.empty? then
|
766
|
+
raise Gem::InvalidSpecificationException,
|
767
|
+
"#{nil_attributes.join ', '} must not be nil"
|
768
|
+
end
|
769
|
+
|
770
|
+
if packaging and rubygems_version != Gem::VERSION then
|
853
771
|
raise Gem::InvalidSpecificationException,
|
854
772
|
"expected RubyGems version #{Gem::VERSION}, was #{rubygems_version}"
|
855
773
|
end
|
@@ -883,7 +801,7 @@ class Gem::Specification
|
|
883
801
|
!File.file? file
|
884
802
|
end
|
885
803
|
|
886
|
-
unless non_files.empty? then
|
804
|
+
unless not packaging or non_files.empty? then
|
887
805
|
non_files = non_files.map { |file| file.inspect }
|
888
806
|
raise Gem::InvalidSpecificationException,
|
889
807
|
"[#{non_files.join ", "}] are not files"
|
@@ -901,10 +819,14 @@ class Gem::Specification
|
|
901
819
|
"invalid platform #{platform.inspect}, see Gem::Platform"
|
902
820
|
end
|
903
821
|
|
904
|
-
|
905
|
-
|
906
|
-
|
907
|
-
|
822
|
+
self.class.array_attributes.each do |symbol|
|
823
|
+
val = self.send symbol
|
824
|
+
klass = symbol == :dependencies ? Gem::Dependency : String
|
825
|
+
|
826
|
+
unless Array === val and val.all? { |x| klass === x } then
|
827
|
+
raise(Gem::InvalidSpecificationException,
|
828
|
+
"#{symbol} must be an Array of #{klass} instances")
|
829
|
+
end
|
908
830
|
end
|
909
831
|
|
910
832
|
licenses.each { |license|
|
@@ -914,26 +836,24 @@ class Gem::Specification
|
|
914
836
|
end
|
915
837
|
}
|
916
838
|
|
917
|
-
# reject
|
839
|
+
# reject lazy developers:
|
918
840
|
|
919
|
-
|
920
|
-
|
921
|
-
|
841
|
+
lazy = '"FIxxxXME" or "TOxxxDO"'.gsub(/xxx/, '')
|
842
|
+
|
843
|
+
unless authors.grep(/FI XME|TO DO/x).empty? then
|
844
|
+
raise Gem::InvalidSpecificationException, "#{lazy} is not an author"
|
922
845
|
end
|
923
846
|
|
924
|
-
unless Array(email).grep(/
|
925
|
-
raise Gem::InvalidSpecificationException,
|
926
|
-
'"FIXME" or "TODO" is not an email address'
|
847
|
+
unless Array(email).grep(/FI XME|TO DO/x).empty? then
|
848
|
+
raise Gem::InvalidSpecificationException, "#{lazy} is not an email"
|
927
849
|
end
|
928
850
|
|
929
|
-
if description =~ /
|
930
|
-
raise Gem::InvalidSpecificationException,
|
931
|
-
'"FIXME" or "TODO" is not a description'
|
851
|
+
if description =~ /FI XME|TO DO/x then
|
852
|
+
raise Gem::InvalidSpecificationException, "#{lazy} is not a description"
|
932
853
|
end
|
933
854
|
|
934
|
-
if summary =~ /
|
935
|
-
raise Gem::InvalidSpecificationException,
|
936
|
-
'"FIXME" or "TODO" is not a summary'
|
855
|
+
if summary =~ /FI XME|TO DO/x then
|
856
|
+
raise Gem::InvalidSpecificationException, "#{lazy} is not a summary"
|
937
857
|
end
|
938
858
|
|
939
859
|
if homepage and not homepage.empty? and
|
@@ -949,10 +869,11 @@ class Gem::Specification
|
|
949
869
|
alert_warning "no #{attribute} specified" if value.nil? or value.empty?
|
950
870
|
end
|
951
871
|
|
952
|
-
if
|
872
|
+
if description == summary then
|
953
873
|
alert_warning 'description and summary are identical'
|
954
874
|
end
|
955
875
|
|
876
|
+
# TODO: raise at some given date
|
956
877
|
alert_warning "deprecated autorequire specified" if autorequire
|
957
878
|
|
958
879
|
executables.each do |executable|
|
@@ -1010,11 +931,10 @@ class Gem::Specification
|
|
1010
931
|
q.group 2, 'Gem::Specification.new do |s|', 'end' do
|
1011
932
|
q.breakable
|
1012
933
|
|
1013
|
-
|
1014
|
-
|
1015
|
-
attributes.each do |attr_name, default|
|
934
|
+
# REFACTOR: each_attr - use in to_yaml as well
|
935
|
+
@@attributes.each do |attr_name|
|
1016
936
|
current_value = self.send attr_name
|
1017
|
-
if current_value !=
|
937
|
+
if current_value != default_value(attr_name) or
|
1018
938
|
self.class.required_attribute? attr_name then
|
1019
939
|
|
1020
940
|
q.text "s.#{attr_name} = "
|
@@ -1091,49 +1011,30 @@ class Gem::Specification
|
|
1091
1011
|
# :section: Required gemspec attributes
|
1092
1012
|
|
1093
1013
|
##
|
1094
|
-
# :attr_accessor: rubygems_version
|
1095
|
-
#
|
1096
1014
|
# The version of RubyGems used to create this gem.
|
1097
1015
|
#
|
1098
1016
|
# Do not set this, it is set automatically when the gem is packaged.
|
1099
1017
|
|
1100
|
-
|
1018
|
+
attr_accessor :rubygems_version
|
1101
1019
|
|
1102
1020
|
##
|
1103
|
-
# :attr_accessor: specification_version
|
1104
|
-
#
|
1105
1021
|
# The Gem::Specification version of this gemspec.
|
1106
1022
|
#
|
1107
1023
|
# Do not set this, it is set automatically when the gem is packaged.
|
1108
1024
|
|
1109
|
-
|
1025
|
+
attr_accessor :specification_version
|
1110
1026
|
|
1111
1027
|
##
|
1112
|
-
# :attr_accessor: name
|
1113
|
-
#
|
1114
1028
|
# This gem's name
|
1115
1029
|
|
1116
|
-
|
1030
|
+
attr_accessor :name
|
1117
1031
|
|
1118
1032
|
##
|
1119
|
-
# :attr_accessor: version
|
1120
|
-
#
|
1121
1033
|
# This gem's version
|
1122
1034
|
|
1123
|
-
|
1035
|
+
attr_reader :version
|
1124
1036
|
|
1125
1037
|
##
|
1126
|
-
# :attr_accessor: date
|
1127
|
-
#
|
1128
|
-
# The date this gem was created
|
1129
|
-
#
|
1130
|
-
# Do not set this, it is set automatically when the gem is packaged.
|
1131
|
-
|
1132
|
-
required_attribute :date, TODAY
|
1133
|
-
|
1134
|
-
##
|
1135
|
-
# :attr_accessor: summary
|
1136
|
-
#
|
1137
1038
|
# A short summary of this gem's description. Displayed in `gem list -d`.
|
1138
1039
|
#
|
1139
1040
|
# The description should be more detailed than the summary. For example,
|
@@ -1141,22 +1042,18 @@ class Gem::Specification
|
|
1141
1042
|
#
|
1142
1043
|
# As of RubyGems 1.3.2 newlines are no longer stripped.
|
1143
1044
|
|
1144
|
-
|
1045
|
+
attr_reader :summary
|
1145
1046
|
|
1146
1047
|
##
|
1147
|
-
# :attr_accessor: require_paths
|
1148
|
-
#
|
1149
1048
|
# Paths in the gem to add to $LOAD_PATH when this gem is activated.
|
1150
1049
|
#
|
1151
1050
|
# The default 'lib' is typically sufficient.
|
1152
1051
|
|
1153
|
-
|
1052
|
+
attr_accessor :require_paths
|
1154
1053
|
|
1155
1054
|
# :section: Optional gemspec attributes
|
1156
1055
|
|
1157
1056
|
##
|
1158
|
-
# :attr_accessor: email
|
1159
|
-
#
|
1160
1057
|
# A contact email for this gem
|
1161
1058
|
#
|
1162
1059
|
# If you are providing multiple authors and multiple emails they should be
|
@@ -1166,117 +1063,67 @@ class Gem::Specification
|
|
1166
1063
|
#
|
1167
1064
|
# Gives a hash of author name to email address.
|
1168
1065
|
|
1169
|
-
|
1066
|
+
attr_accessor :email
|
1170
1067
|
|
1171
1068
|
##
|
1172
|
-
# :attr_accessor: homepage
|
1173
|
-
#
|
1174
1069
|
# The URL of this gem's home page
|
1175
1070
|
|
1176
|
-
|
1071
|
+
attr_accessor :homepage
|
1177
1072
|
|
1178
1073
|
##
|
1179
|
-
# :attr_accessor: rubyforge_project
|
1180
|
-
#
|
1181
1074
|
# The rubyforge project this gem lives under. i.e. RubyGems'
|
1182
1075
|
# rubyforge_project is "rubygems".
|
1183
1076
|
|
1184
|
-
|
1077
|
+
attr_accessor :rubyforge_project
|
1185
1078
|
|
1186
1079
|
##
|
1187
|
-
# :attr_accessor: description
|
1188
|
-
#
|
1189
1080
|
# A long description of this gem
|
1190
1081
|
|
1191
|
-
|
1082
|
+
attr_reader :description
|
1192
1083
|
|
1193
1084
|
##
|
1194
|
-
# :attr_accessor: autorequire
|
1195
|
-
#
|
1196
1085
|
# Autorequire was used by old RubyGems to automatically require a file.
|
1197
1086
|
# It no longer is supported.
|
1198
1087
|
|
1199
|
-
|
1088
|
+
attr_accessor :autorequire
|
1200
1089
|
|
1201
1090
|
##
|
1202
|
-
# :attr_accessor: default_executable
|
1203
|
-
#
|
1204
1091
|
# The default executable for this gem.
|
1205
|
-
#
|
1206
|
-
# This is not used.
|
1207
1092
|
|
1208
|
-
|
1093
|
+
attr_writer :default_executable
|
1209
1094
|
|
1210
1095
|
##
|
1211
|
-
# :attr_accessor: bindir
|
1212
|
-
#
|
1213
1096
|
# The path in the gem for executable scripts
|
1214
1097
|
|
1215
|
-
|
1098
|
+
attr_accessor :bindir
|
1216
1099
|
|
1217
1100
|
##
|
1218
|
-
# :attr_accessor: has_rdoc
|
1219
|
-
#
|
1220
|
-
# Deprecated and ignored, defaults to true.
|
1221
|
-
#
|
1222
|
-
# Formerly used to indicate this gem was RDoc-capable.
|
1223
|
-
|
1224
|
-
attribute :has_rdoc, true
|
1225
|
-
|
1226
|
-
##
|
1227
|
-
# True if this gem supports RDoc
|
1228
|
-
|
1229
|
-
alias :has_rdoc? :has_rdoc
|
1230
|
-
|
1231
|
-
##
|
1232
|
-
# :attr_accessor: required_ruby_version
|
1233
|
-
#
|
1234
1101
|
# The version of ruby required by this gem
|
1235
1102
|
|
1236
|
-
|
1103
|
+
attr_reader :required_ruby_version
|
1237
1104
|
|
1238
1105
|
##
|
1239
|
-
# :attr_accessor: required_rubygems_version
|
1240
|
-
#
|
1241
1106
|
# The RubyGems version required by this gem
|
1242
1107
|
|
1243
|
-
|
1108
|
+
attr_reader :required_rubygems_version
|
1244
1109
|
|
1245
1110
|
##
|
1246
|
-
# :attr_accessor: platform
|
1247
|
-
#
|
1248
|
-
# The platform this gem runs on. See Gem::Platform for details.
|
1249
|
-
#
|
1250
|
-
# Setting this to any value other than Gem::Platform::RUBY or
|
1251
|
-
# Gem::Platform::CURRENT is probably wrong.
|
1252
|
-
|
1253
|
-
attribute :platform, Gem::Platform::RUBY
|
1254
|
-
|
1255
|
-
##
|
1256
|
-
# :attr_accessor: signing_key
|
1257
|
-
#
|
1258
1111
|
# The key used to sign this gem. See Gem::Security for details.
|
1259
1112
|
|
1260
|
-
|
1113
|
+
attr_accessor :signing_key
|
1261
1114
|
|
1262
1115
|
##
|
1263
|
-
# :attr_accessor: cert_chain
|
1264
|
-
#
|
1265
1116
|
# The certificate chain used to sign this gem. See Gem::Security for
|
1266
1117
|
# details.
|
1267
1118
|
|
1268
|
-
|
1119
|
+
attr_accessor :cert_chain
|
1269
1120
|
|
1270
1121
|
##
|
1271
|
-
# :attr_accessor: post_install_message
|
1272
|
-
#
|
1273
1122
|
# A message that gets displayed after the gem is installed
|
1274
1123
|
|
1275
|
-
|
1124
|
+
attr_accessor :post_install_message
|
1276
1125
|
|
1277
1126
|
##
|
1278
|
-
# :attr_accessor: authors
|
1279
|
-
#
|
1280
1127
|
# The list of author names who wrote this gem.
|
1281
1128
|
#
|
1282
1129
|
# If you are providing multiple authors and multiple emails they should be
|
@@ -1286,19 +1133,27 @@ class Gem::Specification
|
|
1286
1133
|
#
|
1287
1134
|
# Gives a hash of author name to email address.
|
1288
1135
|
|
1289
|
-
|
1136
|
+
def authors
|
1137
|
+
@authors ||= []
|
1138
|
+
end
|
1139
|
+
|
1140
|
+
def authors=(value)
|
1141
|
+
@authors = Array(value)
|
1142
|
+
end
|
1290
1143
|
|
1291
1144
|
##
|
1292
|
-
# :attr_accessor: licenses
|
1293
|
-
#
|
1294
1145
|
# The license(s) for the library. Each license must be a short name, no
|
1295
1146
|
# more than 64 characters.
|
1296
1147
|
|
1297
|
-
|
1148
|
+
def licenses
|
1149
|
+
@licenses ||= []
|
1150
|
+
end
|
1151
|
+
|
1152
|
+
def licenses=(value)
|
1153
|
+
@licenses = Array(value)
|
1154
|
+
end
|
1298
1155
|
|
1299
1156
|
##
|
1300
|
-
# :attr_accessor: files
|
1301
|
-
#
|
1302
1157
|
# Files included in this gem. You cannot append to this accessor, you must
|
1303
1158
|
# assign to it.
|
1304
1159
|
#
|
@@ -1307,117 +1162,210 @@ class Gem::Specification
|
|
1307
1162
|
# Directories are automatically stripped from this list when building a gem,
|
1308
1163
|
# other non-files cause an error.
|
1309
1164
|
|
1310
|
-
|
1165
|
+
def files
|
1166
|
+
@files ||= []
|
1167
|
+
end
|
1168
|
+
|
1169
|
+
def files=(value)
|
1170
|
+
@files = Array(value)
|
1171
|
+
end
|
1311
1172
|
|
1312
1173
|
##
|
1313
|
-
# :attr_accessor: test_files
|
1314
|
-
#
|
1315
1174
|
# Test files included in this gem. You cannot append to this accessor, you
|
1316
1175
|
# must assign to it.
|
1317
1176
|
|
1318
|
-
|
1177
|
+
def test_files
|
1178
|
+
@test_files ||= []
|
1179
|
+
end
|
1180
|
+
|
1181
|
+
def test_files=(value)
|
1182
|
+
@test_files = Array(value)
|
1183
|
+
end
|
1319
1184
|
|
1320
1185
|
##
|
1321
|
-
# :attr_accessor: rdoc_options
|
1322
|
-
#
|
1323
1186
|
# An ARGV style array of options to RDoc
|
1324
1187
|
|
1325
|
-
|
1188
|
+
def rdoc_options
|
1189
|
+
@rdoc_options ||= []
|
1190
|
+
end
|
1191
|
+
|
1192
|
+
def rdoc_options=(value)
|
1193
|
+
# TODO: warn about setting instead of pushing
|
1194
|
+
@rdoc_options = Array(value)
|
1195
|
+
end
|
1326
1196
|
|
1327
1197
|
##
|
1328
|
-
# :attr_accessor: extra_rdoc_files
|
1329
|
-
#
|
1330
1198
|
# Extra files to add to RDoc such as README or doc/examples.txt
|
1331
1199
|
|
1332
|
-
|
1200
|
+
def extra_rdoc_files
|
1201
|
+
@extra_rdoc_files ||= []
|
1202
|
+
end
|
1203
|
+
|
1204
|
+
def extra_rdoc_files=(value)
|
1205
|
+
# TODO: warn about setting instead of pushing
|
1206
|
+
@extra_rdoc_files = Array(value)
|
1207
|
+
end
|
1333
1208
|
|
1334
1209
|
##
|
1335
|
-
# :attr_accessor: executables
|
1336
|
-
#
|
1337
1210
|
# Executables included in the gem.
|
1338
1211
|
|
1339
|
-
|
1212
|
+
def executables
|
1213
|
+
@executables ||= []
|
1214
|
+
end
|
1215
|
+
|
1216
|
+
def executables=(value)
|
1217
|
+
# TODO: warn about setting instead of pushing
|
1218
|
+
@executables = Array(value)
|
1219
|
+
end
|
1340
1220
|
|
1341
1221
|
##
|
1342
|
-
# :attr_accessor: extensions
|
1343
|
-
#
|
1344
1222
|
# Extensions to build when installing the gem. See
|
1345
1223
|
# Gem::Installer#build_extensions for valid values.
|
1346
1224
|
|
1347
|
-
|
1225
|
+
def extensions
|
1226
|
+
@extensions ||= []
|
1227
|
+
end
|
1228
|
+
|
1229
|
+
def extensions=(value)
|
1230
|
+
# TODO: warn about setting instead of pushing
|
1231
|
+
@extensions = Array(value)
|
1232
|
+
end
|
1348
1233
|
|
1349
1234
|
##
|
1350
|
-
# :attr_accessor: requirements
|
1351
|
-
#
|
1352
1235
|
# An array or things required by this gem. Not used by anything
|
1353
1236
|
# presently.
|
1354
1237
|
|
1355
|
-
|
1238
|
+
def requirements
|
1239
|
+
@requirements ||= []
|
1240
|
+
end
|
1241
|
+
|
1242
|
+
def requirements=(value)
|
1243
|
+
# TODO: warn about setting instead of pushing
|
1244
|
+
@requirements = Array(value)
|
1245
|
+
end
|
1356
1246
|
|
1357
1247
|
##
|
1358
|
-
# :attr_reader: dependencies
|
1359
|
-
#
|
1360
1248
|
# A list of Gem::Dependency objects this gem depends on.
|
1361
1249
|
#
|
1362
1250
|
# Use #add_dependency or #add_development_dependency to add dependencies to
|
1363
1251
|
# a gem.
|
1364
1252
|
|
1365
|
-
|
1366
|
-
|
1367
|
-
|
1253
|
+
def dependencies
|
1254
|
+
@dependencies ||= []
|
1255
|
+
end
|
1368
1256
|
|
1369
1257
|
# :section: Aliased gemspec attributes
|
1370
1258
|
|
1371
1259
|
##
|
1372
1260
|
# Singular accessor for #executables
|
1373
1261
|
|
1374
|
-
|
1262
|
+
def executable
|
1263
|
+
val = executables and val.first
|
1264
|
+
end
|
1265
|
+
|
1266
|
+
##
|
1267
|
+
# Singular accessor for #executables
|
1268
|
+
|
1269
|
+
def executable=o
|
1270
|
+
self.executables = [o]
|
1271
|
+
end
|
1272
|
+
|
1273
|
+
##
|
1274
|
+
# Singular accessor for #authors
|
1275
|
+
|
1276
|
+
def author
|
1277
|
+
val = authors and val.first
|
1278
|
+
end
|
1375
1279
|
|
1376
1280
|
##
|
1377
1281
|
# Singular accessor for #authors
|
1378
1282
|
|
1379
|
-
|
1283
|
+
def author=o
|
1284
|
+
self.authors = [o]
|
1285
|
+
end
|
1286
|
+
|
1287
|
+
##
|
1288
|
+
# Singular accessor for #licenses
|
1289
|
+
|
1290
|
+
def license
|
1291
|
+
val = licenses and val.first
|
1292
|
+
end
|
1380
1293
|
|
1381
1294
|
##
|
1382
1295
|
# Singular accessor for #licenses
|
1383
1296
|
|
1384
|
-
|
1297
|
+
def license=o
|
1298
|
+
self.licenses = [o]
|
1299
|
+
end
|
1385
1300
|
|
1386
1301
|
##
|
1387
1302
|
# Singular accessor for #require_paths
|
1388
1303
|
|
1389
|
-
|
1304
|
+
def require_path
|
1305
|
+
val = require_paths and val.first
|
1306
|
+
end
|
1307
|
+
|
1308
|
+
##
|
1309
|
+
# Singular accessor for #require_paths
|
1310
|
+
|
1311
|
+
def require_path=o
|
1312
|
+
self.require_paths = [o]
|
1313
|
+
end
|
1390
1314
|
|
1391
1315
|
##
|
1392
1316
|
# Singular accessor for #test_files
|
1393
1317
|
|
1394
|
-
|
1318
|
+
def test_file
|
1319
|
+
val = test_files and val.first
|
1320
|
+
end
|
1395
1321
|
|
1396
1322
|
##
|
1397
|
-
#
|
1323
|
+
# Singular accessor for #test_files
|
1324
|
+
|
1325
|
+
def test_file=o
|
1326
|
+
self.test_files = [o]
|
1327
|
+
end
|
1328
|
+
|
1329
|
+
##
|
1330
|
+
# Deprecated and ignored, defaults to true.
|
1331
|
+
#
|
1332
|
+
# Formerly used to indicate this gem was RDoc-capable.
|
1398
1333
|
|
1399
|
-
|
1334
|
+
def has_rdoc
|
1400
1335
|
true
|
1401
1336
|
end
|
1402
1337
|
|
1403
1338
|
##
|
1404
|
-
#
|
1339
|
+
# Deprecated and ignored.
|
1340
|
+
#
|
1341
|
+
# Formerly used to indicate this gem was RDoc-capable.
|
1405
1342
|
|
1406
|
-
|
1343
|
+
def has_rdoc= v
|
1407
1344
|
@has_rdoc = true
|
1408
1345
|
end
|
1409
1346
|
|
1410
|
-
|
1347
|
+
alias :has_rdoc? :has_rdoc
|
1348
|
+
|
1349
|
+
def version= version
|
1411
1350
|
@version = Gem::Version.create(version)
|
1412
1351
|
self.required_rubygems_version = '> 1.3.1' if @version.prerelease?
|
1413
1352
|
return @version
|
1414
1353
|
end
|
1415
1354
|
|
1416
|
-
|
1355
|
+
##
|
1356
|
+
# The platform this gem runs on. See Gem::Platform for details.
|
1357
|
+
|
1358
|
+
def platform
|
1417
1359
|
@new_platform
|
1418
1360
|
end
|
1419
1361
|
|
1420
|
-
|
1362
|
+
##
|
1363
|
+
# The platform this gem runs on. See Gem::Platform for details.
|
1364
|
+
#
|
1365
|
+
# Setting this to any value other than Gem::Platform::RUBY or
|
1366
|
+
# Gem::Platform::CURRENT is probably wrong.
|
1367
|
+
|
1368
|
+
def platform= platform
|
1421
1369
|
if @original_platform.nil? or
|
1422
1370
|
@original_platform == Gem::Platform::RUBY then
|
1423
1371
|
@original_platform = platform
|
@@ -1449,68 +1397,82 @@ class Gem::Specification
|
|
1449
1397
|
@new_platform
|
1450
1398
|
end
|
1451
1399
|
|
1452
|
-
|
1400
|
+
##
|
1401
|
+
# The version of ruby required by this gem
|
1402
|
+
|
1403
|
+
def required_ruby_version= value
|
1453
1404
|
@required_ruby_version = Gem::Requirement.create(value)
|
1454
1405
|
end
|
1455
1406
|
|
1456
|
-
|
1407
|
+
##
|
1408
|
+
# The RubyGems version required by this gem
|
1409
|
+
|
1410
|
+
def required_rubygems_version= value
|
1457
1411
|
@required_rubygems_version = Gem::Requirement.create(value)
|
1458
1412
|
end
|
1459
1413
|
|
1460
|
-
|
1414
|
+
##
|
1415
|
+
# The date this gem was created
|
1416
|
+
#
|
1417
|
+
# Do not set this, it is set automatically when the gem is packaged.
|
1418
|
+
|
1419
|
+
def date= date
|
1461
1420
|
# We want to end up with a Time object with one-day resolution.
|
1462
1421
|
# This is the cleanest, most-readable, faster-than-using-Date
|
1463
1422
|
# way to do it.
|
1464
|
-
case date
|
1465
|
-
|
1466
|
-
|
1467
|
-
Time.
|
1423
|
+
@date = case date
|
1424
|
+
when String then
|
1425
|
+
if /\A(\d{4})-(\d{2})-(\d{2})\Z/ =~ date then
|
1426
|
+
Time.utc($1.to_i, $2.to_i, $3.to_i)
|
1468
1427
|
else
|
1469
|
-
|
1470
|
-
|
1428
|
+
raise(Gem::InvalidSpecificationException,
|
1429
|
+
"invalid date format in specification: #{date.inspect}")
|
1471
1430
|
end
|
1472
|
-
|
1473
|
-
|
1474
|
-
|
1475
|
-
|
1476
|
-
|
1477
|
-
@date = TODAY
|
1478
|
-
end
|
1431
|
+
when Time, Date then
|
1432
|
+
Time.utc(date.year, date.month, date.day)
|
1433
|
+
else
|
1434
|
+
TODAY
|
1435
|
+
end
|
1479
1436
|
end
|
1480
1437
|
|
1481
|
-
|
1482
|
-
|
1483
|
-
|
1438
|
+
##
|
1439
|
+
# The date this gem was created. Lazily defaults to TODAY.
|
1440
|
+
|
1441
|
+
def date
|
1442
|
+
@date ||= TODAY
|
1484
1443
|
end
|
1485
1444
|
|
1486
|
-
|
1487
|
-
|
1488
|
-
|
1489
|
-
|
1490
|
-
|
1491
|
-
|
1445
|
+
##
|
1446
|
+
# A short summary of this gem's description.
|
1447
|
+
|
1448
|
+
def summary= str
|
1449
|
+
@summary = str.to_s.strip.
|
1450
|
+
gsub(/(\w-)\n[ \t]*(\w)/, '\1\2').gsub(/\n[ \t]*/, " ") # so. weird.
|
1492
1451
|
end
|
1493
1452
|
|
1494
|
-
|
1453
|
+
##
|
1454
|
+
# A long description of this gem
|
1455
|
+
|
1456
|
+
def description= str
|
1495
1457
|
@description = str.to_s
|
1496
1458
|
end
|
1497
1459
|
|
1498
|
-
|
1499
|
-
|
1500
|
-
|
1501
|
-
|
1502
|
-
|
1503
|
-
|
1504
|
-
|
1505
|
-
|
1506
|
-
|
1507
|
-
result
|
1508
|
-
rescue
|
1509
|
-
nil
|
1460
|
+
##
|
1461
|
+
# The default executable for this gem.
|
1462
|
+
|
1463
|
+
def default_executable
|
1464
|
+
if defined?(@default_executable) and @default_executable
|
1465
|
+
result = @default_executable
|
1466
|
+
elsif @executables and @executables.size == 1
|
1467
|
+
result = Array(@executables).first
|
1468
|
+
else
|
1469
|
+
result = nil
|
1510
1470
|
end
|
1471
|
+
result
|
1511
1472
|
end
|
1512
1473
|
|
1513
|
-
|
1474
|
+
undef_method :test_files
|
1475
|
+
def test_files
|
1514
1476
|
# Handle the possibility that we have @test_suite_file but not
|
1515
1477
|
# @test_files. This will happen when an old gem is loaded via
|
1516
1478
|
# YAML.
|
@@ -1525,7 +1487,8 @@ class Gem::Specification
|
|
1525
1487
|
end
|
1526
1488
|
end
|
1527
1489
|
|
1528
|
-
|
1490
|
+
undef_method :files
|
1491
|
+
def files
|
1529
1492
|
# DO NOT CHANGE TO ||= ! This is not a normal accessor. (yes, it sucks)
|
1530
1493
|
@files = [@files,
|
1531
1494
|
@test_files,
|
@@ -1562,4 +1525,14 @@ class Gem::Specification
|
|
1562
1525
|
def dependent_specs
|
1563
1526
|
runtime_dependencies.map { |dep| Gem.source_index.search dep, true }.flatten
|
1564
1527
|
end
|
1528
|
+
|
1529
|
+
extend Deprecate
|
1530
|
+
|
1531
|
+
deprecate :test_suite_file, :test_file, 2011, 10
|
1532
|
+
deprecate :test_suite_file=, :test_file=, 2011, 10
|
1533
|
+
deprecate :has_rdoc, :none, 2011, 10
|
1534
|
+
deprecate :has_rdoc?, :none, 2011, 10
|
1535
|
+
deprecate :has_rdoc=, :none, 2011, 10
|
1536
|
+
deprecate :default_executable, :none, 2011, 10
|
1537
|
+
deprecate :default_executable=, :none, 2011, 10
|
1565
1538
|
end
|