lib/thinking_sphinx/context.rb in thinking-sphinx-1.5.0 vs lib/thinking_sphinx/context.rb in thinking-sphinx-2.0.0.rc1
- old
+ new
@@ -1,75 +1,73 @@
class ThinkingSphinx::Context
attr_reader :indexed_models
-
+
def initialize(*models)
@indexed_models = []
end
-
+
def prepare
ThinkingSphinx::Configuration.instance.indexed_models.each do |model|
add_indexed_model model
end
-
+
return unless indexed_models.empty?
-
+
load_models
add_indexed_models
end
-
+
def define_indexes
indexed_models.each { |model|
model.constantize.define_indexes
}
end
-
+
def add_indexed_model(model)
model = model.name if model.is_a?(Class)
-
+
indexed_models << model
indexed_models.uniq!
indexed_models.sort!
end
-
+
def superclass_indexed_models
klasses = indexed_models.collect { |name| name.constantize }
klasses.reject { |klass|
klass.superclass.ancestors.any? { |ancestor| klasses.include?(ancestor) }
}.collect { |klass| klass.name }
end
-
+
private
-
+
def add_indexed_models
- Object.subclasses_of(ActiveRecord::Base).each do |klass|
+ ActiveRecord::Base.subclasses.each do |klass|
add_indexed_model klass if klass.has_sphinx_indexes?
end
end
-
+
# Make sure all models are loaded - without reloading any that
# ActiveRecord::Base is already aware of (otherwise we start to hit some
# messy dependencies issues).
#
def load_models
ThinkingSphinx::Configuration.instance.model_directories.each do |base|
Dir["#{base}**/*.rb"].each do |file|
model_name = file.gsub(/^#{base}([\w_\/\\]+)\.rb/, '\1')
-
+
next if model_name.nil?
- camelized_model = model_name.camelize
next if ::ActiveRecord::Base.send(:subclasses).detect { |model|
- model.name == camelized_model
+ model.name == model_name.camelize
}
-
+
begin
- camelized_model.constantize
+ model_name.camelize.constantize
rescue LoadError
- # Make sure that STI subclasses in subfolders are loaded.
model_name.gsub!(/.*[\/\\]/, '').nil? ? next : retry
- rescue Exception => err
- STDERR.puts "Warning: Error loading #{file}:"
- STDERR.puts err.message
- STDERR.puts err.backtrace.join("\n"), ''
+ rescue NameError
+ next
+ rescue StandardError
+ STDERR.puts "Warning: Error loading #{file}"
end
end
end
end
end