lib/neo4j/railtie.rb in neo4j-8.0.0.alpha.5 vs lib/neo4j/railtie.rb in neo4j-8.0.0.alpha.6

- old
+ new

@@ -43,41 +43,81 @@ end # Starting Neo after :load_config_initializers allows apps to # register migrations in config/initializers initializer 'neo4j.start', after: :load_config_initializers do |app| - cfg = app.config.neo4j - # Set Rails specific defaults - Neo4j::SessionManager.setup! cfg + Neo4j::ActiveBase.on_establish_session { setup! app.config.neo4j } Neo4j::Config[:logger] ||= Rails.logger - session_types = cfg.sessions.map { |session_opts| session_opts[:type] } - - register_neo4j_cypher_logging(session_types) if Rails.env.development? && !Neo4j::Migrations.currently_running_migrations && Neo4j::Config.fail_on_pending_migrations Neo4j::Migrations.check_for_pending_migrations! end end + def setup!(cfg = nil) + neo4j_config ||= ActiveSupport::OrderedOptions.new + cfg.each {|k, v| neo4j_config[k] = v } if cfg + + support_deprecated_session_configs!(neo4j_config) + + Neo4j::Config.configuration.merge!(neo4j_config.to_h) + + type, url, path, options, wait_for_connection = neo4j_config.session.values_at(:type, :path, :url, :options, :wait_for_connection) + register_neo4j_cypher_logging(type || default_session_type) + + Neo4j::SessionManager.open_neo4j_session(type || default_session_type, + url || path || default_session_path_or_url, + wait_for_connection, + options || {}) + end + + def support_deprecated_session_configs!(neo4j_config) + ActiveSupport::Deprecation.warn('neo4j.config.sessions is deprecated, please use neo4j.config.session (not an array)') if neo4j_config.sessions.present? + neo4j_config.session ||= (neo4j_config.sessions && neo4j_config.sessions[0]) || {} + + %w(type path url options).each do |key| + value = neo4j_config.send("session_#{key}") + if value.present? + ActiveSupport::Deprecation.warn("neo4j.config.session_#{key} is deprecated, please use neo4j.config.session.#{key}") + neo4j_config.session[key] = value + end + end + end + + def default_session_type + if ENV['NEO4J_URL'] + URI(ENV['NEO4J_URL']).scheme.tap do |scheme| + fail "Invalid scheme for NEO4J_URL: #{scheme}" if !%w(http bolt).include?(scheme) + end + else + ENV['NEO4J_TYPE'] || config_data[:type] || :http + end.to_sym + end + + def default_session_path_or_url + ENV['NEO4J_URL'] || ENV['NEO4J_PATH'] || + config_data[:url] || config_data[:path] || + 'http://localhost:7474' + end + + TYPE_SUBSCRIBERS = { http: Neo4j::Core::CypherSession::Adaptors::HTTP.method(:subscribe_to_request), bolt: Neo4j::Core::CypherSession::Adaptors::Bolt.method(:subscribe_to_request), embedded: Neo4j::Core::CypherSession::Adaptors::Embedded.method(:subscribe_to_transaction) } - def register_neo4j_cypher_logging(session_types) + def register_neo4j_cypher_logging(session_type) return if @neo4j_cypher_logging_registered Neo4j::Core::Query.pretty_cypher = Neo4j::Config[:pretty_logged_cypher_queries] logger_proc = ->(message) do (Neo4j::Config[:logger] ||= Rails.logger).debug message end Neo4j::Core::CypherSession::Adaptors::Base.subscribe_to_query(&logger_proc) - session_types.map(&:to_sym).uniq.each do |type| - TYPE_SUBSCRIBERS[type].call(&logger_proc) - end + TYPE_SUBSCRIBERS[session_type.to_sym].call(&logger_proc) @neo4j_cypher_logging_registered = true end end end