searchgasm 1.4.0 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.rdoc +5 -0
- data/lib/searchgasm/active_record/base.rb +1 -2
- data/lib/searchgasm/config.rb +49 -0
- data/lib/searchgasm/helpers/control_types/link.rb +6 -4
- data/lib/searchgasm/helpers/control_types/select.rb +3 -1
- data/lib/searchgasm/search/base.rb +6 -25
- data/lib/searchgasm/search/searching.rb +1 -3
- data/lib/searchgasm/version.rb +1 -1
- data/searchgasm.gemspec +2 -2
- data/test/test_active_record_base.rb +1 -0
- data/test/test_search_base.rb +10 -10
- metadata +1 -1
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
== 1.4.1 released 2008-10-08
|
2
|
+
|
3
|
+
* Extracted english text into configuration to support alternate languages. I18n support.
|
4
|
+
* Improved method detection in add_joins to use respond_to? with the private method option set to true
|
5
|
+
|
1
6
|
== 1.4.0 released 2008-10-08
|
2
7
|
|
3
8
|
* Fixed bug when duping or cloning to copy over instance vars instead of method values
|
@@ -175,8 +175,7 @@ module ActiveRecord #:nodoc: all
|
|
175
175
|
#
|
176
176
|
# Where as before, the only way to get the above query to work would be to include line_items also, which is not neccessarily what you want.
|
177
177
|
def add_joins!(sql, options_or_joins, scope = :auto) # :nodoc:
|
178
|
-
code_type =
|
179
|
-
code_type ||= merge_joins("", "") && :merge_joins rescue nil
|
178
|
+
code_type = (respond_to?(:array_of_strings?, true) && :array_of_strings) || (respond_to?(:merge_joins, true) && :merge_joins)
|
180
179
|
|
181
180
|
case code_type
|
182
181
|
when :array_of_strings, :merge_joins
|
data/lib/searchgasm/config.rb
CHANGED
@@ -154,6 +154,55 @@ module Searchgasm
|
|
154
154
|
@per_page_choices = value
|
155
155
|
end
|
156
156
|
|
157
|
+
def per_page_show_all_text # :nodoc:
|
158
|
+
@per_page_show_all_text ||= "Show all"
|
159
|
+
end
|
160
|
+
|
161
|
+
# The default value for the :text option for per_page_links and per_page_select when the page is nil, meaning show all.
|
162
|
+
#
|
163
|
+
# * <tt>Default:</tt> "Show all"
|
164
|
+
# * <tt>Accepts:</tt> String
|
165
|
+
def per_page_show_all_text=(value)
|
166
|
+
@per_page_show_all_text = value
|
167
|
+
end
|
168
|
+
|
169
|
+
def per_page_text # :nodoc:
|
170
|
+
@per_page_text ||= "%s per page"
|
171
|
+
end
|
172
|
+
|
173
|
+
# The default value for the :text option for per_page_links and per_page_select when the page is NOT nil. Only one substitution is
|
174
|
+
# passed, which is the per_page value.
|
175
|
+
#
|
176
|
+
# * <tt>Default:</tt> "%s per page"
|
177
|
+
# * <tt>Accepts:</tt> String with substitutions, using rubys % method for strings
|
178
|
+
def per_page_text=(value)
|
179
|
+
@per_page_text = value
|
180
|
+
end
|
181
|
+
|
182
|
+
def priority_order_by_link_activate_text # :nodoc:
|
183
|
+
@priority_order_by_link_activate_text ||= "Show %s first"
|
184
|
+
end
|
185
|
+
|
186
|
+
# The default value for the :activate_text option for priority_order_by_link
|
187
|
+
#
|
188
|
+
# * <tt>Default:</tt> "Show %s first"
|
189
|
+
# * <tt>Accepts:</tt> String with substitutions, using rubys % method for strings
|
190
|
+
def priority_order_by_link_activate_text=(value)
|
191
|
+
@priority_order_by_link_activate_text = value
|
192
|
+
end
|
193
|
+
|
194
|
+
def priority_order_by_link_deactivate_text # :nodoc:
|
195
|
+
@priority_order_by_link_deactivate_text ||= "Don't show %s first"
|
196
|
+
end
|
197
|
+
|
198
|
+
# The default value for the :deactivate_text option for priority_order_by_link
|
199
|
+
#
|
200
|
+
# * <tt>Default:</tt> "Dont' show %s first"
|
201
|
+
# * <tt>Accepts:</tt> String with substitutions, using rubys % method for strings
|
202
|
+
def priority_order_by_link_deactivate_text=(value)
|
203
|
+
@priority_order_by_link_deactivate_text = value
|
204
|
+
end
|
205
|
+
|
157
206
|
def remove_duplicates # :nodoc:
|
158
207
|
return @remove_duplicates if @set_remove_duplicates
|
159
208
|
@remove_duplicates ||= true
|
@@ -181,7 +181,8 @@ module Searchgasm
|
|
181
181
|
# As you can see above, passing nil means "show all" and the text will automatically revert to "show all"
|
182
182
|
#
|
183
183
|
# === Options
|
184
|
-
# * <tt>:text</tt> -- default:
|
184
|
+
# * <tt>:text</tt> -- default: "%s per page", text for the link, only if per_page is not blank
|
185
|
+
# * <tt>:show_all_text</tt> -- default: "Show all", text for the link, only if per_page is blank
|
185
186
|
# * <tt>:html</tt> -- html arrtributes for the <a> tag.
|
186
187
|
#
|
187
188
|
# === Advanced Options
|
@@ -259,8 +260,8 @@ module Searchgasm
|
|
259
260
|
def add_priority_order_by_link_defaults!(priority_order_by, priority_order_as, options = {})
|
260
261
|
add_searchgasm_control_defaults!(:priority_order_by, options)
|
261
262
|
options[:column_name] ||= determine_order_by_text(priority_order_by).downcase
|
262
|
-
options[:activate_text] ||=
|
263
|
-
options[:deactivate_text] ||=
|
263
|
+
options[:activate_text] ||= Config.priority_order_by_link_activate_text % options[:column_name]
|
264
|
+
options[:deactivate_text] ||= Config.priority_order_by_link_deactivate_text % options[:column_name]
|
264
265
|
active = deep_stringify(options[:search_obj].priority_order_by) == deep_stringify(priority_order_by) && options[:search_obj].priority_order_as == priority_order_as
|
265
266
|
options[:text] ||= active ? options[:deactivate_text] : options[:activate_text]
|
266
267
|
if active
|
@@ -274,7 +275,8 @@ module Searchgasm
|
|
274
275
|
|
275
276
|
def add_per_page_link_defaults!(per_page, options = {})
|
276
277
|
add_searchgasm_control_defaults!(:per_page, options)
|
277
|
-
options[:
|
278
|
+
options[:show_all_text] ||= Config.per_page_show_all_text
|
279
|
+
options[:text] ||= per_page.blank? ? options[:show_all_text] : Config.per_page.text % per_page
|
278
280
|
options[:url] = searchgasm_params(options.merge(:search_params => {:per_page => per_page}))
|
279
281
|
options
|
280
282
|
end
|
@@ -44,7 +44,9 @@ module Searchgasm
|
|
44
44
|
|
45
45
|
def add_per_page_select_defaults!(options)
|
46
46
|
add_per_page_links_defaults!(options)
|
47
|
-
options[:
|
47
|
+
options[:show_all_text] ||= Config.per_page_show_all_text
|
48
|
+
options[:text] ||= Config.per_page_text
|
49
|
+
options[:choices] = options[:choices].collect { |choice| choice.nil? ? [options[:show_all_text], choice] : [options[:text] % choice, choice]}
|
48
50
|
add_searchgasm_select_defaults!(:per_page, options)
|
49
51
|
options
|
50
52
|
end
|
@@ -83,24 +83,9 @@ module Searchgasm #:nodoc:
|
|
83
83
|
# Merges all joins together, including the scopes joins for
|
84
84
|
def joins
|
85
85
|
all_joins = (safe_to_array(conditions.auto_joins) + safe_to_array(order_by_auto_joins) + safe_to_array(priority_order_by_auto_joins) + safe_to_array(@joins)).uniq
|
86
|
-
# For partial backwards compatibility, delete if the scope contains conflicts, AR 2.2 does this for you
|
87
|
-
scope_joins = safe_to_array(scope && scope[:joins])
|
88
|
-
all_joins.delete_if { |j| scope_joins.include?(j) } unless scope_joins.blank?
|
89
86
|
all_joins.size <= 1 ? all_joins.first : all_joins
|
90
87
|
end
|
91
|
-
|
92
|
-
def joins
|
93
|
-
auto_joins = joins_to_sql_array((safe_to_array(conditions.auto_joins) + safe_to_array(order_by_auto_joins) + safe_to_array(priority_order_by_auto_joins)).uniq)
|
94
|
-
scope_joins = joins_to_sql_array(scope && scope[:joins])
|
95
|
-
include_joins = joins_to_sql_array(include)
|
96
|
-
|
97
|
-
#raise auto_joins.inspect if conditions.respond_to?(:dogs) && conditions.dogs.id == 1
|
98
|
-
|
99
|
-
auto_joins.delete_if { |auto_join| scope_joins.include?(auto_join) || include_joins.include?(auto_join) }
|
100
|
-
|
101
|
-
#raise auto_joins.inspect if auto_joins.size > 1
|
102
|
-
end
|
103
|
-
=end
|
88
|
+
|
104
89
|
def limit=(value)
|
105
90
|
@set_limit = true
|
106
91
|
@limit = value.blank? || value == 0 ? nil : value.to_i
|
@@ -134,20 +119,16 @@ module Searchgasm #:nodoc:
|
|
134
119
|
find_options
|
135
120
|
end
|
136
121
|
|
122
|
+
def select
|
123
|
+
@select ||= "DISTINCT #{klass.connection.quote_table_name(klass.table_name)}.*" if !joins.blank? && Config.remove_duplicates?
|
124
|
+
@select
|
125
|
+
end
|
126
|
+
|
137
127
|
def scope
|
138
128
|
@scope ||= {}
|
139
129
|
end
|
140
130
|
|
141
131
|
private
|
142
|
-
def joins_to_sql_array(joins)
|
143
|
-
unless array_of_strings?(safe_to_array(joins))
|
144
|
-
join_dependency = ::ActiveRecord::Associations::ClassMethods::JoinDependency.new(klass, joins, nil)
|
145
|
-
join_dependency.join_associations.collect { |assoc| assoc.association_join }
|
146
|
-
else
|
147
|
-
joins.is_a?(Array) ? joins : safe_to_array(joins)
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
132
|
def safe_to_array(o)
|
152
133
|
case o
|
153
134
|
when NilClass
|
@@ -21,9 +21,7 @@ module Searchgasm
|
|
21
21
|
args[0] = klass.primary_key if [nil, :all].include?(args[0])
|
22
22
|
end
|
23
23
|
args << options
|
24
|
-
|
25
|
-
result.uniq! if result.is_a?(Array) && Config.remove_duplicates?
|
26
|
-
result
|
24
|
+
klass.#{method}(*args)
|
27
25
|
end
|
28
26
|
end
|
29
27
|
end_eval
|
data/lib/searchgasm/version.rb
CHANGED
data/searchgasm.gemspec
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
|
2
|
-
# Gem::Specification for Searchgasm-1.4.
|
2
|
+
# Gem::Specification for Searchgasm-1.4.1
|
3
3
|
# Originally generated by Echoe
|
4
4
|
|
5
5
|
--- !ruby/object:Gem::Specification
|
6
6
|
name: searchgasm
|
7
7
|
version: !ruby/object:Gem::Version
|
8
|
-
version: 1.4.
|
8
|
+
version: 1.4.1
|
9
9
|
platform: ruby
|
10
10
|
authors:
|
11
11
|
- Ben Johnson of Binary Logic
|
@@ -45,6 +45,7 @@ class TestActiveRecordBase < Test::Unit::TestCase
|
|
45
45
|
assert_equal Account.find(1, 3), Account.all(:conditions => {:name_contains => "Binary"})
|
46
46
|
assert_equal [Account.find(1)], Account.all(:conditions => {:name_contains => "Binary", :users => {:first_name_starts_with => "Ben"}})
|
47
47
|
assert_equal [], Account.all(:conditions => {:name_contains => "Binary", :users => {:first_name_starts_with => "Ben", :last_name => "Mills"}})
|
48
|
+
assert_equal Account.find(1, 2), Account.all(:conditions => {:users => {:id_gt => 0}}, :include => :users)
|
48
49
|
|
49
50
|
read_only_accounts = Account.all(:conditions => {:name_contains => "Binary"}, :readonly => true)
|
50
51
|
assert read_only_accounts.first.readonly?
|
data/test/test_search_base.rb
CHANGED
@@ -98,23 +98,23 @@ class TestSearchBase < Test::Unit::TestCase
|
|
98
98
|
search.lock = true
|
99
99
|
assert_equal search.lock, true
|
100
100
|
end
|
101
|
-
|
102
|
-
def
|
101
|
+
|
102
|
+
def test_joins
|
103
103
|
search = Account.new_search
|
104
|
-
assert_equal nil, search.
|
104
|
+
assert_equal nil, search.joins
|
105
105
|
search.conditions.name_contains = "Binary"
|
106
|
-
assert_equal nil, search.
|
106
|
+
assert_equal nil, search.joins
|
107
107
|
search.conditions.users.first_name_contains = "Ben"
|
108
|
-
assert_equal(:users, search.
|
108
|
+
assert_equal(:users, search.joins)
|
109
109
|
search.conditions.users.orders.id_gt = 2
|
110
|
-
assert_equal({:users => :orders}, search.
|
110
|
+
assert_equal({:users => :orders}, search.joins)
|
111
111
|
search.conditions.users.reset_orders!
|
112
|
-
assert_equal(:users, search.
|
112
|
+
assert_equal(:users, search.joins)
|
113
113
|
search.conditions.users.orders.id_gt = 2
|
114
114
|
search.conditions.reset_users!
|
115
|
-
assert_equal nil, search.
|
115
|
+
assert_equal nil, search.joins
|
116
116
|
end
|
117
|
-
|
117
|
+
|
118
118
|
def test_limit
|
119
119
|
search = Account.new_search
|
120
120
|
search.limit = 10
|
@@ -141,7 +141,7 @@ class TestSearchBase < Test::Unit::TestCase
|
|
141
141
|
search.conditions.users.id_greater_than = 2
|
142
142
|
search.page = 3
|
143
143
|
search.readonly = true
|
144
|
-
assert_equal({:joins => :users, :offset => 4, :readonly => true, :conditions => ["(\"accounts\".\"name\" LIKE ?) AND (\"users\".\"id\" > ?)", "%Binary%", 2], :limit => 2 }, search.sanitize)
|
144
|
+
assert_equal({:joins => :users, :offset => 4, :select => "DISTINCT \"accounts\".*", :readonly => true, :conditions => ["(\"accounts\".\"name\" LIKE ?) AND (\"users\".\"id\" > ?)", "%Binary%", 2], :limit => 2 }, search.sanitize)
|
145
145
|
end
|
146
146
|
|
147
147
|
def test_scope
|