From 508a2f6cc90a990e2ef220e9dcf41afde861f464 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 8 Apr 2025 21:02:56 +0000 Subject: [PATCH 01/16] chore(internal): version bump --- Gemfile.lock | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 11e50b20..31d1577e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -11,7 +11,7 @@ GIT PATH remote: . specs: - finch-api (0.1.0.pre.alpha.7) + finch-api (0.1.0.pre.alpha.8) connection_pool GEM diff --git a/README.md b/README.md index 848ec6b0..010201da 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ To use this gem, install via Bundler by adding the following to your application ```ruby -gem "finch-api", "~> 0.1.0.pre.alpha.7" +gem "finch-api", "~> 0.1.0.pre.alpha.8" ``` From 7bec93f44da855671b5c1be8ca11cb57f30d5cc7 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 8 Apr 2025 21:37:46 +0000 Subject: [PATCH 02/16] chore: add README docs for using solargraph when installing gem from git (#131) --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 010201da..6608b92d 100644 --- a/README.md +++ b/README.md @@ -140,6 +140,13 @@ After Solargraph is installed, **you must populate its index** either via the pr bundle exec solargraph gems ``` +Note: if you had installed the gem either using a `git:` or `github:` URL, or had vendored the gem using bundler, you will need to set up your [`.solargraph.yml`](https://solargraph.org/guides/configuration) to include the path to the gem's `lib` directory. + +```yaml +include: + - 'vendor/bundle/ruby/*/gems/finch-api-*/lib/**/*.rb' +``` + Otherwise Solargraph will not be able to provide type information or auto-completion for any non-indexed libraries. ### Sorbet From ca140ed7e0ba64dab0532c07e54c1fd3c74ee887 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 8 Apr 2025 21:49:01 +0000 Subject: [PATCH 03/16] feat: use Pathname alongside raw IO handles for file uploads (#132) --- lib/finch_api.rb | 1 + .../transport/pooled_net_requester.rb | 11 +- lib/finch_api/internal/type/array_of.rb | 8 +- lib/finch_api/internal/type/base_model.rb | 14 ++- lib/finch_api/internal/type/boolean.rb | 6 +- lib/finch_api/internal/type/converter.rb | 35 ++++-- lib/finch_api/internal/type/enum.rb | 6 +- lib/finch_api/internal/type/hash_of.rb | 8 +- lib/finch_api/internal/type/io_like.rb | 75 +++++++++++++ .../internal/type/request_parameters.rb | 13 ++- lib/finch_api/internal/type/union.rb | 10 +- lib/finch_api/internal/type/unknown.rb | 6 +- lib/finch_api/internal/util.rb | 101 ++++++++++++++---- .../transport/pooled_net_requester.rbi | 2 +- rbi/lib/finch_api/internal/type/array_of.rbi | 16 +-- .../finch_api/internal/type/base_model.rbi | 10 +- rbi/lib/finch_api/internal/type/boolean.rbi | 16 ++- rbi/lib/finch_api/internal/type/converter.rbi | 30 ++++-- rbi/lib/finch_api/internal/type/enum.rbi | 10 +- rbi/lib/finch_api/internal/type/hash_of.rbi | 9 +- rbi/lib/finch_api/internal/type/io_like.rbi | 47 ++++++++ rbi/lib/finch_api/internal/type/union.rbi | 15 +-- rbi/lib/finch_api/internal/type/unknown.rbi | 15 +-- rbi/lib/finch_api/internal/util.rbi | 39 ++++++- .../transport/pooled_net_requester.rbs | 2 +- sig/finch_api/internal/type/array_of.rbs | 7 +- sig/finch_api/internal/type/base_model.rbs | 7 +- sig/finch_api/internal/type/boolean.rbs | 7 +- sig/finch_api/internal/type/converter.rbs | 16 ++- sig/finch_api/internal/type/enum.rbs | 7 +- sig/finch_api/internal/type/hash_of.rbs | 7 +- sig/finch_api/internal/type/io_like.rbs | 23 ++++ sig/finch_api/internal/type/union.rbs | 7 +- sig/finch_api/internal/type/unknown.rbs | 7 +- sig/finch_api/internal/util.rbs | 19 +++- .../internal/type/base_model_test.rb | 32 +++++- test/finch_api/internal/util_test.rb | 18 ++-- 37 files changed, 536 insertions(+), 126 deletions(-) create mode 100644 lib/finch_api/internal/type/io_like.rb create mode 100644 rbi/lib/finch_api/internal/type/io_like.rbi create mode 100644 sig/finch_api/internal/type/io_like.rbs diff --git a/lib/finch_api.rb b/lib/finch_api.rb index 25a21a8f..1c9cc44d 100644 --- a/lib/finch_api.rb +++ b/lib/finch_api.rb @@ -40,6 +40,7 @@ require_relative "finch_api/internal/type/converter" require_relative "finch_api/internal/type/unknown" require_relative "finch_api/internal/type/boolean" +require_relative "finch_api/internal/type/io_like" require_relative "finch_api/internal/type/enum" require_relative "finch_api/internal/type/union" require_relative "finch_api/internal/type/array_of" diff --git a/lib/finch_api/internal/transport/pooled_net_requester.rb b/lib/finch_api/internal/transport/pooled_net_requester.rb index e256e83e..3d13cc3f 100644 --- a/lib/finch_api/internal/transport/pooled_net_requester.rb +++ b/lib/finch_api/internal/transport/pooled_net_requester.rb @@ -54,7 +54,7 @@ def calibrate_socket_timeout(conn, deadline) # @param blk [Proc] # # @yieldparam [String] - # @return [Net::HTTPGenericRequest] + # @return [Array(Net::HTTPGenericRequest, Proc)] def build_request(request, &blk) method, url, headers, body = request.fetch_values(:method, :url, :headers, :body) req = Net::HTTPGenericRequest.new( @@ -75,12 +75,12 @@ def build_request(request, &blk) in StringIO req["content-length"] ||= body.size.to_s unless req["transfer-encoding"] req.body_stream = FinchAPI::Internal::Util::ReadIOAdapter.new(body, &blk) - in IO | Enumerator + in Pathname | IO | Enumerator req["transfer-encoding"] ||= "chunked" unless req["content-length"] req.body_stream = FinchAPI::Internal::Util::ReadIOAdapter.new(body, &blk) end - req + [req, req.body_stream&.method(:close)] end end @@ -125,11 +125,12 @@ def execute(request) eof = false finished = false + closing = nil enum = Enumerator.new do |y| with_pool(url, deadline: deadline) do |conn| next if finished - req = self.class.build_request(request) do + req, closing = self.class.build_request(request) do self.class.calibrate_socket_timeout(conn, deadline) end @@ -165,7 +166,9 @@ def execute(request) rescue StopIteration nil end + ensure conn.finish if !eof && conn&.started? + closing&.call end [Integer(response.code), response, (response.body = body)] end diff --git a/lib/finch_api/internal/type/array_of.rb b/lib/finch_api/internal/type/array_of.rb index b552bbfe..952fc1e5 100644 --- a/lib/finch_api/internal/type/array_of.rb +++ b/lib/finch_api/internal/type/array_of.rb @@ -79,12 +79,16 @@ def coerce(value, state:) # # @param value [Array, Object] # + # @param state [Hash{Symbol=>Object}] . + # + # @option state [Boolean] :can_retry + # # @return [Array, Object] - def dump(value) + def dump(value, state:) target = item_type if value.is_a?(Array) value.map do - FinchAPI::Internal::Type::Converter.dump(target, _1) + FinchAPI::Internal::Type::Converter.dump(target, _1, state: state) end else super diff --git a/lib/finch_api/internal/type/base_model.rb b/lib/finch_api/internal/type/base_model.rb index 6f6f4c10..17f2c2a5 100644 --- a/lib/finch_api/internal/type/base_model.rb +++ b/lib/finch_api/internal/type/base_model.rb @@ -259,8 +259,12 @@ def coerce(value, state:) # # @param value [FinchAPI::Internal::Type::BaseModel, Object] # + # @param state [Hash{Symbol=>Object}] . + # + # @option state [Boolean] :can_retry + # # @return [Hash{Object=>Object}, Object] - def dump(value) + def dump(value, state:) unless (coerced = FinchAPI::Internal::Util.coerce_hash(value)).is_a?(Hash) return super end @@ -271,7 +275,7 @@ def dump(value) name = key.is_a?(String) ? key.to_sym : key case (field = known_fields[name]) in nil - acc.store(name, super(val)) + acc.store(name, super(val, state: state)) else api_name, mode, type_fn = field.fetch_values(:api_name, :mode, :type_fn) case mode @@ -279,7 +283,7 @@ def dump(value) next else target = type_fn.call - acc.store(api_name, FinchAPI::Internal::Type::Converter.dump(target, val)) + acc.store(api_name, FinchAPI::Internal::Type::Converter.dump(target, val, state: state)) end end end @@ -344,12 +348,12 @@ def deconstruct_keys(keys) # @param a [Object] # # @return [String] - def to_json(*a) = self.class.dump(self).to_json(*a) + def to_json(*a) = FinchAPI::Internal::Type::Converter.dump(self.class, self).to_json(*a) # @param a [Object] # # @return [String] - def to_yaml(*a) = self.class.dump(self).to_yaml(*a) + def to_yaml(*a) = FinchAPI::Internal::Type::Converter.dump(self.class, self).to_yaml(*a) # Create a new instance of a model. # diff --git a/lib/finch_api/internal/type/boolean.rb b/lib/finch_api/internal/type/boolean.rb index d23ba6f2..162a8087 100644 --- a/lib/finch_api/internal/type/boolean.rb +++ b/lib/finch_api/internal/type/boolean.rb @@ -45,8 +45,12 @@ def coerce(value, state:) # # # # @param value [Boolean, Object] # # + # # @param state [Hash{Symbol=>Object}] . + # # + # # @option state [Boolean] :can_retry + # # # # @return [Boolean, Object] - # def dump(value) = super + # def dump(value, state:) = super end end end diff --git a/lib/finch_api/internal/type/converter.rb b/lib/finch_api/internal/type/converter.rb index d9f4c09b..ef2cce0c 100644 --- a/lib/finch_api/internal/type/converter.rb +++ b/lib/finch_api/internal/type/converter.rb @@ -26,15 +26,24 @@ def coerce(value, state:) = (raise NotImplementedError) # # @param value [Object] # + # @param state [Hash{Symbol=>Object}] . + # + # @option state [Boolean] :can_retry + # # @return [Object] - def dump(value) + def dump(value, state:) case value in Array - value.map { FinchAPI::Internal::Type::Unknown.dump(_1) } + value.map { FinchAPI::Internal::Type::Unknown.dump(_1, state: state) } in Hash - value.transform_values { FinchAPI::Internal::Type::Unknown.dump(_1) } + value.transform_values { FinchAPI::Internal::Type::Unknown.dump(_1, state: state) } in FinchAPI::Internal::Type::BaseModel - value.class.dump(value) + value.class.dump(value, state: state) + in StringIO + value.string + in Pathname | IO + state[:can_retry] = false if value.is_a?(IO) + FinchAPI::Internal::Util::SerializationAdapter.new(value) else value end @@ -182,7 +191,7 @@ def coerce( rescue ArgumentError, TypeError => e raise e if strictness == :strong end - in -> { _1 <= IO } if value.is_a?(String) + in -> { _1 <= StringIO } if value.is_a?(String) exactness[:yes] += 1 return StringIO.new(value.b) else @@ -207,13 +216,21 @@ def coerce( # @api private # # @param target [FinchAPI::Internal::Type::Converter, Class] + # # @param value [Object] # + # @param state [Hash{Symbol=>Object}] . + # + # @option state [Boolean] :can_retry + # # @return [Object] - def dump(target, value) - # rubocop:disable Layout/LineLength - target.is_a?(FinchAPI::Internal::Type::Converter) ? target.dump(value) : FinchAPI::Internal::Type::Unknown.dump(value) - # rubocop:enable Layout/LineLength + def dump(target, value, state: {can_retry: true}) + case target + in FinchAPI::Internal::Type::Converter + target.dump(value, state: state) + else + FinchAPI::Internal::Type::Unknown.dump(value, state: state) + end end end end diff --git a/lib/finch_api/internal/type/enum.rb b/lib/finch_api/internal/type/enum.rb index 9e0290c6..e46c4286 100644 --- a/lib/finch_api/internal/type/enum.rb +++ b/lib/finch_api/internal/type/enum.rb @@ -101,8 +101,12 @@ def coerce(value, state:) # # # # @param value [Symbol, Object] # # + # # @param state [Hash{Symbol=>Object}] . + # # + # # @option state [Boolean] :can_retry + # # # # @return [Symbol, Object] - # def dump(value) = super + # def dump(value, state:) = super end end end diff --git a/lib/finch_api/internal/type/hash_of.rb b/lib/finch_api/internal/type/hash_of.rb index 01fc545d..449a6741 100644 --- a/lib/finch_api/internal/type/hash_of.rb +++ b/lib/finch_api/internal/type/hash_of.rb @@ -99,12 +99,16 @@ def coerce(value, state:) # # @param value [Hash{Object=>Object}, Object] # + # @param state [Hash{Symbol=>Object}] . + # + # @option state [Boolean] :can_retry + # # @return [Hash{Symbol=>Object}, Object] - def dump(value) + def dump(value, state:) target = item_type if value.is_a?(Hash) value.transform_values do - FinchAPI::Internal::Type::Converter.dump(target, _1) + FinchAPI::Internal::Type::Converter.dump(target, _1, state: state) end else super diff --git a/lib/finch_api/internal/type/io_like.rb b/lib/finch_api/internal/type/io_like.rb new file mode 100644 index 00000000..2a49dd80 --- /dev/null +++ b/lib/finch_api/internal/type/io_like.rb @@ -0,0 +1,75 @@ +# frozen_string_literal: true + +module FinchAPI + module Internal + module Type + # @api private + # + # @abstract + # + # Either `Pathname` or `StringIO`. + class IOLike + extend FinchAPI::Internal::Type::Converter + + # @param other [Object] + # + # @return [Boolean] + def self.===(other) + case other + in StringIO | Pathname | IO + true + else + false + end + end + + # @param other [Object] + # + # @return [Boolean] + def self.==(other) = other.is_a?(Class) && other <= FinchAPI::Internal::Type::IOLike + + class << self + # @api private + # + # @param value [StringIO, String, Object] + # + # @param state [Hash{Symbol=>Object}] . + # + # @option state [Boolean, :strong] :strictness + # + # @option state [Hash{Symbol=>Object}] :exactness + # + # @option state [Integer] :branched + # + # @return [StringIO, Object] + def coerce(value, state:) + exactness = state.fetch(:exactness) + case value + in String + exactness[:yes] += 1 + StringIO.new(value) + in StringIO + exactness[:yes] += 1 + value + else + exactness[:no] += 1 + value + end + end + + # @!parse + # # @api private + # # + # # @param value [Pathname, StringIO, IO, String, Object] + # # + # # @param state [Hash{Symbol=>Object}] . + # # + # # @option state [Boolean] :can_retry + # # + # # @return [Pathname, StringIO, IO, String, Object] + # def dump(value, state:) = super + end + end + end + end +end diff --git a/lib/finch_api/internal/type/request_parameters.rb b/lib/finch_api/internal/type/request_parameters.rb index b966a96c..6772d754 100644 --- a/lib/finch_api/internal/type/request_parameters.rb +++ b/lib/finch_api/internal/type/request_parameters.rb @@ -26,9 +26,18 @@ module Converter # # @return [Array(Object, Hash{Symbol=>Object})] def dump_request(params) - case (dumped = dump(params)) + state = {can_retry: true} + case (dumped = dump(params, state: state)) in Hash - [dumped.except(:request_options), dumped[:request_options]] + options = FinchAPI::Internal::Util.coerce_hash(dumped[:request_options]) + request_options = + case [options, state.fetch(:can_retry)] + in [Hash | nil, false] + {**options.to_h, max_retries: 0} + else + options + end + [dumped.except(:request_options), request_options] else [dumped, nil] end diff --git a/lib/finch_api/internal/type/union.rb b/lib/finch_api/internal/type/union.rb index fb7d14b7..228622cf 100644 --- a/lib/finch_api/internal/type/union.rb +++ b/lib/finch_api/internal/type/union.rb @@ -186,15 +186,19 @@ def coerce(value, state:) # # @param value [Object] # + # @param state [Hash{Symbol=>Object}] . + # + # @option state [Boolean] :can_retry + # # @return [Object] - def dump(value) + def dump(value, state:) if (target = resolve_variant(value)) - return FinchAPI::Internal::Type::Converter.dump(target, value) + return FinchAPI::Internal::Type::Converter.dump(target, value, state: state) end known_variants.each do target = _2.call - return FinchAPI::Internal::Type::Converter.dump(target, value) if target === value + return FinchAPI::Internal::Type::Converter.dump(target, value, state: state) if target === value end super diff --git a/lib/finch_api/internal/type/unknown.rb b/lib/finch_api/internal/type/unknown.rb index 8235a43c..6088c41f 100644 --- a/lib/finch_api/internal/type/unknown.rb +++ b/lib/finch_api/internal/type/unknown.rb @@ -47,8 +47,12 @@ def coerce(value, state:) # # # # @param value [Object] # # + # # @param state [Hash{Symbol=>Object}] . + # # + # # @option state [Boolean] :can_retry + # # # # @return [Object] - # def dump(value) = super + # def dump(value, state:) = super end # rubocop:enable Lint/UnusedMethodArgument diff --git a/lib/finch_api/internal/util.rb b/lib/finch_api/internal/util.rb index 271c3058..d50f000c 100644 --- a/lib/finch_api/internal/util.rb +++ b/lib/finch_api/internal/util.rb @@ -122,7 +122,7 @@ def coerce_float(input) # @return [Hash{Object=>Object}, Object] def coerce_hash(input) case input - in NilClass | Array | Set | Enumerator + in NilClass | Array | Set | Enumerator | StringIO | IO input else input.respond_to?(:to_h) ? input.to_h : input @@ -348,10 +348,47 @@ def normalized_headers(*headers) end end + # @api private + class SerializationAdapter + # @return [Pathname, IO] + attr_reader :inner + + # @param a [Object] + # + # @return [String] + def to_json(*a) = (inner.is_a?(IO) ? inner.read : inner.read(binmode: true)).to_json(*a) + + # @param a [Object] + # + # @return [String] + def to_yaml(*a) = (inner.is_a?(IO) ? inner.read : inner.read(binmode: true)).to_yaml(*a) + + # @api private + # + # @param inner [Pathname, IO] + def initialize(inner) = @inner = inner + end + # @api private # # An adapter that satisfies the IO interface required by `::IO.copy_stream` class ReadIOAdapter + # @api private + # + # @return [Boolean, nil] + def close? = @closing + + # @api private + def close + case @stream + in Enumerator + FinchAPI::Internal::Util.close_fused!(@stream) + in IO if close? + @stream.close + else + end + end + # @api private # # @param max_len [Integer, nil] @@ -396,12 +433,21 @@ def read(max_len = nil, out_string = nil) # @api private # - # @param stream [String, IO, StringIO, Enumerable] + # @param src [String, Pathname, StringIO, Enumerable] # @param blk [Proc] # # @yieldparam [String] - def initialize(stream, &blk) - @stream = stream.is_a?(String) ? StringIO.new(stream) : stream + def initialize(src, &blk) + @stream = + case src + in String + StringIO.new(src) + in Pathname + @closing = true + src.open(binmode: true) + else + src + end @buf = String.new.b @blk = blk end @@ -414,9 +460,10 @@ class << self # @return [Enumerable] def writable_enum(&blk) Enumerator.new do |y| + buf = String.new.b y.define_singleton_method(:write) do - self << _1.clone - _1.bytesize + self << buf.replace(_1) + buf.bytesize end blk.call(y) @@ -431,29 +478,39 @@ class << self # @param boundary [String] # @param key [Symbol, String] # @param val [Object] - private def write_multipart_chunk(y, boundary:, key:, val:) + # @param closing [Array] + private def write_multipart_chunk(y, boundary:, key:, val:, closing:) + val = val.inner if val.is_a?(FinchAPI::Internal::Util::SerializationAdapter) + y << "--#{boundary}\r\n" y << "Content-Disposition: form-data" unless key.nil? name = ERB::Util.url_encode(key.to_s) y << "; name=\"#{name}\"" end - if val.is_a?(IO) + case val + in Pathname | IO filename = ERB::Util.url_encode(File.basename(val.to_path)) y << "; filename=\"#{filename}\"" + else end y << "\r\n" case val + in Pathname + y << "Content-Type: application/octet-stream\r\n\r\n" + io = val.open(binmode: true) + closing << io.method(:close) + IO.copy_stream(io, y) in IO y << "Content-Type: application/octet-stream\r\n\r\n" - IO.copy_stream(val.tap(&:rewind), y) + IO.copy_stream(val, y) in StringIO y << "Content-Type: application/octet-stream\r\n\r\n" y << val.string in String y << "Content-Type: application/octet-stream\r\n\r\n" y << val.to_s - in true | false | Integer | Float | Symbol + in _ if primitive?(val) y << "Content-Type: text/plain\r\n\r\n" y << val.to_s else @@ -471,6 +528,7 @@ class << self private def encode_multipart_streaming(body) boundary = SecureRandom.urlsafe_base64(60) + closing = [] strio = writable_enum do |y| case body in Hash @@ -478,19 +536,20 @@ class << self case val in Array if val.all? { primitive?(_1) } val.each do |v| - write_multipart_chunk(y, boundary: boundary, key: key, val: v) + write_multipart_chunk(y, boundary: boundary, key: key, val: v, closing: closing) end else - write_multipart_chunk(y, boundary: boundary, key: key, val: val) + write_multipart_chunk(y, boundary: boundary, key: key, val: val, closing: closing) end end else - write_multipart_chunk(y, boundary: boundary, key: nil, val: body) + write_multipart_chunk(y, boundary: boundary, key: nil, val: body, closing: closing) end y << "--#{boundary}--\r\n" end - [boundary, strio] + fused_io = fused_enum(strio) { closing.each(&:call) } + [boundary, fused_io] end # @api private @@ -501,21 +560,21 @@ class << self # @return [Object] def encode_content(headers, body) content_type = headers["content-type"] + body = body.inner if body.is_a?(FinchAPI::Internal::Util::SerializationAdapter) + case [content_type, body] - in [%r{^application/(?:vnd\.api\+)?json}, _] unless body.nil? + in [%r{^application/(?:vnd\.api\+)?json}, Hash | Array | -> { primitive?(_1) }] [headers, JSON.fast_generate(body)] - in [%r{^application/(?:x-)?jsonl}, Enumerable] + in [%r{^application/(?:x-)?jsonl}, Enumerable] unless body.is_a?(StringIO) || body.is_a?(IO) [headers, body.lazy.map { JSON.fast_generate(_1) }] - in [%r{^multipart/form-data}, Hash | IO | StringIO] + in [%r{^multipart/form-data}, Hash | Pathname | StringIO | IO] boundary, strio = encode_multipart_streaming(body) headers = {**headers, "content-type" => "#{content_type}; boundary=#{boundary}"} [headers, strio] - in [_, IO] - [headers, body.tap(&:rewind)] - in [_, StringIO] - [headers, body.string] in [_, Symbol | Numeric] [headers, body.to_s] + in [_, StringIO] + [headers, body.string] else [headers, body] end diff --git a/rbi/lib/finch_api/internal/transport/pooled_net_requester.rbi b/rbi/lib/finch_api/internal/transport/pooled_net_requester.rbi index 07527cdc..cf097783 100644 --- a/rbi/lib/finch_api/internal/transport/pooled_net_requester.rbi +++ b/rbi/lib/finch_api/internal/transport/pooled_net_requester.rbi @@ -35,7 +35,7 @@ module FinchAPI request: FinchAPI::Internal::Transport::PooledNetRequester::RequestShape, blk: T.proc.params(arg0: String).void ) - .returns(Net::HTTPGenericRequest) + .returns([Net::HTTPGenericRequest, T.proc.void]) end def build_request(request, &blk); end end diff --git a/rbi/lib/finch_api/internal/type/array_of.rbi b/rbi/lib/finch_api/internal/type/array_of.rbi index e5a2b0e5..7c072578 100644 --- a/rbi/lib/finch_api/internal/type/array_of.rbi +++ b/rbi/lib/finch_api/internal/type/array_of.rbi @@ -36,11 +36,10 @@ module FinchAPI # @api private sig(:final) do override - .params(value: T.any( - T::Array[T.anything], - T.anything - ), - state: FinchAPI::Internal::Type::Converter::State) + .params( + value: T.any(T::Array[T.anything], T.anything), + state: FinchAPI::Internal::Type::Converter::CoerceState + ) .returns(T.any(T::Array[T.anything], T.anything)) end def coerce(value, state:); end @@ -48,10 +47,13 @@ module FinchAPI # @api private sig(:final) do override - .params(value: T.any(T::Array[T.anything], T.anything)) + .params( + value: T.any(T::Array[T.anything], T.anything), + state: FinchAPI::Internal::Type::Converter::DumpState + ) .returns(T.any(T::Array[T.anything], T.anything)) end - def dump(value); end + def dump(value, state:); end # @api private sig(:final) { returns(Elem) } diff --git a/rbi/lib/finch_api/internal/type/base_model.rbi b/rbi/lib/finch_api/internal/type/base_model.rbi index a5ec046e..d799fd41 100644 --- a/rbi/lib/finch_api/internal/type/base_model.rbi +++ b/rbi/lib/finch_api/internal/type/base_model.rbi @@ -126,7 +126,7 @@ module FinchAPI T::Hash[T.anything, T.anything], T.anything ), - state: FinchAPI::Internal::Type::Converter::State + state: FinchAPI::Internal::Type::Converter::CoerceState ) .returns(T.any(T.attached_class, T.anything)) end @@ -135,10 +135,14 @@ module FinchAPI # @api private sig do override - .params(value: T.any(T.attached_class, T.anything)) + .params(value: T.any( + T.attached_class, + T.anything + ), + state: FinchAPI::Internal::Type::Converter::DumpState) .returns(T.any(T::Hash[T.anything, T.anything], T.anything)) end - def dump(value); end + def dump(value, state:); end end # Returns the raw value associated with the given key, if found. Otherwise, nil is diff --git a/rbi/lib/finch_api/internal/type/boolean.rbi b/rbi/lib/finch_api/internal/type/boolean.rbi index 891b531e..63c9bafc 100644 --- a/rbi/lib/finch_api/internal/type/boolean.rbi +++ b/rbi/lib/finch_api/internal/type/boolean.rbi @@ -22,16 +22,26 @@ module FinchAPI # @api private sig(:final) do override - .params(value: T.any(T::Boolean, T.anything), state: FinchAPI::Internal::Type::Converter::State) + .params(value: T.any( + T::Boolean, + T.anything + ), + state: FinchAPI::Internal::Type::Converter::CoerceState) .returns(T.any(T::Boolean, T.anything)) end def coerce(value, state:); end # @api private sig(:final) do - override.params(value: T.any(T::Boolean, T.anything)).returns(T.any(T::Boolean, T.anything)) + override + .params(value: T.any( + T::Boolean, + T.anything + ), + state: FinchAPI::Internal::Type::Converter::DumpState) + .returns(T.any(T::Boolean, T.anything)) end - def dump(value); end + def dump(value, state:); end end end end diff --git a/rbi/lib/finch_api/internal/type/converter.rbi b/rbi/lib/finch_api/internal/type/converter.rbi index 9b3933bf..1aec8d3e 100644 --- a/rbi/lib/finch_api/internal/type/converter.rbi +++ b/rbi/lib/finch_api/internal/type/converter.rbi @@ -7,7 +7,7 @@ module FinchAPI module Converter Input = T.type_alias { T.any(FinchAPI::Internal::Type::Converter, T::Class[T.anything]) } - State = + CoerceState = T.type_alias do { strictness: T.any(T::Boolean, Symbol), @@ -16,18 +16,23 @@ module FinchAPI } end + DumpState = T.type_alias { {can_retry: T::Boolean} } + # @api private sig do - overridable.params( - value: T.anything, - state: FinchAPI::Internal::Type::Converter::State - ).returns(T.anything) + overridable + .params(value: T.anything, state: FinchAPI::Internal::Type::Converter::CoerceState) + .returns(T.anything) end def coerce(value, state:); end # @api private - sig { overridable.params(value: T.anything).returns(T.anything) } - def dump(value); end + sig do + overridable + .params(value: T.anything, state: FinchAPI::Internal::Type::Converter::DumpState) + .returns(T.anything) + end + def dump(value, state:); end class << self # @api private @@ -62,7 +67,7 @@ module FinchAPI params( target: FinchAPI::Internal::Type::Converter::Input, value: T.anything, - state: FinchAPI::Internal::Type::Converter::State + state: FinchAPI::Internal::Type::Converter::CoerceState ) .returns(T.anything) end @@ -92,9 +97,14 @@ module FinchAPI ); end # @api private sig do - params(target: FinchAPI::Internal::Type::Converter::Input, value: T.anything).returns(T.anything) + params( + target: FinchAPI::Internal::Type::Converter::Input, + value: T.anything, + state: FinchAPI::Internal::Type::Converter::DumpState + ) + .returns(T.anything) end - def self.dump(target, value); end + def self.dump(target, value, state: {can_retry: true}); end end end end diff --git a/rbi/lib/finch_api/internal/type/enum.rbi b/rbi/lib/finch_api/internal/type/enum.rbi index 5e0fb98f..e6228160 100644 --- a/rbi/lib/finch_api/internal/type/enum.rbi +++ b/rbi/lib/finch_api/internal/type/enum.rbi @@ -45,14 +45,18 @@ module FinchAPI Symbol, T.anything ), - state: FinchAPI::Internal::Type::Converter::State) + state: FinchAPI::Internal::Type::Converter::CoerceState) .returns(T.any(Symbol, T.anything)) end def coerce(value, state:); end # @api private - sig { override.params(value: T.any(Symbol, T.anything)).returns(T.any(Symbol, T.anything)) } - def dump(value); end + sig do + override + .params(value: T.any(Symbol, T.anything), state: FinchAPI::Internal::Type::Converter::DumpState) + .returns(T.any(Symbol, T.anything)) + end + def dump(value, state:); end end end end diff --git a/rbi/lib/finch_api/internal/type/hash_of.rbi b/rbi/lib/finch_api/internal/type/hash_of.rbi index bd9524e4..6fb70602 100644 --- a/rbi/lib/finch_api/internal/type/hash_of.rbi +++ b/rbi/lib/finch_api/internal/type/hash_of.rbi @@ -38,7 +38,7 @@ module FinchAPI override .params( value: T.any(T::Hash[T.anything, T.anything], T.anything), - state: FinchAPI::Internal::Type::Converter::State + state: FinchAPI::Internal::Type::Converter::CoerceState ) .returns(T.any(FinchAPI::Internal::AnyHash, T.anything)) end @@ -47,10 +47,13 @@ module FinchAPI # @api private sig(:final) do override - .params(value: T.any(T::Hash[T.anything, T.anything], T.anything)) + .params( + value: T.any(T::Hash[T.anything, T.anything], T.anything), + state: FinchAPI::Internal::Type::Converter::DumpState + ) .returns(T.any(FinchAPI::Internal::AnyHash, T.anything)) end - def dump(value); end + def dump(value, state:); end # @api private sig(:final) { returns(Elem) } diff --git a/rbi/lib/finch_api/internal/type/io_like.rbi b/rbi/lib/finch_api/internal/type/io_like.rbi new file mode 100644 index 00000000..8635fe28 --- /dev/null +++ b/rbi/lib/finch_api/internal/type/io_like.rbi @@ -0,0 +1,47 @@ +# typed: strong + +module FinchAPI + module Internal + module Type + # @api private + # + # Either `Pathname` or `StringIO`. + class IOLike + extend FinchAPI::Internal::Type::Converter + + abstract! + final! + + sig(:final) { params(other: T.anything).returns(T::Boolean) } + def self.===(other); end + + sig(:final) { params(other: T.anything).returns(T::Boolean) } + def self.==(other); end + + class << self + # @api private + sig(:final) do + override + .params( + value: T.any(StringIO, String, T.anything), + state: FinchAPI::Internal::Type::Converter::CoerceState + ) + .returns(T.any(StringIO, T.anything)) + end + def coerce(value, state:); end + + # @api private + sig(:final) do + override + .params( + value: T.any(Pathname, StringIO, IO, String, T.anything), + state: FinchAPI::Internal::Type::Converter::DumpState + ) + .returns(T.any(Pathname, StringIO, IO, String, T.anything)) + end + def dump(value, state:); end + end + end + end + end +end diff --git a/rbi/lib/finch_api/internal/type/union.rbi b/rbi/lib/finch_api/internal/type/union.rbi index dd2bcb5d..cc4e46c6 100644 --- a/rbi/lib/finch_api/internal/type/union.rbi +++ b/rbi/lib/finch_api/internal/type/union.rbi @@ -49,16 +49,19 @@ module FinchAPI # @api private sig do - override.params( - value: T.anything, - state: FinchAPI::Internal::Type::Converter::State - ).returns(T.anything) + override + .params(value: T.anything, state: FinchAPI::Internal::Type::Converter::CoerceState) + .returns(T.anything) end def coerce(value, state:); end # @api private - sig { override.params(value: T.anything).returns(T.anything) } - def dump(value); end + sig do + override + .params(value: T.anything, state: FinchAPI::Internal::Type::Converter::DumpState) + .returns(T.anything) + end + def dump(value, state:); end end end end diff --git a/rbi/lib/finch_api/internal/type/unknown.rbi b/rbi/lib/finch_api/internal/type/unknown.rbi index c3fd193c..678caaf8 100644 --- a/rbi/lib/finch_api/internal/type/unknown.rbi +++ b/rbi/lib/finch_api/internal/type/unknown.rbi @@ -21,16 +21,19 @@ module FinchAPI class << self # @api private sig(:final) do - override.params( - value: T.anything, - state: FinchAPI::Internal::Type::Converter::State - ).returns(T.anything) + override + .params(value: T.anything, state: FinchAPI::Internal::Type::Converter::CoerceState) + .returns(T.anything) end def coerce(value, state:); end # @api private - sig(:final) { override.params(value: T.anything).returns(T.anything) } - def dump(value); end + sig(:final) do + override + .params(value: T.anything, state: FinchAPI::Internal::Type::Converter::DumpState) + .returns(T.anything) + end + def dump(value, state:); end end end end diff --git a/rbi/lib/finch_api/internal/util.rbi b/rbi/lib/finch_api/internal/util.rbi index bb5d0abc..3eb17e54 100644 --- a/rbi/lib/finch_api/internal/util.rbi +++ b/rbi/lib/finch_api/internal/util.rbi @@ -140,10 +140,34 @@ module FinchAPI def normalized_headers(*headers); end end + # @api private + class SerializationAdapter + sig { returns(T.any(Pathname, IO)) } + attr_reader :inner + + sig { params(a: T.anything).returns(String) } + def to_json(*a); end + + sig { params(a: T.anything).returns(String) } + def to_yaml(*a); end + + # @api private + sig { params(inner: T.any(Pathname, IO)).returns(T.attached_class) } + def self.new(inner); end + end + # @api private # # An adapter that satisfies the IO interface required by `::IO.copy_stream` class ReadIOAdapter + # @api private + sig { returns(T.nilable(T::Boolean)) } + def close?; end + + # @api private + sig { void } + def close; end + # @api private sig { params(max_len: T.nilable(Integer)).returns(String) } private def read_enum(max_len); end @@ -155,12 +179,12 @@ module FinchAPI # @api private sig do params( - stream: T.any(String, IO, StringIO, T::Enumerable[String]), + src: T.any(String, Pathname, StringIO, T::Enumerable[String]), blk: T.proc.params(arg0: String).void ) .returns(T.attached_class) end - def self.new(stream, &blk); end + def self.new(src, &blk); end end class << self @@ -171,9 +195,16 @@ module FinchAPI class << self # @api private sig do - params(y: Enumerator::Yielder, boundary: String, key: T.any(Symbol, String), val: T.anything).void + params( + y: Enumerator::Yielder, + boundary: String, + key: T.any(Symbol, String), + val: T.anything, + closing: T::Array[T.proc.void] + ) + .void end - private def write_multipart_chunk(y, boundary:, key:, val:); end + private def write_multipart_chunk(y, boundary:, key:, val:, closing:); end # @api private sig { params(body: T.anything).returns([String, T::Enumerable[String]]) } diff --git a/sig/finch_api/internal/transport/pooled_net_requester.rbs b/sig/finch_api/internal/transport/pooled_net_requester.rbs index ac8b0512..a6fcef47 100644 --- a/sig/finch_api/internal/transport/pooled_net_requester.rbs +++ b/sig/finch_api/internal/transport/pooled_net_requester.rbs @@ -21,7 +21,7 @@ module FinchAPI FinchAPI::Internal::Transport::PooledNetRequester::request request ) { (String arg0) -> void - } -> top + } -> [top, (^-> void)] private def with_pool: ( URI::Generic url, diff --git a/sig/finch_api/internal/type/array_of.rbs b/sig/finch_api/internal/type/array_of.rbs index 9e62e811..78fff754 100644 --- a/sig/finch_api/internal/type/array_of.rbs +++ b/sig/finch_api/internal/type/array_of.rbs @@ -17,10 +17,13 @@ module FinchAPI def coerce: ( ::Array[top] | top value, - state: FinchAPI::Internal::Type::Converter::state + state: FinchAPI::Internal::Type::Converter::coerce_state ) -> (::Array[top] | top) - def dump: (::Array[top] | top value) -> (::Array[top] | top) + def dump: ( + ::Array[top] | top value, + state: FinchAPI::Internal::Type::Converter::dump_state + ) -> (::Array[top] | top) def item_type: -> Elem diff --git a/sig/finch_api/internal/type/base_model.rbs b/sig/finch_api/internal/type/base_model.rbs index b3782d4b..64386130 100644 --- a/sig/finch_api/internal/type/base_model.rbs +++ b/sig/finch_api/internal/type/base_model.rbs @@ -53,10 +53,13 @@ module FinchAPI def self.coerce: ( FinchAPI::Internal::Type::BaseModel | ::Hash[top, top] | top value, - state: FinchAPI::Internal::Type::Converter::state + state: FinchAPI::Internal::Type::Converter::coerce_state ) -> (instance | top) - def self.dump: (instance | top value) -> (::Hash[top, top] | top) + def self.dump: ( + instance | top value, + state: FinchAPI::Internal::Type::Converter::dump_state + ) -> (::Hash[top, top] | top) def []: (Symbol key) -> top? diff --git a/sig/finch_api/internal/type/boolean.rbs b/sig/finch_api/internal/type/boolean.rbs index 53e3fc9a..3c740121 100644 --- a/sig/finch_api/internal/type/boolean.rbs +++ b/sig/finch_api/internal/type/boolean.rbs @@ -10,10 +10,13 @@ module FinchAPI def self.coerce: ( bool | top value, - state: FinchAPI::Internal::Type::Converter::state + state: FinchAPI::Internal::Type::Converter::coerce_state ) -> (bool | top) - def self.dump: (bool | top value) -> (bool | top) + def self.dump: ( + bool | top value, + state: FinchAPI::Internal::Type::Converter::dump_state + ) -> (bool | top) end end end diff --git a/sig/finch_api/internal/type/converter.rbs b/sig/finch_api/internal/type/converter.rbs index 6ef60cff..d0c218c2 100644 --- a/sig/finch_api/internal/type/converter.rbs +++ b/sig/finch_api/internal/type/converter.rbs @@ -4,19 +4,24 @@ module FinchAPI module Converter type input = FinchAPI::Internal::Type::Converter | Class - type state = + type coerce_state = { strictness: bool | :strong, exactness: { yes: Integer, no: Integer, maybe: Integer }, branched: Integer } + type dump_state = { can_retry: bool } + def coerce: ( top value, - state: FinchAPI::Internal::Type::Converter::state + state: FinchAPI::Internal::Type::Converter::coerce_state ) -> top - def dump: (top value) -> top + def dump: ( + top value, + state: FinchAPI::Internal::Type::Converter::dump_state + ) -> top def self.type_info: ( { @@ -31,12 +36,13 @@ module FinchAPI def self.coerce: ( FinchAPI::Internal::Type::Converter::input target, top value, - ?state: FinchAPI::Internal::Type::Converter::state + ?state: FinchAPI::Internal::Type::Converter::coerce_state ) -> top def self.dump: ( FinchAPI::Internal::Type::Converter::input target, - top value + top value, + ?state: FinchAPI::Internal::Type::Converter::dump_state ) -> top end end diff --git a/sig/finch_api/internal/type/enum.rbs b/sig/finch_api/internal/type/enum.rbs index 2205191c..78acebb2 100644 --- a/sig/finch_api/internal/type/enum.rbs +++ b/sig/finch_api/internal/type/enum.rbs @@ -14,10 +14,13 @@ module FinchAPI def coerce: ( String | Symbol | top value, - state: FinchAPI::Internal::Type::Converter::state + state: FinchAPI::Internal::Type::Converter::coerce_state ) -> (Symbol | top) - def dump: (Symbol | top value) -> (Symbol | top) + def dump: ( + Symbol | top value, + state: FinchAPI::Internal::Type::Converter::dump_state + ) -> (Symbol | top) end end end diff --git a/sig/finch_api/internal/type/hash_of.rbs b/sig/finch_api/internal/type/hash_of.rbs index e8aa8e84..9add22eb 100644 --- a/sig/finch_api/internal/type/hash_of.rbs +++ b/sig/finch_api/internal/type/hash_of.rbs @@ -17,10 +17,13 @@ module FinchAPI def coerce: ( ::Hash[top, top] | top value, - state: FinchAPI::Internal::Type::Converter::state + state: FinchAPI::Internal::Type::Converter::coerce_state ) -> (::Hash[Symbol, top] | top) - def dump: (::Hash[top, top] | top value) -> (::Hash[Symbol, top] | top) + def dump: ( + ::Hash[top, top] | top value, + state: FinchAPI::Internal::Type::Converter::dump_state + ) -> (::Hash[Symbol, top] | top) def item_type: -> Elem diff --git a/sig/finch_api/internal/type/io_like.rbs b/sig/finch_api/internal/type/io_like.rbs new file mode 100644 index 00000000..3af3baed --- /dev/null +++ b/sig/finch_api/internal/type/io_like.rbs @@ -0,0 +1,23 @@ +module FinchAPI + module Internal + module Type + class IOLike + extend FinchAPI::Internal::Type::Converter + + def self.===: (top other) -> bool + + def self.==: (top other) -> bool + + def self.coerce: ( + StringIO | String | top value, + state: FinchAPI::Internal::Type::Converter::coerce_state + ) -> (StringIO | top) + + def self.dump: ( + Pathname | StringIO | IO | String | top value, + state: FinchAPI::Internal::Type::Converter::dump_state + ) -> (Pathname | StringIO | IO | String | top) + end + end + end +end diff --git a/sig/finch_api/internal/type/union.rbs b/sig/finch_api/internal/type/union.rbs index 7797043d..d0678994 100644 --- a/sig/finch_api/internal/type/union.rbs +++ b/sig/finch_api/internal/type/union.rbs @@ -32,10 +32,13 @@ module FinchAPI def coerce: ( top value, - state: FinchAPI::Internal::Type::Converter::state + state: FinchAPI::Internal::Type::Converter::coerce_state ) -> top - def dump: (top value) -> top + def dump: ( + top value, + state: FinchAPI::Internal::Type::Converter::dump_state + ) -> top end end end diff --git a/sig/finch_api/internal/type/unknown.rbs b/sig/finch_api/internal/type/unknown.rbs index 29a8a0de..e7ab6e48 100644 --- a/sig/finch_api/internal/type/unknown.rbs +++ b/sig/finch_api/internal/type/unknown.rbs @@ -10,10 +10,13 @@ module FinchAPI def self.coerce: ( top value, - state: FinchAPI::Internal::Type::Converter::state + state: FinchAPI::Internal::Type::Converter::coerce_state ) -> top - def self.dump: (top value) -> top + def self.dump: ( + top value, + state: FinchAPI::Internal::Type::Converter::dump_state + ) -> top end end end diff --git a/sig/finch_api/internal/util.rbs b/sig/finch_api/internal/util.rbs index d22c6682..5a653254 100644 --- a/sig/finch_api/internal/util.rbs +++ b/sig/finch_api/internal/util.rbs @@ -73,13 +73,27 @@ module FinchAPI | ::Array[(String | Integer)?])?] headers ) -> ::Hash[String, String] + class SerializationAdapter + attr_reader inner: Pathname | IO + + def to_json: (*top a) -> String + + def to_yaml: (*top a) -> String + + def initialize: (Pathname | IO inner) -> void + end + class ReadIOAdapter + def close?: -> bool? + + def close: -> void + private def read_enum: (Integer? max_len) -> String def read: (?Integer? max_len, ?String? out_string) -> String? def initialize: ( - String | IO | StringIO | Enumerable[String] stream + String | Pathname | StringIO | Enumerable[String] src ) { (String arg0) -> void } -> void @@ -93,7 +107,8 @@ module FinchAPI Enumerator::Yielder y, boundary: String, key: Symbol | String, - val: top + val: top, + closing: ::Array[^-> void] ) -> void def self?.encode_multipart_streaming: ( diff --git a/test/finch_api/internal/type/base_model_test.rb b/test/finch_api/internal/type/base_model_test.rb index 877cac02..b9053385 100644 --- a/test/finch_api/internal/type/base_model_test.rb +++ b/test/finch_api/internal/type/base_model_test.rb @@ -92,7 +92,9 @@ def test_dump [String, "one"] => "one", [String, :one] => :one, [:a, :b] => :b, - [:a, "a"] => "a" + [:a, "a"] => "a", + [String, StringIO.new("one")] => "one", + [String, Pathname(__FILE__)] => FinchAPI::Internal::Util::SerializationAdapter } cases.each do @@ -122,6 +124,34 @@ def test_coerce_errors end end end + + def test_dump_retry + types = [ + FinchAPI::Internal::Type::Unknown, + FinchAPI::Internal::Type::Boolean, + A, + H, + E, + U, + B + ] + Pathname(__FILE__).open do |fd| + cases = [ + fd, + [fd], + {a: fd}, + {a: {b: fd}} + ] + types.product(cases).each do |target, input| + state = {can_retry: true} + FinchAPI::Internal::Type::Converter.dump(target, input, state: state) + + assert_pattern do + state => {can_retry: false} + end + end + end + end end class FinchAPI::Test::EnumModelTest < Minitest::Test diff --git a/test/finch_api/internal/util_test.rb b/test/finch_api/internal/util_test.rb index 981afb62..e981a2c7 100644 --- a/test/finch_api/internal/util_test.rb +++ b/test/finch_api/internal/util_test.rb @@ -160,11 +160,12 @@ def test_joining_queries class FinchAPI::Test::UtilFormDataEncodingTest < Minitest::Test class FakeCGI < CGI def initialize(headers, io) + encoded = io.to_a @ctype = headers["content-type"] # rubocop:disable Lint/EmptyBlock - @io = FinchAPI::Internal::Util::ReadIOAdapter.new(io) {} + @io = FinchAPI::Internal::Util::ReadIOAdapter.new(encoded.to_enum) {} # rubocop:enable Lint/EmptyBlock - @c_len = io.to_a.join.bytesize.to_s + @c_len = encoded.join.bytesize.to_s super() end @@ -180,15 +181,17 @@ def env_table end def test_file_encode + file = Pathname(__FILE__) headers = {"content-type" => "multipart/form-data"} cases = { - StringIO.new("abc") => "abc" + StringIO.new("abc") => "abc", + file => /^class FinchAPI/ } cases.each do |body, val| encoded = FinchAPI::Internal::Util.encode_content(headers, body) cgi = FakeCGI.new(*encoded) assert_pattern do - cgi[""] => ^val + cgi[""].read => ^val end end end @@ -199,13 +202,16 @@ def test_hash_encode {a: 2, b: 3} => {"a" => "2", "b" => "3"}, {a: 2, b: nil} => {"a" => "2", "b" => "null"}, {a: 2, b: [1, 2, 3]} => {"a" => "2", "b" => "1"}, - {file: StringIO.new("a")} => {"file" => "a"} + {strio: StringIO.new("a")} => {"strio" => "a"}, + {pathname: Pathname(__FILE__)} => {"pathname" => -> { _1.read in /^class FinchAPI/ }} } cases.each do |body, testcase| encoded = FinchAPI::Internal::Util.encode_content(headers, body) cgi = FakeCGI.new(*encoded) testcase.each do |key, val| - assert_equal(val, cgi[key]) + assert_pattern do + cgi[key] => ^val + end end end end From 908b8bab442d72e3061461b66b130f852e09949d Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 8 Apr 2025 22:30:05 +0000 Subject: [PATCH 04/16] fix: raise connection error for errors that result from HTTP transports (#133) --- lib/finch_api/internal/transport/base_client.rb | 2 +- lib/finch_api/internal/transport/pooled_net_requester.rb | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/finch_api/internal/transport/base_client.rb b/lib/finch_api/internal/transport/base_client.rb index e45306a9..e2e16fd8 100644 --- a/lib/finch_api/internal/transport/base_client.rb +++ b/lib/finch_api/internal/transport/base_client.rb @@ -380,7 +380,7 @@ def initialize( in (400..) | FinchAPI::Errors::APIConnectionError self.class.reap_connection!(status, stream: stream) - delay = retry_delay(response, retry_count: retry_count) + delay = retry_delay(response || {}, retry_count: retry_count) sleep(delay) send_request( diff --git a/lib/finch_api/internal/transport/pooled_net_requester.rb b/lib/finch_api/internal/transport/pooled_net_requester.rb index 3d13cc3f..491f8c28 100644 --- a/lib/finch_api/internal/transport/pooled_net_requester.rb +++ b/lib/finch_api/internal/transport/pooled_net_requester.rb @@ -123,9 +123,12 @@ def build_request(request, &blk) def execute(request) url, deadline = request.fetch_values(:url, :deadline) + req = nil eof = false finished = false closing = nil + + # rubocop:disable Metrics/BlockLength enum = Enumerator.new do |y| with_pool(url, deadline: deadline) do |conn| next if finished @@ -155,8 +158,11 @@ def execute(request) end end rescue Timeout::Error - raise FinchAPI::Errors::APITimeoutError + raise FinchAPI::Errors::APITimeoutError.new(url: url, request: req) + rescue StandardError + raise FinchAPI::Errors::APIConnectionError.new(url: url, request: req) end + # rubocop:enable Metrics/BlockLength conn, _, response = enum.next body = FinchAPI::Internal::Util.fused_enum(enum, external: true) do From 954fa162fb447df7392082c5b7676f205701b18a Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 8 Apr 2025 23:02:55 +0000 Subject: [PATCH 05/16] chore: loosen const and integer coercion rules (#134) --- lib/finch_api/internal/type/converter.rb | 24 ++++++++++++------- .../internal/type/base_model_test.rb | 10 ++++---- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/lib/finch_api/internal/type/converter.rb b/lib/finch_api/internal/type/converter.rb index ef2cce0c..bc2f1b9e 100644 --- a/lib/finch_api/internal/type/converter.rb +++ b/lib/finch_api/internal/type/converter.rb @@ -149,9 +149,9 @@ def coerce( if value.is_a?(Integer) exactness[:yes] += 1 return value - elsif strictness == :strong + elsif strictness == :strong && Integer(value, exception: false) != value message = "no implicit conversion of #{value.class} into #{target.inspect}" - raise TypeError.new(message) + raise value.is_a?(Numeric) ? ArgumentError.new(message) : TypeError.new(message) else Kernel.then do return Integer(value).tap { exactness[:maybe] += 1 } @@ -197,12 +197,20 @@ def coerce( else end in Symbol - if (value.is_a?(Symbol) || value.is_a?(String)) && value.to_sym == target - exactness[:yes] += 1 - return target - elsif strictness == :strong - message = "cannot convert non-matching #{value.class} into #{target.inspect}" - raise ArgumentError.new(message) + case value + in Symbol | String + if value.to_sym == target + exactness[:yes] += 1 + return target + else + exactness[:maybe] += 1 + return value + end + else + if strictness == :strong + message = "cannot convert non-matching #{value.class} into #{target.inspect}" + raise ArgumentError.new(message) + end end else end diff --git a/test/finch_api/internal/type/base_model_test.rb b/test/finch_api/internal/type/base_model_test.rb index b9053385..978ef2c0 100644 --- a/test/finch_api/internal/type/base_model_test.rb +++ b/test/finch_api/internal/type/base_model_test.rb @@ -111,7 +111,6 @@ def test_coerce_errors [Integer, "one"] => TypeError, [Float, "one"] => TypeError, [String, Time] => TypeError, - [:a, "one"] => ArgumentError, [Date, "one"] => ArgumentError, [Time, "one"] => ArgumentError } @@ -346,7 +345,7 @@ def test_coerce [M2, {a: "1990-09-19", c: nil}] => [{yes: 2, maybe: 2}, {a: "1990-09-19", c: nil}], [M3, {c: "c", d: "d"}] => [{yes: 3}, {c: :c, d: :d}], - [M3, {c: "d", d: "c"}] => [{yes: 1, no: 2}, {c: "d", d: "c"}], + [M3, {c: "d", d: "c"}] => [{yes: 1, maybe: 2}, {c: "d", d: "c"}], [M4, {c: 2}] => [{yes: 5}, {c: 2}], [M4, {a: "1", c: 2}] => [{yes: 4, maybe: 1}, {a: "1", c: 2}], @@ -404,7 +403,8 @@ def test_accessors cases = { M2.new({a: "1990-09-19", b: "1"}) => {a: Time.new(1990, 9, 19), b: TypeError}, M2.new(a: "one", b: "one") => {a: ArgumentError, b: TypeError}, - M2.new(a: nil, b: 2.0) => {a: TypeError, b: TypeError}, + M2.new(a: nil, b: 2.0) => {a: TypeError}, + M2.new(a: nil, b: 2.2) => {a: TypeError, b: ArgumentError}, M3.new => {d: :d}, M3.new(d: 1) => {d: ArgumentError}, @@ -520,8 +520,8 @@ def test_coerce [U0, :""] => [{no: 1}, 0, :""], [U1, "a"] => [{yes: 1}, 1, :a], - [U1, "2"] => [{maybe: 1}, 2, 2], - [U1, :b] => [{no: 1}, 2, :b], + [U1, "2"] => [{maybe: 1}, 2, "2"], + [U1, :b] => [{maybe: 1}, 2, :b], [U2, {type: :a}] => [{yes: 3}, 0, {t: :a}], [U2, {type: "b"}] => [{yes: 3}, 0, {type: :b}], From 52953bd7d499b595d8632c67db0a2c4ec418be7d Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 9 Apr 2025 04:15:29 +0000 Subject: [PATCH 06/16] chore: ensure readme.md is bumped when release please updates versions (#135) --- release-please-config.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/release-please-config.json b/release-please-config.json index 0ce29b83..f23f174d 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -64,5 +64,8 @@ "minupalaniappan" ], "release-type": "ruby", - "version-file": "lib/finch_api/version.rb" + "version-file": "lib/finch_api/version.rb", + "extra-files": [ + "README.md" + ] } \ No newline at end of file From e1bd1b517f2ef5acba32de6490c581cde6b5a88f Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 9 Apr 2025 13:49:07 +0000 Subject: [PATCH 07/16] feat(api): api update (#136) --- .stats.yml | 4 +- lib/finch_api.rb | 4 +- ...enefit_list_supported_benefits_response.rb | 129 ++++++++++ .../hris/benefits/enrolled_individual.rb | 97 -------- .../individual_enroll_many_response.rb | 24 ++ .../hris/benefits/unenrolled_individual.rb | 79 ------- .../hris/create_company_benefits_response.rb | 8 +- .../models/hris/supported_benefit.rb | 9 - .../hris/update_company_benefit_response.rb | 8 +- lib/finch_api/resources/hris/benefits.rb | 4 +- .../resources/hris/benefits/individuals.rb | 9 +- ...nefit_list_supported_benefits_response.rbi | 220 ++++++++++++++++++ .../hris/benefits/enrolled_individual.rbi | 106 --------- .../individual_enroll_many_response.rbi | 20 ++ .../hris/benefits/unenrolled_individual.rbi | 84 ------- .../hris/create_company_benefits_response.rbi | 9 +- .../models/hris/supported_benefit.rbi | 35 +-- .../hris/update_company_benefit_response.rbi | 9 +- rbi/lib/finch_api/resources/hris/benefits.rbi | 2 +- .../resources/hris/benefits/individuals.rbi | 4 +- ...nefit_list_supported_benefits_response.rbs | 81 +++++++ .../hris/benefits/enrolled_individual.rbs | 71 ------ .../individual_enroll_many_response.rbs | 17 ++ .../hris/benefits/unenrolled_individual.rbs | 56 ----- .../hris/create_company_benefits_response.rbs | 7 +- .../models/hris/supported_benefit.rbs | 8 +- .../hris/update_company_benefit_response.rbs | 7 +- sig/finch_api/resources/hris/benefits.rbs | 2 +- .../resources/hris/benefits/individuals.rbs | 4 +- .../hris/benefits/individuals_test.rb | 25 +- .../finch_api/resources/hris/benefits_test.rb | 15 +- 31 files changed, 567 insertions(+), 590 deletions(-) create mode 100644 lib/finch_api/models/hris/benefit_list_supported_benefits_response.rb delete mode 100644 lib/finch_api/models/hris/benefits/enrolled_individual.rb create mode 100644 lib/finch_api/models/hris/benefits/individual_enroll_many_response.rb delete mode 100644 lib/finch_api/models/hris/benefits/unenrolled_individual.rb create mode 100644 rbi/lib/finch_api/models/hris/benefit_list_supported_benefits_response.rbi delete mode 100644 rbi/lib/finch_api/models/hris/benefits/enrolled_individual.rbi create mode 100644 rbi/lib/finch_api/models/hris/benefits/individual_enroll_many_response.rbi delete mode 100644 rbi/lib/finch_api/models/hris/benefits/unenrolled_individual.rbi create mode 100644 sig/finch_api/models/hris/benefit_list_supported_benefits_response.rbs delete mode 100644 sig/finch_api/models/hris/benefits/enrolled_individual.rbs create mode 100644 sig/finch_api/models/hris/benefits/individual_enroll_many_response.rbs delete mode 100644 sig/finch_api/models/hris/benefits/unenrolled_individual.rbs diff --git a/.stats.yml b/.stats.yml index a45a587e..950c125e 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-14d375aab89e6b212fe459805a42d6ea7d7da8eae2037ae710a187d06911be1d.yml -openapi_spec_hash: 08b86ecbec3323717d48e4aaee48ed54 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-8c83f0eae70d2a02ed3e2059fc251affdccd2f848f45445e4fed64dfd9ca5985.yml +openapi_spec_hash: 2523952a32436e3c7fd3b55508c2e7ee config_hash: ce10384813f68ba3fed61c7b601b396b diff --git a/lib/finch_api.rb b/lib/finch_api.rb index 1c9cc44d..d4bf6064 100644 --- a/lib/finch_api.rb +++ b/lib/finch_api.rb @@ -80,15 +80,15 @@ require_relative "finch_api/models/hris/benefit_frequency" require_relative "finch_api/models/hris/benefit_list_params" require_relative "finch_api/models/hris/benefit_list_supported_benefits_params" +require_relative "finch_api/models/hris/benefit_list_supported_benefits_response" require_relative "finch_api/models/hris/benefit_retrieve_params" -require_relative "finch_api/models/hris/benefits/enrolled_individual" require_relative "finch_api/models/hris/benefits/individual_benefit" require_relative "finch_api/models/hris/benefits/individual_enrolled_ids_params" require_relative "finch_api/models/hris/benefits/individual_enrolled_ids_response" require_relative "finch_api/models/hris/benefits/individual_enroll_many_params" +require_relative "finch_api/models/hris/benefits/individual_enroll_many_response" require_relative "finch_api/models/hris/benefits/individual_retrieve_many_benefits_params" require_relative "finch_api/models/hris/benefits/individual_unenroll_many_params" -require_relative "finch_api/models/hris/benefits/unenrolled_individual" require_relative "finch_api/models/hris/benefits_support" require_relative "finch_api/models/hris/benefit_type" require_relative "finch_api/models/hris/benefit_update_params" diff --git a/lib/finch_api/models/hris/benefit_list_supported_benefits_response.rb b/lib/finch_api/models/hris/benefit_list_supported_benefits_response.rb new file mode 100644 index 00000000..225bf8fe --- /dev/null +++ b/lib/finch_api/models/hris/benefit_list_supported_benefits_response.rb @@ -0,0 +1,129 @@ +# frozen_string_literal: true + +module FinchAPI + module Models + module HRIS + # @see FinchAPI::Resources::HRIS::Benefits#list_supported_benefits + class BenefitListSupportedBenefitsResponse < FinchAPI::Internal::Type::BaseModel + # @!attribute annual_maximum + # Whether the provider supports an annual maximum for this benefit. + # + # @return [Boolean, nil] + optional :annual_maximum, FinchAPI::Internal::Type::Boolean, nil?: true + + # @!attribute catch_up + # Whether the provider supports catch up for this benefit. This field will only be + # true for retirement benefits. + # + # @return [Boolean, nil] + optional :catch_up, FinchAPI::Internal::Type::Boolean, nil?: true + + # @!attribute company_contribution + # Supported contribution types. An empty array indicates contributions are not + # supported. + # + # @return [Array, nil] + optional :company_contribution, + -> { FinchAPI::Internal::Type::ArrayOf[enum: FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::CompanyContribution, nil?: true] }, + nil?: true + + # @!attribute description + # + # @return [String, nil] + optional :description, String, nil?: true + + # @!attribute employee_deduction + # Supported deduction types. An empty array indicates deductions are not + # supported. + # + # @return [Array, nil] + optional :employee_deduction, + -> { FinchAPI::Internal::Type::ArrayOf[enum: FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::EmployeeDeduction, nil?: true] }, + nil?: true + + # @!attribute [r] frequencies + # The list of frequencies supported by the provider for this benefit + # + # @return [Array, nil] + optional :frequencies, + -> { FinchAPI::Internal::Type::ArrayOf[enum: FinchAPI::Models::HRIS::BenefitFrequency, nil?: true] } + + # @!parse + # # @return [Array] + # attr_writer :frequencies + + # @!attribute hsa_contribution_limit + # Whether the provider supports HSA contribution limits. Empty if this feature is + # not supported for the benefit. This array only has values for HSA benefits. + # + # @return [Array, nil] + optional :hsa_contribution_limit, + -> { FinchAPI::Internal::Type::ArrayOf[enum: FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::HsaContributionLimit, nil?: true] }, + nil?: true + + # @!parse + # # @param annual_maximum [Boolean, nil] + # # @param catch_up [Boolean, nil] + # # @param company_contribution [Array, nil] + # # @param description [String, nil] + # # @param employee_deduction [Array, nil] + # # @param frequencies [Array] + # # @param hsa_contribution_limit [Array, nil] + # # + # def initialize( + # annual_maximum: nil, + # catch_up: nil, + # company_contribution: nil, + # description: nil, + # employee_deduction: nil, + # frequencies: nil, + # hsa_contribution_limit: nil, + # ** + # ) + # super + # end + + # def initialize: (Hash | FinchAPI::Internal::Type::BaseModel) -> void + + module CompanyContribution + extend FinchAPI::Internal::Type::Enum + + FIXED = :fixed + PERCENT = :percent + + finalize! + + # @!parse + # # @return [Array] + # def self.values; end + end + + module EmployeeDeduction + extend FinchAPI::Internal::Type::Enum + + FIXED = :fixed + PERCENT = :percent + + finalize! + + # @!parse + # # @return [Array] + # def self.values; end + end + + module HsaContributionLimit + extend FinchAPI::Internal::Type::Enum + + INDIVIDUAL = :individual + FAMILY = :family + + finalize! + + # @!parse + # # @return [Array] + # def self.values; end + end + end + end + end +end diff --git a/lib/finch_api/models/hris/benefits/enrolled_individual.rb b/lib/finch_api/models/hris/benefits/enrolled_individual.rb deleted file mode 100644 index 92175eff..00000000 --- a/lib/finch_api/models/hris/benefits/enrolled_individual.rb +++ /dev/null @@ -1,97 +0,0 @@ -# frozen_string_literal: true - -module FinchAPI - module Models - module HRIS - module Benefits - # @see FinchAPI::Resources::HRIS::Benefits::Individuals#enroll_many - class EnrolledIndividual < FinchAPI::Internal::Type::BaseModel - # @!attribute [r] body - # - # @return [FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Body, nil] - optional :body, -> { FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Body } - - # @!parse - # # @return [FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Body] - # attr_writer :body - - # @!attribute [r] code - # HTTP status code. Either 201 or 200 - # - # @return [Integer, FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Code, nil] - optional :code, enum: -> { FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Code } - - # @!parse - # # @return [Integer, FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Code] - # attr_writer :code - - # @!attribute [r] individual_id - # - # @return [String, nil] - optional :individual_id, String - - # @!parse - # # @return [String] - # attr_writer :individual_id - - # @!parse - # # @param body [FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Body] - # # @param code [Integer, FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Code] - # # @param individual_id [String] - # # - # def initialize(body: nil, code: nil, individual_id: nil, **) = super - - # def initialize: (Hash | FinchAPI::Internal::Type::BaseModel) -> void - - # @see FinchAPI::Models::HRIS::Benefits::EnrolledIndividual#body - class Body < FinchAPI::Internal::Type::BaseModel - # @!attribute finch_code - # A descriptive identifier for the response. - # - # @return [String, nil] - optional :finch_code, String, nil?: true - - # @!attribute message - # Short description in English that provides more information about the response. - # - # @return [String, nil] - optional :message, String, nil?: true - - # @!attribute name - # Identifier indicating whether the benefit was newly enrolled or updated. - # - # @return [String, nil] - optional :name, String, nil?: true - - # @!parse - # # @param finch_code [String, nil] - # # @param message [String, nil] - # # @param name [String, nil] - # # - # def initialize(finch_code: nil, message: nil, name: nil, **) = super - - # def initialize: (Hash | FinchAPI::Internal::Type::BaseModel) -> void - end - - # HTTP status code. Either 201 or 200 - # - # @see FinchAPI::Models::HRIS::Benefits::EnrolledIndividual#code - module Code - extend FinchAPI::Internal::Type::Enum - - OK = 200 - CREATED = 201 - NOT_FOUND = 404 - FORBIDDEN = 403 - - finalize! - - # @!parse - # # @return [Array] - # def self.values; end - end - end - end - end - end -end diff --git a/lib/finch_api/models/hris/benefits/individual_enroll_many_response.rb b/lib/finch_api/models/hris/benefits/individual_enroll_many_response.rb new file mode 100644 index 00000000..13dabf51 --- /dev/null +++ b/lib/finch_api/models/hris/benefits/individual_enroll_many_response.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +module FinchAPI + module Models + module HRIS + module Benefits + # @see FinchAPI::Resources::HRIS::Benefits::Individuals#enroll_many + class IndividualEnrollManyResponse < FinchAPI::Internal::Type::BaseModel + # @!attribute job_id + # + # @return [String] + required :job_id, String + + # @!parse + # # @param job_id [String] + # # + # def initialize(job_id:, **) = super + + # def initialize: (Hash | FinchAPI::Internal::Type::BaseModel) -> void + end + end + end + end +end diff --git a/lib/finch_api/models/hris/benefits/unenrolled_individual.rb b/lib/finch_api/models/hris/benefits/unenrolled_individual.rb deleted file mode 100644 index 723d35e9..00000000 --- a/lib/finch_api/models/hris/benefits/unenrolled_individual.rb +++ /dev/null @@ -1,79 +0,0 @@ -# frozen_string_literal: true - -module FinchAPI - module Models - module HRIS - module Benefits - # @see FinchAPI::Resources::HRIS::Benefits::Individuals#unenroll_many - class UnenrolledIndividual < FinchAPI::Internal::Type::BaseModel - # @!attribute [r] body - # - # @return [FinchAPI::Models::HRIS::Benefits::UnenrolledIndividual::Body, nil] - optional :body, -> { FinchAPI::Models::HRIS::Benefits::UnenrolledIndividual::Body } - - # @!parse - # # @return [FinchAPI::Models::HRIS::Benefits::UnenrolledIndividual::Body] - # attr_writer :body - - # @!attribute [r] code - # HTTP status code - # - # @return [Integer, nil] - optional :code, Integer - - # @!parse - # # @return [Integer] - # attr_writer :code - - # @!attribute [r] individual_id - # - # @return [String, nil] - optional :individual_id, String - - # @!parse - # # @return [String] - # attr_writer :individual_id - - # @!parse - # # @param body [FinchAPI::Models::HRIS::Benefits::UnenrolledIndividual::Body] - # # @param code [Integer] - # # @param individual_id [String] - # # - # def initialize(body: nil, code: nil, individual_id: nil, **) = super - - # def initialize: (Hash | FinchAPI::Internal::Type::BaseModel) -> void - - # @see FinchAPI::Models::HRIS::Benefits::UnenrolledIndividual#body - class Body < FinchAPI::Internal::Type::BaseModel - # @!attribute finch_code - # A descriptive identifier for the response. - # - # @return [String, nil] - optional :finch_code, String, nil?: true - - # @!attribute message - # Short description in English that provides more information about the response. - # - # @return [String, nil] - optional :message, String, nil?: true - - # @!attribute name - # Identifier indicating whether the benefit was newly enrolled or updated. - # - # @return [String, nil] - optional :name, String, nil?: true - - # @!parse - # # @param finch_code [String, nil] - # # @param message [String, nil] - # # @param name [String, nil] - # # - # def initialize(finch_code: nil, message: nil, name: nil, **) = super - - # def initialize: (Hash | FinchAPI::Internal::Type::BaseModel) -> void - end - end - end - end - end -end diff --git a/lib/finch_api/models/hris/create_company_benefits_response.rb b/lib/finch_api/models/hris/create_company_benefits_response.rb index 95be88ab..b8da4d62 100644 --- a/lib/finch_api/models/hris/create_company_benefits_response.rb +++ b/lib/finch_api/models/hris/create_company_benefits_response.rb @@ -11,10 +11,16 @@ class CreateCompanyBenefitsResponse < FinchAPI::Internal::Type::BaseModel # @return [String] required :benefit_id, String + # @!attribute job_id + # + # @return [String] + required :job_id, String + # @!parse # # @param benefit_id [String] + # # @param job_id [String] # # - # def initialize(benefit_id:, **) = super + # def initialize(benefit_id:, job_id:, **) = super # def initialize: (Hash | FinchAPI::Internal::Type::BaseModel) -> void end diff --git a/lib/finch_api/models/hris/supported_benefit.rb b/lib/finch_api/models/hris/supported_benefit.rb index 256e87cd..cc5cac2a 100644 --- a/lib/finch_api/models/hris/supported_benefit.rb +++ b/lib/finch_api/models/hris/supported_benefit.rb @@ -3,7 +3,6 @@ module FinchAPI module Models module HRIS - # @see FinchAPI::Resources::HRIS::Benefits#list_supported_benefits class SupportedBenefit < FinchAPI::Internal::Type::BaseModel # @!attribute annual_maximum # Whether the provider supports an annual maximum for this benefit. @@ -61,12 +60,6 @@ class SupportedBenefit < FinchAPI::Internal::Type::BaseModel -> { FinchAPI::Internal::Type::ArrayOf[enum: FinchAPI::Models::HRIS::SupportedBenefit::HsaContributionLimit, nil?: true] }, nil?: true - # @!attribute type - # Type of benefit. - # - # @return [Symbol, FinchAPI::Models::HRIS::BenefitType, nil] - optional :type, enum: -> { FinchAPI::Models::HRIS::BenefitType }, nil?: true - # @!parse # # @param annual_maximum [Boolean, nil] # # @param catch_up [Boolean, nil] @@ -75,7 +68,6 @@ class SupportedBenefit < FinchAPI::Internal::Type::BaseModel # # @param employee_deduction [Array, nil] # # @param frequencies [Array] # # @param hsa_contribution_limit [Array, nil] - # # @param type [Symbol, FinchAPI::Models::HRIS::BenefitType, nil] # # # def initialize( # annual_maximum: nil, @@ -85,7 +77,6 @@ class SupportedBenefit < FinchAPI::Internal::Type::BaseModel # employee_deduction: nil, # frequencies: nil, # hsa_contribution_limit: nil, - # type: nil, # ** # ) # super diff --git a/lib/finch_api/models/hris/update_company_benefit_response.rb b/lib/finch_api/models/hris/update_company_benefit_response.rb index 75ee8a27..ae7a6b55 100644 --- a/lib/finch_api/models/hris/update_company_benefit_response.rb +++ b/lib/finch_api/models/hris/update_company_benefit_response.rb @@ -11,10 +11,16 @@ class UpdateCompanyBenefitResponse < FinchAPI::Internal::Type::BaseModel # @return [String] required :benefit_id, String + # @!attribute job_id + # + # @return [String] + required :job_id, String + # @!parse # # @param benefit_id [String] + # # @param job_id [String] # # - # def initialize(benefit_id:, **) = super + # def initialize(benefit_id:, job_id:, **) = super # def initialize: (Hash | FinchAPI::Internal::Type::BaseModel) -> void end diff --git a/lib/finch_api/resources/hris/benefits.rb b/lib/finch_api/resources/hris/benefits.rb index fcfdd9a6..e44d8d4d 100644 --- a/lib/finch_api/resources/hris/benefits.rb +++ b/lib/finch_api/resources/hris/benefits.rb @@ -97,7 +97,7 @@ def list(params = {}) # # @param request_options [FinchAPI::RequestOptions, Hash{Symbol=>Object}, nil] # - # @return [FinchAPI::Internal::SinglePage] + # @return [FinchAPI::Internal::SinglePage] # # @see FinchAPI::Models::HRIS::BenefitListSupportedBenefitsParams def list_supported_benefits(params = {}) @@ -105,7 +105,7 @@ def list_supported_benefits(params = {}) method: :get, path: "employer/benefits/meta", page: FinchAPI::Internal::SinglePage, - model: FinchAPI::Models::HRIS::SupportedBenefit, + model: FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse, options: params[:request_options] ) end diff --git a/lib/finch_api/resources/hris/benefits/individuals.rb b/lib/finch_api/resources/hris/benefits/individuals.rb index 5d3e03fb..8f9f97da 100644 --- a/lib/finch_api/resources/hris/benefits/individuals.rb +++ b/lib/finch_api/resources/hris/benefits/individuals.rb @@ -16,7 +16,7 @@ class Individuals # @param individuals [Array] # @param request_options [FinchAPI::RequestOptions, Hash{Symbol=>Object}, nil] # - # @return [FinchAPI::Internal::SinglePage] + # @return [FinchAPI::Models::HRIS::Benefits::IndividualEnrollManyResponse] # # @see FinchAPI::Models::HRIS::Benefits::IndividualEnrollManyParams def enroll_many(benefit_id, params = {}) @@ -25,8 +25,7 @@ def enroll_many(benefit_id, params = {}) method: :post, path: ["employer/benefits/%1$s/individuals", benefit_id], body: parsed[:individuals], - page: FinchAPI::Internal::SinglePage, - model: FinchAPI::Models::HRIS::Benefits::EnrolledIndividual, + model: FinchAPI::Models::HRIS::Benefits::IndividualEnrollManyResponse, options: options ) end @@ -82,7 +81,7 @@ def retrieve_many_benefits(benefit_id, params = {}) # @param individual_ids [Array] # @param request_options [FinchAPI::RequestOptions, Hash{Symbol=>Object}, nil] # - # @return [FinchAPI::Internal::SinglePage] + # @return [FinchAPI::Internal::SinglePage] # # @see FinchAPI::Models::HRIS::Benefits::IndividualUnenrollManyParams def unenroll_many(benefit_id, params = {}) @@ -92,7 +91,7 @@ def unenroll_many(benefit_id, params = {}) path: ["employer/benefits/%1$s/individuals", benefit_id], body: parsed, page: FinchAPI::Internal::SinglePage, - model: FinchAPI::Models::HRIS::Benefits::UnenrolledIndividual, + model: FinchAPI::Internal::Type::Unknown, options: options ) end diff --git a/rbi/lib/finch_api/models/hris/benefit_list_supported_benefits_response.rbi b/rbi/lib/finch_api/models/hris/benefit_list_supported_benefits_response.rbi new file mode 100644 index 00000000..62a82f60 --- /dev/null +++ b/rbi/lib/finch_api/models/hris/benefit_list_supported_benefits_response.rbi @@ -0,0 +1,220 @@ +# typed: strong + +module FinchAPI + module Models + module HRIS + class BenefitListSupportedBenefitsResponse < FinchAPI::Internal::Type::BaseModel + # Whether the provider supports an annual maximum for this benefit. + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :annual_maximum + + # Whether the provider supports catch up for this benefit. This field will only be + # true for retirement benefits. + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :catch_up + + # Supported contribution types. An empty array indicates contributions are not + # supported. + sig do + returns( + T.nilable( + T::Array[T.nilable(FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::CompanyContribution::TaggedSymbol)] + ) + ) + end + attr_accessor :company_contribution + + sig { returns(T.nilable(String)) } + attr_accessor :description + + # Supported deduction types. An empty array indicates deductions are not + # supported. + sig do + returns( + T.nilable( + T::Array[T.nilable(FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::EmployeeDeduction::TaggedSymbol)] + ) + ) + end + attr_accessor :employee_deduction + + # The list of frequencies supported by the provider for this benefit + sig { returns(T.nilable(T::Array[T.nilable(FinchAPI::Models::HRIS::BenefitFrequency::TaggedSymbol)])) } + attr_reader :frequencies + + sig { params(frequencies: T::Array[T.nilable(FinchAPI::Models::HRIS::BenefitFrequency::OrSymbol)]).void } + attr_writer :frequencies + + # Whether the provider supports HSA contribution limits. Empty if this feature is + # not supported for the benefit. This array only has values for HSA benefits. + sig do + returns( + T.nilable( + T::Array[ + T.nilable( + FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::HsaContributionLimit::TaggedSymbol + ) + ] + ) + ) + end + attr_accessor :hsa_contribution_limit + + sig do + params( + annual_maximum: T.nilable(T::Boolean), + catch_up: T.nilable(T::Boolean), + company_contribution: T.nilable( + T::Array[T.nilable(FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::CompanyContribution::OrSymbol)] + ), + description: T.nilable(String), + employee_deduction: T.nilable( + T::Array[T.nilable(FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::EmployeeDeduction::OrSymbol)] + ), + frequencies: T::Array[T.nilable(FinchAPI::Models::HRIS::BenefitFrequency::OrSymbol)], + hsa_contribution_limit: T.nilable( + T::Array[T.nilable(FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::HsaContributionLimit::OrSymbol)] + ) + ) + .returns(T.attached_class) + end + def self.new( + annual_maximum: nil, + catch_up: nil, + company_contribution: nil, + description: nil, + employee_deduction: nil, + frequencies: nil, + hsa_contribution_limit: nil + ); end + sig do + override + .returns( + { + annual_maximum: T.nilable(T::Boolean), + catch_up: T.nilable(T::Boolean), + company_contribution: T.nilable( + T::Array[T.nilable(FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::CompanyContribution::TaggedSymbol)] + ), + description: T.nilable(String), + employee_deduction: T.nilable( + T::Array[T.nilable(FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::EmployeeDeduction::TaggedSymbol)] + ), + frequencies: T::Array[T.nilable(FinchAPI::Models::HRIS::BenefitFrequency::TaggedSymbol)], + hsa_contribution_limit: T.nilable( + T::Array[ + T.nilable( + FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::HsaContributionLimit::TaggedSymbol + ) + ] + ) + } + ) + end + def to_hash; end + + module CompanyContribution + extend FinchAPI::Internal::Type::Enum + + TaggedSymbol = + T.type_alias { T.all(Symbol, FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::CompanyContribution) } + OrSymbol = + T.type_alias do + T.any( + Symbol, + String, + FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::CompanyContribution::TaggedSymbol + ) + end + + FIXED = + T.let( + :fixed, + FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::CompanyContribution::TaggedSymbol + ) + PERCENT = + T.let( + :percent, + FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::CompanyContribution::TaggedSymbol + ) + + sig do + override + .returns( + T::Array[FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::CompanyContribution::TaggedSymbol] + ) + end + def self.values; end + end + + module EmployeeDeduction + extend FinchAPI::Internal::Type::Enum + + TaggedSymbol = + T.type_alias { T.all(Symbol, FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::EmployeeDeduction) } + OrSymbol = + T.type_alias do + T.any( + Symbol, + String, + FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::EmployeeDeduction::TaggedSymbol + ) + end + + FIXED = + T.let( + :fixed, + FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::EmployeeDeduction::TaggedSymbol + ) + PERCENT = + T.let( + :percent, + FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::EmployeeDeduction::TaggedSymbol + ) + + sig do + override + .returns( + T::Array[FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::EmployeeDeduction::TaggedSymbol] + ) + end + def self.values; end + end + + module HsaContributionLimit + extend FinchAPI::Internal::Type::Enum + + TaggedSymbol = + T.type_alias { T.all(Symbol, FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::HsaContributionLimit) } + OrSymbol = + T.type_alias do + T.any( + Symbol, + String, + FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::HsaContributionLimit::TaggedSymbol + ) + end + + INDIVIDUAL = + T.let( + :individual, + FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::HsaContributionLimit::TaggedSymbol + ) + FAMILY = + T.let( + :family, + FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::HsaContributionLimit::TaggedSymbol + ) + + sig do + override + .returns( + T::Array[FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::HsaContributionLimit::TaggedSymbol] + ) + end + def self.values; end + end + end + end + end +end diff --git a/rbi/lib/finch_api/models/hris/benefits/enrolled_individual.rbi b/rbi/lib/finch_api/models/hris/benefits/enrolled_individual.rbi deleted file mode 100644 index a40921ea..00000000 --- a/rbi/lib/finch_api/models/hris/benefits/enrolled_individual.rbi +++ /dev/null @@ -1,106 +0,0 @@ -# typed: strong - -module FinchAPI - module Models - module HRIS - module Benefits - class EnrolledIndividual < FinchAPI::Internal::Type::BaseModel - sig { returns(T.nilable(FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Body)) } - attr_reader :body - - sig do - params( - body: T.any(FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Body, FinchAPI::Internal::AnyHash) - ) - .void - end - attr_writer :body - - # HTTP status code. Either 201 or 200 - sig { returns(T.nilable(FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Code::TaggedInteger)) } - attr_reader :code - - sig { params(code: FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Code::OrInteger).void } - attr_writer :code - - sig { returns(T.nilable(String)) } - attr_reader :individual_id - - sig { params(individual_id: String).void } - attr_writer :individual_id - - sig do - params( - body: T.any(FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Body, FinchAPI::Internal::AnyHash), - code: FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Code::OrInteger, - individual_id: String - ) - .returns(T.attached_class) - end - def self.new(body: nil, code: nil, individual_id: nil); end - - sig do - override - .returns( - { - body: FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Body, - code: FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Code::TaggedInteger, - individual_id: String - } - ) - end - def to_hash; end - - class Body < FinchAPI::Internal::Type::BaseModel - # A descriptive identifier for the response. - sig { returns(T.nilable(String)) } - attr_accessor :finch_code - - # Short description in English that provides more information about the response. - sig { returns(T.nilable(String)) } - attr_accessor :message - - # Identifier indicating whether the benefit was newly enrolled or updated. - sig { returns(T.nilable(String)) } - attr_accessor :name - - sig do - params(finch_code: T.nilable(String), message: T.nilable(String), name: T.nilable(String)) - .returns(T.attached_class) - end - def self.new(finch_code: nil, message: nil, name: nil); end - - sig do - override.returns( - { - finch_code: T.nilable(String), - message: T.nilable(String), - name: T.nilable(String) - } - ) - end - def to_hash; end - end - - # HTTP status code. Either 201 or 200 - module Code - extend FinchAPI::Internal::Type::Enum - - TaggedInteger = - T.type_alias { T.all(Integer, FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Code) } - OrInteger = - T.type_alias { T.any(Integer, FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Code::TaggedInteger) } - - OK = T.let(200, FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Code::TaggedInteger) - CREATED = T.let(201, FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Code::TaggedInteger) - NOT_FOUND = T.let(404, FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Code::TaggedInteger) - FORBIDDEN = T.let(403, FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Code::TaggedInteger) - - sig { override.returns(T::Array[FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Code::TaggedInteger]) } - def self.values; end - end - end - end - end - end -end diff --git a/rbi/lib/finch_api/models/hris/benefits/individual_enroll_many_response.rbi b/rbi/lib/finch_api/models/hris/benefits/individual_enroll_many_response.rbi new file mode 100644 index 00000000..02457b4d --- /dev/null +++ b/rbi/lib/finch_api/models/hris/benefits/individual_enroll_many_response.rbi @@ -0,0 +1,20 @@ +# typed: strong + +module FinchAPI + module Models + module HRIS + module Benefits + class IndividualEnrollManyResponse < FinchAPI::Internal::Type::BaseModel + sig { returns(String) } + attr_accessor :job_id + + sig { params(job_id: String).returns(T.attached_class) } + def self.new(job_id:); end + + sig { override.returns({job_id: String}) } + def to_hash; end + end + end + end + end +end diff --git a/rbi/lib/finch_api/models/hris/benefits/unenrolled_individual.rbi b/rbi/lib/finch_api/models/hris/benefits/unenrolled_individual.rbi deleted file mode 100644 index 5bdc0065..00000000 --- a/rbi/lib/finch_api/models/hris/benefits/unenrolled_individual.rbi +++ /dev/null @@ -1,84 +0,0 @@ -# typed: strong - -module FinchAPI - module Models - module HRIS - module Benefits - class UnenrolledIndividual < FinchAPI::Internal::Type::BaseModel - sig { returns(T.nilable(FinchAPI::Models::HRIS::Benefits::UnenrolledIndividual::Body)) } - attr_reader :body - - sig do - params( - body: T.any(FinchAPI::Models::HRIS::Benefits::UnenrolledIndividual::Body, FinchAPI::Internal::AnyHash) - ) - .void - end - attr_writer :body - - # HTTP status code - sig { returns(T.nilable(Integer)) } - attr_reader :code - - sig { params(code: Integer).void } - attr_writer :code - - sig { returns(T.nilable(String)) } - attr_reader :individual_id - - sig { params(individual_id: String).void } - attr_writer :individual_id - - sig do - params( - body: T.any(FinchAPI::Models::HRIS::Benefits::UnenrolledIndividual::Body, FinchAPI::Internal::AnyHash), - code: Integer, - individual_id: String - ) - .returns(T.attached_class) - end - def self.new(body: nil, code: nil, individual_id: nil); end - - sig do - override - .returns( - {body: FinchAPI::Models::HRIS::Benefits::UnenrolledIndividual::Body, code: Integer, individual_id: String} - ) - end - def to_hash; end - - class Body < FinchAPI::Internal::Type::BaseModel - # A descriptive identifier for the response. - sig { returns(T.nilable(String)) } - attr_accessor :finch_code - - # Short description in English that provides more information about the response. - sig { returns(T.nilable(String)) } - attr_accessor :message - - # Identifier indicating whether the benefit was newly enrolled or updated. - sig { returns(T.nilable(String)) } - attr_accessor :name - - sig do - params(finch_code: T.nilable(String), message: T.nilable(String), name: T.nilable(String)) - .returns(T.attached_class) - end - def self.new(finch_code: nil, message: nil, name: nil); end - - sig do - override.returns( - { - finch_code: T.nilable(String), - message: T.nilable(String), - name: T.nilable(String) - } - ) - end - def to_hash; end - end - end - end - end - end -end diff --git a/rbi/lib/finch_api/models/hris/create_company_benefits_response.rbi b/rbi/lib/finch_api/models/hris/create_company_benefits_response.rbi index 6efa4fe7..0c7c7576 100644 --- a/rbi/lib/finch_api/models/hris/create_company_benefits_response.rbi +++ b/rbi/lib/finch_api/models/hris/create_company_benefits_response.rbi @@ -8,10 +8,13 @@ module FinchAPI sig { returns(String) } attr_accessor :benefit_id - sig { params(benefit_id: String).returns(T.attached_class) } - def self.new(benefit_id:); end + sig { returns(String) } + attr_accessor :job_id + + sig { params(benefit_id: String, job_id: String).returns(T.attached_class) } + def self.new(benefit_id:, job_id:); end - sig { override.returns({benefit_id: String}) } + sig { override.returns({benefit_id: String, job_id: String}) } def to_hash; end end end diff --git a/rbi/lib/finch_api/models/hris/supported_benefit.rbi b/rbi/lib/finch_api/models/hris/supported_benefit.rbi index 921e40e1..dc0d7a2f 100644 --- a/rbi/lib/finch_api/models/hris/supported_benefit.rbi +++ b/rbi/lib/finch_api/models/hris/supported_benefit.rbi @@ -17,9 +17,7 @@ module FinchAPI # supported. sig do returns( - T.nilable( - T::Array[T.nilable(FinchAPI::Models::HRIS::SupportedBenefit::CompanyContribution::TaggedSymbol)] - ) + T.nilable(T::Array[T.nilable(FinchAPI::Models::HRIS::SupportedBenefit::CompanyContribution::OrSymbol)]) ) end attr_accessor :company_contribution @@ -31,13 +29,13 @@ module FinchAPI # supported. sig do returns( - T.nilable(T::Array[T.nilable(FinchAPI::Models::HRIS::SupportedBenefit::EmployeeDeduction::TaggedSymbol)]) + T.nilable(T::Array[T.nilable(FinchAPI::Models::HRIS::SupportedBenefit::EmployeeDeduction::OrSymbol)]) ) end attr_accessor :employee_deduction # The list of frequencies supported by the provider for this benefit - sig { returns(T.nilable(T::Array[T.nilable(FinchAPI::Models::HRIS::BenefitFrequency::TaggedSymbol)])) } + sig { returns(T.nilable(T::Array[T.nilable(FinchAPI::Models::HRIS::BenefitFrequency::OrSymbol)])) } attr_reader :frequencies sig { params(frequencies: T::Array[T.nilable(FinchAPI::Models::HRIS::BenefitFrequency::OrSymbol)]).void } @@ -47,17 +45,11 @@ module FinchAPI # not supported for the benefit. This array only has values for HSA benefits. sig do returns( - T.nilable( - T::Array[T.nilable(FinchAPI::Models::HRIS::SupportedBenefit::HsaContributionLimit::TaggedSymbol)] - ) + T.nilable(T::Array[T.nilable(FinchAPI::Models::HRIS::SupportedBenefit::HsaContributionLimit::OrSymbol)]) ) end attr_accessor :hsa_contribution_limit - # Type of benefit. - sig { returns(T.nilable(FinchAPI::Models::HRIS::BenefitType::TaggedSymbol)) } - attr_accessor :type - sig do params( annual_maximum: T.nilable(T::Boolean), @@ -66,8 +58,7 @@ module FinchAPI description: T.nilable(String), employee_deduction: T.nilable(T::Array[T.nilable(FinchAPI::Models::HRIS::SupportedBenefit::EmployeeDeduction::OrSymbol)]), frequencies: T::Array[T.nilable(FinchAPI::Models::HRIS::BenefitFrequency::OrSymbol)], - hsa_contribution_limit: T.nilable(T::Array[T.nilable(FinchAPI::Models::HRIS::SupportedBenefit::HsaContributionLimit::OrSymbol)]), - type: T.nilable(FinchAPI::Models::HRIS::BenefitType::OrSymbol) + hsa_contribution_limit: T.nilable(T::Array[T.nilable(FinchAPI::Models::HRIS::SupportedBenefit::HsaContributionLimit::OrSymbol)]) ) .returns(T.attached_class) end @@ -78,8 +69,7 @@ module FinchAPI description: nil, employee_deduction: nil, frequencies: nil, - hsa_contribution_limit: nil, - type: nil + hsa_contribution_limit: nil ); end sig do override @@ -87,16 +77,11 @@ module FinchAPI { annual_maximum: T.nilable(T::Boolean), catch_up: T.nilable(T::Boolean), - company_contribution: T.nilable( - T::Array[T.nilable(FinchAPI::Models::HRIS::SupportedBenefit::CompanyContribution::TaggedSymbol)] - ), + company_contribution: T.nilable(T::Array[T.nilable(FinchAPI::Models::HRIS::SupportedBenefit::CompanyContribution::OrSymbol)]), description: T.nilable(String), - employee_deduction: T.nilable(T::Array[T.nilable(FinchAPI::Models::HRIS::SupportedBenefit::EmployeeDeduction::TaggedSymbol)]), - frequencies: T::Array[T.nilable(FinchAPI::Models::HRIS::BenefitFrequency::TaggedSymbol)], - hsa_contribution_limit: T.nilable( - T::Array[T.nilable(FinchAPI::Models::HRIS::SupportedBenefit::HsaContributionLimit::TaggedSymbol)] - ), - type: T.nilable(FinchAPI::Models::HRIS::BenefitType::TaggedSymbol) + employee_deduction: T.nilable(T::Array[T.nilable(FinchAPI::Models::HRIS::SupportedBenefit::EmployeeDeduction::OrSymbol)]), + frequencies: T::Array[T.nilable(FinchAPI::Models::HRIS::BenefitFrequency::OrSymbol)], + hsa_contribution_limit: T.nilable(T::Array[T.nilable(FinchAPI::Models::HRIS::SupportedBenefit::HsaContributionLimit::OrSymbol)]) } ) end diff --git a/rbi/lib/finch_api/models/hris/update_company_benefit_response.rbi b/rbi/lib/finch_api/models/hris/update_company_benefit_response.rbi index 6dd1955b..546ce417 100644 --- a/rbi/lib/finch_api/models/hris/update_company_benefit_response.rbi +++ b/rbi/lib/finch_api/models/hris/update_company_benefit_response.rbi @@ -8,10 +8,13 @@ module FinchAPI sig { returns(String) } attr_accessor :benefit_id - sig { params(benefit_id: String).returns(T.attached_class) } - def self.new(benefit_id:); end + sig { returns(String) } + attr_accessor :job_id + + sig { params(benefit_id: String, job_id: String).returns(T.attached_class) } + def self.new(benefit_id:, job_id:); end - sig { override.returns({benefit_id: String}) } + sig { override.returns({benefit_id: String, job_id: String}) } def to_hash; end end end diff --git a/rbi/lib/finch_api/resources/hris/benefits.rbi b/rbi/lib/finch_api/resources/hris/benefits.rbi index 5cfe0695..7bc3794e 100644 --- a/rbi/lib/finch_api/resources/hris/benefits.rbi +++ b/rbi/lib/finch_api/resources/hris/benefits.rbi @@ -64,7 +64,7 @@ module FinchAPI # Get deductions metadata sig do params(request_options: T.nilable(T.any(FinchAPI::RequestOptions, FinchAPI::Internal::AnyHash))) - .returns(FinchAPI::Internal::SinglePage[FinchAPI::Models::HRIS::SupportedBenefit]) + .returns(FinchAPI::Internal::SinglePage[FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse]) end def list_supported_benefits(request_options: {}); end diff --git a/rbi/lib/finch_api/resources/hris/benefits/individuals.rbi b/rbi/lib/finch_api/resources/hris/benefits/individuals.rbi index 54d7b273..c8406849 100644 --- a/rbi/lib/finch_api/resources/hris/benefits/individuals.rbi +++ b/rbi/lib/finch_api/resources/hris/benefits/individuals.rbi @@ -20,7 +20,7 @@ module FinchAPI ], request_options: T.nilable(T.any(FinchAPI::RequestOptions, FinchAPI::Internal::AnyHash)) ) - .returns(FinchAPI::Internal::SinglePage[FinchAPI::Models::HRIS::Benefits::EnrolledIndividual]) + .returns(FinchAPI::Models::HRIS::Benefits::IndividualEnrollManyResponse) end def enroll_many( benefit_id, @@ -61,7 +61,7 @@ module FinchAPI individual_ids: T::Array[String], request_options: T.nilable(T.any(FinchAPI::RequestOptions, FinchAPI::Internal::AnyHash)) ) - .returns(FinchAPI::Internal::SinglePage[FinchAPI::Models::HRIS::Benefits::UnenrolledIndividual]) + .returns(FinchAPI::Internal::SinglePage[T.anything]) end def unenroll_many( benefit_id, diff --git a/sig/finch_api/models/hris/benefit_list_supported_benefits_response.rbs b/sig/finch_api/models/hris/benefit_list_supported_benefits_response.rbs new file mode 100644 index 00000000..4e77fb5b --- /dev/null +++ b/sig/finch_api/models/hris/benefit_list_supported_benefits_response.rbs @@ -0,0 +1,81 @@ +module FinchAPI + module Models + module HRIS + type benefit_list_supported_benefits_response = + { + annual_maximum: bool?, + catch_up: bool?, + company_contribution: ::Array[FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::company_contribution?]?, + description: String?, + employee_deduction: ::Array[FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::employee_deduction?]?, + frequencies: ::Array[FinchAPI::Models::HRIS::benefit_frequency?], + hsa_contribution_limit: ::Array[FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::hsa_contribution_limit?]? + } + + class BenefitListSupportedBenefitsResponse < FinchAPI::Internal::Type::BaseModel + attr_accessor annual_maximum: bool? + + attr_accessor catch_up: bool? + + attr_accessor company_contribution: ::Array[FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::company_contribution?]? + + attr_accessor description: String? + + attr_accessor employee_deduction: ::Array[FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::employee_deduction?]? + + attr_reader frequencies: ::Array[FinchAPI::Models::HRIS::benefit_frequency?]? + + def frequencies=: ( + ::Array[FinchAPI::Models::HRIS::benefit_frequency?] + ) -> ::Array[FinchAPI::Models::HRIS::benefit_frequency?] + + attr_accessor hsa_contribution_limit: ::Array[FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::hsa_contribution_limit?]? + + def initialize: ( + ?annual_maximum: bool?, + ?catch_up: bool?, + ?company_contribution: ::Array[FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::company_contribution?]?, + ?description: String?, + ?employee_deduction: ::Array[FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::employee_deduction?]?, + ?frequencies: ::Array[FinchAPI::Models::HRIS::benefit_frequency?], + ?hsa_contribution_limit: ::Array[FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::hsa_contribution_limit?]? + ) -> void + + def to_hash: -> FinchAPI::Models::HRIS::benefit_list_supported_benefits_response + + type company_contribution = :fixed | :percent + + module CompanyContribution + extend FinchAPI::Internal::Type::Enum + + FIXED: :fixed + PERCENT: :percent + + def self?.values: -> ::Array[FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::company_contribution] + end + + type employee_deduction = :fixed | :percent + + module EmployeeDeduction + extend FinchAPI::Internal::Type::Enum + + FIXED: :fixed + PERCENT: :percent + + def self?.values: -> ::Array[FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::employee_deduction] + end + + type hsa_contribution_limit = :individual | :family + + module HsaContributionLimit + extend FinchAPI::Internal::Type::Enum + + INDIVIDUAL: :individual + FAMILY: :family + + def self?.values: -> ::Array[FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::hsa_contribution_limit] + end + end + end + end +end diff --git a/sig/finch_api/models/hris/benefits/enrolled_individual.rbs b/sig/finch_api/models/hris/benefits/enrolled_individual.rbs deleted file mode 100644 index 3f7da903..00000000 --- a/sig/finch_api/models/hris/benefits/enrolled_individual.rbs +++ /dev/null @@ -1,71 +0,0 @@ -module FinchAPI - module Models - module HRIS - module Benefits - type enrolled_individual = - { - body: FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Body, - code: FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::code, - individual_id: String - } - - class EnrolledIndividual < FinchAPI::Internal::Type::BaseModel - attr_reader body: FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Body? - - def body=: ( - FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Body - ) -> FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Body - - attr_reader code: FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::code? - - def code=: ( - FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::code - ) -> FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::code - - attr_reader individual_id: String? - - def individual_id=: (String) -> String - - def initialize: ( - ?body: FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Body, - ?code: FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::code, - ?individual_id: String - ) -> void - - def to_hash: -> FinchAPI::Models::HRIS::Benefits::enrolled_individual - - type body = { finch_code: String?, message: String?, name: String? } - - class Body < FinchAPI::Internal::Type::BaseModel - attr_accessor finch_code: String? - - attr_accessor message: String? - - attr_accessor name: String? - - def initialize: ( - ?finch_code: String?, - ?message: String?, - ?name: String? - ) -> void - - def to_hash: -> FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::body - end - - type code = 200 | 201 | 404 | 403 - - module Code - extend FinchAPI::Internal::Type::Enum - - OK: 200 - CREATED: 201 - NOT_FOUND: 404 - FORBIDDEN: 403 - - def self?.values: -> ::Array[FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::code] - end - end - end - end - end -end diff --git a/sig/finch_api/models/hris/benefits/individual_enroll_many_response.rbs b/sig/finch_api/models/hris/benefits/individual_enroll_many_response.rbs new file mode 100644 index 00000000..f6cfe2c1 --- /dev/null +++ b/sig/finch_api/models/hris/benefits/individual_enroll_many_response.rbs @@ -0,0 +1,17 @@ +module FinchAPI + module Models + module HRIS + module Benefits + type individual_enroll_many_response = { job_id: String } + + class IndividualEnrollManyResponse < FinchAPI::Internal::Type::BaseModel + attr_accessor job_id: String + + def initialize: (job_id: String) -> void + + def to_hash: -> FinchAPI::Models::HRIS::Benefits::individual_enroll_many_response + end + end + end + end +end diff --git a/sig/finch_api/models/hris/benefits/unenrolled_individual.rbs b/sig/finch_api/models/hris/benefits/unenrolled_individual.rbs deleted file mode 100644 index e5691a13..00000000 --- a/sig/finch_api/models/hris/benefits/unenrolled_individual.rbs +++ /dev/null @@ -1,56 +0,0 @@ -module FinchAPI - module Models - module HRIS - module Benefits - type unenrolled_individual = - { - body: FinchAPI::Models::HRIS::Benefits::UnenrolledIndividual::Body, - code: Integer, - individual_id: String - } - - class UnenrolledIndividual < FinchAPI::Internal::Type::BaseModel - attr_reader body: FinchAPI::Models::HRIS::Benefits::UnenrolledIndividual::Body? - - def body=: ( - FinchAPI::Models::HRIS::Benefits::UnenrolledIndividual::Body - ) -> FinchAPI::Models::HRIS::Benefits::UnenrolledIndividual::Body - - attr_reader code: Integer? - - def code=: (Integer) -> Integer - - attr_reader individual_id: String? - - def individual_id=: (String) -> String - - def initialize: ( - ?body: FinchAPI::Models::HRIS::Benefits::UnenrolledIndividual::Body, - ?code: Integer, - ?individual_id: String - ) -> void - - def to_hash: -> FinchAPI::Models::HRIS::Benefits::unenrolled_individual - - type body = { finch_code: String?, message: String?, name: String? } - - class Body < FinchAPI::Internal::Type::BaseModel - attr_accessor finch_code: String? - - attr_accessor message: String? - - attr_accessor name: String? - - def initialize: ( - ?finch_code: String?, - ?message: String?, - ?name: String? - ) -> void - - def to_hash: -> FinchAPI::Models::HRIS::Benefits::UnenrolledIndividual::body - end - end - end - end - end -end diff --git a/sig/finch_api/models/hris/create_company_benefits_response.rbs b/sig/finch_api/models/hris/create_company_benefits_response.rbs index 656d4063..6ed3eb29 100644 --- a/sig/finch_api/models/hris/create_company_benefits_response.rbs +++ b/sig/finch_api/models/hris/create_company_benefits_response.rbs @@ -1,12 +1,15 @@ module FinchAPI module Models module HRIS - type create_company_benefits_response = { benefit_id: String } + type create_company_benefits_response = + { benefit_id: String, job_id: String } class CreateCompanyBenefitsResponse < FinchAPI::Internal::Type::BaseModel attr_accessor benefit_id: String - def initialize: (benefit_id: String) -> void + attr_accessor job_id: String + + def initialize: (benefit_id: String, job_id: String) -> void def to_hash: -> FinchAPI::Models::HRIS::create_company_benefits_response end diff --git a/sig/finch_api/models/hris/supported_benefit.rbs b/sig/finch_api/models/hris/supported_benefit.rbs index 4af7317c..d03277f3 100644 --- a/sig/finch_api/models/hris/supported_benefit.rbs +++ b/sig/finch_api/models/hris/supported_benefit.rbs @@ -9,8 +9,7 @@ module FinchAPI description: String?, employee_deduction: ::Array[FinchAPI::Models::HRIS::SupportedBenefit::employee_deduction?]?, frequencies: ::Array[FinchAPI::Models::HRIS::benefit_frequency?], - hsa_contribution_limit: ::Array[FinchAPI::Models::HRIS::SupportedBenefit::hsa_contribution_limit?]?, - type: FinchAPI::Models::HRIS::benefit_type? + hsa_contribution_limit: ::Array[FinchAPI::Models::HRIS::SupportedBenefit::hsa_contribution_limit?]? } class SupportedBenefit < FinchAPI::Internal::Type::BaseModel @@ -32,8 +31,6 @@ module FinchAPI attr_accessor hsa_contribution_limit: ::Array[FinchAPI::Models::HRIS::SupportedBenefit::hsa_contribution_limit?]? - attr_accessor type: FinchAPI::Models::HRIS::benefit_type? - def initialize: ( ?annual_maximum: bool?, ?catch_up: bool?, @@ -41,8 +38,7 @@ module FinchAPI ?description: String?, ?employee_deduction: ::Array[FinchAPI::Models::HRIS::SupportedBenefit::employee_deduction?]?, ?frequencies: ::Array[FinchAPI::Models::HRIS::benefit_frequency?], - ?hsa_contribution_limit: ::Array[FinchAPI::Models::HRIS::SupportedBenefit::hsa_contribution_limit?]?, - ?type: FinchAPI::Models::HRIS::benefit_type? + ?hsa_contribution_limit: ::Array[FinchAPI::Models::HRIS::SupportedBenefit::hsa_contribution_limit?]? ) -> void def to_hash: -> FinchAPI::Models::HRIS::supported_benefit diff --git a/sig/finch_api/models/hris/update_company_benefit_response.rbs b/sig/finch_api/models/hris/update_company_benefit_response.rbs index 1874403e..761b6897 100644 --- a/sig/finch_api/models/hris/update_company_benefit_response.rbs +++ b/sig/finch_api/models/hris/update_company_benefit_response.rbs @@ -1,12 +1,15 @@ module FinchAPI module Models module HRIS - type update_company_benefit_response = { benefit_id: String } + type update_company_benefit_response = + { benefit_id: String, job_id: String } class UpdateCompanyBenefitResponse < FinchAPI::Internal::Type::BaseModel attr_accessor benefit_id: String - def initialize: (benefit_id: String) -> void + attr_accessor job_id: String + + def initialize: (benefit_id: String, job_id: String) -> void def to_hash: -> FinchAPI::Models::HRIS::update_company_benefit_response end diff --git a/sig/finch_api/resources/hris/benefits.rbs b/sig/finch_api/resources/hris/benefits.rbs index 2579f5f8..4233471f 100644 --- a/sig/finch_api/resources/hris/benefits.rbs +++ b/sig/finch_api/resources/hris/benefits.rbs @@ -28,7 +28,7 @@ module FinchAPI def list_supported_benefits: ( ?request_options: FinchAPI::request_opts - ) -> FinchAPI::Internal::SinglePage[FinchAPI::Models::HRIS::SupportedBenefit] + ) -> FinchAPI::Internal::SinglePage[FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse] def initialize: (client: FinchAPI::Client) -> void end diff --git a/sig/finch_api/resources/hris/benefits/individuals.rbs b/sig/finch_api/resources/hris/benefits/individuals.rbs index 45bcf8c7..55466833 100644 --- a/sig/finch_api/resources/hris/benefits/individuals.rbs +++ b/sig/finch_api/resources/hris/benefits/individuals.rbs @@ -7,7 +7,7 @@ module FinchAPI String benefit_id, ?individuals: ::Array[FinchAPI::Models::HRIS::Benefits::IndividualEnrollManyParams::Individual], ?request_options: FinchAPI::request_opts - ) -> FinchAPI::Internal::SinglePage[FinchAPI::Models::HRIS::Benefits::EnrolledIndividual] + ) -> FinchAPI::Models::HRIS::Benefits::IndividualEnrollManyResponse def enrolled_ids: ( String benefit_id, @@ -24,7 +24,7 @@ module FinchAPI String benefit_id, ?individual_ids: ::Array[String], ?request_options: FinchAPI::request_opts - ) -> FinchAPI::Internal::SinglePage[FinchAPI::Models::HRIS::Benefits::UnenrolledIndividual] + ) -> FinchAPI::Internal::SinglePage[top] def initialize: (client: FinchAPI::Client) -> void end diff --git a/test/finch_api/resources/hris/benefits/individuals_test.rb b/test/finch_api/resources/hris/benefits/individuals_test.rb index e2dc5c51..89583786 100644 --- a/test/finch_api/resources/hris/benefits/individuals_test.rb +++ b/test/finch_api/resources/hris/benefits/individuals_test.rb @@ -7,21 +7,12 @@ def test_enroll_many response = @finch.hris.benefits.individuals.enroll_many("benefit_id") assert_pattern do - response => FinchAPI::Internal::SinglePage + response => FinchAPI::Models::HRIS::Benefits::IndividualEnrollManyResponse end - row = response.to_enum.first - return if row.nil? - assert_pattern do - row => FinchAPI::Models::HRIS::Benefits::EnrolledIndividual - end - - assert_pattern do - row => { - body: FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Body | nil, - code: FinchAPI::Models::HRIS::Benefits::EnrolledIndividual::Code | nil, - individual_id: String | nil + response => { + job_id: String } end end @@ -75,15 +66,7 @@ def test_unenroll_many return if row.nil? assert_pattern do - row => FinchAPI::Models::HRIS::Benefits::UnenrolledIndividual - end - - assert_pattern do - row => { - body: FinchAPI::Models::HRIS::Benefits::UnenrolledIndividual::Body | nil, - code: Integer | nil, - individual_id: String | nil - } + row => FinchAPI::Internal::Type::Unknown end end end diff --git a/test/finch_api/resources/hris/benefits_test.rb b/test/finch_api/resources/hris/benefits_test.rb index 61013ba0..8e2b5516 100644 --- a/test/finch_api/resources/hris/benefits_test.rb +++ b/test/finch_api/resources/hris/benefits_test.rb @@ -12,7 +12,8 @@ def test_create assert_pattern do response => { - benefit_id: String + benefit_id: String, + job_id: String } end end @@ -43,7 +44,8 @@ def test_update assert_pattern do response => { - benefit_id: String + benefit_id: String, + job_id: String } end end @@ -83,19 +85,18 @@ def test_list_supported_benefits return if row.nil? assert_pattern do - row => FinchAPI::Models::HRIS::SupportedBenefit + row => FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse end assert_pattern do row => { annual_maximum: FinchAPI::Internal::Type::Boolean | nil, catch_up: FinchAPI::Internal::Type::Boolean | nil, - company_contribution: ^(FinchAPI::Internal::Type::ArrayOf[enum: FinchAPI::Models::HRIS::SupportedBenefit::CompanyContribution, nil?: true]) | nil, + company_contribution: ^(FinchAPI::Internal::Type::ArrayOf[enum: FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::CompanyContribution, nil?: true]) | nil, description: String | nil, - employee_deduction: ^(FinchAPI::Internal::Type::ArrayOf[enum: FinchAPI::Models::HRIS::SupportedBenefit::EmployeeDeduction, nil?: true]) | nil, + employee_deduction: ^(FinchAPI::Internal::Type::ArrayOf[enum: FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::EmployeeDeduction, nil?: true]) | nil, frequencies: ^(FinchAPI::Internal::Type::ArrayOf[enum: FinchAPI::Models::HRIS::BenefitFrequency, nil?: true]) | nil, - hsa_contribution_limit: ^(FinchAPI::Internal::Type::ArrayOf[enum: FinchAPI::Models::HRIS::SupportedBenefit::HsaContributionLimit, nil?: true]) | nil, - type: FinchAPI::Models::HRIS::BenefitType | nil + hsa_contribution_limit: ^(FinchAPI::Internal::Type::ArrayOf[enum: FinchAPI::Models::HRIS::BenefitListSupportedBenefitsResponse::HsaContributionLimit, nil?: true]) | nil } end end From 8a2f9b4b2ee02513530d25a86eff44ee66b6c47d Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 9 Apr 2025 14:39:03 +0000 Subject: [PATCH 08/16] fix(internal): update release-please to use ruby strategy for README.md (#137) --- release-please-config.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/release-please-config.json b/release-please-config.json index f23f174d..67d20f33 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -66,6 +66,9 @@ "release-type": "ruby", "version-file": "lib/finch_api/version.rb", "extra-files": [ - "README.md" + { + "type": "ruby-readme", + "path": "README.md" + } ] } \ No newline at end of file From e699355e6db0fbf1853fdb7d9769eec8f6043fca Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 9 Apr 2025 16:31:37 +0000 Subject: [PATCH 09/16] chore(internal): expand CI branch coverage (#138) --- .github/workflows/ci.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6992080f..1a75c727 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,18 +1,18 @@ name: CI on: push: - branches: - - main - pull_request: - branches: - - main - - next + branches-ignore: + - 'generated' + - 'codegen/**' + - 'integrated/**' + - 'preview-head/**' + - 'preview-base/**' + - 'preview/**' jobs: lint: name: lint runs-on: ubuntu-latest - steps: - uses: actions/checkout@v4 @@ -29,7 +29,6 @@ jobs: test: name: test runs-on: ubuntu-latest - steps: - uses: actions/checkout@v4 - name: Set up Ruby From f6b269cdc764e317bf5c3622bac66d625222d1db Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 9 Apr 2025 19:06:41 +0000 Subject: [PATCH 10/16] feat(api): benefits mutation API endpoints (create benefit, update benefit, enroll individual, unenroll individual) now properly return async response types (#139) --- .stats.yml | 4 ++-- lib/finch_api.rb | 3 ++- ...onse.rb => enrolled_individual_benifit.rb} | 2 +- .../individual_unenroll_many_response.rb | 24 +++++++++++++++++++ .../resources/hris/benefits/individuals.rb | 9 ++++--- ...se.rbi => enrolled_individual_benifit.rbi} | 2 +- .../individual_unenroll_many_response.rbi | 20 ++++++++++++++++ .../resources/hris/benefits/individuals.rbi | 4 ++-- .../benefits/enrolled_individual_benifit.rbs | 17 +++++++++++++ ... => individual_unenroll_many_response.rbs} | 6 ++--- .../resources/hris/benefits/individuals.rbs | 4 ++-- .../hris/benefits/individuals_test.rb | 11 ++++----- 12 files changed, 83 insertions(+), 23 deletions(-) rename lib/finch_api/models/hris/benefits/{individual_enroll_many_response.rb => enrolled_individual_benifit.rb} (86%) create mode 100644 lib/finch_api/models/hris/benefits/individual_unenroll_many_response.rb rename rbi/lib/finch_api/models/hris/benefits/{individual_enroll_many_response.rbi => enrolled_individual_benifit.rbi} (82%) create mode 100644 rbi/lib/finch_api/models/hris/benefits/individual_unenroll_many_response.rbi create mode 100644 sig/finch_api/models/hris/benefits/enrolled_individual_benifit.rbs rename sig/finch_api/models/hris/benefits/{individual_enroll_many_response.rbs => individual_unenroll_many_response.rbs} (59%) diff --git a/.stats.yml b/.stats.yml index 950c125e..de2b9cc9 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-8c83f0eae70d2a02ed3e2059fc251affdccd2f848f45445e4fed64dfd9ca5985.yml +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-bf858f37d7ab420841ddc6329dad8c46377308b6a5c8e935908011d0f9845e22.yml openapi_spec_hash: 2523952a32436e3c7fd3b55508c2e7ee -config_hash: ce10384813f68ba3fed61c7b601b396b +config_hash: 4a8def48077df6382ed9fe00588baecf diff --git a/lib/finch_api.rb b/lib/finch_api.rb index d4bf6064..b320a56e 100644 --- a/lib/finch_api.rb +++ b/lib/finch_api.rb @@ -82,13 +82,14 @@ require_relative "finch_api/models/hris/benefit_list_supported_benefits_params" require_relative "finch_api/models/hris/benefit_list_supported_benefits_response" require_relative "finch_api/models/hris/benefit_retrieve_params" +require_relative "finch_api/models/hris/benefits/enrolled_individual_benifit" require_relative "finch_api/models/hris/benefits/individual_benefit" require_relative "finch_api/models/hris/benefits/individual_enrolled_ids_params" require_relative "finch_api/models/hris/benefits/individual_enrolled_ids_response" require_relative "finch_api/models/hris/benefits/individual_enroll_many_params" -require_relative "finch_api/models/hris/benefits/individual_enroll_many_response" require_relative "finch_api/models/hris/benefits/individual_retrieve_many_benefits_params" require_relative "finch_api/models/hris/benefits/individual_unenroll_many_params" +require_relative "finch_api/models/hris/benefits/individual_unenroll_many_response" require_relative "finch_api/models/hris/benefits_support" require_relative "finch_api/models/hris/benefit_type" require_relative "finch_api/models/hris/benefit_update_params" diff --git a/lib/finch_api/models/hris/benefits/individual_enroll_many_response.rb b/lib/finch_api/models/hris/benefits/enrolled_individual_benifit.rb similarity index 86% rename from lib/finch_api/models/hris/benefits/individual_enroll_many_response.rb rename to lib/finch_api/models/hris/benefits/enrolled_individual_benifit.rb index 13dabf51..e8c83775 100644 --- a/lib/finch_api/models/hris/benefits/individual_enroll_many_response.rb +++ b/lib/finch_api/models/hris/benefits/enrolled_individual_benifit.rb @@ -5,7 +5,7 @@ module Models module HRIS module Benefits # @see FinchAPI::Resources::HRIS::Benefits::Individuals#enroll_many - class IndividualEnrollManyResponse < FinchAPI::Internal::Type::BaseModel + class EnrolledIndividualBenifit < FinchAPI::Internal::Type::BaseModel # @!attribute job_id # # @return [String] diff --git a/lib/finch_api/models/hris/benefits/individual_unenroll_many_response.rb b/lib/finch_api/models/hris/benefits/individual_unenroll_many_response.rb new file mode 100644 index 00000000..1b6ea99f --- /dev/null +++ b/lib/finch_api/models/hris/benefits/individual_unenroll_many_response.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +module FinchAPI + module Models + module HRIS + module Benefits + # @see FinchAPI::Resources::HRIS::Benefits::Individuals#unenroll_many + class IndividualUnenrollManyResponse < FinchAPI::Internal::Type::BaseModel + # @!attribute job_id + # + # @return [String] + required :job_id, String + + # @!parse + # # @param job_id [String] + # # + # def initialize(job_id:, **) = super + + # def initialize: (Hash | FinchAPI::Internal::Type::BaseModel) -> void + end + end + end + end +end diff --git a/lib/finch_api/resources/hris/benefits/individuals.rb b/lib/finch_api/resources/hris/benefits/individuals.rb index 8f9f97da..529050f5 100644 --- a/lib/finch_api/resources/hris/benefits/individuals.rb +++ b/lib/finch_api/resources/hris/benefits/individuals.rb @@ -16,7 +16,7 @@ class Individuals # @param individuals [Array] # @param request_options [FinchAPI::RequestOptions, Hash{Symbol=>Object}, nil] # - # @return [FinchAPI::Models::HRIS::Benefits::IndividualEnrollManyResponse] + # @return [FinchAPI::Models::HRIS::Benefits::EnrolledIndividualBenifit] # # @see FinchAPI::Models::HRIS::Benefits::IndividualEnrollManyParams def enroll_many(benefit_id, params = {}) @@ -25,7 +25,7 @@ def enroll_many(benefit_id, params = {}) method: :post, path: ["employer/benefits/%1$s/individuals", benefit_id], body: parsed[:individuals], - model: FinchAPI::Models::HRIS::Benefits::IndividualEnrollManyResponse, + model: FinchAPI::Models::HRIS::Benefits::EnrolledIndividualBenifit, options: options ) end @@ -81,7 +81,7 @@ def retrieve_many_benefits(benefit_id, params = {}) # @param individual_ids [Array] # @param request_options [FinchAPI::RequestOptions, Hash{Symbol=>Object}, nil] # - # @return [FinchAPI::Internal::SinglePage] + # @return [FinchAPI::Models::HRIS::Benefits::IndividualUnenrollManyResponse] # # @see FinchAPI::Models::HRIS::Benefits::IndividualUnenrollManyParams def unenroll_many(benefit_id, params = {}) @@ -90,8 +90,7 @@ def unenroll_many(benefit_id, params = {}) method: :delete, path: ["employer/benefits/%1$s/individuals", benefit_id], body: parsed, - page: FinchAPI::Internal::SinglePage, - model: FinchAPI::Internal::Type::Unknown, + model: FinchAPI::Models::HRIS::Benefits::IndividualUnenrollManyResponse, options: options ) end diff --git a/rbi/lib/finch_api/models/hris/benefits/individual_enroll_many_response.rbi b/rbi/lib/finch_api/models/hris/benefits/enrolled_individual_benifit.rbi similarity index 82% rename from rbi/lib/finch_api/models/hris/benefits/individual_enroll_many_response.rbi rename to rbi/lib/finch_api/models/hris/benefits/enrolled_individual_benifit.rbi index 02457b4d..fe95ccd8 100644 --- a/rbi/lib/finch_api/models/hris/benefits/individual_enroll_many_response.rbi +++ b/rbi/lib/finch_api/models/hris/benefits/enrolled_individual_benifit.rbi @@ -4,7 +4,7 @@ module FinchAPI module Models module HRIS module Benefits - class IndividualEnrollManyResponse < FinchAPI::Internal::Type::BaseModel + class EnrolledIndividualBenifit < FinchAPI::Internal::Type::BaseModel sig { returns(String) } attr_accessor :job_id diff --git a/rbi/lib/finch_api/models/hris/benefits/individual_unenroll_many_response.rbi b/rbi/lib/finch_api/models/hris/benefits/individual_unenroll_many_response.rbi new file mode 100644 index 00000000..5d3adafa --- /dev/null +++ b/rbi/lib/finch_api/models/hris/benefits/individual_unenroll_many_response.rbi @@ -0,0 +1,20 @@ +# typed: strong + +module FinchAPI + module Models + module HRIS + module Benefits + class IndividualUnenrollManyResponse < FinchAPI::Internal::Type::BaseModel + sig { returns(String) } + attr_accessor :job_id + + sig { params(job_id: String).returns(T.attached_class) } + def self.new(job_id:); end + + sig { override.returns({job_id: String}) } + def to_hash; end + end + end + end + end +end diff --git a/rbi/lib/finch_api/resources/hris/benefits/individuals.rbi b/rbi/lib/finch_api/resources/hris/benefits/individuals.rbi index c8406849..1bf32bed 100644 --- a/rbi/lib/finch_api/resources/hris/benefits/individuals.rbi +++ b/rbi/lib/finch_api/resources/hris/benefits/individuals.rbi @@ -20,7 +20,7 @@ module FinchAPI ], request_options: T.nilable(T.any(FinchAPI::RequestOptions, FinchAPI::Internal::AnyHash)) ) - .returns(FinchAPI::Models::HRIS::Benefits::IndividualEnrollManyResponse) + .returns(FinchAPI::Models::HRIS::Benefits::EnrolledIndividualBenifit) end def enroll_many( benefit_id, @@ -61,7 +61,7 @@ module FinchAPI individual_ids: T::Array[String], request_options: T.nilable(T.any(FinchAPI::RequestOptions, FinchAPI::Internal::AnyHash)) ) - .returns(FinchAPI::Internal::SinglePage[T.anything]) + .returns(FinchAPI::Models::HRIS::Benefits::IndividualUnenrollManyResponse) end def unenroll_many( benefit_id, diff --git a/sig/finch_api/models/hris/benefits/enrolled_individual_benifit.rbs b/sig/finch_api/models/hris/benefits/enrolled_individual_benifit.rbs new file mode 100644 index 00000000..e191270f --- /dev/null +++ b/sig/finch_api/models/hris/benefits/enrolled_individual_benifit.rbs @@ -0,0 +1,17 @@ +module FinchAPI + module Models + module HRIS + module Benefits + type enrolled_individual_benifit = { job_id: String } + + class EnrolledIndividualBenifit < FinchAPI::Internal::Type::BaseModel + attr_accessor job_id: String + + def initialize: (job_id: String) -> void + + def to_hash: -> FinchAPI::Models::HRIS::Benefits::enrolled_individual_benifit + end + end + end + end +end diff --git a/sig/finch_api/models/hris/benefits/individual_enroll_many_response.rbs b/sig/finch_api/models/hris/benefits/individual_unenroll_many_response.rbs similarity index 59% rename from sig/finch_api/models/hris/benefits/individual_enroll_many_response.rbs rename to sig/finch_api/models/hris/benefits/individual_unenroll_many_response.rbs index f6cfe2c1..d7c19061 100644 --- a/sig/finch_api/models/hris/benefits/individual_enroll_many_response.rbs +++ b/sig/finch_api/models/hris/benefits/individual_unenroll_many_response.rbs @@ -2,14 +2,14 @@ module FinchAPI module Models module HRIS module Benefits - type individual_enroll_many_response = { job_id: String } + type individual_unenroll_many_response = { job_id: String } - class IndividualEnrollManyResponse < FinchAPI::Internal::Type::BaseModel + class IndividualUnenrollManyResponse < FinchAPI::Internal::Type::BaseModel attr_accessor job_id: String def initialize: (job_id: String) -> void - def to_hash: -> FinchAPI::Models::HRIS::Benefits::individual_enroll_many_response + def to_hash: -> FinchAPI::Models::HRIS::Benefits::individual_unenroll_many_response end end end diff --git a/sig/finch_api/resources/hris/benefits/individuals.rbs b/sig/finch_api/resources/hris/benefits/individuals.rbs index 55466833..9ca4dc08 100644 --- a/sig/finch_api/resources/hris/benefits/individuals.rbs +++ b/sig/finch_api/resources/hris/benefits/individuals.rbs @@ -7,7 +7,7 @@ module FinchAPI String benefit_id, ?individuals: ::Array[FinchAPI::Models::HRIS::Benefits::IndividualEnrollManyParams::Individual], ?request_options: FinchAPI::request_opts - ) -> FinchAPI::Models::HRIS::Benefits::IndividualEnrollManyResponse + ) -> FinchAPI::Models::HRIS::Benefits::EnrolledIndividualBenifit def enrolled_ids: ( String benefit_id, @@ -24,7 +24,7 @@ module FinchAPI String benefit_id, ?individual_ids: ::Array[String], ?request_options: FinchAPI::request_opts - ) -> FinchAPI::Internal::SinglePage[top] + ) -> FinchAPI::Models::HRIS::Benefits::IndividualUnenrollManyResponse def initialize: (client: FinchAPI::Client) -> void end diff --git a/test/finch_api/resources/hris/benefits/individuals_test.rb b/test/finch_api/resources/hris/benefits/individuals_test.rb index 89583786..a684420c 100644 --- a/test/finch_api/resources/hris/benefits/individuals_test.rb +++ b/test/finch_api/resources/hris/benefits/individuals_test.rb @@ -7,7 +7,7 @@ def test_enroll_many response = @finch.hris.benefits.individuals.enroll_many("benefit_id") assert_pattern do - response => FinchAPI::Models::HRIS::Benefits::IndividualEnrollManyResponse + response => FinchAPI::Models::HRIS::Benefits::EnrolledIndividualBenifit end assert_pattern do @@ -59,14 +59,13 @@ def test_unenroll_many response = @finch.hris.benefits.individuals.unenroll_many("benefit_id") assert_pattern do - response => FinchAPI::Internal::SinglePage + response => FinchAPI::Models::HRIS::Benefits::IndividualUnenrollManyResponse end - row = response.to_enum.first - return if row.nil? - assert_pattern do - row => FinchAPI::Internal::Type::Unknown + response => { + job_id: String + } end end end From 176f00bd5ce8b85cec38d381b0c8c68a144060cf Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 9 Apr 2025 19:07:49 +0000 Subject: [PATCH 11/16] chore: fix typo (#140) --- .stats.yml | 2 +- lib/finch_api.rb | 2 +- ...dividual_benifit.rb => enrolled_individual_benefit.rb} | 4 +++- lib/finch_api/resources/hris/benefits/individuals.rb | 4 ++-- ...vidual_benifit.rbi => enrolled_individual_benefit.rbi} | 4 +++- rbi/lib/finch_api/resources/hris/benefits/individuals.rbi | 2 +- ...vidual_benifit.rbs => enrolled_individual_benefit.rbs} | 8 +++++--- sig/finch_api/resources/hris/benefits/individuals.rbs | 2 +- .../finch_api/resources/hris/benefits/individuals_test.rb | 2 +- 9 files changed, 18 insertions(+), 12 deletions(-) rename lib/finch_api/models/hris/benefits/{enrolled_individual_benifit.rb => enrolled_individual_benefit.rb} (80%) rename rbi/lib/finch_api/models/hris/benefits/{enrolled_individual_benifit.rbi => enrolled_individual_benefit.rbi} (74%) rename sig/finch_api/models/hris/benefits/{enrolled_individual_benifit.rbs => enrolled_individual_benefit.rbs} (55%) diff --git a/.stats.yml b/.stats.yml index de2b9cc9..7ded5a0c 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-bf858f37d7ab420841ddc6329dad8c46377308b6a5c8e935908011d0f9845e22.yml openapi_spec_hash: 2523952a32436e3c7fd3b55508c2e7ee -config_hash: 4a8def48077df6382ed9fe00588baecf +config_hash: 9faa2458e0e8bb125bf5d41e514a19e7 diff --git a/lib/finch_api.rb b/lib/finch_api.rb index b320a56e..67dd9950 100644 --- a/lib/finch_api.rb +++ b/lib/finch_api.rb @@ -82,7 +82,7 @@ require_relative "finch_api/models/hris/benefit_list_supported_benefits_params" require_relative "finch_api/models/hris/benefit_list_supported_benefits_response" require_relative "finch_api/models/hris/benefit_retrieve_params" -require_relative "finch_api/models/hris/benefits/enrolled_individual_benifit" +require_relative "finch_api/models/hris/benefits/enrolled_individual_benefit" require_relative "finch_api/models/hris/benefits/individual_benefit" require_relative "finch_api/models/hris/benefits/individual_enrolled_ids_params" require_relative "finch_api/models/hris/benefits/individual_enrolled_ids_response" diff --git a/lib/finch_api/models/hris/benefits/enrolled_individual_benifit.rb b/lib/finch_api/models/hris/benefits/enrolled_individual_benefit.rb similarity index 80% rename from lib/finch_api/models/hris/benefits/enrolled_individual_benifit.rb rename to lib/finch_api/models/hris/benefits/enrolled_individual_benefit.rb index e8c83775..5359dac8 100644 --- a/lib/finch_api/models/hris/benefits/enrolled_individual_benifit.rb +++ b/lib/finch_api/models/hris/benefits/enrolled_individual_benefit.rb @@ -5,7 +5,7 @@ module Models module HRIS module Benefits # @see FinchAPI::Resources::HRIS::Benefits::Individuals#enroll_many - class EnrolledIndividualBenifit < FinchAPI::Internal::Type::BaseModel + class EnrolledIndividualBenefit < FinchAPI::Internal::Type::BaseModel # @!attribute job_id # # @return [String] @@ -19,6 +19,8 @@ class EnrolledIndividualBenifit < FinchAPI::Internal::Type::BaseModel # def initialize: (Hash | FinchAPI::Internal::Type::BaseModel) -> void end end + + EnrolledIndividualBenefit = Benefits::EnrolledIndividualBenefit end end end diff --git a/lib/finch_api/resources/hris/benefits/individuals.rb b/lib/finch_api/resources/hris/benefits/individuals.rb index 529050f5..92ef8429 100644 --- a/lib/finch_api/resources/hris/benefits/individuals.rb +++ b/lib/finch_api/resources/hris/benefits/individuals.rb @@ -16,7 +16,7 @@ class Individuals # @param individuals [Array] # @param request_options [FinchAPI::RequestOptions, Hash{Symbol=>Object}, nil] # - # @return [FinchAPI::Models::HRIS::Benefits::EnrolledIndividualBenifit] + # @return [FinchAPI::Models::HRIS::Benefits::EnrolledIndividualBenefit] # # @see FinchAPI::Models::HRIS::Benefits::IndividualEnrollManyParams def enroll_many(benefit_id, params = {}) @@ -25,7 +25,7 @@ def enroll_many(benefit_id, params = {}) method: :post, path: ["employer/benefits/%1$s/individuals", benefit_id], body: parsed[:individuals], - model: FinchAPI::Models::HRIS::Benefits::EnrolledIndividualBenifit, + model: FinchAPI::Models::HRIS::Benefits::EnrolledIndividualBenefit, options: options ) end diff --git a/rbi/lib/finch_api/models/hris/benefits/enrolled_individual_benifit.rbi b/rbi/lib/finch_api/models/hris/benefits/enrolled_individual_benefit.rbi similarity index 74% rename from rbi/lib/finch_api/models/hris/benefits/enrolled_individual_benifit.rbi rename to rbi/lib/finch_api/models/hris/benefits/enrolled_individual_benefit.rbi index fe95ccd8..5d62f597 100644 --- a/rbi/lib/finch_api/models/hris/benefits/enrolled_individual_benifit.rbi +++ b/rbi/lib/finch_api/models/hris/benefits/enrolled_individual_benefit.rbi @@ -4,7 +4,7 @@ module FinchAPI module Models module HRIS module Benefits - class EnrolledIndividualBenifit < FinchAPI::Internal::Type::BaseModel + class EnrolledIndividualBenefit < FinchAPI::Internal::Type::BaseModel sig { returns(String) } attr_accessor :job_id @@ -15,6 +15,8 @@ module FinchAPI def to_hash; end end end + + EnrolledIndividualBenefit = Benefits::EnrolledIndividualBenefit end end end diff --git a/rbi/lib/finch_api/resources/hris/benefits/individuals.rbi b/rbi/lib/finch_api/resources/hris/benefits/individuals.rbi index 1bf32bed..1cfe5bca 100644 --- a/rbi/lib/finch_api/resources/hris/benefits/individuals.rbi +++ b/rbi/lib/finch_api/resources/hris/benefits/individuals.rbi @@ -20,7 +20,7 @@ module FinchAPI ], request_options: T.nilable(T.any(FinchAPI::RequestOptions, FinchAPI::Internal::AnyHash)) ) - .returns(FinchAPI::Models::HRIS::Benefits::EnrolledIndividualBenifit) + .returns(FinchAPI::Models::HRIS::Benefits::EnrolledIndividualBenefit) end def enroll_many( benefit_id, diff --git a/sig/finch_api/models/hris/benefits/enrolled_individual_benifit.rbs b/sig/finch_api/models/hris/benefits/enrolled_individual_benefit.rbs similarity index 55% rename from sig/finch_api/models/hris/benefits/enrolled_individual_benifit.rbs rename to sig/finch_api/models/hris/benefits/enrolled_individual_benefit.rbs index e191270f..30f34e12 100644 --- a/sig/finch_api/models/hris/benefits/enrolled_individual_benifit.rbs +++ b/sig/finch_api/models/hris/benefits/enrolled_individual_benefit.rbs @@ -1,15 +1,17 @@ module FinchAPI module Models module HRIS + class EnrolledIndividualBenefit = Benefits::EnrolledIndividualBenefit + module Benefits - type enrolled_individual_benifit = { job_id: String } + type enrolled_individual_benefit = { job_id: String } - class EnrolledIndividualBenifit < FinchAPI::Internal::Type::BaseModel + class EnrolledIndividualBenefit < FinchAPI::Internal::Type::BaseModel attr_accessor job_id: String def initialize: (job_id: String) -> void - def to_hash: -> FinchAPI::Models::HRIS::Benefits::enrolled_individual_benifit + def to_hash: -> FinchAPI::Models::HRIS::Benefits::enrolled_individual_benefit end end end diff --git a/sig/finch_api/resources/hris/benefits/individuals.rbs b/sig/finch_api/resources/hris/benefits/individuals.rbs index 9ca4dc08..27f5053f 100644 --- a/sig/finch_api/resources/hris/benefits/individuals.rbs +++ b/sig/finch_api/resources/hris/benefits/individuals.rbs @@ -7,7 +7,7 @@ module FinchAPI String benefit_id, ?individuals: ::Array[FinchAPI::Models::HRIS::Benefits::IndividualEnrollManyParams::Individual], ?request_options: FinchAPI::request_opts - ) -> FinchAPI::Models::HRIS::Benefits::EnrolledIndividualBenifit + ) -> FinchAPI::Models::HRIS::Benefits::EnrolledIndividualBenefit def enrolled_ids: ( String benefit_id, diff --git a/test/finch_api/resources/hris/benefits/individuals_test.rb b/test/finch_api/resources/hris/benefits/individuals_test.rb index a684420c..aa24608b 100644 --- a/test/finch_api/resources/hris/benefits/individuals_test.rb +++ b/test/finch_api/resources/hris/benefits/individuals_test.rb @@ -7,7 +7,7 @@ def test_enroll_many response = @finch.hris.benefits.individuals.enroll_many("benefit_id") assert_pattern do - response => FinchAPI::Models::HRIS::Benefits::EnrolledIndividualBenifit + response => FinchAPI::Models::HRIS::Benefits::EnrolledIndividualBenefit end assert_pattern do From 7492eec6cc2c2b3434126b3f6e79291d5badebaa Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 9 Apr 2025 19:35:51 +0000 Subject: [PATCH 12/16] feat(api): add models for hrs benefits individuals async responses --- .stats.yml | 2 +- lib/finch_api.rb | 2 +- ...benefit.rb => enrolled_individual_benefit_response.rb} | 4 +--- lib/finch_api/resources/hris/benefits/individuals.rb | 4 ++-- ...nefit.rbi => enrolled_individual_benefit_response.rbi} | 4 +--- rbi/lib/finch_api/resources/hris/benefits/individuals.rbi | 2 +- ...nefit.rbs => enrolled_individual_benefit_response.rbs} | 8 +++----- sig/finch_api/resources/hris/benefits/individuals.rbs | 2 +- .../finch_api/resources/hris/benefits/individuals_test.rb | 2 +- 9 files changed, 12 insertions(+), 18 deletions(-) rename lib/finch_api/models/hris/benefits/{enrolled_individual_benefit.rb => enrolled_individual_benefit_response.rb} (78%) rename rbi/lib/finch_api/models/hris/benefits/{enrolled_individual_benefit.rbi => enrolled_individual_benefit_response.rbi} (71%) rename sig/finch_api/models/hris/benefits/{enrolled_individual_benefit.rbs => enrolled_individual_benefit_response.rbs} (52%) diff --git a/.stats.yml b/.stats.yml index 7ded5a0c..5c34e39d 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-bf858f37d7ab420841ddc6329dad8c46377308b6a5c8e935908011d0f9845e22.yml openapi_spec_hash: 2523952a32436e3c7fd3b55508c2e7ee -config_hash: 9faa2458e0e8bb125bf5d41e514a19e7 +config_hash: bedc278fd693e36e7d8dc508d75ab76a diff --git a/lib/finch_api.rb b/lib/finch_api.rb index 67dd9950..08331f6f 100644 --- a/lib/finch_api.rb +++ b/lib/finch_api.rb @@ -82,7 +82,7 @@ require_relative "finch_api/models/hris/benefit_list_supported_benefits_params" require_relative "finch_api/models/hris/benefit_list_supported_benefits_response" require_relative "finch_api/models/hris/benefit_retrieve_params" -require_relative "finch_api/models/hris/benefits/enrolled_individual_benefit" +require_relative "finch_api/models/hris/benefits/enrolled_individual_benefit_response" require_relative "finch_api/models/hris/benefits/individual_benefit" require_relative "finch_api/models/hris/benefits/individual_enrolled_ids_params" require_relative "finch_api/models/hris/benefits/individual_enrolled_ids_response" diff --git a/lib/finch_api/models/hris/benefits/enrolled_individual_benefit.rb b/lib/finch_api/models/hris/benefits/enrolled_individual_benefit_response.rb similarity index 78% rename from lib/finch_api/models/hris/benefits/enrolled_individual_benefit.rb rename to lib/finch_api/models/hris/benefits/enrolled_individual_benefit_response.rb index 5359dac8..116dd384 100644 --- a/lib/finch_api/models/hris/benefits/enrolled_individual_benefit.rb +++ b/lib/finch_api/models/hris/benefits/enrolled_individual_benefit_response.rb @@ -5,7 +5,7 @@ module Models module HRIS module Benefits # @see FinchAPI::Resources::HRIS::Benefits::Individuals#enroll_many - class EnrolledIndividualBenefit < FinchAPI::Internal::Type::BaseModel + class EnrolledIndividualBenefitResponse < FinchAPI::Internal::Type::BaseModel # @!attribute job_id # # @return [String] @@ -19,8 +19,6 @@ class EnrolledIndividualBenefit < FinchAPI::Internal::Type::BaseModel # def initialize: (Hash | FinchAPI::Internal::Type::BaseModel) -> void end end - - EnrolledIndividualBenefit = Benefits::EnrolledIndividualBenefit end end end diff --git a/lib/finch_api/resources/hris/benefits/individuals.rb b/lib/finch_api/resources/hris/benefits/individuals.rb index 92ef8429..1f5bdb60 100644 --- a/lib/finch_api/resources/hris/benefits/individuals.rb +++ b/lib/finch_api/resources/hris/benefits/individuals.rb @@ -16,7 +16,7 @@ class Individuals # @param individuals [Array] # @param request_options [FinchAPI::RequestOptions, Hash{Symbol=>Object}, nil] # - # @return [FinchAPI::Models::HRIS::Benefits::EnrolledIndividualBenefit] + # @return [FinchAPI::Models::HRIS::Benefits::EnrolledIndividualBenefitResponse] # # @see FinchAPI::Models::HRIS::Benefits::IndividualEnrollManyParams def enroll_many(benefit_id, params = {}) @@ -25,7 +25,7 @@ def enroll_many(benefit_id, params = {}) method: :post, path: ["employer/benefits/%1$s/individuals", benefit_id], body: parsed[:individuals], - model: FinchAPI::Models::HRIS::Benefits::EnrolledIndividualBenefit, + model: FinchAPI::Models::HRIS::Benefits::EnrolledIndividualBenefitResponse, options: options ) end diff --git a/rbi/lib/finch_api/models/hris/benefits/enrolled_individual_benefit.rbi b/rbi/lib/finch_api/models/hris/benefits/enrolled_individual_benefit_response.rbi similarity index 71% rename from rbi/lib/finch_api/models/hris/benefits/enrolled_individual_benefit.rbi rename to rbi/lib/finch_api/models/hris/benefits/enrolled_individual_benefit_response.rbi index 5d62f597..179f79fc 100644 --- a/rbi/lib/finch_api/models/hris/benefits/enrolled_individual_benefit.rbi +++ b/rbi/lib/finch_api/models/hris/benefits/enrolled_individual_benefit_response.rbi @@ -4,7 +4,7 @@ module FinchAPI module Models module HRIS module Benefits - class EnrolledIndividualBenefit < FinchAPI::Internal::Type::BaseModel + class EnrolledIndividualBenefitResponse < FinchAPI::Internal::Type::BaseModel sig { returns(String) } attr_accessor :job_id @@ -15,8 +15,6 @@ module FinchAPI def to_hash; end end end - - EnrolledIndividualBenefit = Benefits::EnrolledIndividualBenefit end end end diff --git a/rbi/lib/finch_api/resources/hris/benefits/individuals.rbi b/rbi/lib/finch_api/resources/hris/benefits/individuals.rbi index 1cfe5bca..18344184 100644 --- a/rbi/lib/finch_api/resources/hris/benefits/individuals.rbi +++ b/rbi/lib/finch_api/resources/hris/benefits/individuals.rbi @@ -20,7 +20,7 @@ module FinchAPI ], request_options: T.nilable(T.any(FinchAPI::RequestOptions, FinchAPI::Internal::AnyHash)) ) - .returns(FinchAPI::Models::HRIS::Benefits::EnrolledIndividualBenefit) + .returns(FinchAPI::Models::HRIS::Benefits::EnrolledIndividualBenefitResponse) end def enroll_many( benefit_id, diff --git a/sig/finch_api/models/hris/benefits/enrolled_individual_benefit.rbs b/sig/finch_api/models/hris/benefits/enrolled_individual_benefit_response.rbs similarity index 52% rename from sig/finch_api/models/hris/benefits/enrolled_individual_benefit.rbs rename to sig/finch_api/models/hris/benefits/enrolled_individual_benefit_response.rbs index 30f34e12..de9c01c7 100644 --- a/sig/finch_api/models/hris/benefits/enrolled_individual_benefit.rbs +++ b/sig/finch_api/models/hris/benefits/enrolled_individual_benefit_response.rbs @@ -1,17 +1,15 @@ module FinchAPI module Models module HRIS - class EnrolledIndividualBenefit = Benefits::EnrolledIndividualBenefit - module Benefits - type enrolled_individual_benefit = { job_id: String } + type enrolled_individual_benefit_response = { job_id: String } - class EnrolledIndividualBenefit < FinchAPI::Internal::Type::BaseModel + class EnrolledIndividualBenefitResponse < FinchAPI::Internal::Type::BaseModel attr_accessor job_id: String def initialize: (job_id: String) -> void - def to_hash: -> FinchAPI::Models::HRIS::Benefits::enrolled_individual_benefit + def to_hash: -> FinchAPI::Models::HRIS::Benefits::enrolled_individual_benefit_response end end end diff --git a/sig/finch_api/resources/hris/benefits/individuals.rbs b/sig/finch_api/resources/hris/benefits/individuals.rbs index 27f5053f..3b079739 100644 --- a/sig/finch_api/resources/hris/benefits/individuals.rbs +++ b/sig/finch_api/resources/hris/benefits/individuals.rbs @@ -7,7 +7,7 @@ module FinchAPI String benefit_id, ?individuals: ::Array[FinchAPI::Models::HRIS::Benefits::IndividualEnrollManyParams::Individual], ?request_options: FinchAPI::request_opts - ) -> FinchAPI::Models::HRIS::Benefits::EnrolledIndividualBenefit + ) -> FinchAPI::Models::HRIS::Benefits::EnrolledIndividualBenefitResponse def enrolled_ids: ( String benefit_id, diff --git a/test/finch_api/resources/hris/benefits/individuals_test.rb b/test/finch_api/resources/hris/benefits/individuals_test.rb index aa24608b..c15fde9e 100644 --- a/test/finch_api/resources/hris/benefits/individuals_test.rb +++ b/test/finch_api/resources/hris/benefits/individuals_test.rb @@ -7,7 +7,7 @@ def test_enroll_many response = @finch.hris.benefits.individuals.enroll_many("benefit_id") assert_pattern do - response => FinchAPI::Models::HRIS::Benefits::EnrolledIndividualBenefit + response => FinchAPI::Models::HRIS::Benefits::EnrolledIndividualBenefitResponse end assert_pattern do From 48e4f106285126601f9b60296d589f82b775e19b Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 9 Apr 2025 19:36:57 +0000 Subject: [PATCH 13/16] chore: fix typo --- .stats.yml | 2 +- lib/finch_api.rb | 2 +- ...> unenrolled_individual_benefit_response.rb} | 2 +- .../resources/hris/benefits/individuals.rb | 4 ++-- ... unenrolled_individual_benefit_response.rbi} | 2 +- .../resources/hris/benefits/individuals.rbi | 2 +- .../individual_unenroll_many_response.rbs | 17 ----------------- .../unenrolled_individual_benefit_response.rbs | 17 +++++++++++++++++ .../resources/hris/benefits/individuals.rbs | 2 +- .../resources/hris/benefits/individuals_test.rb | 2 +- 10 files changed, 26 insertions(+), 26 deletions(-) rename lib/finch_api/models/hris/benefits/{individual_unenroll_many_response.rb => unenrolled_individual_benefit_response.rb} (85%) rename rbi/lib/finch_api/models/hris/benefits/{individual_unenroll_many_response.rbi => unenrolled_individual_benefit_response.rbi} (81%) delete mode 100644 sig/finch_api/models/hris/benefits/individual_unenroll_many_response.rbs create mode 100644 sig/finch_api/models/hris/benefits/unenrolled_individual_benefit_response.rbs diff --git a/.stats.yml b/.stats.yml index 5c34e39d..f9cf330b 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-bf858f37d7ab420841ddc6329dad8c46377308b6a5c8e935908011d0f9845e22.yml openapi_spec_hash: 2523952a32436e3c7fd3b55508c2e7ee -config_hash: bedc278fd693e36e7d8dc508d75ab76a +config_hash: 53778a0b839c4f6ad34fbba051f5e8a6 diff --git a/lib/finch_api.rb b/lib/finch_api.rb index 08331f6f..99cf3432 100644 --- a/lib/finch_api.rb +++ b/lib/finch_api.rb @@ -89,7 +89,7 @@ require_relative "finch_api/models/hris/benefits/individual_enroll_many_params" require_relative "finch_api/models/hris/benefits/individual_retrieve_many_benefits_params" require_relative "finch_api/models/hris/benefits/individual_unenroll_many_params" -require_relative "finch_api/models/hris/benefits/individual_unenroll_many_response" +require_relative "finch_api/models/hris/benefits/unenrolled_individual_benefit_response" require_relative "finch_api/models/hris/benefits_support" require_relative "finch_api/models/hris/benefit_type" require_relative "finch_api/models/hris/benefit_update_params" diff --git a/lib/finch_api/models/hris/benefits/individual_unenroll_many_response.rb b/lib/finch_api/models/hris/benefits/unenrolled_individual_benefit_response.rb similarity index 85% rename from lib/finch_api/models/hris/benefits/individual_unenroll_many_response.rb rename to lib/finch_api/models/hris/benefits/unenrolled_individual_benefit_response.rb index 1b6ea99f..307626e8 100644 --- a/lib/finch_api/models/hris/benefits/individual_unenroll_many_response.rb +++ b/lib/finch_api/models/hris/benefits/unenrolled_individual_benefit_response.rb @@ -5,7 +5,7 @@ module Models module HRIS module Benefits # @see FinchAPI::Resources::HRIS::Benefits::Individuals#unenroll_many - class IndividualUnenrollManyResponse < FinchAPI::Internal::Type::BaseModel + class UnenrolledIndividualBenefitResponse < FinchAPI::Internal::Type::BaseModel # @!attribute job_id # # @return [String] diff --git a/lib/finch_api/resources/hris/benefits/individuals.rb b/lib/finch_api/resources/hris/benefits/individuals.rb index 1f5bdb60..1979f3f3 100644 --- a/lib/finch_api/resources/hris/benefits/individuals.rb +++ b/lib/finch_api/resources/hris/benefits/individuals.rb @@ -81,7 +81,7 @@ def retrieve_many_benefits(benefit_id, params = {}) # @param individual_ids [Array] # @param request_options [FinchAPI::RequestOptions, Hash{Symbol=>Object}, nil] # - # @return [FinchAPI::Models::HRIS::Benefits::IndividualUnenrollManyResponse] + # @return [FinchAPI::Models::HRIS::Benefits::UnenrolledIndividualBenefitResponse] # # @see FinchAPI::Models::HRIS::Benefits::IndividualUnenrollManyParams def unenroll_many(benefit_id, params = {}) @@ -90,7 +90,7 @@ def unenroll_many(benefit_id, params = {}) method: :delete, path: ["employer/benefits/%1$s/individuals", benefit_id], body: parsed, - model: FinchAPI::Models::HRIS::Benefits::IndividualUnenrollManyResponse, + model: FinchAPI::Models::HRIS::Benefits::UnenrolledIndividualBenefitResponse, options: options ) end diff --git a/rbi/lib/finch_api/models/hris/benefits/individual_unenroll_many_response.rbi b/rbi/lib/finch_api/models/hris/benefits/unenrolled_individual_benefit_response.rbi similarity index 81% rename from rbi/lib/finch_api/models/hris/benefits/individual_unenroll_many_response.rbi rename to rbi/lib/finch_api/models/hris/benefits/unenrolled_individual_benefit_response.rbi index 5d3adafa..b3264f20 100644 --- a/rbi/lib/finch_api/models/hris/benefits/individual_unenroll_many_response.rbi +++ b/rbi/lib/finch_api/models/hris/benefits/unenrolled_individual_benefit_response.rbi @@ -4,7 +4,7 @@ module FinchAPI module Models module HRIS module Benefits - class IndividualUnenrollManyResponse < FinchAPI::Internal::Type::BaseModel + class UnenrolledIndividualBenefitResponse < FinchAPI::Internal::Type::BaseModel sig { returns(String) } attr_accessor :job_id diff --git a/rbi/lib/finch_api/resources/hris/benefits/individuals.rbi b/rbi/lib/finch_api/resources/hris/benefits/individuals.rbi index 18344184..b4a7c9e0 100644 --- a/rbi/lib/finch_api/resources/hris/benefits/individuals.rbi +++ b/rbi/lib/finch_api/resources/hris/benefits/individuals.rbi @@ -61,7 +61,7 @@ module FinchAPI individual_ids: T::Array[String], request_options: T.nilable(T.any(FinchAPI::RequestOptions, FinchAPI::Internal::AnyHash)) ) - .returns(FinchAPI::Models::HRIS::Benefits::IndividualUnenrollManyResponse) + .returns(FinchAPI::Models::HRIS::Benefits::UnenrolledIndividualBenefitResponse) end def unenroll_many( benefit_id, diff --git a/sig/finch_api/models/hris/benefits/individual_unenroll_many_response.rbs b/sig/finch_api/models/hris/benefits/individual_unenroll_many_response.rbs deleted file mode 100644 index d7c19061..00000000 --- a/sig/finch_api/models/hris/benefits/individual_unenroll_many_response.rbs +++ /dev/null @@ -1,17 +0,0 @@ -module FinchAPI - module Models - module HRIS - module Benefits - type individual_unenroll_many_response = { job_id: String } - - class IndividualUnenrollManyResponse < FinchAPI::Internal::Type::BaseModel - attr_accessor job_id: String - - def initialize: (job_id: String) -> void - - def to_hash: -> FinchAPI::Models::HRIS::Benefits::individual_unenroll_many_response - end - end - end - end -end diff --git a/sig/finch_api/models/hris/benefits/unenrolled_individual_benefit_response.rbs b/sig/finch_api/models/hris/benefits/unenrolled_individual_benefit_response.rbs new file mode 100644 index 00000000..52bee538 --- /dev/null +++ b/sig/finch_api/models/hris/benefits/unenrolled_individual_benefit_response.rbs @@ -0,0 +1,17 @@ +module FinchAPI + module Models + module HRIS + module Benefits + type unenrolled_individual_benefit_response = { job_id: String } + + class UnenrolledIndividualBenefitResponse < FinchAPI::Internal::Type::BaseModel + attr_accessor job_id: String + + def initialize: (job_id: String) -> void + + def to_hash: -> FinchAPI::Models::HRIS::Benefits::unenrolled_individual_benefit_response + end + end + end + end +end diff --git a/sig/finch_api/resources/hris/benefits/individuals.rbs b/sig/finch_api/resources/hris/benefits/individuals.rbs index 3b079739..f3ca6b9a 100644 --- a/sig/finch_api/resources/hris/benefits/individuals.rbs +++ b/sig/finch_api/resources/hris/benefits/individuals.rbs @@ -24,7 +24,7 @@ module FinchAPI String benefit_id, ?individual_ids: ::Array[String], ?request_options: FinchAPI::request_opts - ) -> FinchAPI::Models::HRIS::Benefits::IndividualUnenrollManyResponse + ) -> FinchAPI::Models::HRIS::Benefits::UnenrolledIndividualBenefitResponse def initialize: (client: FinchAPI::Client) -> void end diff --git a/test/finch_api/resources/hris/benefits/individuals_test.rb b/test/finch_api/resources/hris/benefits/individuals_test.rb index c15fde9e..2c9ea1db 100644 --- a/test/finch_api/resources/hris/benefits/individuals_test.rb +++ b/test/finch_api/resources/hris/benefits/individuals_test.rb @@ -59,7 +59,7 @@ def test_unenroll_many response = @finch.hris.benefits.individuals.unenroll_many("benefit_id") assert_pattern do - response => FinchAPI::Models::HRIS::Benefits::IndividualUnenrollManyResponse + response => FinchAPI::Models::HRIS::Benefits::UnenrolledIndividualBenefitResponse end assert_pattern do From ff0aa81561a53763a8ac6fdf373969991b193580 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 9 Apr 2025 21:07:03 +0000 Subject: [PATCH 14/16] chore(internal): reduce CI branch coverage --- .github/workflows/ci.yml | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1a75c727..b2c0c8f7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,19 +1,17 @@ name: CI on: push: - branches-ignore: - - 'generated' - - 'codegen/**' - - 'integrated/**' - - 'preview-head/**' - - 'preview-base/**' - - 'preview/**' + branches: + - main + pull_request: + branches: + - main + - next jobs: lint: name: lint runs-on: ubuntu-latest - steps: - uses: actions/checkout@v4 - name: Set up Ruby From ff3d47c157613223fdafd0f953f5ab72f647a30a Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 10 Apr 2025 17:49:08 +0000 Subject: [PATCH 15/16] chore: fix lsp configuration file for local development --- .solargraph.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.solargraph.yml b/.solargraph.yml index e3984420..b9232619 100644 --- a/.solargraph.yml +++ b/.solargraph.yml @@ -5,7 +5,7 @@ include: - 'Rakefile' - 'examples/**/*.rb' - 'lib/**/*.rb' - - 'test/finch-api/resource_namespaces.rb' - - 'test/finch-api/test_helper.rb' + - 'test/finch_api/resource_namespaces.rb' + - 'test/finch_api/test_helper.rb' exclude: - 'rbi/**/*' From db2f2df108e1ba6b3ad8a59cd441d6a622c0fa40 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 10 Apr 2025 17:49:30 +0000 Subject: [PATCH 16/16] release: 0.1.0-alpha.9 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 30 ++++++++++++++++++++++++++++++ README.md | 2 +- lib/finch_api/version.rb | 2 +- 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index c373724d..46b9b6b2 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.1.0-alpha.8" + ".": "0.1.0-alpha.9" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 05e4e073..0fd00a24 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,35 @@ # Changelog +## 0.1.0-alpha.9 (2025-04-10) + +Full Changelog: [v0.1.0-alpha.8...v0.1.0-alpha.9](https://github.com/Finch-API/finch-api-ruby/compare/v0.1.0-alpha.8...v0.1.0-alpha.9) + +### Features + +* **api:** add models for hrs benefits individuals async responses ([7492eec](https://github.com/Finch-API/finch-api-ruby/commit/7492eec6cc2c2b3434126b3f6e79291d5badebaa)) +* **api:** api update ([#136](https://github.com/Finch-API/finch-api-ruby/issues/136)) ([e1bd1b5](https://github.com/Finch-API/finch-api-ruby/commit/e1bd1b517f2ef5acba32de6490c581cde6b5a88f)) +* **api:** benefits mutation API endpoints (create benefit, update benefit, enroll individual, unenroll individual) now properly return async response types ([#139](https://github.com/Finch-API/finch-api-ruby/issues/139)) ([f6b269c](https://github.com/Finch-API/finch-api-ruby/commit/f6b269cdc764e317bf5c3622bac66d625222d1db)) +* use Pathname alongside raw IO handles for file uploads ([#132](https://github.com/Finch-API/finch-api-ruby/issues/132)) ([ca140ed](https://github.com/Finch-API/finch-api-ruby/commit/ca140ed7e0ba64dab0532c07e54c1fd3c74ee887)) + + +### Bug Fixes + +* **internal:** update release-please to use ruby strategy for README.md ([#137](https://github.com/Finch-API/finch-api-ruby/issues/137)) ([8a2f9b4](https://github.com/Finch-API/finch-api-ruby/commit/8a2f9b4b2ee02513530d25a86eff44ee66b6c47d)) +* raise connection error for errors that result from HTTP transports ([#133](https://github.com/Finch-API/finch-api-ruby/issues/133)) ([908b8ba](https://github.com/Finch-API/finch-api-ruby/commit/908b8bab442d72e3061461b66b130f852e09949d)) + + +### Chores + +* add README docs for using solargraph when installing gem from git ([#131](https://github.com/Finch-API/finch-api-ruby/issues/131)) ([7bec93f](https://github.com/Finch-API/finch-api-ruby/commit/7bec93f44da855671b5c1be8ca11cb57f30d5cc7)) +* ensure readme.md is bumped when release please updates versions ([#135](https://github.com/Finch-API/finch-api-ruby/issues/135)) ([52953bd](https://github.com/Finch-API/finch-api-ruby/commit/52953bd7d499b595d8632c67db0a2c4ec418be7d)) +* fix lsp configuration file for local development ([ff3d47c](https://github.com/Finch-API/finch-api-ruby/commit/ff3d47c157613223fdafd0f953f5ab72f647a30a)) +* fix typo ([48e4f10](https://github.com/Finch-API/finch-api-ruby/commit/48e4f106285126601f9b60296d589f82b775e19b)) +* fix typo ([#140](https://github.com/Finch-API/finch-api-ruby/issues/140)) ([176f00b](https://github.com/Finch-API/finch-api-ruby/commit/176f00bd5ce8b85cec38d381b0c8c68a144060cf)) +* **internal:** expand CI branch coverage ([#138](https://github.com/Finch-API/finch-api-ruby/issues/138)) ([e699355](https://github.com/Finch-API/finch-api-ruby/commit/e699355e6db0fbf1853fdb7d9769eec8f6043fca)) +* **internal:** reduce CI branch coverage ([ff0aa81](https://github.com/Finch-API/finch-api-ruby/commit/ff0aa81561a53763a8ac6fdf373969991b193580)) +* **internal:** version bump ([508a2f6](https://github.com/Finch-API/finch-api-ruby/commit/508a2f6cc90a990e2ef220e9dcf41afde861f464)) +* loosen const and integer coercion rules ([#134](https://github.com/Finch-API/finch-api-ruby/issues/134)) ([954fa16](https://github.com/Finch-API/finch-api-ruby/commit/954fa162fb447df7392082c5b7676f205701b18a)) + ## 0.1.0-alpha.8 (2025-04-08) Full Changelog: [v0.1.0-alpha.7...v0.1.0-alpha.8](https://github.com/Finch-API/finch-api-ruby/compare/v0.1.0-alpha.7...v0.1.0-alpha.8) diff --git a/README.md b/README.md index 6608b92d..cc57cd49 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ To use this gem, install via Bundler by adding the following to your application ```ruby -gem "finch-api", "~> 0.1.0.pre.alpha.8" +gem "finch-api", "~> 0.1.0.pre.alpha.9" ``` diff --git a/lib/finch_api/version.rb b/lib/finch_api/version.rb index 1e35204f..075ed328 100644 --- a/lib/finch_api/version.rb +++ b/lib/finch_api/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module FinchAPI - VERSION = "0.1.0.pre.alpha.8" + VERSION = "0.1.0.pre.alpha.9" end