| 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 70
70: def download spec, source_uri, install_dir = Gem.dir
71: name = "#{spec.full_name}.gem"
72: path = File.join(install_dir, 'cache', name)
73:
74: Gem.ensure_gem_subdirectories install_dir
75:
76: if source_uri =~ /^http/ then
77: File.open(path, "wb") do |f|
78: f.write fetch_path(File.join(source_uri, "gems", name))
79: end
80: else
81: FileUtils.cp source_uri, path
82: end
83:
84: path
85: end
# File lib/rubygems/test_utilities.rb, line 33
33: def fetch_path path, mtime = nil
34: path = path.to_s
35: @paths << path
36: raise ArgumentError, 'need full URI' unless path =~ %r'^http://'
37:
38: unless @data.key? path then
39: raise Gem::RemoteFetcher::FetchError.new("no data for #{path}", path)
40: end
41:
42: data = @data[path]
43:
44: if data.respond_to?(:call) then
45: data.call
46: else
47: if path.to_s =~ /gz$/ and not data.nil? and not data.empty? then
48: data = Gem.gunzip data
49: end
50:
51: data
52: end
53: end
# File lib/rubygems/test_utilities.rb, line 55
55: def fetch_size(path)
56: path = path.to_s
57: @paths << path
58:
59: raise ArgumentError, 'need full URI' unless path =~ %r'^http://'
60:
61: unless @data.key? path then
62: raise Gem::RemoteFetcher::FetchError.new("no data for #{path}", path)
63: end
64:
65: data = @data[path]
66:
67: data.respond_to?(:call) ? data.call : data.length
68: end