use_arguments 0.1.0 → 0.2.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/README.md +24 -0
- data/example/simple.rb +31 -3
- data/lib/use_arguments.rb +26 -15
- data/lib/use_arguments/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f09c3c95f8d433f92f72fa3b467e7ed40acb3620
|
4
|
+
data.tar.gz: cff3e9a658f31ec36de74890678763ff14a7557b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 84be621c87a43f452ec7d85146e0a5827a5a83f4fffd5a84788ea96735d3a0b1b99821db5f985a633204f50824330188e2cf91ed3588d0d2a65c7e55b012020b
|
7
|
+
data.tar.gz: 62eabe50d6cdead9019233032b2082bc8eaef790dd8f24d037c4eda05124ff3f529e2fc164f28f490abc48ab8820f2e140b3bd9f625ad5c37b32c8d56f6b56a1
|
data/README.md
CHANGED
@@ -31,6 +31,7 @@ require "use_arguments"
|
|
31
31
|
_args : argument array.
|
32
32
|
_self : self Proc object.
|
33
33
|
_yield : block argument.
|
34
|
+
_receiver : receiver object.
|
34
35
|
=end
|
35
36
|
|
36
37
|
# UseArguments::{Use args class name}
|
@@ -41,9 +42,21 @@ using UseArguments::Array
|
|
41
42
|
p [1, 2, 3].map { _1 + _1 }
|
42
43
|
# => [2, 4, 6]
|
43
44
|
|
45
|
+
# Splatted array argument.
|
46
|
+
p [[1, 2], [3, 4]].use_args.map { _1 + _2 }
|
47
|
+
# => [3, 7]
|
48
|
+
|
49
|
+
p [1, 2, 3].map { _1 + _receiver.size }
|
50
|
+
# => [4, 5, 6]
|
51
|
+
|
52
|
+
|
44
53
|
using UseArguments::Hash
|
45
54
|
p ({homu: 13, mami: 14, mado: 13}).select { _2 < 14 }
|
46
55
|
# => {:homu=>13, :mado=>13}
|
56
|
+
|
57
|
+
# Splatted array argument.
|
58
|
+
p data.map { "#{_1}:#{_2}" }
|
59
|
+
# => ["homu:13", "mami:14", "mado:13"]
|
47
60
|
```
|
48
61
|
|
49
62
|
## Development
|
@@ -56,6 +69,17 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
56
69
|
|
57
70
|
Bug reports and pull requests are welcome on GitHub at https://github.com/osyo-manga/use_arguments.
|
58
71
|
|
72
|
+
## Release note
|
73
|
+
|
74
|
+
* 0.2.0
|
75
|
+
* Splatted array argument.
|
76
|
+
* Add `_receiver` parameter.
|
77
|
+
* Support lambda.
|
78
|
+
* Bug fix.
|
79
|
+
|
80
|
+
* 0.1.0
|
81
|
+
* Release!!
|
82
|
+
|
59
83
|
## Special Thanks
|
60
84
|
|
61
85
|
* [supermomonga](http://qiita.com/supermomonga/items/b0576847b1b88e3cd400)
|
data/example/simple.rb
CHANGED
@@ -5,10 +5,12 @@ using UseArguments
|
|
5
5
|
|
6
6
|
=begin
|
7
7
|
Implicitly defined parameters in block.
|
8
|
-
_1, _2..._N :
|
9
|
-
|
8
|
+
_1, _2..._N : Argument value.
|
9
|
+
_ : _1
|
10
|
+
_args : Argument array.
|
10
11
|
_self : self Proc object.
|
11
12
|
_yield : block argument.
|
13
|
+
_receiver : receiver object.
|
12
14
|
=end
|
13
15
|
|
14
16
|
#--------------------------------------
|
@@ -33,6 +35,13 @@ p f.call { |a, b| a - b }
|
|
33
35
|
p f.call &plus
|
34
36
|
# => 3
|
35
37
|
|
38
|
+
# Array argument is splatted in proc.
|
39
|
+
p proc { _1 + _1 }.use_args.call [1, 2]
|
40
|
+
# => 2
|
41
|
+
|
42
|
+
# Array argument is no splatted in lambda.
|
43
|
+
p lambda { _1 + _1 }.use_args.call [1, 2]
|
44
|
+
# => [1, 2, 1, 2]
|
36
45
|
|
37
46
|
#--------------------------------------
|
38
47
|
# Object#use_args
|
@@ -42,6 +51,14 @@ p f.call &plus
|
|
42
51
|
p [1, 2, 3].use_args.map { _1 * _1 }
|
43
52
|
# => [1, 4, 9]
|
44
53
|
|
54
|
+
p [[1, 2], [3, 4]].use_args.map &proc{ _1 + _1 }
|
55
|
+
# => [2, 6]
|
56
|
+
|
57
|
+
p [[1, 2], [3, 4]].use_args.map &lambda{ _1 + _1 }
|
58
|
+
# => [[1, 2, 1, 2], [3, 4, 3, 4]]
|
59
|
+
|
60
|
+
p [1, 2, 3].use_args.map { _1 + _receiver.size }
|
61
|
+
# => [4, 5, 6]
|
45
62
|
|
46
63
|
#--------------------------------------
|
47
64
|
# Class method use args.
|
@@ -55,7 +72,18 @@ using UseArguments::Array
|
|
55
72
|
p [1, 2, 3].map { _1 + _1 }
|
56
73
|
# => [2, 4, 6]
|
57
74
|
|
75
|
+
# Splatted array argument.
|
76
|
+
p [[1, 2], [3, 4]].use_args.map { _1 + _2 }
|
77
|
+
# => [3, 7]
|
78
|
+
|
58
79
|
using UseArguments::Hash
|
59
|
-
|
80
|
+
|
81
|
+
data = {homu: 13, mami: 14, mado: 13}
|
82
|
+
p data.select { _2 < 14 }
|
60
83
|
# => {:homu=>13, :mado=>13}
|
61
84
|
|
85
|
+
# Splatted array argument.
|
86
|
+
p data.map { "#{_1}:#{_2}" }
|
87
|
+
# => ["homu:13", "mami:14", "mado:13"]
|
88
|
+
|
89
|
+
|
data/lib/use_arguments.rb
CHANGED
@@ -5,20 +5,30 @@ require "use_arguments/version"
|
|
5
5
|
|
6
6
|
module UseArguments
|
7
7
|
module ToUseArgs
|
8
|
-
def use_args
|
9
|
-
return self unless self.parameters.
|
8
|
+
def use_args receiver = self
|
9
|
+
return self unless self.parameters.empty?
|
10
|
+
|
10
11
|
self_ = self
|
11
|
-
|
12
|
-
|
12
|
+
x = proc do |*args, &block|
|
13
|
+
::Object.new.instance_eval do
|
14
|
+
args = args[0] if !self_.lambda? && args.size == 1 && args[0].class == Array
|
15
|
+
|
13
16
|
define_singleton_method(:_args) { args }
|
14
17
|
define_singleton_method(:_) { args[0] }
|
15
18
|
define_singleton_method(:_self) { x }
|
19
|
+
define_singleton_method(:_receiver) { receiver }
|
16
20
|
define_singleton_method(:_yield) { |*args, &_block| block.call *args, &_block }
|
17
21
|
args.size.times do |i|
|
18
22
|
define_singleton_method("_#{i + 1}") { args[i] }
|
19
23
|
end
|
20
|
-
|
21
|
-
|
24
|
+
|
25
|
+
define_singleton_method(:method_missing) do |name, *args, &block|
|
26
|
+
return nil if name.to_s =~ /^_\d+$/
|
27
|
+
super(name, *args, &block)
|
28
|
+
end unless self_.lambda?
|
29
|
+
|
30
|
+
instance_exec &self_
|
31
|
+
end
|
22
32
|
end
|
23
33
|
end
|
24
34
|
end
|
@@ -27,13 +37,19 @@ module UseArguments
|
|
27
37
|
include ToUseArgs
|
28
38
|
end
|
29
39
|
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
using UseArguments
|
44
|
+
|
45
|
+
module UseArguments
|
30
46
|
module AsUseArgs
|
31
47
|
def use_args
|
32
48
|
self_ = self
|
33
|
-
::Class.new(
|
49
|
+
::Class.new(BasicObject) do
|
34
50
|
define_singleton_method(:method_missing) do |name, *args, &block|
|
35
|
-
return self_.__send__
|
36
|
-
self_.__send__
|
51
|
+
return self_.__send__ name,*args, &block unless block && block.parameters.empty?
|
52
|
+
self_.__send__ name, *args, &block.use_args(self_)
|
37
53
|
end
|
38
54
|
end
|
39
55
|
end
|
@@ -57,18 +73,13 @@ module UseArguments
|
|
57
73
|
end
|
58
74
|
end
|
59
75
|
end
|
60
|
-
end
|
61
76
|
|
62
|
-
|
63
|
-
using ::UseArguments
|
64
|
-
|
65
|
-
module UseArguments
|
66
77
|
module Usable
|
67
78
|
def self.prepend_features mod
|
68
79
|
mod.__send__ :prepend, (Module.new do
|
69
80
|
for name in mod.instance_methods
|
70
81
|
define_method name do |*args, &block|
|
71
|
-
super *args, &(block ? block.use_args : nil)
|
82
|
+
super *args, &(block ? block.use_args(self) : nil)
|
72
83
|
end
|
73
84
|
end
|
74
85
|
end)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: use_arguments
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- osyo-manga
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-03-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|