iolite 0.0.3 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- metadata +17 -122
- data/.gitignore +0 -24
- data/.rspec +0 -2
- data/.travis.yml +0 -5
- data/Gemfile +0 -4
- data/LICENSE.txt +0 -22
- data/README.md +0 -88
- data/Rakefile +0 -7
- data/docs/iolite.md +0 -314
- data/docs/release_note.md +0 -15
- data/example/array.rb +0 -17
- data/example/compare_lambda_driver.rb +0 -78
- data/example/fizzbuzz.rb +0 -15
- data/example/hash.rb +0 -14
- data/example/lazy_list.rb +0 -14
- data/example/minimal_implement.rb +0 -42
- data/example/simple.rb +0 -46
- data/example/to_lazy.rb +0 -37
- data/iolite.gemspec +0 -24
- data/lib/iolite/adaptor/all.rb +0 -22
- data/lib/iolite/adaptor/apply.rb +0 -10
- data/lib/iolite/adaptor/bind.rb +0 -9
- data/lib/iolite/adaptor/callable.rb +0 -7
- data/lib/iolite/adaptor/define_send_original_methods.rb +0 -12
- data/lib/iolite/adaptor/method_missing.rb +0 -10
- data/lib/iolite/adaptor/operators.rb +0 -26
- data/lib/iolite/adaptor/send.rb +0 -11
- data/lib/iolite/adaptor/to_lazy.rb +0 -11
- data/lib/iolite/adaptor/to_proc.rb +0 -10
- data/lib/iolite/adaptor.rb +0 -2
- data/lib/iolite/adaptored/array.rb +0 -12
- data/lib/iolite/adaptored/hash.rb +0 -14
- data/lib/iolite/adaptored/iolite_lazy_with_hash.rb +0 -7
- data/lib/iolite/adaptored/object_with_to_lazy.rb +0 -5
- data/lib/iolite/adaptored/proc.rb +0 -5
- data/lib/iolite/adaptored/proc_with_callable.rb +0 -5
- data/lib/iolite/adaptored/string.rb +0 -21
- data/lib/iolite/functinal/bind.rb +0 -12
- data/lib/iolite/functinal/define_iolite_functinal_send_method.rb +0 -9
- data/lib/iolite/functinal/invoke.rb +0 -11
- data/lib/iolite/functinal/send.rb +0 -13
- data/lib/iolite/functinal.rb +0 -4
- data/lib/iolite/lazy.rb +0 -40
- data/lib/iolite/placeholders.rb +0 -30
- data/lib/iolite/refinements/array.rb +0 -16
- data/lib/iolite/refinements/hash.rb +0 -18
- data/lib/iolite/refinements/object_with_to_lazy.rb +0 -9
- data/lib/iolite/refinements/proc.rb +0 -9
- data/lib/iolite/refinements/string.rb +0 -26
- data/lib/iolite/refinements.rb +0 -6
- data/lib/iolite/statement/if.rb +0 -50
- data/lib/iolite/statement/if_else.rb +0 -12
- data/lib/iolite/statement.rb +0 -3
- data/lib/iolite/version.rb +0 -3
- data/lib/iolite.rb +0 -14
- data/spec/iolite_adaptored_spec.rb +0 -105
- data/spec/iolite_functinal_spec.rb +0 -87
- data/spec/iolite_lazy_spec.rb +0 -92
- data/spec/iolite_spec.rb +0 -212
- data/spec/spec_helper.rb +0 -2
@@ -1,26 +0,0 @@
|
|
1
|
-
require "iolite/adaptor/all"
|
2
|
-
require "iolite/functinal/invoke"
|
3
|
-
|
4
|
-
module Iolite module Refinements
|
5
|
-
module String
|
6
|
-
refine ::String do
|
7
|
-
include Iolite::Adaptor::ToProc
|
8
|
-
include Iolite::Adaptor::Callable
|
9
|
-
def call *args
|
10
|
-
result = self.clone
|
11
|
-
args.each_with_index { |it, i|
|
12
|
-
result.gsub! Iolite::Placeholders.const_get("ARG#{i+1}").to_s, it.to_s
|
13
|
-
}
|
14
|
-
result
|
15
|
-
end
|
16
|
-
|
17
|
-
def to_call_by_eval binding = nil
|
18
|
-
Iolite.lambda { |*args|
|
19
|
-
gsub(/#{'#{(.*?)}'}/) {
|
20
|
-
eval($1, binding).call(*args)
|
21
|
-
}
|
22
|
-
}
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end end
|
data/lib/iolite/refinements.rb
DELETED
data/lib/iolite/statement/if.rb
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
require "iolite/lazy"
|
2
|
-
require "iolite/functinal"
|
3
|
-
|
4
|
-
module Iolite module Statement
|
5
|
-
|
6
|
-
class IfThenElse
|
7
|
-
def initialize cond, then_
|
8
|
-
@cond = cond
|
9
|
-
@then_ = then_
|
10
|
-
end
|
11
|
-
|
12
|
-
def [](*else_)
|
13
|
-
Iolite.lazy { |*args|
|
14
|
-
if Iolite::Functinal.invoke(@cond, *args)
|
15
|
-
Iolite::Functinal.invoke_a(@then_, *args).last
|
16
|
-
else
|
17
|
-
Iolite::Functinal.invoke_a(else_, *args).last
|
18
|
-
end
|
19
|
-
}
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
class If
|
24
|
-
def initialize cond
|
25
|
-
@cond = cond
|
26
|
-
end
|
27
|
-
|
28
|
-
def [](*then_)
|
29
|
-
if_then = Iolite::Lazy.new { |*args|
|
30
|
-
if Iolite::Functinal.invoke(@cond, *args)
|
31
|
-
Iolite::Functinal.invoke_a(then_, *args).last
|
32
|
-
end
|
33
|
-
}
|
34
|
-
cond = @cond
|
35
|
-
(class << if_then; self; end).class_eval {
|
36
|
-
define_method(:else_) {
|
37
|
-
IfThenElse.new cond, then_
|
38
|
-
}
|
39
|
-
}
|
40
|
-
if_then
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def if_ cond
|
45
|
-
If.new cond
|
46
|
-
end
|
47
|
-
|
48
|
-
module_function :if_
|
49
|
-
|
50
|
-
end end
|
data/lib/iolite/statement.rb
DELETED
data/lib/iolite/version.rb
DELETED
data/lib/iolite.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
require "iolite/version"
|
2
|
-
require "iolite/adaptor"
|
3
|
-
require "iolite/functinal"
|
4
|
-
require "iolite/lazy"
|
5
|
-
require "iolite/placeholders"
|
6
|
-
require "iolite/statement"
|
7
|
-
|
8
|
-
# Not support 1.9.x
|
9
|
-
require "iolite/refinements" if RUBY_VERSION.to_f > 2.0
|
10
|
-
|
11
|
-
module Iolite
|
12
|
-
include Functinal
|
13
|
-
include Statement
|
14
|
-
end
|
@@ -1,105 +0,0 @@
|
|
1
|
-
load 'spec_helper.rb'
|
2
|
-
require "iolite"
|
3
|
-
require "iolite/adaptored/array"
|
4
|
-
require "iolite/adaptored/hash"
|
5
|
-
require "iolite/adaptored/proc"
|
6
|
-
require "iolite/adaptored/string"
|
7
|
-
require "iolite/adaptored/object_with_to_lazy"
|
8
|
-
|
9
|
-
describe "Iolite Adaptored" do
|
10
|
-
include Iolite::Placeholders
|
11
|
-
|
12
|
-
describe "Array" do
|
13
|
-
it "call" do
|
14
|
-
expect([arg1, arg1, arg1].call(1)).to eq([1, 1, 1])
|
15
|
-
end
|
16
|
-
it "call with value" do
|
17
|
-
expect([arg1, 3, arg1].call(1)).to eq([1, 3, 1])
|
18
|
-
end
|
19
|
-
it "bind" do
|
20
|
-
expect([arg1, arg1, arg1].bind(arg2).call(1, 2)).to eq([2, 2, 2])
|
21
|
-
end
|
22
|
-
it "call invoke" do
|
23
|
-
expect(Iolite::Functinal.invoke([arg1, arg1, arg1], 1)).to eq([1, 1, 1])
|
24
|
-
end
|
25
|
-
it "nest" do
|
26
|
-
expect([arg1, [arg2, arg3]].call(1, 2, 3)).to eq([1, [2, 3]])
|
27
|
-
end
|
28
|
-
it "nest binding" do
|
29
|
-
expect([arg1, [arg1, arg2].bind(arg3, arg2)].call(1, 2, 3)).to eq([1, [3, 2]])
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
describe "Hash" do
|
34
|
-
it "call" do
|
35
|
-
expect({ arg1 => arg2 }.call(:name, :homu)).to eq({ name: :homu })
|
36
|
-
end
|
37
|
-
it "call key" do
|
38
|
-
expect({ arg1 => :mami }.call(:name, :homu)).to eq({ name: :mami })
|
39
|
-
end
|
40
|
-
it "call value" do
|
41
|
-
expect({ :mami => arg1 }.call(:name, :homu)).to eq({ mami: :name })
|
42
|
-
end
|
43
|
-
it "calls" do
|
44
|
-
expect({ arg1 => arg2, arg1 => arg3 }.call(:name, :homu, :mado)).to eq({ name: :homu, name: :mado })
|
45
|
-
end
|
46
|
-
it "bind" do
|
47
|
-
expect({ arg1 => arg3, arg2 => arg4 }.bind(arg1, arg1, arg2, arg3).call(:name, :homu, :mado)).to eq({ name: :homu, name: :mado })
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
describe "Proc" do
|
52
|
-
describe "operator" do
|
53
|
-
it "proc" do
|
54
|
-
expect((proc { 10 } + 20).call()).to eq(30)
|
55
|
-
end
|
56
|
-
it "lambda" do
|
57
|
-
expect((lambda { 10 } + 20).call()).to eq(30)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
describe "bind" do
|
61
|
-
it "proc" do
|
62
|
-
expect(proc { |a, b| a + b }.bind(arg1, 2).call(1)).to eq(3)
|
63
|
-
end
|
64
|
-
it "lambda" do
|
65
|
-
expect(proc { |a, b| a - b }.bind(2, arg1).call(1)).to eq(1)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
describe "Symbol" do
|
69
|
-
it "#to_proc" do
|
70
|
-
expect((arg1.to_s + :to_s.to_proc).call(42)).to eq("4242")
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
describe "String" do
|
76
|
-
it "call" do
|
77
|
-
expect("value:#{arg1}:#{arg2}".call(1, 2)).to eq("value:1:2")
|
78
|
-
end
|
79
|
-
it "#to_call_by_eval" do
|
80
|
-
expect('value:#{ Iolite::Placeholders.arg1 }:#{ Iolite::Placeholders.arg2 }'.to_call_by_eval.call(1, 2)).to eq("value:1:2")
|
81
|
-
end
|
82
|
-
it "#to_call_by_eval binding" do
|
83
|
-
var = 10
|
84
|
-
expect('value:#{ arg1 + arg2 * var }:#{ arg2 - arg1 }'.to_call_by_eval(binding).call(1, 2)).to eq("value:21:1")
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
describe "Object" do
|
89
|
-
describe "#to_lazy" do
|
90
|
-
it "lazy" do
|
91
|
-
expect(1.to_lazy.call()).to eq(1)
|
92
|
-
end
|
93
|
-
it "operator" do
|
94
|
-
expect((1.to_lazy + 2).call()).to eq(3)
|
95
|
-
end
|
96
|
-
it "operator with placeholder" do
|
97
|
-
expect((1.to_lazy + arg1).call(2)).to eq(3)
|
98
|
-
end
|
99
|
-
it "call method" do
|
100
|
-
expect(((1..10).to_lazy.first arg1).call(3)).to eq([1, 2, 3])
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
@@ -1,87 +0,0 @@
|
|
1
|
-
load 'spec_helper.rb'
|
2
|
-
require "iolite/functinal"
|
3
|
-
|
4
|
-
|
5
|
-
describe "Iolite::Functinal" do
|
6
|
-
include Iolite::Functinal
|
7
|
-
class Callable
|
8
|
-
def iolite_functinal_invoke_call a, b
|
9
|
-
a + b
|
10
|
-
end
|
11
|
-
end
|
12
|
-
class Uncallable
|
13
|
-
def call x
|
14
|
-
x + x
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
class First
|
19
|
-
def iolite_functinal_invoke_call *args
|
20
|
-
args[0]
|
21
|
-
end
|
22
|
-
def call *args
|
23
|
-
args[0]
|
24
|
-
end
|
25
|
-
end
|
26
|
-
first = First.new
|
27
|
-
|
28
|
-
describe ".invoke" do
|
29
|
-
it "callable" do
|
30
|
-
expect(invoke(Callable.new, 1, 2)).to eq(3)
|
31
|
-
end
|
32
|
-
it "uncallable" do
|
33
|
-
expect(invoke(3, 1)).to eq(3)
|
34
|
-
end
|
35
|
-
it "uncallable call" do
|
36
|
-
expect(invoke(Uncallable.new, 1).class).to eq(Uncallable)
|
37
|
-
end
|
38
|
-
#it "uncallable proc" do
|
39
|
-
# expect(invoke(proc { |a, b| a + b }, 1, 2).class).to eq(Proc)
|
40
|
-
#end
|
41
|
-
end
|
42
|
-
|
43
|
-
describe ".invoke_a" do
|
44
|
-
it "callable" do
|
45
|
-
expect(invoke_a([Callable.new, Callable.new], 1, 2)).to eq([3, 3])
|
46
|
-
end
|
47
|
-
it "uncallable" do
|
48
|
-
expect(invoke_a([1, 2], 1)).to eq([1, 2])
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
describe ".send" do
|
53
|
-
it "send callable" do
|
54
|
-
expect(send(4, :+, Callable.new).call(1, 2)).to eq(7)
|
55
|
-
end
|
56
|
-
it "send callable" do
|
57
|
-
expect(send(Callable.new, :+, Callable.new).call(1, 2)).to eq(6)
|
58
|
-
end
|
59
|
-
it "send with block" do
|
60
|
-
expect(send(first, :select){ |it| it > 1 }.call([1, 2, 3])).to eq([2, 3])
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
describe ".bind" do
|
65
|
-
# it "bind callable" do
|
66
|
-
# expect(bind(-> a, b { a + b }, 1, First.new).call(1, 2)).to eq(2)
|
67
|
-
# end
|
68
|
-
# it "bind method" do
|
69
|
-
# expect(bind(:+.to_proc, 1, First.new).call(2)).to eq(3)
|
70
|
-
# end
|
71
|
-
# it "bind next" do
|
72
|
-
# expect(bind(-> a, b { a + b }, bind(-> a, b { a + b }, First.new, First.new), First.new).call(3)).to eq(9)
|
73
|
-
# end
|
74
|
-
it "apply first" do
|
75
|
-
expect(bind(First.new, 1, 2).call(-> a, b { a + b })).to eq(3)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
# describe ".apply" do
|
80
|
-
# it "call first" do
|
81
|
-
# expect(apply(-> a { -> b { a + b} }, 1).call(2)).to eq(3)
|
82
|
-
# end
|
83
|
-
# it "NoMethodError" do
|
84
|
-
# expect{ apply(-> a { 10 }, 1).call(2) }.to raise_error(NoMethodError)
|
85
|
-
# end
|
86
|
-
# end
|
87
|
-
end
|
data/spec/iolite_lazy_spec.rb
DELETED
@@ -1,92 +0,0 @@
|
|
1
|
-
load 'spec_helper.rb'
|
2
|
-
require "iolite/lazy"
|
3
|
-
|
4
|
-
|
5
|
-
describe "Iolite lazy" do
|
6
|
-
describe "Iolite::lazy" do
|
7
|
-
include Iolite
|
8
|
-
arg1 = Iolite.lazy { |*args| args[0] }
|
9
|
-
arg2 = Iolite.lazy { |*args| args[1] }
|
10
|
-
|
11
|
-
describe "#class" do
|
12
|
-
it "#class by Obejct#class" do
|
13
|
-
expect(lazy { |a, b| a + b }.class).to eq(Iolite::Lazy)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
describe "#call" do
|
18
|
-
it "call" do
|
19
|
-
expect(lazy { |a, b| a + b }.call(1, 2)).to eq(3)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
describe "#bind" do
|
24
|
-
it "bind argument" do
|
25
|
-
expect(lazy { |a, b| a + b }.bind(1, 2).call()).to eq(3)
|
26
|
-
end
|
27
|
-
it "bind placeholders" do
|
28
|
-
expect(lazy { |a, b| a + b }.bind(arg2, 2).call(2, 1)).to eq(3)
|
29
|
-
end
|
30
|
-
it "bind by placeholders" do
|
31
|
-
expect((arg1 - arg2).bind(arg2, 2).call(1, 1)).to eq(-1)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
describe "#send" do
|
36
|
-
it "send method" do
|
37
|
-
expect(arg1.send(:length).call("homu")).to eq(4)
|
38
|
-
end
|
39
|
-
it "send Object method" do
|
40
|
-
expect(arg1.send(:class).call("homu")).to eq(String)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
describe "#method_missing" do
|
45
|
-
it "send method" do
|
46
|
-
expect(arg1.length.call("homu")).to eq(4)
|
47
|
-
end
|
48
|
-
it "send Object method" do
|
49
|
-
expect(arg1.class).to eq(arg1.__send__(:class))
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
describe "#apply" do
|
54
|
-
it "apply lazy" do
|
55
|
-
expect(arg1.apply(1, 2).call(arg1 + arg2)).to eq(3)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
describe "#+" do
|
60
|
-
it "call lazy" do
|
61
|
-
expect((lazy { |a, b| a + b } + 3).call(1, 2)).to eq(6)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
describe "#==" do
|
66
|
-
it "call" do
|
67
|
-
expect((arg1 == 3).call(3)).to eq(true)
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
describe "#===" do
|
72
|
-
it "call" do
|
73
|
-
expect((arg1 === arg2).call(/^m/, "mami")).to eq(true)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
describe "#to_s" do
|
78
|
-
it "Symbol#to_s" do
|
79
|
-
expect(arg1.to_s.call(:mami)).to eq("mami")
|
80
|
-
end
|
81
|
-
it "Fixnum#to_s" do
|
82
|
-
expect(arg1.to_s.call(42)).to eq("42")
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
describe "#class" do
|
87
|
-
it "Symbol#class" do
|
88
|
-
expect(arg1.class.call(:mami)).to eq(Symbol)
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
data/spec/iolite_spec.rb
DELETED
@@ -1,212 +0,0 @@
|
|
1
|
-
load 'spec_helper.rb'
|
2
|
-
|
3
|
-
describe Iolite do
|
4
|
-
it 'has a version number' do
|
5
|
-
expect(Iolite::VERSION).not_to be nil
|
6
|
-
end
|
7
|
-
|
8
|
-
describe "Iolite" do
|
9
|
-
it "::lazy" do
|
10
|
-
expect(Iolite.lazy { |a, b| a + b }.class).to eq(Iolite::Lazy)
|
11
|
-
end
|
12
|
-
# it "::wrap" do
|
13
|
-
# expect((Iolite.wrap lambda { |a, b| a + b }).call(1, 2).class).to eq(Proc)
|
14
|
-
# end
|
15
|
-
end
|
16
|
-
|
17
|
-
describe "Iolite::Lazy" do
|
18
|
-
first = Iolite::lazy { |x| x }
|
19
|
-
plus = Iolite::lazy { |a, b| a + b }
|
20
|
-
describe "#call" do
|
21
|
-
it "call" do
|
22
|
-
expect(first.call(10)).to eq(10)
|
23
|
-
end
|
24
|
-
|
25
|
-
it "()" do
|
26
|
-
expect(first.(10)).to eq(10)
|
27
|
-
end
|
28
|
-
|
29
|
-
it "call multi arguments" do
|
30
|
-
expect(first.call(10, 2)).to eq(10)
|
31
|
-
expect(plus.call(10, 2)).to eq(12)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
describe "#bind" do
|
36
|
-
include Iolite::Placeholders
|
37
|
-
f = Iolite::lazy { |a, b| a + b }
|
38
|
-
it "argument" do
|
39
|
-
expect(f.bind(-3, 1).call()).to eq(-2)
|
40
|
-
end
|
41
|
-
it "argument" do
|
42
|
-
expect(f.bind(arg2, arg1).call(-1, 3)).to eq(2)
|
43
|
-
end
|
44
|
-
it "operator" do
|
45
|
-
expect(Iolite::lazy(&:+).bind(arg2, arg1).call(-1, 3)).to eq(2)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
describe "#send" do
|
50
|
-
it "call method" do
|
51
|
-
expect(first.send(:to_s).call(10).class).to eq(String)
|
52
|
-
end
|
53
|
-
it "call method with args" do
|
54
|
-
expect(first.send(:+, 1).call(2)).to eq(3)
|
55
|
-
end
|
56
|
-
include Iolite::Placeholders
|
57
|
-
it "call method with placeholders" do
|
58
|
-
expect(first.send(:+, arg2).call(2, -2)).to eq(0)
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
describe "#apply" do
|
63
|
-
include Iolite::Placeholders
|
64
|
-
it "call lambda" do
|
65
|
-
expect(arg1.apply(1, 2).call(lambda { |a ,b| a + b })).to eq(3)
|
66
|
-
end
|
67
|
-
it "call Iolite::Lazy" do
|
68
|
-
expect(arg1.apply(1, 2).call(Iolite::lazy { |a ,b| a + b })).to eq(3)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
describe "operators" do
|
73
|
-
it "a + b" do
|
74
|
-
expect((first + first).call(1)).to eq(2)
|
75
|
-
end
|
76
|
-
it "a - b" do
|
77
|
-
expect((plus - first).call(2, 3)).to eq(3)
|
78
|
-
end
|
79
|
-
it "a * b" do
|
80
|
-
expect((first * first).call(2)).to eq(4)
|
81
|
-
end
|
82
|
-
it "a[b]" do
|
83
|
-
expect((first[:name]).call({name: :homu})).to eq(:homu)
|
84
|
-
end
|
85
|
-
it "a + {value}" do
|
86
|
-
expect((first + 3).call(4)).to eq(7)
|
87
|
-
end
|
88
|
-
it "==" do
|
89
|
-
expect([1, 2, 3].any? &first == 3).to eq(true)
|
90
|
-
end
|
91
|
-
it "=~" do
|
92
|
-
expect(["homu", "123", "mami"].any? &first =~ /\d+/).to eq(true)
|
93
|
-
end
|
94
|
-
it "!" do
|
95
|
-
expect([1, nil, 6].find_index &!first).to eq(1)
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
describe "#method_missing" do
|
100
|
-
it "call #length method" do
|
101
|
-
expect(first.length.call("homu")).to eq(4)
|
102
|
-
end
|
103
|
-
it "call #to_s method" do
|
104
|
-
expect(first.to_i.call("1").class).to eq(Fixnum)
|
105
|
-
end
|
106
|
-
it "call Object#*" do
|
107
|
-
# not call method_missing
|
108
|
-
expect(first.class).to eq(Iolite::Lazy)
|
109
|
-
end
|
110
|
-
it "call Object#* from #send" do
|
111
|
-
expect(first.send(:class).call("homu")).to eq(String)
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
describe "Array block" do
|
116
|
-
it "#map by" do
|
117
|
-
expect((1..3).map &(first + 3)).to eq([4, 5, 6])
|
118
|
-
end
|
119
|
-
it "#inject by" do
|
120
|
-
expect((2..4).inject &(plus)).to eq(9)
|
121
|
-
end
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
describe "Iolite::Placeholders" do
|
126
|
-
include Iolite::Placeholders
|
127
|
-
it "arg1" do
|
128
|
-
expect(arg1.call(1, 2)).to eq(1)
|
129
|
-
end
|
130
|
-
it "arg1 + arg2" do
|
131
|
-
expect((arg1 + arg2).call(1, 2)).to eq(3)
|
132
|
-
end
|
133
|
-
it "arg1[arg2]" do
|
134
|
-
expect((arg1[arg2]).call([1, 2, 3], 2)).to eq(3)
|
135
|
-
end
|
136
|
-
it "args" do
|
137
|
-
expect((args[arg2]).call(1, 3, 2, 4)).to eq(4)
|
138
|
-
end
|
139
|
-
it "bind" do
|
140
|
-
# expect(arg1.bind(10).call(Iolite.lambda { |x| x + x})).to eq(20)
|
141
|
-
end
|
142
|
-
it "alias _1, arg1" do
|
143
|
-
expect((_1 + _2).call(1, 2)).to eq(3)
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
describe "Iolite::adaptor" do
|
148
|
-
describe "Adapt callable" do
|
149
|
-
include Iolite::Placeholders
|
150
|
-
class UnCallableFromIolite
|
151
|
-
end
|
152
|
-
it "not callable" do
|
153
|
-
# UnCallableFromIolite.new.class
|
154
|
-
expect(arg1.send(:class).bind(UnCallableFromIolite.new).call(10)).to eq(UnCallableFromIolite)
|
155
|
-
end
|
156
|
-
class CallableFromIolite
|
157
|
-
include Iolite::Adaptor::Callable
|
158
|
-
def call n
|
159
|
-
n
|
160
|
-
end
|
161
|
-
end
|
162
|
-
it "callable" do
|
163
|
-
# CallableFromIolite.new.call("homu")
|
164
|
-
expect(arg1.send(:class).bind(CallableFromIolite.new).call("homu")).to eq(String)
|
165
|
-
end
|
166
|
-
it "wrap" do
|
167
|
-
# expect(arg1.send(:class).bind(Iolite.wrap CallableFromIolite.new).call("homu")).to eq(CallableFromIolite)
|
168
|
-
end
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
describe "Iolite::Statement" do
|
173
|
-
describe "if_else" do
|
174
|
-
include Iolite::Statement
|
175
|
-
include Iolite::Placeholders
|
176
|
-
it "call then" do
|
177
|
-
f = if_else(arg1 > 0, arg2, nil)
|
178
|
-
expect(f.(10, "yes")).to eq("yes")
|
179
|
-
end
|
180
|
-
it "call else" do
|
181
|
-
f = if_else(arg1 > 0, arg2, nil)
|
182
|
-
expect(f.(-10, "yes")).to eq(nil)
|
183
|
-
end
|
184
|
-
end
|
185
|
-
describe "if_" do
|
186
|
-
describe "if then" do
|
187
|
-
include Iolite::Statement
|
188
|
-
include Iolite::Placeholders
|
189
|
-
it "call then" do
|
190
|
-
f = if_(arg1 > 0)[ arg1, arg1 + arg1 ]
|
191
|
-
expect(f.(10)).to eq(20)
|
192
|
-
end
|
193
|
-
it "call else" do
|
194
|
-
f = if_(arg1 > 0)[ arg1, arg1 + arg1 ]
|
195
|
-
expect(f.(0)).to eq(nil)
|
196
|
-
end
|
197
|
-
end
|
198
|
-
describe "if then else" do
|
199
|
-
include Iolite::Statement
|
200
|
-
include Iolite::Placeholders
|
201
|
-
it "call then" do
|
202
|
-
f = if_(arg1 > 0)[ arg1, arg1 + arg1 ].else_[ arg1, arg1 - arg1 ]
|
203
|
-
expect(f.(10)).to eq(20)
|
204
|
-
end
|
205
|
-
it "call else" do
|
206
|
-
f = if_(arg1 > 0)[ arg1, arg1 + arg1 ].else_[ arg1, arg1 - arg1 ]
|
207
|
-
expect(f.(-10)).to eq(0)
|
208
|
-
end
|
209
|
-
end
|
210
|
-
end
|
211
|
-
end
|
212
|
-
end
|
data/spec/spec_helper.rb
DELETED