diff --git a/lib/pinecone.rb b/lib/pinecone.rb index d5219eb..78b3a9f 100644 --- a/lib/pinecone.rb +++ b/lib/pinecone.rb @@ -15,13 +15,15 @@ class ConfigurationError < StandardError; end class IndexNotFoundError < StandardError; end class Configuration - attr_writer :api_key, :base_uri, :environment, :silence_deprecation_warnings - attr_accessor :host + DEFAULT_BASE_URI = "https://api.pinecone.io" + + attr_writer :api_key, :environment, :silence_deprecation_warnings + attr_accessor :host, :base_uri def initialize @api_key = nil @environment = nil - @base_uri = nil + @base_uri = DEFAULT_BASE_URI @host = nil @silence_deprecation_warnings = false end @@ -32,12 +34,6 @@ def api_key raise ConfigurationError, "Pinecone API key not set" end - def base_uri - return @base_uri if @base_uri - - raise ConfigurationError, "Pinecone domain not set" - end - def environment return @environment if @environment diff --git a/lib/pinecone/collection.rb b/lib/pinecone/collection.rb index 2ba965c..ab10b50 100644 --- a/lib/pinecone/collection.rb +++ b/lib/pinecone/collection.rb @@ -6,7 +6,7 @@ class Collection parser Pinecone::ResponseParser def initialize - self.class.base_uri "https://api.pinecone.io" + self.class.base_uri Pinecone.configuration.base_uri @headers = { "Content-Type" => "application/json", diff --git a/lib/pinecone/index.rb b/lib/pinecone/index.rb index f59a0f2..19c3ea3 100644 --- a/lib/pinecone/index.rb +++ b/lib/pinecone/index.rb @@ -6,7 +6,7 @@ class Index parser Pinecone::ResponseParser def initialize - self.class.base_uri "https://api.pinecone.io" + self.class.base_uri Pinecone.configuration.base_uri @headers = { "Content-Type" => "application/json", "Accept" => "application/json", diff --git a/lib/pinecone/vector.rb b/lib/pinecone/vector.rb index 6af9a6f..19c3b22 100644 --- a/lib/pinecone/vector.rb +++ b/lib/pinecone/vector.rb @@ -18,9 +18,9 @@ def initialize(index_name = nil, host: nil) @base_uri = if host.start_with?("http://", "https://") host elsif host.start_with?("localhost") - "http://#{host}" # Use HTTP for localhost + "http://#{host}" else - "https://#{host}" # Use HTTPS for production hosts + "https://#{host}" end elsif index_name # Legacy path: call describe_index diff --git a/spec/pinecone/index_spec.rb b/spec/pinecone/index_spec.rb index 3896f03..6b922a0 100644 --- a/spec/pinecone/index_spec.rb +++ b/spec/pinecone/index_spec.rb @@ -7,12 +7,15 @@ skip "Local database container not available" unless database_available? end - let(:client) do - # Use local database container only - index_client = Pinecone::Index.new - index_client.class.base_uri "http://localhost:5080" - index_client + before(:each) do + Pinecone.configuration.base_uri = "http://localhost:5080" end + + after(:each) do + Pinecone.configuration.base_uri = Pinecone::Configuration::DEFAULT_BASE_URI + end + + let(:client) { Pinecone::Index.new } let(:valid_attributes) do { metric: "dotproduct", diff --git a/spec/support/local_container_helpers.rb b/spec/support/local_container_helpers.rb index 0ae8270..356ddd9 100644 --- a/spec/support/local_container_helpers.rb +++ b/spec/support/local_container_helpers.rb @@ -80,21 +80,11 @@ def database_client @database_client ||= begin Pinecone.configure do |config| config.api_key = "dummy-key" + config.base_uri = DATABASE_URL config.silence_deprecation_warnings = true end - # Create a client that can talk to the database emulator for control plane operations - client = Pinecone::Client.new - # Override the base_uri for control plane operations - Pinecone::Index.any_instance.define_singleton_method(:initialize) do - self.class.base_uri "http://#{DATABASE_HOST}" - @headers = { - "Content-Type" => "application/json", - "Accept" => "application/json", - "Api-Key" => "dummy-key" - } - end - client + Pinecone::Client.new end end