izzy 3.0.0 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 92ef9a7d5d309a6a3396ee667f2a70a0147d8fb0
4
- data.tar.gz: b9740f151081e14ccd682eaf61ad33303839ca83
3
+ metadata.gz: 3b1d3b907301db63a45af7c7a18a9aebd0158c12
4
+ data.tar.gz: ceff0672f2abc1784bd6516e274bec640ebf6748
5
5
  SHA512:
6
- metadata.gz: 19aff29b471f8068fefd895621e3e09e62eba0d3fc8847b633fc4ecccf848452871fc9d549f3ffe142c17893b4461141e317b9ef5faa08b8d99bda36596f5441
7
- data.tar.gz: 33d1da6842d487a97e485a05cbe39a1a4772425cf7e4fc92748cbbb3974c9ed4e7d82d061034723b4298f76c07e8a9221e2b12297a2ed9f4fc20725ca725bd6b
6
+ metadata.gz: 586b68549ebc90aeee1448e544e35825130c01320361612361abb925e41d434a75bed7d31173b2b7bd14d910c9ca5d54e83448c52be13581b7433860a7e46fd9
7
+ data.tar.gz: 216cfa83cfce99dbf5c41d032ce90c2e10b8b39159e6b9a2946a9edf2a3c58422fabb3ab64a564b133db80515562090fc8e3b41bfdd258444d02d60e4c9409c2
data/CHANGELOG.md CHANGED
@@ -35,4 +35,13 @@ Methods changed:
35
35
  * matches_all?
36
36
  * matches_any?
37
37
  * matches_none?
38
- * [private] matcher_check
38
+ * [private] matcher_check
39
+
40
+ ## v 3.1.0 - Multi Object Matchers via Array
41
+
42
+ Added a module to be mixed into Array, allowing for encapsulation of function evaluation on all objects in an Array.
43
+
44
+ Methods added:
45
+ * all_are
46
+ * any_are
47
+ * none_are
data/README.md CHANGED
@@ -4,10 +4,9 @@
4
4
  [![Code Climate](https://codeclimate.com/github/baweaver/izzy.png)](https://codeclimate.com/github/baweaver/izzy)
5
5
  [![Coverage Status](https://coveralls.io/repos/baweaver/izzy/badge.png?branch=master)](https://coveralls.io/r/baweaver/izzy?branch=master)
6
6
 
7
- Monkey patch to object to make for a nicer time of conditionals! Just install the gem and you're ready to go!
7
+ ## Izzy Module
8
8
 
9
-
10
- Let's take our class, Person:
9
+ To demo Izzy, let's take our class, Person:
11
10
 
12
11
  ```ruby
13
12
  class Person
@@ -20,29 +19,17 @@ class Person
20
19
  @sex = sex
21
20
  end
22
21
 
23
- def older_than_18?
24
- @age > 18
25
- end
22
+ def older_than_18?; @age > 18 end
26
23
 
27
- def younger_than_18?
28
- @age < 18
29
- end
24
+ def younger_than_18?; @age < 18 end
30
25
 
31
- def male?
32
- @sex == 'm'
33
- end
26
+ def male?; @sex == 'm'; end
34
27
 
35
- def female?
36
- @sex == 'f'
37
- end
28
+ def female?; @sex == 'f' end
38
29
 
39
- def me?
40
- @name == 'brandon' && @sex == 'm'
41
- end
30
+ def me?; @name == 'brandon' && @sex == 'm' end
42
31
 
43
- def geek?
44
- @name == 'brandon'
45
- end
32
+ def geek?; @name == 'brandon' end
46
33
  end
47
34
  ```
48
35
 
@@ -53,9 +40,9 @@ brandon = Person.new('brandon', 23, 'm')
53
40
 
54
41
  ...and do some comparisons!
55
42
  ```ruby
56
- brandon.all_of? :older_than_18, :male, :me, :geek # => true
57
- brandon.none_of? :younger_than_18, :female # => true
58
- brandon.any_of? :male, :female, :geek # => true
43
+ brandon.all_of? :older_than_18?, :male?, :me?, :geek? # => true
44
+ brandon.none_of? :younger_than_18?, :female? # => true
45
+ brandon.any_of? :male?, :female?, :geek? # => true
59
46
  ```
60
47
 
61
48
  Maybe boolean comparisons aren't your cup of tea. Izzy has you covered my friend:
@@ -73,19 +60,21 @@ brandon.matches_all? name: String, age: Integer
73
60
  Why stop there? Need a bit more power? We have Lambdas for that!
74
61
 
75
62
  ```ruby
76
- brandon.matches_all? name: -> n { n.length > 3 }, age: -> a { a.odd? } # => true
63
+ longer_than_3 = -> n { n.length > 3 }
64
+ is_odd = -> a { a.odd? }
65
+
66
+ brandon.matches_all? name: longer_than_3, age: is_odd # => true
77
67
  ```
78
68
 
79
69
  ....or let's push it further for some interesting results:
80
70
 
81
71
  ```ruby
72
+ longer_than_5 = -> n { n.length > 5 }
73
+ greater_than_20 = -> a { a > 20 }
74
+
82
75
  brandon.matches_all?(
83
- name: [
84
- /br/, /an/, -> n { n.length > 5 }
85
- ],
86
- age: [
87
- (20..30), -> a { a > 20 }
88
- ]
76
+ name: [/br/, /an/, longer_than_5],
77
+ age: [(20..30), greater_than_20]
89
78
  )
90
79
 
91
80
  # => true
@@ -94,6 +83,19 @@ brandon.matches_all?(
94
83
 
95
84
  Simple to the point, no more mess of && or || checks for the same object. All you have to do is include Izzy in your object and you're ready to go!
96
85
 
86
+ ## Izzy Array Module
87
+
88
+ But wait! There's more! IzzyArray allows you a few more tricks on top of that!
89
+ ```ruby
90
+ class Array; include IzzyArray end
91
+
92
+ [0,0,0].all_are :zero? # => true
93
+ [0,nil,'foo'].any_are :zero? # => true
94
+ [0,0,0].none_are :nil? # => true
95
+ ```
96
+
97
+ Combine with rails :present?, :empty?, and various other methods and you have some interesting results! This one will get some more power with experimentation.
98
+
97
99
  ## Installation
98
100
 
99
101
  Add this line to your application's Gemfile:
data/lib/izzy/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Izzy
2
- VERSION = '3.0.0'
2
+ VERSION = '3.1.0'
3
3
  end
data/lib/izzy.rb CHANGED
@@ -39,3 +39,23 @@ module Izzy
39
39
  }
40
40
  end
41
41
  end
42
+
43
+ module IzzyArray
44
+ def all_are(m)
45
+ self.all?(&object_block(m))
46
+ end
47
+
48
+ def any_are(m)
49
+ self.any?(&object_block(m))
50
+ end
51
+
52
+ def none_are(m)
53
+ self.none?(&object_block(m))
54
+ end
55
+
56
+ private
57
+
58
+ def object_block(m)
59
+ -> o { o.respond_to?(m) && o.send(m) }
60
+ end
61
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ class Array
4
+ include IzzyArray
5
+ end
6
+
7
+ describe 'IzzyArray' do
8
+ describe '#all_are' do
9
+ it 'returns true if all objects match the method' do
10
+ [0,0,0,0].all_are :zero?
11
+ end
12
+
13
+ it 'returns false if any objects do not match the method' do
14
+ [0,1,'foo', nil].all_are :zero?
15
+ end
16
+ end
17
+
18
+ describe '#any_are' do
19
+ it 'returns true if any objects match the method' do
20
+ [0,1,'foo', nil].any_are :zero?
21
+ end
22
+
23
+ it 'returns false if no objects match the method' do
24
+ [nil, nil, nil].any_are :zero?
25
+ end
26
+ end
27
+
28
+ describe '#none_are' do
29
+ it 'returns true if no objects match the method' do
30
+ [nil, nil, nil].none_are :zero?
31
+ end
32
+
33
+ it 'returns false if any objects match the method' do
34
+ [nil, nil, nil].none_are :nil?
35
+ end
36
+ end
37
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: izzy
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Weaver
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-02 00:00:00.000000000 Z
11
+ date: 2014-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -71,6 +71,7 @@ files:
71
71
  - izzy.gemspec
72
72
  - lib/izzy.rb
73
73
  - lib/izzy/version.rb
74
+ - spec/izzy_array_spec.rb
74
75
  - spec/izzy_spec.rb
75
76
  - spec/spec_helper.rb
76
77
  homepage: http://www.github.com/baweaver/izzy
@@ -98,5 +99,6 @@ signing_key:
98
99
  specification_version: 4
99
100
  summary: Gives you methods to mitigate long conditionals
100
101
  test_files:
102
+ - spec/izzy_array_spec.rb
101
103
  - spec/izzy_spec.rb
102
104
  - spec/spec_helper.rb