proc 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9b1cac83c7cff9f09dc94086b6b58e43cf686c4faa28e95aecda09c73e9eebbc
4
- data.tar.gz: e349377c73af33cdff5dfb488dbfd199ec37b9c1db84132e82dde7d65889b71b
3
+ metadata.gz: 59becc885513c542ccee8100b436c2854d5c42939b72424a691a281741861728
4
+ data.tar.gz: 82cfac2a503a9e934efeae9b41d037b6dd72d1e78e493a6ec921d04a39fec97e
5
5
  SHA512:
6
- metadata.gz: e9b7322deb5945ddac4cff0c12c444d8c90d88b917619176bc2983370e215f54ebafdf83e82a4778424fc94a9ed67149596ebb7fd7378d0bea8d0fcdac611a67
7
- data.tar.gz: 91286717d2ee7d67a8021f3aedf2debec4c2da88e2f9abbe34dadd751f02c64f227a40dbdb8e3f6b95ed0ca5ead33557b096683594b3b5e32f10aab5eaf23367
6
+ metadata.gz: 71cbb386c7e906584a706538f3cccba04a7090496486b80160b2856b2d4dbe480d35b02f83814643fb208173518053f283b9d4e2c365f8164781e569b23f98ea
7
+ data.tar.gz: '095adc172bb26b52871a0fb9d8265fb782cab0ae43981c03f1bedfe47200cdf1551e78cf1564e29ade46a535f0c717350e306513583b4ced7e09eac815a10c73'
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # TODO: Introduce inspectable everywhere (just bundle from pakyow).
4
-
5
3
  require_relative "proc/client"
6
4
 
7
5
  class Proc
@@ -1,9 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "async"
3
4
  require "oj"
4
5
 
5
6
  require_relative "callable"
6
7
  require_relative "composition"
8
+ require_relative "null_logger"
7
9
 
8
10
  require_relative "http/client"
9
11
 
@@ -45,36 +47,38 @@ class Proc
45
47
  }.freeze
46
48
 
47
49
  def perform(proc, input, **arguments)
48
- body = {
49
- input: input, arguments: arguments
50
- }
51
-
52
- headers = {
53
- "authorization" => "Bearer #{@authorization}"
54
- }.merge(DEFAULT_HEADERS)
55
-
56
- begin
57
- response = call(:post, build_uri(proc), headers: headers, body: Oj.dump(body, mode: :json))
58
- rescue => error
59
- raise Proc::Unavailable, error.message
60
- end
61
-
62
- payload = if response.body
63
- Oj.load(response.body.read, mode: :strict)
64
- end
65
-
66
- case response.status
67
- when 200
68
- payload["value"]
69
- when 400
70
- raise Proc::ArgumentError, payload.dig("error", "message")
71
- when 403
72
- raise Proc::Unauthorized, payload.dig("error", "message")
73
- when 404
74
- raise Proc::Undefined, payload.dig("error", "message")
75
- when 500
76
- raise Proc::Error, payload.dig("error", "message")
77
- end
50
+ Async(logger: NullLogger) { |task|
51
+ body = {
52
+ input: input, arguments: arguments
53
+ }
54
+
55
+ headers = {
56
+ "authorization" => "Bearer #{@authorization}"
57
+ }.merge(DEFAULT_HEADERS)
58
+
59
+ begin
60
+ response = call(:post, build_uri(proc), headers: headers, body: Oj.dump(body, mode: :json), task: task)
61
+
62
+ payload = Oj.load(response.read, mode: :strict)
63
+ rescue => error
64
+ raise Proc::Unavailable, error.message
65
+ ensure
66
+ response&.close
67
+ end
68
+
69
+ case response.status
70
+ when 200
71
+ payload["value"]
72
+ when 400
73
+ raise Proc::ArgumentError, payload.dig("error", "message")
74
+ when 403
75
+ raise Proc::Unauthorized, payload.dig("error", "message")
76
+ when 404
77
+ raise Proc::Undefined, payload.dig("error", "message")
78
+ when 500
79
+ raise Proc::Error, payload.dig("error", "message")
80
+ end
81
+ }.wait
78
82
  end
79
83
 
80
84
  private def build_uri(proc)
@@ -8,35 +8,31 @@ require "protocol/http/body/streamable"
8
8
  require_relative "request"
9
9
  require_relative "response"
10
10
 
11
+ require_relative "../null_logger"
12
+
11
13
  class Proc
12
14
  module Http
13
15
  class Client
14
- class NullLogger
15
- class << self
16
- def method_missing(*, **)
17
- end
18
-
19
- def respond_to_missing?(*)
20
- true
21
- end
22
- end
23
- end
24
-
25
16
  def initialize
26
17
  @internet = Async::HTTP::Internet.new
27
18
  @responses = {}
28
19
  end
29
20
 
30
- def call(method, uri, params: {}, headers: {}, body: nil)
21
+ def call(method, uri, params: {}, headers: {}, body: nil, task: nil)
31
22
  request = Request.new(method: method, uri: uri, params: params, headers: headers, body: body)
32
23
 
33
- Async(logger: NullLogger) {
34
- async_request = @internet.call(*request.callable)
35
- wrap_async_response_for_request(async_request, request)
36
- }.wait
24
+ if task
25
+ make_request(request)
26
+ else
27
+ Async(logger: NullLogger) {
28
+ make_request(request)
29
+ }.wait
30
+ end
37
31
  end
38
32
 
39
33
  def close
34
+ # TODO: Make sure this works. We should also close / clear after accumulating some amount.
35
+ #
40
36
  @responses.each_value(&:close)
41
37
  @responses.clear
42
38
  @internet.close
@@ -46,20 +42,13 @@ class Proc
46
42
  @responses.count
47
43
  end
48
44
 
49
- private def wrap_async_response_for_request(async_response, request)
50
- Protocol::HTTP::Body::Streamable.wrap(async_response) do
51
- @responses.delete(async_response)
52
- end
53
-
54
- response = Response.new(
55
- request: request,
56
- status: async_response.status,
57
- version: async_response.version,
58
- headers: async_response.headers,
59
- body: async_response.body
60
- )
45
+ private def make_request(request)
46
+ async_response = @internet.call(*request.callable)
47
+ wrap_async_response_for_request(async_response, request)
48
+ end
61
49
 
62
- @responses[async_response] = response
50
+ private def wrap_async_response_for_request(async_response, request)
51
+ @responses[async_response] = Response.new(request, async_response)
63
52
  end
64
53
  end
65
54
  end
@@ -1,37 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "forwardable"
4
+
3
5
  class Proc
4
6
  module Http
5
7
  class Response
6
- attr_reader :request, :status, :version, :headers, :body
7
-
8
- def initialize(request:, status:, version:, headers:, body:)
9
- @request = request
10
- @status = status
11
- @version = version
12
- @headers = headers
13
- @body = body
14
-
15
- @stream = nil
16
- @stream_blocks = []
17
- end
18
-
19
- def stream(&block)
20
- @stream_blocks << block
8
+ extend Forwardable
9
+ def_delegators :@response, :status, :version, :headers, :read, :close
21
10
 
22
- @stream ||= Async {
23
- @body.each do |chunk|
24
- @stream_blocks.each do |stream_callback|
25
- stream_callback.call(chunk)
26
- end
27
- end
28
- }
29
- end
11
+ attr_reader :request
30
12
 
31
- def close
32
- @stream&.stop
33
- @stream_blocks.clear
34
- @body.close
13
+ def initialize(request, response)
14
+ @request = request
15
+ @response = response
35
16
  end
36
17
  end
37
18
  end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Proc
4
+ class NullLogger
5
+ class << self
6
+ def method_missing(*, **)
7
+ end
8
+
9
+ def respond_to_missing?(*)
10
+ true
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Proc
4
- VERSION = "0.0.1"
4
+ VERSION = "0.0.2"
5
5
 
6
6
  def self.version
7
7
  VERSION
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.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bryan Powell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-20 00:00:00.000000000 Z
11
+ date: 2020-10-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: async-http
@@ -55,6 +55,7 @@ files:
55
55
  - lib/proc/http/client.rb
56
56
  - lib/proc/http/request.rb
57
57
  - lib/proc/http/response.rb
58
+ - lib/proc/null_logger.rb
58
59
  - lib/proc/version.rb
59
60
  homepage: https://proc.dev/
60
61
  licenses: