module NoBrainer::Config

Constants

MACHINE_ID_BITS

XXX Not referencing NoBrainer::Document::PrimaryKey::Generator::MACHINE_ID_MASK because we don’t want to load all the document code to speedup boot time.

MACHINE_ID_MASK
SETTINGS

Public Class Methods

apply_defaults() click to toggle source
# File lib/no_brainer/config.rb, line 53
def apply_defaults
  @applied_defaults_for = SETTINGS.keys.reject { |k| instance_variable_defined?("@#{k}") }
  @applied_defaults_for.each { |k| __send__("#{k}=", SETTINGS[k][:default].call) }
end
assert_hash_keys_in(name, valid_keys) click to toggle source
# File lib/no_brainer/config.rb, line 109
def assert_hash_keys_in(name, valid_keys)
  extra_keys = __send__(name).keys - valid_keys
  unless extra_keys.empty?
    raise ArgumentError.new("Invalid configuration for  #{name}: #{__send__(name)}. Valid keys are: #{valid_keys.inspect}")
  end
end
assert_valid_options() click to toggle source
# File lib/no_brainer/config.rb, line 70
def assert_valid_options
  SETTINGS.each do |k,v|
    assert_value_in(k, v[:valid_values]) if v[:valid_values]
    assert_hash_keys_in(k, v[:valid_keys]) if v[:valid_keys]
  end

  validate_urls

  if driver == :em && per_thread_connection
    raise "To use EventMachine, disable per_thread_connection"
  end
end
assert_value_in(name, valid_values) click to toggle source
# File lib/no_brainer/config.rb, line 103
def assert_value_in(name, valid_values)
  unless __send__(name).in?(valid_values)
    raise ArgumentError.new("Invalid configuration for #{name}: #{__send__(name)}. Valid values are: #{valid_values.inspect}")
  end
end
auto_create_databases=(value) click to toggle source
# File lib/no_brainer/config.rb, line 38
def auto_create_databases=(value)
  STDERR.puts "[NoBrainer] config.auto_create_databases is no longer active."
  STDERR.puts "[NoBrainer] The current behavior is now to always auto create databases"
end
auto_create_tables=(value) click to toggle source
# File lib/no_brainer/config.rb, line 43
def auto_create_tables=(value)
  STDERR.puts "[NoBrainer] config.auto_create_tables is no longer active."
  STDERR.puts "[NoBrainer] The current behavior is now to always auto create tables"
end
configure(&block) click to toggle source
# File lib/no_brainer/config.rb, line 87
def configure(&block)
  @applied_defaults_for.to_a.each do |k|
    remove_instance_variable("@#{k}") if instance_variable_defined?("@#{k}")
  end
  block.call(self) if block
  apply_defaults
  assert_valid_options
  @configured = true

  NoBrainer::ConnectionManager.notify_url_change
end
configured?() click to toggle source
# File lib/no_brainer/config.rb, line 99
def configured?
  !!@configured
end
default_app_name() click to toggle source
# File lib/no_brainer/config.rb, line 120
def default_app_name
  return unless defined?(Rails)
  NoBrainer.rails6? ?
    Rails.application.class.module_parent_name.underscore.presence :
    Rails.application.class.parent_name.underscore.presence rescue nil
end
default_durability() click to toggle source
# File lib/no_brainer/config.rb, line 160
def default_durability
  dev_mode? ? :soft : :hard
end
default_environment() click to toggle source
# File lib/no_brainer/config.rb, line 127
def default_environment
  return Rails.env if defined?(Rails.env)
  ENV['RUBY_ENV'] || ENV['RAILS_ENV'] || ENV['RACK_ENV'] || :production
end
default_logger() click to toggle source
# File lib/no_brainer/config.rb, line 155
def default_logger
  (Rails.logger if defined?(Rails.logger)) ||
     Logger.new(STDERR).tap { |l| l.level = Logger::WARN }
end
default_machine_id() click to toggle source
# File lib/no_brainer/config.rb, line 174
def default_machine_id
  return ENV['MACHINE_ID'] if ENV['MACHINE_ID']

  require 'socket'
  require 'digest/md5'

  host = Socket.gethostname
  if host.in? %w(127.0.0.1 localhost)
    raise "Please configure NoBrainer::Config.machine_id due to lack of appropriate hostname (Socket.gethostname = #{host})"
  end

  Digest::MD5.digest(host).unpack("N")[0] & MACHINE_ID_MASK
end
default_max_retries_on_connection_failure() click to toggle source
# File lib/no_brainer/config.rb, line 164
def default_max_retries_on_connection_failure
  # TODO remove
  dev_mode? ? 1 : 15
end
default_rethinkdb_url() click to toggle source
# File lib/no_brainer/config.rb, line 136
def default_rethinkdb_url
  db = ENV['RETHINKDB_DB'] || ENV['RDB_DB']
  db ||= "#{self.app_name}_#{self.environment}" if self.app_name && self.environment
  host = ENV['RETHINKDB_HOST'] || ENV['RDB_HOST'] || 'localhost'
  port = ENV['RETHINKDB_PORT'] || ENV['RDB_PORT']
  user = ENV['RETHINKDB_USER'] || ENV['RDB_USER']
  pass = ENV['RETHINKDB_PASSWORD'] || ENV['RDB_PASSWORD'] || ENV['RETHINKDB_AUTH'] || ENV['RDB_AUTH']
  url = ENV['RETHINKDB_URL'] || ENV['RDB_URL']
  url ||= "rethinkdb://#{"#{user}:#{pass}@" if (user || pass)}#{host}#{":#{port}" if port}/#{db}" if db
  url
end
dev_mode?() click to toggle source
# File lib/no_brainer/config.rb, line 116
def dev_mode?
  self.environment.to_s.in? %w(development test)
end
distributed_lock_class() click to toggle source
# File lib/no_brainer/config.rb, line 199
def distributed_lock_class
  if @distributed_lock_class.is_a?(String)
    @distributed_lock_class = @distributed_lock_class.constantize
  end
  @distributed_lock_class
end
geo_options=(value) click to toggle source
# File lib/no_brainer/config.rb, line 62
def geo_options=(value)
  @geo_options = value.try(:symbolize_keys)
end
machine_id=(machine_id) click to toggle source
# File lib/no_brainer/config.rb, line 188
def machine_id=(machine_id)
  machine_id = case machine_id
    when Integer    then machine_id
    when /^[0-9]+$/ then machine_id.to_i
    else raise "Invalid machine_id"
  end
  max_id = MACHINE_ID_MASK
  raise "Invalid machine_id (must be between 0 and #{max_id})" unless machine_id.in?(0..max_id)
  @machine_id = machine_id
end
max_retries_on_connection_failure=(value) click to toggle source
# File lib/no_brainer/config.rb, line 48
def max_retries_on_connection_failure=(value)
  STDERR.puts "[NoBrainer] config.max_retries_on_connection_failure has been removed."
  STDERR.puts "[NoBrainer] Queries are no longer retried upon failures"
end
on_slow_query=(callback) click to toggle source
# File lib/no_brainer/config.rb, line 58
def on_slow_query=(callback)
  @on_slow_query = callback
end
reset!() click to toggle source
# File lib/no_brainer/config.rb, line 83
def reset!
  instance_variables.each { |ivar| remove_instance_variable(ivar) }
end
rethinkdb_url=(value) click to toggle source
# File lib/no_brainer/config.rb, line 132
def rethinkdb_url=(value)
  self.rethinkdb_urls = [*value]
end
run_options=(value) click to toggle source
# File lib/no_brainer/config.rb, line 66
def run_options=(value)
  @run_options = value.try(:symbolize_keys)
end
validate_urls() click to toggle source
# File lib/no_brainer/config.rb, line 148
def validate_urls
  # This is not connecting, just validating the format.
  dbs = rethinkdb_urls.compact.map { |url| NoBrainer::Connection.new(url).parsed_uri[:db] }.uniq
  raise "Please specify the app_name and the environment, or a rethinkdb_url" if dbs.size == 0
  raise "All the rethinkdb_urls must specify the same db name (instead of #{dbs.inspect})" if dbs.size != 1
end