diff --git a/plugins/elasticsearch/lib/elasticsearch_helper.rb b/plugins/elasticsearch/lib/elasticsearch_helper.rb new file mode 100644 index 0000000..66cd907 --- /dev/null +++ b/plugins/elasticsearch/lib/elasticsearch_helper.rb @@ -0,0 +1,31 @@ +module INDEXED_MODEL + include Elasticsearch::Model + include Elasticsearch::Model::Callbacks + + def self.included base + base.extend ClassMethods + end + + module ClassMethods +# settings index: { number_of_shards: 1 } do +# mappings dynamic: 'false' do +# self::SEARCHABLE_FIELDS.each do |field, value| +# indexes field +# end +# end +# +# self.__elasticsearch__.client.indices.delete \ +# index: self.index_name rescue nil +# +# self.__elasticsearch__.client.indices.create \ +# index: self.index_name, +# body: { +# settings: self.settings.to_hash, +# mappings: self.mappings.to_hash +# } +# +# self.import +# end + end +end + diff --git a/plugins/elasticsearch/lib/elasticsearch_plugin.rb b/plugins/elasticsearch/lib/elasticsearch_plugin.rb index ab1785d..f2485db 100644 --- a/plugins/elasticsearch/lib/elasticsearch_plugin.rb +++ b/plugins/elasticsearch/lib/elasticsearch_plugin.rb @@ -8,7 +8,4 @@ class ElasticsearchPlugin < Noosfero::Plugin _("This plugin is used to communicate a elasticsearch to privide a search.") end - # load all models to provide searchable fields - require_relative "load_models" - end diff --git a/plugins/elasticsearch/lib/ext/article.rb b/plugins/elasticsearch/lib/ext/article.rb new file mode 100644 index 0000000..7398f9a --- /dev/null +++ b/plugins/elasticsearch/lib/ext/article.rb @@ -0,0 +1,15 @@ +require_dependency 'article' +require_relative '../elasticsearch_helper' + +class Article + include INDEXED_MODEL + + def self.control_fields + %w(advertise published).map{ |e| e.to_sym } + end + + def self.indexable_fields + SEARCHABLE_FIELDS.keys + self.control_fields + end + +end diff --git a/plugins/elasticsearch/lib/ext/category.rb b/plugins/elasticsearch/lib/ext/category.rb new file mode 100644 index 0000000..0fb6e6f --- /dev/null +++ b/plugins/elasticsearch/lib/ext/category.rb @@ -0,0 +1,9 @@ +require_dependency 'category' + +class Category + def self.control_fields + %w() + end + + require_relative '../elasticsearch_helper' +end diff --git a/plugins/elasticsearch/lib/ext/certifier.rb b/plugins/elasticsearch/lib/ext/certifier.rb new file mode 100644 index 0000000..dd34919 --- /dev/null +++ b/plugins/elasticsearch/lib/ext/certifier.rb @@ -0,0 +1,9 @@ +require_dependency 'certifier' + +class Certifier + def self.control_fields + %w() + end + + require_relative '../elasticsearch_helper' +end diff --git a/plugins/elasticsearch/lib/ext/comment.rb b/plugins/elasticsearch/lib/ext/comment.rb new file mode 100644 index 0000000..4834c68 --- /dev/null +++ b/plugins/elasticsearch/lib/ext/comment.rb @@ -0,0 +1,9 @@ +require_dependency 'comment' + +class Comment + def self.control_fields + %w() + end + + require_relative '../elasticsearch_helper' +end diff --git a/plugins/elasticsearch/lib/ext/license.rb b/plugins/elasticsearch/lib/ext/license.rb new file mode 100644 index 0000000..1504e5d --- /dev/null +++ b/plugins/elasticsearch/lib/ext/license.rb @@ -0,0 +1,9 @@ +require_dependency 'license.rb' + +class License + def self.control_fields + %w() + end + + require_relative '../elasticsearch_helper' +end diff --git a/plugins/elasticsearch/lib/ext/national_region.rb b/plugins/elasticsearch/lib/ext/national_region.rb new file mode 100644 index 0000000..d13637c --- /dev/null +++ b/plugins/elasticsearch/lib/ext/national_region.rb @@ -0,0 +1,9 @@ +require_dependency 'national_region' + +class NationalRegion + def self.control_fields + %w() + end + + require_relative '../elasticsearch_helper' +end diff --git a/plugins/elasticsearch/lib/ext/product.rb b/plugins/elasticsearch/lib/ext/product.rb new file mode 100644 index 0000000..93ddb56 --- /dev/null +++ b/plugins/elasticsearch/lib/ext/product.rb @@ -0,0 +1,9 @@ +require_dependency 'product' + +class Product + def self.control_fields + %w() + end + + require_relative '../elasticsearch_helper' +end diff --git a/plugins/elasticsearch/lib/ext/profile.rb b/plugins/elasticsearch/lib/ext/profile.rb new file mode 100644 index 0000000..e21c36f --- /dev/null +++ b/plugins/elasticsearch/lib/ext/profile.rb @@ -0,0 +1,9 @@ +require_dependency 'profile' + +class Profile + def self.control_fields + %w( visible public_profile ) + end + + require_relative '../elasticsearch_helper' +end diff --git a/plugins/elasticsearch/lib/ext/qualifier.rb b/plugins/elasticsearch/lib/ext/qualifier.rb new file mode 100644 index 0000000..df2271e --- /dev/null +++ b/plugins/elasticsearch/lib/ext/qualifier.rb @@ -0,0 +1,9 @@ +require_dependency 'qualifier' + +class Qualifier + def self.control_fields + %w() + end + + require_relative '../elasticsearch_helper' +end diff --git a/plugins/elasticsearch/lib/ext/scrap.rb b/plugins/elasticsearch/lib/ext/scrap.rb new file mode 100644 index 0000000..e9bc012 --- /dev/null +++ b/plugins/elasticsearch/lib/ext/scrap.rb @@ -0,0 +1,9 @@ +require_dependency 'scrap' + +class Scrap + def self.control_fields + %w(advertise published) + end + + require_relative '../elasticsearch_helper' +end diff --git a/plugins/elasticsearch/lib/ext/user.rb b/plugins/elasticsearch/lib/ext/user.rb new file mode 100644 index 0000000..da99985 --- /dev/null +++ b/plugins/elasticsearch/lib/ext/user.rb @@ -0,0 +1,9 @@ +require_dependency 'user' + +class User + def self.control_fields + %w() + end + + require_relative '../elasticsearch_helper' +end diff --git a/plugins/elasticsearch/lib/load_models.rb b/plugins/elasticsearch/lib/load_models.rb deleted file mode 100644 index 4954048..0000000 --- a/plugins/elasticsearch/lib/load_models.rb +++ /dev/null @@ -1,59 +0,0 @@ -Noosfero::Application.class_eval do - - config.after_initialize do - Rails.application.eager_load! #TODO: REMOVE THIS LINE - indeces_models searchables_models - end - - def searchables_models - ActiveRecord::Base.descendants.select do |model| - model.const_defined?("SEARCHABLE_FIELDS") - end - end - - def indeces_models models - indexed_models = Array.new - models.each do |model| - next if indexed_models.include? model - - create_searchable_model model - indexed_models.push model - - if model.descendants.count > 0 - model.descendants.each { | descendant_model| - indexed_models.push descendant_model - create_searchable_model descendant_model - } - end - - end - - end - - def create_searchable_model model - model.class_eval do - include Elasticsearch::Model - include Elasticsearch::Model::Callbacks - settings index: { number_of_shards: 1 } do - mappings dynamic: 'false' do - model::SEARCHABLE_FIELDS.each do |field, value| - indexes field - end - end - - model.__elasticsearch__.client.indices.delete \ - index: model.index_name rescue nil - - model.__elasticsearch__.client.indices.create \ - index: model.index_name, - body: { - settings: model.settings.to_hash, - mappings: model.mappings.to_hash - } - - model.import - end - end - end - -end -- libgit2 0.21.2