powerpack 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +8 -0
- data/lib/powerpack.rb +2 -0
- data/lib/powerpack/enumerable.rb +7 -0
- data/lib/powerpack/enumerable/drop_last.rb +19 -0
- data/lib/powerpack/enumerable/drop_last_while.rb +21 -0
- data/lib/powerpack/enumerable/several.rb +37 -0
- data/lib/powerpack/enumerable/sproduct.rb +15 -0
- data/lib/powerpack/enumerable/sum.rb +16 -0
- data/lib/powerpack/enumerable/take_last.rb +19 -0
- data/lib/powerpack/enumerable/take_last_while.rb +21 -0
- data/lib/powerpack/version.rb +1 -1
- data/spec/powerpack/enumerable/drop_last_spec.rb +15 -0
- data/spec/powerpack/enumerable/drop_last_while_spec.rb +7 -0
- data/spec/powerpack/enumerable/several_spec.rb +27 -0
- data/spec/powerpack/enumerable/sproduct_spec.rb +15 -0
- data/spec/powerpack/enumerable/sum_spec.rb +15 -0
- data/spec/powerpack/enumerable/take_last_spec.rb +15 -0
- data/spec/powerpack/enumerable/take_last_while_spec.rb +7 -0
- metadata +24 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a28a098514fb19fbe308f8fe212c86ba7752cf25
|
4
|
+
data.tar.gz: 50ab2c8032e910bb0ca0f62e4303c5df92075e57
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: add34af61d1e814599b8d740c0a482da9805b89e022e2ace317803fc46e25829f27b15bcf3f59c715011ecd062f150fbfecc7cb8386858e318fd63e40c18ce05
|
7
|
+
data.tar.gz: 6c3810f948ea1546912b252067b04c11979349f224f41cb9551face339d27a84fbd68bfe2bb2fa85976546d6896606bfcd1b268b001023942216ba8180cfbe84
|
data/README.md
CHANGED
@@ -24,6 +24,14 @@ Or install it yourself as:
|
|
24
24
|
* [Array](http://rdoc.info/github/bbatsov/powerpack/Array)
|
25
25
|
* [#init](http://rdoc.info/github/bbatsov/powerpack/Array#init-instance_method)
|
26
26
|
* [#tail](http://rdoc.info/github/bbatsov/powerpack/Array#tail-instance_method)
|
27
|
+
* [Enumerable](http://rdoc.info/github/bbatsov/powerpack/Enumerable)
|
28
|
+
* [#drop_last](http://rdoc.info/github/bbatsov/powerpack/Enumerable#drop_last-instance_method)
|
29
|
+
* [#drop_last_while](http://rdoc.info/github/bbatsov/powerpack/Enumerable#drop_last_while-instance_method)
|
30
|
+
* [#several?](http://rdoc.info/github/bbatsov/powerpack/Enumerable#several?-instance_method)
|
31
|
+
* [#sproduct](http://rdoc.info/github/bbatsov/powerpack/Enumerable#sproduct?-instance_method)
|
32
|
+
* [#sum](http://rdoc.info/github/bbatsov/powerpack/Enumerable#sum-instance_method)
|
33
|
+
* [#take_last](http://rdoc.info/github/bbatsov/powerpack/Enumerable#take_last-instance_method)
|
34
|
+
* [#take_last_while](http://rdoc.info/github/bbatsov/powerpack/Enumerable#take_last_while-instance_method)
|
27
35
|
* [Hash](http://rdoc.info/github/bbatsov/powerpack/Hash)
|
28
36
|
* [#symbolize_keys](http://rdoc.info/github/bbatsov/powerpack/Hash#symbolize_keys-instance_method)
|
29
37
|
* [Numeric](http://rdoc.info/github/bbatsov/powerpack/Numeric)
|
data/lib/powerpack.rb
CHANGED
@@ -0,0 +1,7 @@
|
|
1
|
+
require_relative 'enumerable/drop_last'
|
2
|
+
require_relative 'enumerable/drop_last_while'
|
3
|
+
require_relative 'enumerable/several'
|
4
|
+
require_relative 'enumerable/sproduct'
|
5
|
+
require_relative 'enumerable/sum'
|
6
|
+
require_relative 'enumerable/take_last'
|
7
|
+
require_relative 'enumerable/take_last_while'
|
@@ -0,0 +1,19 @@
|
|
1
|
+
unless Enumerable.method_defined? :drop_last
|
2
|
+
module Enumerable
|
3
|
+
# Drops the last n elements of an enumerable.
|
4
|
+
#
|
5
|
+
# @return [Array] an array containing the remaining elements
|
6
|
+
#
|
7
|
+
# @example
|
8
|
+
# [1, 2, 3].drop_last(1) #=> [1, 2]
|
9
|
+
# [].drop_last(5) #=> []
|
10
|
+
def drop_last(n)
|
11
|
+
fail ArgumentError, 'attempt to drop negative size' if n < 0
|
12
|
+
|
13
|
+
ary = to_a
|
14
|
+
|
15
|
+
return [] if n > ary.size
|
16
|
+
ary[0...(ary.size - n)]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
unless Enumerable.method_defined? :drop_last_while
|
2
|
+
module Enumerable
|
3
|
+
# Drops the last elements of an enumerable meeting a predicate.
|
4
|
+
#
|
5
|
+
# @return [Array] an array containing the remaining elements
|
6
|
+
#
|
7
|
+
# @example
|
8
|
+
# [1, 2, 3].drop_last_while(&:odd?) #=> [1, 2]
|
9
|
+
def drop_last_while
|
10
|
+
return to_enum(:drop_last_while) unless block_given?
|
11
|
+
|
12
|
+
ary = []
|
13
|
+
dropping = true
|
14
|
+
reverse_each do |obj|
|
15
|
+
ary << obj unless dropping &&= yield(obj)
|
16
|
+
end
|
17
|
+
|
18
|
+
ary.reverse!
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
unless Enumerable.method_defined? :several?
|
2
|
+
module Enumerable
|
3
|
+
# Checks if two or more elements meet a certain predicate.
|
4
|
+
#
|
5
|
+
# @example
|
6
|
+
# [1, 2, 3, 4].several?(&:even?) #=> true
|
7
|
+
# [1, 1, 3, 3].several?(&:even?) #=> false
|
8
|
+
#
|
9
|
+
# Without a block uses the identify of the elements as default predicate.
|
10
|
+
# This means that nil and false elements will be ignored.
|
11
|
+
#
|
12
|
+
# @example
|
13
|
+
# [1, false, nil].several? #=> false
|
14
|
+
# [1, 2, 3].several? #=>true
|
15
|
+
def several?
|
16
|
+
found_count = 0
|
17
|
+
|
18
|
+
if block_given?
|
19
|
+
each do |*o|
|
20
|
+
if yield(*o)
|
21
|
+
found_count += 1
|
22
|
+
return true if found_count > 1
|
23
|
+
end
|
24
|
+
end
|
25
|
+
else
|
26
|
+
each do |o|
|
27
|
+
if o
|
28
|
+
found_count += 1
|
29
|
+
return true if found_count > 1
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
false
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
unless Enumerable.method_defined? :sproduct
|
2
|
+
module Enumerable
|
3
|
+
# Multiplies the elements of an enum by invoking their * method.
|
4
|
+
# Most useful for multiplying numbers. sproduct stands for standard product,
|
5
|
+
# since Ruby defines Array#product as a Carthesian product.
|
6
|
+
#
|
7
|
+
# @example
|
8
|
+
# [1, 2, 3, 4].sproduct #=> 6
|
9
|
+
# [].sproduct #=> nil
|
10
|
+
# [].sproduct(1) #=> 1
|
11
|
+
def sproduct(default = nil)
|
12
|
+
reduce(&:*) || default
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
unless Enumerable.method_defined? :sum
|
2
|
+
module Enumerable
|
3
|
+
# Sums up elements of an enum by invoking their + method.
|
4
|
+
# Most useful for summing up numbers.
|
5
|
+
#
|
6
|
+
# @example
|
7
|
+
# [1, 2, 3].sum #=> 6
|
8
|
+
# ["a", "b", "c"].sum #=> "abc"
|
9
|
+
# [[1], [2], [3]].sum #=> [1, 2, 3]
|
10
|
+
# [].sum #=> nil
|
11
|
+
# [].sum(0) #=> 0
|
12
|
+
def sum(default = nil)
|
13
|
+
reduce(&:+) || default
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
unless Enumerable.method_defined? :take_last
|
2
|
+
module Enumerable
|
3
|
+
# Take the last n elements of an enumerable.
|
4
|
+
#
|
5
|
+
# @return [Array] an array containing the requested elements
|
6
|
+
#
|
7
|
+
# @example
|
8
|
+
# [1, 2, 3].take_last(2) #=> [2, 3]
|
9
|
+
# [].take_last(5) #=> []
|
10
|
+
def take_last(n)
|
11
|
+
fail ArgumentError, 'attempt to take negative size' if n < 0
|
12
|
+
|
13
|
+
ary = to_a
|
14
|
+
|
15
|
+
return ary if n > ary.size
|
16
|
+
ary[(ary.size - n)..-1]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
unless Enumerable.method_defined? :take_last_while?
|
2
|
+
module Enumerable
|
3
|
+
# Take the last n elements of an enumerable meeting a certain predicate.
|
4
|
+
#
|
5
|
+
# @return [Array] an array containing the matching elements
|
6
|
+
#
|
7
|
+
# @example
|
8
|
+
# [1, 2, 3, 5].take_last_while(&:odd?) #=> [5, 3]
|
9
|
+
def take_last_while
|
10
|
+
return to_enum(:take_last_while) unless block_given?
|
11
|
+
|
12
|
+
array = []
|
13
|
+
reverse_each do |elem|
|
14
|
+
return array unless yield(elem)
|
15
|
+
array << elem
|
16
|
+
end
|
17
|
+
|
18
|
+
array
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/powerpack/version.rb
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Enumerable#drop_last' do
|
4
|
+
it 'drops the last n elements' do
|
5
|
+
expect([1, 2, 3, 4].drop_last(2)).to eq([1, 2])
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'returns an empty array if you request to drop too many elems' do
|
9
|
+
expect((1..10).drop_last(100)).to eq([])
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'does not accept negative argument' do
|
13
|
+
expect { [1, 2, 3, 4].drop_last(-1) }.to raise_error(ArgumentError)
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Enumerable#several' do
|
4
|
+
context 'with block' do
|
5
|
+
it 'returns true if more than 1 element matches the predicate' do
|
6
|
+
expect([1, 2, 3, 4].several?(&:even?)).to be_true
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'returns false if just 1 element matches the predicate' do
|
10
|
+
expect([1, 3, 4].several?(&:even?)).to be_false
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'returns false if no elements match the predicate' do
|
14
|
+
expect([1, 3, 4].several?(&:even?)).to be_false
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'without block' do
|
19
|
+
it 'returns true if there are 2 or more non nil/false elements' do
|
20
|
+
expect([1, 2, 3, 4].several?).to be_true
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'returns false if there are less than 2 non nil/false elements' do
|
24
|
+
expect([1, nil, false].several?).to be_false
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Enumerable#sproduct' do
|
4
|
+
it 'multiply the numbers of an enum' do
|
5
|
+
expect((1..4).sproduct).to eq(24)
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'returns nil when invoked on an empty collection' do
|
9
|
+
expect([].sproduct).to be_nil
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'returns default value when invoked on an empty collection' do
|
13
|
+
expect([].sproduct(0)).to be_zero
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Enumerable#sum' do
|
4
|
+
it 'sums up the numbers of an enum' do
|
5
|
+
expect((1..3).sum).to eq(6)
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'returns nil when invoked on an empty collection' do
|
9
|
+
expect([].sum).to be_nil
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'returns default value when invoked on an empty collection' do
|
13
|
+
expect([].sum(0)).to be_zero
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Enumerable#take_last' do
|
4
|
+
it 'takes the last n elements' do
|
5
|
+
expect([1, 2, 3, 4].take_last(2)).to eq([3, 4])
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'returns everything if you request to drop too many elems' do
|
9
|
+
expect((1..10).take_last(100)).to eq((1..10).to_a)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'does not accept negative argument' do
|
13
|
+
expect { [1, 2, 3, 4].take_last(-1) }.to raise_error(ArgumentError)
|
14
|
+
end
|
15
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: powerpack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bozhidar Batsov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-08-
|
11
|
+
date: 2013-08-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -84,6 +84,14 @@ files:
|
|
84
84
|
- lib/powerpack/array.rb
|
85
85
|
- lib/powerpack/array/init.rb
|
86
86
|
- lib/powerpack/array/tail.rb
|
87
|
+
- lib/powerpack/enumerable.rb
|
88
|
+
- lib/powerpack/enumerable/drop_last.rb
|
89
|
+
- lib/powerpack/enumerable/drop_last_while.rb
|
90
|
+
- lib/powerpack/enumerable/several.rb
|
91
|
+
- lib/powerpack/enumerable/sproduct.rb
|
92
|
+
- lib/powerpack/enumerable/sum.rb
|
93
|
+
- lib/powerpack/enumerable/take_last.rb
|
94
|
+
- lib/powerpack/enumerable/take_last_while.rb
|
87
95
|
- lib/powerpack/hash.rb
|
88
96
|
- lib/powerpack/hash/symbolize_keys.rb
|
89
97
|
- lib/powerpack/numeric.rb
|
@@ -99,6 +107,13 @@ files:
|
|
99
107
|
- powerpack.gemspec
|
100
108
|
- spec/powerpack/array/init_spec.rb
|
101
109
|
- spec/powerpack/array/tail_spec.rb
|
110
|
+
- spec/powerpack/enumerable/drop_last_spec.rb
|
111
|
+
- spec/powerpack/enumerable/drop_last_while_spec.rb
|
112
|
+
- spec/powerpack/enumerable/several_spec.rb
|
113
|
+
- spec/powerpack/enumerable/sproduct_spec.rb
|
114
|
+
- spec/powerpack/enumerable/sum_spec.rb
|
115
|
+
- spec/powerpack/enumerable/take_last_spec.rb
|
116
|
+
- spec/powerpack/enumerable/take_last_while_spec.rb
|
102
117
|
- spec/powerpack/hash/symbolize_keys_spec.rb
|
103
118
|
- spec/powerpack/numeric/neg_spec.rb
|
104
119
|
- spec/powerpack/numeric/pos_spec.rb
|
@@ -135,6 +150,13 @@ summary: A few useful extensions to core Ruby classes.
|
|
135
150
|
test_files:
|
136
151
|
- spec/powerpack/array/init_spec.rb
|
137
152
|
- spec/powerpack/array/tail_spec.rb
|
153
|
+
- spec/powerpack/enumerable/drop_last_spec.rb
|
154
|
+
- spec/powerpack/enumerable/drop_last_while_spec.rb
|
155
|
+
- spec/powerpack/enumerable/several_spec.rb
|
156
|
+
- spec/powerpack/enumerable/sproduct_spec.rb
|
157
|
+
- spec/powerpack/enumerable/sum_spec.rb
|
158
|
+
- spec/powerpack/enumerable/take_last_spec.rb
|
159
|
+
- spec/powerpack/enumerable/take_last_while_spec.rb
|
138
160
|
- spec/powerpack/hash/symbolize_keys_spec.rb
|
139
161
|
- spec/powerpack/numeric/neg_spec.rb
|
140
162
|
- spec/powerpack/numeric/pos_spec.rb
|