| Class | Gem::FakeFetcher |
| In: |
lib/rubygems/test_utilities.rb
|
| Parent: | Object |
A fake Gem::RemoteFetcher for use in tests or to avoid real live HTTP requests when testing code that uses RubyGems.
Example:
@fetcher = Gem::FakeFetcher.new
@fetcher.data['http://gems.example.com/yaml'] = source_index.to_yaml
Gem::RemoteFetcher.fetcher = @fetcher
# invoke RubyGems code
paths = @fetcher.paths
assert_equal 'http://gems.example.com/yaml', paths.shift
assert paths.empty?, paths.join(', ')
See RubyGems’ tests for more examples of FakeFetcher.
| data | [R] | |
| paths | [RW] |
# File lib/rubygems/test_utilities.rb, line 28
28: def initialize
29: @data = {}
30: @paths = []
31: end
# File lib/rubygems/test_utilities.rb, line 59
59: def download spec, source_uri, install_dir = Gem.dir
60: name = "#{spec.full_name}.gem"
61: path = File.join(install_dir, 'cache', name)
62:
63: Gem.ensure_gem_subdirectories install_dir
64:
65: if source_uri =~ /^http/ then
66: File.open(path, "wb") do |f|
67: f.write fetch_path(File.join(source_uri, "gems", name))
68: end
69: else
70: FileUtils.cp source_uri, path
71: end
72:
73: path
74: end
# File lib/rubygems/test_utilities.rb, line 33
33: def fetch_path(path)
34: path = path.to_s
35: @paths << path
36: raise ArgumentError, 'need full URI' unless path =~ %r'^http://'
37: data = @data[path]
38:
39: if data.nil? then
40: raise Gem::RemoteFetcher::FetchError.new('no data', path)
41: end
42:
43: data.respond_to?(:call) ? data.call : data
44: end
# File lib/rubygems/test_utilities.rb, line 46
46: def fetch_size(path)
47: path = path.to_s
48: @paths << path
49: raise ArgumentError, 'need full URI' unless path =~ %r'^http://'
50: data = @data[path]
51:
52: if data.nil? then
53: raise Gem::RemoteFetcher::FetchError.new("no data for #{path}", nil)
54: end
55:
56: data.respond_to?(:call) ? data.call : data.length
57: end