The X509
certificate store holds trusted CA certificates used to verify peer certificates.
The easiest way to create a useful certificate store is:
cert_store = OpenSSL::X509::Store.new cert_store.set_default_paths
This will use your system’s built-in certificates.
If your system does not have a default set of certificates you can obtain a set extracted from Mozilla CA certificate store by cURL maintainers here: curl.haxx.se/docs/caextract.html (You may wish to use the firefox-db2pem.sh script to extract the certificates from a local install to avoid man-in-the-middle attacks.)
After downloading or generating a cacert.pem from the above link you can create a certificate store from the pem file like this:
cert_store = OpenSSL::X509::Store.new cert_store.add_file 'cacert.pem'
The certificate store can be used with an SSLSocket like this:
ssl_context = OpenSSL::SSL::SSLContext.new ssl_context.verify_mode = OpenSSL::SSL::VERIFY_PEER ssl_context.cert_store = cert_store tcp_socket = TCPSocket.open 'example.com', 443 ssl_socket = OpenSSL::SSL::SSLSocket.new tcp_socket, ssl_context
Psych::JSON::TreeBuilder
is an event based AST builder. Events are sent to an instance of Psych::JSON::TreeBuilder
and a JSON
AST is constructed.
YAMLTree
builds a YAML
ast given a Ruby
object. For example:
builder = Psych::Visitors::YAMLTree.new builder << { :foo => 'bar' } builder.tree # => #<Psych::Nodes::Stream .. }
Predefined Keys
Raised when the data length recorded in the gzip file footer is not equivalent to the length of the actual uncompressed data.
Raised if you try to access a buffer slice which no longer references a valid memory range of the underlying source.
File-based session storage class.
Implements session storage as a flat file of ‘key=value’ values. This storage type only works directly with String
values; the user is responsible for converting other types to Strings when storing and from Strings when retrieving.
In-memory session storage class.
Implements session storage as a global in-memory hash. Session
data will only persist for as long as the Ruby
interpreter instance does.
Dummy session storage class.
Implements session storage place holder. No actual storage will be done.
PStore-based session storage class.
This builds upon the top-level PStore
class provided by the library file pstore.rb. Session
data is marshalled and stored in a file. File
locking and transaction services are provided.
Class for representing HTTP method POST:
require 'net/http' uri = URI('http://example.com') hostname = uri.hostname # => "example.com" uri.path = '/posts' req = Net::HTTP::Post.new(uri) # => #<Net::HTTP::Post POST> req.body = '{"title": "foo","body": "bar","userId": 1}' req.content_type = 'application/json' res = Net::HTTP.start(hostname) do |http| http.request(req) end
See Request Headers.
Properties:
Request body: yes.
Response body: yes.
Safe: no.
Idempotent: no.
Cacheable: yes.
Related:
Net::HTTP.post
: sends POST
request, returns response object.
Net::HTTP#post
: sends POST
request, returns response object.
Class for representing HTTP method TRACE:
require 'net/http' uri = URI('http://example.com') hostname = uri.hostname # => "example.com" req = Net::HTTP::Trace.new(uri) # => #<Net::HTTP::Trace TRACE> res = Net::HTTP.start(hostname) do |http| http.request(req) end
See Request Headers.
Properties:
Request body: no.
Response body: yes.
Safe: yes.
Idempotent: yes.
Cacheable: no.
Related:
Net::HTTP#trace
: sends TRACE
request, returns response object.
Class for representing WebDAV method PROPFIND:
require 'net/http' uri = URI('http://example.com') hostname = uri.hostname # => "example.com" req = Net::HTTP::Propfind.new(uri) # => #<Net::HTTP::Propfind PROPFIND> res = Net::HTTP.start(hostname) do |http| http.request(req) end
See Request Headers.
Related:
Net::HTTP#propfind
: sends PROPFIND
request, returns response object.
Tokens where state should be ignored used for :on_comment, :on_heredoc_end, :on_embexpr_end
Ignored newlines can occasionally have a LABEL state attached to them, so we compare the state differently here.
The :line tracepoint event gets fired whenever the Ruby
VM encounters an expression on a new line. The types of expressions that can trigger this event are:
if statements
unless statements
nodes that are children of statements lists
In order to keep track of the newlines, we have a list of offsets that come back from the parser. We assign these offsets to the first nodes that we find in the tree that are on those lines.
Note that the logic in this file should be kept in sync with the Java MarkNewlinesVisitor, since that visitor is responsible for marking the newlines for JRuby/TruffleRuby.
This file is autoloaded only when ‘mark_newlines!` is called, so the re-opening of the various nodes in this file will only be performed in that case. We do that to avoid storing the extra `@newline` instance variable on every node if we don’t need it.
An entry in a repository that will lazily reify its values when they are first accessed.
A field representing the start and end lines.
This class provides a compatibility layer between prism and Ripper
. It functions by parsing the entire tree first and then walking it and executing each of the Ripper
callbacks as it goes. To use this class, you treat ‘Prism::Translation::Ripper` effectively as you would treat the `Ripper` class.
Note that this class will serve the most common use cases, but Ripper’s API is extensive and undocumented. It relies on reporting the state of the parser at any given time. We do our best to replicate that here, but because it is a different architecture it is not possible to perfectly replicate the behavior of Ripper
.
The main known difference is that we may omit dispatching some events in some cases. This impacts the following events:
on_assign_error
on_comma
on_ignored_nl
on_ignored_sp
on_kw
on_label_end
on_lbrace
on_lbracket
on_lparen
on_nl
on_op
on_operator_ambiguous
on_rbrace
on_rbracket
on_rparen
on_semicolon
on_sp
on_symbeg
on_tstring_beg
on_tstring_end