cocoapods 0.17.0.rc3 → 0.17.0.rc4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 74228860bfe13ef84dd8e60454d29c94236d5bb0
4
- data.tar.gz: fddc172441d9b378abe7ac8b1ab81df832b467d3
3
+ metadata.gz: 968e618e17077f1e02347a81b681117a6b4410b3
4
+ data.tar.gz: cf0e4cd10cc63cbae184f22762edd7b3878e5622
5
5
  SHA512:
6
- metadata.gz: a5b7857acea13393645d5721c05a715c12e001a79d3abc3731425ea5c0b24f0485f4164eebdabbc76c76512841bba5941bfb804da7d52fa7d1ce47f2bb16a2da
7
- data.tar.gz: fb80a8e7dd50bd800e95959292b328304bdf4337b959814d0da03f421fa8fff932affa8c376aae14fdd606a61a5aa3734082e2cf73751a69725ce1e147ca6396
6
+ metadata.gz: 8849e6833fcbce9561184db443eb3e1dab6d9cbc6ac453f6c2e8f7fba53c9ecc73415308052814fb1bae3f660159c35cc88f495e8eed5ff53c6512301bacd9ab
7
+ data.tar.gz: 41c7fb584d7f9bc34b23c61141f4d633f543001ae21a78bc6cfd0e915db13a14b84e6219a4d9b5815d117f3c38adc9324001c552b4b9c18850d7ee163beb11d5
@@ -1,5 +1,30 @@
1
+ ## 0.17.0.rc4
2
+ [CocoaPods](https://github.com/CocoaPods/CocoaPods/compare/0.17.0.rc3...0.17.0.rc4
3
+
4
+ ###### Bug fixes
5
+
6
+ - Restored compatibility with `Podfile::TargetDefinition#copy_resources_script_name`
7
+ in the Podfile hooks.
8
+ - Updated copy resources script so that it will use base internationalization
9
+ [#846](https://github.com/CocoaPods/CocoaPods/issues/846)
10
+ - Robustness against an empty configuration file.
11
+ - Fixed a crash with `pod push`
12
+ [#848](https://github.com/CocoaPods/CocoaPods/issues/848)
13
+ - Fixed an issue which lead to the creation of a Pods project which would
14
+ crash Xcode.
15
+ [#854](https://github.com/CocoaPods/CocoaPods/issues/854)
16
+ - Fixed a crash related to a `PBXVariantGroup` present in the frameworks build
17
+ phase of client targets.
18
+ [#859](https://github.com/CocoaPods/CocoaPods/issues/859)
19
+
20
+
21
+ ###### Ancillary enhancements
22
+
23
+ - The `podspec` option of the `pod` directive of the Podfile DSL now accepts
24
+ folders.
25
+
1
26
  ## 0.17.0.rc3
2
- [CocoaPods](https://github.com/CocoaPods/CocoaPods/compare/0.17.0.rc1...0.17.0.rc2
27
+ [CocoaPods](https://github.com/CocoaPods/CocoaPods/compare/0.17.0.rc2...0.17.0.rc3
3
28
  • [Xcodeproj](https://github.com/CocoaPods/Xcodeproj/compare/0.5.0...0.5.1))
4
29
 
5
30
  ###### Bug fixes
@@ -120,7 +120,7 @@ module Pod
120
120
  UI.puts " - #{message}"
121
121
 
122
122
  FileUtils.mkdir_p(output_path)
123
- FileUtils.cp(Pathname.new(spec.name+'.podspec'), output_path)
123
+ FileUtils.cp(spec_file, output_path)
124
124
  Dir.chdir(repo_dir) do
125
125
  git!("add #{spec.name}")
126
126
  git!("commit --no-verify -m '#{message}'")
@@ -197,7 +197,7 @@ module Pod
197
197
  self.arguments = '[ NAME ]'
198
198
 
199
199
  def self.options
200
- [["--show-all", "Pick which spec to edit from all avaliable versions of the given podspec"]].concat(super)
200
+ [["--show-all", "Pick which spec to edit from all available versions of the given podspec"]].concat(super)
201
201
  end
202
202
 
203
203
  def initialize(argv)
@@ -450,11 +450,9 @@ module Pod
450
450
  return <<-SPEC
451
451
  #
452
452
  # Be sure to run `pod spec lint #{data[:name]}.podspec' to ensure this is a
453
- # valid spec.
453
+ # valid spec and remove all comments before submitting the spec.
454
454
  #
455
- # Remove all comments before submitting the spec. Optional attributes are commented.
456
- #
457
- # For details see: https://github.com/CocoaPods/CocoaPods/wiki/The-podspec-format
455
+ # To learn more about the attributes see http://docs.cocoapods.org/specification.html
458
456
  #
459
457
  Pod::Spec.new do |s|
460
458
  s.name = "#{data[:name]}"
@@ -467,25 +465,12 @@ Pod::Spec.new do |s|
467
465
  # * Don't worry about the indent, we strip it!
468
466
  # DESC
469
467
  s.homepage = "#{data[:homepage]}"
468
+ # s.screenshots = "www.example.com/screenshots_1", "www.example.com/screenshots_2"
470
469
 
471
470
  # Specify the license type. CocoaPods detects automatically the license file if it is named
472
471
  # 'LICENCE*.*' or 'LICENSE*.*', however if the name is different, specify it.
473
472
  s.license = 'MIT (example)'
474
473
  # s.license = { :type => 'MIT (example)', :file => 'FILE_LICENSE' }
475
- #
476
- # Only if no dedicated file is available include the full text of the license.
477
- #
478
- # s.license = {
479
- # :type => 'MIT (example)',
480
- # :text => <<-LICENSE
481
- # Copyright (C) <year> <copyright holders>
482
-
483
- # All rights reserved.
484
-
485
- # Redistribution and use in source and binary forms, with or without
486
- # ...
487
- # LICENSE
488
- # }
489
474
 
490
475
  # Specify the authors of the library, with email addresses. You can often find
491
476
  # the email addresses of the authors by using the SCM log. E.g. $ git log
@@ -500,14 +485,12 @@ Pod::Spec.new do |s|
500
485
  # Specify the location from where the source should be retrieved.
501
486
  #
502
487
  s.source = { :git => "#{data[:source_url]}", #{data[:ref_type]} => "#{data[:ref]}" }
503
- # s.source = { :svn => 'http://EXAMPLE/#{data[:name]}/tags/1.0.0' }
504
- # s.source = { :hg => 'http://EXAMPLE/#{data[:name]}', :revision => '1.0.0' }
488
+
505
489
 
506
490
  # If this Pod runs only on iOS or OS X, then specify the platform and
507
491
  # the deployment target.
508
492
  #
509
493
  # s.platform = :ios, '5.0'
510
- # s.platform = :ios
511
494
 
512
495
  # ――― MULTI-PLATFORM VALUES ――――――――――――――――――――――――――――――――――――――――――――――――― #
513
496
 
@@ -521,10 +504,6 @@ Pod::Spec.new do |s|
521
504
  # added to the Pods project. If the pattern is a directory then the
522
505
  # path will automatically have '*.{h,m,mm,c,cpp}' appended.
523
506
  #
524
- # Alternatively, you can use the FileList class for even more control
525
- # over the selected files.
526
- # (See http://rake.rubyforge.org/classes/Rake/FileList.html.)
527
- #
528
507
  s.source_files = 'Classes', 'Classes/**/*.{h,m}'
529
508
 
530
509
  # A list of file patterns which select the header files that should be
@@ -567,7 +546,7 @@ Pod::Spec.new do |s|
567
546
 
568
547
  # If this Pod uses ARC, specify it like so.
569
548
  #
570
- # s.requires_arc = true
549
+ s.requires_arc = true
571
550
 
572
551
  # If you need to specify any other build settings, add them to the
573
552
  # xcconfig hash.
@@ -176,6 +176,7 @@ module Pod
176
176
  # @return [void]
177
177
  #
178
178
  def configure_with(values_by_key)
179
+ return unless values_by_key
179
180
  values_by_key.each do |key, value|
180
181
  self.instance_variable_set("@#{key}", value)
181
182
  end
@@ -268,10 +268,9 @@ module Pod
268
268
  #
269
269
  def fetch(sandbox)
270
270
  UI.titled_section("Fetching podspec for `#{name}` #{description}", { :verbose_prefix => "-> " }) do
271
- path = params[:podspec]
272
- path = Pathname.new(path).expand_path if path.to_s.start_with?("~")
271
+
273
272
  require 'open-uri'
274
- open(path) { |io| store_podspec(sandbox, io.read) }
273
+ open(podspec_uri) { |io| store_podspec(sandbox, io.read) }
275
274
  end
276
275
  end
277
276
 
@@ -280,6 +279,30 @@ module Pod
280
279
  def description
281
280
  "from `#{params[:podspec]}`"
282
281
  end
282
+
283
+ #--------------------------------------#
284
+
285
+ private
286
+
287
+ # @!group Helpers
288
+
289
+ # @return [String] The uri of the podspec appending the name of the file
290
+ # and expanding it if necessary.
291
+ #
292
+ # @note If the declared path is expanded only if the represents a path
293
+ # relative to the file system.
294
+ #
295
+ def podspec_uri
296
+ declared_path = params[:podspec].to_s
297
+ if declared_path.match(%r{^.+://})
298
+ declared_path
299
+ else
300
+ path_with_ext = File.extname(declared_path) == '.podspec' ? declared_path : "#{declared_path}/#{name}.podspec"
301
+ podfile_dir = File.dirname(podfile_path || '')
302
+ absolute_path = File.expand_path(path_with_ext, podfile_dir)
303
+ absolute_path
304
+ end
305
+ end
283
306
  end
284
307
 
285
308
  #-------------------------------------------------------------------------#
@@ -295,7 +318,7 @@ module Pod
295
318
  #
296
319
  def fetch(sandbox)
297
320
  UI.titled_section("Fetching podspec for `#{name}` #{description}", { :verbose_prefix => "-> " }) do
298
- podspec = pod_spec_path
321
+ podspec = podspec_path
299
322
  store_podspec(sandbox, podspec)
300
323
  sandbox.store_local_path(name, podspec.dirname)
301
324
  end
@@ -315,7 +338,7 @@ module Pod
315
338
 
316
339
  # @return [Pathname] the path of the podspec.
317
340
  #
318
- def pod_spec_path
341
+ def podspec_path
319
342
  declared_path = params[:local].to_s
320
343
  path_with_ext = File.extname(declared_path) == '.podspec' ? declared_path : "#{declared_path}/#{name}.podspec"
321
344
  podfile_dir = File.dirname(podfile_path || '')
@@ -328,5 +351,8 @@ module Pod
328
351
  pathname
329
352
  end
330
353
  end
354
+
355
+ #-------------------------------------------------------------------------#
356
+
331
357
  end
332
358
  end
@@ -2,6 +2,6 @@ module Pod
2
2
 
3
3
  # The version of the cocoapods command line tool.
4
4
  #
5
- VERSION = '0.17.0.rc3' unless defined? Pod::VERSION
5
+ VERSION = '0.17.0.rc4' unless defined? Pod::VERSION
6
6
  end
7
7
 
@@ -8,12 +8,12 @@ install_resource()
8
8
  {
9
9
  case $1 in
10
10
  *\.storyboard)
11
- echo "ibtool --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\"$1\\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}"
12
- ibtool --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\"$1\\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}"
11
+ echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\"$1\\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}"
12
+ ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\"$1\\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}"
13
13
  ;;
14
14
  *\.xib)
15
- echo "ibtool --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\"$1\\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}"
16
- ibtool --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\"$1\\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}"
15
+ echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\"$1\\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}"
16
+ ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\"$1\\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}"
17
17
  ;;
18
18
  *.framework)
19
19
  echo "rsync -rp ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
@@ -8,6 +8,15 @@ module Pod
8
8
  end
9
9
  end
10
10
 
11
+ class Podfile::TargetDefinition
12
+ def copy_resources_script_name
13
+ UI.warn "TargetDefinition#copy_resources_script_name is deprecated. " \
14
+ "The value is accessible directly from the representation of the " \
15
+ "library using the #copy_resources_script_path method."
16
+ Config.instance.sandbox.root + "#{label}-resources.sh"
17
+ end
18
+ end
19
+
11
20
  module Hooks
12
21
 
13
22
  # The installer representation to pass to the hooks.
@@ -26,13 +26,14 @@ module Pod
26
26
 
27
27
  # @return [Pathname] The path of the prefix_header
28
28
  #
29
- def prefix_header_filename
29
+ def prefix_header_path
30
30
  library.prefix_header_path
31
31
  end
32
+ alias :prefix_header_filename :prefix_header_path
32
33
 
33
34
  # @return [Pathname] The path of the script used to copy the resources.
34
35
  #
35
- def copy_resources_script_name
36
+ def copy_resources_script_path
36
37
  library.copy_resources_script_path
37
38
  end
38
39
 
@@ -367,16 +367,53 @@ module Pod
367
367
  installed_specs.each do |spec|
368
368
  executed = false
369
369
  libraries_using_spec(spec).each do |lib|
370
- executed ||= spec.pre_install!(pod_rep(spec.root.name), library_rep(lib))
370
+ lib_representation = library_rep(lib)
371
+ executed ||= run_spec_pre_install_hook(spec, lib_representation)
371
372
  end
372
373
  UI.message "- #{spec.name}" if executed
373
374
  end
374
375
 
375
- executed = @podfile.pre_install!(installer_rep)
376
+ executed = run_podfile_pre_install_hook
376
377
  UI.message "- Podfile" if executed
377
378
  end
378
379
  end
379
380
 
381
+ # Runs the pre install hook of the given specification with the given
382
+ # library representation.
383
+ #
384
+ # @param [Specification] spec
385
+ # The spec for which the pre install hook should be run.
386
+ #
387
+ # @param [Hooks::LibraryRepresentation] lib_representation
388
+ # The library representation to be passed as an argument to the
389
+ # hook.
390
+ #
391
+ # @raise Raises an informative if the hooks raises.
392
+ #
393
+ # @return [Bool] Whether the hook was run.
394
+ #
395
+ def run_spec_pre_install_hook(spec, lib_representation)
396
+ spec.pre_install!(pod_rep(spec.root.name), lib_representation)
397
+ rescue => e
398
+ raise Informative, "The pre install hook of #{spec} is not " \
399
+ "compatible with this version of CocoaPods." \
400
+ "\n\n#{e.message}\n\n#{e.backtrace * "\n"}"
401
+ end
402
+
403
+ # Runs the pre install hook of the Podfile
404
+ #
405
+ # @raise Raises an informative if the hooks raises.
406
+ #
407
+ # @return [Bool] Whether the hook was run.
408
+ #
409
+ def run_podfile_pre_install_hook
410
+ podfile.pre_install!(installer_rep)
411
+ rescue => e
412
+ raise Informative, "The pre install hook of the Podfile is not " \
413
+ "compatible with this version of CocoaPods." \
414
+ "\n\n#{e.message}\n\n#{e.backtrace * "\n"}"
415
+ end
416
+
380
417
  # Runs the post install hooks of the installed specs and of the Podfile.
381
418
  #
382
419
  # @note Post install hooks run _before_ saving of project, so that they
@@ -389,15 +426,53 @@ module Pod
389
426
  installed_specs.each do |spec|
390
427
  executed = false
391
428
  libraries_using_spec(spec).each do |lib|
392
- executed ||= spec.post_install!(library_rep(lib))
429
+ lib_representation = library_rep(lib)
430
+ executed ||= run_spec_post_install_hook(spec, lib_representation)
393
431
  end
394
432
  UI.message "- #{spec.name}" if executed
395
433
  end
396
- executed = @podfile.post_install!(installer_rep)
434
+ executed = run_podfile_post_install_hook
397
435
  UI.message "- Podfile" if executed
398
436
  end
399
437
  end
400
438
 
439
+
440
+ # Runs the post install hook of the given specification with the given
441
+ # library representation.
442
+ #
443
+ # @param [Specification] spec
444
+ # The spec for which the post install hook should be run.
445
+ #
446
+ # @param [Hooks::LibraryRepresentation] lib_representation
447
+ # The library representation to be passed as an argument to the
448
+ # hook.
449
+ #
450
+ # @raise Raises an informative if the hooks raises.
451
+ #
452
+ # @return [Bool] Whether the hook was run.
453
+ #
454
+ def run_spec_post_install_hook(spec, lib_representation)
455
+ spec.post_install!(lib_representation)
456
+ rescue => e
457
+ raise Informative, "The post install hook of #{spec} is not " \
458
+ "compatible with this version of CocoaPods." \
459
+ "\n\n#{e.message}\n\n#{e.backtrace * "\n"}"
460
+ end
461
+
462
+ # Runs the post install hook of the Podfile
463
+ #
464
+ # @raise Raises an informative if the hooks raises.
465
+ #
466
+ # @return [Bool] Whether the hook was run.
467
+ #
468
+ def run_podfile_post_install_hook
469
+ podfile.post_install!(installer_rep)
470
+ rescue => e
471
+ raise Informative, "The post install hook of the Podfile is not " \
472
+ "compatible with this version of CocoaPods." \
473
+ "\n\n#{e.message}\n\n#{e.backtrace * "\n"}"
474
+ end
475
+
401
476
  #-------------------------------------------------------------------------#
402
477
 
403
478
  public
@@ -55,8 +55,10 @@ module Pod
55
55
  #
56
56
  # @note The `PODS_HEADERS_SEARCH_PATHS` overrides the xcconfig.
57
57
  #
58
- # @todo Add integration test for build configurations and don't add the
59
- # build configurations to the project if they are not needed.
58
+ # @todo CocoaPods 0.16 used to add the build configurations to the build
59
+ # configuration list of the project (`root object`) as well with
60
+ # an empty build settings. This behaviour was changed in 0.17.
61
+ # Restore if needed.
60
62
  #
61
63
  # @return [void]
62
64
  #
@@ -77,14 +79,13 @@ module Pod
77
79
  @target.build_settings('Debug').merge!(settings)
78
80
  @target.build_settings('Release').merge!(settings)
79
81
 
80
- library.user_build_configurations.each do |lib_name, type|
81
- unless @target.build_configurations.map(&:name).include?(lib_name)
82
+ library.user_build_configurations.each do |bc_name, type|
83
+ unless @target.build_configurations.map(&:name).include?(bc_name)
82
84
  build_config = project.new(Xcodeproj::Project::XCBuildConfiguration)
83
- build_config.name = lib_name
85
+ build_config.name = bc_name
84
86
  settings = @target.build_settings(type.to_s.capitalize)
85
87
  build_config.build_settings = settings
86
88
  target.build_configurations << build_config
87
- project.build_configurations << build_config
88
89
  end
89
90
  end
90
91
 
@@ -52,7 +52,7 @@ module Pod
52
52
  non_integrated = targets.reject do |target|
53
53
  target.frameworks_build_phase.files.any? do |build_file|
54
54
  file_ref = build_file.file_ref
55
- !file_ref.proxy? && file_ref.display_name == library.product_name
55
+ file_ref.isa == 'PBXFileReference' && file_ref.display_name == library.product_name
56
56
  end
57
57
  end
58
58
  @targets = non_integrated
@@ -64,9 +64,9 @@ EOS
64
64
  ### Podfile
65
65
 
66
66
  ```ruby
67
- #{Config.instance.podfile_path.read.strip}
67
+ #{Config.instance.podfile_path.read.strip}
68
68
  ```
69
- EOS
69
+ EOS
70
70
  end
71
71
 
72
72
  def error_from_podfile(error)
@@ -62,23 +62,20 @@ module Pod
62
62
  end
63
63
 
64
64
  perform_linting
65
-
66
- # begin
67
- if spec
68
- check_repo_path if repo_path
69
- perform_extensive_analysis unless quick
70
- end
71
- # rescue Exception => e
72
- # error "The specification is malformed and crashed the linter."
73
- # end
65
+ check_repo_path if spec && repo_path
66
+ perform_extensive_analysis if spec && !quick
74
67
 
75
68
  unless disable_ui_output
76
- UI.puts " -> ".send(result_color) << (spec ? spec.name : file.basename.to_s)
69
+ UI.puts " -> ".send(result_color) << (spec ? spec.to_s : file.basename.to_s)
77
70
  print_results
78
71
  end
79
72
  validated?
80
73
  end
81
74
 
75
+ # Prints the result of the validation to the user.
76
+ #
77
+ # @return [void]
78
+ #
82
79
  def print_results
83
80
  results.each do |result|
84
81
  if result.platforms == [:ios]
@@ -87,7 +84,7 @@ module Pod
87
84
  platform_message = "[OSX] "
88
85
  end
89
86
 
90
- case result.type
87
+ case result.type
91
88
  when :error then type = "ERROR"
92
89
  when :warning then type = "WARN"
93
90
  when :note then type = "NOTE"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocoapods
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.0.rc3
4
+ version: 0.17.0.rc4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eloy Duran
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-09 00:00:00.000000000 Z
12
+ date: 2013-03-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cocoapods-core
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - '='
19
19
  - !ruby/object:Gem::Version
20
- version: 0.17.0.rc3
20
+ version: 0.17.0.rc4
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - '='
26
26
  - !ruby/object:Gem::Version
27
- version: 0.17.0.rc3
27
+ version: 0.17.0.rc4
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: claide
30
30
  requirement: !ruby/object:Gem::Requirement