module Neo4j
# == Keeps configuration for neo4j
#
# The most important configuration is Neo4j::Config[:storage_path] which is used to
# locate where the neo4j database is stored on the filesystem.
# If this directory is empty then a new database will be created, otherwise it will use the
# database from that directory.
#
# ==== Default Configurations
# :storage_path:: default tmp/neo4j where the database is stored
# :timestamps:: default true for Rails Neo4j::Model - if timestamps should be used when saving the model
# :lucene:: default hash keys: :fulltext, :exact configuration how the lucene index is stored
# :enable_rules:: default true, if false the _all relationship to all instances will not be created and custom rules will not be available.
#
class Config
# This code is copied from merb-core/config.rb.
class << self
# The location of the default configuration file
def default_file
@default_file ||= File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "config", "neo4j", "config.yml"))
end
# You can keep all the configuration in your own yaml file
# Also deletes all old configurations.
def default_file=(file_path)
@configuration = nil
@defaults = nil
@default_file = File.expand_path(file_path)
end
# Returns the hash of default config values for neo4j.
#
# ==== Returns
# Hash:: The defaults for the config.
def defaults
@defaults ||= YAML.load_file(default_file)
end
# Returns a Java HashMap used by the Java Neo4j API as configuration for the GraphDatabase
def to_java_map
map = java.util.HashMap.new
to_hash.each_pair do |k, v|
case v
when TrueClass
map[k.to_s] = "YES"
when FalseClass
map[k.to_s] = "NO"
when String, Fixnum, Float
map[k.to_s] = v.to_s
# skip list and hash values - not accepted by the Java Neo4j API
end
end
map
end
# Returns the expanded path of the Config[:storage_path] property
def storage_path
File.expand_path(self[:storage_path])
end
# Yields the configuration.
#
# ==== Block parameters
# c :: The configuration parameters, a hash.
#
# ==== Examples
# Neo4j::Config.use do |config|
# config[:storage_path] = '/var/neo4j'
# end
#
# ==== Returns
# nil
def use
@configuration ||= {}
yield @configuration
nil
end
# Set the value of a config entry.
#
# ==== Parameters
# key :: The key to set the parameter for.
# val :: The value of the parameter.
#
def []=(key, val)
(@configuration ||= setup)[key] = val
end
# Gets the the value of a config entry
#
# ==== Parameters
# key:: The key of the config entry value we want
#
def [](key)
(@configuration ||= setup)[key]
end
# Remove the value of a config entry.
#
# ==== Parameters
# key