invoca-utils 0.1.1 → 0.2.0.pre.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +3 -2
- data/.jenkins/Jenkinsfile +50 -0
- data/.jenkins/ruby_build_pod.yml +19 -0
- data/.ruby-version +1 -1
- data/CHANGELOG.md +12 -0
- data/Gemfile +5 -4
- data/Gemfile.lock +13 -4
- data/Rakefile +3 -9
- data/lib/invoca/utils.rb +2 -0
- data/lib/invoca/utils/array.rb +20 -0
- data/lib/invoca/utils/enumerable.rb +18 -0
- data/lib/invoca/utils/multi_sender.rb +22 -0
- data/lib/invoca/utils/version.rb +1 -1
- data/test/test_helper.rb +5 -0
- data/test/unit/array_test.rb +20 -0
- data/test/unit/enumerable_test.rb +42 -0
- data/test/unit/multi_sender_test.rb +56 -0
- metadata +17 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c649aa42003b13eb382b508255bbfcac81b8b923bb851716a5d2e3c6894e0e81
|
4
|
+
data.tar.gz: 1c2eb05eccb83b374ad1caeeec48d3a74e2be1354697df021055e7a6f033559d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9b2b6ea11bb6e6c2157e15ba05703705fb46623e48bbe7eaff9cd2a7a5cbcbf5ad8747c0eca4190047defa003024ecc0496c92cac6c489b01073049dca672f6c
|
7
|
+
data.tar.gz: da808833388e650a1cd8e55d773fcf4319dab6551fee8a36fb47cac68b0a17363e31475f0c152e242728aae7b7d3f131e404e3c1946e95146028832909fd17c3
|
data/.gitignore
CHANGED
@@ -0,0 +1,50 @@
|
|
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
|
+
}
|
@@ -0,0 +1,19 @@
|
|
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/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.6.5
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
# CHANGELOG for `invoca-utils`
|
2
|
+
|
3
|
+
Inspired by [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
4
|
+
|
5
|
+
Note: This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
6
|
+
|
7
|
+
## [0.2.0] - Unreleased
|
8
|
+
### Added
|
9
|
+
- Enumerable::build_hash method ported from HoboSupport
|
10
|
+
- Enumerable::* operator ported from HoboSupport
|
11
|
+
|
12
|
+
[0.2.0]: https://github.com/Invoca/process_settings/compare/v0.1.1...v0.2.0
|
data/Gemfile
CHANGED
@@ -5,12 +5,13 @@ source 'https://rubygems.org'
|
|
5
5
|
gemspec
|
6
6
|
|
7
7
|
group :development do
|
8
|
+
gem 'minitest'
|
9
|
+
gem 'minitest-reporters'
|
10
|
+
gem 'pry'
|
8
11
|
gem 'rake'
|
9
|
-
gem 'test-unit', '= 1.2.3'
|
10
12
|
gem 'rr', '=1.1.2'
|
11
|
-
gem 'shoulda', '= 3.5.0'
|
12
|
-
gem 'pry'
|
13
13
|
gem 'ruby-prof'
|
14
|
-
gem '
|
14
|
+
gem 'shoulda', '= 3.5.0'
|
15
|
+
gem 'test-unit', '= 1.2.3'
|
15
16
|
gem 'tzinfo'
|
16
17
|
end
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
invoca-utils (0.
|
4
|
+
invoca-utils (0.2.0.pre.1)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
@@ -11,20 +11,28 @@ GEM
|
|
11
11
|
i18n (~> 0.7)
|
12
12
|
minitest (~> 5.1)
|
13
13
|
tzinfo (~> 1.1)
|
14
|
+
ansi (1.5.0)
|
15
|
+
builder (3.2.4)
|
14
16
|
coderay (1.1.2)
|
15
17
|
concurrent-ruby (1.0.5)
|
16
|
-
hoe (3.
|
17
|
-
rake (>= 0.8, <
|
18
|
+
hoe (3.22.1)
|
19
|
+
rake (>= 0.8, < 15.0)
|
18
20
|
i18n (0.9.1)
|
19
21
|
concurrent-ruby (~> 1.0)
|
20
22
|
method_source (0.9.0)
|
21
23
|
minitest (5.11.1)
|
24
|
+
minitest-reporters (1.1.14)
|
25
|
+
ansi
|
26
|
+
builder
|
27
|
+
minitest (>= 5.0)
|
28
|
+
ruby-progressbar
|
22
29
|
pry (0.11.3)
|
23
30
|
coderay (~> 1.1.0)
|
24
31
|
method_source (~> 0.9.0)
|
25
|
-
rake (
|
32
|
+
rake (13.0.1)
|
26
33
|
rr (1.1.2)
|
27
34
|
ruby-prof (0.17.0)
|
35
|
+
ruby-progressbar (1.10.1)
|
28
36
|
shoulda (3.5.0)
|
29
37
|
shoulda-context (~> 1.0, >= 1.0.1)
|
30
38
|
shoulda-matchers (>= 1.4.1, < 3.0)
|
@@ -43,6 +51,7 @@ PLATFORMS
|
|
43
51
|
DEPENDENCIES
|
44
52
|
invoca-utils!
|
45
53
|
minitest
|
54
|
+
minitest-reporters
|
46
55
|
pry
|
47
56
|
rake
|
48
57
|
rr (= 1.1.2)
|
data/Rakefile
CHANGED
@@ -4,14 +4,8 @@
|
|
4
4
|
require "bundler/gem_tasks"
|
5
5
|
require 'rake/testtask'
|
6
6
|
|
7
|
-
Rake::TestTask.new(:test) do |t|
|
8
|
-
t.libs << 'lib'
|
9
|
-
t.libs << 'test'
|
10
|
-
t.pattern = 'test/**/*_test.rb'
|
11
|
-
t.verbose = false
|
12
|
-
end
|
13
|
-
|
14
7
|
task default: :test
|
15
8
|
|
16
|
-
|
17
|
-
|
9
|
+
Rake::TestTask.new do |t|
|
10
|
+
t.pattern = "test/**/*_test.rb"
|
11
|
+
end
|
data/lib/invoca/utils.rb
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative './multi_sender'
|
4
|
+
|
5
|
+
# Invoca ::Array extensions
|
6
|
+
module Invoca
|
7
|
+
module Utils
|
8
|
+
module ArrayMultiply
|
9
|
+
def *(rhs = nil)
|
10
|
+
if rhs
|
11
|
+
super
|
12
|
+
else
|
13
|
+
Invoca::Utils::MultiSender.new(self, :map)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
Array.prepend(Invoca::Utils::ArrayMultiply)
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative './multi_sender'
|
4
|
+
|
5
|
+
# Invoca ::Enumerable extensions
|
6
|
+
module Enumerable
|
7
|
+
def build_hash(res = {})
|
8
|
+
each do |x|
|
9
|
+
pair = block_given? ? yield(x) : x
|
10
|
+
res[pair.first] = pair.last if pair
|
11
|
+
end
|
12
|
+
res
|
13
|
+
end
|
14
|
+
|
15
|
+
def *
|
16
|
+
Invoca::Utils::MultiSender.new(self, :map)
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Invoca
|
4
|
+
module Utils
|
5
|
+
class MultiSender
|
6
|
+
undef_method(*(instance_methods - [:__id__, :__send__, :object_id]))
|
7
|
+
|
8
|
+
def initialize(enumerable, method)
|
9
|
+
@enumerable = enumerable
|
10
|
+
@method = method
|
11
|
+
end
|
12
|
+
|
13
|
+
# rubocop:disable Style/MethodMissingSuper
|
14
|
+
# rubocop:disable Style/MissingRespondToMissing
|
15
|
+
def method_missing(name, *args, &block)
|
16
|
+
@enumerable.send(@method) { |x| x.send(name, *args, &block) }
|
17
|
+
end
|
18
|
+
# rubocop:enable Style/MethodMissingSuper
|
19
|
+
# rubocop:enable Style/MissingRespondToMissing
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/invoca/utils/version.rb
CHANGED
data/test/test_helper.rb
CHANGED
@@ -0,0 +1,20 @@
|
|
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
|
@@ -0,0 +1,42 @@
|
|
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 'build_hash' do
|
10
|
+
should 'convert arrays of [key, value] to a hash of { key => value }' do
|
11
|
+
assert_equal({ 'some' => 4, 'short' => 5, 'words' => 5 }, ['some', 'short', 'words'].build_hash { |s| [s, s.length] })
|
12
|
+
end
|
13
|
+
|
14
|
+
should 'ignore nils returned from map' do
|
15
|
+
assert_equal({ 'some' => 4, 'words' => 5 }, ['some', 'short', 'words'].build_hash { |s| s == 'short' ? nil : [s, s.length] })
|
16
|
+
end
|
17
|
+
|
18
|
+
# these seem like erroneous behavior, but, they have been left as-is for backward compatibility with hobosupport::Enumerable::build_hash
|
19
|
+
|
20
|
+
should 'convert arrays of [single_value] to a hash of { single_value => single_value }' do
|
21
|
+
assert_equal({ 'some' => 4, 'short' => 'short', 'words' => 5 }, ['some', 'short', 'words'].build_hash { |s| s == 'short' ? [s] : [s, s.length] })
|
22
|
+
end
|
23
|
+
|
24
|
+
should 'convert arrays of [first, ..., last] to a hash of { first => last }' do
|
25
|
+
assert_equal({ 'some' => 4, 'short' => 'three', 'words' => 5 }, ['some', 'short', 'words'].build_hash { |s| s == 'short' ? [s, 'two', 'three'] : [s, s.length] })
|
26
|
+
end
|
27
|
+
|
28
|
+
should 'convert empty arrays to a hash of { nil => nil }' do
|
29
|
+
assert_equal({ 'some' => 4, nil => nil, 'words' => 5 }, ['some', 'short', 'words'].build_hash { |s| s == 'short' ? [] : [s, s.length] })
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context '* operator' do
|
34
|
+
should 'call the same method on each item in an Set and return the results as an array' do
|
35
|
+
assert_equal([4, 5, 5], Set['some', 'short', 'words'].*.length)
|
36
|
+
end
|
37
|
+
|
38
|
+
should 'call the same method on each item in an Hash and return the results as an array' do
|
39
|
+
assert_equal(['key1:value1', 'key2:value2'], { key1: 'value1', key2: 'value2' }.*.join(':'))
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../lib/invoca/utils/multi_sender.rb'
|
4
|
+
require_relative '../test_helper'
|
5
|
+
|
6
|
+
class MultiSenderTest < Minitest::Test
|
7
|
+
# create enumerable class for testing
|
8
|
+
class LinkedList
|
9
|
+
include Enumerable
|
10
|
+
|
11
|
+
def initialize(head, tail = nil)
|
12
|
+
@head, @tail = head, tail
|
13
|
+
end
|
14
|
+
|
15
|
+
def <<(item)
|
16
|
+
LinkedList.new(item, self)
|
17
|
+
end
|
18
|
+
|
19
|
+
def inspect
|
20
|
+
[@head, @tail].inspect
|
21
|
+
end
|
22
|
+
|
23
|
+
def each(&block)
|
24
|
+
if block_given?
|
25
|
+
block.call(@head)
|
26
|
+
@tail&.each(&block)
|
27
|
+
else
|
28
|
+
to_enum(:each)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'MultiSender' do
|
34
|
+
context 'with custom Enumerable' do
|
35
|
+
setup do
|
36
|
+
linked_list = LinkedList.new('some') << 'short' << 'words'
|
37
|
+
@multi_sender = Invoca::Utils::MultiSender.new(linked_list, :map)
|
38
|
+
end
|
39
|
+
|
40
|
+
should 'call the same method on each item in an Enumerable and return the results as an array' do
|
41
|
+
assert_equal([5, 5, 4], @multi_sender.length)
|
42
|
+
end
|
43
|
+
|
44
|
+
should 'handle methods with arguments' do
|
45
|
+
assert_equal(['or', 'ho', 'om'], @multi_sender.slice(1, 2))
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'with built-in Array' do
|
50
|
+
should 'call the same method on each item in an Array and return the results as an array' do
|
51
|
+
multi_sender = Invoca::Utils::MultiSender.new(['some', 'short', 'words'], :map)
|
52
|
+
assert_equal([4, 5, 5], multi_sender.length)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: invoca-utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0.pre.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Invoca development
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-04-26 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A public collection of helpers used in multiple projects
|
14
14
|
email:
|
@@ -18,8 +18,11 @@ extensions: []
|
|
18
18
|
extra_rdoc_files: []
|
19
19
|
files:
|
20
20
|
- ".gitignore"
|
21
|
+
- ".jenkins/Jenkinsfile"
|
22
|
+
- ".jenkins/ruby_build_pod.yml"
|
21
23
|
- ".rubocop.yml"
|
22
24
|
- ".ruby-version"
|
25
|
+
- CHANGELOG.md
|
23
26
|
- Gemfile
|
24
27
|
- Gemfile.lock
|
25
28
|
- LICENSE.txt
|
@@ -27,18 +30,24 @@ files:
|
|
27
30
|
- Rakefile
|
28
31
|
- invoca-utils.gemspec
|
29
32
|
- lib/invoca/utils.rb
|
33
|
+
- lib/invoca/utils/array.rb
|
30
34
|
- lib/invoca/utils/diff.rb
|
35
|
+
- lib/invoca/utils/enumerable.rb
|
31
36
|
- lib/invoca/utils/guaranteed_utf8_string.rb
|
32
37
|
- lib/invoca/utils/http.rb
|
33
38
|
- lib/invoca/utils/map_compact.rb
|
34
39
|
- lib/invoca/utils/min_max.rb
|
40
|
+
- lib/invoca/utils/multi_sender.rb
|
35
41
|
- lib/invoca/utils/stable_sort.rb
|
36
42
|
- lib/invoca/utils/time.rb
|
37
43
|
- lib/invoca/utils/version.rb
|
38
44
|
- test/helpers/constant_overrides.rb
|
39
45
|
- test/test_helper.rb
|
46
|
+
- test/unit/array_test.rb
|
47
|
+
- test/unit/enumerable_test.rb
|
40
48
|
- test/unit/guaranteed_utf8_string_test.rb
|
41
49
|
- test/unit/map_compact_test.rb
|
50
|
+
- test/unit/multi_sender_test.rb
|
42
51
|
- test/unit/stable_sort_test.rb
|
43
52
|
- test/unit/time_calculations_test.rb
|
44
53
|
- test/unit/utils_test.rb
|
@@ -58,20 +67,22 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
58
67
|
version: '0'
|
59
68
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
60
69
|
requirements:
|
61
|
-
- - "
|
70
|
+
- - ">"
|
62
71
|
- !ruby/object:Gem::Version
|
63
|
-
version:
|
72
|
+
version: 1.3.1
|
64
73
|
requirements: []
|
65
|
-
|
66
|
-
rubygems_version: 2.6.13
|
74
|
+
rubygems_version: 3.0.3
|
67
75
|
signing_key:
|
68
76
|
specification_version: 4
|
69
77
|
summary: A public collection of helpers used in multiple projects
|
70
78
|
test_files:
|
71
79
|
- test/helpers/constant_overrides.rb
|
72
80
|
- test/test_helper.rb
|
81
|
+
- test/unit/array_test.rb
|
82
|
+
- test/unit/enumerable_test.rb
|
73
83
|
- test/unit/guaranteed_utf8_string_test.rb
|
74
84
|
- test/unit/map_compact_test.rb
|
85
|
+
- test/unit/multi_sender_test.rb
|
75
86
|
- test/unit/stable_sort_test.rb
|
76
87
|
- test/unit/time_calculations_test.rb
|
77
88
|
- test/unit/utils_test.rb
|