limit_detectors 0.0.4 → 0.0.5

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: 7644179e8d3eebef16e330ab12f116dd998bd296
4
- data.tar.gz: dfa8b5e932662cfacb2ae1544a8fc45e02efba88
3
+ metadata.gz: 31a734b1d732fbc68adedf43ac4cb5ea4b19d7e9
4
+ data.tar.gz: 24a9827e6429aaa1d60ae8e507b481974aedf25e
5
5
  SHA512:
6
- metadata.gz: 524180318768013866c5b7fa49adf446cbd2dc0062f596676cdd83ceac77a19bcf1c71b47a4b9c81014566609890965204bd6a69a091d4d3d3e912d63ac7368f
7
- data.tar.gz: 6a4d3d272d93b6220e7194904e949d48da916169bf7cc7260137a6bad65df98ec8f604cc44a6322f2a97fed5917b79543dcd699b2947035e074c9e09b4123acc
6
+ metadata.gz: 9fafa8b5a6d6886587fc4f329893d5eebb75552691d138e8ea0a5509daac3e6643cb959020a24797a662920b20b926e1cf930cf9a5ac3622dbdb4262cabb229a
7
+ data.tar.gz: 5f05f660b06669f3ae01eedb2a6a53f0780a3f1728d43a95ab6d77ed084b85440d49906b8cf21244bddea49eca0fced0c8ab3567efa0b41ea6bf9da30ebc40f1
data/README.md CHANGED
@@ -27,7 +27,7 @@ Or install it yourself as:
27
27
 
28
28
  In your code you can `require 'limit_detectors'` then define you classes (or use built-in classes like Array, Hash
29
29
  or other enumerable objects), extend these objects with LimitDetectors (or include the module in your class) and
30
- then call `at_most` on your object.
30
+ then call `at_most?` (or àt_least?') on your object.
31
31
 
32
32
  For example:
33
33
 
@@ -36,9 +36,9 @@ For example:
36
36
  => [1, 2, 3, 4, 5]
37
37
  [2] pry(main)> a.extend LimitDetectors
38
38
  => [1, 2, 3, 4, 5]
39
- [3] pry(main)> a.at_most(4){|e| e.odd?}
39
+ [3] pry(main)> a.at_most?(4){|e| e.odd?}
40
40
  => true # There are indeed no more than 4 odd numbers in the array
41
- [4] pry(main)> a.at_most(1){|e| e.even?}
41
+ [4] pry(main)> a.at_most?(1){|e| e.even?}
42
42
  => false # In fact there are two even numbers in the array
43
43
 
44
44
  ## Compatibility
@@ -54,7 +54,7 @@ This gem is tested with these (MRI) Ruby versions:
54
54
  * 2.1,
55
55
  * 2.1.1,
56
56
 
57
- as well as current version of Jruby and Rubinius.
57
+ as well as current version of JRuby and Rubinius.
58
58
 
59
59
  ## Contributing
60
60
 
@@ -1,3 +1,3 @@
1
1
  module LimitDetectors
2
- VERSION = '0.0.4'
2
+ VERSION = '0.0.5'
3
3
  end
@@ -2,13 +2,13 @@ require 'limit_detectors/version'
2
2
 
3
3
  module LimitDetectors
4
4
 
5
- # Deprecated, use at_mmost? instead
5
+ # Deprecated, use at_most? instead
6
6
  def at_most(limit, &block)
7
7
  Kernel.warn "'at_most' is deprecated, use 'at_most?' instead"
8
8
  at_most? limit, &block
9
9
  end
10
10
 
11
- # Deprecated, use at_mmost? instead
11
+ # Deprecated, use at_most? instead
12
12
  def at_least(limit, &block)
13
13
  Kernel.warn "'at_least' is deprecated, use 'at_least?' instead"
14
14
  at_least? limit, &block
@@ -1,4 +1,5 @@
1
1
  require 'spec_helper'
2
+ require 'set'
2
3
 
3
4
  Array.send :include, LimitDetectors
4
5
 
@@ -7,6 +8,9 @@ describe '#at_most' do
7
8
  it 'is true for an empty Array' do
8
9
  expect(Kernel).to_not receive(:warn)
9
10
  expect([].at_most?(5){ true }).to be_true
11
+ expect([].at_most?(0){ true }).to be_true
12
+ expect([].at_most?(1){ true }).to be_true
13
+ expect([].at_most?(5){ :foo }).to be_true
10
14
  end
11
15
 
12
16
  it 'is true if the criterion is met once' do
@@ -37,15 +41,15 @@ describe '#at_most' do
37
41
  end
38
42
 
39
43
  describe '#at_least' do
40
- it 'is false for an empty Array' do
44
+
45
+ it 'is false for an empty Array, if at least one is expected' do
41
46
  expect(Kernel).to_not receive(:warn)
42
47
  expect([].at_least?(1){ true }).to be_false
43
- expect([].at_least?(1){ false }).to be_false
44
48
  end
45
49
 
46
50
  it 'is true if the expected number is 0 and Array is empty' do
47
51
  expect([].at_least?(0){ true }).to be_true
48
- expect([].at_least?(0){ false }).to be_true
52
+ expect({}.at_least?(0){ false }).to be_true
49
53
  end
50
54
 
51
55
  it 'is false if the container ist smaller than the expected number' do
@@ -57,6 +61,18 @@ describe '#at_least' do
57
61
  expect(["it's there"].at_least?(1){ |el| el == "it's there"}).to be_true
58
62
  end
59
63
 
64
+ it 'is false for an empty Array if you expect at leat 1' do
65
+ expect([].at_least?(1){ true }).to be_false
66
+ end
67
+
68
+ it 'is true for an empty Array if you expect at leat 0' do
69
+ expect([].at_least?(0){ }).to be_true
70
+ end
71
+
72
+ it 'is true if the criterion is met once' do
73
+ expect(["it's there"].at_least?(1){ |el| el == "it's there"}).to be_true
74
+ end
75
+
60
76
  it 'is true if all elements meet the criterion and the size is the given minimum number' do
61
77
  expect([1,1,1].at_least?(3){|e| e == 1}).to be_true
62
78
  end
@@ -73,6 +89,29 @@ describe '#at_least' do
73
89
 
74
90
  end
75
91
 
92
+ describe '#ocurrences_of' do
93
+ context 'collection with content' do
94
+ Set.send :include, LimitDetectors
95
+ subject{ Set.new( [1, 2, 3, 4, 5, 6, 7]) }
96
+
97
+ it('counts 3 even numbers') { expect( subject.ocurrences_of &:even?).to be 3 }
98
+ it('counts 4 odd numbers') { expect( subject.ocurrences_of &:odd?).to be 4 }
99
+ it('counts no number < 0') { expect( subject.ocurrences_of{ |e| e < 0}).to be 0 }
100
+ it('counts 7 positive numbers') { expect( subject.ocurrences_of{ |e| e > 0}).to be 7 }
101
+ end
102
+
103
+ context 'empty collection' do
104
+ it 'counts 0 for any empty collection' do
105
+ [[], Set.new, {}].each do | obj |
106
+ expect(obj.ocurrences_of {true}).to be(0), "Expected to count 0, for an empty #{obj.class}"
107
+ end
108
+ end
109
+ end
110
+
111
+ it('doen\'t return nil') { expect([1].ocurrences_of {}).not_to be_nil }
112
+ end
113
+
114
+
76
115
  describe 'Using an object that doesn\'t respond to #inject will raise an exception' do
77
116
  object = Object.new
78
117
  object.extend LimitDetectors
@@ -82,13 +121,21 @@ describe 'Using an object that doesn\'t respond to #inject will raise an excepti
82
121
  end
83
122
 
84
123
  describe 'Give a warning, if non-predicate versions are used' do
85
- it 'sends message Kernel.warn, if old-style method is used for at_most' do
124
+ it 'yields a warning for old-style at_most' do
86
125
  expect(Kernel).to receive(:warn).with(/'at_most'.+deprecated.+'at_most\?'/)
87
126
  [1,2,4,8].at_most(2) {|e| e.even?}
88
127
  end
89
128
 
90
- it 'sends message Kernel.warn, if old-style method is used for at_least' do
129
+ it 'yields a warning for old-style at_least' do
91
130
  expect(Kernel).to receive(:warn).with(/'at_least'.+deprecated.+'at_least\?'/)
92
131
  [1,2,4,8].at_least(2) {|e| e.even?}
93
132
  end
94
- end
133
+ end
134
+
135
+ describe 'When the provided block raises an exception' do
136
+ subject{ [1] }
137
+ it 'passes up the stack unchanged' do
138
+ expect{ subject.at_most?(1) { raise ArgumentError, 'BoomError' } }.to raise_error(ArgumentError, 'BoomError')
139
+ expect{ subject.ocurrences_of { raise ArgumentError, 'BoomError'} }.to raise_error(ArgumentError, 'BoomError')
140
+ end
141
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: limit_detectors
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephan Kämper
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-28 00:00:00.000000000 Z
11
+ date: 2014-05-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler