powerpack 0.0.6 → 0.0.7
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 +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
|