Skip to content

Commit 3db38b4

Browse files
feat: support solargraph generics (#220)
1 parent 906a451 commit 3db38b4

File tree

10 files changed

+38
-27
lines changed

10 files changed

+38
-27
lines changed

lib/orb/internal/page.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
module Orb
44
module Internal
5+
# @generic Elem
6+
#
57
# @example
68
# if page.has_next?
79
# page = page.next_page
@@ -14,7 +16,7 @@ module Internal
1416
class Page
1517
include Orb::Internal::Type::BasePage
1618

17-
# @return [Array<Object>, nil]
19+
# @return [Array<generic<Elem>>, nil]
1820
attr_accessor :data
1921

2022
# @return [PaginationMetadata]
@@ -65,6 +67,8 @@ def next_page
6567
end
6668

6769
# @param blk [Proc]
70+
#
71+
# @yieldparam [generic<Elem>]
6872
def auto_paging_each(&blk)
6973
unless block_given?
7074
raise ArgumentError.new("A block must be given to ##{__method__}")

lib/orb/internal/transport/base_client.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ def follow_redirect(request, status:, response_headers:)
131131
# @api private
132132
#
133133
# @param status [Integer, Orb::Errors::APIConnectionError]
134-
# @param stream [Enumerable, nil]
134+
# @param stream [Enumerable<String>, nil]
135135
def reap_connection!(status, stream:)
136136
case status
137137
in (..199) | (300..499)
@@ -328,7 +328,7 @@ def initialize(
328328
# @param send_retry_header [Boolean]
329329
#
330330
# @raise [Orb::Errors::APIError]
331-
# @return [Array(Integer, Net::HTTPResponse, Enumerable)]
331+
# @return [Array(Integer, Net::HTTPResponse, Enumerable<String>)]
332332
private def send_request(request, redirect_count:, retry_count:, send_retry_header:)
333333
url, headers, max_retries, timeout = request.fetch_values(:url, :headers, :max_retries, :timeout)
334334
input = {**request.except(:timeout), deadline: Orb::Internal::Util.monotonic_secs + timeout}

lib/orb/internal/transport/pooled_net_requester.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ def build_request(request, &blk)
119119
#
120120
# @option request [Float] :deadline
121121
#
122-
# @return [Array(Integer, Net::HTTPResponse, Enumerable)]
122+
# @return [Array(Integer, Net::HTTPResponse, Enumerable<String>)]
123123
def execute(request)
124124
url, deadline = request.fetch_values(:url, :deadline)
125125

lib/orb/internal/type/array_of.rb

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ module Type
77
#
88
# @abstract
99
#
10+
# @generic Elem
11+
#
1012
# Array of items of a given type.
1113
class ArrayOf
1214
include Orb::Internal::Type::Converter
@@ -40,7 +42,7 @@ def ==(other)
4042

4143
# @api private
4244
#
43-
# @param value [Enumerable, Object]
45+
# @param value [Array<Object>, Object]
4446
#
4547
# @param state [Hash{Symbol=>Object}] .
4648
#
@@ -75,7 +77,7 @@ def coerce(value, state:)
7577

7678
# @api private
7779
#
78-
# @param value [Enumerable, Object]
80+
# @param value [Array<Object>, Object]
7981
#
8082
# @return [Array<Object>, Object]
8183
def dump(value)
@@ -85,7 +87,7 @@ def dump(value)
8587

8688
# @api private
8789
#
88-
# @return [Orb::Internal::Type::Converter, Class]
90+
# @return [generic<Elem>]
8991
protected def item_type = @item_type_fn.call
9092

9193
# @api private

lib/orb/internal/type/base_page.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
module Orb
44
module Internal
55
module Type
6+
# @generic Elem
7+
#
68
# This module provides a base implementation for paginated responses in the SDK.
79
module BasePage
810
# rubocop:disable Lint/UnusedMethodArgument
@@ -16,10 +18,11 @@ def next_page = (raise NotImplementedError)
1618

1719
# @param blk [Proc]
1820
#
21+
# @yieldparam [generic<Elem>]
1922
# @return [void]
2023
def auto_paging_each(&blk) = (raise NotImplementedError)
2124

22-
# @return [Enumerable]
25+
# @return [Enumerable<generic<Elem>>]
2326
def to_enum = super(:auto_paging_each)
2427

2528
alias_method :enum_for, :to_enum

lib/orb/internal/type/hash_of.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ module Type
77
#
88
# @abstract
99
#
10+
# @generic Elem
11+
#
1012
# Hash of items of a given type.
1113
class HashOf
1214
include Orb::Internal::Type::Converter
@@ -111,7 +113,7 @@ def dump(value)
111113

112114
# @api private
113115
#
114-
# @return [Orb::Internal::Type::Converter, Class]
116+
# @return [generic<Elem>]
115117
protected def item_type = @item_type_fn.call
116118

117119
# @api private

lib/orb/internal/util.rb

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,7 @@ def read(max_len = nil, out_string = nil)
419419

420420
# @api private
421421
#
422-
# @param stream [String, IO, StringIO, Enumerable]
422+
# @param stream [String, IO, StringIO, Enumerable<String>]
423423
# @param blk [Proc]
424424
#
425425
# @yieldparam [String]
@@ -434,7 +434,7 @@ class << self
434434
# @param blk [Proc]
435435
#
436436
# @yieldparam [Enumerator::Yielder]
437-
# @return [Enumerable]
437+
# @return [Enumerable<String>]
438438
def writable_enum(&blk)
439439
Enumerator.new do |y|
440440
y.define_singleton_method(:write) do
@@ -490,7 +490,7 @@ class << self
490490
#
491491
# @param body [Object]
492492
#
493-
# @return [Array(String, Enumerable)]
493+
# @return [Array(String, Enumerable<String>)]
494494
private def encode_multipart_streaming(body)
495495
boundary = SecureRandom.urlsafe_base64(60)
496496

@@ -543,7 +543,7 @@ def encode_content(headers, body)
543543
# @api private
544544
#
545545
# @param headers [Hash{String=>String}, Net::HTTPHeader]
546-
# @param stream [Enumerable]
546+
# @param stream [Enumerable<String>]
547547
# @param suppress_error [Boolean]
548548
#
549549
# @raise [JSON::ParserError]
@@ -580,11 +580,11 @@ class << self
580580
#
581581
# https://doc.rust-lang.org/std/iter/trait.FusedIterator.html
582582
#
583-
# @param enum [Enumerable]
583+
# @param enum [Enumerable<Object>]
584584
# @param external [Boolean]
585585
# @param close [Proc]
586586
#
587-
# @return [Enumerable]
587+
# @return [Enumerable<Object>]
588588
def fused_enum(enum, external: false, &close)
589589
fused = false
590590
iter = Enumerator.new do |y|
@@ -610,7 +610,7 @@ def fused_enum(enum, external: false, &close)
610610

611611
# @api private
612612
#
613-
# @param enum [Enumerable, nil]
613+
# @param enum [Enumerable<Object>, nil]
614614
def close_fused!(enum)
615615
return unless enum.is_a?(Enumerator)
616616

@@ -621,11 +621,11 @@ def close_fused!(enum)
621621

622622
# @api private
623623
#
624-
# @param enum [Enumerable, nil]
624+
# @param enum [Enumerable<Object>, nil]
625625
# @param blk [Proc]
626626
#
627627
# @yieldparam [Enumerator::Yielder]
628-
# @return [Enumerable]
628+
# @return [Enumerable<Object>]
629629
def chain_fused(enum, &blk)
630630
iter = Enumerator.new { blk.call(_1) }
631631
fused_enum(iter) { close_fused!(enum) }
@@ -635,9 +635,9 @@ def chain_fused(enum, &blk)
635635
class << self
636636
# @api private
637637
#
638-
# @param enum [Enumerable]
638+
# @param enum [Enumerable<String>]
639639
#
640-
# @return [Enumerable]
640+
# @return [Enumerable<String>]
641641
def decode_lines(enum)
642642
re = /(\r\n|\r|\n)/
643643
buffer = String.new.b
@@ -671,7 +671,7 @@ def decode_lines(enum)
671671
#
672672
# https://html.spec.whatwg.org/multipage/server-sent-events.html#parsing-an-event-stream
673673
#
674-
# @param lines [Enumerable]
674+
# @param lines [Enumerable<String>]
675675
#
676676
# @return [Hash{Symbol=>Object}]
677677
def decode_sse(lines)

rbi/lib/orb/internal/page.rbi

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
module Orb
44
module Internal
55
class Page
6-
include Orb::Internal::Type::BasePage
7-
86
Elem = type_member
97

8+
include Orb::Internal::Type::BasePage
9+
1010
sig { returns(T.nilable(T::Array[Elem])) }
1111
attr_accessor :data
1212

rbi/lib/orb/internal/type/array_of.rbi

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ module Orb
4040
sig(:final) do
4141
override
4242
.params(value: T.any(
43-
T::Enumerable[Elem],
43+
T::Array[T.anything],
4444
T.anything
4545
),
4646
state: Orb::Internal::Type::Converter::State)
@@ -52,7 +52,7 @@ module Orb
5252
# @api private
5353
sig(:final) do
5454
override
55-
.params(value: T.any(T::Enumerable[Elem], T.anything))
55+
.params(value: T.any(T::Array[T.anything], T.anything))
5656
.returns(T.any(T::Array[T.anything], T.anything))
5757
end
5858
def dump(value)

sig/orb/internal/type/array_of.rbs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ module Orb
1616
def ==: (top other) -> bool
1717

1818
def coerce: (
19-
Enumerable[Elem] | top value,
19+
::Array[top] | top value,
2020
state: Orb::Internal::Type::Converter::state
2121
) -> (::Array[top] | top)
2222

23-
def dump: (Enumerable[Elem] | top value) -> (::Array[top] | top)
23+
def dump: (::Array[top] | top value) -> (::Array[top] | top)
2424

2525
def item_type: -> Elem
2626

0 commit comments

Comments
 (0)