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 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