Skip to content

Commit ed3b639

Browse files
chore: move private classes into internal module (#103)
1 parent 4e15ab3 commit ed3b639

329 files changed

Lines changed: 6544 additions & 6133 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

lib/finch_api.rb

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -36,27 +36,27 @@
3636

3737
# Package files.
3838
require_relative "finch_api/version"
39-
require_relative "finch_api/util"
40-
require_relative "finch_api/type/converter"
41-
require_relative "finch_api/type/unknown"
42-
require_relative "finch_api/type/boolean_model"
43-
require_relative "finch_api/type/enum"
44-
require_relative "finch_api/type/union"
45-
require_relative "finch_api/type/array_of"
46-
require_relative "finch_api/type/hash_of"
47-
require_relative "finch_api/type/base_model"
48-
require_relative "finch_api/type/base_page"
49-
require_relative "finch_api/type/request_parameters"
50-
require_relative "finch_api/type"
39+
require_relative "finch_api/internal/util"
40+
require_relative "finch_api/internal/type/converter"
41+
require_relative "finch_api/internal/type/unknown"
42+
require_relative "finch_api/internal/type/boolean_model"
43+
require_relative "finch_api/internal/type/enum"
44+
require_relative "finch_api/internal/type/union"
45+
require_relative "finch_api/internal/type/array_of"
46+
require_relative "finch_api/internal/type/hash_of"
47+
require_relative "finch_api/internal/type/base_model"
48+
require_relative "finch_api/internal/type/base_page"
49+
require_relative "finch_api/internal/type/request_parameters"
50+
require_relative "finch_api/aliases"
5151
require_relative "finch_api/request_options"
5252
require_relative "finch_api/errors"
53-
require_relative "finch_api/transport/base_client"
54-
require_relative "finch_api/transport/pooled_net_requester"
53+
require_relative "finch_api/internal/transport/base_client"
54+
require_relative "finch_api/internal/transport/pooled_net_requester"
5555
require_relative "finch_api/client"
56-
require_relative "finch_api/individuals_page"
57-
require_relative "finch_api/page"
58-
require_relative "finch_api/responses_page"
59-
require_relative "finch_api/single_page"
56+
require_relative "finch_api/internal/individuals_page"
57+
require_relative "finch_api/internal/page"
58+
require_relative "finch_api/internal/responses_page"
59+
require_relative "finch_api/internal/single_page"
6060
require_relative "finch_api/models/base_webhook_event"
6161
require_relative "finch_api/models/hris/benefit_contribution"
6262
require_relative "finch_api/models/sandbox/jobs/sandbox_job_configuration"

lib/finch_api/aliases.rb

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# frozen_string_literal: true
2+
3+
module FinchAPI
4+
Unknown = FinchAPI::Internal::Type::Unknown
5+
6+
BooleanModel = FinchAPI::Internal::Type::BooleanModel
7+
8+
Enum = FinchAPI::Internal::Type::Enum
9+
10+
Union = FinchAPI::Internal::Type::Union
11+
12+
ArrayOf = FinchAPI::Internal::Type::ArrayOf
13+
14+
HashOf = FinchAPI::Internal::Type::HashOf
15+
16+
BaseModel = FinchAPI::Internal::Type::BaseModel
17+
18+
RequestParameters = FinchAPI::Internal::Type::RequestParameters
19+
end

lib/finch_api/client.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# frozen_string_literal: true
22

33
module FinchAPI
4-
class Client < FinchAPI::Transport::BaseClient
4+
class Client < FinchAPI::Internal::Transport::BaseClient
55
# Default max number of retries to attempt after a failed retryable request.
66
DEFAULT_MAX_RETRIES = 2
77

lib/finch_api/individuals_page.rb

Lines changed: 0 additions & 92 deletions
This file was deleted.
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
# frozen_string_literal: true
2+
3+
module FinchAPI
4+
module Internal
5+
# @example
6+
# if individuals_page.has_next?
7+
# individuals_page = individuals_page.next_page
8+
# end
9+
#
10+
# @example
11+
# individuals_page.auto_paging_each do |directory|
12+
# puts(directory)
13+
# end
14+
#
15+
# @example
16+
# directories =
17+
# individuals_page
18+
# .to_enum
19+
# .lazy
20+
# .select { _1.object_id.even? }
21+
# .map(&:itself)
22+
# .take(2)
23+
# .to_a
24+
#
25+
# directories => Array
26+
class IndividualsPage
27+
include FinchAPI::Internal::Type::BasePage
28+
29+
# @return [Array<Object>, nil]
30+
attr_accessor :individuals
31+
32+
# @return [FinchAPI::Models::Paging]
33+
attr_accessor :paging
34+
35+
# @api private
36+
#
37+
# @param client [FinchAPI::Internal::Transport::BaseClient]
38+
# @param req [Hash{Symbol=>Object}]
39+
# @param headers [Hash{String=>String}, Net::HTTPHeader]
40+
# @param page_data [Hash{Symbol=>Object}]
41+
def initialize(client:, req:, headers:, page_data:)
42+
super
43+
model = req.fetch(:model)
44+
45+
case page_data
46+
in {individuals: Array | nil => individuals}
47+
@individuals = individuals&.map { FinchAPI::Internal::Type::Converter.coerce(model, _1) }
48+
else
49+
end
50+
51+
case page_data
52+
in {paging: Hash | nil => paging}
53+
@paging = FinchAPI::Internal::Type::Converter.coerce(FinchAPI::Models::Paging, paging)
54+
else
55+
end
56+
end
57+
58+
# @return [Boolean]
59+
def next_page?
60+
paging&.offset.to_i + individuals.to_a.size < paging&.count.to_i
61+
end
62+
63+
# @raise [FinchAPI::HTTP::Error]
64+
# @return [FinchAPI::Internal::IndividualsPage]
65+
def next_page
66+
unless next_page?
67+
message = "No more pages available. Please check #next_page? before calling ##{__method__}"
68+
raise RuntimeError.new(message)
69+
end
70+
71+
req = FinchAPI::Internal::Util.deep_merge(
72+
@req,
73+
{query: {offset: paging&.offset.to_i + individuals.to_a.size}}
74+
)
75+
@client.request(req)
76+
end
77+
78+
# @param blk [Proc]
79+
def auto_paging_each(&blk)
80+
unless block_given?
81+
raise ArgumentError.new("A block must be given to ##{__method__}")
82+
end
83+
page = self
84+
loop do
85+
page.individuals&.each { blk.call(_1) }
86+
break unless page.next_page?
87+
page = page.next_page
88+
end
89+
end
90+
91+
# @return [String]
92+
def inspect
93+
"#<#{self.class}:0x#{object_id.to_s(16)} individuals=#{individuals.inspect} paging=#{paging.inspect}>"
94+
end
95+
end
96+
end
97+
end

lib/finch_api/internal/page.rb

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
# frozen_string_literal: true
2+
3+
module FinchAPI
4+
module Internal
5+
# @example
6+
# if page.has_next?
7+
# page = page.next_page
8+
# end
9+
#
10+
# @example
11+
# page.auto_paging_each do |item|
12+
# puts(item)
13+
# end
14+
#
15+
# @example
16+
# items =
17+
# page
18+
# .to_enum
19+
# .lazy
20+
# .select { _1.object_id.even? }
21+
# .map(&:itself)
22+
# .take(2)
23+
# .to_a
24+
#
25+
# items => Array
26+
class Page
27+
include FinchAPI::Internal::Type::BasePage
28+
29+
# @return [Array<Object>, nil]
30+
attr_accessor :data
31+
32+
# @return [FinchAPI::Models::Paging]
33+
attr_accessor :paging
34+
35+
# @api private
36+
#
37+
# @param client [FinchAPI::Internal::Transport::BaseClient]
38+
# @param req [Hash{Symbol=>Object}]
39+
# @param headers [Hash{String=>String}, Net::HTTPHeader]
40+
# @param page_data [Hash{Symbol=>Object}]
41+
def initialize(client:, req:, headers:, page_data:)
42+
super
43+
model = req.fetch(:model)
44+
45+
case page_data
46+
in {data: Array | nil => data}
47+
@data = data&.map { FinchAPI::Internal::Type::Converter.coerce(model, _1) }
48+
else
49+
end
50+
51+
case page_data
52+
in {paging: Hash | nil => paging}
53+
@paging = FinchAPI::Internal::Type::Converter.coerce(FinchAPI::Models::Paging, paging)
54+
else
55+
end
56+
end
57+
58+
# @return [Boolean]
59+
def next_page?
60+
paging&.offset.to_i + data.to_a.size < paging&.count.to_i
61+
end
62+
63+
# @raise [FinchAPI::HTTP::Error]
64+
# @return [FinchAPI::Internal::Page]
65+
def next_page
66+
unless next_page?
67+
message = "No more pages available. Please check #next_page? before calling ##{__method__}"
68+
raise RuntimeError.new(message)
69+
end
70+
71+
req = FinchAPI::Internal::Util.deep_merge(
72+
@req,
73+
{query: {offset: paging&.offset.to_i + data.to_a.size}}
74+
)
75+
@client.request(req)
76+
end
77+
78+
# @param blk [Proc]
79+
def auto_paging_each(&blk)
80+
unless block_given?
81+
raise ArgumentError.new("A block must be given to ##{__method__}")
82+
end
83+
page = self
84+
loop do
85+
page.data&.each { blk.call(_1) }
86+
break unless page.next_page?
87+
page = page.next_page
88+
end
89+
end
90+
91+
# @return [String]
92+
def inspect
93+
"#<#{self.class}:0x#{object_id.to_s(16)} data=#{data.inspect} paging=#{paging.inspect}>"
94+
end
95+
end
96+
end
97+
end

0 commit comments

Comments
 (0)