aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2007-11-14 10:02:26 +0000
committerJeremy Kemper <jeremy@bitsweat.net>2007-11-14 10:02:26 +0000
commita75cafbda23e6381420d940058eddb1a8de54b5a (patch)
treef37f9a779a87ad0ffe64c8090a9983199b5f6c7c
parent696d140b6ce291262861ce7fc146de79461a8ecc (diff)
downloadrails-a75cafbda23e6381420d940058eddb1a8de54b5a.tar.gz
rails-a75cafbda23e6381420d940058eddb1a8de54b5a.tar.bz2
rails-a75cafbda23e6381420d940058eddb1a8de54b5a.zip
Speedup String#blank? and remove some overspecified tests.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8137 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
-rw-r--r--activesupport/CHANGELOG2
-rw-r--r--activesupport/lib/active_support/core_ext/blank.rb10
-rw-r--r--activesupport/test/core_ext/blank_test.rb43
3 files changed, 8 insertions, 47 deletions
diff --git a/activesupport/CHANGELOG b/activesupport/CHANGELOG
index e63915a754..a46c53a4f1 100644
--- a/activesupport/CHANGELOG
+++ b/activesupport/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Speedup String#blank? [Jeremy Kemper, Koz]
+
* Add documentation for Hash#diff. Closes #9306 [tarmo]
* Add new superclass_delegating_accessors. Similar to class inheritable attributes but with subtly different semantics. [Koz, tarmo]
diff --git a/activesupport/lib/active_support/core_ext/blank.rb b/activesupport/lib/active_support/core_ext/blank.rb
index d2a940f5b9..c4695816e2 100644
--- a/activesupport/lib/active_support/core_ext/blank.rb
+++ b/activesupport/lib/active_support/core_ext/blank.rb
@@ -7,13 +7,7 @@ class Object
# to
# if !address.blank?
def blank?
- if respond_to?(:empty?) && respond_to?(:strip)
- empty? or strip.empty?
- elsif respond_to?(:empty?)
- empty?
- else
- !self
- end
+ respond_to?(:empty?) ? empty? : !self
end
end
@@ -45,7 +39,7 @@ end
class String #:nodoc:
def blank?
- empty? || strip.empty?
+ self !~ /\S/
end
end
diff --git a/activesupport/test/core_ext/blank_test.rb b/activesupport/test/core_ext/blank_test.rb
index a14edf440b..27b9813ac4 100644
--- a/activesupport/test/core_ext/blank_test.rb
+++ b/activesupport/test/core_ext/blank_test.rb
@@ -8,47 +8,12 @@ class EmptyFalse
def empty?() false; end
end
-class EmptyStripNotEmpty
- def empty?() true; end
- def strip() 'foo'; end
-end
-
-class EmptyStripEmpty
- def empty?() true; end
- def strip() ''; end
-end
-
-class NotEmptyStripNotEmpty
- def empty?() false; end
- def strip() 'foo'; end
-end
-
-class NotEmptyStripEmpty
- def empty?() false; end
- def strip() ''; end
-end
-
class BlankTest < Test::Unit::TestCase
- BLANK = [ EmptyTrue.new, EmptyStripNotEmpty.new, EmptyStripEmpty.new,
- NotEmptyStripEmpty.new, nil, false, '', ' ', " \n\t \r ",
- [], {} ]
- NOT = [ EmptyFalse.new, NotEmptyStripNotEmpty.new, Object.new, true,
- 0, 1, 'a', [nil], { nil => 0 } ]
-
- class EmptyObject
- def empty?
- true
- end
- alias :strip :empty?
- end
- class NoStripObject < EmptyObject; undef :strip; end
- class NoEmptyStripObject < NoStripObject; undef :empty?; end
+ BLANK = [ EmptyTrue.new, nil, false, '', ' ', " \n\t \r ", [], {} ]
+ NOT = [ EmptyFalse.new, Object.new, true, 0, 1, 'a', [nil], { nil => 0 } ]
def test_blank
- BLANK.each { |v| assert v.blank? }
- NOT.each { |v| assert !v.blank? }
- assert EmptyObject.new.blank?
- assert NoStripObject.new.blank?
- assert !NoEmptyStripObject.new.blank?
+ BLANK.each { |v| assert v.blank?, "#{v.inspect} should be blank" }
+ NOT.each { |v| assert !v.blank?, "#{v.inspect} should not be blank" }
end
end