diff --git a/lib/database_description.rb b/lib/database_description.rb index c31dc96..ff1e641 100644 --- a/lib/database_description.rb +++ b/lib/database_description.rb @@ -1,4 +1,9 @@ class DatabaseDescription < ActiveRecord::Base + + SEARCHABLE_SOFTWARE_FIELDS = { + :name => 1 + } + attr_accessible :name has_many :software_databases diff --git a/lib/ext/community.rb b/lib/ext/community.rb index bb89180..56ddf0e 100644 --- a/lib/ext/community.rb +++ b/lib/ext/community.rb @@ -5,7 +5,7 @@ class Community SEARCHABLE_SOFTWARE_FIELDS = { :name => 1, :identifier => 2, - :nickname => 3, + :nickname => 3 } attr_accessible :visible diff --git a/lib/programming_language.rb b/lib/programming_language.rb index d871fe2..193225c 100644 --- a/lib/programming_language.rb +++ b/lib/programming_language.rb @@ -1,4 +1,9 @@ class ProgrammingLanguage < ActiveRecord::Base + + SEARCHABLE_SOFTWARE_FIELDS = { + :name => 1 + } + attr_accessible :name validates_presence_of :name diff --git a/lib/software_info.rb b/lib/software_info.rb index ad65e76..4422577 100644 --- a/lib/software_info.rb +++ b/lib/software_info.rb @@ -6,6 +6,13 @@ class SoftwareInfo < ActiveRecord::Base :finality => 2, } + SEARCHABLE_SOFTWARE_CLASSES = [ + SoftwareInfo, + Community, + ProgrammingLanguage, + DatabaseDescription + ] + scope :search_by_query, lambda {|query = ""| filtered_query = query.gsub(/[\|\(\)\\\/\s\[\]'"*%&!:]/,' ').split.map{|w| w += ":*"}.join('|') search_fields = SoftwareInfo.pg_search_plugin_fields @@ -13,15 +20,18 @@ class SoftwareInfo < ActiveRecord::Base if query.empty? SoftwareInfo.all else - joins(:community).where("to_tsvector('simple', #{search_fields}) @@ to_tsquery('#{filtered_query}')") + includes(:community, :programming_languages, :database_descriptions).where("to_tsvector('simple', #{search_fields}) @@ to_tsquery('#{filtered_query}')") end } def self.pg_search_plugin_fields - searchable_fields = Community::SEARCHABLE_SOFTWARE_FIELDS.keys.map(&:to_s).sort.map {|f| "coalesce(#{Community.table_name}.#{f}, '')"}.join(" || ' ' || ") - searchable_fields += " || ' ' || " - searchable_fields += self::SEARCHABLE_SOFTWARE_FIELDS.keys.map(&:to_s).sort.map {|f| "coalesce(#{table_name}.#{f}, '')"}.join(" || ' ' || ") + SEARCHABLE_SOFTWARE_CLASSES.collect { |one_class| + self.get_searchable_fields(one_class) + }.join(" || ' ' || ") + end + def self.get_searchable_fields one_class + searchable_fields = one_class::SEARCHABLE_SOFTWARE_FIELDS.keys.map(&:to_s).sort.map {|f| "coalesce(#{one_class.table_name}.#{f}, '')"}.join(" || ' ' || ") searchable_fields end diff --git a/views/search/_full_community.html.erb b/views/search/_full_community.html.erb index 9570ba9..b615f30 100644 --- a/views/search/_full_community.html.erb +++ b/views/search/_full_community.html.erb @@ -10,7 +10,7 @@
<% link_name = software.acronym.blank? ? community.name : "#{software.acronym} - #{community.name}" %> -

+

<%= link_to_homepage(link_name, community.identifier) %>

-- libgit2 0.21.2