meta_search 1.1.0.pre → 1.1.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
@@ -322,6 +322,10 @@ your controller. The other required parameter is the attribute name itself. Opti
322
322
  you can provide a string as a 3rd parameter to override the default link name, and then
323
323
  additional hashed for the +options+ and +html_options+ hashes for link_to.
324
324
 
325
+ By default, the link that is created will sort by the given column in ascending order when first clicked. If you'd like to reverse this (so the first click sorts the results in descending order), you can pass +:default_order => :desc+ in the options hash, like so:
326
+
327
+ <%= sort_link @search, :ratings, "Highest Rated", :default_order => :desc %>
328
+
325
329
  You can sort by more than one column as well, by creating a link like:
326
330
 
327
331
  <%= sort_link :name_and_salary %>
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.0.pre
1
+ 1.1.0.pre2
@@ -15,7 +15,7 @@ module MetaSearch
15
15
  ['contains', 'like', 'matches', {:types => STRINGS, :predicate => :matches, :formatter => '"%#{param}%"'}],
16
16
  ['does_not_contain', 'nlike', 'not_matches', {:types => STRINGS, :predicate => :does_not_match, :formatter => '"%#{param}%"'}],
17
17
  ['starts_with', 'sw', {:types => STRINGS, :predicate => :matches, :formatter => '"#{param}%"'}],
18
- ['does_not_start_with', 'dnsw', {:types => STRINGS, :predicate => :does_not_match, :formatter => '"%#{param}%"'}],
18
+ ['does_not_start_with', 'dnsw', {:types => STRINGS, :predicate => :does_not_match, :formatter => '"#{param}%"'}],
19
19
  ['ends_with', 'ew', {:types => STRINGS, :predicate => :matches, :formatter => '"%#{param}"'}],
20
20
  ['does_not_end_with', 'dnew', {:types => STRINGS, :predicate => :does_not_match, :formatter => '"%#{param}"'}],
21
21
  ['greater_than', 'gt', {:types => (NUMBERS + DATES + TIMES), :predicate => :gt}],
@@ -16,14 +16,27 @@ module MetaSearch
16
16
  # <%= sort_link @search, :name, 'Company Name' %>
17
17
  # <%= sort_link @search, :name, :class => 'name_sort' %>
18
18
  # <%= sort_link @search, :name, 'Company Name', :class => 'company_name_sort' %>
19
+ # <%= sort_link @search, :name, :default_order => :desc %>
20
+ # <%= sort_link @search, :name, 'Company Name', :default_order => :desc %>
21
+ # <%= sort_link @search, :name, :class => 'name_sort', :default_order => :desc %>
22
+ # <%= sort_link @search, :name, 'Company Name', :class => 'company_name_sort', :default_order => :desc %>
23
+
19
24
  def sort_link(builder, attribute, *args)
20
25
  raise ArgumentError, "Need a MetaSearch::Builder search object as first param!" unless builder.is_a?(MetaSearch::Builder)
21
26
  attr_name = attribute.to_s
22
27
  name = (args.size > 0 && !args.first.is_a?(Hash)) ? args.shift.to_s : builder.base.human_attribute_name(attr_name)
23
28
  prev_attr, prev_order = builder.search_attributes['meta_sort'].to_s.split('.')
24
- current_order = prev_attr == attr_name ? prev_order : nil
25
- new_order = current_order == 'asc' ? 'desc' : 'asc'
29
+
26
30
  options = args.first.is_a?(Hash) ? args.shift : {}
31
+ current_order = prev_attr == attr_name ? prev_order : nil
32
+
33
+ if options[:default_order] == :desc
34
+ new_order = current_order == 'desc' ? 'asc' : 'desc'
35
+ else
36
+ new_order = current_order == 'asc' ? 'desc' : 'asc'
37
+ end
38
+ options.delete(:default_order)
39
+
27
40
  html_options = args.first.is_a?(Hash) ? args.shift : {}
28
41
  css = ['sort_link', current_order].compact.join(' ')
29
42
  html_options[:class] = [css, html_options[:class]].compact.join(' ')
@@ -50,4 +63,4 @@ module MetaSearch
50
63
  end
51
64
  end
52
65
  end
53
- end
66
+ end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{meta_search}
8
- s.version = "1.1.0.pre"
8
+ s.version = "1.1.0.pre2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Ernie Miller"]
12
- s.date = %q{2011-05-26}
11
+ s.authors = [%q{Ernie Miller}]
12
+ s.date = %q{2011-07-07}
13
13
  s.description = %q{
14
14
  Allows simple search forms to be created against an AR3 model
15
15
  and its associations, has useful view helpers for sort links
@@ -70,8 +70,8 @@ you're feeling especially appreciative. It'd help me justify this
70
70
  "open source" stuff to my lovely wife. :)
71
71
 
72
72
  }
73
- s.require_paths = ["lib"]
74
- s.rubygems_version = %q{1.7.2}
73
+ s.require_paths = [%q{lib}]
74
+ s.rubygems_version = %q{1.8.5}
75
75
  s.summary = %q{Object-based searching (and more) for simply creating search forms.}
76
76
 
77
77
  if s.respond_to? :specification_version then
@@ -6,9 +6,9 @@ dt_<%= n %>:
6
6
  int : <%= n ** 3 %>
7
7
  flt : <%= n.to_f / 2.0 %>
8
8
  dec : <%= n.to_f ** (n + 0.1) %>
9
- dtm : <%= (Time.utc(2009, 12, 24) + 86400 * n).to_s(:db) %>
10
- tms : <%= (Time.utc(2009, 12, 24) + 86400 * n).to_s(:db) %>
11
- tim : <%= Time.utc(2000, 01, 01, n+8, n).to_s(:db) %>
9
+ dtm : <%= (Time.local(2009, 12, 24) + 86400 * n).in_time_zone.to_s(:db) %>
10
+ tms : <%= (Time.local(2009, 12, 24) + 86400 * n).in_time_zone.to_s(:db) %>
11
+ tim : <%= Time.local(2000, 01, 01, n+8, n).in_time_zone.to_s(:db) %>
12
12
  dat : <%= (Date.new(2009, 12, 24) + n).strftime("%Y-%m-%d") %>
13
13
  bin : <%= "BLOB#{n}" * n %>
14
14
  bln : <%= n % 2 > 0 ? true : false %>
@@ -1,6 +1,7 @@
1
1
  require 'rubygems'
2
2
  require 'test/unit'
3
3
  require 'shoulda'
4
+ require 'active_support/time'
4
5
  require 'active_record'
5
6
  require 'active_record/fixtures'
6
7
  require 'action_view'
@@ -321,6 +321,21 @@ class TestViewHelpers < ActionView::TestCase
321
321
  @s = Company.search
322
322
  end
323
323
 
324
+ should "generate a sort link for descending order if set as the default order" do
325
+ assert_match /name.desc/,
326
+ sort_link(@s, :name, :controller => 'companies', :default_order => :desc)
327
+ end
328
+
329
+ should "generate a sort link for ascending order if set as the default order" do
330
+ assert_match /name.asc/,
331
+ sort_link(@s, :name, :controller => 'companies', :default_order => :asc)
332
+ end
333
+
334
+ should "generate a sort link for ascending order if default is specified incorectly" do
335
+ assert_match /name.asc/,
336
+ sort_link(@s, :name, :controller => 'companies', :default_order => :something_else)
337
+ end
338
+
324
339
  context "sorted by name ascending" do
325
340
  setup do
326
341
  @s.meta_sort = 'name.asc'
@@ -336,6 +351,21 @@ class TestViewHelpers < ActionView::TestCase
336
351
  sort_link(@s, :created_at, :controller => 'companies')
337
352
  end
338
353
 
354
+ should "generate a sort link for descending order if ascending order is the default" do
355
+ assert_match /name.desc/,
356
+ sort_link(@s, :name, :controller => 'companies', :default_order => :asc)
357
+ end
358
+
359
+ should "generate a sort link for descending order if descending order is the default" do
360
+ assert_match /name.desc/,
361
+ sort_link(@s, :name, :controller => 'companies', :default_order => :desc)
362
+ end
363
+
364
+ should "generate a sort link for descending order if default is specified incorrectly" do
365
+ assert_match /name.desc/,
366
+ sort_link(@s, :name, :controller => 'companies', :default_order => :something_else)
367
+ end
368
+
339
369
  context "with existing search options" do
340
370
  setup do
341
371
  @s.name_contains = 'a'
@@ -347,6 +377,27 @@ class TestViewHelpers < ActionView::TestCase
347
377
  end
348
378
  end
349
379
  end
380
+
381
+ context "sorted by name descending" do
382
+ setup do
383
+ @s.meta_sort = 'name.desc'
384
+ end
385
+
386
+ should "generate a sort link for ascending order if descending order is the default" do
387
+ assert_match /name.asc/,
388
+ sort_link(@s, :name, :controller => 'companies', :default_order => :desc)
389
+ end
390
+
391
+ should "generate a sort link for ascending order if ascending order is the default" do
392
+ assert_match /name.asc/,
393
+ sort_link(@s, :name, :controller => 'companies', :default_order => :asc)
394
+ end
395
+
396
+ should "generate a sort link for ascending order if default is specified incorrectly" do
397
+ assert_match /name.asc/,
398
+ sort_link(@s, :name, :controller => 'companies', :default_order => :desc)
399
+ end
400
+ end
350
401
  end
351
402
 
352
403
  context "A developer search" do
@@ -381,4 +432,4 @@ class TestViewHelpers < ActionView::TestCase
381
432
  end
382
433
  end
383
434
  end
384
- end
435
+ end
metadata CHANGED
@@ -1,71 +1,70 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: meta_search
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.0.pre2
4
5
  prerelease: 6
5
- version: 1.1.0.pre
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Ernie Miller
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-05-26 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
12
+ date: 2011-07-07 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
16
15
  name: shoulda
17
- prerelease: false
18
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &2162080940 !ruby/object:Gem::Requirement
19
17
  none: false
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
23
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
24
22
  type: :development
25
- version_requirements: *id001
26
- - !ruby/object:Gem::Dependency
27
- name: activerecord
28
23
  prerelease: false
29
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *2162080940
25
+ - !ruby/object:Gem::Dependency
26
+ name: activerecord
27
+ requirement: &2162080440 !ruby/object:Gem::Requirement
30
28
  none: false
31
- requirements:
29
+ requirements:
32
30
  - - ~>
33
- - !ruby/object:Gem::Version
31
+ - !ruby/object:Gem::Version
34
32
  version: 3.1.0.alpha
35
33
  type: :runtime
36
- version_requirements: *id002
37
- - !ruby/object:Gem::Dependency
38
- name: activesupport
39
34
  prerelease: false
40
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *2162080440
36
+ - !ruby/object:Gem::Dependency
37
+ name: activesupport
38
+ requirement: &2162079960 !ruby/object:Gem::Requirement
41
39
  none: false
42
- requirements:
40
+ requirements:
43
41
  - - ~>
44
- - !ruby/object:Gem::Version
42
+ - !ruby/object:Gem::Version
45
43
  version: 3.1.0.alpha
46
44
  type: :runtime
47
- version_requirements: *id003
48
- - !ruby/object:Gem::Dependency
49
- name: actionpack
50
45
  prerelease: false
51
- requirement: &id004 !ruby/object:Gem::Requirement
46
+ version_requirements: *2162079960
47
+ - !ruby/object:Gem::Dependency
48
+ name: actionpack
49
+ requirement: &2162079460 !ruby/object:Gem::Requirement
52
50
  none: false
53
- requirements:
51
+ requirements:
54
52
  - - ~>
55
- - !ruby/object:Gem::Version
53
+ - !ruby/object:Gem::Version
56
54
  version: 3.1.0.alpha
57
55
  type: :runtime
58
- version_requirements: *id004
59
- description: "\n Allows simple search forms to be created against an AR3 model\n and its associations, has useful view helpers for sort links\n and multiparameter fields as well.\n "
56
+ prerelease: false
57
+ version_requirements: *2162079460
58
+ description: ! "\n Allows simple search forms to be created against an AR3 model\n
59
+ \ and its associations, has useful view helpers for sort links\n and multiparameter
60
+ fields as well.\n "
60
61
  email: ernie@metautonomo.us
61
62
  executables: []
62
-
63
63
  extensions: []
64
-
65
- extra_rdoc_files:
64
+ extra_rdoc_files:
66
65
  - LICENSE
67
66
  - README.rdoc
68
- files:
67
+ files:
69
68
  - .document
70
69
  - .gitmodules
71
70
  - CHANGELOG
@@ -107,35 +106,39 @@ files:
107
106
  - test/test_view_helpers.rb
108
107
  homepage: http://metautonomo.us/projects/metasearch/
109
108
  licenses: []
109
+ post_install_message: ! '
110
110
 
111
- post_install_message: "\n\
112
- *** Thanks for installing MetaSearch! ***\n\
113
- Be sure to check out http://metautonomo.us/projects/metasearch/ for a\n\
114
- walkthrough of MetaSearch's features, and click the donate button if\n\
115
- you're feeling especially appreciative. It'd help me justify this\n\
116
- \"open source\" stuff to my lovely wife. :)\n\n"
117
- rdoc_options: []
111
+ *** Thanks for installing MetaSearch! ***
112
+
113
+ Be sure to check out http://metautonomo.us/projects/metasearch/ for a
114
+
115
+ walkthrough of MetaSearch''s features, and click the donate button if
116
+
117
+ you''re feeling especially appreciative. It''d help me justify this
118
118
 
119
- require_paths:
119
+ "open source" stuff to my lovely wife. :)
120
+
121
+
122
+ '
123
+ rdoc_options: []
124
+ require_paths:
120
125
  - lib
121
- required_ruby_version: !ruby/object:Gem::Requirement
126
+ required_ruby_version: !ruby/object:Gem::Requirement
122
127
  none: false
123
- requirements:
124
- - - ">="
125
- - !ruby/object:Gem::Version
126
- version: "0"
127
- required_rubygems_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ required_rubygems_version: !ruby/object:Gem::Requirement
128
133
  none: false
129
- requirements:
130
- - - ">"
131
- - !ruby/object:Gem::Version
134
+ requirements:
135
+ - - ! '>'
136
+ - !ruby/object:Gem::Version
132
137
  version: 1.3.1
133
138
  requirements: []
134
-
135
139
  rubyforge_project:
136
- rubygems_version: 1.7.2
140
+ rubygems_version: 1.8.5
137
141
  signing_key:
138
142
  specification_version: 3
139
143
  summary: Object-based searching (and more) for simply creating search forms.
140
144
  test_files: []
141
-