texticle 2.0.pre2 → 2.0.pre3

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,19 @@
1
+ == 2.0.pre3
2
+
3
+ * 1 new feature
4
+
5
+ * #select calls now limit the columns that are searched
6
+
7
+ * 1 bugfix
8
+
9
+ * #search calls without an argument assume an empty string as a search term (it errored out previously)
10
+
11
+ == 2.0.pre2
12
+
13
+ * 1 bugfix
14
+
15
+ * #respond_to? wasn't overwritten correctly
16
+
1
17
  === 2.0.pre
2
18
 
3
19
  * Complete refactoring of Texticle
data/lib/texticle.rb CHANGED
@@ -2,14 +2,15 @@ require 'active_record'
2
2
 
3
3
  module Texticle
4
4
 
5
- def search(query = {})
5
+ def search(query = "")
6
6
  language = connection.quote('english')
7
7
 
8
8
  exclusive = true
9
+ string_columns = columns.select {|column| column.type == :string }.map(&:name)
9
10
 
10
11
  unless query.is_a?(Hash)
11
12
  exclusive = false
12
- query = columns.select {|column| column.type == :string }.map(&:name).inject({}) do |terms, column|
13
+ query = string_columns.inject({}) do |terms, column|
13
14
  terms.merge column => query.to_s
14
15
  end
15
16
  end
@@ -17,6 +18,11 @@ module Texticle
17
18
  similarities = []
18
19
  conditions = []
19
20
 
21
+ select_values = scoped.select_values.map(&:to_s) & string_columns
22
+ query.select! do |column, search_term|
23
+ select_values.include? column
24
+ end unless select_values.empty?
25
+
20
26
  query.each do |column, search_term|
21
27
  column = connection.quote_column_name(column)
22
28
  search_term = connection.quote normalize(Helper.normalize(search_term))
@@ -26,7 +32,7 @@ module Texticle
26
32
 
27
33
  rank = connection.quote_column_name('rank' + rand.to_s)
28
34
 
29
- select("#{quoted_table_name}.*, #{similarities.join(" + ")} AS #{rank}").
35
+ select("#{quoted_table_name + '.*,' if select_values.empty?} #{similarities.join(" + ")} AS #{rank}").
30
36
  where(conditions.join(exclusive ? " AND " : " OR ")).
31
37
  order("#{rank} DESC")
32
38
  end
@@ -118,6 +118,19 @@ class TexticleTest < Test::Unit::TestCase
118
118
  assert Game.respond_to?(:normalize, true)
119
119
  end
120
120
  end
121
+
122
+ context "when searching after selecting columns to return" do
123
+ should "limit the search to the selected columns" do
124
+ assert_empty Game.select(:system).search("Mario")
125
+ assert_equal @mario.title, Game.select(:title).search("Mario").first.title
126
+ end
127
+
128
+ should "not fetch extra columns" do
129
+ assert_raise(ActiveModel::MissingAttributeError) do
130
+ Game.select(:title).search("Mario").first.system
131
+ end
132
+ end
133
+ end
121
134
  end
122
135
 
123
136
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: texticle
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease: 4
5
- version: 2.0.pre2
5
+ version: 2.0.pre3
6
6
  platform: ruby
7
7
  authors:
8
8
  - ecin
@@ -11,7 +11,7 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2011-06-14 00:00:00 Z
14
+ date: 2011-07-03 00:00:00 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: pg