powerpack 0.0.5 → 0.0.6
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/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
|