1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
# Net::Hippie
[](https://rubygems.org/gems/net-hippie)
[)](https://github.com/xlgmokha/net-hippie/actions)
`Net::Hippie` is a light weight wrapper around `net/http` that defaults to
sending `JSON` messages.
## Installation
Add this line to your application's Gemfile:
```ruby
gem 'net-hippie'
```
And then execute:
$ bundle
Or install it yourself as:
$ gem install net-hippie
## Usage
```ruby
require 'net/hippie'
Net::Hippie.logger = Logger.new(STDERR)
headers = {
'Accept' => 'application/vnd.haveibeenpwned.v2+json'
}
uri = 'https://haveibeenpwned.com/api/breaches'
response = Net::Hippie.get(uri, headers: headers)
puts JSON.parse(response.body)
```
```ruby
response = Net::Hippie.post(
'https://example.org',
body: { name: 'hippie' }
)
puts JSON.parse(response.body)
```
Net::Hippie also supports TLS with client authentication.
```ruby
client = Net::Hippie::Client.new(
certificate: ENV['CLIENT_CERTFICIATE'],
key: ENV['CLIENT_KEY']
)
```
If your private key is encrypted you may include a passphrase to decrypt it.
```ruby
client = Net::Hippie::Client.new(
certificate: ENV['CLIENT_CERTFICIATE'],
key: ENV['CLIENT_KEY'],
passphrase: ENV['CLIENT_KEY_PASSPHRASE']
)
```
To disable logging you will need to override the default logger.
```ruby
client = Net::Hippie::Client.new(logger: nil)
```
### Basic Auth
```ruby
Net::Hippie.get(
'https://www.example.org',
headers: {
'Authorization' => Net::Hippie.basic_auth('username', 'password')
}
)
```
### Bearer Auth
```ruby
headers = { 'Authorization' => Net::Hippie.bearer_auth('token') }
Net::Hippie.get('https://www.example.org', headers: headers)
```
### Streaming Responses
Net::Hippie supports streaming responses by passing a block that accepts the response object:
```ruby
Net::Hippie.post('https://api.example.com/stream', body: { prompt: 'Hello' }) do |response|
response.read_body do |chunk|
print chunk
end
end
```
This is useful for Server-Sent Events (SSE) or other streaming APIs:
```ruby
client = Net::Hippie::Client.new
client.post('https://api.openai.com/v1/chat/completions',
headers: {
'Authorization' => Net::Hippie.bearer_auth(ENV['OPENAI_API_KEY']),
'Content-Type' => 'application/json'
},
body: { model: 'gpt-4', messages: [{ role: 'user', content: 'Hi' }], stream: true }
) do |response|
buffer = ""
response.read_body do |chunk|
buffer += chunk
while (line = buffer.slice!(/.*\n/))
next if line.strip.empty?
puts line if line.start_with?('data: ')
end
end
end
```
## Development
After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/test` to run the tests.
You can also run `bin/console` for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run `bundle exec rake install`.
To release a new version, update the version number in `version.rb`,
and then run `bin/shipit`, which will create a git tag for the version,
push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
## Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/xlgmokha/net-hippie.
## License
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|