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