invokable 0.7.0 → 0.7.1
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.md +21 -0
- data/Gemfile.lock +1 -1
- data/README.md +37 -32
- data/_config.yml +1 -0
- data/lib/invokable.rb +8 -3
- data/lib/invokable/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b5a26558a5514a4af779fba9fbc1d015e88fa9c9f2c6a12d88aa274c3307e421
|
4
|
+
data.tar.gz: 633c511d7f4f3509b275b3db38e246303ceed19db80c5dfbbb90df889c7d930f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 51e7fdfc72e240d55189d69764f9fc8edb35e607eaa1374027d7c1a9478a6428f1bf28aee44971ba8929a75598a4a696a6f02f6370e73b98e0cc03f6cd34d64d
|
7
|
+
data.tar.gz: b553bb218572e6f09af06680fb6c8d3774e3dac8e466f08400d9faf16c74e26cb23f1b00699901caf9db1bf60966d293a01255edfe6ebf9e31dac241c0e107d4
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,26 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
## 0.7.1
|
4
|
+
|
5
|
+
### Invokable::call
|
6
|
+
|
7
|
+
When all the arguments of the initializer are passed and the instance method is zero arity the instance method will be called.
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
class Greeter
|
11
|
+
def initialize(name)
|
12
|
+
@name = name
|
13
|
+
end
|
14
|
+
|
15
|
+
def call
|
16
|
+
"Hello #{name}"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
Greeter.call("Jane") # => "Hello Jane"
|
21
|
+
Greeter.call("John") # => #<Greeter ...> (before 0.7.1)
|
22
|
+
```
|
23
|
+
|
3
24
|
## 0.7.0
|
4
25
|
|
5
26
|
- Added helper methods `juxtapose`, `knit`, `compose`, `identity`, `always`, `guarded`, `partial`, and `coerce`
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -3,40 +3,10 @@
|
|
3
3
|
|
4
4
|
# Invokable
|
5
5
|
|
6
|
-
Objects are functions! Treat any Object
|
6
|
+
Objects are functions! Treat any Object or Class as a Proc (like Enumerable but for Procs)
|
7
7
|
|
8
8
|
## Synopsis
|
9
9
|
|
10
|
-
Hashes can be treated as functions of their keys
|
11
|
-
|
12
|
-
```ruby
|
13
|
-
require 'invokable'
|
14
|
-
require 'invokable/hash'
|
15
|
-
|
16
|
-
number_names = { 1 => "One", 2 => "Two", 3 => "Three" }
|
17
|
-
[1, 2, 3, 4].map(&number_names) # => ["One", "Two", "Three", nil]
|
18
|
-
```
|
19
|
-
|
20
|
-
Arrays can be treated as functions of their indexes
|
21
|
-
|
22
|
-
```ruby
|
23
|
-
require 'invokable'
|
24
|
-
require 'invokable/array'
|
25
|
-
|
26
|
-
alpha = ('a'..'z').to_a
|
27
|
-
[1, 2, 3, 4].map(&alpha) # => ["b", "c", "d", "e"]
|
28
|
-
```
|
29
|
-
|
30
|
-
Sets can be treated as predicates
|
31
|
-
|
32
|
-
```ruby
|
33
|
-
require 'invokable'
|
34
|
-
require 'invokable/set'
|
35
|
-
|
36
|
-
favorite_numbers = Set[3, Math::PI]
|
37
|
-
[1, 2, 3, 4].select(&favorite_numbers) # => [3]
|
38
|
-
```
|
39
|
-
|
40
10
|
Objects that enclose state, can be treated as automatically curried functions.
|
41
11
|
|
42
12
|
```ruby
|
@@ -75,7 +45,7 @@ class FilterRecords
|
|
75
45
|
@params = params
|
76
46
|
end
|
77
47
|
|
78
|
-
def call(
|
48
|
+
def call(records)
|
79
49
|
# do filtering return records
|
80
50
|
end
|
81
51
|
end
|
@@ -119,10 +89,41 @@ end
|
|
119
89
|
Transformer.call([:a, :b, :c, :d]) # => {:a => "A", :b => "B", :c => "C", :d => "D"}
|
120
90
|
```
|
121
91
|
|
92
|
+
Hashes can be treated as functions of their keys
|
93
|
+
|
94
|
+
```ruby
|
95
|
+
require 'invokable'
|
96
|
+
require 'invokable/hash'
|
97
|
+
|
98
|
+
number_names = { 1 => "One", 2 => "Two", 3 => "Three" }
|
99
|
+
[1, 2, 3, 4].map(&number_names) # => ["One", "Two", "Three", nil]
|
100
|
+
```
|
101
|
+
|
102
|
+
Arrays can be treated as functions of their indexes
|
103
|
+
|
104
|
+
```ruby
|
105
|
+
require 'invokable'
|
106
|
+
require 'invokable/array'
|
107
|
+
|
108
|
+
alpha = ('a'..'z').to_a
|
109
|
+
[1, 2, 3, 4].map(&alpha) # => ["b", "c", "d", "e"]
|
110
|
+
```
|
111
|
+
|
112
|
+
Sets can be treated as predicates
|
113
|
+
|
114
|
+
```ruby
|
115
|
+
require 'invokable'
|
116
|
+
require 'invokable/set'
|
117
|
+
|
118
|
+
favorite_numbers = Set[3, Math::PI]
|
119
|
+
[1, 2, 3, 4].select(&favorite_numbers) # => [3]
|
120
|
+
```
|
121
|
+
|
122
122
|
Use as much or a little as you need
|
123
123
|
|
124
124
|
```ruby
|
125
125
|
require 'invokable' # loads Invokable module
|
126
|
+
require 'invokable/helpers' # loads Invokable::Helpers module
|
126
127
|
require 'invokable/hash' # loads hash patch
|
127
128
|
require 'invokable/array' # loads array patch
|
128
129
|
require 'invokable/set' # loads set patch
|
@@ -151,6 +152,10 @@ Or install it yourself as:
|
|
151
152
|
|
152
153
|
> gem install invokable
|
153
154
|
|
155
|
+
## API Documentation
|
156
|
+
|
157
|
+
[https://www.rubydoc.info/gems/invokable](https://www.rubydoc.info/gems/invokable)
|
158
|
+
|
154
159
|
## See Also
|
155
160
|
|
156
161
|
- [Closures and Objects are Equivalent](http://wiki.c2.com/?ClosuresAndObjectsAreEquivalent)
|
data/_config.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
#theme: jekyll-theme-minimal
|
data/lib/invokable.rb
CHANGED
@@ -50,7 +50,7 @@ module Invokable
|
|
50
50
|
#
|
51
51
|
# @return [Integer]
|
52
52
|
def arity
|
53
|
-
initializer_arity +
|
53
|
+
initializer_arity + invoker_arity
|
54
54
|
end
|
55
55
|
|
56
56
|
# Handle automatic currying--will accept either the initializer arity or the total arity of the class. If
|
@@ -61,8 +61,9 @@ module Invokable
|
|
61
61
|
#
|
62
62
|
# @see arity
|
63
63
|
def call(*args)
|
64
|
-
return new.call
|
65
|
-
return new(*args) if args.length == initializer_arity
|
64
|
+
return new.call if arity == 0
|
65
|
+
return new(*args).call if args.length == initializer_arity && invoker_arity == 0
|
66
|
+
return new(*args) if args.length == initializer_arity
|
66
67
|
|
67
68
|
if args.length == arity
|
68
69
|
init_args = args.slice(0, initializer_arity)
|
@@ -78,5 +79,9 @@ module Invokable
|
|
78
79
|
def initializer_arity
|
79
80
|
instance_method(:initialize).arity
|
80
81
|
end
|
82
|
+
|
83
|
+
def invoker_arity
|
84
|
+
instance_method(:call).arity
|
85
|
+
end
|
81
86
|
end
|
82
87
|
end
|
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.7.
|
4
|
+
version: 0.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Delon Newman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-09-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -69,6 +69,7 @@ files:
|
|
69
69
|
- LICENSE.txt
|
70
70
|
- README.md
|
71
71
|
- Rakefile
|
72
|
+
- _config.yml
|
72
73
|
- invokable.gemspec
|
73
74
|
- lib/core_ext.rb
|
74
75
|
- lib/invokable.rb
|
@@ -106,7 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
106
107
|
- !ruby/object:Gem::Version
|
107
108
|
version: '0'
|
108
109
|
requirements: []
|
109
|
-
rubygems_version: 3.0.
|
110
|
+
rubygems_version: 3.0.6
|
110
111
|
signing_key:
|
111
112
|
specification_version: 4
|
112
113
|
summary: Objects are functions! Treat any Object, Hashes, Arrays and Sets as Procs
|