Module: AttrSearchable::Arel::Visitors::MySQL

Defined in:
lib/attr_searchable/arel/visitors.rb

Instance Method Summary collapse

Instance Method Details

#visit_AttrSearchableGrammar_Attributes_Collection(o) ⇒ Object



91
92
93
# File 'lib/attr_searchable/arel/visitors.rb', line 91

def visit_AttrSearchableGrammar_Attributes_Collection(o, a)
  o.attributes.collect { |attribute| visit attribute.attribute, a }.join(", ")
end

#visit_AttrSearchableGrammar_Nodes_And_Fulltext(o) ⇒ Object



109
110
111
112
113
114
115
116
117
118
119
# File 'lib/attr_searchable/arel/visitors.rb', line 109

def visit_AttrSearchableGrammar_Nodes_And_Fulltext(o, a)
  res = o.nodes.collect do |node|
    if node.is_a?(AttrSearchableGrammar::Nodes::MatchesFulltextNot)
      visit node, a
    else
      node.nodes.size > 1 ? "+(#{visit node, a})" : "+#{visit node, a}"
    end
  end

  res.join " "
end

#visit_AttrSearchableGrammar_Nodes_FulltextExpression(o) ⇒ Object



95
96
97
# File 'lib/attr_searchable/arel/visitors.rb', line 95

def visit_AttrSearchableGrammar_Nodes_FulltextExpression(o, a)
  "MATCH(#{visit o.collection, a}) AGAINST(#{visit visit(o.node, a), a} IN BOOLEAN MODE)"
end

#visit_AttrSearchableGrammar_Nodes_MatchesFulltext(o) ⇒ Object



103
104
105
106
107
# File 'lib/attr_searchable/arel/visitors.rb', line 103

def visit_AttrSearchableGrammar_Nodes_MatchesFulltext(o, a)
  words = o.right.split(/[\s+'"<>()~-]+/)

  words.size > 1 ? "\"#{words.join " "}\"" : words.first
end

#visit_AttrSearchableGrammar_Nodes_MatchesFulltextNot(o) ⇒ Object



99
100
101
# File 'lib/attr_searchable/arel/visitors.rb', line 99

def visit_AttrSearchableGrammar_Nodes_MatchesFulltextNot(o, a)
  o.right.split(/[\s+'"<>()~-]+/).collect { |word| "-#{word}" }.join(" ")
end

#visit_AttrSearchableGrammar_Nodes_Or_Fulltext(o) ⇒ Object



121
122
123
# File 'lib/attr_searchable/arel/visitors.rb', line 121

def visit_AttrSearchableGrammar_Nodes_Or_Fulltext(o, a)
  o.nodes.collect { |node| "(#{visit node, a})" }.join(" ")
end