darthjee-core_ext 1.7.4 → 2.0.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/.circleci/config.yml +7 -1
- data/.gitignore +2 -0
- data/.reek.yml +3 -0
- data/ARRAY_README.md +72 -15
- data/CLASS_README.md +154 -0
- data/DATE_README.md +19 -9
- data/Dockerfile +2 -5
- data/ENUMERABLE_README.md +154 -4
- data/HASH_README.md +276 -135
- data/MATH_README.md +14 -10
- data/OBJECT_README.md +18 -35
- data/README.md +8 -4
- data/Rakefile +1 -0
- data/SYMBOL_README.md +13 -18
- data/config/rubycritc.rb +12 -0
- data/config/yardstick.yml +45 -3
- data/core_ext.gemspec +10 -8
- data/docker-compose.yml +15 -7
- data/lib/darthjee/core_ext/array.rb +17 -12
- data/lib/darthjee/core_ext/array/hash_builder.rb +20 -4
- data/lib/darthjee/core_ext/class.rb +28 -10
- data/lib/darthjee/core_ext/date.rb +1 -0
- data/lib/darthjee/core_ext/enumerable.rb +67 -30
- data/lib/darthjee/core_ext/hash.rb +4 -2
- data/lib/darthjee/core_ext/hash/cameliazable.rb +39 -8
- data/lib/darthjee/core_ext/hash/chain_fetcher.rb +17 -1
- data/lib/darthjee/core_ext/hash/changeable.rb +88 -0
- data/lib/darthjee/core_ext/hash/deep_hash_constructor.rb +127 -63
- data/lib/darthjee/core_ext/hash/deep_hash_constructor/setter.rb +112 -0
- data/lib/darthjee/core_ext/hash/key_changeable.rb +126 -54
- data/lib/darthjee/core_ext/hash/key_changer.rb +140 -40
- data/lib/darthjee/core_ext/hash/keys_sorter.rb +42 -6
- data/lib/darthjee/core_ext/hash/squasher.rb +131 -18
- data/lib/darthjee/core_ext/hash/transformable.rb +133 -41
- data/lib/darthjee/core_ext/hash/transposeable.rb +37 -8
- data/lib/darthjee/core_ext/hash/value_changer.rb +76 -36
- data/lib/darthjee/core_ext/math.rb +37 -6
- data/lib/darthjee/core_ext/numeric.rb +10 -0
- data/lib/darthjee/core_ext/object.rb +29 -0
- data/lib/darthjee/core_ext/symbol.rb +22 -2
- data/lib/darthjee/core_ext/version.rb +1 -1
- data/scripts/check_readme.sh +6 -0
- data/scripts/rubycritic.sh +10 -0
- data/spec/integration/readme/array_spec.rb +96 -0
- data/spec/integration/readme/class_spec.rb +123 -0
- data/spec/integration/readme/date_spec.rb +20 -0
- data/spec/integration/readme/enumerable_spec.rb +87 -0
- data/spec/integration/readme/hash_spec.rb +391 -0
- data/spec/integration/readme/math_spec.rb +31 -0
- data/spec/integration/readme/object_spec.rb +49 -0
- data/spec/integration/readme/symbol_spec.rb +29 -0
- data/spec/integration/yard/darthjee/core_ext/enumerable_spec.rb +24 -4
- data/spec/integration/yard/darthjee/core_ext/hash/cameliazable_spec.rb +11 -0
- data/spec/integration/yard/darthjee/core_ext/hash/changeable_spec.rb +68 -0
- data/spec/integration/yard/darthjee/core_ext/hash/deep_hash_constructor/setter_spec.rb +34 -0
- data/spec/integration/yard/darthjee/core_ext/hash/deep_hash_constructor_spec.rb +65 -0
- data/spec/integration/yard/darthjee/core_ext/hash/key_changeable_spec.rb +8 -0
- data/spec/integration/yard/darthjee/core_ext/hash/key_changer_spec.rb +59 -0
- data/spec/integration/yard/darthjee/core_ext/hash/keys_sorter_spec.rb +25 -0
- data/spec/integration/yard/darthjee/core_ext/hash/squasher_spec.rb +60 -0
- data/spec/integration/yard/darthjee/core_ext/hash/transformable_spec.rb +66 -36
- data/spec/integration/yard/darthjee/core_ext/hash/transposeable_spec.rb +35 -0
- data/spec/integration/yard/darthjee/core_ext/hash_spec.rb +13 -2
- data/spec/integration/yard/darthjee/core_ext/math_spec.rb +28 -0
- data/spec/integration/yard/darthjee/core_ext/numeric_spec.rb +11 -0
- data/spec/integration/yard/darthjee/core_ext/object_spec.rb +47 -0
- data/spec/integration/yard/darthjee/core_ext/symbol_spec.rb +17 -0
- data/spec/lib/darthjee/core_ext/hash/deep_hash_constructor/setter_spec.rb +64 -0
- data/spec/lib/darthjee/core_ext/hash/deep_hash_constructor_spec.rb +16 -156
- data/spec/lib/darthjee/core_ext/hash/keys_sorter_spec.rb +5 -4
- data/spec/lib/darthjee/core_ext/hash/squasher_spec.rb +8 -2
- data/spec/lib/darthjee/core_ext/hash/value_changer_spec.rb +4 -12
- data/spec/lib/hash_spec.rb +92 -146
- data/spec/lib/object_spec.rb +32 -0
- data/spec/support/models/client.rb +22 -0
- data/spec/support/shared_examples/hash/deep_hash.rb +166 -0
- data/spec/support/shared_examples/hash/hash_squasher.rb +54 -9
- data/spec/support/shared_examples/hash/keys_sorter.rb +266 -6
- metadata +70 -8
- data/lib/darthjee/core_ext/hash/to_hash_mapper.rb +0 -25
- data/spec/lib/darthjee/core_ext/hash/to_hash_mapper_spec.rb +0 -11
@@ -1,11 +1,42 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module
|
4
|
-
|
5
|
-
|
3
|
+
module Darthjee
|
4
|
+
module CoreExt
|
5
|
+
# @api public
|
6
|
+
module Math
|
7
|
+
# Calculates avarage from a series of values
|
8
|
+
#
|
9
|
+
# @overload average(values)
|
10
|
+
# @param values [::Array] list of values
|
11
|
+
#
|
12
|
+
# @overload average(values)
|
13
|
+
# @param values [::Hash] hash of values and its weights
|
14
|
+
#
|
15
|
+
# @return [::Float]
|
16
|
+
#
|
17
|
+
# @example Average of array
|
18
|
+
# values = [1,2,3,4]
|
19
|
+
#
|
20
|
+
# Math.average(values) # returns 2.5
|
21
|
+
#
|
22
|
+
# @example Average of hash
|
23
|
+
# values = { 1 => 3, 7 => 1 }
|
24
|
+
#
|
25
|
+
# Math.average(values) # returns 2.5
|
26
|
+
def average(values)
|
27
|
+
if values.is_a?(Hash)
|
28
|
+
weight_sum = values.values.sum
|
29
|
+
values = values.map { |value, weight| value * weight }
|
30
|
+
else
|
31
|
+
weight_sum = values.length
|
32
|
+
end
|
6
33
|
|
7
|
-
|
8
|
-
|
9
|
-
end
|
34
|
+
values.sum / weight_sum.to_f
|
35
|
+
end
|
36
|
+
end
|
10
37
|
end
|
11
38
|
end
|
39
|
+
|
40
|
+
module Math
|
41
|
+
extend Darthjee::CoreExt::Math
|
42
|
+
end
|
@@ -2,7 +2,17 @@
|
|
2
2
|
|
3
3
|
module Darthjee
|
4
4
|
module CoreExt
|
5
|
+
# @api public
|
5
6
|
module Numeric
|
7
|
+
# Returns the percentage over total
|
8
|
+
#
|
9
|
+
# @param total [::Numeric] total over which to calculate
|
10
|
+
# the percentage
|
11
|
+
#
|
12
|
+
# @return [::Float]
|
13
|
+
#
|
14
|
+
# @example
|
15
|
+
# 10.percent_of(30) # returns 33.33333333333333
|
6
16
|
def percent_of(total)
|
7
17
|
return Float::INFINITY if total&.zero?
|
8
18
|
(to_f / total.to_f) * 100.0
|
@@ -2,12 +2,41 @@
|
|
2
2
|
|
3
3
|
module Darthjee
|
4
4
|
module CoreExt
|
5
|
+
# @api public
|
5
6
|
module Object
|
7
|
+
# Checks if object is any of the given classes
|
8
|
+
#
|
9
|
+
# @param classes [::Array<::Class>] classes to be checked
|
10
|
+
# against
|
11
|
+
#
|
12
|
+
# @return [::TrueClass,::FalseClass]
|
13
|
+
#
|
14
|
+
# @example
|
15
|
+
# object = [1, 2, 3]
|
16
|
+
#
|
17
|
+
# object.is_any?(Hash, Class) # false
|
18
|
+
# object.is_any?(Hash, Array) # true
|
19
|
+
# object.is_any?(Enumerable, Class) # true
|
6
20
|
def is_any?(*classes)
|
7
21
|
classes.any? do |clazz|
|
8
22
|
is_a?(clazz)
|
9
23
|
end
|
10
24
|
end
|
25
|
+
|
26
|
+
# Checks if object is evaluated to true
|
27
|
+
#
|
28
|
+
# @return [::TrueClass,::FalseClass]
|
29
|
+
#
|
30
|
+
# @example
|
31
|
+
# nil.trueful? # returns false
|
32
|
+
# [].trueful? # returns true
|
33
|
+
# {}.trueful? # returns true
|
34
|
+
# "".trueful? # returns true
|
35
|
+
def trueful?
|
36
|
+
# rubocop: disable Style/DoubleNegation
|
37
|
+
!!self
|
38
|
+
# rubocop: enable Style/DoubleNegation
|
39
|
+
end
|
11
40
|
end
|
12
41
|
end
|
13
42
|
end
|
@@ -2,11 +2,31 @@
|
|
2
2
|
|
3
3
|
module Darthjee
|
4
4
|
module CoreExt
|
5
|
+
# @api public
|
6
|
+
#
|
7
|
+
# @author darthjee
|
5
8
|
module Symbol
|
6
|
-
|
7
|
-
|
9
|
+
# Creates new symbol camelized
|
10
|
+
#
|
11
|
+
# @param first_letter [::Symbol] type of first letter
|
12
|
+
#
|
13
|
+
# @return [::Symbol]
|
14
|
+
#
|
15
|
+
# @example
|
16
|
+
# :the_symbol.camelize # returns :TheSymbol
|
17
|
+
def camelize(first_letter = :upper)
|
18
|
+
to_s.camelize(first_letter).to_sym
|
8
19
|
end
|
9
20
|
|
21
|
+
# The reverse of {#camelize}
|
22
|
+
#
|
23
|
+
# Makes an underscored, lowercase form from
|
24
|
+
# the expression in the Symbol
|
25
|
+
#
|
26
|
+
# @return [::Symbol]
|
27
|
+
#
|
28
|
+
# @example
|
29
|
+
# :theSymbol.camelize # returns :the_symbol
|
10
30
|
def underscore
|
11
31
|
to_s.underscore.to_sym
|
12
32
|
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
DIFF_LIST=$(git diff --name-only $CIRCLE_SHA1 $(git merge-base $CIRCLE_SHA1 origin/master) | grep "^lib/")
|
4
|
+
|
5
|
+
if [ ! -z "$DIFF_LIST" ]; then
|
6
|
+
mkdir -p tmp/rubycritic/compare
|
7
|
+
bundle exec rubycritic --format console --branch origin/master -t 0 $DIFF_LIST
|
8
|
+
else
|
9
|
+
echo "No changes detected. Skipping rubycritic..."
|
10
|
+
fi
|
@@ -0,0 +1,96 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
describe Array do
|
4
|
+
describe 'readme' do
|
5
|
+
describe '#as_hash' do
|
6
|
+
subject(:array) { [10, 20, 30, 40] }
|
7
|
+
|
8
|
+
let(:keys) { %i[ten twenty thirty fourty] }
|
9
|
+
|
10
|
+
it 'pairs keys and values' do
|
11
|
+
expect(array.as_hash(keys))
|
12
|
+
.to eq(ten: 10, twenty: 20, thirty: 30, fourty: 40)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#average' do
|
17
|
+
subject(:array) { [1, 2, 3, 4] }
|
18
|
+
|
19
|
+
it 'calculates the average' do
|
20
|
+
expect(array.average).to eq(2.5)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe '#chain_map' do
|
25
|
+
subject(:array) { %i[a long_name sym] }
|
26
|
+
|
27
|
+
it 'maps calling the methods' do
|
28
|
+
expect(array.chain_map(:to_s, :size, :to_s))
|
29
|
+
.to eq(%w[1 9 3])
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'when giving a block' do
|
33
|
+
let(:mapped) do
|
34
|
+
array.chain_map(:to_s, :size) { |v| "final: #{v}" }
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'maps calling the methods' do
|
38
|
+
expect(mapped)
|
39
|
+
.to eq(['final: 1', 'final: 9', 'final: 3'])
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe 'mapk' do
|
45
|
+
let(:array) do
|
46
|
+
[
|
47
|
+
{ a: { b: 1 }, b: 2 },
|
48
|
+
{ a: { b: 3 }, b: 4 }
|
49
|
+
]
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'maps fetching keys' do
|
53
|
+
expect(array.mapk(:a, :b)).to eq([1, 3])
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe '#procedural_join' do
|
58
|
+
subject(:array) { [1, 2, -3, -4, 5] }
|
59
|
+
|
60
|
+
let(:mapper) { proc { |value| value.to_f.to_s } }
|
61
|
+
let(:string) do
|
62
|
+
array.procedural_join(mapper) do |_previous, nexte|
|
63
|
+
nexte.positive? ? ' +' : ' '
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'joins with grace' do
|
68
|
+
expect(string).to eq('1.0 +2.0 -3.0 -4.0 +5.0')
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe '#random' do
|
73
|
+
let(:array) { [10, 20, 30] }
|
74
|
+
|
75
|
+
it 'returns a random element' do
|
76
|
+
expect(array).to include(array.random)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe '#random!' do
|
81
|
+
let(:array) { [10, 20, 30] }
|
82
|
+
|
83
|
+
it 'returns a random element' do
|
84
|
+
expect(array.dup).to include(array.random!)
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'removes an element from array' do
|
88
|
+
expect { array.random! }.to change(array, :size).by(-1)
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'no longer includes removed element' do
|
92
|
+
expect(array).not_to include(array.random!)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
|
3
|
+
describe Class do
|
4
|
+
describe 'readme' do
|
5
|
+
let(:instance) { klass.new }
|
6
|
+
let(:other) { klass.new }
|
7
|
+
|
8
|
+
describe '#default_value' do
|
9
|
+
let(:klass) do
|
10
|
+
Class.new do |clazz|
|
11
|
+
clazz.send(:default_value, :name, 'John')
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'adds method with default value' do
|
16
|
+
expect(instance.name)
|
17
|
+
.to eq('John')
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'returns the same instance' do
|
21
|
+
expect(instance.name)
|
22
|
+
.to be_equal(other.name)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '#default_values' do
|
27
|
+
let(:klass) do
|
28
|
+
Class.new do |clazz|
|
29
|
+
clazz.send(
|
30
|
+
:default_values, :name, :nick_name, 'John'
|
31
|
+
)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'adds methods with default value' do
|
36
|
+
expect(instance.name)
|
37
|
+
.to eq('John')
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'adds methods with default value on both methods' do
|
41
|
+
expect(instance.nick_name)
|
42
|
+
.to eq('John')
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'returns the same instance' do
|
46
|
+
expect(instance.name)
|
47
|
+
.to be_equal(other.name)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe '#default_reader' do
|
52
|
+
let(:klass) do
|
53
|
+
Class.new do |clazz|
|
54
|
+
clazz.send(:attr_writer, :name)
|
55
|
+
clazz.send(:default_reader, :name, 'John Doe')
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'adds method returning default value' do
|
60
|
+
expect(instance.name).to eq('John Doe')
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'when value is changed' do
|
64
|
+
before do
|
65
|
+
instance.name = 'Joe'
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'returns new value' do
|
69
|
+
expect(instance.name).to eq('Joe')
|
70
|
+
end
|
71
|
+
|
72
|
+
context 'when it is changed to nil' do
|
73
|
+
before do
|
74
|
+
instance.name = nil
|
75
|
+
end
|
76
|
+
|
77
|
+
it { expect(instance.name).to be_nil }
|
78
|
+
end
|
79
|
+
|
80
|
+
context 'when another instance calls the method' do
|
81
|
+
it 'does not change the result of another instance' do
|
82
|
+
expect(instance.name).not_to eq(other.name)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe '#default_readers' do
|
89
|
+
let(:klass) do
|
90
|
+
Class.new do |clazz|
|
91
|
+
clazz.send(:attr_writer, :cars, :houses)
|
92
|
+
clazz.send(:default_readers, :cars, :houses, 'none')
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'adds method returning default value' do
|
97
|
+
expect(instance.cars).to eq('none')
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'returns the same instance for both methods' do
|
101
|
+
expect(instance.cars).to be_equal(instance.houses)
|
102
|
+
end
|
103
|
+
|
104
|
+
context 'when setting cars' do
|
105
|
+
before { instance.cars = ['volvo'] }
|
106
|
+
|
107
|
+
it 'sets the value' do
|
108
|
+
expect(instance.cars).to eq(['volvo'])
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'does not change the value on the other method' do
|
112
|
+
expect(instance.houses).to eq('none')
|
113
|
+
end
|
114
|
+
|
115
|
+
context 'when setting to nil' do
|
116
|
+
before { instance.cars = nil }
|
117
|
+
|
118
|
+
it { expect(instance.cars).to be_nil }
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Date do
|
6
|
+
describe 'readme' do
|
7
|
+
subject(:date) { described_class.new(2106, 10, 11) }
|
8
|
+
|
9
|
+
let(:future) { date + 1.year }
|
10
|
+
let(:past) { date - 1.year }
|
11
|
+
|
12
|
+
it 'returns days between' do
|
13
|
+
expect(date.days_between(future)).to eq(365)
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'returns positive' do
|
17
|
+
expect(date.days_between(past)).to eq(365)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
describe Enumerable do
|
4
|
+
describe 'readme' do
|
5
|
+
describe '#clean' do
|
6
|
+
let(:array) { [1, [], nil, {}, '', hash] }
|
7
|
+
let(:hash) { { b: [], c: nil, d: {}, e: '' } }
|
8
|
+
|
9
|
+
it 'cleans array' do
|
10
|
+
expect(array.clean).to eq([1])
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#clean!' do
|
15
|
+
let(:hash) do
|
16
|
+
{
|
17
|
+
a: 1,
|
18
|
+
b: [],
|
19
|
+
c: nil,
|
20
|
+
d: {},
|
21
|
+
e: '',
|
22
|
+
f: {
|
23
|
+
b: [],
|
24
|
+
c: nil,
|
25
|
+
d: {},
|
26
|
+
e: ''
|
27
|
+
}
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'cleans array' do
|
32
|
+
expect { hash.clean! }.to change { hash }
|
33
|
+
.to(a: 1)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '#map_and_find' do
|
38
|
+
let(:ids) { [10, 21, 30, 31, 51, 55] }
|
39
|
+
let(:client) { Client.new(existing_ids) }
|
40
|
+
let(:existing_ids) { [1, 11, 21, 31, 41, 51] }
|
41
|
+
let(:request) { client.method(:request) }
|
42
|
+
|
43
|
+
it 'returns the value found' do
|
44
|
+
expect(ids.map_and_find(&request)).to eq(id: 21)
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'does not perform all requests all' do
|
48
|
+
expect { ids.map_and_find(&request) }
|
49
|
+
.to change(client, :requested)
|
50
|
+
.from([]).to([10, 21])
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe '#map_and_select' do
|
55
|
+
let(:ids) { [10, 21, 30, 31, 51, 55] }
|
56
|
+
let(:client) { Client.new(existing_ids) }
|
57
|
+
let(:existing_ids) { [1, 11, 21, 31, 41, 51] }
|
58
|
+
let(:request) { client.method(:request) }
|
59
|
+
|
60
|
+
it 'returns all values found' do
|
61
|
+
expect(ids.map_and_select(&request))
|
62
|
+
.to eq([{ id: 21 }, { id: 31 }, { id: 51 }])
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe '#map_to_hash' do
|
67
|
+
let(:ids) { [10, 21, 30, 31, 51, 55] }
|
68
|
+
let(:client) { Client.new(existing_ids) }
|
69
|
+
let(:existing_ids) { [1, 11, 21, 31, 41, 51] }
|
70
|
+
let(:request) { client.method(:request) }
|
71
|
+
let(:expected) do
|
72
|
+
{
|
73
|
+
10 => nil,
|
74
|
+
21 => { id: 21 },
|
75
|
+
30 => nil,
|
76
|
+
31 => { id: 31 },
|
77
|
+
51 => { id: 51 },
|
78
|
+
55 => nil
|
79
|
+
}
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'returns a hash with the mapped' do
|
83
|
+
expect(ids.map_to_hash(&request)).to eq(expected)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|