From 54bc64ec00a402cb330f35df8e346d9448d4e2ca Mon Sep 17 00:00:00 2001 From: Joenio Costa Date: Tue, 22 Feb 2011 15:05:35 -0300 Subject: [PATCH] Sorting qualifiers and certifiers by name --- app/helpers/manage_products_helper.rb | 4 ++-- app/models/certifier.rb | 5 +++++ app/models/qualifier.rb | 4 ++++ test/unit/certifier_test.rb | 19 +++++++++++++++++++ test/unit/manage_products_helper_test.rb | 18 ++++++++++++++++++ test/unit/qualifier_test.rb | 19 +++++++++++++++++++ 6 files changed, 67 insertions(+), 2 deletions(-) diff --git a/app/helpers/manage_products_helper.rb b/app/helpers/manage_products_helper.rb index 5425bc6..f9dce9d 100644 --- a/app/helpers/manage_products_helper.rb +++ b/app/helpers/manage_products_helper.rb @@ -217,10 +217,10 @@ module ManageProductsHelper end def qualifiers_for_select - [[_('Select...'), nil]] + environment.qualifiers.map{ |c| [c.name, c.id] } + [[_('Select...'), nil]] + environment.qualifiers.sort.map{ |c| [c.name, c.id] } end def certifiers_for_select(qualifier) - [[_('Self declared'), nil]] + qualifier.certifiers.map{ |c| [c.name, c.id] } + [[_('Self declared'), nil]] + qualifier.certifiers.sort.map{ |c| [c.name, c.id] } end def select_qualifiers(product, selected = nil) select_tag('selected_qualifier', options_for_select(qualifiers_for_select, selected), diff --git a/app/models/certifier.rb b/app/models/certifier.rb index e198021..09b6f3c 100644 --- a/app/models/certifier.rb +++ b/app/models/certifier.rb @@ -11,4 +11,9 @@ class Certifier < ActiveRecord::Base def link self[:link] || '' end + + def <=>(b) + self.name.downcase.transliterate <=> b.name.downcase.transliterate + end + end diff --git a/app/models/qualifier.rb b/app/models/qualifier.rb index 014a8a8..5fdf07f 100644 --- a/app/models/qualifier.rb +++ b/app/models/qualifier.rb @@ -8,4 +8,8 @@ class Qualifier < ActiveRecord::Base validates_presence_of :environment_id validates_presence_of :name + def <=>(b) + self.name.downcase.transliterate <=> b.name.downcase.transliterate + end + end diff --git a/test/unit/certifier_test.rb b/test/unit/certifier_test.rb index 91a4f93..d31b264 100644 --- a/test/unit/certifier_test.rb +++ b/test/unit/certifier_test.rb @@ -39,4 +39,23 @@ class CertifierTest < Test::Unit::TestCase assert certifier.valid? end + should 'sort by name' do + last = fast_create(Certifier, :name => "Zumm") + first = fast_create(Certifier, :name => "Atum") + assert_equal [first, last], Certifier.all.sort + end + + should 'sorting is not case sensitive' do + first = fast_create(Certifier, :name => "Aaaa") + second = fast_create(Certifier, :name => "abbb") + last = fast_create(Certifier, :name => "Accc") + assert_equal [first, second, last], Certifier.all.sort + end + + should 'discard non-ascii char when sorting' do + first = fast_create(Certifier, :name => "Áaaa") + last = fast_create(Certifier, :name => "Aáab") + assert_equal [first, last], Certifier.all.sort + end + end diff --git a/test/unit/manage_products_helper_test.rb b/test/unit/manage_products_helper_test.rb index 24c7a62..97a5d34 100644 --- a/test/unit/manage_products_helper_test.rb +++ b/test/unit/manage_products_helper_test.rb @@ -149,6 +149,24 @@ class ManageProductsHelperTest < Test::Unit::TestCase assert_equal 'Amount used in this product or service', label_amount_used(input) end + should 'sort qualifiers by name' do + fast_create(Qualifier, :name => 'Organic') + fast_create(Qualifier, :name => 'Non Organic') + result = qualifiers_for_select + assert_equal ["Select...", "Non Organic", "Organic"], result.map{|i| i[0]} + end + + should 'sort certifiers by name' do + qualifier = fast_create(Qualifier, :name => 'Organic') + fbes = fast_create(Certifier, :name => 'FBES') + colivre = fast_create(Certifier, :name => 'Colivre') + QualifierCertifier.create!(:qualifier => qualifier, :certifier => colivre) + QualifierCertifier.create!(:qualifier => qualifier, :certifier => fbes) + + result = certifiers_for_select(qualifier) + assert_equal ["Self declared", "Colivre", "FBES"], result.map{|i| i[0]} + end + protected include NoosferoTestHelper include ActionView::Helpers::TextHelper diff --git a/test/unit/qualifier_test.rb b/test/unit/qualifier_test.rb index 22b06dd..35226f6 100644 --- a/test/unit/qualifier_test.rb +++ b/test/unit/qualifier_test.rb @@ -30,4 +30,23 @@ class QualifierTest < Test::Unit::TestCase assert qualifier.valid? end + should 'sort by name' do + last = fast_create(Qualifier, :name => "Zumm") + first = fast_create(Qualifier, :name => "Atum") + assert_equal [first, last], Qualifier.all.sort + end + + should 'sorting is not case sensitive' do + first = fast_create(Qualifier, :name => "Aaaa") + second = fast_create(Qualifier, :name => "abbb") + last = fast_create(Qualifier, :name => "Accc") + assert_equal [first, second, last], Qualifier.all.sort + end + + should 'discard non-ascii char when sorting' do + first = fast_create(Qualifier, :name => "Áaaa") + last = fast_create(Qualifier, :name => "Aáab") + assert_equal [first, last], Qualifier.all.sort + end + end -- libgit2 0.21.2