Module: Net::Gemini
- Defined in:
- lib/net/gemini.rb,
lib/net/gemini/error.rb,
lib/net/gemini/client.rb,
lib/net/gemini/request.rb,
lib/net/gemini/response.rb,
lib/net/gemini/client/ssl.rb,
lib/net/gemini/response/parser.rb
Overview
A Gemini client API for Ruby.
Net::Gemini provides a library which can be used to build Gemini user-agents. Net::Gemini is designed to work closely with URI.
Simple Examples
All examples assume you have loaded Net::Gemini with:
require 'net/gemini'
This will also require ‘uri’ so you don’t need to require it separately.
The Net::Gemini methods in the following section do not persist connections.
GET by URI
uri = URI('gemini://gemini.circumlunar.space/')
Net::Gemini.get(uri) # => String
GET with Dynamic Parameters
uri = URI('gemini://gus.guru/search')
uri.query = URI.encode_www_form('test')
res = Net::Gemini.get_response(uri)
puts res.body if res.body_permitted?
Response Data
res = Net::Gemini.get_response(URI('gemini://gemini.circumlunar.space/'))
# Status
puts res.status # => '20'
puts res.meta # => 'text/gemini; charset=UTF-8; lang=en'
# Headers
puts res.header.inspect
# => { status: '20', meta: 'text/gemini; charset=UTF-8',
mimetype: 'text/gemini', lang: 'en',
charset: 'utf-8', format: nil }
The lang, charset and format headers will only be provided in case of ‘text/*` mimetype, and only if body for 2* status codes.
# Body
puts res.body if res.body_permitted?
puts res.body(reflow_at: 85)
Following Redirection
The Client#fetch method, contrary to the Client#request one will try to automatically resolves redirection, leading you to the final destination.
u = URI('gemini://exemple.com/redirect')
res = Net::Gemini.start(u.host, u.port) do |g|
g.request(u)
end
puts "#{res.status} - #{res.}" # => '30 final/dest'
puts res.uri.to_s # => 'gemini://exemple.com/redirect'
u = URI('gemini://exemple.com/redirect')
res = Net::Gemini.start(u.host, u.port) do |g|
g.fetch(u)
end
puts "#{res.status} - #{res.}" # => '20 - text/gemini;'
puts res.uri.to_s # => 'gemini://exemple.com/final/dest'
Defined Under Namespace
Classes: BadRequest, BadResponse, Client, Error, Request, Response
Class Method Summary collapse
- .get(uri) ⇒ Object
- .get_response(uri) ⇒ Object
- .start(host_or_uri, port = nil) {|gem| ... } ⇒ Object
Class Method Details
.get(uri) ⇒ Object
81 82 83 |
# File 'lib/net/gemini/client.rb', line 81 def self.get(uri) get_response(uri).body end |
.get_response(uri) ⇒ Object
77 78 79 |
# File 'lib/net/gemini/client.rb', line 77 def self.get_response(uri) start(uri.host, uri.port) { |gem| gem.fetch(uri) } end |
.start(host_or_uri, port = nil) {|gem| ... } ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/net/gemini/client.rb', line 64 def self.start(host_or_uri, port = nil, &block) if host_or_uri.is_a? URI::Gemini host = host_or_uri.host port = host_or_uri.port else host = host_or_uri end gem = Client.new(host, port) return gem unless block yield gem end |