proc 0.3.0 → 0.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/lib/proc/client.rb +60 -56
- data/lib/proc/http/client.rb +15 -20
- data/lib/proc/version.rb +1 -1
- metadata +16 -3
- data/lib/proc/null_logger.rb +0 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 63d146f97fd1dc28e5ff40ae924ac80e5f34838da4a3bb626b51023c2e23efbc
|
4
|
+
data.tar.gz: ebbab25f52bc3344c9fee6e10a00af6ed5022808d05f8516c41dc914987178d6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 06f06ba059619e117f86021bfeda3b5520d6842664d5fb284c77e7920cae38b66d4e82874329243ee0e456216034a07111e04f8b49ffaf6828470eb8a0e7f2fc
|
7
|
+
data.tar.gz: d6b1423b158de5320e963c48a988db2936c5c576eb3e02b2ec9d2d675ff54ca6c428e270baaf566935bf8df2fd18b9b59e67449c5ed661d5c57d7a4b75a8f41b
|
data/lib/proc/client.rb
CHANGED
@@ -6,10 +6,11 @@ require "oj"
|
|
6
6
|
require_relative "argument"
|
7
7
|
require_relative "callable"
|
8
8
|
require_relative "composition"
|
9
|
-
require_relative "null_logger"
|
10
9
|
|
11
10
|
require_relative "http/client"
|
12
11
|
|
12
|
+
Console.logger.off!
|
13
|
+
|
13
14
|
class Proc
|
14
15
|
class Error < StandardError
|
15
16
|
end
|
@@ -35,13 +36,12 @@ class Proc
|
|
35
36
|
class Timeout < Error
|
36
37
|
end
|
37
38
|
|
38
|
-
class Client
|
39
|
+
class Client
|
39
40
|
def initialize(authorization, scheme: "https", host: "proc.dev")
|
40
41
|
@authorization = authorization
|
41
42
|
@scheme = scheme
|
42
43
|
@host = host
|
43
|
-
|
44
|
-
super()
|
44
|
+
@internal = Http::Client.new
|
45
45
|
end
|
46
46
|
|
47
47
|
def [](proc)
|
@@ -70,60 +70,47 @@ class Proc
|
|
70
70
|
}.freeze
|
71
71
|
|
72
72
|
def call(proc = nil, input = nil, **arguments)
|
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
|
-
raise Proc::Undefined, payload.dig("error", "message")
|
112
|
-
when 408
|
113
|
-
raise Proc::Timeout, payload.dig("error", "message")
|
114
|
-
when 429
|
115
|
-
raise Proc::Limited, payload.dig("error", "message")
|
116
|
-
when 500
|
117
|
-
raise Proc::Error, payload.dig("error", "message")
|
118
|
-
when 508
|
119
|
-
raise Proc::Error, payload.dig("error", "message")
|
120
|
-
else
|
121
|
-
raise Proc::Error, "unhandled"
|
122
|
-
end
|
123
|
-
}.wait
|
73
|
+
body = {"<>" => true}
|
74
|
+
|
75
|
+
unless Proc.undefined?(input)
|
76
|
+
body["<<"] = serialize_value(input)
|
77
|
+
end
|
78
|
+
|
79
|
+
arguments.each_pair do |key, value|
|
80
|
+
body[key.to_s] = serialize_value(value)
|
81
|
+
end
|
82
|
+
|
83
|
+
headers = {
|
84
|
+
"authorization" => "bearer #{@authorization}"
|
85
|
+
}.merge(DEFAULT_HEADERS)
|
86
|
+
|
87
|
+
payload = get_payload(proc: proc, headers: headers, body: body)
|
88
|
+
|
89
|
+
case payload["status"]
|
90
|
+
when 200
|
91
|
+
payload[">>"]
|
92
|
+
when 400
|
93
|
+
raise Proc::Invalid, payload.dig("error", "message")
|
94
|
+
when 401
|
95
|
+
raise Proc::Unauthorized, payload.dig("error", "message")
|
96
|
+
when 403
|
97
|
+
raise Proc::Forbidden, payload.dig("error", "message")
|
98
|
+
when 404
|
99
|
+
raise Proc::Undefined, payload.dig("error", "message")
|
100
|
+
when 408
|
101
|
+
raise Proc::Timeout, payload.dig("error", "message")
|
102
|
+
when 429
|
103
|
+
raise Proc::Limited, payload.dig("error", "message")
|
104
|
+
when 500
|
105
|
+
raise Proc::Error, payload.dig("error", "message")
|
106
|
+
when 508
|
107
|
+
raise Proc::Error, payload.dig("error", "message")
|
108
|
+
else
|
109
|
+
raise Proc::Error, "unhandled"
|
110
|
+
end
|
124
111
|
end
|
125
112
|
|
126
|
-
def method_missing(name, input = input_omitted = true, **arguments)
|
113
|
+
def method_missing(name, input = input_omitted = true, *, **arguments)
|
127
114
|
if input_omitted
|
128
115
|
Callable.new(name, client: self, arguments: arguments)
|
129
116
|
else
|
@@ -140,6 +127,10 @@ class Proc
|
|
140
127
|
end
|
141
128
|
alias_method :arg, :argument
|
142
129
|
|
130
|
+
def close
|
131
|
+
@internal.close
|
132
|
+
end
|
133
|
+
|
143
134
|
private def build_uri(proc)
|
144
135
|
host_and_path = File.join(@host, proc.to_s.split(".").join("/"))
|
145
136
|
|
@@ -153,5 +144,18 @@ class Proc
|
|
153
144
|
value
|
154
145
|
end
|
155
146
|
end
|
147
|
+
|
148
|
+
private def get_payload(proc:, headers:, body:)
|
149
|
+
@internal.call(:post, build_uri(proc), headers: headers, body: Oj.dump(body, mode: :custom)) { |response|
|
150
|
+
@remaining = response.headers["x-rate-limit-remaining"].to_s.to_i
|
151
|
+
@resets_at = Time.at(response.headers["x-rate-limit-reset"].to_s.to_i)
|
152
|
+
|
153
|
+
payload = Oj.load(response.read, mode: :compat, compat_bigdecimal: true)
|
154
|
+
payload["status"] = response.status
|
155
|
+
payload
|
156
|
+
}
|
157
|
+
rescue
|
158
|
+
raise Proc::Unavailable
|
159
|
+
end
|
156
160
|
end
|
157
161
|
end
|
data/lib/proc/http/client.rb
CHANGED
@@ -5,50 +5,45 @@ require "async/http/internet"
|
|
5
5
|
|
6
6
|
require "protocol/http/body/streamable"
|
7
7
|
|
8
|
+
require "core/async"
|
9
|
+
|
8
10
|
require_relative "request"
|
9
11
|
require_relative "response"
|
10
12
|
|
11
|
-
require_relative "../null_logger"
|
12
|
-
|
13
13
|
class Proc
|
14
14
|
module Http
|
15
15
|
class Client
|
16
|
+
include Is::Async
|
17
|
+
|
16
18
|
def initialize
|
17
19
|
@internet = Async::HTTP::Internet.new
|
18
|
-
@responses = {}
|
19
20
|
end
|
20
21
|
|
21
|
-
def call(method, uri, params: {}, headers: {}, body: nil
|
22
|
+
def call(method, uri, params: {}, headers: {}, body: nil)
|
22
23
|
request = Request.new(method: method, uri: uri, params: params, headers: headers, body: body)
|
23
24
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
25
|
+
await {
|
26
|
+
begin
|
27
|
+
response = make_request(request)
|
28
|
+
|
29
|
+
yield response
|
30
|
+
ensure
|
31
|
+
response&.close
|
32
|
+
end
|
33
|
+
}
|
31
34
|
end
|
32
35
|
|
33
36
|
def close
|
34
|
-
# TODO: Make sure this works. We should also close / clear after accumulating some amount.
|
35
|
-
#
|
36
|
-
@responses.each_value(&:close)
|
37
|
-
@responses.clear
|
38
37
|
@internet.close
|
39
38
|
end
|
40
39
|
|
41
|
-
def count
|
42
|
-
@responses.count
|
43
|
-
end
|
44
|
-
|
45
40
|
private def make_request(request)
|
46
41
|
async_response = @internet.call(*request.callable)
|
47
42
|
wrap_async_response_for_request(async_response, request)
|
48
43
|
end
|
49
44
|
|
50
45
|
private def wrap_async_response_for_request(async_response, request)
|
51
|
-
|
46
|
+
Response.new(request, async_response)
|
52
47
|
end
|
53
48
|
end
|
54
49
|
end
|
data/lib/proc/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: proc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bryan Powell
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: async-http
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.52.5
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: core-async
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.0.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.0.0
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: oj
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -54,7 +68,6 @@ files:
|
|
54
68
|
- lib/proc/http/client.rb
|
55
69
|
- lib/proc/http/request.rb
|
56
70
|
- lib/proc/http/response.rb
|
57
|
-
- lib/proc/null_logger.rb
|
58
71
|
- lib/proc/version.rb
|
59
72
|
homepage: https://proc.dev/
|
60
73
|
licenses:
|