pipe_chain 0.1.0 → 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/lib/pipe_chain/version.rb +1 -1
- data/lib/pipe_chain.rb +61 -2
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 708b41d5dbceca259069faee4280de42e25770e0
|
|
4
|
+
data.tar.gz: 0d27d6931f396d81c15866431917f49400bf7061
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3f9f7744eafc8fdfa10ac104d4ba69a6b5c03738e76780559a49576bec61e36b9c08aba6ed16414dc5bc5bbac05a2c48e498dfb6bce959f17d88d88959de745d
|
|
7
|
+
data.tar.gz: 24c4cc8dedae212ac5baa091dadbc241506c93693a247e3a4a13d22f65386d25228979594932ff103949962cd746f1e47434afb18f7695496dab432863e599bd
|
data/lib/pipe_chain/version.rb
CHANGED
data/lib/pipe_chain.rb
CHANGED
|
@@ -1,5 +1,64 @@
|
|
|
1
1
|
require "pipe_chain/version"
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
# 以下の書き方を
|
|
4
|
+
# puts ("%f" % 0.12012).rjust 10
|
|
5
|
+
# 以下のようにできます
|
|
6
|
+
# "%f" % 0.12012 | :rjust[10] ^ :puts
|
|
7
|
+
#
|
|
8
|
+
# 全体をカッコで囲むときに威力を発揮します
|
|
9
|
+
# 例えば、「"%f" % 0.12012」にrjustするとき、全体をカッコで囲み「("%f" % 0.12012)」と書き換えなくてはいけなくなります
|
|
10
|
+
# そして、それを出力しようと思ったら、行頭に戻って puts を書く必要がありますが、「^ :puts」と書くだけでOKです
|
|
11
|
+
|
|
12
|
+
# メソッド名と引数を管理するため
|
|
13
|
+
class SymMethod
|
|
14
|
+
attr_reader :name, :params, :block
|
|
15
|
+
def initialize(name, params, &block)
|
|
16
|
+
@name, @params, @block = name, params, block
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# シンボル[]をした時にSymMethodを返すようにする
|
|
21
|
+
class Symbol
|
|
22
|
+
# method(10)が:method[10]
|
|
23
|
+
def [] *params, &block
|
|
24
|
+
SymMethod.new(self, params, &block)
|
|
25
|
+
end
|
|
5
26
|
end
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
# すべてのクラスに適応する
|
|
30
|
+
Object.constants.select{|c| Object.const_get(c).class == Class}.map{|c| Object.const_get(c)}.each do |clazz|
|
|
31
|
+
clazz.class_eval do
|
|
32
|
+
# 「|」あるときは「__|__」に退避させる
|
|
33
|
+
alias_method(:__bar, :|) if method_defined?(:|)
|
|
34
|
+
alias_method(:__hat, :'^') if method_defined?(:'^')
|
|
35
|
+
|
|
36
|
+
private :__bar if method_defined?(:__bar)
|
|
37
|
+
private :__hat if method_defined?(:__hat)
|
|
38
|
+
|
|
39
|
+
# self.method が self | :methodで動くように
|
|
40
|
+
def | (method, *others, &block)
|
|
41
|
+
# method名がシンボルなら
|
|
42
|
+
if method.class == Symbol
|
|
43
|
+
self.send(method)
|
|
44
|
+
elsif method.class == SymMethod
|
|
45
|
+
self.send(method.name, *method.params, &method.block)
|
|
46
|
+
else
|
|
47
|
+
# method名がシンボルでないなら、普通の「|」を呼ぶ
|
|
48
|
+
__bar(method, *others, &block) if self.class.private_method_defined? :__bar
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# puts "hello"を "hello" ^ :putsで動かす
|
|
53
|
+
def ^(func, *others, &block)
|
|
54
|
+
if func.class == Symbol
|
|
55
|
+
send(func, self)
|
|
56
|
+
else
|
|
57
|
+
# 普通の「^」を呼ぶ
|
|
58
|
+
send(:__hat, func, *others, &block) if self.class.private_method_defined? :__hat
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
end
|
|
64
|
+
end
|