Skip to content

Commit

Permalink
Add release notes and documentation.
Browse files Browse the repository at this point in the history
  • Loading branch information
ioquatix committed Dec 1, 2024
1 parent b0fc660 commit 49d0e60
Show file tree
Hide file tree
Showing 6 changed files with 100 additions and 64 deletions.
12 changes: 12 additions & 0 deletions bake.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# frozen_string_literal: true

# Released under the MIT License.
# Copyright, 2024, by Samuel Williams.

# Update the project documentation with the new version number.
#
# @parameter version [String] The new version number.
def after_gem_release_version_increment(version)
context["releases:update"].call(version)
context["utopia:project:readme:update"].call
end
1 change: 1 addition & 0 deletions gems.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
group :maintenance, optional: true do
gem "bake-modernize"
gem "bake-gem"
gem "bake-releases"

gem "utopia-project"
end
Expand Down
82 changes: 82 additions & 0 deletions guides/getting-started/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
# Getting Started

This guide explains how to use the `protocol-http2` gem to implement a basic HTTP/2 client.

## Installation

Add the gem to your project:

``` bash
$ bundle add protocol-http2
```

## Usage

This gem provides a low-level implementation of the HTTP/2 protocol. It is designed to be used in conjunction with other libraries to provide a complete HTTP/2 client or server. However, it is straight forward to give examples of how to use the library directly.

### Client

Here is a basic HTTP/2 client:

``` ruby
require 'async'
require 'async/io/stream'
require 'async/http/endpoint'
require 'protocol/http2/client'

Async do
endpoint = Async::HTTP::Endpoint.parse("https://www.google.com/search?q=kittens")

peer = endpoint.connect

puts "Connected to #{peer.inspect}"

# IO Buffering:
stream = Async::IO::Stream.new(peer)

framer = Protocol::HTTP2::Framer.new(stream)
client = Protocol::HTTP2::Client.new(framer)

puts "Sending connection preface..."
client.send_connection_preface

puts "Creating stream..."
stream = client.create_stream

headers = [
[":scheme", endpoint.scheme],
[":method", "GET"],
[":authority", "www.google.com"],
[":path", endpoint.path],
["accept", "*/*"],
]

puts "Sending request on stream id=#{stream.id} state=#{stream.state}..."
stream.send_headers(headers, Protocol::HTTP2::END_STREAM)

puts "Waiting for response..."
$count = 0

def stream.process_headers(frame)
headers = super
puts "Got response headers: #{headers} (#{frame.end_stream?})"
end

def stream.receive_data(frame)
data = super

$count += data.scan(/kittens/).count

puts "Got response data: #{data.bytesize}"
end

until stream.closed?
frame = client.read_frame
end

puts "Got #{$count} kittens!"

puts "Closing client..."
client.close
end
```
2 changes: 2 additions & 0 deletions guides/links.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
getting-started:
order: 1
65 changes: 2 additions & 63 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,70 +22,9 @@ Or install it yourself as:

## Usage

Here is a basic HTTP/2 client:
Please see the [project documentation](https://socketry.github.io/protocol-http2/) for more details.

``` ruby
require 'async'
require 'async/io/stream'
require 'async/http/endpoint'
require 'protocol/http2/client'

Async do
endpoint = Async::HTTP::Endpoint.parse("https://www.google.com/search?q=kittens")

peer = endpoint.connect

puts "Connected to #{peer.inspect}"

# IO Buffering...
stream = Async::IO::Stream.new(peer)

framer = Protocol::HTTP2::Framer.new(stream)
client = Protocol::HTTP2::Client.new(framer)

puts "Sending connection preface..."
client.send_connection_preface

puts "Creating stream..."
stream = client.create_stream

headers = [
[":scheme", endpoint.scheme],
[":method", "GET"],
[":authority", "www.google.com"],
[":path", endpoint.path],
["accept", "*/*"],
]

puts "Sending request on stream id=#{stream.id} state=#{stream.state}..."
stream.send_headers(headers, Protocol::HTTP2::END_STREAM)

puts "Waiting for response..."
$count = 0

def stream.process_headers(frame)
headers = super
puts "Got response headers: #{headers} (#{frame.end_stream?})"
end

def stream.receive_data(frame)
data = super

$count += data.scan(/kittens/).count

puts "Got response data: #{data.bytesize}"
end

until stream.closed?
frame = client.read_frame
end

puts "Got #{$count} kittens!"

puts "Closing client..."
client.close
end
```
- [Getting Started](https://socketry.github.io/protocol-http2/guides/getting-started/index) - This guide explains how to use the `protocol-http2` gem to implement a basic HTTP/2 client.

## Contributing

Expand Down
2 changes: 1 addition & 1 deletion releases.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Releases

## Unreleased
## v0.22.0

### Added Priority Update Frame and Stream Priority

Expand Down

0 comments on commit 49d0e60

Please sign in to comment.