class SolrWrapper::Configuration

Attributes

options[R]

Public Class Methods

new(options = {}) click to toggle source
# File lib/solr_wrapper/configuration.rb, line 7
def initialize(options = {})
  @config = options[:config]
  @verbose = options[:verbose]

  @options = load_configs(Array(options[:config])).merge(options)
end

Private Class Methods

slice(source, *keys) click to toggle source
# File lib/solr_wrapper/configuration.rb, line 154
def self.slice(source, *keys)
  keys.each_with_object({}) { |k, hash| hash[k] = source[k] if source.has_key?(k) }
end

Public Instance Methods

algorithm() click to toggle source
# File lib/solr_wrapper/configuration.rb, line 34
def algorithm
  options[:algorithm]
end
archive_download_url() click to toggle source
# File lib/solr_wrapper/configuration.rb, line 122
def archive_download_url
  "https://archive.apache.org/dist/lucene/solr/#{version}/solr-#{version}.zip"
end
checksum() click to toggle source
# File lib/solr_wrapper/configuration.rb, line 30
def checksum
  options[:checksum]
end
closest_mirror_url() click to toggle source
# File lib/solr_wrapper/configuration.rb, line 96
def closest_mirror_url
  "https://www.apache.org/dyn/closer.lua/lucene/solr/#{version}/solr-#{version}.zip?asjson=true"
end
cloud() click to toggle source
# File lib/solr_wrapper/configuration.rb, line 126
def cloud
  options[:cloud]
end
collection_options() click to toggle source
# File lib/solr_wrapper/configuration.rb, line 138
def collection_options
  hash = options.fetch(:collection, {})
  Configuration.slice(convert_keys(hash), :name, :dir, :persist)
end
configsets() click to toggle source
# File lib/solr_wrapper/configuration.rb, line 143
def configsets
  configsets = options[:configsets] || []
  configsets.map { |x| convert_keys(x) }
end
default_download_dir() click to toggle source
# File lib/solr_wrapper/configuration.rb, line 65
def default_download_dir
  if defined?(Rails) && Rails.respond_to?(:root) && Rails.root
    File.join(Rails.root, 'tmp')
  else
    Dir.tmpdir
  end
end
download_dir() click to toggle source
# File lib/solr_wrapper/configuration.rb, line 61
def download_dir
  options[:download_dir] || default_download_dir
end
env() click to toggle source
# File lib/solr_wrapper/configuration.rb, line 77
def env
  options.fetch(:env, {})
end
extra_lib_dir() click to toggle source
# File lib/solr_wrapper/configuration.rb, line 18
def extra_lib_dir
  options[:extra_lib_dir]
end
ignore_checksum() click to toggle source
# File lib/solr_wrapper/configuration.rb, line 26
def ignore_checksum
  options[:ignore_checksum]
end
instance_dir() click to toggle source
# File lib/solr_wrapper/configuration.rb, line 81
def instance_dir
  options[:instance_dir]
end
mirror_url() click to toggle source
# File lib/solr_wrapper/configuration.rb, line 100
def mirror_url
  @mirror_url ||= if options[:mirror_url]
    options[:mirror_url] + "lucene/solr/#{version}/solr-#{version}.zip"
  else
    begin
      json = HTTP.follow.get(closest_mirror_url).body
      doc = JSON.parse(json)
      url = doc['preferred'] + doc['path_info']

      response = HTTP.head(url)

      if response.status.success?
        url
      else
        archive_download_url
      end
    rescue Errno::ECONNRESET, SocketError, HTTP::Error
      archive_download_url
    end
  end
end
poll_interval() click to toggle source
# File lib/solr_wrapper/configuration.rb, line 148
def poll_interval
  options.fetch(:poll_interval, 1)
end
port() click to toggle source
# File lib/solr_wrapper/configuration.rb, line 42
def port
  # Check if the port option has been explicitly set to nil.
  # this means to start solr wrapper on a random open port
  return nil if options.key?(:port) && !options[:port]
  options.fetch(:port) { SolrWrapper.default_instance_options[:port] }.to_s
end
solr_options() click to toggle source
# File lib/solr_wrapper/configuration.rb, line 73
def solr_options
  options.fetch(:solr_options, {})
end
solr_xml() click to toggle source
# File lib/solr_wrapper/configuration.rb, line 14
def solr_xml
  options[:solr_xml]
end
solr_zip_path() click to toggle source
# File lib/solr_wrapper/configuration.rb, line 57
def solr_zip_path
  options[:solr_zip_path]
end
url() click to toggle source
# File lib/solr_wrapper/configuration.rb, line 38
def url
  options[:url]
end
validate() click to toggle source
# File lib/solr_wrapper/configuration.rb, line 22
def validate
  options[:validate]
end
verbose?() click to toggle source
# File lib/solr_wrapper/configuration.rb, line 130
def verbose?
  @verbose || (options && !!options.fetch(:verbose, false))
end
version() click to toggle source
# File lib/solr_wrapper/configuration.rb, line 85
def version
  @version ||= begin
    config_version = options.fetch(:version, SolrWrapper.default_instance_options[:version])
    if config_version == 'latest'
      fetch_latest_version
    else
      config_version
    end
  end
end
version_file() click to toggle source
# File lib/solr_wrapper/configuration.rb, line 134
def version_file
  options[:version_file]
end
zookeeper_host() click to toggle source
# File lib/solr_wrapper/configuration.rb, line 49
def zookeeper_host
  options[:zookeeper_host]
end
zookeeper_port() click to toggle source
# File lib/solr_wrapper/configuration.rb, line 53
def zookeeper_port
  options[:zookeeper_port]
end

Private Instance Methods

convert_keys(hash) click to toggle source
# File lib/solr_wrapper/configuration.rb, line 180
def convert_keys(hash)
  hash.each_with_object({}) { |(k, v), h| h[k.to_sym] = v }
end
default_configuration_paths() click to toggle source
# File lib/solr_wrapper/configuration.rb, line 184
def default_configuration_paths
  ['~/.solr_wrapper.yml', '~/.solr_wrapper', '.solr_wrapper.yml', '.solr_wrapper']
end
fetch_latest_version() click to toggle source
# File lib/solr_wrapper/configuration.rb, line 188
def fetch_latest_version
  response = HTTP.follow.get(options.fetch(:latest_version_url, 'https://solr.apache.org/downloads.html'))
  response.body.to_s[/Solr \d+\.\d+\.\d+/][/\d+\.\d+\.\d+/]
end
load_configs(config_files) click to toggle source
# File lib/solr_wrapper/configuration.rb, line 158
def load_configs(config_files)
  config = {}

  (default_configuration_paths + config_files.compact).each do |p|
    path = File.expand_path(p)
    next unless File.exist? path
    config.merge!(read_config(path))
  end

  config
end
read_config(config_file) click to toggle source
# File lib/solr_wrapper/configuration.rb, line 170
def read_config(config_file)
  $stdout.puts "Loading configuration from #{config_file}" if verbose?
  config = YAML.load(ERB.new(IO.read(config_file)).result(binding))
  unless config
    $stderr.puts "Unable to parse config #{config_file}" if verbose?
    return {}
  end
  convert_keys(config)
end