joost-searchlogic 2.1.5.2 → 2.1.5.3

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/README.rdoc CHANGED
@@ -1,6 +1,12 @@
1
1
  This is a clone of the original SearchLogic! Only used to apply some fast patches.
2
2
  You should probably use the newer original source.
3
3
 
4
+ Changes made:
5
+ * Fixed bug #92 (see lighthouse page).
6
+ * Changed order helper.
7
+ * Changed loading of helpers.
8
+ * Added some documentation.
9
+
4
10
  = Searchlogic
5
11
 
6
12
  <b>Searchlogic has been <em>completely</em> rewritten for v2. It is much simpler and has taken an entirely new approach. To give you an idea, v1 had ~2300 lines of code, v2 has ~420 lines of code.</b>
@@ -174,6 +180,20 @@ Again, these are all just named scopes, use it in the same way:
174
180
 
175
181
  Notice we pass true as the value. If a named scope does not accept any parameters (arity == 0) you can simply pass it true or false. If you pass false, the named scope will be ignored. If your named scope accepts a parameter, the value will be passed right to the named scope regardless of the value.
176
182
 
183
+ This way you can create more complex searches like:
184
+
185
+ User.named_scope :search_who, lambda { |*args|
186
+ who = "%#{(args.first || '').strip.gsub('%', '')}%"
187
+ {
188
+ :conditions => ["users.email LIKE ? OR user_profiles.firstname LIKE ?", who, who],
189
+ :include => :user_profile
190
+ }
191
+ }
192
+
193
+ Use it, again, very simple:
194
+
195
+ User.search(:who_search => 'john')
196
+
177
197
  Now just throw it in your form:
178
198
 
179
199
  - form_for @search do |f|
@@ -1,5 +1,6 @@
1
- module Searchlogic
2
- module RailsHelpers
1
+ module ActionView
2
+ class Base
3
+
3
4
  # Creates a link that alternates between acending and descending. It basically
4
5
  # alternates between calling 2 named scopes: "ascend_by_*" and "descend_by_*"
5
6
  #
@@ -10,6 +11,7 @@ module Searchlogic
10
11
  #
11
12
  # order @search, :by => :username
12
13
  # order @search, :by => :created_at, :as => "Created"
14
+ # order(@search, {:by => :last_login_at, :as => 'Login time', :arrow => true}, {:class => 'order'})
13
15
  #
14
16
  # This helper accepts the following options:
15
17
  #
@@ -18,31 +20,37 @@ module Searchlogic
18
20
  # * <tt>:ascend_scope</tt> - what scope to call for ascending the data, defaults to "ascend_by_:by"
19
21
  # * <tt>:descend_scope</tt> - what scope to call for descending the data, defaults to "descend_by_:by"
20
22
  # * <tt>:params_scope</tt> - the name of the params key to scope the order condition by, defaults to :search
23
+ # * <tt>:default_scope</tt> - either :asc or :desc, defaults to ascend_scope
24
+ # * <tt>:arrow</tt> - set to true if you want an ascii arrow showing the ordering
25
+ # * <tt>:css_classes</tt> - Array of what css classes you want to add, defaults to [:asc, :desc]. For old behaviour use [:ascending, :descending] here
21
26
  def order(search, options = {}, html_options = {})
22
- options[:params_scope] ||= :search
23
- options[:as] ||= options[:by].to_s.humanize
24
- options[:ascend_scope] ||= "ascend_by_#{options[:by]}"
27
+ options[:params_scope] ||= :search
28
+ options[:as] ||= options[:by].to_s.humanize
29
+ options[:ascend_scope] ||= "ascend_by_#{options[:by]}"
25
30
  options[:descend_scope] ||= "descend_by_#{options[:by]}"
26
- ascending = search.order.to_s == options[:ascend_scope]
27
- new_scope = ascending ? options[:descend_scope] : options[:ascend_scope]
31
+ options[:css_classes] ||= [:asc, :desc]
28
32
  selected = [options[:ascend_scope], options[:descend_scope]].include?(search.order.to_s)
29
33
  if selected
34
+ ascending = search.order.to_s == options[:ascend_scope]
35
+ new_scope = ascending ? options[:descend_scope] : options[:ascend_scope]
30
36
  css_classes = html_options[:class] ? html_options[:class].split(" ") : []
31
37
  if ascending
32
- options[:as] = "&#9650;&nbsp;#{options[:as]}"
33
- css_classes << "ascending"
38
+ options[:as] = "&#9650;&nbsp;#{options[:as]}" if options[:arrow]
39
+ css_classes << options[:css_classes].first
34
40
  else
35
- options[:as] = "&#9660;&nbsp;#{options[:as]}"
36
- css_classes << "descending"
41
+ options[:as] = "&#9660;&nbsp;#{options[:as]}" if options[:arrow]
42
+ css_classes << options[:css_classes].last
37
43
  end
38
44
  html_options[:class] = css_classes.join(" ")
45
+ else
46
+ new_scope = (options[:default_scope] == :desc) ? options[:descend_scope] : options[:ascend_scope]
39
47
  end
40
48
  link_to options[:as], url_for(options[:params_scope] => search.conditions.merge( { :order => new_scope } ) ), html_options
41
49
  end
42
50
 
43
51
  # Automatically makes the form method :get if a Searchlogic::Search and sets
44
52
  # the params scope to :search
45
- def form_for(*args, &block)
53
+ def form_for_with_searchlogic(*args, &block)
46
54
  if search_obj = args.find { |arg| arg.is_a?(Searchlogic::Search) }
47
55
  options = args.extract_options!
48
56
  options[:html] ||= {}
@@ -51,19 +59,18 @@ module Searchlogic
51
59
  args.unshift(:search) if args.first == search_obj
52
60
  args << options
53
61
  end
54
- super
62
+ form_for_without_searchlogic(*args, &block)
55
63
  end
56
-
64
+
57
65
  # Automatically adds an "order" hidden field in your form to preserve how the data
58
66
  # is being ordered.
59
- def fields_for(*args, &block)
67
+ def fields_for_with_searchlogic(*args, &block)
60
68
  if search_obj = args.find { |arg| arg.is_a?(Searchlogic::Search) }
61
69
  args.unshift(:search) if args.first == search_obj
62
70
  concat(content_tag("div", hidden_field_tag("#{args.first}[order]", search_obj.order)) + "\n")
63
- super
64
- else
65
- super
66
71
  end
72
+ fields_for_without_searchlogic(*args, &block)
67
73
  end
74
+
68
75
  end
69
76
  end
data/lib/searchlogic.rb CHANGED
@@ -25,7 +25,8 @@ if !ActiveRecord::Base.respond_to?(:search)
25
25
  end
26
26
  end
27
27
 
28
- if defined?(ActionController)
28
+ if defined?(ActionView)
29
29
  require "searchlogic/rails_helpers"
30
- ActionController::Base.helper(Searchlogic::RailsHelpers)
30
+ ActionView::Base.alias_method_chain :form_for, :searchlogic
31
+ ActionView::Base.alias_method_chain :fields_for, :searchlogic
31
32
  end
data/searchlogic.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{searchlogic}
5
- s.version = "2.1.5.2"
5
+ s.version = "2.1.5.3"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Ben Johnson of Binary Logic"]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: joost-searchlogic
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.5.2
4
+ version: 2.1.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Johnson of Binary Logic