limit_detectors 0.0.3 → 0.0.4
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 +4 -4
- data/.travis.yml +2 -0
- data/Gemfile +8 -0
- data/README.md +6 -6
- data/lib/limit_detectors.rb +14 -2
- data/lib/limit_detectors/version.rb +1 -1
- data/spec/limit_detectors_spec.rb +43 -18
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7644179e8d3eebef16e330ab12f116dd998bd296
|
4
|
+
data.tar.gz: dfa8b5e932662cfacb2ae1544a8fc45e02efba88
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 524180318768013866c5b7fa49adf446cbd2dc0062f596676cdd83ceac77a19bcf1c71b47a4b9c81014566609890965204bd6a69a091d4d3d3e912d63ac7368f
|
7
|
+
data.tar.gz: 6a4d3d272d93b6220e7194904e949d48da916169bf7cc7260137a6bad65df98ec8f604cc44a6322f2a97fed5917b79543dcd699b2947035e074c9e09b4123acc
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -48,13 +48,13 @@ may not be compatible with the current version.
|
|
48
48
|
|
49
49
|
This gem is tested with these (MRI) Ruby versions:
|
50
50
|
|
51
|
-
* 1.8.7
|
52
|
-
* 1.9.3
|
53
|
-
* 2.0
|
54
|
-
* 2.1
|
55
|
-
* 2.1.1
|
56
|
-
|
51
|
+
* 1.8.7,
|
52
|
+
* 1.9.3,
|
53
|
+
* 2.0,
|
54
|
+
* 2.1,
|
55
|
+
* 2.1.1,
|
57
56
|
|
57
|
+
as well as current version of Jruby and Rubinius.
|
58
58
|
|
59
59
|
## Contributing
|
60
60
|
|
data/lib/limit_detectors.rb
CHANGED
@@ -2,15 +2,27 @@ require 'limit_detectors/version'
|
|
2
2
|
|
3
3
|
module LimitDetectors
|
4
4
|
|
5
|
+
# Deprecated, use at_mmost? instead
|
6
|
+
def at_most(limit, &block)
|
7
|
+
Kernel.warn "'at_most' is deprecated, use 'at_most?' instead"
|
8
|
+
at_most? limit, &block
|
9
|
+
end
|
10
|
+
|
11
|
+
# Deprecated, use at_mmost? instead
|
12
|
+
def at_least(limit, &block)
|
13
|
+
Kernel.warn "'at_least' is deprecated, use 'at_least?' instead"
|
14
|
+
at_least? limit, &block
|
15
|
+
end
|
16
|
+
|
5
17
|
# Check whether the condition given in the block
|
6
18
|
# occurs at most limit times in the collection
|
7
|
-
def at_most(limit, &block)
|
19
|
+
def at_most?(limit, &block)
|
8
20
|
ocurrences_of(&block) <= limit
|
9
21
|
end
|
10
22
|
|
11
23
|
# Check whether the condition given in the block
|
12
24
|
# occurs at least limit times in the collection
|
13
|
-
def at_least(limit, &block)
|
25
|
+
def at_least?(limit, &block)
|
14
26
|
ocurrences_of(&block) >= limit
|
15
27
|
end
|
16
28
|
|
@@ -5,57 +5,70 @@ Array.send :include, LimitDetectors
|
|
5
5
|
describe '#at_most' do
|
6
6
|
|
7
7
|
it 'is true for an empty Array' do
|
8
|
-
expect(
|
8
|
+
expect(Kernel).to_not receive(:warn)
|
9
|
+
expect([].at_most?(5){ true }).to be_true
|
9
10
|
end
|
10
11
|
|
11
12
|
it 'is true if the criterion is met once' do
|
12
|
-
expect(["it's there"].at_most(1){ |el| el == "it's there"}).to be_true
|
13
|
+
expect(["it's there"].at_most?(1){ |el| el == "it's there"}).to be_true
|
13
14
|
end
|
14
15
|
|
15
16
|
it 'is true if all elements meet the criterion and the size is the given maximum number' do
|
16
|
-
expect([1,1,1].at_most(3){|e| e == 1})
|
17
|
+
expect([1,1,1].at_most?(3){|e| e == 1})
|
17
18
|
end
|
18
19
|
|
19
20
|
it 'is false if not enough elements meet the criterion' do
|
20
|
-
expect([1, 2, 4].at_most(1){|e| e.even?}).to be_false
|
21
|
+
expect([1, 2, 4].at_most?(1){|e| e.even?}).to be_false
|
21
22
|
end
|
22
23
|
|
23
24
|
it 'is true if 0 elements are expected to match' do
|
24
25
|
r = Array.new(10){rand}
|
25
|
-
expect(r.at_most(0){ |i| i > 2 }).to be_true
|
26
|
+
expect(r.at_most?(0){ |i| i > 2 }).to be_true
|
26
27
|
end
|
27
28
|
|
28
29
|
describe 'Hash#at_most' do
|
29
30
|
Hash.send :include, LimitDetectors
|
30
31
|
it 'detects a condition based on key as well as value properties' do
|
31
32
|
h = { 'foo' => 1, 'bar' => 4, 'baz' => 5, 'bum' => 1, 'fum' => 0}
|
32
|
-
expect( h.at_most(3){|ky,vl| ky.match(/^b/) || vl > 1 }).to be_true
|
33
|
+
expect( h.at_most?(3){|ky,vl| ky.match(/^b/) || vl > 1 }).to be_true
|
33
34
|
end
|
34
35
|
end
|
35
36
|
|
36
37
|
end
|
37
38
|
|
38
39
|
describe '#at_least' do
|
39
|
-
it 'is
|
40
|
-
expect(
|
40
|
+
it 'is false for an empty Array' do
|
41
|
+
expect(Kernel).to_not receive(:warn)
|
42
|
+
expect([].at_least?(1){ true }).to be_false
|
43
|
+
expect([].at_least?(1){ false }).to be_false
|
41
44
|
end
|
42
45
|
|
43
|
-
it 'is true if the
|
44
|
-
expect([
|
46
|
+
it 'is true if the expected number is 0 and Array is empty' do
|
47
|
+
expect([].at_least?(0){ true }).to be_true
|
48
|
+
expect([].at_least?(0){ false }).to be_true
|
45
49
|
end
|
46
50
|
|
47
|
-
it 'is
|
48
|
-
|
51
|
+
it 'is false if the container ist smaller than the expected number' do
|
52
|
+
size = 10
|
53
|
+
expect(Array.new(10).at_least?(size + 1){true}).to be_false
|
49
54
|
end
|
50
55
|
|
51
|
-
it 'is
|
52
|
-
expect([
|
56
|
+
it 'is true if the criterion is met and expected once' do
|
57
|
+
expect(["it's there"].at_least?(1){ |el| el == "it's there"}).to be_true
|
53
58
|
end
|
54
59
|
|
55
|
-
it 'is true if
|
60
|
+
it 'is true if all elements meet the criterion and the size is the given minimum number' do
|
61
|
+
expect([1,1,1].at_least?(3){|e| e == 1}).to be_true
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'is true if enough elements meet the criterion' do
|
65
|
+
expect([1, 2, 4, 8].at_least?(2){|e| e.even?}).to be_true
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'is true if there are enough elements to match' do
|
56
69
|
r = Array.new(10){|i|i}
|
57
|
-
expect(r.at_least(7){ |i| i > 2 }).to be_true
|
58
|
-
expect(r.at_least(8){ |i| i > 2 }).to be_false
|
70
|
+
expect(r.at_least?(7){ |i| i > 2 }).to be_true
|
71
|
+
expect(r.at_least?(8){ |i| i > 2 }).to be_false
|
59
72
|
end
|
60
73
|
|
61
74
|
end
|
@@ -64,6 +77,18 @@ describe 'Using an object that doesn\'t respond to #inject will raise an excepti
|
|
64
77
|
object = Object.new
|
65
78
|
object.extend LimitDetectors
|
66
79
|
it 'will raise an exception, if it\'s sent #atmost' do
|
67
|
-
expect{ object.at_most(1){ |el| el.condition? } }.to raise_exception(NoMethodError, /undefined method .inject./)
|
80
|
+
expect{ object.at_most?(1){ |el| el.condition? } }.to raise_exception(NoMethodError, /undefined method .inject./)
|
68
81
|
end
|
69
82
|
end
|
83
|
+
|
84
|
+
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
|
86
|
+
expect(Kernel).to receive(:warn).with(/'at_most'.+deprecated.+'at_most\?'/)
|
87
|
+
[1,2,4,8].at_most(2) {|e| e.even?}
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'sends message Kernel.warn, if old-style method is used for at_least' do
|
91
|
+
expect(Kernel).to receive(:warn).with(/'at_least'.+deprecated.+'at_least\?'/)
|
92
|
+
[1,2,4,8].at_least(2) {|e| e.even?}
|
93
|
+
end
|
94
|
+
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
|
+
version: 0.0.4
|
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-
|
11
|
+
date: 2014-04-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|