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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a28a098514fb19fbe308f8fe212c86ba7752cf25
4
- data.tar.gz: 50ab2c8032e910bb0ca0f62e4303c5df92075e57
3
+ metadata.gz: 1c7a89e31c15ac1b39a4806f126dbafd5cfe9991
4
+ data.tar.gz: f779a0d32f87717f9353a0b3ccd3d48d9177c3b4
5
5
  SHA512:
6
- metadata.gz: add34af61d1e814599b8d740c0a482da9805b89e022e2ace317803fc46e25829f27b15bcf3f59c715011ecd062f150fbfecc7cb8386858e318fd63e40c18ce05
7
- data.tar.gz: 6c3810f948ea1546912b252067b04c11979349f224f41cb9551face339d27a84fbd68bfe2bb2fa85976546d6896606bfcd1b268b001023942216ba8180cfbe84
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
- * [#init](http://rdoc.info/github/bbatsov/powerpack/Array#init-instance_method)
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)
@@ -1,2 +1,2 @@
1
- require_relative 'array/init'
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
@@ -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'
@@ -2,6 +2,7 @@ unless Enumerable.method_defined? :drop_last
2
2
  module Enumerable
3
3
  # Drops the last n elements of an enumerable.
4
4
  #
5
+ # @param n [Fixnum] the number of elements to drop
5
6
  # @return [Array] an array containing the remaining elements
6
7
  #
7
8
  # @example
@@ -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
- ary = []
12
+ result = []
13
13
  dropping = true
14
14
  reverse_each do |obj|
15
- ary << obj unless dropping &&= yield(obj)
15
+ result.unshift(obj) unless dropping &&= yield(obj)
16
16
  end
17
17
 
18
- ary.reverse!
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 an enum by invoking their + method.
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"
@@ -2,6 +2,7 @@ unless Enumerable.method_defined? :take_last
2
2
  module Enumerable
3
3
  # Take the last n elements of an enumerable.
4
4
  #
5
+ # @param n [Fixnum] the number of elements to take
5
6
  # @return [Array] an array containing the requested elements
6
7
  #
7
8
  # @example
@@ -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
- array = []
12
+ result = []
13
13
  reverse_each do |elem|
14
- return array unless yield(elem)
15
- array << elem
14
+ return result unless yield(elem)
15
+ result << elem
16
16
  end
17
17
 
18
- array
18
+ result
19
19
  end
20
20
  end
21
21
  end
@@ -1,3 +1,3 @@
1
1
  module Powerpack
2
- VERSION = '0.0.6'
2
+ VERSION = '0.0.7'
3
3
  end
@@ -1,11 +1,11 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'Array#init' do
3
+ describe 'Array#butlast' do
4
4
  it 'returns an array without the last element' do
5
- expect([1, 2, 3].init).to eq([1, 2])
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([].init).to be_empty
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.6
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-08-26 00:00:00.000000000 Z
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/init.rb
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/init_spec.rb
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/init_spec.rb
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
@@ -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