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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c3390d88d1c5a0cfe6f53e3ae8ad15c4e60646d6
4
- data.tar.gz: 80a7c32146541840c31b1a3eee54b1167a07795e
3
+ metadata.gz: a28a098514fb19fbe308f8fe212c86ba7752cf25
4
+ data.tar.gz: 50ab2c8032e910bb0ca0f62e4303c5df92075e57
5
5
  SHA512:
6
- metadata.gz: 29545c9631dd461cf8688c963cc0aebc2f626a05f2f6bc183997a6c1d7d2fa7c8aa80b5cd795cdf64d8ded5b77f2a804927d830622667c4bbf3c0eadc6c918ea
7
- data.tar.gz: 567070c2792eaa200c9844e5872a2207e6b86fd49d478c363f0d1e016defc3c6b465c9057611fcabd561c0bf587acfc8e5767c5584c0f8929c82233e871b8fd8
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)
@@ -1,5 +1,7 @@
1
1
  require 'powerpack/version'
2
2
 
3
+ require 'powerpack/enumerable'
4
+
3
5
  require 'powerpack/hash'
4
6
 
5
7
  require 'powerpack/numeric'
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Powerpack
2
- VERSION = '0.0.5'
2
+ VERSION = '0.0.6'
3
3
  end
@@ -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,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Enumerable#drop_last_while' do
4
+ it 'drops the last elements while a pred is true' do
5
+ expect([1, 2, 3, 4, 6].drop_last_while(&:even?)).to eq([1, 2, 3])
6
+ end
7
+ 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
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Enumerable#take_last_while' do
4
+ it 'takes the last elements while a pred is true' do
5
+ expect([1, 2, 3, 4, 6].take_last_while(&:even?)).to eq([6, 4])
6
+ end
7
+ 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.5
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-24 00:00:00.000000000 Z
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