proc 0.7.0 → 0.8.0

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: 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