Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more
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.
# File rubygems/test_utilities.rb, line 99 def download spec, source_uri, install_dir = Gem.dir name = File.basename spec.cache_file path = File.join install_dir, "cache", name Gem.ensure_gem_subdirectories install_dir if source_uri =~ /^http/ then File.open(path, "wb") do |f| f.write fetch_path(File.join(source_uri, "gems", name)) end else FileUtils.cp source_uri, path end path end
# File rubygems/test_utilities.rb, line 116 def download_to_cache dependency found = Gem::SpecFetcher.fetcher.fetch dependency, true, true, dependency.prerelease? return if found.empty? spec, source_uri = found.first download spec, source_uri end
# File rubygems/test_utilities.rb, line 46 def fetch_path path, mtime = nil data = find_data(path) if data.respond_to?(:call) then data.call else if path.to_s =~ /gz$/ and not data.nil? and not data.empty? then data = Gem.gunzip data end data end end
# File rubygems/test_utilities.rb, line 84 def fetch_size(path) path = path.to_s @paths << path raise ArgumentError, 'need full URI' unless path =~ %r'^http://' unless @data.key? path then raise Gem::RemoteFetcher::FetchError.new("no data for #{path}", path) end data = @data[path] data.respond_to?(:call) ? data.call : data.length end
# File rubygems/test_utilities.rb, line 34 def find_data(path) path = path.to_s @paths << path raise ArgumentError, 'need full URI' unless path =~ %r'^https?://' unless @data.key? path then raise Gem::RemoteFetcher::FetchError.new("no data for #{path}", path) end @data[path] end
Thanks, FakeWeb!
# File rubygems/test_utilities.rb, line 61 def open_uri_or_path(path) data = find_data(path) body, code, msg = data response = Net::HTTPResponse.send(:response_class, code.to_s).new("1.0", code.to_s, msg) response.instance_variable_set(:@body, body) response.instance_variable_set(:@read, true) response end
# File rubygems/test_utilities.rb, line 71 def request(uri, request_class, last_modified = nil) data = find_data(uri) body, code, msg = data @last_request = request_class.new uri.request_uri yield @last_request if block_given? response = Net::HTTPResponse.send(:response_class, code.to_s).new("1.0", code.to_s, msg) response.instance_variable_set(:@body, body) response.instance_variable_set(:@read, true) response end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.