net-hippie 1.2.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +1 -1
- data/.rubocop.yml +7 -1
- data/CHANGELOG.md +20 -2
- data/README.md +34 -0
- data/lib/net/hippie/client.rb +17 -7
- data/lib/net/hippie/connection.rb +6 -2
- data/lib/net/hippie/version.rb +1 -1
- data/net-hippie.gemspec +5 -1
- metadata +60 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e3fdff6728d13d3fece5e05908cc04e9c0999909ab392f73c9dc67a3203bbfb6
|
4
|
+
data.tar.gz: e3e94c49e148b6931b543b011cf10da959d36d6b8f0f6b2dd1f4620e5ff21521
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1f1ec4190b76c30c45efa6c00198326eb08f4e80280557dc42a6afb3c70166e80e624986ac14823f1d3f6a24ba16afb923f5ead14420fd34fdc5f88620f82a90
|
7
|
+
data.tar.gz: 0331df5f99e4b75ba58185c9dbba971e97f1233f3c0625dc0d7a6948e41cd2b3cc63bebeb4c7bba08767c677a72a1e2e3aee6df2d45afa54c2b0701096a97dc4
|
data/.github/workflows/ci.yml
CHANGED
data/.rubocop.yml
CHANGED
@@ -6,7 +6,7 @@ AllCops:
|
|
6
6
|
- 'tmp/**/*'
|
7
7
|
- 'vendor/**/*'
|
8
8
|
NewCops: enable
|
9
|
-
TargetRubyVersion: 2
|
9
|
+
TargetRubyVersion: 3.2
|
10
10
|
|
11
11
|
Gemspec/DevelopmentDependencies:
|
12
12
|
EnforcedStyle: gemspec
|
@@ -14,5 +14,11 @@ Gemspec/DevelopmentDependencies:
|
|
14
14
|
Layout/ParameterAlignment:
|
15
15
|
EnforcedStyle: with_fixed_indentation
|
16
16
|
|
17
|
+
Naming/BlockForwarding:
|
18
|
+
Enabled: false
|
19
|
+
|
17
20
|
Naming/RescuedExceptionsVariableName:
|
18
21
|
PreferredName: error
|
22
|
+
|
23
|
+
Style/ArgumentsForwarding:
|
24
|
+
Enabled: false
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Version 1.
|
1
|
+
Version 1.3.0
|
2
2
|
|
3
3
|
# Changelog
|
4
4
|
All notable changes to this project will be documented in this file.
|
@@ -7,6 +7,22 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
7
7
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
8
8
|
|
9
9
|
## [Unreleased]
|
10
|
+
|
11
|
+
## [1.4.0] - 2025-10-08
|
12
|
+
### Added
|
13
|
+
- Streaming response support via block parameter
|
14
|
+
- Backward compatible with existing block API (arity-based detection)
|
15
|
+
|
16
|
+
## [1.3.0] - 2025-04-30
|
17
|
+
### Changed
|
18
|
+
- Ruby 2.3+ required
|
19
|
+
|
20
|
+
### Fixed
|
21
|
+
- Add explicit dependency on `base64` gem
|
22
|
+
- Add explicit dependency on `json` gem
|
23
|
+
- Add explicit dependency on `net-http` gem
|
24
|
+
- Add explicit dependency on `openssl` gem
|
25
|
+
|
10
26
|
## [1.2.0] - 2024-12-05
|
11
27
|
### Changed
|
12
28
|
- Disable logger by default
|
@@ -84,7 +100,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
84
100
|
- with\_retry.
|
85
101
|
- authorization header helpers
|
86
102
|
|
87
|
-
[Unreleased]: https://github.com/xlgmokha/net-hippie/compare/v1.
|
103
|
+
[Unreleased]: https://github.com/xlgmokha/net-hippie/compare/v1.4.0...HEAD
|
104
|
+
[1.4.0]: https://github.com/xlgmokha/net-hippie/compare/v1.3.0...v1.4.0
|
105
|
+
[1.3.0]: https://github.com/xlgmokha/net-hippie/compare/v1.2.0...v1.3.0
|
88
106
|
[1.2.0]: https://github.com/xlgmokha/net-hippie/compare/v1.1.1...v1.2.0
|
89
107
|
[1.1.1]: https://github.com/xlgmokha/net-hippie/compare/v1.1.0...v1.1.1
|
90
108
|
[1.1.0]: https://github.com/xlgmokha/net-hippie/compare/v1.0.1...v1.1.0
|
data/README.md
CHANGED
@@ -90,6 +90,40 @@ headers = { 'Authorization' => Net::Hippie.bearer_auth('token') }
|
|
90
90
|
Net::Hippie.get('https://www.example.org', headers: headers)
|
91
91
|
```
|
92
92
|
|
93
|
+
### Streaming Responses
|
94
|
+
|
95
|
+
Net::Hippie supports streaming responses by passing a block that accepts the response object:
|
96
|
+
|
97
|
+
```ruby
|
98
|
+
Net::Hippie.post('https://api.example.com/stream', body: { prompt: 'Hello' }) do |response|
|
99
|
+
response.read_body do |chunk|
|
100
|
+
print chunk
|
101
|
+
end
|
102
|
+
end
|
103
|
+
```
|
104
|
+
|
105
|
+
This is useful for Server-Sent Events (SSE) or other streaming APIs:
|
106
|
+
|
107
|
+
```ruby
|
108
|
+
client = Net::Hippie::Client.new
|
109
|
+
client.post('https://api.openai.com/v1/chat/completions',
|
110
|
+
headers: {
|
111
|
+
'Authorization' => Net::Hippie.bearer_auth(ENV['OPENAI_API_KEY']),
|
112
|
+
'Content-Type' => 'application/json'
|
113
|
+
},
|
114
|
+
body: { model: 'gpt-4', messages: [{ role: 'user', content: 'Hi' }], stream: true }
|
115
|
+
) do |response|
|
116
|
+
buffer = ""
|
117
|
+
response.read_body do |chunk|
|
118
|
+
buffer += chunk
|
119
|
+
while (line = buffer.slice!(/.*\n/))
|
120
|
+
next if line.strip.empty?
|
121
|
+
puts line if line.start_with?('data: ')
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
```
|
126
|
+
|
93
127
|
## Development
|
94
128
|
|
95
129
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/test` to run the tests.
|
data/lib/net/hippie/client.rb
CHANGED
@@ -26,14 +26,10 @@ module Net
|
|
26
26
|
|
27
27
|
def execute(uri, request, limit: follow_redirects, &block)
|
28
28
|
connection = connection_for(uri)
|
29
|
+
return execute_with_block(connection, request, &block) if block_given?
|
30
|
+
|
29
31
|
response = connection.run(request)
|
30
|
-
|
31
|
-
url = connection.build_url_for(response['location'])
|
32
|
-
request = request_for(Net::HTTP::Get, url)
|
33
|
-
execute(url, request, limit: limit - 1, &block)
|
34
|
-
else
|
35
|
-
block_given? ? yield(request, response) : response
|
36
|
-
end
|
32
|
+
follow_redirect?(response, limit) ? follow_redirect(connection, response, limit) : response
|
37
33
|
end
|
38
34
|
|
39
35
|
def get(uri, headers: {}, body: {}, &block)
|
@@ -78,6 +74,20 @@ module Net
|
|
78
74
|
|
79
75
|
attr_reader :default_headers
|
80
76
|
|
77
|
+
def execute_with_block(connection, request, &block)
|
78
|
+
block.arity == 2 ? yield(request, connection.run(request)) : connection.run(request, &block)
|
79
|
+
end
|
80
|
+
|
81
|
+
def follow_redirect?(response, limit)
|
82
|
+
limit.positive? && response.is_a?(Net::HTTPRedirection)
|
83
|
+
end
|
84
|
+
|
85
|
+
def follow_redirect(connection, response, limit)
|
86
|
+
url = connection.build_url_for(response['location'])
|
87
|
+
request = request_for(Net::HTTP::Get, url)
|
88
|
+
execute(url, request, limit: limit - 1)
|
89
|
+
end
|
90
|
+
|
81
91
|
def attempt(attempt, max)
|
82
92
|
yield
|
83
93
|
rescue *CONNECTION_ERRORS => error
|
data/lib/net/hippie/version.rb
CHANGED
data/net-hippie.gemspec
CHANGED
@@ -25,9 +25,13 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.bindir = 'exe'
|
26
26
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
27
27
|
spec.require_paths = ['lib']
|
28
|
-
spec.required_ruby_version = Gem::Requirement.new('>= 2.
|
28
|
+
spec.required_ruby_version = Gem::Requirement.new('>= 3.2.0')
|
29
29
|
|
30
|
+
spec.add_dependency 'base64', '~> 0.1'
|
31
|
+
spec.add_dependency 'json', '~> 2.0'
|
30
32
|
spec.add_dependency 'logger', '~> 1.0'
|
33
|
+
spec.add_dependency 'net-http', '~> 0.6'
|
34
|
+
spec.add_dependency 'openssl', '~> 3.0'
|
31
35
|
spec.add_development_dependency 'minitest', '~> 5.0'
|
32
36
|
spec.add_development_dependency 'rake', '~> 13.0'
|
33
37
|
spec.add_development_dependency 'rubocop', '~> 1.9'
|
metadata
CHANGED
@@ -1,15 +1,42 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: net-hippie
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- mo
|
8
|
-
autorequire:
|
9
8
|
bindir: exe
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
12
|
+
- !ruby/object:Gem::Dependency
|
13
|
+
name: base64
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
15
|
+
requirements:
|
16
|
+
- - "~>"
|
17
|
+
- !ruby/object:Gem::Version
|
18
|
+
version: '0.1'
|
19
|
+
type: :runtime
|
20
|
+
prerelease: false
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
requirements:
|
23
|
+
- - "~>"
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: '0.1'
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: json
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- - "~>"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '2.0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '2.0'
|
13
40
|
- !ruby/object:Gem::Dependency
|
14
41
|
name: logger
|
15
42
|
requirement: !ruby/object:Gem::Requirement
|
@@ -24,6 +51,34 @@ dependencies:
|
|
24
51
|
- - "~>"
|
25
52
|
- !ruby/object:Gem::Version
|
26
53
|
version: '1.0'
|
54
|
+
- !ruby/object:Gem::Dependency
|
55
|
+
name: net-http
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0.6'
|
61
|
+
type: :runtime
|
62
|
+
prerelease: false
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0.6'
|
68
|
+
- !ruby/object:Gem::Dependency
|
69
|
+
name: openssl
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '3.0'
|
75
|
+
type: :runtime
|
76
|
+
prerelease: false
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '3.0'
|
27
82
|
- !ruby/object:Gem::Dependency
|
28
83
|
name: minitest
|
29
84
|
requirement: !ruby/object:Gem::Requirement
|
@@ -129,7 +184,6 @@ licenses:
|
|
129
184
|
metadata:
|
130
185
|
source_code_uri: https://github.com/xlgmokha/net-hippie
|
131
186
|
rubygems_mfa_required: 'true'
|
132
|
-
post_install_message:
|
133
187
|
rdoc_options: []
|
134
188
|
require_paths:
|
135
189
|
- lib
|
@@ -137,15 +191,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
137
191
|
requirements:
|
138
192
|
- - ">="
|
139
193
|
- !ruby/object:Gem::Version
|
140
|
-
version: 2.
|
194
|
+
version: 3.2.0
|
141
195
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
142
196
|
requirements:
|
143
197
|
- - ">="
|
144
198
|
- !ruby/object:Gem::Version
|
145
199
|
version: '0'
|
146
200
|
requirements: []
|
147
|
-
rubygems_version: 3.
|
148
|
-
signing_key:
|
201
|
+
rubygems_version: 3.7.2
|
149
202
|
specification_version: 4
|
150
203
|
summary: net/http for hippies. ☮️
|
151
204
|
test_files: []
|