iolite 0.0.3 → 2.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.
Files changed (61) hide show
  1. checksums.yaml +5 -5
  2. metadata +17 -122
  3. data/.gitignore +0 -24
  4. data/.rspec +0 -2
  5. data/.travis.yml +0 -5
  6. data/Gemfile +0 -4
  7. data/LICENSE.txt +0 -22
  8. data/README.md +0 -88
  9. data/Rakefile +0 -7
  10. data/docs/iolite.md +0 -314
  11. data/docs/release_note.md +0 -15
  12. data/example/array.rb +0 -17
  13. data/example/compare_lambda_driver.rb +0 -78
  14. data/example/fizzbuzz.rb +0 -15
  15. data/example/hash.rb +0 -14
  16. data/example/lazy_list.rb +0 -14
  17. data/example/minimal_implement.rb +0 -42
  18. data/example/simple.rb +0 -46
  19. data/example/to_lazy.rb +0 -37
  20. data/iolite.gemspec +0 -24
  21. data/lib/iolite/adaptor/all.rb +0 -22
  22. data/lib/iolite/adaptor/apply.rb +0 -10
  23. data/lib/iolite/adaptor/bind.rb +0 -9
  24. data/lib/iolite/adaptor/callable.rb +0 -7
  25. data/lib/iolite/adaptor/define_send_original_methods.rb +0 -12
  26. data/lib/iolite/adaptor/method_missing.rb +0 -10
  27. data/lib/iolite/adaptor/operators.rb +0 -26
  28. data/lib/iolite/adaptor/send.rb +0 -11
  29. data/lib/iolite/adaptor/to_lazy.rb +0 -11
  30. data/lib/iolite/adaptor/to_proc.rb +0 -10
  31. data/lib/iolite/adaptor.rb +0 -2
  32. data/lib/iolite/adaptored/array.rb +0 -12
  33. data/lib/iolite/adaptored/hash.rb +0 -14
  34. data/lib/iolite/adaptored/iolite_lazy_with_hash.rb +0 -7
  35. data/lib/iolite/adaptored/object_with_to_lazy.rb +0 -5
  36. data/lib/iolite/adaptored/proc.rb +0 -5
  37. data/lib/iolite/adaptored/proc_with_callable.rb +0 -5
  38. data/lib/iolite/adaptored/string.rb +0 -21
  39. data/lib/iolite/functinal/bind.rb +0 -12
  40. data/lib/iolite/functinal/define_iolite_functinal_send_method.rb +0 -9
  41. data/lib/iolite/functinal/invoke.rb +0 -11
  42. data/lib/iolite/functinal/send.rb +0 -13
  43. data/lib/iolite/functinal.rb +0 -4
  44. data/lib/iolite/lazy.rb +0 -40
  45. data/lib/iolite/placeholders.rb +0 -30
  46. data/lib/iolite/refinements/array.rb +0 -16
  47. data/lib/iolite/refinements/hash.rb +0 -18
  48. data/lib/iolite/refinements/object_with_to_lazy.rb +0 -9
  49. data/lib/iolite/refinements/proc.rb +0 -9
  50. data/lib/iolite/refinements/string.rb +0 -26
  51. data/lib/iolite/refinements.rb +0 -6
  52. data/lib/iolite/statement/if.rb +0 -50
  53. data/lib/iolite/statement/if_else.rb +0 -12
  54. data/lib/iolite/statement.rb +0 -3
  55. data/lib/iolite/version.rb +0 -3
  56. data/lib/iolite.rb +0 -14
  57. data/spec/iolite_adaptored_spec.rb +0 -105
  58. data/spec/iolite_functinal_spec.rb +0 -87
  59. data/spec/iolite_lazy_spec.rb +0 -92
  60. data/spec/iolite_spec.rb +0 -212
  61. data/spec/spec_helper.rb +0 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: b6ca3d3bb4d31d7f4b70d22ccf983135a3344c57
4
- data.tar.gz: 8ddf2c25ed3179959febea25d2fbf11b28cdf823
2
+ SHA256:
3
+ metadata.gz: 33829f18505a25740faa99db57689ce53a1b8bd65b50c2313f3fb0de982d5679
4
+ data.tar.gz: 03d1ce2de1ad1bc86222146e1654b5e8e1508ffc0290de9cd623279ab55c4c00
5
5
  SHA512:
6
- metadata.gz: b18b2651ede7eabf4bf92cec73553feba25f98662574a9b2c4e9de3d7be599a38f87bc50dbd0c22967ccbc939faa190bf475702338b7df969eb83e8289cce156
7
- data.tar.gz: 4a5cf6b16d089d5438fc55b2304d3337d48d5b8d2c89501c669e23739d7c506404cd118e2ae6d2c6485aa69464e01e6f915ffbe5bef35acfaf07d072761c7feb
6
+ metadata.gz: 1f9f475ea7b8dbcd0a402c9f155ba77f275eff212ca507d3d66f00da1de21d5cf903ba85b40fc757d6cdb79bbc9db3c3cd3ea6da07e2a0c8087ea125ca173c7e
7
+ data.tar.gz: 0e9cc5ccaff33b09efd338e44922f8d4a7aa57cb6202998350b628da43baac43f1d34ca46c7653e6a9c4a51a8929ffd200b1a745560f82e258fd046a73953165
metadata CHANGED
@@ -1,128 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iolite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - manga_osyo
8
- autorequire:
9
- bindir: bin
8
+ autorequire:
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2015-04-14 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '1.6'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '1.6'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: rspec
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
11
+ date: 2022-01-29 00:00:00.000000000 Z
12
+ dependencies: []
55
13
  description: unblockable library
56
14
  email:
57
15
  - manga.osyo@gmail.com
58
16
  executables: []
59
17
  extensions: []
60
18
  extra_rdoc_files: []
61
- files:
62
- - ".gitignore"
63
- - ".rspec"
64
- - ".travis.yml"
65
- - Gemfile
66
- - LICENSE.txt
67
- - README.md
68
- - Rakefile
69
- - docs/iolite.md
70
- - docs/release_note.md
71
- - example/array.rb
72
- - example/compare_lambda_driver.rb
73
- - example/fizzbuzz.rb
74
- - example/hash.rb
75
- - example/lazy_list.rb
76
- - example/minimal_implement.rb
77
- - example/simple.rb
78
- - example/to_lazy.rb
79
- - iolite.gemspec
80
- - lib/iolite.rb
81
- - lib/iolite/adaptor.rb
82
- - lib/iolite/adaptor/all.rb
83
- - lib/iolite/adaptor/apply.rb
84
- - lib/iolite/adaptor/bind.rb
85
- - lib/iolite/adaptor/callable.rb
86
- - lib/iolite/adaptor/define_send_original_methods.rb
87
- - lib/iolite/adaptor/method_missing.rb
88
- - lib/iolite/adaptor/operators.rb
89
- - lib/iolite/adaptor/send.rb
90
- - lib/iolite/adaptor/to_lazy.rb
91
- - lib/iolite/adaptor/to_proc.rb
92
- - lib/iolite/adaptored/array.rb
93
- - lib/iolite/adaptored/hash.rb
94
- - lib/iolite/adaptored/iolite_lazy_with_hash.rb
95
- - lib/iolite/adaptored/object_with_to_lazy.rb
96
- - lib/iolite/adaptored/proc.rb
97
- - lib/iolite/adaptored/proc_with_callable.rb
98
- - lib/iolite/adaptored/string.rb
99
- - lib/iolite/functinal.rb
100
- - lib/iolite/functinal/bind.rb
101
- - lib/iolite/functinal/define_iolite_functinal_send_method.rb
102
- - lib/iolite/functinal/invoke.rb
103
- - lib/iolite/functinal/send.rb
104
- - lib/iolite/lazy.rb
105
- - lib/iolite/placeholders.rb
106
- - lib/iolite/refinements.rb
107
- - lib/iolite/refinements/array.rb
108
- - lib/iolite/refinements/hash.rb
109
- - lib/iolite/refinements/object_with_to_lazy.rb
110
- - lib/iolite/refinements/proc.rb
111
- - lib/iolite/refinements/string.rb
112
- - lib/iolite/statement.rb
113
- - lib/iolite/statement/if.rb
114
- - lib/iolite/statement/if_else.rb
115
- - lib/iolite/version.rb
116
- - spec/iolite_adaptored_spec.rb
117
- - spec/iolite_functinal_spec.rb
118
- - spec/iolite_lazy_spec.rb
119
- - spec/iolite_spec.rb
120
- - spec/spec_helper.rb
121
- homepage: ''
122
- licenses:
123
- - MIT
124
- metadata: {}
125
- post_install_message:
19
+ files: []
20
+ homepage: https://github.com/osyo-manga/gem-iolite
21
+ licenses: []
22
+ metadata:
23
+ homepage_uri: https://github.com/osyo-manga/gem-iolite
24
+ source_code_uri: https://github.com/osyo-manga/gem-iolite
25
+ changelog_uri: https://github.com/osyo-manga/gem-iolite
26
+ post_install_message:
126
27
  rdoc_options: []
127
28
  require_paths:
128
29
  - lib
@@ -130,21 +31,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
130
31
  requirements:
131
32
  - - ">="
132
33
  - !ruby/object:Gem::Version
133
- version: '0'
34
+ version: 2.6.0
134
35
  required_rubygems_version: !ruby/object:Gem::Requirement
135
36
  requirements:
136
37
  - - ">="
137
38
  - !ruby/object:Gem::Version
138
39
  version: '0'
139
40
  requirements: []
140
- rubyforge_project:
141
- rubygems_version: 2.4.5
142
- signing_key:
41
+ rubygems_version: 3.3.3
42
+ signing_key:
143
43
  specification_version: 4
144
44
  summary: unblockable library
145
- test_files:
146
- - spec/iolite_adaptored_spec.rb
147
- - spec/iolite_functinal_spec.rb
148
- - spec/iolite_lazy_spec.rb
149
- - spec/iolite_spec.rb
150
- - spec/spec_helper.rb
45
+ test_files: []
data/.gitignore DELETED
@@ -1,24 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
18
- *.bundle
19
- *.so
20
- *.o
21
- *.a
22
- mkmf.log
23
- test
24
- _lib
data/.rspec DELETED
@@ -1,2 +0,0 @@
1
- --format documentation
2
- --color
data/.travis.yml DELETED
@@ -1,5 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.1.0
4
- - 2.0.0
5
- - 1.9.3
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in iolite.gemspec
4
- gemspec
data/LICENSE.txt DELETED
@@ -1,22 +0,0 @@
1
- Copyright (c) 2015 manga_osyo
2
-
3
- MIT License
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining
6
- a copy of this software and associated documentation files (the
7
- "Software"), to deal in the Software without restriction, including
8
- without limitation the rights to use, copy, modify, merge, publish,
9
- distribute, sublicense, and/or sell copies of the Software, and to
10
- permit persons to whom the Software is furnished to do so, subject to
11
- the following conditions:
12
-
13
- The above copyright notice and this permission notice shall be
14
- included in all copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md DELETED
@@ -1,88 +0,0 @@
1
- [![Build Status](https://travis-ci.org/osyo-manga/gem-iolite.svg?branch=master)](https://travis-ci.org/osyo-manga/gem-iolite)
2
-
3
- # Iolite
4
-
5
- Lazy block library.
6
-
7
- ## Installation
8
-
9
- Add this line to your application's Gemfile:
10
-
11
- gem 'iolite'
12
-
13
- And then execute:
14
-
15
- $ bundle
16
-
17
- Or install it yourself as:
18
-
19
- $ gem install iolite
20
-
21
- ## Usage
22
-
23
-
24
- ```ruby
25
- require "iolite"
26
-
27
-
28
- #######################################
29
- # Using block
30
- #######################################
31
-
32
- p (1..5).map { |it| it + 3 }
33
- # => [4, 5, 6, 7, 8]
34
-
35
- p (1..5).inject { |memo, item| memo + item }
36
- # => 15
37
-
38
- p ["homu", "mami", "an"].inject(0) { |memo, item| memo + item.length }
39
- # => 10
40
-
41
- p [{name: :homu}, {name: :mami}].map { |it| it[:name] }
42
- # => [:homu, :mami]
43
-
44
-
45
- #######################################
46
- # Using iolite
47
- #######################################
48
-
49
- # using arg1, arg2...
50
- include Iolite::Placeholders
51
-
52
- p (1..5).map &arg1 + 3
53
- # => [4, 5, 6, 7, 8]
54
-
55
- p (1..5).inject &arg1 + arg2
56
- # => 15
57
-
58
- p ["homu", "mami", "an"].inject 0, &arg1 + arg2.length
59
- # => 10
60
-
61
- p [{name: :homu}, {name: :mami}].map &arg1[:name]
62
- # => [:homu, :mami]
63
- ```
64
-
65
- ## Contributing
66
-
67
- 1. Fork it ( https://github.com/osyo-manga/gem-iolite )
68
- 2. Create your feature branch (`git checkout -b my-new-feature`)
69
- 3. Commit your changes (`git commit -am 'Add some feature'`)
70
- 4. Push to the branch (`git push origin my-new-feature`)
71
- 5. Create a new Pull Request
72
-
73
- ## Release note
74
-
75
- ### v0.0.3
76
-
77
- * Fix dcs typo.
78
-
79
- ### v0.0.2
80
-
81
- * Fix Iolite::Statement module method.
82
- * Add `iolite/adaptored/proc_with_callable`.
83
-
84
- ### v0.0.1
85
-
86
- * Release
87
-
88
-
data/Rakefile DELETED
@@ -1,7 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
3
-
4
- RSpec::Core::RakeTask.new(:spec)
5
-
6
- task :default => :spec
7
-
data/docs/iolite.md DELETED
@@ -1,314 +0,0 @@
1
- # iolite
2
-
3
- ## これは何?
4
-
5
- 式を遅延評価するためのライブラリです。
6
- ブロックで行う処理を抽象化し、コードを簡略化することを目的としています。
7
- ちなみにライブラリ名である iolite(アイオライト)は菫青石から取っています。
8
-
9
- ## イントロダクション
10
-
11
- さて、Ruby ではブロック付きメソッド呼び出しを行うことが多いです。
12
-
13
- ```ruby
14
- ["homu", "mami", "mado"].map { |it| it.capitalize }
15
- # => ["Homu", "Mami", "Mado"]
16
- ```
17
-
18
- しかし、上記のようにブロックを使用すると it を2回書く必要が出てきてちょっと手間ですね。
19
- これは 以下のように Symbol#to_proc を利用するように書き換える事が可能です。
20
-
21
- ```ruby
22
- ["homu", "mami", "mado"].map &:capitalize
23
- # => ["Homu", "Mami", "Mado"]
24
- ```
25
-
26
- これでブロックを記述することなく map を使用する事ができました。
27
- では、次のようなコードはどうでしょうか。
28
-
29
- ```ruby
30
- ["homu", "mami", "mado"].select{ |it| it =~ /^m/ }
31
- # => ["mami", "mado"]
32
-
33
- [{ name: "homu" }, { name: "mami" }, { name: "mado" }].map { |it| it[:name] }
34
- # => ["homu", "mami", "mado"]
35
- ```
36
-
37
- 上記のように呼び出したいメソッドに対して引数を渡したい場合はどうしてもブロックで記述する必要が出てきます。
38
- このような場合に iolite を使用することですっきりとした記述をすることができます。
39
-
40
- ```ruby
41
- # iolite を使って書いてみる
42
- # arg1 は第一引数に置き換わり評価される
43
- ["homu", "mami", "mado"].select &arg1 =~ /^m/
44
- # => ["mami", "mado"]
45
-
46
- [{ name: "homu" }, { name: "mami" }, { name: "mado" }].map &arg1[:name]
47
- # => ["homu", "mami", "mado"]
48
- ```
49
-
50
- ## 導入
51
-
52
- #### install
53
-
54
- ```shell
55
- $ gem install iolite
56
- ```
57
-
58
- #### require
59
-
60
- ```ruby
61
- require "iolite"
62
- ```
63
-
64
- ## 簡単な使い方
65
-
66
- iolite ではプレースホルダを使用して、式から遅延評価を行うオブジェクトを定義します。
67
- プレースホルダは arg1, arg2, ...argN と定義されており、それぞれの引数番目の値に置き換わり評価されます。
68
-
69
- ```ruby
70
- # プレースホルダは module Iolite::Placeholders で定義されている
71
- include Iolite::Placeholders
72
-
73
- # arg1 は第一引数を返す
74
- arg1.call(1, 2)
75
- # => 1
76
-
77
- # arg1 は第二引数を返す
78
- arg2.call(1, 2)
79
- # => 2
80
- ```
81
-
82
- このプレースホルダからメソッドを呼び出すと、そのメソッドを遅延評価するオブジェクトを返します。
83
-
84
- ```ruby
85
- # 第一引数に対して #capitalize メソッドを呼び出すオブジェクトを返す
86
- capitalize_ = arg1.capitalize
87
-
88
- capitalize_.call("homu")
89
- # => "Homu"
90
- capitalize_.call("an")
91
- # => "An"
92
-
93
- # メソッドの引数に対してプレースホルダを渡すこともできる
94
- plus = arg1 + arg2
95
- # plus = arg1.+(arg2)
96
-
97
- plus.call(1, 2)
98
- # => 3
99
- ```
100
-
101
- 次のようにメソッドチェーンやネストしてプレースホルダを使用することもできます。
102
-
103
- ```ruby
104
- # 連続してメソッドを呼び出すこともできる
105
- length_ = arg1.to_s(4).length
106
- length_.call(:homu)
107
- # => 4
108
- length_.call(42)
109
- # => 2
110
-
111
- # ネストして呼び出すことも可能
112
- f = arg1[arg2].length + arg1[arg3]
113
- f.call({ :name => "homu", :age => 13 }, :name, :age)
114
- # => 17
115
- ```
116
-
117
-
118
- ### ブロックに渡す
119
-
120
- & をつけることでブロックに渡すことができます。
121
-
122
- ```ruby
123
- ["homu", "mami", "mado"].select &arg1 =~ /^m/
124
- # => ["mami", "mado"]
125
- [:homu, :mami, :mado].inject 0, &arg1 + arg2.to_s.length
126
- # => 12
127
- ```
128
-
129
-
130
- ## Iolite::Lazy < BasicObject (class)
131
-
132
- Iolite::Lazy は遅延評価を行うためのオブジェクトです。
133
- プレースホルダなどはこのオブジェクトのラッパになります。
134
-
135
- ```ruby
136
- f = Iolite::Lazy.new { |a, b| a + b }
137
- p f.call(1, 2)
138
- # => 10
139
- ```
140
-
141
- これは次のようにメソッド呼び出しを遅延評価する事ができます。
142
-
143
- ```ruby
144
- twice = Iolite::Lazy.new { |a| a + a }
145
- twice.call(2)
146
- # => 4
147
-
148
- # 演算子を遅延評価
149
- twice_plus3 = (twice + 3)
150
- twice_plus3.call(1) # to twice.call(1) + 3
151
- # => 5
152
-
153
- # メソッド呼び出しを遅延評価
154
- upcase_ = twice.upcase
155
- upcase_.call("homu") # to twice.call("homu").upcase
156
- # => "HOMUHOMU"
157
- ```
158
-
159
- また、このクラスは BasicObject を継承していることに注意してください。
160
-
161
- #### Iolite::Lazy#initialize &block
162
-
163
- 遅延評価を行うブロックを渡してオブジェクトを作成します。
164
- このブロックは `#call` の呼び出し時に評価されます。
165
-
166
- #### Iolite::Lazy#call(*args)
167
-
168
- 初期化時に渡したブロックを評価します。
169
-
170
-
171
- #### Iolite::Lazy#send(name, *args)
172
-
173
- name という名前のメソッドを遅延評価します。
174
- 遅延評価した結果に対して `#send(name, *args)` を呼び出す Iolite::Lazy を返します。
175
-
176
- ```ruby
177
- it = Iolite::Lazy.new { |it| it }
178
- it.send(:length).call("homu") # to { |it| it }.call("homu").length
179
- ```
180
-
181
- #### Iolite::Lazy#method_missing(name, *args)
182
-
183
- `Iolite::Lazy#send(name, *args)` を返します。
184
- Iolite::Lazy で定義されていないメソッドであれば `#send` を使用することなくメソッドを遅延評価することができます。
185
-
186
- #### Iolite::Lazy#to_proc
187
-
188
- `#call` を呼び出す Proc を返します。
189
- これにより & を着けてブロックに渡すことができます。
190
-
191
- ```ruby
192
- it = Iolite::Lazy.new { |it| it }
193
- ["homu", "mami", "mado"].map &it.capitalize
194
- # => ["Homu", "Mami", "Mado"]
195
-
196
- ["homu", "mami", "mado"].select &it =~ /^m/
197
- # => ["mami", "mado"]
198
- ```
199
-
200
-
201
- ## プレースホルダ
202
-
203
- プレースホルダは任意の引数値に対して遅延評価を行うために使用します。
204
- プレースホルダは arg1 〜 arg10 まで定義されており、argN 番目の引数に対応します。
205
- これは module Iolite::Placeholders で定義されています。
206
-
207
- ```ruby
208
- include Iolite::Placeholders
209
-
210
- arg1.call(1, 2)
211
- # => 1
212
-
213
- arg2.call(1, 2)
214
- # => 1
215
- ```
216
-
217
- このプレースホルダは Iolite::Lazy オブジェクトなので Iolite::Lazy と同様に遅延評価を行うことができます。
218
-
219
-
220
- ```ruby
221
- include Iolite::Placeholders
222
-
223
- (arg1 + arg2).call(1, 2)
224
- # => 3
225
-
226
- arg1.to_s.length.call(:homu)
227
- # => 4
228
-
229
- ["homu", "mami", "mado"].select(&arg1 =~ /^m/).map &arg1.capitalize
230
- # => ["Mami", "Mado"]
231
-
232
- (1..5).map &arg1.to_s(2)
233
- # => ["1", "10", "11", "100", "101"]
234
-
235
- [:homu, :mami, :an].select &arg1.to_s.length > 3
236
- # => [:homu, :mami]
237
- ```
238
-
239
- ## Proc と併用して使用する
240
-
241
- 定義した式の中で `Iolite::Lazy` やプレースホルダ使用すると評価時に `Iolite::Lazy` オブジェクトが遅延評価されます。
242
- しかし、Proc などを渡した場合には `Iolite::Lazy` のように評価時に処理は行われません。
243
-
244
- ```ruby
245
- a = Iolite::Lazy.new { |it| it }
246
- b = Proc.new { |it| it + it }
247
-
248
- # Proc は遅延評価されないので 3 + Proc が行われようとしてエラーになる
249
- p (a + b).call(3)
250
- # => error: `+': Proc can't be coerced into Fixnum (TypeError)
251
- ```
252
-
253
- これは、意図しない副作用を抑えるためにデフォルトでは Proc は遅延評価を行わないようにしているからです。
254
- Proc も同様に評価して欲しい場合は以下の `require` を追加してモンキーパッチを適用してください。
255
-
256
- ```ruby
257
- # モンキーパッチを適用させるための require
258
- require "iolite/adaptored/proc_with_callable"
259
-
260
- a = Iolite::Lazy.new { |it| it }
261
- b = Proc.new { |it| it + it }
262
-
263
- # Proc が遅延評価されるようになるので
264
- # a.call(3) + b.call(3)
265
- # と評価される
266
- (a + b).call(3)
267
- # => 9
268
-
269
- # こんな使い方とか
270
- p (arg1 + :to_s.to_proc.call(arg2)).call("homu", 42)
271
- # => "homu42"
272
- ```
273
-
274
- ## Object#to_lazy
275
-
276
- `Object#to_lazy` は自身を遅延評価するオブジェクト(Iolite::Lazy オブジェクト)として返すメソッドです。
277
- `Object#to_lazy` を使用したい場合は refinements が使える環境であれば、
278
-
279
- ```ruby
280
- using Iolite::Refinements::ObjectWithToLazy
281
- ```
282
-
283
- refinements が使えない、もしくは直接 Object を拡張したい場合は
284
-
285
- ```ruby
286
- require "iolite/adaptored/object_with_to_lazy"
287
- ```
288
-
289
- することで利用することができます。
290
-
291
-
292
- #### Example
293
-
294
- ```ruby
295
- # (1..Float::INFINITY) を遅延評価する
296
- lazy_list = (1..Float::INFINITY).to_lazy
297
- twice_list = lazy_list.first(arg1).map(&arg1 * 2)
298
-
299
- p twice_list.call(5)
300
- # => [2, 4, 6, 8, 10]
301
- p twice_list.call(10)
302
- # => [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
303
-
304
- ["homu", "mami", "mado"].each &to_lazy.printf("%s:%s, ", arg1, arg1)
305
- # => homu:homu, mami:mami, mado:mado,
306
-
307
- a = { :name => "mami", :age => 13 }
308
- b = { :name => "mami" }
309
- a.reject &arg2 == b.to_lazy[arg1]
310
- # => { :age => 13 }
311
- ```
312
-
313
-
314
-
data/docs/release_note.md DELETED
@@ -1,15 +0,0 @@
1
- # リリースノート
2
-
3
- ## v0.0.3
4
-
5
- * Fix dcs typo
6
-
7
- ## v0.0.2
8
-
9
- * Iolite::Statement のモジュールメソッドが呼び出せなかった不具合を修正
10
- * iolite/adaptored/proc_with_callable を追加
11
-
12
- ## v0.0.1
13
-
14
- * リリース
15
-
data/example/array.rb DELETED
@@ -1,17 +0,0 @@
1
- require "iolite"
2
-
3
- # Use require
4
- # define Array#to_proc
5
- require "iolite/adaptored/array"
6
-
7
- include Iolite::Placeholders
8
-
9
- p [1, arg1, 2, arg1 + arg2].to_proc.call(1, 2)
10
- # => [1, 1, 2, 3]
11
-
12
- p [1, 2, 3].map &[arg1, arg1 ,arg1]
13
- # => [[1, 1, 1], [2, 2, 2], [3, 3, 3]]
14
-
15
- p [1, 2, 3].map &((1..3).map &arg1.to_l + 3)
16
- # => [[4, 4, 4], [5, 5, 5], [6, 6, 6]]
17
-