Convert ConnectionOptions to BaseOptions
Phase: 3 - ConnectionOptions
Release Target: v2.x.2
Tracking Issue: #1647
RFC: docs/options-detach-plan.md
Overview
Convert ConnectionOptions to inherit from BaseOptions instead of Options. This class has nested options (request, ssl) and integrates deeply with Faraday::Connection and Faraday.new.
Current Structure
File: lib/faraday/options/connection_options.rb (23 lines)
- Inherits from
Options
- Members:
:request, :proxy, :ssl, :builder, :url, :parallel_manager, :params, :headers, :builder_class
- Nested coercion:
request → RequestOptions, ssl → SSLOptions
- Has
new_builder method that returns builder_class.new
- Default
builder_class is RackBuilder
New Structure
# frozen_string_literal: true
module Faraday
class ConnectionOptions < BaseOptions
MEMBERS = %i[
request proxy ssl builder url parallel_manager params headers builder_class
].freeze
COERCIONS = {
request: RequestOptions,
ssl: SSLOptions
}.freeze
attr_accessor :request, :proxy, :ssl, :builder, :url, :parallel_manager,
:params, :headers, :builder_class
def initialize(options = {})
super(options)
@builder_class ||= RackBuilder
end
def new_builder(block)
builder_class.new(&block)
end
end
end
Implementation Tasks
Core Conversion
Integration Points
Testing
Critical Integration Areas
1. Faraday.new
# lib/faraday.rb
def self.new(url = nil, options = {}, &block)
options = ConnectionOptions.from(options)
# ... uses options.url, options.params, etc.
end
Verify that ConnectionOptions.from works correctly with:
- Hash input
- Existing ConnectionOptions instance
- nil input
2. Connection#initialize
# lib/faraday/connection.rb
def initialize(url = nil, options = {})
options = ConnectionOptions.from(options)
# ... uses options for configuration
end
3. Nested Options Usage
# Common pattern in Connection
@options = ConnectionOptions.new(options)
@request_options = @options.request
@ssl = @options.ssl
Ensure that:
@options.request returns a RequestOptions instance
@options.ssl returns an SSLOptions instance
- Deep merging preserves nested structure
Files to Modify
lib/faraday/options/connection_options.rb
spec/faraday/options/connection_options_spec.rb
Files to Review (Integration Testing)
lib/faraday/connection.rb
lib/faraday.rb
spec/faraday/connection_spec.rb
spec/faraday_spec.rb
Acceptance Criteria
Dependencies
Backward Compatibility
All existing APIs preserved:
new_builder method
builder_class default
- Nested request/ssl coercion
- Integration with Connection and Faraday.new
No breaking changes expected.
Risk Assessment
Risk Level: Medium
Risks:
- Deep integration with Connection initialization
- Nested options coercion must work flawlessly
- Default builder_class behavior must be preserved
Mitigation:
- Comprehensive integration tests
- Review all Connection usage patterns
- Test with real Faraday.new calls
- Validate default_connection_options merging
Convert ConnectionOptions to BaseOptions
Phase: 3 - ConnectionOptions
Release Target: v2.x.2
Tracking Issue: #1647
RFC: docs/options-detach-plan.md
Overview
Convert
ConnectionOptionsto inherit fromBaseOptionsinstead ofOptions. This class has nested options (request, ssl) and integrates deeply withFaraday::ConnectionandFaraday.new.Current Structure
File:
lib/faraday/options/connection_options.rb(23 lines)Options:request, :proxy, :ssl, :builder, :url, :parallel_manager, :params, :headers, :builder_classrequest→RequestOptions,ssl→SSLOptionsnew_buildermethod that returnsbuilder_class.newbuilder_classisRackBuilderNew Structure
Implementation Tasks
Core Conversion
BaseOptionsMEMBERSandCOERCIONSconstantsattr_accessorfor all membersbuilder_classdefault (RackBuilder)new_buildermethodIntegration Points
lib/faraday/connection.rbusage of ConnectionOptionslib/faraday.rb(Faraday.new) usageFaraday.default_connection_optionsintegration worksnew_builderTesting
spec/faraday/options/connection_options_spec.rbrequesthash → RequestOptionssslhash → SSLOptionsbuilder_classdefaultnew_buildermethodFaraday.new:Faraday.default_connection_optionsmergingCritical Integration Areas
1. Faraday.new
Verify that
ConnectionOptions.fromworks correctly with:2. Connection#initialize
3. Nested Options Usage
Ensure that:
@options.requestreturns aRequestOptionsinstance@options.sslreturns anSSLOptionsinstanceFiles to Modify
lib/faraday/options/connection_options.rbspec/faraday/options/connection_options_spec.rbFiles to Review (Integration Testing)
lib/faraday/connection.rblib/faraday.rbspec/faraday/connection_spec.rbspec/faraday_spec.rbAcceptance Criteria
builder_classdefault maintainednew_buildermethod worksFaraday.newintegration verifiedFaraday.default_connection_optionsworksDependencies
Backward Compatibility
All existing APIs preserved:
new_buildermethodbuilder_classdefaultNo breaking changes expected.
Risk Assessment
Risk Level: Medium
Risks:
Mitigation: