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, 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.2.0"

Class Method Summary collapse

Class Method Details

.all_modelsObject



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

def self.all_models
  registry.all_models
end

.configObject



52
53
54
# File 'lib/noiseless.rb', line 52

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

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

Yields:



92
93
94
# File 'lib/noiseless.rb', line 92

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

.connectionsObject

Global connection manager instance



97
98
99
# File 'lib/noiseless.rb', line 97

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

.load_configuration!Object



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/noiseless.rb', line 60

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



133
134
135
136
137
138
139
140
141
142
143
144
145
# File 'lib/noiseless.rb', line 133

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



121
122
123
# File 'lib/noiseless.rb', line 121

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

.registryObject

Global registry instance



116
117
118
# File 'lib/noiseless.rb', line 116

def self.registry
  ModelRegistry.instance
end

.reset_config!Object



56
57
58
# File 'lib/noiseless.rb', line 56

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

.searchable_modelsObject



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

def self.searchable_models
  registry.searchable_models
end