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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b8306fea8d8bce22711d06e8d00e3dcaa4543337
4
- data.tar.gz: d3f92c381abf23b9291c0eef01519bdeadd3e254
3
+ metadata.gz: 708b41d5dbceca259069faee4280de42e25770e0
4
+ data.tar.gz: 0d27d6931f396d81c15866431917f49400bf7061
5
5
  SHA512:
6
- metadata.gz: 0a81a3b942880739cb9c045b3269b070689f31e3e6afeb5787bb22344b7af2bed96e0f460228446d35ed23cc523418acff2b470688951c80a0f700b46263a86a
7
- data.tar.gz: fbd8970d940c068b550dd97ddedab4f84fcfc738cdbe918c56e7699f2af68616a1065a690def8e0a2c20ce79d2ae9d268a62cea5ad80c7c78ffbefb3b75f25fd
6
+ metadata.gz: 3f9f7744eafc8fdfa10ac104d4ba69a6b5c03738e76780559a49576bec61e36b9c08aba6ed16414dc5bc5bbac05a2c48e498dfb6bce959f17d88d88959de745d
7
+ data.tar.gz: 24c4cc8dedae212ac5baa091dadbc241506c93693a247e3a4a13d22f65386d25228979594932ff103949962cd746f1e47434afb18f7695496dab432863e599bd
@@ -1,3 +1,3 @@
1
1
  module PipeChain
2
- VERSION = "0.1.0"
2
+ VERSION = "1.0.0"
3
3
  end
data/lib/pipe_chain.rb CHANGED
@@ -1,5 +1,64 @@
1
1
  require "pipe_chain/version"
2
2
 
3
- module PipeChain
4
- # Your code goes here...
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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pipe_chain
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryo Ota