proc 0.7.0 → 0.8.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3436b4fd5fc66c40110f6dbf9cae15ab41d3e056126efd0aeb2ea1f3d9a0dd17
4
- data.tar.gz: 1e4d324315a902f1f53ad611f8379cc6a3ec86f7c897c0dd27cf8901736c85ce
3
+ metadata.gz: ece2d4c0f8e4e0aa122ca1df9e751d061afaa802dc056e5dd2c0ba7b272ff3e8
4
+ data.tar.gz: 4f9ce5d28d966c23097dd3445d5ea5fc37fe9d0ecea1c5b13771b9633ac28d0c
5
5
  SHA512:
6
- metadata.gz: ac68f3119ab651efe8705ebe7cc68ad33e7cf9b49c58248c390f5667e31f7521b2b8494f169e213aae4a1a4371df45c6d485b04af743ddb872c993ed04c0dd2b
7
- data.tar.gz: cc114dca8b977b3b365127120ad0f1ae37b53e0e75e5f2a025d9bc0741ebdc5f9fb667be6fd4df2793eab0fd9c02ea5b902146f995624d832f91642d2a4064cc
6
+ metadata.gz: c084f766e97cced8633a74379d700d06efa54bc6f0eb81cf6351af9e2528aea465ebff4dc4d3dd3631c20016ce70a1a36c2245607fe14f85aaa29d115d3ac9a5
7
+ data.tar.gz: 62303f9d27683c07bc0ff8f5df8c8697a669fa8df7ac496929457e3e572384ded1c779580ddf09082d830b8658c6c1be07eadb3478255de9b013e318a51b2755
data/lib/proc/callable.rb CHANGED
@@ -16,7 +16,7 @@ class Proc
16
16
  @arguments = arguments.dup
17
17
  end
18
18
 
19
- def call(input = input_omitted = true, **arguments)
19
+ def call(input = input_omitted = true, **arguments, &block)
20
20
  callable = self.class.new(
21
21
  @proc,
22
22
  client: @client,
@@ -24,7 +24,7 @@ class Proc
24
24
  arguments: @arguments.merge(arguments)
25
25
  )
26
26
 
27
- @client.call(@proc, callable.input, **callable.arguments)
27
+ @client.call(@proc, callable.input, **callable.arguments, &block)
28
28
  end
29
29
 
30
30
  def with(input = input_omitted = true, **arguments)
data/lib/proc/client.rb CHANGED
@@ -6,6 +6,7 @@ require "oj"
6
6
  require_relative "argument"
7
7
  require_relative "callable"
8
8
  require_relative "composition"
9
+ require_relative "enumerator"
9
10
 
10
11
  require_relative "http/client"
11
12
 
@@ -13,7 +14,9 @@ Console.logger.off!
13
14
 
14
15
  Oj.default_options = {
15
16
  mode: :custom,
16
- bigdecimal_load: :auto
17
+ bigdecimal_load: :auto,
18
+ float_precision: 0,
19
+ second_precision: 6
17
20
  }.freeze
18
21
 
19
22
  class Proc
@@ -42,6 +45,8 @@ class Proc
42
45
  end
43
46
 
44
47
  class Client
48
+ attr_reader :authorization, :scheme, :host
49
+
45
50
  def initialize(authorization, scheme: "https", host: "proc.dev")
46
51
  @authorization = authorization
47
52
  @scheme = scheme
@@ -74,7 +79,7 @@ class Proc
74
79
  "content-type" => "application/vnd.proc+json"
75
80
  }.freeze
76
81
 
77
- def call(proc = nil, input = Proc.undefined, **arguments)
82
+ def call(proc = nil, input = Proc.undefined, **arguments, &block)
78
83
  body = []
79
84
 
80
85
  unless Proc.undefined?(input)
@@ -89,11 +94,26 @@ class Proc
89
94
  "authorization" => "bearer #{@authorization}"
90
95
  }.merge(DEFAULT_HEADERS)
91
96
 
92
- status, payload = get_payload(proc: proc, headers: headers, body: body)
97
+ status, headers, payload = get_payload(proc: proc, headers: headers, body: body)
93
98
 
94
99
  case status
95
100
  when 200
96
- extract_output(payload)
101
+ result = extract_output(payload)
102
+
103
+ if (cursor = headers["x-cursor"])
104
+ enumerator = Enumerator.new(result) {
105
+ arguments[:cursor] = cursor.to_s
106
+ call(proc, input, **arguments)
107
+ }
108
+
109
+ if block
110
+ enumerator.each(&block)
111
+ else
112
+ enumerator
113
+ end
114
+ else
115
+ result
116
+ end
97
117
  when 400
98
118
  raise Proc::Invalid, extract_error_message(payload)
99
119
  when 401
@@ -156,7 +176,7 @@ class Proc
156
176
  @internal.call(:post, build_uri(proc), headers: headers, body: Oj.dump(body)) do |response|
157
177
  @remaining = response.headers["x-rate-limit-remaining"].to_s.to_i
158
178
  @resets_at = Time.at(response.headers["x-rate-limit-reset"].to_s.to_i)
159
- [response.status, Oj.load(response.read)]
179
+ [response.status, response.headers, Oj.load(response.read)]
160
180
  end
161
181
  rescue
162
182
  raise Proc::Unavailable
@@ -15,7 +15,7 @@ class Proc
15
15
  @callables = @callables.dup
16
16
  end
17
17
 
18
- def call(input = input_omitted = true, **arguments)
18
+ def call(input = input_omitted = true, **arguments, &block)
19
19
  callable = self.class.new(
20
20
  client: @client,
21
21
  input: input_omitted ? @input : input,
@@ -23,7 +23,7 @@ class Proc
23
23
  arguments: @arguments.merge(arguments)
24
24
  )
25
25
 
26
- @client.call("exec", Proc.undefined, proc: callable)
26
+ @client.call("exec", Proc.undefined, proc: callable, &block)
27
27
  end
28
28
 
29
29
  def with(input = input_omitted = true, **arguments)
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Proc
4
+ class Enumerator
5
+ include Enumerable
6
+
7
+ def initialize(values, &next_block)
8
+ @values = values
9
+ @next_block = next_block
10
+ end
11
+
12
+ def each(&block)
13
+ return to_enum(:each) unless block
14
+
15
+ @values.each(&block)
16
+ @next_block.call.each(&block)
17
+ end
18
+ end
19
+ end
data/lib/proc/version.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Proc
4
- VERSION = "0.7.0"
4
+ VERSION = "0.8.0"
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.7.0
4
+ version: 0.8.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: 2021-02-16 00:00:00.000000000 Z
11
+ date: 2021-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: async-http
@@ -65,6 +65,7 @@ files:
65
65
  - lib/proc/callable.rb
66
66
  - lib/proc/client.rb
67
67
  - lib/proc/composition.rb
68
+ - lib/proc/enumerator.rb
68
69
  - lib/proc/http/client.rb
69
70
  - lib/proc/http/request.rb
70
71
  - lib/proc/http/response.rb