serializable_proc 0.3.1 → 0.4.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.
- data/HISTORY.txt +5 -1
- data/README.rdoc +6 -123
- data/Rakefile +4 -28
- data/VERSION +1 -1
- data/lib/serializable_proc/binding.rb +11 -15
- data/lib/serializable_proc/isolatable.rb +59 -42
- data/lib/serializable_proc.rb +15 -18
- data/serializable_proc.gemspec +12 -53
- data/spec/bounded_vars/errors_spec.rb +12 -4
- data/spec/bounded_vars/local_vars_within_block_scope_spec.rb +7 -7
- data/spec/code_block/magic_vars_spec.rb +1 -1
- data/spec/proc_like/invoking_with_args_spec.rb +6 -2
- data/spec/proc_like/others_spec.rb +15 -7
- data/spec/spec_helper.rb +6 -16
- metadata +47 -45
- data/lib/serializable_proc/parsers/dynamic.rb +0 -13
- data/lib/serializable_proc/parsers/static.rb +0 -103
- data/lib/serializable_proc/parsers.rb +0 -30
- data/spec/code_block/errors_spec.rb +0 -65
- data/spec/code_block/multiple_arities_spec.rb +0 -159
- data/spec/code_block/optional_arity_spec.rb +0 -160
- data/spec/code_block/single_arity_spec.rb +0 -159
- data/spec/code_block/zero_arity_spec.rb +0 -159
- data/spec/extending/new_matcher_w_multiple_arities_spec.rb +0 -152
- data/spec/extending/new_matcher_w_optional_arity_spec.rb +0 -152
- data/spec/extending/new_matcher_w_single_arity_spec.rb +0 -152
- data/spec/extending/new_matcher_w_zero_arity_spec.rb +0 -152
- data/spec/extending/spec_helper.rb +0 -23
- data/spec/extending/subclassing_w_multiple_arities_spec.rb +0 -74
- data/spec/extending/subclassing_w_optional_arity_spec.rb +0 -74
- data/spec/extending/subclassing_w_single_arity_spec.rb +0 -74
- data/spec/extending/subclassing_w_zero_arity_spec.rb +0 -74
@@ -11,7 +11,9 @@ require File.join(File.dirname(__FILE__), '..', 'spec_helper')
|
|
11
11
|
end
|
12
12
|
|
13
13
|
should 'return yield result given single arg' do
|
14
|
-
s_proc = SerializableProc.new
|
14
|
+
s_proc = SerializableProc.new do |i|
|
15
|
+
%w{b c}.map{|x| x*i }
|
16
|
+
end
|
15
17
|
s_proc.send(invoke, 2).should.equal(%w{bb cc})
|
16
18
|
end
|
17
19
|
|
@@ -37,7 +39,9 @@ require File.join(File.dirname(__FILE__), '..', 'spec_helper')
|
|
37
39
|
|
38
40
|
should 'return yield result given single arg' do
|
39
41
|
x = 'a'
|
40
|
-
s_proc = SerializableProc.new
|
42
|
+
s_proc = SerializableProc.new do |i|
|
43
|
+
%w{b c}.map{|x| x*i }
|
44
|
+
end
|
41
45
|
s_proc.send(invoke, 2, binding).should.equal(%w{bb cc})
|
42
46
|
end
|
43
47
|
|
@@ -76,13 +76,19 @@ describe 'Being proc like' do
|
|
76
76
|
end
|
77
77
|
|
78
78
|
describe '>> arity' do
|
79
|
+
block1 = lambda { }
|
80
|
+
block2 = lambda {|x| }
|
81
|
+
block3 = lambda {|x,y| }
|
82
|
+
block4 = lambda {|*x| }
|
83
|
+
block5 = lambda {|x, *y| }
|
84
|
+
block6 = lambda {|(x,y)| }
|
79
85
|
{
|
80
|
-
__LINE__ =>
|
81
|
-
__LINE__ =>
|
82
|
-
__LINE__ =>
|
83
|
-
__LINE__ =>
|
84
|
-
__LINE__ =>
|
85
|
-
__LINE__ =>
|
86
|
+
__LINE__ => block1,
|
87
|
+
__LINE__ => block2,
|
88
|
+
__LINE__ => block3,
|
89
|
+
__LINE__ => block4,
|
90
|
+
__LINE__ => block5,
|
91
|
+
__LINE__ => block6,
|
86
92
|
}.each do |debug, block|
|
87
93
|
should "return arity of initializing block [##{debug}]" do
|
88
94
|
SerializableProc.new(&block).arity.should.equal(block.arity)
|
@@ -92,7 +98,9 @@ describe 'Being proc like' do
|
|
92
98
|
|
93
99
|
describe '>> binding' do
|
94
100
|
should 'raise NotImplementedError' do
|
95
|
-
lambda {
|
101
|
+
lambda {
|
102
|
+
SerializableProc.new { x }.binding
|
103
|
+
}.should.raise(NotImplementedError)
|
96
104
|
end
|
97
105
|
# should 'return binding that contains duplicated contextual reference values' do
|
98
106
|
# x, @x, @@x, $x = 'lx', 'ix', 'cx', 'gx'
|
data/spec/spec_helper.rb
CHANGED
@@ -2,15 +2,7 @@ require 'rubygems'
|
|
2
2
|
require 'bacon'
|
3
3
|
require 'tempfile'
|
4
4
|
require 'ruby2ruby'
|
5
|
-
|
6
|
-
$parse_tree_installed =
|
7
|
-
begin
|
8
|
-
require 'parse_tree'
|
9
|
-
true
|
10
|
-
rescue LoadError
|
11
|
-
require 'ruby_parser'
|
12
|
-
nil
|
13
|
-
end
|
5
|
+
require 'ruby_parser'
|
14
6
|
|
15
7
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
16
8
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
@@ -20,7 +12,7 @@ Bacon.summary_on_exit
|
|
20
12
|
|
21
13
|
class SerializableProc
|
22
14
|
|
23
|
-
attr_reader :
|
15
|
+
attr_reader :codes, :file, :line
|
24
16
|
|
25
17
|
def binding_dump
|
26
18
|
@binding.instance_variable_get(:@vars)
|
@@ -32,16 +24,14 @@ class SerializableProc
|
|
32
24
|
|
33
25
|
def having_same_semantics_as(code2)
|
34
26
|
to_code = lambda{|sexp| ::Ruby2Ruby.new.process(sexp) }
|
35
|
-
to_sexp =
|
36
|
-
lambda{|code| Unifier.new.process(::ParseTree.translate(code)) } :
|
37
|
-
lambda{|code| ::RubyParser.new.parse(code) }
|
27
|
+
to_sexp = lambda{|code| RubyParser.new.parse(code) }
|
38
28
|
normalize = lambda{|code| to_code[to_sexp[code]].sub('lambda','proc') }
|
39
29
|
lambda {|code1| normalize[code1].should.equal(normalize[code2]) }
|
40
30
|
end
|
41
31
|
|
42
32
|
def having_runnable_code_as(code)
|
43
33
|
lambda do |s_proc|
|
44
|
-
s_proc.
|
34
|
+
s_proc.codes[:runnable].should.be having_same_semantics_as(code)
|
45
35
|
end
|
46
36
|
end
|
47
37
|
|
@@ -51,7 +41,7 @@ class SerializableProc
|
|
51
41
|
|
52
42
|
def having_expected_proc_attrs(file, line, code)
|
53
43
|
lambda do |s_proc|
|
54
|
-
s_proc.
|
44
|
+
s_proc.codes[:runnable].should.be having_same_semantics_as(code)
|
55
45
|
s_proc.file.should.equal(file)
|
56
46
|
s_proc.line.should.equal(line)
|
57
47
|
end
|
@@ -92,7 +82,7 @@ class SerializableProc
|
|
92
82
|
test_args.each do |line, block|
|
93
83
|
should "handle proc variable [##{line}]" do
|
94
84
|
s_proc = SerializableProc.new(&block)
|
95
|
-
s_proc.
|
85
|
+
s_proc.codes[:runnable].should.be having_same_semantics_as(code)
|
96
86
|
s_proc.file.should.equal(file)
|
97
87
|
s_proc.line.should.equal(line.succ)
|
98
88
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: serializable_proc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 4
|
9
|
+
- 0
|
10
|
+
version: 0.4.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- NgTzeYang
|
@@ -15,29 +15,62 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-09-15 00:00:00 +08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
name:
|
22
|
+
name: sourcify
|
23
23
|
prerelease: false
|
24
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
hash:
|
29
|
+
hash: 85
|
30
30
|
segments:
|
31
|
-
-
|
31
|
+
- 0
|
32
32
|
- 2
|
33
|
-
-
|
34
|
-
|
33
|
+
- 2
|
34
|
+
- 1
|
35
|
+
version: 0.2.2.1
|
35
36
|
type: :runtime
|
36
37
|
version_requirements: *id001
|
37
38
|
- !ruby/object:Gem::Dependency
|
38
|
-
name:
|
39
|
+
name: ruby2ruby
|
39
40
|
prerelease: false
|
40
41
|
requirement: &id002 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
hash: 21
|
47
|
+
segments:
|
48
|
+
- 1
|
49
|
+
- 2
|
50
|
+
- 5
|
51
|
+
version: 1.2.5
|
52
|
+
type: :runtime
|
53
|
+
version_requirements: *id002
|
54
|
+
- !ruby/object:Gem::Dependency
|
55
|
+
name: sexp_processor
|
56
|
+
prerelease: false
|
57
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
hash: 13
|
63
|
+
segments:
|
64
|
+
- 3
|
65
|
+
- 0
|
66
|
+
- 5
|
67
|
+
version: 3.0.5
|
68
|
+
type: :runtime
|
69
|
+
version_requirements: *id003
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: bacon
|
72
|
+
prerelease: false
|
73
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
41
74
|
none: false
|
42
75
|
requirements:
|
43
76
|
- - ">="
|
@@ -47,8 +80,8 @@ dependencies:
|
|
47
80
|
- 0
|
48
81
|
version: "0"
|
49
82
|
type: :development
|
50
|
-
version_requirements: *
|
51
|
-
description: "\n Give & take, serializing a ruby proc is possible, though not a perfect one
|
83
|
+
version_requirements: *id004
|
84
|
+
description: "\n Give & take, serializing a ruby proc is possible, though not a perfect one (yet).\n "
|
52
85
|
email: ngty77@gmail.com
|
53
86
|
executables: []
|
54
87
|
|
@@ -70,9 +103,6 @@ files:
|
|
70
103
|
- lib/serializable_proc/fixes.rb
|
71
104
|
- lib/serializable_proc/isolatable.rb
|
72
105
|
- lib/serializable_proc/marshalable.rb
|
73
|
-
- lib/serializable_proc/parsers.rb
|
74
|
-
- lib/serializable_proc/parsers/dynamic.rb
|
75
|
-
- lib/serializable_proc/parsers/static.rb
|
76
106
|
- serializable_proc.gemspec
|
77
107
|
- spec/bounded_vars/class_vars_spec.rb
|
78
108
|
- spec/bounded_vars/class_vars_within_block_scope_spec.rb
|
@@ -83,22 +113,8 @@ files:
|
|
83
113
|
- spec/bounded_vars/instance_vars_within_block_scope_spec.rb
|
84
114
|
- spec/bounded_vars/local_vars_spec.rb
|
85
115
|
- spec/bounded_vars/local_vars_within_block_scope_spec.rb
|
86
|
-
- spec/code_block/errors_spec.rb
|
87
116
|
- spec/code_block/magic_vars_spec.rb
|
88
|
-
- spec/code_block/multiple_arities_spec.rb
|
89
|
-
- spec/code_block/optional_arity_spec.rb
|
90
117
|
- spec/code_block/renaming_vars_spec.rb
|
91
|
-
- spec/code_block/single_arity_spec.rb
|
92
|
-
- spec/code_block/zero_arity_spec.rb
|
93
|
-
- spec/extending/new_matcher_w_multiple_arities_spec.rb
|
94
|
-
- spec/extending/new_matcher_w_optional_arity_spec.rb
|
95
|
-
- spec/extending/new_matcher_w_single_arity_spec.rb
|
96
|
-
- spec/extending/new_matcher_w_zero_arity_spec.rb
|
97
|
-
- spec/extending/spec_helper.rb
|
98
|
-
- spec/extending/subclassing_w_multiple_arities_spec.rb
|
99
|
-
- spec/extending/subclassing_w_optional_arity_spec.rb
|
100
|
-
- spec/extending/subclassing_w_single_arity_spec.rb
|
101
|
-
- spec/extending/subclassing_w_zero_arity_spec.rb
|
102
118
|
- spec/proc_like/extras_spec.rb
|
103
119
|
- spec/proc_like/invoking_with_args_spec.rb
|
104
120
|
- spec/proc_like/invoking_with_class_vars_spec.rb
|
@@ -112,7 +128,7 @@ has_rdoc: true
|
|
112
128
|
homepage: http://github.com/ngty/serializable_proc
|
113
129
|
licenses: []
|
114
130
|
|
115
|
-
post_install_message:
|
131
|
+
post_install_message:
|
116
132
|
rdoc_options:
|
117
133
|
- --charset=UTF-8
|
118
134
|
require_paths:
|
@@ -152,21 +168,7 @@ test_files:
|
|
152
168
|
- spec/proc_like/invoking_with_global_vars_spec.rb
|
153
169
|
- spec/proc_like/marshalling_spec.rb
|
154
170
|
- spec/code_block/magic_vars_spec.rb
|
155
|
-
- spec/code_block/multiple_arities_spec.rb
|
156
|
-
- spec/code_block/zero_arity_spec.rb
|
157
|
-
- spec/code_block/errors_spec.rb
|
158
171
|
- spec/code_block/renaming_vars_spec.rb
|
159
|
-
- spec/code_block/single_arity_spec.rb
|
160
|
-
- spec/code_block/optional_arity_spec.rb
|
161
|
-
- spec/extending/subclassing_w_optional_arity_spec.rb
|
162
|
-
- spec/extending/subclassing_w_single_arity_spec.rb
|
163
|
-
- spec/extending/new_matcher_w_multiple_arities_spec.rb
|
164
|
-
- spec/extending/subclassing_w_zero_arity_spec.rb
|
165
|
-
- spec/extending/new_matcher_w_single_arity_spec.rb
|
166
|
-
- spec/extending/subclassing_w_multiple_arities_spec.rb
|
167
|
-
- spec/extending/new_matcher_w_optional_arity_spec.rb
|
168
|
-
- spec/extending/new_matcher_w_zero_arity_spec.rb
|
169
|
-
- spec/extending/spec_helper.rb
|
170
172
|
- spec/bounded_vars/global_vars_within_block_scope_spec.rb
|
171
173
|
- spec/bounded_vars/instance_vars_within_block_scope_spec.rb
|
172
174
|
- spec/bounded_vars/errors_spec.rb
|
@@ -1,103 +0,0 @@
|
|
1
|
-
class SerializableProc
|
2
|
-
|
3
|
-
class CannotAnalyseCodeError < Exception ; end
|
4
|
-
|
5
|
-
module Parsers
|
6
|
-
class Static < Base
|
7
|
-
class << self
|
8
|
-
|
9
|
-
def process(klass, file, line)
|
10
|
-
const_set(:RUBY_PARSER, RubyParser.new) unless const_defined?(:RUBY_PARSER)
|
11
|
-
@klass, @file, @line = klass, file, line
|
12
|
-
extract_code_and_sexp
|
13
|
-
end
|
14
|
-
|
15
|
-
def matchers
|
16
|
-
@matchers ||= []
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def extract_code_and_sexp
|
22
|
-
sexp_str, remaining, @marker = extract_sexp_args
|
23
|
-
while frag = remaining[/^([^\)]*\))/,1]
|
24
|
-
begin
|
25
|
-
sexp = normalized_eval(sexp_str += frag)
|
26
|
-
return sexp_derivatives(sexp)
|
27
|
-
rescue SyntaxError
|
28
|
-
remaining.sub!(frag,'')
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def normalized_eval(sexp_str)
|
34
|
-
sexp = eval(sexp_str) # this will fail unless the sexp is valid
|
35
|
-
sexp.delete(marker_sexp = s(:call, nil, :"#{@marker}", s(:arglist)))
|
36
|
-
sexp.find_node(:block).delete(marker_sexp) rescue nil
|
37
|
-
if (block = sexp.find_node(:block)) && block.to_a.size == 2
|
38
|
-
sexp.gsub(block, Sexp.from_array(block.to_a[1]))
|
39
|
-
else
|
40
|
-
sexp
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def extract_sexp_args
|
45
|
-
raw, marker = raw_sexp_and_marker
|
46
|
-
regexp = Regexp.new(
|
47
|
-
'^(.*(' + Regexp.quote('s(:iter, s(:call, nil, :') +
|
48
|
-
'(?:proc|lambda)' + Regexp.quote(', s(:arglist') +
|
49
|
-
'.*?' + Regexp.quote("s(:call, nil, :#{marker}, s(:arglist))") +
|
50
|
-
'))(.*)$', Regexp::MULTILINE
|
51
|
-
)
|
52
|
-
[raw.match(regexp)[2..3], marker].flatten
|
53
|
-
end
|
54
|
-
|
55
|
-
def raw_sexp_and_marker
|
56
|
-
begin
|
57
|
-
raw_sexp_and_marker_by_lineno(@line)
|
58
|
-
rescue CannotAnalyseCodeError
|
59
|
-
# NOTE: Tmp fix for JRuby's buggy line-numbering within Proc#inspect
|
60
|
-
RUBY_PLATFORM =~ /java/i ? (@line += 1 ; retry) : raise($!)
|
61
|
-
ensure
|
62
|
-
@raw_code = nil
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def raw_sexp_and_marker_by_lineno(lineno)
|
67
|
-
(%W{#{@klass}\.new lambda|proc|Proc\.new} + matchers).each do |declarative|
|
68
|
-
ensure_no_repeated_occurrence(lineno, declarative)
|
69
|
-
args = raw_sexp_and_marker_args(lineno, declarative) and return args
|
70
|
-
end
|
71
|
-
raise CannotAnalyseCodeError.new('Cannot find specified initializer !!')
|
72
|
-
end
|
73
|
-
|
74
|
-
def ensure_no_repeated_occurrence(lineno, declarative)
|
75
|
-
if raw_code[lineno.pred] =~ /^(.*?\W)?(#{declarative})(\W.*?\W(#{declarative}))+(\W.*)?$/
|
76
|
-
msg = "Static code analysis can only handle single occurrence of '%s' per line !!" %
|
77
|
-
declarative.split('|').join("'/'")
|
78
|
-
raise CannotAnalyseCodeError.new(msg)
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
def raw_sexp_and_marker_args(lineno, declarative)
|
83
|
-
begin
|
84
|
-
raise if (line = raw_code[lineno.pred]) !~ /^(.*?\W)?(#{declarative})(\W.*)?$/
|
85
|
-
regexp = /^((.*?)(#{declarative})(\s*(?:do|\{)\s*(?:\|(?:[^\|]*)\|\s*)?)(.*)?)$/m
|
86
|
-
prepend, type, block_start, append = line.match(regexp)[2..5]
|
87
|
-
marker = "__serializable_proc_marker_#{lineno}__"
|
88
|
-
raw_code[lineno.pred] = "#{prepend}proc#{block_start} #{marker}; #{append}"
|
89
|
-
[RUBY_PARSER.parse(raw_code.join, @file).inspect, marker]
|
90
|
-
rescue
|
91
|
-
nil
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
def raw_code
|
96
|
-
@raw_code ||= File.readlines(@file)
|
97
|
-
end
|
98
|
-
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
@@ -1,30 +0,0 @@
|
|
1
|
-
class SerializableProc
|
2
|
-
module Parsers
|
3
|
-
|
4
|
-
RUBY_2_RUBY = Ruby2Ruby.new
|
5
|
-
|
6
|
-
class Base
|
7
|
-
class << self
|
8
|
-
|
9
|
-
include Isolatable
|
10
|
-
|
11
|
-
def sexp_derivatives(sexp, &fix_code)
|
12
|
-
isexp = isolated_sexp(sexp)
|
13
|
-
icode, code = [isexp, sexp].map do |_sexp|
|
14
|
-
code = RUBY_2_RUBY.process(Sexp.from_array(_sexp.to_a))
|
15
|
-
block_given? ? fix_code.call(code) : code
|
16
|
-
end
|
17
|
-
[
|
18
|
-
{:runnable => icode, :extracted => code},
|
19
|
-
{:runnable => isexp, :extracted => sexp}
|
20
|
-
]
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
require 'serializable_proc/parsers/dynamic'
|
30
|
-
require 'serializable_proc/parsers/static'
|
@@ -1,65 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), '..', 'spec_helper')
|
2
|
-
|
3
|
-
describe 'SerializableProc::CannotAnalyseCodeError' do
|
4
|
-
unless $parse_tree_installed
|
5
|
-
|
6
|
-
extend SerializableProc::Spec::Helpers
|
7
|
-
|
8
|
-
should "raise if line has more than 1 'SerializableProc.new'" do
|
9
|
-
lambda {
|
10
|
-
SerializableProc.new {} ; SerializableProc.new { |arg| %w{a b}.map{|x| puts x } }
|
11
|
-
}.should.be raising_cannot_analyse_error("'SerializableProc.new'")
|
12
|
-
end
|
13
|
-
|
14
|
-
should "raise if line has more than 1 'Proc.new'" do
|
15
|
-
lambda {
|
16
|
-
p1 = Proc.new {} ; p2 = Proc.new { |arg| %w{a b}.map{|x| puts x } }
|
17
|
-
SerializableProc.new(&p2)
|
18
|
-
}.should.be raising_cannot_analyse_error("'lambda'/'proc'/'Proc.new'")
|
19
|
-
end
|
20
|
-
|
21
|
-
should "raise if line has more than 1 'lambda'" do
|
22
|
-
lambda {
|
23
|
-
p1 = lambda {} ; p2 = lambda { |arg| %w{a b}.map{|x| puts x } }
|
24
|
-
SerializableProc.new(&p2)
|
25
|
-
}.should.be raising_cannot_analyse_error("'lambda'/'proc'/'Proc.new'")
|
26
|
-
end
|
27
|
-
|
28
|
-
should "raise if line has more than 1 'proc'" do
|
29
|
-
lambda {
|
30
|
-
p1 = proc {} ; p2 = proc { |arg| %w{a b}.map{|x| puts x } }
|
31
|
-
SerializableProc.new(&p2)
|
32
|
-
}.should.be raising_cannot_analyse_error("'lambda'/'proc'/'Proc.new'")
|
33
|
-
end
|
34
|
-
|
35
|
-
should "raise if line mixes 'lambda' & 'proc'" do
|
36
|
-
lambda {
|
37
|
-
p1 = lambda {} ; p2 = proc { |arg| %w{a b}.map{|x| puts x } }
|
38
|
-
SerializableProc.new(&p2)
|
39
|
-
}.should.be raising_cannot_analyse_error("'lambda'/'proc'/'Proc.new'")
|
40
|
-
end
|
41
|
-
|
42
|
-
should "raise if line mixes 'Proc.new' & 'proc'" do
|
43
|
-
lambda {
|
44
|
-
p1 = Proc.new {} ; p2 = proc { |arg| %w{a b}.map{|x| puts x } }
|
45
|
-
SerializableProc.new(&p2)
|
46
|
-
}.should.be raising_cannot_analyse_error("'lambda'/'proc'/'Proc.new'")
|
47
|
-
end
|
48
|
-
|
49
|
-
should "raise if line mixes 'Proc.new' & 'lambda'" do
|
50
|
-
lambda {
|
51
|
-
p1 = Proc.new {} ; p2 = lambda { |arg| %w{a b}.map{|x| puts x } }
|
52
|
-
SerializableProc.new(&p2)
|
53
|
-
}.should.be raising_cannot_analyse_error("'lambda'/'proc'/'Proc.new'")
|
54
|
-
end
|
55
|
-
|
56
|
-
should "raise if line does not have lambda, proc, Proc.new or SerializableProc.new" do
|
57
|
-
lambda {
|
58
|
-
def create_serializable_proc(&block) ; SerializableProc.new(&block) ; end
|
59
|
-
create_serializable_proc { %w{a b}.map{|x| puts x } }
|
60
|
-
}.should.raise(SerializableProc::CannotAnalyseCodeError).
|
61
|
-
message.should.equal('Cannot find specified initializer !!')
|
62
|
-
end
|
63
|
-
|
64
|
-
end
|
65
|
-
end
|
@@ -1,159 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), '..', 'spec_helper')
|
2
|
-
|
3
|
-
describe 'Extracting multiple arities code block' do
|
4
|
-
|
5
|
-
extend SerializableProc::Spec::Helpers
|
6
|
-
|
7
|
-
expected_file = File.expand_path(__FILE__)
|
8
|
-
expected_code = "lambda { |lvar_arg1, lvar_arg2| [\"a\", \"b\"].map { |lvar_x| puts(lvar_x) } }"
|
9
|
-
|
10
|
-
should_handle_proc_variable expected_file, expected_code, {
|
11
|
-
# ////////////////////////////////////////////////////////////////////////
|
12
|
-
# >> Always newlinling
|
13
|
-
# ////////////////////////////////////////////////////////////////////////
|
14
|
-
__LINE__ =>
|
15
|
-
lambda do |arg1, arg2|
|
16
|
-
%w{a b}.map do |x|
|
17
|
-
puts x
|
18
|
-
end
|
19
|
-
end,
|
20
|
-
__LINE__ =>
|
21
|
-
lambda { |arg1, arg2|
|
22
|
-
%w{a b}.map{|x|
|
23
|
-
puts x
|
24
|
-
}
|
25
|
-
},
|
26
|
-
__LINE__ =>
|
27
|
-
proc do |arg1, arg2|
|
28
|
-
%w{a b}.map do |x|
|
29
|
-
puts x
|
30
|
-
end
|
31
|
-
end,
|
32
|
-
__LINE__ =>
|
33
|
-
lambda { |arg1, arg2|
|
34
|
-
%w{a b}.map{|x|
|
35
|
-
puts x
|
36
|
-
}
|
37
|
-
},
|
38
|
-
__LINE__ =>
|
39
|
-
Proc.new do |arg1, arg2|
|
40
|
-
%w{a b}.map do |x|
|
41
|
-
puts x
|
42
|
-
end
|
43
|
-
end,
|
44
|
-
__LINE__ =>
|
45
|
-
Proc.new { |arg1, arg2|
|
46
|
-
%w{a b}.map{|x|
|
47
|
-
puts x
|
48
|
-
}
|
49
|
-
},
|
50
|
-
# ////////////////////////////////////////////////////////////////////////
|
51
|
-
# >> Partial newlining
|
52
|
-
# ////////////////////////////////////////////////////////////////////////
|
53
|
-
__LINE__ =>
|
54
|
-
lambda do |arg1, arg2|
|
55
|
-
%w{a b}.map do |x| puts x end
|
56
|
-
end,
|
57
|
-
__LINE__ =>
|
58
|
-
lambda { |arg1, arg2|
|
59
|
-
%w{a b}.map{|x| puts x }
|
60
|
-
},
|
61
|
-
__LINE__ =>
|
62
|
-
proc do |arg1, arg2|
|
63
|
-
%w{a b}.map do |x| puts x end
|
64
|
-
end,
|
65
|
-
__LINE__ =>
|
66
|
-
lambda { |arg1, arg2|
|
67
|
-
%w{a b}.map{|x| puts x }
|
68
|
-
},
|
69
|
-
__LINE__ =>
|
70
|
-
Proc.new do |arg1, arg2|
|
71
|
-
%w{a b}.map do |x| puts x end
|
72
|
-
end,
|
73
|
-
__LINE__ =>
|
74
|
-
Proc.new { |arg1, arg2|
|
75
|
-
%w{a b}.map{|x| puts x }
|
76
|
-
},
|
77
|
-
# ////////////////////////////////////////////////////////////////////////
|
78
|
-
# >> No newlining
|
79
|
-
# ////////////////////////////////////////////////////////////////////////
|
80
|
-
__LINE__ =>
|
81
|
-
lambda do |arg1, arg2| %w{a b}.map do |x| puts x end end,
|
82
|
-
__LINE__ =>
|
83
|
-
lambda { |arg1, arg2| %w{a b}.map{|x| puts x } },
|
84
|
-
__LINE__ =>
|
85
|
-
proc do |arg1, arg2| %w{a b}.map do |x| puts x end end,
|
86
|
-
__LINE__ =>
|
87
|
-
lambda { |arg1, arg2| %w{a b}.map{|x| puts x } },
|
88
|
-
__LINE__ =>
|
89
|
-
Proc.new do |arg1, arg2| %w{a b}.map do |x| puts x end end,
|
90
|
-
__LINE__ =>
|
91
|
-
Proc.new { |arg1, arg2| %w{a b}.map{|x| puts x } },
|
92
|
-
}
|
93
|
-
|
94
|
-
should "handle block using do ... end [##{__LINE__}]" do
|
95
|
-
(
|
96
|
-
SerializableProc.new do |arg1, arg2|
|
97
|
-
%w{a b}.map{|x| puts x }
|
98
|
-
end
|
99
|
-
).should.be having_expected_proc_attrs(expected_file, __LINE__ - 3, expected_code)
|
100
|
-
end
|
101
|
-
|
102
|
-
should "handle block using do ... end [##{__LINE__}]" do
|
103
|
-
(SerializableProc.new do |arg1, arg2| %w{a b}.map{|x| puts x } end).
|
104
|
-
should.be having_expected_proc_attrs(expected_file, __LINE__.pred, expected_code)
|
105
|
-
end
|
106
|
-
|
107
|
-
should "handle block using { ... } [##{__LINE__}]" do
|
108
|
-
(
|
109
|
-
SerializableProc.new { |arg1, arg2|
|
110
|
-
%w{a b}.map{|x| puts x }
|
111
|
-
}
|
112
|
-
).should.be having_expected_proc_attrs(expected_file, __LINE__ - 3, expected_code)
|
113
|
-
end
|
114
|
-
|
115
|
-
should "handle block using { ... } [##{__LINE__}]" do
|
116
|
-
(SerializableProc.new { |arg1, arg2| %w{a b}.map{|x| puts x } }).
|
117
|
-
should.be having_expected_proc_attrs(expected_file, __LINE__.pred, expected_code)
|
118
|
-
end
|
119
|
-
|
120
|
-
should "handle fanciful initializing with lambda { ... } [##{__LINE__}]" do
|
121
|
-
(SerializableProc.new(&(lambda { |arg1, arg2| %w{a b}.map{|x| puts x } }))).
|
122
|
-
should.be having_expected_proc_attrs(expected_file, __LINE__.pred, expected_code)
|
123
|
-
end
|
124
|
-
|
125
|
-
should "handle fanciful initializing with lambda do ... end [##{__LINE__}]" do
|
126
|
-
(
|
127
|
-
SerializableProc.new(&(lambda do |arg1, arg2|
|
128
|
-
%w{a b}.map{|x| puts x }
|
129
|
-
end))
|
130
|
-
).should.be having_expected_proc_attrs(expected_file, __LINE__ - 3, expected_code)
|
131
|
-
end
|
132
|
-
|
133
|
-
should "handle fanciful initializing with proc { ... } [##{__LINE__}]" do
|
134
|
-
(SerializableProc.new(&(proc { |arg1, arg2| %w{a b}.map{|x| puts x } }))).
|
135
|
-
should.be having_expected_proc_attrs(expected_file, __LINE__.pred, expected_code)
|
136
|
-
end
|
137
|
-
|
138
|
-
should "handle fanciful initializing with proc do ... end [##{__LINE__}]" do
|
139
|
-
(
|
140
|
-
SerializableProc.new(&(proc do |arg1, arg2|
|
141
|
-
%w{a b}.map{|x| puts x }
|
142
|
-
end))
|
143
|
-
).should.be having_expected_proc_attrs(expected_file, __LINE__ - 3, expected_code)
|
144
|
-
end
|
145
|
-
|
146
|
-
should "handle fanciful initializing with Proc.new { ... } [##{__LINE__}]" do
|
147
|
-
(SerializableProc.new(&(Proc.new { |arg1, arg2| %w{a b}.map{|x| puts x } }))).
|
148
|
-
should.be having_expected_proc_attrs(expected_file, __LINE__.pred, expected_code)
|
149
|
-
end
|
150
|
-
|
151
|
-
should "handle fanciful initializing with Proc.new do ... end [##{__LINE__}]" do
|
152
|
-
(
|
153
|
-
SerializableProc.new(&(Proc.new do |arg1, arg2|
|
154
|
-
%w{a b}.map{|x| puts x }
|
155
|
-
end))
|
156
|
-
).should.be having_expected_proc_attrs(expected_file, __LINE__ - 3, expected_code)
|
157
|
-
end
|
158
|
-
|
159
|
-
end
|