invoca-utils 0.4.0 → 0.5.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/.github/workflows/pipeline.yml +20 -0
- data/.gitignore +1 -3
- data/.rspec +3 -0
- data/.ruby-version +1 -1
- data/.tool-versions +1 -0
- data/Appraisals +13 -0
- data/CHANGELOG.md +10 -0
- data/Gemfile +9 -16
- data/Gemfile.lock +39 -48
- data/Rakefile +9 -6
- data/gemfiles/activesupport_5.gemfile +12 -0
- data/gemfiles/activesupport_5.gemfile.lock +58 -0
- data/gemfiles/activesupport_6.gemfile +12 -0
- data/gemfiles/activesupport_6.gemfile.lock +59 -0
- data/gemfiles/activesupport_7.gemfile +12 -0
- data/gemfiles/activesupport_7.gemfile.lock +57 -0
- data/invoca-utils.gemspec +18 -6
- data/lib/invoca/utils/exceptions.rb +5 -3
- data/lib/invoca/utils/version.rb +1 -1
- data/{test → spec}/helpers/constant_overrides.rb +0 -0
- data/spec/spec_helper.rb +16 -0
- data/spec/unit/array_spec.rb +20 -0
- data/spec/unit/enumerable_spec.rb +80 -0
- data/{test/unit/exceptions_test.rb → spec/unit/exceptions_spec.rb} +17 -17
- data/spec/unit/guaranteed_utf8_string_spec.rb +260 -0
- data/spec/unit/hash_spec.rb +81 -0
- data/spec/unit/hash_with_indifferent_access_spec.rb +100 -0
- data/spec/unit/map_compact_spec.rb +25 -0
- data/{test/unit/module_test.rb → spec/unit/module_spec.rb} +4 -4
- data/spec/unit/multi_sender_spec.rb +54 -0
- data/{test/unit/stable_sort_test.rb → spec/unit/stable_sort_spec.rb} +14 -14
- data/spec/unit/time_calculations_spec.rb +39 -0
- data/{test/unit/utils_test.rb → spec/unit/utils_spec.rb} +14 -14
- metadata +59 -37
- data/.jenkins/Jenkinsfile +0 -50
- data/.jenkins/ruby_build_pod.yml +0 -19
- data/test/test_helper.rb +0 -14
- data/test/unit/array_test.rb +0 -20
- data/test/unit/enumerable_test.rb +0 -80
- data/test/unit/guaranteed_utf8_string_test.rb +0 -263
- data/test/unit/hash_test.rb +0 -81
- data/test/unit/hash_with_indifferent_access_test.rb +0 -100
- data/test/unit/map_compact_test.rb +0 -25
- data/test/unit/multi_sender_test.rb +0 -56
- data/test/unit/time_calculations_test.rb +0 -39
@@ -1,38 +1,38 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative '../
|
3
|
+
require_relative '../spec_helper'
|
4
4
|
|
5
|
-
|
5
|
+
describe Enumerable do
|
6
6
|
context "#stable_sort_by" do
|
7
|
-
|
7
|
+
it "preserve the original order if all sort the same" do
|
8
8
|
list_to_sort = [:b, :d, :c, :a, :e, :f]
|
9
9
|
|
10
|
-
|
10
|
+
expect(list_to_sort.stable_sort_by { |c| 0 }).to eq(list_to_sort)
|
11
11
|
end
|
12
12
|
|
13
|
-
|
13
|
+
it "order by keys first and then position" do
|
14
14
|
list_to_sort = [:b, :d, :c, :a, :e, :f]
|
15
15
|
order = [:a, :b, :c]
|
16
16
|
|
17
17
|
result = list_to_sort.stable_sort_by { |c| order.index(c) || order.length }
|
18
|
-
|
18
|
+
expect(result).to eq([:a, :b, :c, :d, :e, :f])
|
19
19
|
end
|
20
20
|
|
21
|
-
|
21
|
+
it "order by keys only if needed" do
|
22
22
|
list_to_sort = [:b, :d, :c, :a, :e, :f]
|
23
23
|
result = list_to_sort.stable_sort_by { |c| c.to_s }
|
24
|
-
|
24
|
+
expect(result).to eq([:a, :b, :c, :d, :e, :f])
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
28
|
context "stable_sort" do
|
29
|
-
|
29
|
+
it "preserve the original order if all sort the same" do
|
30
30
|
list_to_sort = [:b, :d, :c, :a, :e, :f]
|
31
31
|
|
32
|
-
|
32
|
+
expect(list_to_sort.stable_sort { |first, second| 0 }).to eq(list_to_sort)
|
33
33
|
end
|
34
34
|
|
35
|
-
|
35
|
+
it "order by keys first and then position" do
|
36
36
|
list_to_sort = [:b, :d, :c, :a, :e, :f]
|
37
37
|
order = [:a, :b, :c]
|
38
38
|
|
@@ -42,13 +42,13 @@ class StableSortTest < Minitest::Test
|
|
42
42
|
first_pos <=> second_pos
|
43
43
|
end
|
44
44
|
|
45
|
-
|
45
|
+
expect(result).to eq([:a, :b, :c, :d, :e, :f])
|
46
46
|
end
|
47
47
|
|
48
|
-
|
48
|
+
it "order by keys only if needed" do
|
49
49
|
list_to_sort = [:b, :d, :c, :a, :e, :f]
|
50
50
|
result = list_to_sort.stable_sort{ |first, second| first.to_s <=> second.to_s }
|
51
|
-
|
51
|
+
expect(result).to eq([:a, :b, :c, :d, :e, :f])
|
52
52
|
end
|
53
53
|
end
|
54
54
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../spec_helper'
|
4
|
+
|
5
|
+
describe Time do
|
6
|
+
context "beginning_of_hour" do
|
7
|
+
Time.zone = 'Pacific Time (US & Canada)'
|
8
|
+
[
|
9
|
+
Time.now,
|
10
|
+
Time.zone.now,
|
11
|
+
Time.local(2009),
|
12
|
+
Time.local(2009,3,4,5),
|
13
|
+
Time.local(2001,12,31,23,59),
|
14
|
+
Time.local(1970,1,1)
|
15
|
+
].each_with_index do |time, index|
|
16
|
+
it "give back a time with no minutes, seconds, or msec: #{time} (#{index})" do
|
17
|
+
t = time.beginning_of_hour
|
18
|
+
expect(time.year).to eq(t.year)
|
19
|
+
expect(time.month).to eq(t.month)
|
20
|
+
expect(time.day).to eq(t.day)
|
21
|
+
expect(time.hour).to eq(t.hour)
|
22
|
+
expect(t.min).to eq(0)
|
23
|
+
expect(t.sec).to eq(0)
|
24
|
+
expect(t.usec).to eq(0)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "end_of_day_whole_sec" do
|
30
|
+
it "return the end of day with whole_sec" do
|
31
|
+
t = Time.now
|
32
|
+
end_of_day = t.end_of_day
|
33
|
+
end_whole_sec = t.end_of_day_whole_sec
|
34
|
+
expect(end_whole_sec.usec).to eq(0.0)
|
35
|
+
expect(end_whole_sec.to_i).to eq(end_of_day.to_i)
|
36
|
+
expect(end_whole_sec.sec).to eq(end_of_day.sec)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -1,49 +1,49 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative '../
|
3
|
+
require_relative '../spec_helper'
|
4
4
|
require_relative '../helpers/constant_overrides'
|
5
5
|
|
6
|
-
|
6
|
+
describe Invoca::Utils do
|
7
7
|
include ConstantOverrides
|
8
8
|
|
9
9
|
context "global namespace issues" do
|
10
|
-
|
10
|
+
before do
|
11
11
|
setup_constant_overrides
|
12
12
|
end
|
13
13
|
|
14
|
-
|
14
|
+
after do
|
15
15
|
cleanup_constant_overrides
|
16
16
|
end
|
17
17
|
|
18
|
-
|
19
|
-
|
18
|
+
it "define Diff as Invoca::Utils::Diff" do
|
19
|
+
expect(Invoca::Utils::Diff).to eq(::Diff)
|
20
20
|
end
|
21
21
|
|
22
|
-
|
23
|
-
|
22
|
+
it "define Diffable as Diffable" do
|
23
|
+
expect(Invoca::Utils::Diffable).to eq(::Diffable)
|
24
24
|
end
|
25
25
|
|
26
26
|
context "when Diff is defined in the global namespace" do
|
27
|
-
|
27
|
+
before do
|
28
28
|
@class = Class.new
|
29
29
|
set_test_const("Diff", @class)
|
30
30
|
load 'invoca/utils.rb'
|
31
31
|
end
|
32
32
|
|
33
|
-
|
34
|
-
|
33
|
+
it "not define Diff as Invoca::Utils::Diff" do
|
34
|
+
expect(@class).to eq(::Diff)
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
38
|
context "when Diffable is defined in the global namespace" do
|
39
|
-
|
39
|
+
before do
|
40
40
|
@class = Class.new
|
41
41
|
set_test_const("Diffable", @class)
|
42
42
|
load 'invoca/utils.rb'
|
43
43
|
end
|
44
44
|
|
45
|
-
|
46
|
-
|
45
|
+
it "define Diffable as Invoca::Utils::Diffable" do
|
46
|
+
expect(@class).to eq(::Diffable)
|
47
47
|
end
|
48
48
|
end
|
49
49
|
end
|
metadata
CHANGED
@@ -1,33 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: invoca-utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Invoca development
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
13
|
-
|
11
|
+
date: 2023-02-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '5.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '5.0'
|
27
|
+
description: A public collection of helpers used in multiple projects
|
14
28
|
email:
|
15
29
|
- development@invoca.com
|
16
30
|
executables: []
|
17
31
|
extensions: []
|
18
32
|
extra_rdoc_files: []
|
19
33
|
files:
|
34
|
+
- ".github/workflows/pipeline.yml"
|
20
35
|
- ".gitignore"
|
21
|
-
- ".
|
22
|
-
- ".jenkins/ruby_build_pod.yml"
|
36
|
+
- ".rspec"
|
23
37
|
- ".rubocop.yml"
|
24
38
|
- ".ruby-version"
|
39
|
+
- ".tool-versions"
|
40
|
+
- Appraisals
|
25
41
|
- CHANGELOG.md
|
26
42
|
- Gemfile
|
27
43
|
- Gemfile.lock
|
28
44
|
- LICENSE.txt
|
29
45
|
- README.md
|
30
46
|
- Rakefile
|
47
|
+
- gemfiles/activesupport_5.gemfile
|
48
|
+
- gemfiles/activesupport_5.gemfile.lock
|
49
|
+
- gemfiles/activesupport_6.gemfile
|
50
|
+
- gemfiles/activesupport_6.gemfile.lock
|
51
|
+
- gemfiles/activesupport_7.gemfile
|
52
|
+
- gemfiles/activesupport_7.gemfile.lock
|
31
53
|
- invoca-utils.gemspec
|
32
54
|
- lib/invoca/utils.rb
|
33
55
|
- lib/invoca/utils/array.rb
|
@@ -45,21 +67,21 @@ files:
|
|
45
67
|
- lib/invoca/utils/stable_sort.rb
|
46
68
|
- lib/invoca/utils/time.rb
|
47
69
|
- lib/invoca/utils/version.rb
|
48
|
-
-
|
49
|
-
-
|
50
|
-
-
|
51
|
-
-
|
52
|
-
-
|
53
|
-
-
|
54
|
-
-
|
55
|
-
-
|
56
|
-
-
|
57
|
-
-
|
58
|
-
-
|
59
|
-
-
|
60
|
-
-
|
61
|
-
-
|
62
|
-
homepage:
|
70
|
+
- spec/helpers/constant_overrides.rb
|
71
|
+
- spec/spec_helper.rb
|
72
|
+
- spec/unit/array_spec.rb
|
73
|
+
- spec/unit/enumerable_spec.rb
|
74
|
+
- spec/unit/exceptions_spec.rb
|
75
|
+
- spec/unit/guaranteed_utf8_string_spec.rb
|
76
|
+
- spec/unit/hash_spec.rb
|
77
|
+
- spec/unit/hash_with_indifferent_access_spec.rb
|
78
|
+
- spec/unit/map_compact_spec.rb
|
79
|
+
- spec/unit/module_spec.rb
|
80
|
+
- spec/unit/multi_sender_spec.rb
|
81
|
+
- spec/unit/stable_sort_spec.rb
|
82
|
+
- spec/unit/time_calculations_spec.rb
|
83
|
+
- spec/unit/utils_spec.rb
|
84
|
+
homepage: https://github.com/Invoca/invoca-utils
|
63
85
|
licenses:
|
64
86
|
- MIT
|
65
87
|
metadata:
|
@@ -72,29 +94,29 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
72
94
|
requirements:
|
73
95
|
- - ">="
|
74
96
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
97
|
+
version: 2.5.0
|
76
98
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
77
99
|
requirements:
|
78
100
|
- - ">="
|
79
101
|
- !ruby/object:Gem::Version
|
80
102
|
version: '0'
|
81
103
|
requirements: []
|
82
|
-
rubygems_version: 3.
|
104
|
+
rubygems_version: 3.1.6
|
83
105
|
signing_key:
|
84
106
|
specification_version: 4
|
85
107
|
summary: A public collection of helpers used in multiple projects
|
86
108
|
test_files:
|
87
|
-
-
|
88
|
-
-
|
89
|
-
-
|
90
|
-
-
|
91
|
-
-
|
92
|
-
-
|
93
|
-
-
|
94
|
-
-
|
95
|
-
-
|
96
|
-
-
|
97
|
-
-
|
98
|
-
-
|
99
|
-
-
|
100
|
-
-
|
109
|
+
- spec/helpers/constant_overrides.rb
|
110
|
+
- spec/spec_helper.rb
|
111
|
+
- spec/unit/array_spec.rb
|
112
|
+
- spec/unit/enumerable_spec.rb
|
113
|
+
- spec/unit/exceptions_spec.rb
|
114
|
+
- spec/unit/guaranteed_utf8_string_spec.rb
|
115
|
+
- spec/unit/hash_spec.rb
|
116
|
+
- spec/unit/hash_with_indifferent_access_spec.rb
|
117
|
+
- spec/unit/map_compact_spec.rb
|
118
|
+
- spec/unit/module_spec.rb
|
119
|
+
- spec/unit/multi_sender_spec.rb
|
120
|
+
- spec/unit/stable_sort_spec.rb
|
121
|
+
- spec/unit/time_calculations_spec.rb
|
122
|
+
- spec/unit/utils_spec.rb
|
data/.jenkins/Jenkinsfile
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
#!/usr/bin/groovy
|
2
|
-
@Library('jenkins-pipeline@v0.4.5')
|
3
|
-
import com.invoca.docker.*;
|
4
|
-
pipeline {
|
5
|
-
agent {
|
6
|
-
kubernetes {
|
7
|
-
defaultContainer "ruby"
|
8
|
-
yamlFile ".jenkins/ruby_build_pod.yml"
|
9
|
-
}
|
10
|
-
}
|
11
|
-
|
12
|
-
environment {
|
13
|
-
GITHUB_TOKEN = credentials('github_token')
|
14
|
-
BUNDLE_GEM__FURY__IO = credentials('gemfury_deploy_token')
|
15
|
-
}
|
16
|
-
|
17
|
-
stages {
|
18
|
-
stage('Setup') {
|
19
|
-
steps {
|
20
|
-
script {
|
21
|
-
sh 'bundle install'
|
22
|
-
}
|
23
|
-
}
|
24
|
-
}
|
25
|
-
stage('Unit Test') {
|
26
|
-
steps {
|
27
|
-
script {
|
28
|
-
sh 'bundle exec rake'
|
29
|
-
}
|
30
|
-
}
|
31
|
-
post {
|
32
|
-
always { junit '*/reports/*.xml' }
|
33
|
-
success { updateGitHubStatus('clean-build', 'success', 'Unit tests.') }
|
34
|
-
failure { updateGitHubStatus('clean-build', 'failure', 'Unit tests.') }
|
35
|
-
}
|
36
|
-
}
|
37
|
-
}
|
38
|
-
}
|
39
|
-
|
40
|
-
void updateGitHubStatus(String context, String status, String description) {
|
41
|
-
gitHubStatus([
|
42
|
-
repoSlug: 'Invoca/invoca-utils',
|
43
|
-
sha: env.GIT_COMMIT,
|
44
|
-
description: description,
|
45
|
-
context: context,
|
46
|
-
targetURL: env.BUILD_URL,
|
47
|
-
token: env.GITHUB_TOKEN,
|
48
|
-
status: status
|
49
|
-
])
|
50
|
-
}
|
data/.jenkins/ruby_build_pod.yml
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
---
|
2
|
-
apiVersion: v1
|
3
|
-
kind: Pod
|
4
|
-
metadata:
|
5
|
-
labels:
|
6
|
-
jenkins/invoca-utils: 'true'
|
7
|
-
namespace: jenkins
|
8
|
-
name: invoca-utils
|
9
|
-
spec:
|
10
|
-
containers:
|
11
|
-
- name: ruby
|
12
|
-
image: ruby:2.6.5
|
13
|
-
tty: true
|
14
|
-
resources:
|
15
|
-
requests:
|
16
|
-
memory: "100Mi"
|
17
|
-
command:
|
18
|
-
- cat
|
19
|
-
|
data/test/test_helper.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "minitest/autorun"
|
4
|
-
require 'rr'
|
5
|
-
require 'shoulda'
|
6
|
-
require 'pry'
|
7
|
-
require 'active_support/all'
|
8
|
-
|
9
|
-
require 'invoca/utils'
|
10
|
-
require "minitest/reporters"
|
11
|
-
Minitest::Reporters.use! [
|
12
|
-
Minitest::Reporters::DefaultReporter.new,
|
13
|
-
Minitest::Reporters::JUnitReporter.new
|
14
|
-
]
|
data/test/unit/array_test.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative '../../lib/invoca/utils/array.rb'
|
4
|
-
require_relative '../test_helper'
|
5
|
-
|
6
|
-
class ArrayTest < Minitest::Test
|
7
|
-
context '* operator' do
|
8
|
-
should 'call the same method on each item in an array and return the results as an array' do
|
9
|
-
assert_equal([4, 5, 5], ['some', 'short', 'words'].*.length)
|
10
|
-
end
|
11
|
-
|
12
|
-
should 'handle methods with arguments' do
|
13
|
-
assert_equal(['om', 'ho', 'or'], ['some', 'short', 'words'].*.slice(1, 2))
|
14
|
-
end
|
15
|
-
|
16
|
-
should 'not alter normal behavior (multiplication) when there is a right hand side to the expression' do
|
17
|
-
assert_equal(['some', 'short', 'words', 'some', 'short', 'words'], ['some', 'short', 'words'] * 2)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,80 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'set'
|
4
|
-
require_relative '../../lib/invoca/utils/enumerable.rb'
|
5
|
-
require_relative '../test_helper'
|
6
|
-
|
7
|
-
class EnumerableTest < Minitest::Test
|
8
|
-
|
9
|
-
context 'map_and_find' do
|
10
|
-
should 'return the mapped value of the first match' do
|
11
|
-
assert_equal('FOUND 3', [1, 2, 3, 4].map_and_find { |v| 'FOUND 3' if v == 3 })
|
12
|
-
end
|
13
|
-
|
14
|
-
should 'return the mapped value of the first match, even if there are multiple matches' do
|
15
|
-
assert_equal('FOUND 3', [1, 2, 3, 4].map_and_find { |v| "FOUND #{v}" if v > 2 })
|
16
|
-
end
|
17
|
-
|
18
|
-
should 'return the provided argument if the value is not found' do
|
19
|
-
assert_equal('NOT FOUND', [1, 2, 3, 4].map_and_find('NOT FOUND') { |v| "FOUND 6" if v == 6 })
|
20
|
-
end
|
21
|
-
|
22
|
-
should 'return nil if the value is not found and no argument is provided' do
|
23
|
-
assert_nil([1, 2, 3, 4].map_and_find { |v| "FOUND 6" if v == 6 })
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
context 'map_with_index' do
|
28
|
-
should 'call the block with the value and index' do
|
29
|
-
assert_equal([10, 21, 32, 43], [10, 20, 30, 40].map_with_index { |v, index| v + index })
|
30
|
-
end
|
31
|
-
|
32
|
-
should 'assumulate into the provided enumerable' do
|
33
|
-
assert_equal([1, 10, 21, 32, 43], [10, 20, 30, 40].map_with_index([1]) { |v, index| v + index })
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
context 'map_hash' do
|
38
|
-
should 'convert enumerables into a hash using the value for key and the map result as the hash value' do
|
39
|
-
assert_equal({ 1 => 11, 2 => 12, 3 => 13 }, [1, 2, 3].map_hash { |v| v + 10 })
|
40
|
-
end
|
41
|
-
|
42
|
-
should 'includes nils returned from map' do
|
43
|
-
assert_equal({ 1 => 11, 2 => nil, 3 => 13 }, [1, 2, 3].map_hash { |v| v + 10 unless v == 2 })
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
context 'build_hash' do
|
48
|
-
should 'convert arrays of [key, value] to a hash of { key => value }' do
|
49
|
-
assert_equal({ 'some' => 4, 'short' => 5, 'words' => 5 }, ['some', 'short', 'words'].build_hash { |s| [s, s.length] })
|
50
|
-
end
|
51
|
-
|
52
|
-
should 'ignore nils returned from map' do
|
53
|
-
assert_equal({ 'some' => 4, 'words' => 5 }, ['some', 'short', 'words'].build_hash { |s| s == 'short' ? nil : [s, s.length] })
|
54
|
-
end
|
55
|
-
|
56
|
-
# these seem like erroneous behavior, but, they have been left as-is for backward compatibility with hobosupport::Enumerable::build_hash
|
57
|
-
|
58
|
-
should 'convert arrays of [single_value] to a hash of { single_value => single_value }' do
|
59
|
-
assert_equal({ 'some' => 4, 'short' => 'short', 'words' => 5 }, ['some', 'short', 'words'].build_hash { |s| s == 'short' ? [s] : [s, s.length] })
|
60
|
-
end
|
61
|
-
|
62
|
-
should 'convert arrays of [first, ..., last] to a hash of { first => last }' do
|
63
|
-
assert_equal({ 'some' => 4, 'short' => 'three', 'words' => 5 }, ['some', 'short', 'words'].build_hash { |s| s == 'short' ? [s, 'two', 'three'] : [s, s.length] })
|
64
|
-
end
|
65
|
-
|
66
|
-
should 'convert empty arrays to a hash of { nil => nil }' do
|
67
|
-
assert_equal({ 'some' => 4, nil => nil, 'words' => 5 }, ['some', 'short', 'words'].build_hash { |s| s == 'short' ? [] : [s, s.length] })
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
context '* operator' do
|
72
|
-
should 'call the same method on each item in an Set and return the results as an array' do
|
73
|
-
assert_equal([4, 5, 5], Set['some', 'short', 'words'].*.length)
|
74
|
-
end
|
75
|
-
|
76
|
-
should 'call the same method on each item in an Hash and return the results as an array' do
|
77
|
-
assert_equal(['key1:value1', 'key2:value2'], { key1: 'value1', key2: 'value2' }.*.join(':'))
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|