izzy 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 15f63a3badafd8b244b5291f78a022dfe0909e68
4
- data.tar.gz: 71b2c459e4d9dc6b8632599f114c0ab62e041582
3
+ metadata.gz: bc28143ae2179e8bd4ff348fa131d241535184fc
4
+ data.tar.gz: ae6e5e1126ff074a2b0644472f3fd66e645cfa1f
5
5
  SHA512:
6
- metadata.gz: 5792a86f7285ad9af9dc4b3651a17c65259d441b490afcd3c0f0545a8e6a822b7382011e52e43d8e78de70816b048bc07126863a45f5449eb6632b1258220e6e
7
- data.tar.gz: 08b6ed176a63fe82c4c877d5392bb96db7eaad36d48bec454f766e2a6ff59cb46aa7f6ae52ce280675455844f8c93cc534e9e4cb4e14c0bbd87f854cbb56be00
6
+ metadata.gz: 49dc4b9dab2d3f6e0c523311f7e25783280e3eb8f4c3f4f629197ccd5d2ab019364f7377cae2cd478434f6a72a0ff9e8fb3b1598499120abae9a81c7347d2e4f
7
+ data.tar.gz: c294e594ed285753a459817c5f0495b43b16febe9b30354e1324b4b6cc08fbf4d84cf817a1ef74b25196bcd964e278131ab6af661f666a8d96d05f1c5ec24db9
data/README.md CHANGED
@@ -10,6 +10,9 @@ Let's take our class, Person:
10
10
 
11
11
  ```ruby
12
12
  class Person
13
+ include Izzy # Make sure to include Izzy!
14
+ attr_reader :name, :age, :sex
15
+
13
16
  def initialize(name, age, sex)
14
17
  @name = name
15
18
  @age = age
@@ -54,7 +57,15 @@ brandon.none_of?(:younger_than_18, :female) # => true
54
57
  brandon.any_of?(:male, :female, :geek) # => true
55
58
  ```
56
59
 
57
- Simple to the point, no more mess of && or || checks for the same object.
60
+ Maybe boolean comparisons aren't your cup of tea. Izzy has you covered my friend:
61
+ ```ruby
62
+ brandon.matches_all? name: /^br/, age: (20..30) # => true
63
+ brandon.matches_any? name: /br$/, age: (20..30) # => true
64
+ brandon.matches_none? name: /br&/, age: (30..40) # => true
65
+ ```
66
+ Izzy compares on === much like a case statement, allowing you to regex and range away! You can even do type checks while you're at it.
67
+
68
+ 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!
58
69
 
59
70
  ## Installation
60
71
 
data/lib/izzy.rb CHANGED
@@ -2,14 +2,36 @@ require 'izzy/version'
2
2
 
3
3
  module Izzy
4
4
  def all_of?(*methods)
5
- methods.all? { |method| (m = "#{method}?".to_sym) && self.respond_to?(m) && self.send(m) }
5
+ methods.all? &method_check
6
6
  end
7
7
 
8
8
  def any_of?(*methods)
9
- methods.any? { |method| (m = "#{method}?".to_sym) && self.respond_to?(m) && self.send(m) }
9
+ methods.any? &method_check
10
10
  end
11
11
 
12
12
  def none_of?(*methods)
13
- methods.none? { |method| (m = "#{method}?".to_sym) && self.respond_to?(m) && self.send(m) }
13
+ methods.none? &method_check
14
+ end
15
+
16
+ def matches_all?(matchers = {})
17
+ matchers.all? &matcher_check
18
+ end
19
+
20
+ def matches_any?(matchers = {})
21
+ matchers.any? &matcher_check
22
+ end
23
+
24
+ def matches_none?(matchers = {})
25
+ matchers.none? &matcher_check
26
+ end
27
+
28
+ private
29
+
30
+ def method_check
31
+ -> method { (m = "#{method}?".to_sym) && self.respond_to?(m) && self.send(m) }
32
+ end
33
+
34
+ def matcher_check
35
+ -> m { (m, val = *m) && self.respond_to?(m) && val === self.send(m) }
14
36
  end
15
37
  end
data/lib/izzy/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Izzy
2
- VERSION = '2.0.0'
2
+ VERSION = '2.1.0'
3
3
  end
data/spec/izzy_spec.rb CHANGED
@@ -3,6 +3,8 @@ require 'spec_helper'
3
3
  class Person
4
4
  include Izzy
5
5
 
6
+ attr_reader :name, :age, :sex
7
+
6
8
  def initialize(name, age, sex)
7
9
  @name = name
8
10
  @age = age
@@ -66,4 +68,46 @@ describe 'Person' do
66
68
  expect(@person.none_of? :older_than_18, :female, :geek).to be_false
67
69
  end
68
70
  end
71
+
72
+ describe '#matches_all?' do
73
+ it 'returns true if Person matches all of the conditions' do
74
+ expect(
75
+ @person.matches_all?(name: /br/, age: (20..30))
76
+ ).to be_true
77
+ end
78
+
79
+ it 'returns false if Person does not match all conditions' do
80
+ expect(
81
+ @person.matches_all?(name: /br/, age: (25..30))
82
+ ).to be_false
83
+ end
84
+ end
85
+
86
+ describe '#matches_any?' do
87
+ it 'returns true if Person matches all of the conditions' do
88
+ expect(
89
+ @person.matches_any?(name: /br/, age: (25..30))
90
+ ).to be_true
91
+ end
92
+
93
+ it 'returns false if Person does not match any conditions' do
94
+ expect(
95
+ @person.matches_any?(name: /br$/, age: (25..30))
96
+ ).to be_false
97
+ end
98
+ end
99
+
100
+ describe '#matches_none?' do
101
+ it 'returns true if Person matches all of the conditions' do
102
+ expect(
103
+ @person.matches_none?(name: /br$/, age: (25..30))
104
+ ).to be_true
105
+ end
106
+
107
+ it 'returns false if Person does not match any conditions' do
108
+ expect(
109
+ @person.matches_none?(name: /br/, age: (25..30))
110
+ ).to be_false
111
+ end
112
+ end
69
113
  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: 2.0.0
4
+ version: 2.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-01-31 00:00:00.000000000 Z
11
+ date: 2014-02-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler