powerpack 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/lib/powerpack/array.rb +1 -1
- data/lib/powerpack/array/butlast.rb +15 -0
- data/lib/powerpack/enumerable.rb +1 -1
- data/lib/powerpack/enumerable/drop_last.rb +1 -0
- data/lib/powerpack/enumerable/drop_last_while.rb +3 -3
- data/lib/powerpack/enumerable/frequencies.rb +17 -0
- data/lib/powerpack/enumerable/sum.rb +6 -1
- data/lib/powerpack/enumerable/take_last.rb +1 -0
- data/lib/powerpack/enumerable/take_last_while.rb +4 -4
- data/lib/powerpack/version.rb +1 -1
- data/spec/powerpack/array/{init_spec.rb → butlast_spec.rb} +3 -3
- data/spec/powerpack/enumerable/frequencies_spec.rb +20 -0
- metadata +8 -8
- data/lib/powerpack/array/init.rb +0 -15
- data/lib/powerpack/enumerable/sproduct.rb +0 -15
- data/spec/powerpack/enumerable/sproduct_spec.rb +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1c7a89e31c15ac1b39a4806f126dbafd5cfe9991
|
4
|
+
data.tar.gz: f779a0d32f87717f9353a0b3ccd3d48d9177c3b4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0e7a88b34938e7d2484a81c23c8e2b343c65bdfcf826a08201f9687edfb09b718e466333001ee0c45b1391845422298039c791f722ad5e23c2dd4970c781694c
|
7
|
+
data.tar.gz: c00496df953ae329a3a61a96df857fde953cd490a6ad0ca8057db44be8f919ef63c97640eb7f644e8ef33ff839e1fcdbaa5ecc51f1559e9239b2376f75aca275
|
data/README.md
CHANGED
@@ -22,13 +22,13 @@ Or install it yourself as:
|
|
22
22
|
## Extensions
|
23
23
|
|
24
24
|
* [Array](http://rdoc.info/github/bbatsov/powerpack/Array)
|
25
|
-
* [#
|
25
|
+
* [#butlast](http://rdoc.info/github/bbatsov/powerpack/Array#butlast-instance_method)
|
26
26
|
* [#tail](http://rdoc.info/github/bbatsov/powerpack/Array#tail-instance_method)
|
27
27
|
* [Enumerable](http://rdoc.info/github/bbatsov/powerpack/Enumerable)
|
28
28
|
* [#drop_last](http://rdoc.info/github/bbatsov/powerpack/Enumerable#drop_last-instance_method)
|
29
29
|
* [#drop_last_while](http://rdoc.info/github/bbatsov/powerpack/Enumerable#drop_last_while-instance_method)
|
30
|
+
* [#frequencies](http://rdoc.info/github/bbatsov/powerpack/Enumerable#frequencies-instance_method)
|
30
31
|
* [#several?](http://rdoc.info/github/bbatsov/powerpack/Enumerable#several?-instance_method)
|
31
|
-
* [#sproduct](http://rdoc.info/github/bbatsov/powerpack/Enumerable#sproduct?-instance_method)
|
32
32
|
* [#sum](http://rdoc.info/github/bbatsov/powerpack/Enumerable#sum-instance_method)
|
33
33
|
* [#take_last](http://rdoc.info/github/bbatsov/powerpack/Enumerable#take_last-instance_method)
|
34
34
|
* [#take_last_while](http://rdoc.info/github/bbatsov/powerpack/Enumerable#take_last_while-instance_method)
|
data/lib/powerpack/array.rb
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
require_relative 'array/
|
1
|
+
require_relative 'array/butlast'
|
2
2
|
require_relative 'array/tail'
|
@@ -0,0 +1,15 @@
|
|
1
|
+
unless Array.method_defined? :butlast
|
2
|
+
class Array
|
3
|
+
# Returns a new array that has all the elements of the current but the last.
|
4
|
+
#
|
5
|
+
# @return [Array] a new array without the last element or an empty array if this
|
6
|
+
# array is empty
|
7
|
+
#
|
8
|
+
# @example
|
9
|
+
# [1, 2, 3].butlast #=> [1, 2]
|
10
|
+
# [].butlast #=> []
|
11
|
+
def butlast
|
12
|
+
self[0...-1]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/powerpack/enumerable.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require_relative 'enumerable/drop_last'
|
2
2
|
require_relative 'enumerable/drop_last_while'
|
3
|
+
require_relative 'enumerable/frequencies'
|
3
4
|
require_relative 'enumerable/several'
|
4
|
-
require_relative 'enumerable/sproduct'
|
5
5
|
require_relative 'enumerable/sum'
|
6
6
|
require_relative 'enumerable/take_last'
|
7
7
|
require_relative 'enumerable/take_last_while'
|
@@ -9,13 +9,13 @@ unless Enumerable.method_defined? :drop_last_while
|
|
9
9
|
def drop_last_while
|
10
10
|
return to_enum(:drop_last_while) unless block_given?
|
11
11
|
|
12
|
-
|
12
|
+
result = []
|
13
13
|
dropping = true
|
14
14
|
reverse_each do |obj|
|
15
|
-
|
15
|
+
result.unshift(obj) unless dropping &&= yield(obj)
|
16
16
|
end
|
17
17
|
|
18
|
-
|
18
|
+
result
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
unless Enumerable.method_defined? :frequencies
|
2
|
+
module Enumerable
|
3
|
+
# Counts the number of ocurrence of items in the enumberable.
|
4
|
+
#
|
5
|
+
# @return [Hash] in the format value => count
|
6
|
+
#
|
7
|
+
# @example
|
8
|
+
# [].frequencies # => {}
|
9
|
+
# [1, :symbol, 'string', 3, :symbol, 1].frequencies
|
10
|
+
# #=> { 1 => 2, :symbol => 2, 'string' => 1, 3 => 1 }
|
11
|
+
#
|
12
|
+
#
|
13
|
+
def frequencies
|
14
|
+
each_with_object(Hash.new(0)) { |e, a| a[e] += 1 }
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -1,8 +1,13 @@
|
|
1
1
|
unless Enumerable.method_defined? :sum
|
2
2
|
module Enumerable
|
3
|
-
# Sums up elements of
|
3
|
+
# Sums up elements of a collection by invoking their `+` method.
|
4
4
|
# Most useful for summing up numbers.
|
5
5
|
#
|
6
|
+
# @param default [Object] an optional default return value if there are no elements.
|
7
|
+
# It's nil by default.
|
8
|
+
# @return The sum of the elements or the default value if there are no
|
9
|
+
# elements.
|
10
|
+
#
|
6
11
|
# @example
|
7
12
|
# [1, 2, 3].sum #=> 6
|
8
13
|
# ["a", "b", "c"].sum #=> "abc"
|
@@ -9,13 +9,13 @@ unless Enumerable.method_defined? :take_last_while?
|
|
9
9
|
def take_last_while
|
10
10
|
return to_enum(:take_last_while) unless block_given?
|
11
11
|
|
12
|
-
|
12
|
+
result = []
|
13
13
|
reverse_each do |elem|
|
14
|
-
return
|
15
|
-
|
14
|
+
return result unless yield(elem)
|
15
|
+
result << elem
|
16
16
|
end
|
17
17
|
|
18
|
-
|
18
|
+
result
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
data/lib/powerpack/version.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe 'Array#
|
3
|
+
describe 'Array#butlast' do
|
4
4
|
it 'returns an array without the last element' do
|
5
|
-
expect([1, 2, 3].
|
5
|
+
expect([1, 2, 3].butlast).to eq([1, 2])
|
6
6
|
end
|
7
7
|
|
8
8
|
it 'returns [] for empty lists' do
|
9
|
-
expect([].
|
9
|
+
expect([].butlast).to be_empty
|
10
10
|
end
|
11
11
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Enumerable#frequencies' do
|
4
|
+
context 'empty collection' do
|
5
|
+
it 'evaluates to an empty hash' do
|
6
|
+
expect([].frequencies).to eql({})
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
context 'populated collection' do
|
11
|
+
it 'counts the number of ocurrences and returns a hash in the form value => count' do
|
12
|
+
expect([1, 1, :symbol, 3, 1, :symbol, 'string'].frequencies).to eql(
|
13
|
+
1 => 3,
|
14
|
+
3 => 1,
|
15
|
+
'string' => 1,
|
16
|
+
:symbol => 2
|
17
|
+
)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
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.7
|
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-
|
11
|
+
date: 2013-09-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -82,13 +82,13 @@ files:
|
|
82
82
|
- Rakefile
|
83
83
|
- lib/powerpack.rb
|
84
84
|
- lib/powerpack/array.rb
|
85
|
-
- lib/powerpack/array/
|
85
|
+
- lib/powerpack/array/butlast.rb
|
86
86
|
- lib/powerpack/array/tail.rb
|
87
87
|
- lib/powerpack/enumerable.rb
|
88
88
|
- lib/powerpack/enumerable/drop_last.rb
|
89
89
|
- lib/powerpack/enumerable/drop_last_while.rb
|
90
|
+
- lib/powerpack/enumerable/frequencies.rb
|
90
91
|
- lib/powerpack/enumerable/several.rb
|
91
|
-
- lib/powerpack/enumerable/sproduct.rb
|
92
92
|
- lib/powerpack/enumerable/sum.rb
|
93
93
|
- lib/powerpack/enumerable/take_last.rb
|
94
94
|
- lib/powerpack/enumerable/take_last_while.rb
|
@@ -105,12 +105,12 @@ files:
|
|
105
105
|
- lib/powerpack/string/strip_margin.rb
|
106
106
|
- lib/powerpack/version.rb
|
107
107
|
- powerpack.gemspec
|
108
|
-
- spec/powerpack/array/
|
108
|
+
- spec/powerpack/array/butlast_spec.rb
|
109
109
|
- spec/powerpack/array/tail_spec.rb
|
110
110
|
- spec/powerpack/enumerable/drop_last_spec.rb
|
111
111
|
- spec/powerpack/enumerable/drop_last_while_spec.rb
|
112
|
+
- spec/powerpack/enumerable/frequencies_spec.rb
|
112
113
|
- spec/powerpack/enumerable/several_spec.rb
|
113
|
-
- spec/powerpack/enumerable/sproduct_spec.rb
|
114
114
|
- spec/powerpack/enumerable/sum_spec.rb
|
115
115
|
- spec/powerpack/enumerable/take_last_spec.rb
|
116
116
|
- spec/powerpack/enumerable/take_last_while_spec.rb
|
@@ -148,12 +148,12 @@ signing_key:
|
|
148
148
|
specification_version: 4
|
149
149
|
summary: A few useful extensions to core Ruby classes.
|
150
150
|
test_files:
|
151
|
-
- spec/powerpack/array/
|
151
|
+
- spec/powerpack/array/butlast_spec.rb
|
152
152
|
- spec/powerpack/array/tail_spec.rb
|
153
153
|
- spec/powerpack/enumerable/drop_last_spec.rb
|
154
154
|
- spec/powerpack/enumerable/drop_last_while_spec.rb
|
155
|
+
- spec/powerpack/enumerable/frequencies_spec.rb
|
155
156
|
- spec/powerpack/enumerable/several_spec.rb
|
156
|
-
- spec/powerpack/enumerable/sproduct_spec.rb
|
157
157
|
- spec/powerpack/enumerable/sum_spec.rb
|
158
158
|
- spec/powerpack/enumerable/take_last_spec.rb
|
159
159
|
- spec/powerpack/enumerable/take_last_while_spec.rb
|
data/lib/powerpack/array/init.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
unless Array.method_defined? :init
|
2
|
-
class Array
|
3
|
-
# Returns a new array that has all the elements of the current but the last.
|
4
|
-
#
|
5
|
-
# @return [Array] a new array without the last element or empty array if this
|
6
|
-
# array is empty
|
7
|
-
#
|
8
|
-
# @example
|
9
|
-
# [1, 2, 3].init #=> [1, 2]
|
10
|
-
# [].init #=> []
|
11
|
-
def init
|
12
|
-
self[0...-1]
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,15 +0,0 @@
|
|
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
|
@@ -1,15 +0,0 @@
|
|
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
|