use_arguments 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 34aad7b80e79a2e0b3ce2c53e6ca7233f4482af3
4
- data.tar.gz: e05c5df2eeab53f272c5893327d860f095a8b0bc
3
+ metadata.gz: f09c3c95f8d433f92f72fa3b467e7ed40acb3620
4
+ data.tar.gz: cff3e9a658f31ec36de74890678763ff14a7557b
5
5
  SHA512:
6
- metadata.gz: bb26e0dd72d4bed75342bfad6f2cf36e393d02c0724854f800a4bc43aaf4aab7b08602e8c586a36cf6b0de1154e4b5ca171a30fede75b57f07a4bc8e85b12392
7
- data.tar.gz: ebc3598168a6b70a48ac44c71fc2dd879bb82bc63daa7aa35342869a4d7d8320ddb6869ad9f690e350c5439e80d48b6be136a962f12c8836f703b2b40be183f4
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)
@@ -5,10 +5,12 @@ using UseArguments
5
5
 
6
6
  =begin
7
7
  Implicitly defined parameters in block.
8
- _1, _2..._N : argument value.
9
- _args : argument array.
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
- p ({homu: 13, mami: 14, mado: 13}).select { _2 < 14 }
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
+
@@ -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.size == 0
8
+ def use_args receiver = self
9
+ return self unless self.parameters.empty?
10
+
10
11
  self_ = self
11
- ::Object.new.instance_eval do
12
- x = proc { |*args, &block|
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
- instance_exec *args, &self_
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(::BasicObject) do
49
+ ::Class.new(BasicObject) do
34
50
  define_singleton_method(:method_missing) do |name, *args, &block|
35
- return self_.__send__(name, *args, &block) unless block && block.parameters.size == 0
36
- self_.__send__(name, *args, &ToUseArgs.instance_method(:use_args).bind(block).())
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)
@@ -1,3 +1,3 @@
1
1
  module UseArguments
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  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.1.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-02-28 00:00:00.000000000 Z
11
+ date: 2016-03-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler