lazyeval 0.0.3 → 0.0.4
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.
- data/.gitignore +2 -0
- data/CHANGELOG +3 -0
- data/Gemfile.lock +46 -6
- data/Guardfile +6 -0
- data/README.markdown +3 -0
- data/Rakefile +6 -28
- data/lazyeval.gemspec +6 -3
- data/lib/lazyeval.rb +3 -28
- data/lib/lazyeval/lazy.rb +26 -0
- data/lib/lazyeval/object.rb +5 -0
- data/lib/lazyeval/version.rb +2 -2
- data/spec/lazyeval/lazy_spec.rb +31 -0
- data/spec/spec_helper.rb +4 -0
- metadata +77 -20
- data/test/helper.rb +0 -10
- data/test/test_lazyeval.rb +0 -20
data/.gitignore
CHANGED
data/CHANGELOG
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,21 +1,61 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
lazyeval (0.0.
|
4
|
+
lazyeval (0.0.4)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
celluloid (0.15.2)
|
10
|
+
timers (~> 1.1.0)
|
11
|
+
coderay (1.0.9)
|
12
|
+
columnize (0.3.6)
|
13
|
+
debugger (1.6.1)
|
14
|
+
columnize (>= 0.3.1)
|
15
|
+
debugger-linecache (~> 1.2.0)
|
16
|
+
debugger-ruby_core_source (~> 1.2.3)
|
17
|
+
debugger-linecache (1.2.0)
|
18
|
+
debugger-ruby_core_source (1.2.3)
|
19
|
+
ffi (1.9.0)
|
20
|
+
formatador (0.2.4)
|
21
|
+
guard (2.0.3)
|
22
|
+
formatador (>= 0.2.4)
|
23
|
+
listen (~> 2.0)
|
24
|
+
lumberjack (~> 1.0)
|
25
|
+
pry (>= 0.9.12)
|
26
|
+
thor (>= 0.18.1)
|
27
|
+
guard-minitest (2.0.0)
|
28
|
+
guard (~> 2.0)
|
29
|
+
minitest (>= 3.0)
|
30
|
+
listen (2.0.0)
|
31
|
+
celluloid (>= 0.15.1)
|
32
|
+
rb-fsevent (>= 0.9.3)
|
33
|
+
rb-inotify (>= 0.9)
|
34
|
+
lumberjack (1.0.4)
|
35
|
+
method_source (0.8.2)
|
36
|
+
minitest (4.7.5)
|
37
|
+
pry (0.9.12.2)
|
38
|
+
coderay (~> 1.0.5)
|
39
|
+
method_source (~> 0.8)
|
40
|
+
slop (~> 3.4)
|
41
|
+
rake (10.1.0)
|
42
|
+
rb-fsevent (0.9.3)
|
43
|
+
rb-inotify (0.9.2)
|
44
|
+
ffi (>= 0.5.0)
|
45
|
+
slop (3.4.6)
|
46
|
+
terminal-notifier-guard (1.5.3)
|
47
|
+
thor (0.18.1)
|
48
|
+
timers (1.1.0)
|
12
49
|
|
13
50
|
PLATFORMS
|
14
51
|
ruby
|
15
52
|
|
16
53
|
DEPENDENCIES
|
17
54
|
bundler (~> 1.3)
|
55
|
+
debugger
|
56
|
+
guard
|
57
|
+
guard-minitest
|
18
58
|
lazyeval!
|
59
|
+
minitest
|
19
60
|
rake
|
20
|
-
|
21
|
-
yard
|
61
|
+
terminal-notifier-guard
|
data/Guardfile
ADDED
data/README.markdown
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# Lazyeval
|
2
2
|
|
3
|
+
[](https://travis-ci.org/vitaly/lazyeval)
|
4
|
+
[](https://codeclimate.com/github/vitaly/lazyeval)
|
5
|
+
|
3
6
|
Homepage: [http://github.com/vitaly/lazyeval/](http://github.com/vitaly/lazyeval/)
|
4
7
|
|
5
8
|
This GEM allows to call methods lazily. The actual work will not be performed
|
data/Rakefile
CHANGED
@@ -1,32 +1,10 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
|
+
require "rake/testtask"
|
2
3
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
test.verbose = true
|
4
|
+
Rake::TestTask.new(:spec) do |t|
|
5
|
+
t.libs << "spec"
|
6
|
+
t.verbose = true
|
7
|
+
t.pattern = 'spec/**/*_spec.rb'
|
8
8
|
end
|
9
9
|
|
10
|
-
|
11
|
-
require 'rcov/rcovtask'
|
12
|
-
Rcov::RcovTask.new do |test|
|
13
|
-
test.libs << 'test'
|
14
|
-
test.pattern = 'test/**/test_*.rb'
|
15
|
-
test.verbose = true
|
16
|
-
end
|
17
|
-
rescue LoadError
|
18
|
-
task :rcov do
|
19
|
-
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
task :default => :test
|
24
|
-
|
25
|
-
begin
|
26
|
-
require 'yard'
|
27
|
-
YARD::Rake::YardocTask.new
|
28
|
-
rescue LoadError
|
29
|
-
task :yardoc do
|
30
|
-
abort "YARD is not available. In order to run yardoc, you must: sudo gem install yard"
|
31
|
-
end
|
32
|
-
end
|
10
|
+
task :default => :spec
|
data/lazyeval.gemspec
CHANGED
@@ -5,7 +5,7 @@ require 'lazyeval/version'
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "lazyeval"
|
8
|
-
s.version =
|
8
|
+
s.version = Lazyeval::VERSION
|
9
9
|
s.authors = ["Vitaly Kushner"]
|
10
10
|
s.email = ["vitaly@astrails.com"]
|
11
11
|
s.description = %q{This GEM allows to call methods lazily. The actual
|
@@ -23,6 +23,9 @@ Gem::Specification.new do |s|
|
|
23
23
|
|
24
24
|
s.add_development_dependency 'bundler', '~> 1.3'
|
25
25
|
s.add_development_dependency 'rake'
|
26
|
-
s.add_development_dependency '
|
27
|
-
s.add_development_dependency '
|
26
|
+
s.add_development_dependency 'minitest'
|
27
|
+
s.add_development_dependency 'guard'
|
28
|
+
s.add_development_dependency 'guard-minitest'
|
29
|
+
s.add_development_dependency 'terminal-notifier-guard'
|
30
|
+
s.add_development_dependency 'debugger'
|
28
31
|
end
|
data/lib/lazyeval.rb
CHANGED
@@ -1,28 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
end
|
5
|
-
end
|
6
|
-
|
7
|
-
class Lazy < (::RUBY_VERSION < '1.9') ? Object : BasicObject
|
8
|
-
undef_method(*(instance_methods - %w/__id__ __send__ respond_to? debugger/)) if ::RUBY_VERSION < '1.9'
|
9
|
-
|
10
|
-
def initialize(obj, &block)
|
11
|
-
@obj, @block = obj, block
|
12
|
-
@args = @done = nil
|
13
|
-
end
|
14
|
-
|
15
|
-
def method_missing(*args, &block)
|
16
|
-
unless @done
|
17
|
-
if !@args && !@block
|
18
|
-
@args, @block = args, @block
|
19
|
-
return self
|
20
|
-
end
|
21
|
-
|
22
|
-
@res = @args ? @obj.send(*@args, &@block) : @block.call(@obj)
|
23
|
-
@done = true
|
24
|
-
end
|
25
|
-
|
26
|
-
@res.send(*args, &block)
|
27
|
-
end
|
28
|
-
end
|
1
|
+
require 'lazyeval/version'
|
2
|
+
require 'lazyeval/lazy'
|
3
|
+
require 'lazyeval/object'
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Lazyeval
|
2
|
+
class Lazy < (::RUBY_VERSION < '1.9') ? Object : BasicObject
|
3
|
+
undef_method(*(instance_methods - %w/__id__ __send__ respond_to? debugger/)) if ::RUBY_VERSION < '1.9'
|
4
|
+
|
5
|
+
def initialize(obj, &block)
|
6
|
+
@obj, @block = obj, block
|
7
|
+
@args = @done = nil
|
8
|
+
end
|
9
|
+
|
10
|
+
def method_missing(*args, &block)
|
11
|
+
unless @done
|
12
|
+
if !@args && !@block
|
13
|
+
# called 1st time, store the args and the block
|
14
|
+
@args, @block = args, block
|
15
|
+
return self
|
16
|
+
end
|
17
|
+
|
18
|
+
# called 2nd time, execute the lazy call
|
19
|
+
@res = @args ? @obj.send(*@args, &@block) : @block.call(@obj)
|
20
|
+
@done = true
|
21
|
+
end
|
22
|
+
|
23
|
+
@res.send(*args, &block)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/lazyeval/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
VERSION = '0.0.
|
1
|
+
module Lazyeval
|
2
|
+
VERSION = '0.0.4'
|
3
3
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Lazyeval::Lazy do
|
4
|
+
it "should call a simple method lazily" do
|
5
|
+
src = [:a, :b]
|
6
|
+
x = src.lazy.shift
|
7
|
+
src.must_equal [:a, :b]
|
8
|
+
x.must_equal :a
|
9
|
+
src.must_equal [:b]
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'should call method with args and block lazily' do
|
13
|
+
i = 0
|
14
|
+
sum = [1, 2].lazy.inject(3) do |res, x|
|
15
|
+
i += 1
|
16
|
+
res + x
|
17
|
+
end
|
18
|
+
i.must_equal 0
|
19
|
+
sum.must_equal 6
|
20
|
+
i.must_equal 2
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should call a block lazily" do
|
24
|
+
src = [1, 2]
|
25
|
+
x = src.lazy { |x| x.shift*3 }
|
26
|
+
|
27
|
+
src.must_equal [1, 2]
|
28
|
+
x.must_equal 3
|
29
|
+
src.must_equal [2]
|
30
|
+
end
|
31
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -2,78 +2,126 @@
|
|
2
2
|
name: lazyeval
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.4
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Vitaly Kushner
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-10-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
16
|
-
|
17
|
-
|
16
|
+
type: :development
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: '1.3'
|
22
|
-
requirement: !ruby/object:Gem::Requirement
|
23
22
|
none: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - ~>
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '1.3'
|
28
|
-
|
28
|
+
none: false
|
29
29
|
prerelease: false
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: rake
|
32
|
-
|
32
|
+
type: :development
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
33
38
|
none: false
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
34
40
|
requirements:
|
35
41
|
- - ! '>='
|
36
42
|
- !ruby/object:Gem::Version
|
37
43
|
version: '0'
|
44
|
+
none: false
|
45
|
+
prerelease: false
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: minitest
|
48
|
+
type: :development
|
38
49
|
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
39
54
|
none: false
|
55
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
56
|
requirements:
|
41
57
|
- - ! '>='
|
42
58
|
- !ruby/object:Gem::Version
|
43
59
|
version: '0'
|
44
|
-
|
60
|
+
none: false
|
45
61
|
prerelease: false
|
46
62
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
48
|
-
|
63
|
+
name: guard
|
64
|
+
type: :development
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
49
70
|
none: false
|
71
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
72
|
requirements:
|
51
73
|
- - ! '>='
|
52
74
|
- !ruby/object:Gem::Version
|
53
75
|
version: '0'
|
76
|
+
none: false
|
77
|
+
prerelease: false
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: guard-minitest
|
80
|
+
type: :development
|
54
81
|
requirement: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
55
86
|
none: false
|
87
|
+
version_requirements: !ruby/object:Gem::Requirement
|
56
88
|
requirements:
|
57
89
|
- - ! '>='
|
58
90
|
- !ruby/object:Gem::Version
|
59
91
|
version: '0'
|
60
|
-
|
92
|
+
none: false
|
61
93
|
prerelease: false
|
62
94
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
64
|
-
|
95
|
+
name: terminal-notifier-guard
|
96
|
+
type: :development
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
65
102
|
none: false
|
103
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
104
|
requirements:
|
67
105
|
- - ! '>='
|
68
106
|
- !ruby/object:Gem::Version
|
69
107
|
version: '0'
|
108
|
+
none: false
|
109
|
+
prerelease: false
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: debugger
|
112
|
+
type: :development
|
70
113
|
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
71
118
|
none: false
|
119
|
+
version_requirements: !ruby/object:Gem::Requirement
|
72
120
|
requirements:
|
73
121
|
- - ! '>='
|
74
122
|
- !ruby/object:Gem::Version
|
75
123
|
version: '0'
|
76
|
-
|
124
|
+
none: false
|
77
125
|
prerelease: false
|
78
126
|
description: ! "This GEM allows to call methods lazily. The actual\n work will not
|
79
127
|
be performed until the result is used. There's no\n promise/force semantics, just
|
@@ -98,6 +146,7 @@ files:
|
|
98
146
|
- CHANGELOG
|
99
147
|
- Gemfile
|
100
148
|
- Gemfile.lock
|
149
|
+
- Guardfile
|
101
150
|
- LICENSE.txt
|
102
151
|
- README.markdown
|
103
152
|
- Rakefile
|
@@ -119,9 +168,11 @@ files:
|
|
119
168
|
- doc/top-level-namespace.html
|
120
169
|
- lazyeval.gemspec
|
121
170
|
- lib/lazyeval.rb
|
171
|
+
- lib/lazyeval/lazy.rb
|
172
|
+
- lib/lazyeval/object.rb
|
122
173
|
- lib/lazyeval/version.rb
|
123
|
-
-
|
124
|
-
-
|
174
|
+
- spec/lazyeval/lazy_spec.rb
|
175
|
+
- spec/spec_helper.rb
|
125
176
|
homepage: http://github.com/vitaly/lazyeval
|
126
177
|
licenses:
|
127
178
|
- MIT
|
@@ -130,17 +181,23 @@ rdoc_options: []
|
|
130
181
|
require_paths:
|
131
182
|
- lib
|
132
183
|
required_ruby_version: !ruby/object:Gem::Requirement
|
133
|
-
none: false
|
134
184
|
requirements:
|
135
185
|
- - ! '>='
|
136
186
|
- !ruby/object:Gem::Version
|
187
|
+
segments:
|
188
|
+
- 0
|
189
|
+
hash: 2487045023423868154
|
137
190
|
version: '0'
|
138
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
139
191
|
none: false
|
192
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
140
193
|
requirements:
|
141
194
|
- - ! '>='
|
142
195
|
- !ruby/object:Gem::Version
|
196
|
+
segments:
|
197
|
+
- 0
|
198
|
+
hash: 2487045023423868154
|
143
199
|
version: '0'
|
200
|
+
none: false
|
144
201
|
requirements: []
|
145
202
|
rubyforge_project:
|
146
203
|
rubygems_version: 1.8.25
|
@@ -148,5 +205,5 @@ signing_key:
|
|
148
205
|
specification_version: 3
|
149
206
|
summary: This gem provides a very simple lazy evaluation for Ruby
|
150
207
|
test_files:
|
151
|
-
-
|
152
|
-
-
|
208
|
+
- spec/lazyeval/lazy_spec.rb
|
209
|
+
- spec/spec_helper.rb
|
data/test/helper.rb
DELETED
data/test/test_lazyeval.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
class TestLazyeval < Test::Unit::TestCase
|
4
|
-
should "call a simple method lazily" do
|
5
|
-
src = [:a, :b]
|
6
|
-
x = src.lazy.shift
|
7
|
-
assert_equal [:a, :b], src
|
8
|
-
assert x === :a
|
9
|
-
assert_equal [:b], src
|
10
|
-
end
|
11
|
-
|
12
|
-
should "call a block lazily" do
|
13
|
-
src = [1, 2]
|
14
|
-
x = src.lazy { |x| x.shift*3 }
|
15
|
-
|
16
|
-
assert_equal [1, 2], src
|
17
|
-
assert x === 3
|
18
|
-
assert_equal [2], src
|
19
|
-
end
|
20
|
-
end
|