Module: Noiseless

Defined in:
lib/noiseless.rb,
lib/noiseless/ast.rb,
lib/noiseless/dsl.rb,
lib/noiseless/model.rb,
lib/noiseless/adapter.rb,
lib/noiseless/mapping.rb,
lib/noiseless/railtie.rb,
lib/noiseless/version.rb,
lib/noiseless/adapters.rb,
lib/noiseless/ast/bool.rb,
lib/noiseless/ast/bulk.rb,
lib/noiseless/ast/join.rb,
lib/noiseless/ast/root.rb,
lib/noiseless/ast/sort.rb,
lib/noiseless/response.rb,
lib/noiseless/ast/match.rb,
lib/noiseless/ast/range.rb,
lib/noiseless/callbacks.rb,
lib/noiseless/test_case.rb,
lib/noiseless/ast/filter.rb,
lib/noiseless/ast/hybrid.rb,
lib/noiseless/ast/prefix.rb,
lib/noiseless/ast/vector.rb,
lib/noiseless/pagination.rb,
lib/noiseless/test_helper.rb,
lib/noiseless/ast/collapse.rb,
lib/noiseless/ast/paginate.rb,
lib/noiseless/ast/wildcard.rb,
lib/noiseless/multi_search.rb,
lib/noiseless/bulk_importer.rb,
lib/noiseless/introspection.rb,
lib/noiseless/query_builder.rb,
lib/noiseless/model_registry.rb,
lib/noiseless/response/empty.rb,
lib/noiseless/ast/aggregation.rb,
lib/noiseless/ast/image_query.rb,
lib/noiseless/ast/multi_match.rb,
lib/noiseless/instrumentation.rb,
lib/noiseless/ast/conversation.rb,
lib/noiseless/ast/search_after.rb,
lib/noiseless/document_manager.rb,
lib/noiseless/response/records.rb,
lib/noiseless/response/results.rb,
lib/noiseless/response_factory.rb,
lib/noiseless/adapters/typesense.rb,
lib/noiseless/connection_manager.rb,
lib/noiseless/adapters/postgresql.rb,
lib/noiseless/ast/combined_fields.rb,
lib/noiseless/adapters/cluster_api.rb,
lib/noiseless/adapters/indices_api.rb,
lib/noiseless/adapters/open_search.rb,
lib/noiseless/ast/field_value_node.rb,
lib/noiseless/response/suggestions.rb,
lib/noiseless/introspection/console.rb,
lib/noiseless/response/aggregations.rb,
lib/noiseless/adapters/elasticsearch.rb,
lib/noiseless/search_index_update_job.rb,
lib/noiseless/runtime_reset_middleware.rb,
lib/noiseless/mapping_definition_processor.rb,
lib/noiseless/introspection/query_visualizer.rb,
lib/noiseless/generators/application_search_generator.rb,
lib/noiseless/adapters/execution_modules/http_transport.rb,
lib/noiseless/adapters/execution_modules/pgvector_support.rb,
lib/noiseless/adapters/execution_modules/typesense_execution.rb,
lib/noiseless/adapters/execution_modules/opensearch_execution.rb,
lib/noiseless/adapters/execution_modules/postgresql_execution.rb,
lib/noiseless/adapters/execution_modules/elasticsearch_execution.rb,
lib/noiseless/adapters/execution_modules/es_compatible_execution.rb

Defined Under Namespace

Modules: AST, Adapters, Callbacks, ControllerRuntime, DSL, Generators, Instrumentation, Introspection, Pagination, Response, TestHelper Classes: ActiveJobSearchIndexUpdateJob, Adapter, AnalysisBuilder, AnalyzerBuilder, BulkImporter, Configuration, ConnectionError, ConnectionManager, DocumentManager, Error, LogSubscriber, Mapping, MappingDefinition, MappingDefinitionProcessor, Model, ModelRegistry, MultiSearch, MultiSearchResponse, QueryBuilder, Railtie, RequestError, ResponseFactory, RuntimeResetMiddleware, SearchError, SearchIndexUpdateJob, SettingsBuilder, SidekiqSearchIndexUpdateJob, TestCase

Constant Summary collapse

VERSION =
"0.4.0"

Class Method Summary collapse

Class Method Details

.all_modelsObject



133
134
135
# File 'lib/noiseless.rb', line 133

def self.all_models
  registry.all_models
end

.configObject



60
61
62
# File 'lib/noiseless.rb', line 60

def self.config
  @config ||= Configuration.new
end

.configure {|config| ... } ⇒ Object

Yields:



100
101
102
# File 'lib/noiseless.rb', line 100

def self.configure
  yield(config) if block_given?
end

.connectionsObject

Global connection manager instance



105
106
107
# File 'lib/noiseless.rb', line 105

def self.connections
  @connections ||= ConnectionManager.new
end

.load_configuration!Object



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/noiseless.rb', line 68

def self.load_configuration!
  path = config.config_path.respond_to?(:call) ? config.config_path.call : config.config_path
  return unless File.exist?(path)

  # Use Rails config_for if available and using standard config path, otherwise use ActiveSupport's YAML with ERB
  rails_available = defined?(Rails) && Rails.respond_to?(:application) && Rails.respond_to?(:root) && Rails.respond_to?(:env)
  standard_path = rails_available ? Rails.root.join("config/noiseless.yml") : nil

  if rails_available && Rails.application && path.to_s == standard_path.to_s
    # config_for already returns environment-specific config with ERB processed
    env_config = Rails.application.config_for(:noiseless)
  else
    # Use YAML.safe_load for custom config files, with ERB processing
    file_content = File.read(path)
    processed_content = ERB.new(file_content).result
    raw = YAML.safe_load(processed_content, aliases: true)
    environment = rails_available ? Rails.env.to_s : ENV.fetch("RAILS_ENV", "development")
    env_config = raw[environment] || {}
  end

  config.default_connection = env_config["default"].to_sym if env_config && env_config["default"]
  config.connections_config = ((env_config && env_config["connections"]) || {}).transform_keys(&:to_sym)
                                                                               .transform_values { |v| v.transform_keys(&:to_sym) }

  # Register all connections statically from YAML - no runtime registration
  config.connections_config.each do |name, params|
    adapter_name = params[:adapter]
    hosts = params[:hosts] || []
    connections.register(name, adapter: adapter_name, hosts: hosts)
  end
end

.multi_search(models: nil, indexes: nil, connection: nil, &block) ⇒ Object



141
142
143
144
145
146
147
148
149
150
151
152
153
# File 'lib/noiseless.rb', line 141

def self.multi_search(models: nil, indexes: nil, connection: nil, &block)
  search_instance = MultiSearch.new(
    models: models,
    indexes: indexes,
    connection: connection
  )

  if block
    search_instance.search(&block)
  else
    search_instance
  end
end

.register_model(model_class, **options) ⇒ Object

Convenience methods



129
130
131
# File 'lib/noiseless.rb', line 129

def self.register_model(model_class, **options)
  registry.register(model_class, options)
end

.registryObject

Global registry instance



124
125
126
# File 'lib/noiseless.rb', line 124

def self.registry
  ModelRegistry.instance
end

.reset_config!Object



64
65
66
# File 'lib/noiseless.rb', line 64

def self.reset_config!
  @config = Configuration.new
end

.searchable_modelsObject



137
138
139
# File 'lib/noiseless.rb', line 137

def self.searchable_models
  registry.searchable_models
end