chalk_ruby 0.3.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5078b236fa2532b078ba26509838b574bcb72c624ac4a27eb41f7fb34b9fb617
4
- data.tar.gz: af01a9060816db57ff9198129a8d3ac2d0c7cce683e0ea59da1f9f6ed7ead09a
3
+ metadata.gz: 394c3d1735d1ee6d9ecc4df5d6ba9627a7323bc42a0c89df4879aadfc7a9b923
4
+ data.tar.gz: 62bca659a3b33122657df4c6bfccc2a420de7d815d8a4da09e7f3b01b13ef683
5
5
  SHA512:
6
- metadata.gz: f0f5a7f1ca26cefac916b76bf8f83b77b94ecc64344985d7d5adf6fe77aaebc61b811b6c9f5cbc3dd1cc78dc7b1fe519a3d7b9e45656294c0bc021b42cafe9cf
7
- data.tar.gz: 910e8c846f446f44bb556f34c430d4eec7e24482ff3e13f29ad6874c635f48f5539e0502c25dfb8a9d6d48227a538beedbcd598474d6bc3c059136746f9194b6
6
+ metadata.gz: 5027aaea4f0bc4c65b3f51d8552992c4831137f4a118f82f308332c9277381b2c4d86c71d4858aaf6f53a9518f6654918fec701188abb030dd48891b01f0b917
7
+ data.tar.gz: 90555aee1fde8a17db6624ea7d9ed8049e5ffee4f4ce4b2bdb1171edf91aae422cae8366958223ffe343bc9c2c69bdbacdb796079aca318519ba0503c56661a4
@@ -0,0 +1,41 @@
1
+ name: Release Gem
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*'
7
+
8
+ jobs:
9
+ build:
10
+ runs-on: ubuntu-latest
11
+ permissions:
12
+ contents: read
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+
16
+ - name: Set up Ruby
17
+ uses: ruby/setup-ruby@v1
18
+ with:
19
+ ruby-version: '3.0'
20
+ bundler-cache: true
21
+
22
+ - name: Extract version from tag
23
+ id: get_version
24
+ run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV
25
+
26
+ - name: Update version.rb
27
+ run: |
28
+ sed -i "s/VERSION = '.*'/VERSION = '${{ env.VERSION }}'/g" lib/chalk_ruby/version.rb
29
+
30
+ - name: Build gem
31
+ run: gem build chalk_ruby.gemspec
32
+
33
+ - name: Publish to RubyGems
34
+ run: |
35
+ mkdir -p $HOME/.gem
36
+ touch $HOME/.gem/credentials
37
+ chmod 0600 $HOME/.gem/credentials
38
+ printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
39
+ gem push "chalk_ruby-${{ env.VERSION }}.gem"
40
+ env:
41
+ GEM_HOST_API_KEY: ${{ secrets.GEM_HOST_API_KEY }}
@@ -0,0 +1,33 @@
1
+ name: Run Tests
2
+
3
+ on:
4
+ push:
5
+ branches: [ main ]
6
+ pull_request:
7
+ branches: [ main ]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+
13
+ strategy:
14
+ matrix:
15
+ ruby-version: ['2.7', '3.0', '3.1']
16
+
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+
20
+ - name: Set up Ruby ${{ matrix.ruby-version }}
21
+ uses: ruby/setup-ruby@v1
22
+ with:
23
+ ruby-version: ${{ matrix.ruby-version }}
24
+ bundler-cache: true
25
+
26
+ - name: Install dependencies
27
+ run: bundle install
28
+
29
+ - name: Run linter
30
+ run: bundle exec rake rubocop
31
+
32
+ - name: Run tests
33
+ run: bundle exec rake test:all
@@ -29,6 +29,11 @@ module ChalkRuby
29
29
  # @param additional_headers [Hash[String, String]]
30
30
  # Additional headers to be sent with every request. Typically not required.
31
31
  #
32
+ # @param eagerly_initialize_connection_pool [Boolean]
33
+ # Whether to eagerly initialize connections to the query and API servers.
34
+ # When true, connections will be pre-warmed during client initialization.
35
+ # Default is false (lazy initialization).
36
+ #
32
37
  # @return self
33
38
  #
34
39
  def self.create(
@@ -37,7 +42,8 @@ module ChalkRuby
37
42
  environment = nil,
38
43
  query_server = nil,
39
44
  api_server = nil,
40
- additional_headers = {}
45
+ additional_headers = {},
46
+ eagerly_initialize_connection_pool = false
41
47
  )
42
48
  config = Config.new(
43
49
  client_id: client_id,
@@ -45,7 +51,8 @@ module ChalkRuby
45
51
  environment: environment,
46
52
  query_server: query_server,
47
53
  api_server: api_server,
48
- additional_headers: additional_headers
54
+ additional_headers: additional_headers,
55
+ eagerly_initialize_connection_pool: eagerly_initialize_connection_pool
49
56
  )
50
57
  create_with_config(config)
51
58
  end
@@ -213,9 +220,36 @@ module ChalkRuby
213
220
  logger = opts[:logger] || LoggerHelper.create
214
221
  requester = opts[:http_requester] || Defaults::REQUESTER_CLASS.new(adapter: adapter, logger: logger)
215
222
  @transporter = Http::HttpRequesterChalk.new(requester: requester)
223
+
224
+ # Eagerly initialize connections if configured
225
+ if @config.eagerly_initialize_connection_pool
226
+ warm_connections
227
+ end
228
+ end
229
+
230
+ # Warm up connections to the API and query servers by establishing
231
+ # connections without making actual requests
232
+ def warm_connections
233
+ # Get the query server host
234
+ query_host = query_server_host
235
+
236
+ # Warm up API server connection
237
+ warm_connection(@config.api_server)
238
+
239
+ # Warm up query server connection
240
+ warm_connection(query_host)
216
241
  end
217
242
 
218
243
  private
244
+
245
+ # Establish a connection to a host without making a request
246
+ def warm_connection(host)
247
+ # Access the underlying HTTP requester
248
+ requester = @transporter.instance_variable_get(:@http_requester)
249
+
250
+ # This will create and cache the Faraday connection
251
+ requester.connection(host)
252
+ end
219
253
 
220
254
  def api_server_request(method:, path:, body:, headers:)
221
255
  @transporter.send_request(
@@ -17,7 +17,8 @@ module ChalkRuby
17
17
  :api_timeout,
18
18
  :connect_timeout,
19
19
  :query_service_root_ca_path,
20
- :additional_headers
20
+ :additional_headers,
21
+ :eagerly_initialize_connection_pool
21
22
 
22
23
  # Creates a new ChalkRuby::Config object for use with ChalkRuby::Client.
23
24
  #
@@ -52,6 +53,11 @@ module ChalkRuby
52
53
  # @option options [Hash<String, String>?] :additional_headers
53
54
  # Additional headers to be sent with every request. Typically not required.
54
55
  #
56
+ # @option options [Boolean?] :eagerly_initialize_connection_pool
57
+ # Whether to eagerly initialize connections to the query and API servers.
58
+ # When true, connections will be pre-warmed during client initialization.
59
+ # Default is false (lazy initialization).
60
+ #
55
61
  def initialize(opts = {})
56
62
  @client_id = opts[:client_id] || ENV['CHALK_CLIENT_ID']
57
63
  @client_secret = opts[:client_secret] || ENV['CHALK_CLIENT_SECRET']
@@ -63,6 +69,7 @@ module ChalkRuby
63
69
  @connect_timeout = opts[:connect_timeout] || Defaults::CONNECT_TIMEOUT
64
70
  @query_service_root_ca_path = opts[:query_service_root_ca_path] || Defaults::ROOT_CA_PATH
65
71
  @additional_headers = opts[:additional_headers] || {}
72
+ @eagerly_initialize_connection_pool = opts[:eagerly_initialize_connection_pool] || false
66
73
 
67
74
  raise ChalkError, 'No Client ID provided, please set :client_id' if @client_id.nil?
68
75
  raise ChalkError, 'No Client Secret provided, please set :client_secret' if @client_secret.nil?
@@ -1,3 +1,3 @@
1
1
  module ChalkRuby
2
- VERSION = '0.3.1'.freeze
2
+ VERSION = '0.4.0'.freeze
3
3
  end
@@ -8,7 +8,7 @@ CLIENT_SECRET = ''
8
8
 
9
9
  RSpec.describe 'Online query' do
10
10
  it 'should accept valid queries' do
11
- client = ChalkRuby::Client.create(CLIENT_ID, CLIENT_SECRET)
11
+ client = ChalkRuby::Client.create(CLIENT_ID, CLIENT_SECRET, "tmnmrbyb8x53f")
12
12
  response = client.query(
13
13
  input: { 'user.id': 3454 },
14
14
  output: %w(user.id),
@@ -0,0 +1,35 @@
1
+ require 'minitest/autorun'
2
+ require 'chalk_ruby/client'
3
+ require 'chalk_ruby/config'
4
+
5
+ describe 'Connection warming' do
6
+ it 'should accept eagerly_initialize_connection_pool parameter in config' do
7
+ config = ChalkRuby::Config.new(
8
+ client_id: 'test_id',
9
+ client_secret: 'test_secret',
10
+ eagerly_initialize_connection_pool: true
11
+ )
12
+
13
+ assert_equal true, config.eagerly_initialize_connection_pool
14
+ end
15
+
16
+ it 'should default eagerly_initialize_connection_pool to false' do
17
+ config = ChalkRuby::Config.new(
18
+ client_id: 'test_id',
19
+ client_secret: 'test_secret'
20
+ )
21
+
22
+ assert_equal false, config.eagerly_initialize_connection_pool
23
+ end
24
+
25
+ it 'should accept eagerly_initialize_connection_pool parameter in create method' do
26
+ # This test verifies the parameter is accepted
27
+ params = ChalkRuby::Client.method(:create).parameters.map(&:last)
28
+ assert params.include?(:eagerly_initialize_connection_pool)
29
+ end
30
+
31
+ it 'should have warm_connections method' do
32
+ # Test that the method exists on the class
33
+ assert ChalkRuby::Client.public_instance_methods.include?(:warm_connections)
34
+ end
35
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chalk_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chalk AI, Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-05-05 00:00:00.000000000 Z
11
+ date: 2025-07-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -234,6 +234,8 @@ files:
234
234
  - ".github/CODEOWNERS"
235
235
  - ".github/ISSUE_TEMPLATE/bug_report.md"
236
236
  - ".github/ISSUE_TEMPLATE/feature_request.md"
237
+ - ".github/workflows/release.yml"
238
+ - ".github/workflows/test.yml"
237
239
  - ".gitignore"
238
240
  - ".rubocop.yml"
239
241
  - ".rubocop_todo.yml"
@@ -364,6 +366,7 @@ files:
364
366
  - sig/chalk_ruby/versions.rbs
365
367
  - test/chalk_ruby/integration/arrow_conversion_test.rb
366
368
  - test/chalk_ruby/integration/client_test.rb
369
+ - test/chalk_ruby/integration/connection_warming_test.rb
367
370
  - test/chalk_ruby/integration/grpc_client_test.rb
368
371
  - test/chalk_ruby/test_helper.rb
369
372
  homepage: https://github.com/chalk-ai/chalk-ruby
@@ -395,5 +398,6 @@ summary: A simple Ruby client for Chalk
395
398
  test_files:
396
399
  - test/chalk_ruby/integration/arrow_conversion_test.rb
397
400
  - test/chalk_ruby/integration/client_test.rb
401
+ - test/chalk_ruby/integration/connection_warming_test.rb
398
402
  - test/chalk_ruby/integration/grpc_client_test.rb
399
403
  - test/chalk_ruby/test_helper.rb