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 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