corefines 1.8.0 → 1.9.0
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/CHANGELOG.adoc +7 -1
- data/LICENSE +1 -1
- data/README.adoc +3 -2
- data/lib/corefines/enumerable.rb +39 -0
- data/lib/corefines/version.rb +1 -1
- data/spec/enumerable/map_by_spec.rb +28 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eac6f98f15a93c813142d0b65ce5864599e7d585
|
4
|
+
data.tar.gz: a83d450c24803a0ff5363c3f4eab79a94157cbaf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 31fba38ae1940a1902a25792db99b61a828fceffdad0f8afaebe5e4c275f55ec451c9e83df2d0b2b29868c90b2522da72c566a3922b0eb06698f5ece3a744d32
|
7
|
+
data.tar.gz: 59f91237d105623b8483882c1e3abd1c07d4134ff7211f4de3913fcc340e77724eca37eeba895fd21573a7ff97a58a0d3bca4aa82e5671d234cd63e154b4eb23
|
data/CHANGELOG.adoc
CHANGED
@@ -3,9 +3,15 @@
|
|
3
3
|
:doc-base-url: http://www.rubydoc.info/github/jirutka/corefines/Corefines
|
4
4
|
:issue-uri: {repo-uri}/issues
|
5
5
|
|
6
|
+
|
7
|
+
== 1.9.0 (2016-02-03)
|
8
|
+
|
9
|
+
* Add new refinement {doc-base-url}/Enumerable/MapBy[Enumerable#map_by].
|
10
|
+
|
11
|
+
|
6
12
|
== 1.8.0 (2015-07-06)
|
7
13
|
|
8
|
-
* Add new refinement {doc-base-url}/Class/
|
14
|
+
* Add new refinement {doc-base-url}/Class/Descendants[Class#descendants].
|
9
15
|
|
10
16
|
|
11
17
|
== 1.7.0 (2015-07-05)
|
data/LICENSE
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
The MIT License
|
2
2
|
|
3
|
-
Copyright 2015 Jakub Jirutka <jakub@jirutka.cz>.
|
3
|
+
Copyright 2015-2016 Jakub Jirutka <jakub@jirutka.cz>.
|
4
4
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
data/README.adoc
CHANGED
@@ -41,12 +41,12 @@ TODO
|
|
41
41
|
Add this line to your application’s Gemfile:
|
42
42
|
|
43
43
|
[source]
|
44
|
-
gem 'corefines', '~> 1.
|
44
|
+
gem 'corefines', '~> 1.9'
|
45
45
|
|
46
46
|
or to your gemspec:
|
47
47
|
|
48
48
|
[source]
|
49
|
-
s.add_runtime_dependency 'corefines', '~> 1.
|
49
|
+
s.add_runtime_dependency 'corefines', '~> 1.9'
|
50
50
|
|
51
51
|
and then execute:
|
52
52
|
|
@@ -138,6 +138,7 @@ Not ideal indeed, but probably the best of what we can achieve.
|
|
138
138
|
* {doc-base-url}/Enumerable[Enumerable]
|
139
139
|
** {doc-base-url}/Enumerable/IndexBy[#index_by]
|
140
140
|
** {doc-base-url}/Enumerable/Many[#many?]
|
141
|
+
** {doc-base-url}/Enumerable/MapBy[#map_by]
|
141
142
|
** {doc-base-url}/Enumerable/MapSend[#map_send]
|
142
143
|
** {doc-base-url}/Enumerable/MapTo[#map_to]
|
143
144
|
* {doc-base-url}/Hash[Hash]
|
data/lib/corefines/enumerable.rb
CHANGED
@@ -77,6 +77,45 @@ module Corefines
|
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
80
|
+
##
|
81
|
+
# @!method map_by(&block)
|
82
|
+
# Converts enumerable into a Hash, iterating over each element where the
|
83
|
+
# provided block must return an array of two elements: a key and a value
|
84
|
+
# to be added into an array that corresponds to that key.
|
85
|
+
#
|
86
|
+
# It's similar to {::Enumerable#group_by}, but allows to map the value
|
87
|
+
# being added into a group.
|
88
|
+
#
|
89
|
+
# @example
|
90
|
+
# a = [1, 2, 3, 4, 5]
|
91
|
+
# a.map_by { |e| [e % 2, e + 1] }
|
92
|
+
# #=> { 0 => [3, 5], 1 => [2, 4, 6] }
|
93
|
+
#
|
94
|
+
# @example
|
95
|
+
# h = { "Lucy" => 86, "Ruby" => 98, "Drew" => 94, "Lisa" => 54 }
|
96
|
+
# h.map_by { |k, v| [score(v), k] }
|
97
|
+
# #=> { "A" => ["Ruby", "Drew"], "B" => ["Lucy"], "F" => ["Lisa"] }
|
98
|
+
#
|
99
|
+
# @yield [obj] gives each element to the block.
|
100
|
+
# @yieldreturn [Array] an array with the key and the value.
|
101
|
+
# @return [Hash]
|
102
|
+
#
|
103
|
+
module MapBy
|
104
|
+
Support.classes_including_module(::Enumerable) do |klass|
|
105
|
+
|
106
|
+
refine klass do
|
107
|
+
def map_by
|
108
|
+
res = {}
|
109
|
+
each do |e|
|
110
|
+
k, v = yield(*e)
|
111
|
+
(res[k] ||= []) << v
|
112
|
+
end
|
113
|
+
res
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
80
119
|
##
|
81
120
|
# @!method map_send(method_name, *args, &block)
|
82
121
|
# Sends a message to each element and collects the result.
|
data/lib/corefines/version.rb
CHANGED
@@ -0,0 +1,28 @@
|
|
1
|
+
describe Enumerable do
|
2
|
+
using Corefines::Enumerable::map_by
|
3
|
+
|
4
|
+
describe '#map_by' do
|
5
|
+
|
6
|
+
context Array do
|
7
|
+
let(:input) { [1, 2, 3, 4, 5] }
|
8
|
+
let(:expected) { { 0 => [3, 5], 1 => [2, 4, 6] } }
|
9
|
+
|
10
|
+
it "returns hash with the elements grouped and mapped by result of the block" do
|
11
|
+
expect(input.map_by { |e| [e % 2, e + 1] }).to eq expected
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context Hash do
|
16
|
+
let(:input) { { "Lucy" => 86, "Ruby" => 98, "Drew" => 94, "Lisa" => 54 } }
|
17
|
+
let(:expected) { { "A" => ["Ruby", "Drew"], "B" => ["Lucy"], "F" => ["Lisa"] } }
|
18
|
+
|
19
|
+
it "returns hash with the elements grouped and mapped by result of the block" do
|
20
|
+
expect(input.map_by { |k, v| [score(v), k] }).to eq expected
|
21
|
+
end
|
22
|
+
|
23
|
+
def score(n)
|
24
|
+
n < 70 ? 'F' : n < 80 ? 'C' : n < 90 ? 'B' : 'A'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: corefines
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jakub Jirutka
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-02-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: asciidoctor
|
@@ -127,6 +127,7 @@ files:
|
|
127
127
|
- spec/class/descendants_spec.rb
|
128
128
|
- spec/enumerable/index_by_spec.rb
|
129
129
|
- spec/enumerable/many_spec.rb
|
130
|
+
- spec/enumerable/map_by_spec.rb
|
130
131
|
- spec/enumerable/map_send_spec.rb
|
131
132
|
- spec/enumerable/map_to_spec.rb
|
132
133
|
- spec/hash/compact_spec.rb
|
@@ -182,7 +183,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
182
183
|
version: '0'
|
183
184
|
requirements: []
|
184
185
|
rubyforge_project:
|
185
|
-
rubygems_version: 2.4.5
|
186
|
+
rubygems_version: 2.4.5.1
|
186
187
|
signing_key:
|
187
188
|
specification_version: 4
|
188
189
|
summary: A collection of refinements for Ruby core classes.
|