/
big_index.rb
105 lines (81 loc) · 2.62 KB
/
big_index.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
require 'rubygems'
require 'pathname'
require 'set'
dir = File.expand_path(File.join(File.dirname(__FILE__), 'big_index')) + '/'
vendor_dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'vendor')) + '/'
require (vendor_dir + 'solr').to_s
require dir + 'support'
require dir + 'adapters'
require dir + 'repository'
require dir + 'model'
require dir + 'resource'
require dir + 'index_field'
module BigIndex
extend Assertions
def self.root
@root ||= File.expand_path(File.join(File.dirname(__FILE__), '..'))
end
def self.vendor_root
@vendor_root ||= File.expand_path(File.join(File.dirname(__FILE__), '..', 'vendor')) + '/'
end
def self.setup(name, options)
assert_kind_of 'name', name, Symbol, String
assert_kind_of 'options', options, Hash
name = name.to_sym if name.is_a?(String)
adapter_name = options[:adapter].to_s
class_name = adapter_name.capitalize + 'Adapter'
unless Adapters::const_defined?(class_name)
lib_name = "#{adapter_name}_adapter"
begin
require root + 'lib' + 'big_index' + 'adapters' + lib_name
rescue LoadError => e
begin
require lib_name
rescue Exception
# library not found, raise the original error
raise e
end
end
end
Repository.adapters[name] = Adapters::const_get(class_name).new(name, options)
end
def self.configurations
Repository.adapters || {}
end
def self.configurations=(configurations)
assert_kind_of 'configurations', configurations, Hash
Repository.clear_adapters
@configurations = symbolize_keys(configurations)
@configurations.each do |key, value|
assert_kind_of 'value', value, Hash
setup(key, value)
end
BigIndex::Repository.default_name = @configurations.keys[0] if @configurations.size == 1
end
def self.repository(name = nil) # :yields: current_context
current_repository = if name
raise ArgumentError, "First optional argument must be a Symbol, but was #{name.inspect}" unless name.is_a?(Symbol)
Repository.context.detect { |r| r.name == name } || Repository.new(name)
else
Repository.context.last || Repository.new(Repository.default_name)
end
if block_given?
current_repository.scope { |*block_args| yield(*block_args) }
else
current_repository
end
end
def self.symbolize_keys(h)
config = {}
h.each do |k, v|
if k == 'port'
config[k.to_sym] = v.to_i
elsif v.is_a?(Hash)
config[k.to_sym] = symbolize_keys(v)
else
config[k.to_sym] = v
end
end
config
end
end # module BigIndex