orb-billing 0.1.2 → 0.2.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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/.ignore +2 -0
  3. data/CHANGELOG.md +972 -0
  4. data/README.md +7 -15
  5. data/SECURITY.md +27 -0
  6. data/lib/orb/client.rb +3 -2
  7. data/lib/orb/internal/page.rb +33 -31
  8. data/lib/orb/internal/transport/base_client.rb +14 -4
  9. data/lib/orb/internal/transport/pooled_net_requester.rb +1 -1
  10. data/lib/orb/internal/type/array_of.rb +17 -2
  11. data/lib/orb/internal/type/base_model.rb +52 -8
  12. data/lib/orb/internal/type/base_page.rb +1 -0
  13. data/lib/orb/internal/type/boolean.rb +2 -0
  14. data/lib/orb/internal/type/converter.rb +24 -0
  15. data/lib/orb/internal/type/enum.rb +19 -3
  16. data/lib/orb/internal/type/hash_of.rb +17 -2
  17. data/lib/orb/internal/type/io_like.rb +2 -0
  18. data/lib/orb/internal/type/union.rb +17 -3
  19. data/lib/orb/internal/type/unknown.rb +2 -0
  20. data/lib/orb/internal/util.rb +36 -9
  21. data/lib/orb/internal.rb +5 -1
  22. data/lib/orb/version.rb +1 -1
  23. data/rbi/lib/orb/client.rbi +3 -2
  24. data/rbi/lib/orb/internal/page.rbi +1 -0
  25. data/rbi/lib/orb/internal/transport/base_client.rbi +1 -0
  26. data/rbi/lib/orb/internal/type/array_of.rbi +12 -9
  27. data/rbi/lib/orb/internal/type/base_model.rbi +16 -0
  28. data/rbi/lib/orb/internal/type/boolean.rbi +4 -5
  29. data/rbi/lib/orb/internal/type/converter.rbi +8 -0
  30. data/rbi/lib/orb/internal/type/enum.rbi +4 -0
  31. data/rbi/lib/orb/internal/type/hash_of.rbi +12 -9
  32. data/rbi/lib/orb/internal/type/io_like.rbi +4 -5
  33. data/rbi/lib/orb/internal/type/union.rbi +4 -0
  34. data/rbi/lib/orb/internal/type/unknown.rbi +4 -5
  35. data/rbi/lib/orb/internal/util.rbi +15 -0
  36. data/rbi/lib/orb/internal.rbi +1 -1
  37. data/sig/orb/internal/type/array_of.rbs +2 -0
  38. data/sig/orb/internal/type/base_model.rbs +8 -0
  39. data/sig/orb/internal/type/converter.rbs +4 -0
  40. data/sig/orb/internal/type/enum.rbs +2 -0
  41. data/sig/orb/internal/type/hash_of.rbs +2 -0
  42. data/sig/orb/internal/type/union.rbs +2 -0
  43. data/sig/orb/internal/util.rbs +2 -0
  44. data/sig/orb/internal.rbs +1 -1
  45. metadata +5 -2
data/lib/orb/internal.rb CHANGED
@@ -3,6 +3,10 @@
3
3
  module Orb
4
4
  # @api private
5
5
  module Internal
6
- OMIT = Object.new.freeze
6
+ OMIT =
7
+ Object.new.tap do
8
+ _1.define_singleton_method(:inspect) { "#<#{Orb::Internal}::OMIT>" }
9
+ end
10
+ .freeze
7
11
  end
8
12
  end
data/lib/orb/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Orb
4
- VERSION = "0.1.2"
4
+ VERSION = "0.2.0"
5
5
  end
@@ -78,8 +78,9 @@ module Orb
78
78
  def self.new(
79
79
  # Defaults to `ENV["ORB_API_KEY"]`
80
80
  api_key: ENV["ORB_API_KEY"],
81
- # Override the default base URL for the API, e.g., `"https://api.example.com/v2/"`
82
- base_url: nil,
81
+ # Override the default base URL for the API, e.g.,
82
+ # `"https://api.example.com/v2/"`. Defaults to `ENV["ORB_BASE_URL"]`
83
+ base_url: ENV["ORB_BASE_URL"],
83
84
  # Max number of retries to attempt after a failed retryable request.
84
85
  max_retries: DEFAULT_MAX_RETRIES,
85
86
  timeout: DEFAULT_TIMEOUT_IN_SECONDS,
@@ -13,6 +13,7 @@ module Orb
13
13
  sig { returns(PaginationMetadata) }
14
14
  attr_accessor :pagination_metadata
15
15
 
16
+ # @api private
16
17
  sig { returns(String) }
17
18
  def inspect; end
18
19
 
@@ -187,6 +187,7 @@ module Orb
187
187
  model: Orb::Internal::Type::Unknown,
188
188
  options: {}
189
189
  ); end
190
+ # @api private
190
191
  sig { returns(String) }
191
192
  def inspect; end
192
193
  end
@@ -10,11 +10,10 @@ module Orb
10
10
  include Orb::Internal::Type::Converter
11
11
 
12
12
  abstract!
13
- final!
14
13
 
15
14
  Elem = type_member(:out)
16
15
 
17
- sig(:final) do
16
+ sig do
18
17
  params(
19
18
  type_info: T.any(
20
19
  Orb::Internal::AnyHash,
@@ -27,14 +26,14 @@ module Orb
27
26
  end
28
27
  def self.[](type_info, spec = {}); end
29
28
 
30
- sig(:final) { params(other: T.anything).returns(T::Boolean) }
29
+ sig { params(other: T.anything).returns(T::Boolean) }
31
30
  def ===(other); end
32
31
 
33
- sig(:final) { params(other: T.anything).returns(T::Boolean) }
32
+ sig { params(other: T.anything).returns(T::Boolean) }
34
33
  def ==(other); end
35
34
 
36
35
  # @api private
37
- sig(:final) do
36
+ sig do
38
37
  override
39
38
  .params(value: T.any(
40
39
  T::Array[T.anything],
@@ -46,7 +45,7 @@ module Orb
46
45
  def coerce(value, state:); end
47
46
 
48
47
  # @api private
49
- sig(:final) do
48
+ sig do
50
49
  override
51
50
  .params(value: T.any(
52
51
  T::Array[T.anything],
@@ -58,15 +57,15 @@ module Orb
58
57
  def dump(value, state:); end
59
58
 
60
59
  # @api private
61
- sig(:final) { returns(Elem) }
60
+ sig { returns(Elem) }
62
61
  protected def item_type; end
63
62
 
64
63
  # @api private
65
- sig(:final) { returns(T::Boolean) }
64
+ sig { returns(T::Boolean) }
66
65
  protected def nilable?; end
67
66
 
68
67
  # @api private
69
- sig(:final) do
68
+ sig do
70
69
  params(
71
70
  type_info: T.any(
72
71
  Orb::Internal::AnyHash,
@@ -78,6 +77,10 @@ module Orb
78
77
  .void
79
78
  end
80
79
  def initialize(type_info, spec = {}); end
80
+
81
+ # @api private
82
+ sig { params(depth: Integer).returns(String) }
83
+ def inspect(depth: 0); end
81
84
  end
82
85
  end
83
86
  end
@@ -175,6 +175,11 @@ module Orb
175
175
  sig { params(keys: T.nilable(T::Array[Symbol])).returns(Orb::Internal::AnyHash) }
176
176
  def deconstruct_keys(keys); end
177
177
 
178
+ class << self
179
+ sig { params(model: Orb::Internal::Type::BaseModel).returns(Orb::Internal::AnyHash) }
180
+ def walk(model); end
181
+ end
182
+
178
183
  sig { params(a: T.anything).returns(String) }
179
184
  def to_json(*a); end
180
185
 
@@ -185,6 +190,17 @@ module Orb
185
190
  sig { params(data: T.any(T::Hash[Symbol, T.anything], T.self_type)).returns(T.attached_class) }
186
191
  def self.new(data = {}); end
187
192
 
193
+ class << self
194
+ # @api private
195
+ sig { params(depth: Integer).returns(String) }
196
+ def inspect(depth: 0); end
197
+ end
198
+
199
+ # @api private
200
+ sig { returns(String) }
201
+ def to_s; end
202
+
203
+ # @api private
188
204
  sig { returns(String) }
189
205
  def inspect; end
190
206
  end
@@ -10,17 +10,16 @@ module Orb
10
10
  extend Orb::Internal::Type::Converter
11
11
 
12
12
  abstract!
13
- final!
14
13
 
15
- sig(:final) { params(other: T.anything).returns(T::Boolean) }
14
+ sig { params(other: T.anything).returns(T::Boolean) }
16
15
  def self.===(other); end
17
16
 
18
- sig(:final) { params(other: T.anything).returns(T::Boolean) }
17
+ sig { params(other: T.anything).returns(T::Boolean) }
19
18
  def self.==(other); end
20
19
 
21
20
  class << self
22
21
  # @api private
23
- sig(:final) do
22
+ sig do
24
23
  override
25
24
  .params(value: T.any(
26
25
  T::Boolean,
@@ -32,7 +31,7 @@ module Orb
32
31
  def coerce(value, state:); end
33
32
 
34
33
  # @api private
35
- sig(:final) do
34
+ sig do
36
35
  override
37
36
  .params(value: T.any(T::Boolean, T.anything), state: Orb::Internal::Type::Converter::DumpState)
38
37
  .returns(T.any(T::Boolean, T.anything))
@@ -35,6 +35,10 @@ module Orb
35
35
  end
36
36
  def dump(value, state:); end
37
37
 
38
+ # @api private
39
+ sig { params(depth: Integer).returns(String) }
40
+ def inspect(depth: 0); end
41
+
38
42
  class << self
39
43
  # @api private
40
44
  sig do
@@ -106,6 +110,10 @@ module Orb
106
110
  .returns(T.anything)
107
111
  end
108
112
  def self.dump(target, value, state: {can_retry: true}); end
113
+
114
+ # @api private
115
+ sig { params(target: T.anything, depth: Integer).returns(String) }
116
+ def self.inspect(target, depth:); end
109
117
  end
110
118
  end
111
119
  end
@@ -57,6 +57,10 @@ module Orb
57
57
  .returns(T.any(Symbol, T.anything))
58
58
  end
59
59
  def dump(value, state:); end
60
+
61
+ # @api private
62
+ sig { params(depth: Integer).returns(String) }
63
+ def inspect(depth: 0); end
60
64
  end
61
65
  end
62
66
  end
@@ -10,11 +10,10 @@ module Orb
10
10
  include Orb::Internal::Type::Converter
11
11
 
12
12
  abstract!
13
- final!
14
13
 
15
14
  Elem = type_member(:out)
16
15
 
17
- sig(:final) do
16
+ sig do
18
17
  params(
19
18
  type_info: T.any(
20
19
  Orb::Internal::AnyHash,
@@ -27,14 +26,14 @@ module Orb
27
26
  end
28
27
  def self.[](type_info, spec = {}); end
29
28
 
30
- sig(:final) { params(other: T.anything).returns(T::Boolean) }
29
+ sig { params(other: T.anything).returns(T::Boolean) }
31
30
  def ===(other); end
32
31
 
33
- sig(:final) { params(other: T.anything).returns(T::Boolean) }
32
+ sig { params(other: T.anything).returns(T::Boolean) }
34
33
  def ==(other); end
35
34
 
36
35
  # @api private
37
- sig(:final) do
36
+ sig do
38
37
  override
39
38
  .params(
40
39
  value: T.any(T::Hash[T.anything, T.anything], T.anything),
@@ -45,7 +44,7 @@ module Orb
45
44
  def coerce(value, state:); end
46
45
 
47
46
  # @api private
48
- sig(:final) do
47
+ sig do
49
48
  override
50
49
  .params(
51
50
  value: T.any(T::Hash[T.anything, T.anything], T.anything),
@@ -56,15 +55,15 @@ module Orb
56
55
  def dump(value, state:); end
57
56
 
58
57
  # @api private
59
- sig(:final) { returns(Elem) }
58
+ sig { returns(Elem) }
60
59
  protected def item_type; end
61
60
 
62
61
  # @api private
63
- sig(:final) { returns(T::Boolean) }
62
+ sig { returns(T::Boolean) }
64
63
  protected def nilable?; end
65
64
 
66
65
  # @api private
67
- sig(:final) do
66
+ sig do
68
67
  params(
69
68
  type_info: T.any(
70
69
  Orb::Internal::AnyHash,
@@ -76,6 +75,10 @@ module Orb
76
75
  .void
77
76
  end
78
77
  def initialize(type_info, spec = {}); end
78
+
79
+ # @api private
80
+ sig { params(depth: Integer).returns(String) }
81
+ def inspect(depth: 0); end
79
82
  end
80
83
  end
81
84
  end
@@ -10,17 +10,16 @@ module Orb
10
10
  extend Orb::Internal::Type::Converter
11
11
 
12
12
  abstract!
13
- final!
14
13
 
15
- sig(:final) { params(other: T.anything).returns(T::Boolean) }
14
+ sig { params(other: T.anything).returns(T::Boolean) }
16
15
  def self.===(other); end
17
16
 
18
- sig(:final) { params(other: T.anything).returns(T::Boolean) }
17
+ sig { params(other: T.anything).returns(T::Boolean) }
19
18
  def self.==(other); end
20
19
 
21
20
  class << self
22
21
  # @api private
23
- sig(:final) do
22
+ sig do
24
23
  override
25
24
  .params(value: T.any(
26
25
  StringIO,
@@ -33,7 +32,7 @@ module Orb
33
32
  def coerce(value, state:); end
34
33
 
35
34
  # @api private
36
- sig(:final) do
35
+ sig do
37
36
  override
38
37
  .params(
39
38
  value: T.any(Pathname, StringIO, IO, String, T.anything),
@@ -62,6 +62,10 @@ module Orb
62
62
  ).returns(T.anything)
63
63
  end
64
64
  def dump(value, state:); end
65
+
66
+ # @api private
67
+ sig { params(depth: Integer).returns(String) }
68
+ def inspect(depth: 0); end
65
69
  end
66
70
  end
67
71
  end
@@ -10,17 +10,16 @@ module Orb
10
10
  extend Orb::Internal::Type::Converter
11
11
 
12
12
  abstract!
13
- final!
14
13
 
15
- sig(:final) { params(other: T.anything).returns(T::Boolean) }
14
+ sig { params(other: T.anything).returns(T::Boolean) }
16
15
  def self.===(other); end
17
16
 
18
- sig(:final) { params(other: T.anything).returns(T::Boolean) }
17
+ sig { params(other: T.anything).returns(T::Boolean) }
19
18
  def self.==(other); end
20
19
 
21
20
  class << self
22
21
  # @api private
23
- sig(:final) do
22
+ sig do
24
23
  override.params(
25
24
  value: T.anything,
26
25
  state: Orb::Internal::Type::Converter::CoerceState
@@ -29,7 +28,7 @@ module Orb
29
28
  def coerce(value, state:); end
30
29
 
31
30
  # @api private
32
- sig(:final) do
31
+ sig do
33
32
  override.params(
34
33
  value: T.anything,
35
34
  state: Orb::Internal::Type::Converter::DumpState
@@ -215,6 +215,14 @@ module Orb
215
215
  def encode_content(headers, body); end
216
216
 
217
217
  # @api private
218
+ #
219
+ # https://www.iana.org/assignments/character-sets/character-sets.xhtml
220
+ sig { params(content_type: String, text: String).void }
221
+ def force_charset!(content_type, text:); end
222
+
223
+ # @api private
224
+ #
225
+ # Assumes each chunk in stream has `Encoding::BINARY`.
218
226
  sig do
219
227
  params(
220
228
  headers: T.any(T::Hash[String, String], Net::HTTPHeader),
@@ -263,12 +271,19 @@ module Orb
263
271
 
264
272
  class << self
265
273
  # @api private
274
+ #
275
+ # Assumes Strings have been forced into having `Encoding::BINARY`.
276
+ #
277
+ # This decoder is responsible for reassembling lines split across multiple
278
+ # fragments.
266
279
  sig { params(enum: T::Enumerable[String]).returns(T::Enumerable[String]) }
267
280
  def decode_lines(enum); end
268
281
 
269
282
  # @api private
270
283
  #
271
284
  # https://html.spec.whatwg.org/multipage/server-sent-events.html#parsing-an-event-stream
285
+ #
286
+ # Assumes that `lines` has been decoded with `#decode_lines`.
272
287
  sig do
273
288
  params(lines: T::Enumerable[String]).returns(T::Enumerable[Orb::Internal::Util::ServerSentEvent])
274
289
  end
@@ -7,6 +7,6 @@ module Orb
7
7
  # this alias might be refined in the future.
8
8
  AnyHash = T.type_alias { T::Hash[Symbol, T.anything] }
9
9
 
10
- OMIT = T.let(T.anything, T.anything)
10
+ OMIT = T.let(Object.new.freeze, T.anything)
11
11
  end
12
12
  end
@@ -35,6 +35,8 @@ module Orb
35
35
  | Orb::Internal::Type::Converter::input type_info,
36
36
  ?::Hash[Symbol, top] spec
37
37
  ) -> void
38
+
39
+ def inspect: (?depth: Integer) -> String
38
40
  end
39
41
  end
40
42
  end
@@ -69,12 +69,20 @@ module Orb
69
69
 
70
70
  def deconstruct_keys: (::Array[Symbol]? keys) -> ::Hash[Symbol, top]
71
71
 
72
+ def self.walk: (
73
+ Orb::Internal::Type::BaseModel model
74
+ ) -> ::Hash[Symbol, top]
75
+
72
76
  def to_json: (*top a) -> String
73
77
 
74
78
  def to_yaml: (*top a) -> String
75
79
 
76
80
  def initialize: (?::Hash[Symbol, top] | self data) -> void
77
81
 
82
+ def self.inspect: (?depth: Integer) -> String
83
+
84
+ def to_s: -> String
85
+
78
86
  def inspect: -> String
79
87
  end
80
88
  end
@@ -23,6 +23,8 @@ module Orb
23
23
  state: Orb::Internal::Type::Converter::dump_state
24
24
  ) -> top
25
25
 
26
+ def inspect: (?depth: Integer) -> String
27
+
26
28
  def self.type_info: (
27
29
  {
28
30
  const: (nil | bool | Integer | Float | Symbol)?,
@@ -44,6 +46,8 @@ module Orb
44
46
  top value,
45
47
  ?state: Orb::Internal::Type::Converter::dump_state
46
48
  ) -> top
49
+
50
+ def self.inspect: (top target, depth: Integer) -> String
47
51
  end
48
52
  end
49
53
  end
@@ -21,6 +21,8 @@ module Orb
21
21
  Symbol | top value,
22
22
  state: Orb::Internal::Type::Converter::dump_state
23
23
  ) -> (Symbol | top)
24
+
25
+ def inspect: (?depth: Integer) -> String
24
26
  end
25
27
  end
26
28
  end
@@ -35,6 +35,8 @@ module Orb
35
35
  | Orb::Internal::Type::Converter::input type_info,
36
36
  ?::Hash[Symbol, top] spec
37
37
  ) -> void
38
+
39
+ def inspect: (?depth: Integer) -> String
38
40
  end
39
41
  end
40
42
  end
@@ -39,6 +39,8 @@ module Orb
39
39
  top value,
40
40
  state: Orb::Internal::Type::Converter::dump_state
41
41
  ) -> top
42
+
43
+ def inspect: (?depth: Integer) -> String
42
44
  end
43
45
  end
44
46
  end
@@ -120,6 +120,8 @@ module Orb
120
120
  top body
121
121
  ) -> top
122
122
 
123
+ def self?.force_charset!: (String content_type, text: String) -> void
124
+
123
125
  def self?.decode_content: (
124
126
  ::Hash[String, String] headers,
125
127
  stream: Enumerable[String],
data/sig/orb/internal.rbs CHANGED
@@ -1,5 +1,5 @@
1
1
  module Orb
2
2
  module Internal
3
- OMIT: top
3
+ OMIT: Object
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: orb-billing
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Orb
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-04-10 00:00:00.000000000 Z
11
+ date: 2025-04-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: connection_pool
@@ -31,7 +31,10 @@ extensions: []
31
31
  extra_rdoc_files:
32
32
  - README.md
33
33
  files:
34
+ - ".ignore"
35
+ - CHANGELOG.md
34
36
  - README.md
37
+ - SECURITY.md
35
38
  - lib/orb.rb
36
39
  - lib/orb/client.rb
37
40
  - lib/orb/errors.rb