schof-searchlogic 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +302 -0
- data/MIT-LICENSE +20 -0
- data/Manifest +157 -0
- data/README.rdoc +461 -0
- data/Rakefile +13 -0
- data/TODO.rdoc +4 -0
- data/init.rb +1 -0
- data/lib/searchlogic.rb +100 -0
- data/lib/searchlogic/active_record/associations.rb +52 -0
- data/lib/searchlogic/active_record/base.rb +224 -0
- data/lib/searchlogic/active_record/connection_adapters/mysql_adapter.rb +176 -0
- data/lib/searchlogic/active_record/connection_adapters/postgresql_adapter.rb +172 -0
- data/lib/searchlogic/active_record/connection_adapters/sqlite_adapter.rb +80 -0
- data/lib/searchlogic/condition/base.rb +165 -0
- data/lib/searchlogic/condition/begins_with.rb +17 -0
- data/lib/searchlogic/condition/blank.rb +21 -0
- data/lib/searchlogic/condition/child_of.rb +11 -0
- data/lib/searchlogic/condition/descendant_of.rb +11 -0
- data/lib/searchlogic/condition/ends_with.rb +17 -0
- data/lib/searchlogic/condition/equals.rb +33 -0
- data/lib/searchlogic/condition/greater_than.rb +15 -0
- data/lib/searchlogic/condition/greater_than_or_equal_to.rb +15 -0
- data/lib/searchlogic/condition/inclusive_descendant_of.rb +10 -0
- data/lib/searchlogic/condition/keywords.rb +47 -0
- data/lib/searchlogic/condition/less_than.rb +15 -0
- data/lib/searchlogic/condition/less_than_or_equal_to.rb +15 -0
- data/lib/searchlogic/condition/like.rb +15 -0
- data/lib/searchlogic/condition/nested_set.rb +17 -0
- data/lib/searchlogic/condition/nil.rb +21 -0
- data/lib/searchlogic/condition/not_begin_with.rb +20 -0
- data/lib/searchlogic/condition/not_blank.rb +19 -0
- data/lib/searchlogic/condition/not_end_with.rb +20 -0
- data/lib/searchlogic/condition/not_equal.rb +27 -0
- data/lib/searchlogic/condition/not_have_keywords.rb +20 -0
- data/lib/searchlogic/condition/not_like.rb +20 -0
- data/lib/searchlogic/condition/not_nil.rb +19 -0
- data/lib/searchlogic/condition/sibling_of.rb +14 -0
- data/lib/searchlogic/conditions/any_or_all.rb +42 -0
- data/lib/searchlogic/conditions/base.rb +244 -0
- data/lib/searchlogic/conditions/groups.rb +74 -0
- data/lib/searchlogic/conditions/magic_methods.rb +286 -0
- data/lib/searchlogic/conditions/multiparameter_attributes.rb +105 -0
- data/lib/searchlogic/conditions/protection.rb +36 -0
- data/lib/searchlogic/config.rb +31 -0
- data/lib/searchlogic/config/helpers.rb +338 -0
- data/lib/searchlogic/config/search.rb +53 -0
- data/lib/searchlogic/core_ext/hash.rb +75 -0
- data/lib/searchlogic/core_ext/object.rb +19 -0
- data/lib/searchlogic/helpers/control_types/link.rb +310 -0
- data/lib/searchlogic/helpers/control_types/links.rb +242 -0
- data/lib/searchlogic/helpers/control_types/remote_link.rb +87 -0
- data/lib/searchlogic/helpers/control_types/remote_links.rb +72 -0
- data/lib/searchlogic/helpers/control_types/remote_select.rb +36 -0
- data/lib/searchlogic/helpers/control_types/select.rb +82 -0
- data/lib/searchlogic/helpers/form.rb +208 -0
- data/lib/searchlogic/helpers/utilities.rb +197 -0
- data/lib/searchlogic/modifiers/absolute.rb +15 -0
- data/lib/searchlogic/modifiers/acos.rb +11 -0
- data/lib/searchlogic/modifiers/asin.rb +11 -0
- data/lib/searchlogic/modifiers/atan.rb +11 -0
- data/lib/searchlogic/modifiers/avg.rb +15 -0
- data/lib/searchlogic/modifiers/base.rb +27 -0
- data/lib/searchlogic/modifiers/ceil.rb +15 -0
- data/lib/searchlogic/modifiers/char_length.rb +15 -0
- data/lib/searchlogic/modifiers/cos.rb +15 -0
- data/lib/searchlogic/modifiers/cot.rb +15 -0
- data/lib/searchlogic/modifiers/count.rb +11 -0
- data/lib/searchlogic/modifiers/day_of_month.rb +15 -0
- data/lib/searchlogic/modifiers/day_of_week.rb +15 -0
- data/lib/searchlogic/modifiers/day_of_year.rb +15 -0
- data/lib/searchlogic/modifiers/degrees.rb +11 -0
- data/lib/searchlogic/modifiers/exp.rb +15 -0
- data/lib/searchlogic/modifiers/floor.rb +15 -0
- data/lib/searchlogic/modifiers/hex.rb +11 -0
- data/lib/searchlogic/modifiers/hour.rb +11 -0
- data/lib/searchlogic/modifiers/log.rb +15 -0
- data/lib/searchlogic/modifiers/log10.rb +11 -0
- data/lib/searchlogic/modifiers/log2.rb +11 -0
- data/lib/searchlogic/modifiers/lower.rb +15 -0
- data/lib/searchlogic/modifiers/ltrim.rb +15 -0
- data/lib/searchlogic/modifiers/md5.rb +11 -0
- data/lib/searchlogic/modifiers/microseconds.rb +11 -0
- data/lib/searchlogic/modifiers/milliseconds.rb +11 -0
- data/lib/searchlogic/modifiers/minute.rb +15 -0
- data/lib/searchlogic/modifiers/month.rb +15 -0
- data/lib/searchlogic/modifiers/octal.rb +15 -0
- data/lib/searchlogic/modifiers/radians.rb +11 -0
- data/lib/searchlogic/modifiers/round.rb +11 -0
- data/lib/searchlogic/modifiers/rtrim.rb +15 -0
- data/lib/searchlogic/modifiers/second.rb +15 -0
- data/lib/searchlogic/modifiers/sign.rb +11 -0
- data/lib/searchlogic/modifiers/sin.rb +11 -0
- data/lib/searchlogic/modifiers/square_root.rb +15 -0
- data/lib/searchlogic/modifiers/sum.rb +11 -0
- data/lib/searchlogic/modifiers/tan.rb +15 -0
- data/lib/searchlogic/modifiers/trim.rb +15 -0
- data/lib/searchlogic/modifiers/upper.rb +15 -0
- data/lib/searchlogic/modifiers/week.rb +11 -0
- data/lib/searchlogic/modifiers/year.rb +11 -0
- data/lib/searchlogic/search/base.rb +148 -0
- data/lib/searchlogic/search/conditions.rb +53 -0
- data/lib/searchlogic/search/ordering.rb +244 -0
- data/lib/searchlogic/search/pagination.rb +121 -0
- data/lib/searchlogic/search/protection.rb +89 -0
- data/lib/searchlogic/search/searching.rb +32 -0
- data/lib/searchlogic/shared/utilities.rb +56 -0
- data/lib/searchlogic/shared/virtual_classes.rb +39 -0
- data/lib/searchlogic/version.rb +79 -0
- data/searchlogic.gemspec +41 -0
- data/test/active_record_tests/associations_test.rb +94 -0
- data/test/active_record_tests/base_test.rb +115 -0
- data/test/condition_tests/base_test.rb +54 -0
- data/test/condition_tests/begins_with_test.rb +11 -0
- data/test/condition_tests/blank_test.rb +31 -0
- data/test/condition_tests/child_of_test.rb +17 -0
- data/test/condition_tests/descendant_of_test.rb +12 -0
- data/test/condition_tests/ends_with_test.rb +11 -0
- data/test/condition_tests/equals_test.rb +28 -0
- data/test/condition_tests/greater_than_or_equal_to_test.rb +11 -0
- data/test/condition_tests/greater_than_test.rb +11 -0
- data/test/condition_tests/inclusive_descendant_of_test.rb +12 -0
- data/test/condition_tests/keywords_test.rb +23 -0
- data/test/condition_tests/less_than_or_equal_to_test.rb +11 -0
- data/test/condition_tests/less_than_test.rb +11 -0
- data/test/condition_tests/like_test.rb +11 -0
- data/test/condition_tests/nil_test.rb +31 -0
- data/test/condition_tests/not_begin_with_test.rb +8 -0
- data/test/condition_tests/not_blank_test.rb +8 -0
- data/test/condition_tests/not_end_with_test.rb +8 -0
- data/test/condition_tests/not_equal_test.rb +19 -0
- data/test/condition_tests/not_have_keywords_test.rb +8 -0
- data/test/condition_tests/not_like_test.rb +8 -0
- data/test/condition_tests/not_nil_test.rb +13 -0
- data/test/condition_tests/sibling_of_test.rb +15 -0
- data/test/conditions_tests/any_or_all_test.rb +23 -0
- data/test/conditions_tests/base_test.rb +185 -0
- data/test/conditions_tests/groups_test.rb +68 -0
- data/test/conditions_tests/magic_methods_test.rb +36 -0
- data/test/conditions_tests/multiparameter_attributes_test.rb +15 -0
- data/test/conditions_tests/protection_test.rb +18 -0
- data/test/config_test.rb +23 -0
- data/test/fixtures/accounts.yml +12 -0
- data/test/fixtures/animals.yml +7 -0
- data/test/fixtures/orders.yml +12 -0
- data/test/fixtures/user_groups.yml +5 -0
- data/test/fixtures/users.yml +45 -0
- data/test/libs/awesome_nested_set.rb +545 -0
- data/test/libs/awesome_nested_set/compatability.rb +29 -0
- data/test/libs/awesome_nested_set/helper.rb +40 -0
- data/test/libs/awesome_nested_set/named_scope.rb +140 -0
- data/test/libs/rexml_fix.rb +14 -0
- data/test/modifier_tests/day_of_month_test.rb +16 -0
- data/test/search_tests/base_test.rb +241 -0
- data/test/search_tests/conditions_test.rb +21 -0
- data/test/search_tests/ordering_test.rb +167 -0
- data/test/search_tests/pagination_test.rb +74 -0
- data/test/search_tests/protection_test.rb +26 -0
- data/test/test_helper.rb +116 -0
- metadata +385 -0
@@ -0,0 +1,105 @@
|
|
1
|
+
module Searchlogic
|
2
|
+
module Conditions
|
3
|
+
# = Multiparameter Attributes
|
4
|
+
#
|
5
|
+
# This code is largely copied over from ActiveRecord, so that we can handle the date_select and datetime_select helpers.
|
6
|
+
# One option would be to instantiate a new ActiveRecord object, pass the attributes to it, then get the field value. This
|
7
|
+
# would not be smart for performance because there is a lot going on there that we don't need, such as instantiating an entirely
|
8
|
+
# new object. ActiveRecord gives us no other way to use the code, so the only other option is to copy over the methods that handle this.
|
9
|
+
# This ultimately results in better performance.
|
10
|
+
module MultiparameterAttributes
|
11
|
+
def self.included(klass)
|
12
|
+
klass.class_eval do
|
13
|
+
alias_method_chain :conditions=, :multiparameter_attributes
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def conditions_with_multiparameter_attributes=(attributes)
|
18
|
+
if attributes.is_a?(Hash)
|
19
|
+
multiparameter_attributes = []
|
20
|
+
clean_attributes = {}
|
21
|
+
attributes.each do |k,v|
|
22
|
+
if k.to_s.include?("(")
|
23
|
+
multiparameter_attributes << [k, v]
|
24
|
+
else
|
25
|
+
clean_attributes[k] = v
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
attributes = clean_attributes.merge(convert_multiparameter_attributes(multiparameter_attributes))
|
30
|
+
end
|
31
|
+
|
32
|
+
self.conditions_without_multiparameter_attributes = attributes
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
def instantiate_time_object(name, values)
|
37
|
+
if klass.respond_to?(:create_time_zone_conversion_attribute, true) && klass.send(:create_time_zone_conversion_attribute?, name, column_for_attribute(name))
|
38
|
+
Time.zone.local(*values)
|
39
|
+
else
|
40
|
+
Time.time_with_datetime_fallback(klass.default_timezone, *values)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def convert_multiparameter_attributes(pairs)
|
45
|
+
convert_callstack_for_multiparameter_attributes(
|
46
|
+
extract_callstack_for_multiparameter_attributes(pairs)
|
47
|
+
)
|
48
|
+
end
|
49
|
+
|
50
|
+
def convert_callstack_for_multiparameter_attributes(callstack)
|
51
|
+
r = {}
|
52
|
+
callstack.each do |name, values|
|
53
|
+
date_klass = send("#{name}_object").column_for_type_cast.klass
|
54
|
+
if values.empty?
|
55
|
+
r[name] = nil
|
56
|
+
else
|
57
|
+
begin
|
58
|
+
value = if Time == date_klass
|
59
|
+
instantiate_time_object(name, values)
|
60
|
+
elsif Date == date_klass
|
61
|
+
begin
|
62
|
+
Date.new(*values)
|
63
|
+
rescue ArgumentError => ex # if Date.new raises an exception on an invalid date
|
64
|
+
instantiate_time_object(name, values).to_date # we instantiate Time object and convert it back to a date thus using Time's logic in handling invalid dates
|
65
|
+
end
|
66
|
+
else
|
67
|
+
date_klass.new(*values)
|
68
|
+
end
|
69
|
+
|
70
|
+
r[name] = value
|
71
|
+
rescue => ex
|
72
|
+
raise ArgumentError.new("error on assignment #{values.inspect} to #{name}")
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
r
|
77
|
+
end
|
78
|
+
|
79
|
+
def extract_callstack_for_multiparameter_attributes(pairs)
|
80
|
+
attributes = { }
|
81
|
+
|
82
|
+
for pair in pairs
|
83
|
+
multiparameter_name, value = pair
|
84
|
+
attribute_name = multiparameter_name.split("(").first
|
85
|
+
attributes[attribute_name] = [] unless attributes.include?(attribute_name)
|
86
|
+
|
87
|
+
unless value.empty?
|
88
|
+
attributes[attribute_name] <<
|
89
|
+
[ find_parameter_position(multiparameter_name), type_cast_attribute_value(multiparameter_name, value) ]
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
attributes.each { |name, values| attributes[name] = values.sort_by{ |v| v.first }.collect { |v| v.last } }
|
94
|
+
end
|
95
|
+
|
96
|
+
def type_cast_attribute_value(multiparameter_name, value)
|
97
|
+
multiparameter_name =~ /\([0-9]*([a-z])\)/ ? value.send("to_" + $1) : value
|
98
|
+
end
|
99
|
+
|
100
|
+
def find_parameter_position(multiparameter_name)
|
101
|
+
multiparameter_name.scan(/\(([0-9]*).*\)/).first.first
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Searchlogic
|
2
|
+
module Conditions
|
3
|
+
# = Conditions Protection
|
4
|
+
#
|
5
|
+
# Adds protection from SQL injections. Just set protect = true and it will limit what kind of conditions it will accept.
|
6
|
+
module Protection
|
7
|
+
def self.included(klass)
|
8
|
+
klass.class_eval do
|
9
|
+
attr_reader :protect
|
10
|
+
alias_method_chain :conditions=, :protection
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def conditions_with_protection=(conditions)
|
15
|
+
unless conditions.is_a?(Hash)
|
16
|
+
if protect?
|
17
|
+
return if conditions.blank?
|
18
|
+
raise(ArgumentError, "You can not pass SQL as conditions while the search is being protected, you can only pass a hash")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
self.conditions_without_protection = conditions
|
23
|
+
end
|
24
|
+
|
25
|
+
def protect=(value)
|
26
|
+
association_objects.each { |obj| obj.protect = value }
|
27
|
+
@protect = value
|
28
|
+
end
|
29
|
+
|
30
|
+
def protect?
|
31
|
+
protect == true
|
32
|
+
end
|
33
|
+
alias_method :protected?, :protect?
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Searchlogic
|
2
|
+
# = Config
|
3
|
+
# Adds default configuration for all of searchlogic. For rails the best place to do this is in config/initializers. Create a file in there called searchlogic.rb with the following content:
|
4
|
+
#
|
5
|
+
# === Example
|
6
|
+
#
|
7
|
+
# # config/iniitializers/searchlogic.rb
|
8
|
+
# Searchlogic::Config.configure do |config|
|
9
|
+
# config.search.per_page = 25
|
10
|
+
# config.helpers.order_by_link_asc_indicator = "My indicator"
|
11
|
+
# end
|
12
|
+
#
|
13
|
+
# For a list of all configuration options see Searchlogic::Config::Search and Searchlogic::Config::Helpers
|
14
|
+
class Config
|
15
|
+
class << self
|
16
|
+
# Convenience method for setting configuration
|
17
|
+
# See example at top of class.
|
18
|
+
def configure
|
19
|
+
yield self
|
20
|
+
end
|
21
|
+
|
22
|
+
def search # :nodoc:
|
23
|
+
Search
|
24
|
+
end
|
25
|
+
|
26
|
+
def helpers # :nodoc:
|
27
|
+
Helpers
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,338 @@
|
|
1
|
+
module Searchlogic
|
2
|
+
class Config
|
3
|
+
# = Helpers Configuration
|
4
|
+
# Provide configuration for searchlogic's rails helpers
|
5
|
+
#
|
6
|
+
# === Example
|
7
|
+
# Searchlogic::Config.configure do |config|
|
8
|
+
# config.helpers.order_by_link_asc_indicator = "ASC"
|
9
|
+
# end
|
10
|
+
class Helpers
|
11
|
+
class << self
|
12
|
+
# Which hidden fields to automatically include when creating a form with a Searchlogic object. See Searchlogic::Helpers::Form for more info.
|
13
|
+
#
|
14
|
+
# * <tt>Default:</tt> [:order_by, :order_as, :priority_order_by, :priority_order_as, :per_page]
|
15
|
+
# * <tt>Accepts:</tt> Array, nil, false
|
16
|
+
def hidden_fields
|
17
|
+
@hidden_fields ||= (Searchlogic::Search::Base::SPECIAL_FIND_OPTIONS - [:page, :priority_order])
|
18
|
+
end
|
19
|
+
attr_writer :hidden_fields
|
20
|
+
|
21
|
+
# Searchlogic does some javascript magic when you use the form helpers with a Searchlogic object. To make configuration easier Searchlogic checks for the existence of Prototype and jQuery and uses the first
|
22
|
+
# one it finds. To cut back on the javascript output you can specify your library here.
|
23
|
+
#
|
24
|
+
# * <tt>Default:</tt> nil
|
25
|
+
# * <tt>Accepts:</tt> :prototype or :jquery
|
26
|
+
def javascript_library
|
27
|
+
@javascript_library
|
28
|
+
end
|
29
|
+
attr_writer :javascript_library
|
30
|
+
|
31
|
+
# The class name for used in the order_as_link helper
|
32
|
+
#
|
33
|
+
# * <tt>Default:</tt> "order_as"
|
34
|
+
# * <tt>Accepts:</tt> String, set to nil to disable
|
35
|
+
def order_as_link_class_name
|
36
|
+
return @order_as_link_class_name if defined?(@order_as_link_class_name)
|
37
|
+
@order_as_link_class_name = "order_as"
|
38
|
+
end
|
39
|
+
attr_writer :order_as_link_class_name
|
40
|
+
|
41
|
+
# The class name for used in the order_as_select helper
|
42
|
+
#
|
43
|
+
# * <tt>Default:</tt> "order_as"
|
44
|
+
# * <tt>Accepts:</tt> String, set to nil to disable
|
45
|
+
def order_as_select_class_name
|
46
|
+
return @order_as_select_class_name if defined?(@order_as_select_class_name)
|
47
|
+
@order_as_select_class_name = "order_as"
|
48
|
+
end
|
49
|
+
attr_writer :order_as_select_class_name
|
50
|
+
|
51
|
+
# The indicator that is used when the sort of a column is ascending
|
52
|
+
#
|
53
|
+
# * <tt>Default:</tt> ▲
|
54
|
+
# * <tt>Accepts:</tt> String or a Proc.
|
55
|
+
#
|
56
|
+
# === Examples
|
57
|
+
#
|
58
|
+
# config.asc_indicator = "(ASC)"
|
59
|
+
# config.asc_indicator = Proc.new { |template| template.image_tag("asc.jpg") }
|
60
|
+
def order_by_link_asc_indicator
|
61
|
+
@order_by_link_asc_indicator ||= " ▲"
|
62
|
+
end
|
63
|
+
attr_writer :order_by_link_asc_indicator
|
64
|
+
|
65
|
+
# The class name for used in the order_by_link helper
|
66
|
+
#
|
67
|
+
# * <tt>Default:</tt> "order_by"
|
68
|
+
# * <tt>Accepts:</tt> String, set to nil to disable
|
69
|
+
def order_by_link_class_name
|
70
|
+
return @order_by_link_class_name if defined?(@order_by_link_class_name)
|
71
|
+
@order_by_link_class_name = "order_by"
|
72
|
+
end
|
73
|
+
attr_writer :order_by_link_class_name
|
74
|
+
|
75
|
+
# See order_by_link_asc_indicator=
|
76
|
+
def order_by_link_desc_indicator
|
77
|
+
@order_by_link_desc_indicator ||= " ▼"
|
78
|
+
end
|
79
|
+
attr_writer :order_by_link_desc_indicator
|
80
|
+
|
81
|
+
# The class name used in order_by_links for the link that it is currently ordering by
|
82
|
+
#
|
83
|
+
# * <tt>Default:</tt> "# The class name for used in the page_link helper
|
84
|
+
#
|
85
|
+
# * <tt>Default:</tt> "page"
|
86
|
+
# * <tt>Accepts:</tt> String, set to nil to disable
|
87
|
+
def order_by_links_ordering_by_class_name
|
88
|
+
return @order_by_links_ordering_by_class_name if defined?(@order_by_links_ordering_by_class_name)
|
89
|
+
@order_by_links_ordering_by_class_name = "ordering_by"
|
90
|
+
end
|
91
|
+
attr_writer :order_by_links_ordering_by_class_name
|
92
|
+
|
93
|
+
# The class name for used in the order_by_select helper
|
94
|
+
#
|
95
|
+
# * <tt>Default:</tt> "order_by"
|
96
|
+
# * <tt>Accepts:</tt> String
|
97
|
+
def order_by_select_class_name
|
98
|
+
@order_by_select_class_name ||= "order_by"
|
99
|
+
end
|
100
|
+
attr_writer :order_by_select_class_name
|
101
|
+
|
102
|
+
# Makes page_links look just like the output of will_paginate.
|
103
|
+
#
|
104
|
+
# * <tt>Default:</tt> false
|
105
|
+
# * <tt>Accepts:</tt> Boolean
|
106
|
+
def page_links_act_like_will_paginate
|
107
|
+
@page_links_act_like_will_paginate ||= false
|
108
|
+
end
|
109
|
+
attr_writer :page_links_act_like_will_paginate
|
110
|
+
|
111
|
+
# Convenience methods for determining if page_links_act_like_will_paginate is set to true
|
112
|
+
def page_links_act_like_will_paginate?
|
113
|
+
page_links_act_like_will_paginate == true
|
114
|
+
end
|
115
|
+
|
116
|
+
# The class name for used in the page_link helper
|
117
|
+
#
|
118
|
+
# * <tt>Default:</tt> "page"
|
119
|
+
# * <tt>Accepts:</tt> String, set to nil to disable
|
120
|
+
def page_link_class_name
|
121
|
+
return @page_link_class_name if defined?(@page_link_class_name)
|
122
|
+
@page_link_class_name = "page"
|
123
|
+
end
|
124
|
+
attr_writer :page_link_class_name
|
125
|
+
|
126
|
+
# The choices used in the per_page_links helper. Works just like per_page_select_choices.
|
127
|
+
def per_page_links_choices
|
128
|
+
@per_page_links_choices ||= per_page_select_choices
|
129
|
+
end
|
130
|
+
attr_writer :per_page_links_choices
|
131
|
+
|
132
|
+
# The class that the current page link gets.
|
133
|
+
#
|
134
|
+
# * <tt>Default:</tt> "current_page"
|
135
|
+
# * <tt>Accepts:</tt> String, set to nil to disable
|
136
|
+
def page_links_current_page_class_name
|
137
|
+
return @page_links_current_page_class_name if defined?(@page_links_current_page_class_name)
|
138
|
+
@page_links_current_page_class_name = page_links_act_like_will_paginate? ? "current" : "current_page"
|
139
|
+
end
|
140
|
+
attr_writer :page_links_current_page_class_name
|
141
|
+
|
142
|
+
# The class that disabled page links get. Including the current page, prev page, next page, first page, and last page.
|
143
|
+
#
|
144
|
+
# * <tt>Default:</tt> "disabled_page"
|
145
|
+
# * <tt>Accepts:</tt> String, set to nil to disable
|
146
|
+
def page_links_disabled_class_name
|
147
|
+
return @page_links_disabled_class_name if defined?(@page_links_disabled_class_name)
|
148
|
+
@page_links_disabled_class_name = page_links_act_like_will_paginate? ? "disabled" : "disabled_page"
|
149
|
+
end
|
150
|
+
attr_writer :page_links_disabled_class_name
|
151
|
+
|
152
|
+
# Wraps page links in a div
|
153
|
+
#
|
154
|
+
# * <tt>Default:</tt> false
|
155
|
+
# * <tt>Accepts:</tt> Boolean
|
156
|
+
def page_links_div_wrapper
|
157
|
+
return @page_links_div_wrapper if defined?(@page_links_div_wrapper)
|
158
|
+
@page_links_div_wrapper = page_links_act_like_will_paginate?
|
159
|
+
end
|
160
|
+
attr_writer :page_links_div_wrapper
|
161
|
+
|
162
|
+
# If page_links_div_wrapper is true you can specify a class name here.
|
163
|
+
#
|
164
|
+
# * <tt>Default:</tt> "pagination"
|
165
|
+
# * <tt>Accepts:</tt> String, set to nil to disable
|
166
|
+
def page_links_div_wrapper_class_name
|
167
|
+
return @page_links_div_wrapper_class_name if defined?(@page_links_div_wrapper_class_name)
|
168
|
+
@page_links_div_wrapper_class_name = "pagination"
|
169
|
+
end
|
170
|
+
attr_writer :page_links_div_wrapper_class_name
|
171
|
+
|
172
|
+
# The default for the :first option for the page_links helper.
|
173
|
+
#
|
174
|
+
# * <tt>Default:</tt> nil
|
175
|
+
# * <tt>Accepts:</tt> Anything you want, text, html, etc. nil to disable
|
176
|
+
def page_links_first
|
177
|
+
@page_links_first
|
178
|
+
end
|
179
|
+
attr_writer :page_links_first
|
180
|
+
|
181
|
+
# The default for the :inner_spread option for the page_links helper.
|
182
|
+
#
|
183
|
+
# * <tt>Default:</tt> 3
|
184
|
+
# * <tt>Accepts:</tt> Any integer >= 1, set to nil to show all pages
|
185
|
+
def page_links_inner_spread
|
186
|
+
@page_links_inner_spread ||= 3
|
187
|
+
end
|
188
|
+
attr_writer :page_links_inner_spread
|
189
|
+
|
190
|
+
# The class for the first page link
|
191
|
+
#
|
192
|
+
# * <tt>Default:</tt> "first_page"
|
193
|
+
# * <tt>Accepts:</tt> String, set to nil to disable
|
194
|
+
def page_links_first_page_class_name
|
195
|
+
return @page_links_first_page_class_name if defined?(@page_links_first_page_class_name)
|
196
|
+
@page_links_first_page_class_name = "first_page"
|
197
|
+
end
|
198
|
+
attr_writer :page_links_first_page_class_name
|
199
|
+
|
200
|
+
# The default for the :last option for the page_links helper.
|
201
|
+
#
|
202
|
+
# * <tt>Default:</tt> nil
|
203
|
+
# * <tt>Accepts:</tt> Anything you want, text, html, etc. nil to disable
|
204
|
+
def page_links_last
|
205
|
+
@page_links_last
|
206
|
+
end
|
207
|
+
attr_writer :page_links_last
|
208
|
+
|
209
|
+
# The class for the last page link
|
210
|
+
#
|
211
|
+
# * <tt>Default:</tt> "last_page"
|
212
|
+
# * <tt>Accepts:</tt> String, set to nil to disable
|
213
|
+
def page_links_last_page_class_name
|
214
|
+
return @page_links_last_page_class_name if defined?(@page_links_last_page_class_name)
|
215
|
+
@page_links_last_page_class_name = "last_page"
|
216
|
+
end
|
217
|
+
attr_writer :page_links_last_page_class_name
|
218
|
+
|
219
|
+
# The default for the :next option for the page_links helper.
|
220
|
+
#
|
221
|
+
# * <tt>Default:</tt> "Next >"
|
222
|
+
# * <tt>Accepts:</tt> Anything you want, text, html, etc. nil to disable
|
223
|
+
def page_links_next
|
224
|
+
@page_links_next ||= "Next >"
|
225
|
+
end
|
226
|
+
attr_writer :page_links_next
|
227
|
+
|
228
|
+
# The class for the next page link
|
229
|
+
#
|
230
|
+
# * <tt>Default:</tt> "next_page"
|
231
|
+
# * <tt>Accepts:</tt> String, set to nil to disable
|
232
|
+
def page_links_next_page_class_name
|
233
|
+
return @page_links_next_page_class_name if defined?(@page_links_next_page_class_name)
|
234
|
+
@page_links_next_page_class_name = "next_page"
|
235
|
+
end
|
236
|
+
attr_writer :page_links_next_page_class_name
|
237
|
+
|
238
|
+
# The default for the :outer_spread option for the page_links helper.
|
239
|
+
#
|
240
|
+
# * <tt>Default:</tt> 2
|
241
|
+
# * <tt>Accepts:</tt> Any integer >= 1, set to nil to display, 0 to only show the "..." separator
|
242
|
+
def page_links_outer_spread
|
243
|
+
@page_links_outer_spread ||= 1
|
244
|
+
end
|
245
|
+
attr_writer :page_links_outer_spread
|
246
|
+
|
247
|
+
# The class for the previous page link
|
248
|
+
#
|
249
|
+
# * <tt>Default:</tt> "prev_page"
|
250
|
+
# * <tt>Accepts:</tt> String, set to nil to disable
|
251
|
+
def page_links_prev_page_class_name
|
252
|
+
return @page_links_prev_page_class_name if defined?(@page_links_prev_page_class_name)
|
253
|
+
@page_links_prev_page_class_name = "prev_page"
|
254
|
+
end
|
255
|
+
attr_writer :page_links_prev_page_class_name
|
256
|
+
|
257
|
+
# The default for the :prev option for the page_links helper.
|
258
|
+
#
|
259
|
+
# * <tt>Default:</tt> "< Prev"
|
260
|
+
# * <tt>Accepts:</tt> Anything you want, text, html, etc. nil to disable
|
261
|
+
def page_links_prev
|
262
|
+
@page_links_prev ||= "< Prev"
|
263
|
+
end
|
264
|
+
attr_writer :page_links_prev
|
265
|
+
|
266
|
+
# The class name for used in the page_seect helper
|
267
|
+
#
|
268
|
+
# * <tt>Default:</tt> "page"
|
269
|
+
# * <tt>Accepts:</tt> String, set to nil to disable
|
270
|
+
def page_select_class_name
|
271
|
+
return @page_select_class_name if defined?(@page_select_class_name)
|
272
|
+
@page_select_class_name = "page"
|
273
|
+
end
|
274
|
+
attr_writer :page_select_class_name
|
275
|
+
|
276
|
+
# The class name for used in the per_page_link helper
|
277
|
+
#
|
278
|
+
# * <tt>Default:</tt> "per_page"
|
279
|
+
# * <tt>Accepts:</tt> String, set to nil to disable
|
280
|
+
def per_page_link_class_name
|
281
|
+
return @per_page_link_class_name if defined?(@per_page_link_class_name)
|
282
|
+
@per_page_link_class_name = "per_page"
|
283
|
+
end
|
284
|
+
attr_writer :per_page_link_class_name
|
285
|
+
|
286
|
+
# The choices used in the per_page_select helper
|
287
|
+
#
|
288
|
+
# * <tt>Default:</tt> [["10 per page", 10], ["25 per page", 25], ["50 per page", 50], ["100 per page", 100], ["150 per page", 150], ["200 per page", 200], ["Show all", nil]]
|
289
|
+
# * <tt>Accepts:</tt> Array
|
290
|
+
def per_page_select_choices
|
291
|
+
return @per_page_select_choices if @per_page_select_choices
|
292
|
+
@per_page_select_choices = []
|
293
|
+
[10, 25, 50, 100, 150, 200].each { |choice| @per_page_select_choices << ["#{choice} per page", choice] }
|
294
|
+
@per_page_select_choices << ["Show all", nil]
|
295
|
+
end
|
296
|
+
attr_writer :per_page_select_choices
|
297
|
+
|
298
|
+
# The class name for used in the per_page_select helper
|
299
|
+
#
|
300
|
+
# * <tt>Default:</tt> "per_page"
|
301
|
+
# * <tt>Accepts:</tt> String, set to nil to disable
|
302
|
+
def per_page_select_class_name
|
303
|
+
return @per_page_select_class_name if defined?(@per_page_select_class_name)
|
304
|
+
@per_page_select_class_name = "per_page"
|
305
|
+
end
|
306
|
+
attr_writer :per_page_select_class_name
|
307
|
+
|
308
|
+
# The default value for the :activate_text option for priority_order_by_link
|
309
|
+
#
|
310
|
+
# * <tt>Default:</tt> "Show %s first"
|
311
|
+
# * <tt>Accepts:</tt> String with substitutions, using rubys % method for strings
|
312
|
+
def priority_order_by_link_activate_text
|
313
|
+
@priority_order_by_link_activate_text ||= "Show %s first"
|
314
|
+
end
|
315
|
+
attr_writer :priority_order_by_link_activate_text
|
316
|
+
|
317
|
+
# The class name for used in the priority_order_by_link helper
|
318
|
+
#
|
319
|
+
# * <tt>Default:</tt> "priority_order_by"
|
320
|
+
# * <tt>Accepts:</tt> String, set to nil to disable
|
321
|
+
def priority_order_by_link_class_name
|
322
|
+
return @priority_order_by_link_class_name if defined?(@priority_order_by_link_class_name)
|
323
|
+
@priority_order_by_link_class_name = "priority_order_by"
|
324
|
+
end
|
325
|
+
attr_writer :priority_order_by_link_class_name
|
326
|
+
|
327
|
+
# The default value for the :deactivate_text option for priority_order_by_link
|
328
|
+
#
|
329
|
+
# * <tt>Default:</tt> "Dont' show %s first"
|
330
|
+
# * <tt>Accepts:</tt> String with substitutions, using rubys % method for strings
|
331
|
+
def priority_order_by_link_deactivate_text
|
332
|
+
@priority_order_by_link_deactivate_text ||= "Don't show %s first"
|
333
|
+
end
|
334
|
+
attr_writer :priority_order_by_link_deactivate_text
|
335
|
+
end
|
336
|
+
end
|
337
|
+
end
|
338
|
+
end
|