object-in-enumerable 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README ADDED
@@ -0,0 +1,24 @@
1
+ Gives the more-readable `foo.in?(some_list)` and `foo.not_in?(some_list)` rather than having to revert to the more backward `some_list.include?(foo)` and `!some_list.include?(foo)`. This leads to more-readable conditions, like: `if foo.is_awesome? and foo.in?(allowed_values)`.
2
+
3
+ Examples:
4
+
5
+ "abc".in?("abcdef") # true
6
+ "abc".not_in?("abcdef") # false
7
+ "ABC".in?("abcdef") # false
8
+ "ABC".not_in?("abcdef") # true
9
+ "a".in(%w(a b c d e)) # true
10
+ "a".not_in(%w(a b c d e)) # false
11
+ 1.in?(0..10) # true
12
+ 1.not_in?(0..10) # false
13
+ 1.in?(10..20) # false
14
+ 1.not_in?(10..20) # true
15
+ 1.in?(10) # nil, as 10 doesn't respond to :include?
16
+ 1.not_in?(10) # nil, as 10 doesn't respond to :include?
17
+
18
+ Install:
19
+
20
+ # From the command line
21
+ gem install pbyrne-object-in-enumerable --source=http://gems.github.com
22
+
23
+ # In your Rails project's environment.rb
24
+ config.gem "pbyrne-object-in-enumerable", :source => "http://gems.github.com", :lib => "object-in-enumerable"
@@ -0,0 +1,10 @@
1
+ class Object
2
+ # Uses the given enum's include? method to determine whether the object is included in it. If the given method doesn't respond to include?, returns nil.
3
+ def in?(enum)
4
+ enum.respond_to?(:include?) ? enum.include?(self) : nil
5
+ end
6
+
7
+ def not_in?(enum)
8
+ enum.respond_to?(:include?) ? !enum.include?(self) : nil
9
+ end
10
+ end
@@ -0,0 +1,64 @@
1
+ require File.join(File.dirname(__FILE__), "/spec_helper")
2
+
3
+ describe Object do
4
+ context "knowing whether it is in the given object" do
5
+ before(:each) do
6
+ @enum = [1, "B", Date.today, {:foo => "bar"}, nil]
7
+ @string = "abcdefg"
8
+ end
9
+
10
+ it "should know when it is in the given array" do
11
+ 1.in?(@enum).should be_true
12
+ "B".in?(@enum).should be_true
13
+ Date.today.in?(@enum).should be_true
14
+ {:foo => "bar"}.in?(@enum).should be_true
15
+ nil.in?(@enum).should be_true
16
+
17
+ 1.not_in?(@enum).should be_false
18
+ "B".not_in?(@enum).should be_false
19
+ Date.today.not_in?(@enum).should be_false
20
+ {:foo => "bar"}.not_in?(@enum).should be_false
21
+ nil.not_in?(@enum).should be_false
22
+ end
23
+
24
+ it "should know when it is not in the given array" do
25
+ 2.in?(@enum).should be_false
26
+ "C".in?(@enum).should be_false
27
+ Date.new(2000, 01, 01).in?(@enum).should be_false
28
+ {:bing => "bang"}.in?(@enum).should be_false
29
+
30
+ 2.not_in?(@enum).should be_true
31
+ "C".not_in?(@enum).should be_true
32
+ Date.new(2000, 01, 01).not_in?(@enum).should be_true
33
+ {:bing => "bang"}.not_in?(@enum).should be_true
34
+ end
35
+
36
+ it "should know when it is in a non-enumerable object" do
37
+ "a".in?("abc").should be_true
38
+ "ABC".in?("ABCDEFG").should be_true
39
+ 1.in?(1..5).should be_true
40
+
41
+ "a".not_in?("abc").should be_false
42
+ "ABC".not_in?("ABCDEFG").should be_false
43
+ 1.not_in?(1..5).should be_false
44
+ end
45
+
46
+ it "should know when it is not in a non-enumerable object" do
47
+ "d".in?("abc").should be_false
48
+ "Z".in?("xyz").should be_false
49
+ 1.in?(5..10).should be_false
50
+
51
+ "d".not_in?("abc").should be_true
52
+ "Z".not_in?("xyz").should be_true
53
+ 1.not_in?(5..10).should be_true
54
+ end
55
+
56
+ it "should return nil if the given enumerable doesn't respond to include?" do
57
+ 1.in?(1).should be_nil
58
+ "foo".in?(nil).should be_nil
59
+
60
+ 1.not_in?(1).should be_nil
61
+ "foo".not_in?(nil).should be_nil
62
+ end
63
+ end
64
+ end
metadata ADDED
@@ -0,0 +1,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: object-in-enumerable
3
+ version: !ruby/object:Gem::Version
4
+ hash: 19
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 1
9
+ - 0
10
+ version: 1.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Patrick Byrne
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-10-21 00:00:00 -05:00
19
+ default_executable:
20
+ dependencies: []
21
+
22
+ description:
23
+ email: code@patrickbyrne.net
24
+ executables: []
25
+
26
+ extensions: []
27
+
28
+ extra_rdoc_files:
29
+ - README
30
+ files:
31
+ - lib/object-in-enumerable.rb
32
+ - README
33
+ - spec/object-in-enumerable_spec.rb
34
+ has_rdoc: true
35
+ homepage: http://github.com/pbyrne/object-in-enumerable/
36
+ licenses: []
37
+
38
+ post_install_message:
39
+ rdoc_options: []
40
+
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ none: false
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ hash: 3
49
+ segments:
50
+ - 0
51
+ version: "0"
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ requirements: []
62
+
63
+ rubyforge_project:
64
+ rubygems_version: 1.3.7
65
+ signing_key:
66
+ specification_version: 3
67
+ summary: Gives the more-readable `foo.in?(some_list)` rather than having to revert to the more backward `some_list.include?(foo)`.
68
+ test_files:
69
+ - spec/object-in-enumerable_spec.rb