From f451f0e5cfa358e88ac9d03d813a9c84facd6648 Mon Sep 17 00:00:00 2001 From: Damian Janowski Date: Tue, 18 Nov 2008 18:53:06 -0200 Subject: Added Enumerable#none? to check that none of the elements match the block [#1408 state:committed] Signed-off-by: David Heinemeier Hansson --- activesupport/CHANGELOG | 2 ++ activesupport/lib/active_support/core_ext/enumerable.rb | 9 +++++++++ activesupport/test/core_ext/enumerable_test.rb | 10 ++++++++++ 3 files changed, 21 insertions(+) (limited to 'activesupport') diff --git a/activesupport/CHANGELOG b/activesupport/CHANGELOG index 16d78e0201..0a4f295568 100644 --- a/activesupport/CHANGELOG +++ b/activesupport/CHANGELOG @@ -1,5 +1,7 @@ *2.3.0/3.0* +* Added Enumerable#none? to check that none of the elements match the block #1408 [Damian Janowski] + * TimeZone offset tests: use current_period, to ensure TimeZone#utc_offset is up-to-date [Geoff Buesing] * Update bundled TZInfo to 0.3.12 [Geoff Buesing] diff --git a/activesupport/lib/active_support/core_ext/enumerable.rb b/activesupport/lib/active_support/core_ext/enumerable.rb index 788f3a7e9e..12659d7008 100644 --- a/activesupport/lib/active_support/core_ext/enumerable.rb +++ b/activesupport/lib/active_support/core_ext/enumerable.rb @@ -104,4 +104,13 @@ module Enumerable size = block_given? ? select(&block).size : self.size size > 1 end + + # Returns true if none of the elements match the given block. + # + # success = responses.none? {|r| r.status / 100 == 3 } + # + def none?(&block) + return true if !block_given? || blank? + !any?(&block) + end end diff --git a/activesupport/test/core_ext/enumerable_test.rb b/activesupport/test/core_ext/enumerable_test.rb index deb9b7544d..288ce14b2c 100644 --- a/activesupport/test/core_ext/enumerable_test.rb +++ b/activesupport/test/core_ext/enumerable_test.rb @@ -79,4 +79,14 @@ class EnumerableTests < Test::Unit::TestCase assert ![ 1, 2 ].many? {|x| x > 1 } assert [ 1, 2, 2 ].many? {|x| x > 1 } end + + def test_none + assert [].none? + assert [ 1 ].none? + + assert [].none? {|x| x > 1 } + assert ![ 2 ].none? {|x| x > 1 } + assert ![ 1, 2 ].none? {|x| x > 1 } + assert [ 1, 1 ].none? {|x| x > 1 } + end end -- cgit v1.2.3