invokable 0.7.2 → 1.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/.github/workflows/ruby.yml +25 -10
- data/.travis.yml +8 -0
- data/CHANGELOG.md +6 -0
- data/Gemfile +0 -8
- data/Gemfile.lock +17 -32
- data/README.md +4 -0
- data/invokable.gemspec +1 -1
- data/lib/invokable.rb +25 -11
- data/lib/invokable/version.rb +1 -1
- metadata +6 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 18c3cf809df359e8e89d764f5111d97b33ce63802d5e4ee1c01be83eed583d5c
|
|
4
|
+
data.tar.gz: b431129c01229cdac6751df4e5d03a756f0852ca9aa6e78cae7e2ff7d7caf36d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 56d344edf79caf64a9dec52fba375b2455c889e097dbf5be2fdf074c2ac4ee0eaf3f882e4bf55f638cb47b3de1cc00b57e56cf47910731dea825be8042d1c074
|
|
7
|
+
data.tar.gz: 465820b6b31e9a99046098fd51ccc6eccc341e9aac0ef2595faca93abde00b6c9de5452fb54b5016b351eb73455c58ecdae8ed84dbb4505c5bb25345fa5e0046
|
data/.github/workflows/ruby.yml
CHANGED
|
@@ -1,20 +1,35 @@
|
|
|
1
|
+
# This workflow uses actions that are not certified by GitHub.
|
|
2
|
+
# They are provided by a third-party and are governed by
|
|
3
|
+
# separate terms of service, privacy policy, and support
|
|
4
|
+
# documentation.
|
|
5
|
+
# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
|
|
6
|
+
# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
|
|
7
|
+
|
|
1
8
|
name: Ruby
|
|
2
9
|
|
|
3
|
-
on:
|
|
10
|
+
on:
|
|
11
|
+
push:
|
|
12
|
+
branches: [ master ]
|
|
13
|
+
pull_request:
|
|
14
|
+
branches: [ master ]
|
|
4
15
|
|
|
5
16
|
jobs:
|
|
6
|
-
|
|
17
|
+
test:
|
|
7
18
|
|
|
8
19
|
runs-on: ubuntu-latest
|
|
20
|
+
strategy:
|
|
21
|
+
matrix:
|
|
22
|
+
ruby-version: ['2.4', '2.5', '2.6', '2.7', '3.0']
|
|
9
23
|
|
|
10
24
|
steps:
|
|
11
25
|
- uses: actions/checkout@v2
|
|
12
|
-
- name: Set up Ruby
|
|
13
|
-
|
|
26
|
+
- name: Set up Ruby
|
|
27
|
+
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
|
|
28
|
+
# change this to (see https://github.com/ruby/setup-ruby#versioning):
|
|
29
|
+
# uses: ruby/setup-ruby@v1
|
|
30
|
+
uses: ruby/setup-ruby@473e4d8fe5dd94ee328fdfca9f8c9c7afc9dae5e
|
|
14
31
|
with:
|
|
15
|
-
ruby-version:
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
bundle install --jobs 4 --retry 3
|
|
20
|
-
bundle exec rake
|
|
32
|
+
ruby-version: ${{ matrix.ruby-version }}
|
|
33
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
|
34
|
+
- name: Run tests
|
|
35
|
+
run: bundle exec rake
|
data/.travis.yml
ADDED
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
|
|
3
|
+
## 1.0.0
|
|
4
|
+
|
|
5
|
+
- More robust testing
|
|
6
|
+
- Better error handling
|
|
7
|
+
- Keyword argument support
|
|
8
|
+
|
|
3
9
|
## 0.7.2
|
|
4
10
|
|
|
5
11
|
Variable arity invoker methods are handled properly. Variable arity initializers will result in a more meaningful exception being raised.
|
data/Gemfile
CHANGED
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
source "https://rubygems.org"
|
|
2
2
|
|
|
3
|
-
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
|
|
4
|
-
|
|
5
|
-
# Specify your gem's dependencies in data-functions.gemspec
|
|
6
3
|
gemspec
|
|
7
4
|
|
|
8
5
|
group :development do
|
|
9
|
-
gem 'pry'
|
|
10
6
|
gem 'yard'
|
|
11
7
|
end
|
|
12
|
-
|
|
13
|
-
group :test do
|
|
14
|
-
gem 'gen-test'
|
|
15
|
-
end
|
data/Gemfile.lock
CHANGED
|
@@ -1,53 +1,38 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
invokable (0.
|
|
4
|
+
invokable (1.0.0)
|
|
5
5
|
|
|
6
6
|
GEM
|
|
7
7
|
remote: https://rubygems.org/
|
|
8
8
|
specs:
|
|
9
|
-
|
|
10
|
-
concurrent-ruby (1.1.5)
|
|
11
|
-
diff-lcs (1.3)
|
|
12
|
-
faker (1.9.6)
|
|
13
|
-
i18n (>= 0.7)
|
|
14
|
-
gen-test (0.1.1)
|
|
15
|
-
faker (~> 1.9.6)
|
|
16
|
-
regexp-examples (~> 1.5.0)
|
|
17
|
-
i18n (1.8.2)
|
|
18
|
-
concurrent-ruby (~> 1.0)
|
|
19
|
-
method_source (0.9.2)
|
|
20
|
-
pry (0.12.2)
|
|
21
|
-
coderay (~> 1.1.0)
|
|
22
|
-
method_source (~> 0.9.0)
|
|
9
|
+
diff-lcs (1.4.4)
|
|
23
10
|
rake (13.0.1)
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
rspec-
|
|
27
|
-
rspec-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
rspec-expectations (3.9.0)
|
|
11
|
+
rspec (3.10.0)
|
|
12
|
+
rspec-core (~> 3.10.0)
|
|
13
|
+
rspec-expectations (~> 3.10.0)
|
|
14
|
+
rspec-mocks (~> 3.10.0)
|
|
15
|
+
rspec-core (3.10.0)
|
|
16
|
+
rspec-support (~> 3.10.0)
|
|
17
|
+
rspec-expectations (3.10.0)
|
|
32
18
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
33
|
-
rspec-support (~> 3.
|
|
34
|
-
rspec-mocks (3.
|
|
19
|
+
rspec-support (~> 3.10.0)
|
|
20
|
+
rspec-mocks (3.10.0)
|
|
35
21
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
36
|
-
rspec-support (~> 3.
|
|
37
|
-
rspec-support (3.
|
|
38
|
-
yard (0.9.
|
|
22
|
+
rspec-support (~> 3.10.0)
|
|
23
|
+
rspec-support (3.10.0)
|
|
24
|
+
yard (0.9.25)
|
|
39
25
|
|
|
40
26
|
PLATFORMS
|
|
27
|
+
java
|
|
41
28
|
ruby
|
|
42
29
|
|
|
43
30
|
DEPENDENCIES
|
|
44
|
-
bundler (~> 1
|
|
45
|
-
gen-test
|
|
31
|
+
bundler (~> 2.1)
|
|
46
32
|
invokable!
|
|
47
|
-
pry
|
|
48
33
|
rake (~> 13.0)
|
|
49
34
|
rspec (~> 3.0)
|
|
50
35
|
yard
|
|
51
36
|
|
|
52
37
|
BUNDLED WITH
|
|
53
|
-
|
|
38
|
+
2.2.6
|
data/README.md
CHANGED
|
@@ -162,6 +162,10 @@ Or install it yourself as:
|
|
|
162
162
|
- [Clojure](https://clojure.org)
|
|
163
163
|
- [Arc](http://www.arclanguage.org)
|
|
164
164
|
|
|
165
|
+
## Support
|
|
166
|
+
|
|
167
|
+
Tested using MRI 2.4, 2.5, 2.6, 2.7, 3.0 and JRuby
|
|
168
|
+
|
|
165
169
|
## License
|
|
166
170
|
|
|
167
171
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/invokable.gemspec
CHANGED
|
@@ -36,7 +36,7 @@ Gem::Specification.new do |spec|
|
|
|
36
36
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
37
37
|
spec.require_paths = ["lib"]
|
|
38
38
|
|
|
39
|
-
spec.add_development_dependency "bundler", "~> 1
|
|
39
|
+
spec.add_development_dependency "bundler", "~> 2.1"
|
|
40
40
|
spec.add_development_dependency "rake", "~> 13.0"
|
|
41
41
|
spec.add_development_dependency "rspec", "~> 3.0"
|
|
42
42
|
end
|
data/lib/invokable.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'invokable/version'
|
|
2
4
|
require 'invokable/core'
|
|
3
5
|
require 'invokable/helpers'
|
|
@@ -39,6 +41,7 @@ module Invokable
|
|
|
39
41
|
private
|
|
40
42
|
|
|
41
43
|
INCLUDED_MODULES = [Core, Helpers].freeze
|
|
44
|
+
private_constant :INCLUDED_MODULES
|
|
42
45
|
|
|
43
46
|
# The methods that are mixed into any class at the class level that includes {Invokable}.
|
|
44
47
|
#
|
|
@@ -62,19 +65,30 @@ module Invokable
|
|
|
62
65
|
# @version 0.6.0
|
|
63
66
|
#
|
|
64
67
|
# @see arity
|
|
65
|
-
def call(*args)
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
return new
|
|
68
|
+
def call(*args, **kwargs)
|
|
69
|
+
initializer = initializer_arity
|
|
70
|
+
raise ArgumentError, "variable length initializer methods are not supported by Invokable try using `new' or `curry' instead" if initializer < 0
|
|
71
|
+
raise ArgumentError, "block arguments are not supported by Invokable" if block_given?
|
|
72
|
+
|
|
73
|
+
return new.call if arity.zero?
|
|
74
|
+
|
|
75
|
+
argc = kwargs.empty? ? args.length : args.length + 1
|
|
76
|
+
invoker = invoker_arity
|
|
77
|
+
return new(*args).call if argc == initializer && invoker.zero? && kwargs.empty?
|
|
78
|
+
return new(*args, **kwargs).call if argc == initializer && invoker.zero?
|
|
79
|
+
return new(*args).call if argc == initializer && invoker == -1 && kwargs.empty?
|
|
80
|
+
return new(*args).call(**kwargs) if argc == initializer && invoker == -1
|
|
81
|
+
return new(*args) if argc == initializer && kwargs.empty?
|
|
82
|
+
return new(*args, **kwargs) if argc == initializer
|
|
71
83
|
|
|
72
|
-
if
|
|
73
|
-
init_args = args.slice(0,
|
|
74
|
-
call_args = args.slice(
|
|
75
|
-
new(*init_args).call(*call_args)
|
|
84
|
+
if argc == arity || invoker_arity < 0 && (args.length - initializer) >= (invoker.abs - 1)
|
|
85
|
+
init_args = args.slice(0, initializer)
|
|
86
|
+
call_args = args.slice(initializer, args.length)
|
|
87
|
+
return new(*init_args).call(*call_args) if kwargs.empty?
|
|
88
|
+
return new(*init_args).call(*call_args, **kwargs)
|
|
76
89
|
else
|
|
77
|
-
raise ArgumentError, "wrong number of arguments (given #{args.length}, expected #{
|
|
90
|
+
raise ArgumentError, "wrong number of arguments (given #{args.length}, expected #{arity})" if initializer == arity
|
|
91
|
+
raise ArgumentError, "wrong number of arguments (given #{args.length}, expected #{initializer} or #{arity})"
|
|
78
92
|
end
|
|
79
93
|
end
|
|
80
94
|
|
data/lib/invokable/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: invokable
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 1.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Delon Newman
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2021-01-21 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -16,14 +16,14 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '1
|
|
19
|
+
version: '2.1'
|
|
20
20
|
type: :development
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '1
|
|
26
|
+
version: '2.1'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: rake
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -63,6 +63,7 @@ files:
|
|
|
63
63
|
- ".github/workflows/ruby.yml"
|
|
64
64
|
- ".gitignore"
|
|
65
65
|
- ".rspec"
|
|
66
|
+
- ".travis.yml"
|
|
66
67
|
- CHANGELOG.md
|
|
67
68
|
- Gemfile
|
|
68
69
|
- Gemfile.lock
|
|
@@ -107,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
107
108
|
- !ruby/object:Gem::Version
|
|
108
109
|
version: '0'
|
|
109
110
|
requirements: []
|
|
110
|
-
rubygems_version: 3.
|
|
111
|
+
rubygems_version: 3.2.3
|
|
111
112
|
signing_key:
|
|
112
113
|
specification_version: 4
|
|
113
114
|
summary: Objects are functions! Treat any Object, Hashes, Arrays and Sets as Procs
|