sourcify 0.5.0 → 0.6.0.rc1
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 +1 -0
- data/HISTORY.txt +5 -0
- data/README.rdoc +86 -3
- data/Rakefile +47 -15
- data/lib/sourcify.rb +13 -0
- data/lib/sourcify/common/parser/converter.rb +29 -0
- data/lib/sourcify/common/parser/raw_scanner/comment.rb +23 -0
- data/lib/sourcify/common/parser/raw_scanner/counter.rb +43 -0
- data/lib/sourcify/common/parser/raw_scanner/dstring.rb +60 -0
- data/lib/sourcify/common/parser/raw_scanner/extensions.rb +121 -0
- data/lib/sourcify/common/parser/raw_scanner/heredoc.rb +26 -0
- data/lib/sourcify/common/parser/source_code.rb +33 -0
- data/lib/sourcify/common/ragel/common.rl +5 -0
- data/lib/sourcify/common/ragel/expressions.rl +38 -0
- data/lib/sourcify/{proc/scanner.rl → common/ragel/machines.rl} +10 -178
- data/lib/sourcify/errors.rb +4 -0
- data/lib/sourcify/method.rb +134 -0
- data/lib/sourcify/method/methods.rb +3 -0
- data/lib/sourcify/method/methods/to_raw_source.rb +30 -0
- data/lib/sourcify/method/methods/to_sexp.rb +30 -0
- data/lib/sourcify/method/methods/to_source.rb +30 -0
- data/lib/sourcify/method/parser.rb +104 -0
- data/lib/sourcify/method/parser/converter.rb +8 -0
- data/lib/sourcify/method/parser/raw_scanner.rb +2494 -0
- data/lib/sourcify/method/parser/raw_scanner.rl +144 -0
- data/lib/sourcify/method/parser/raw_scanner_extensions.rb +64 -0
- data/lib/sourcify/method/parser/scanner.rb +48 -0
- data/lib/sourcify/method/parser/source_code.rb +8 -0
- data/lib/sourcify/proc.rb +0 -2
- data/lib/sourcify/proc/parser.rb +2 -5
- data/lib/sourcify/proc/parser/converter.rb +2 -23
- data/lib/sourcify/proc/{scanner.rb → parser/raw_scanner.rb} +808 -806
- data/lib/sourcify/proc/parser/raw_scanner.rl +149 -0
- data/lib/sourcify/proc/parser/raw_scanner_extensions.rb +72 -0
- data/lib/sourcify/proc/parser/{code_scanner.rb → scanner.rb} +9 -5
- data/lib/sourcify/proc/parser/source_code.rb +2 -27
- data/lib/sourcify/version.rb +1 -1
- data/spec/method/others_from_def_end_block_spec.rb +49 -0
- data/spec/method/others_from_define_method_spec.rb +62 -0
- data/spec/method/raw_scanner/block_comment_spec.rb +8 -0
- data/spec/method/raw_scanner/double_colons_spec.rb +8 -0
- data/spec/method/raw_scanner/double_quote_str_w_interpolation_spec.rb +8 -0
- data/spec/method/raw_scanner/double_quote_str_wo_interpolation_spec.rb +8 -0
- data/spec/method/raw_scanner/heredoc_w_indent_spec.rb +8 -0
- data/spec/method/raw_scanner/heredoc_wo_indent_spec.rb +8 -0
- data/spec/method/raw_scanner/kw_block_start_alias1_spec.rb +20 -0
- data/spec/method/raw_scanner/kw_block_start_alias2_spec.rb +20 -0
- data/spec/method/raw_scanner/per_line_comment_spec.rb +8 -0
- data/spec/method/raw_scanner/single_quote_str_spec.rb +8 -0
- data/spec/method/raw_scanner/slash_operator_spec.rb +8 -0
- data/spec/method/raw_scanner/spec_helper.rb +80 -0
- data/spec/method/spec_helper.rb +1 -0
- data/spec/method/to_raw_source_spec.rb +31 -0
- data/spec/method/to_raw_source_w_specified_strip_enclosure_spec.rb +148 -0
- data/spec/method/to_sexp_from_def_end_block_w_variables_spec.rb +46 -0
- data/spec/method/to_sexp_from_def_end_block_within_irb_spec.rb +38 -0
- data/spec/method/to_sexp_from_define_method_w_multi_blocks_and_specified_attached_to_spec.rb +56 -0
- data/spec/method/to_sexp_from_define_method_w_variables_spec.rb +52 -0
- data/spec/method/to_sexp_from_define_method_within_irb_spec.rb +42 -0
- data/spec/method/to_sexp_w_specified_strip_enclosure_spec.rb +74 -0
- data/spec/method/to_source_from_def_end_block_w_19_extras_spec.rb +23 -0
- data/spec/method/to_source_from_def_end_block_w_nested_begin_spec.rb +35 -0
- data/spec/method/to_source_from_def_end_block_w_nested_case_spec.rb +35 -0
- data/spec/method/to_source_from_def_end_block_w_nested_class_spec.rb +51 -0
- data/spec/method/to_source_from_def_end_block_w_nested_do_end_block_spec.rb +33 -0
- data/spec/method/to_source_from_def_end_block_w_nested_for_spec.rb +126 -0
- data/spec/method/to_source_from_def_end_block_w_nested_if_spec.rb +82 -0
- data/spec/method/to_source_from_def_end_block_w_nested_literal_keyword_spec.rb +141 -0
- data/spec/method/to_source_from_def_end_block_w_nested_method_spec.rb +33 -0
- data/spec/method/to_source_from_def_end_block_w_nested_module_spec.rb +59 -0
- data/spec/method/to_source_from_def_end_block_w_nested_unless_spec.rb +82 -0
- data/spec/method/to_source_from_def_end_block_w_nested_until_spec.rb +179 -0
- data/spec/method/to_source_from_def_end_block_w_nested_while_spec.rb +179 -0
- data/spec/method/to_source_from_def_end_block_w_singleton_method_spec.rb +19 -0
- data/spec/method/to_source_from_def_end_block_within_irb_spec.rb +30 -0
- data/spec/method/to_source_from_def_end_w_multi_blocks_and_many_matches_spec.rb +30 -0
- data/spec/method/to_source_from_def_end_w_multi_blocks_and_single_match_spec.rb +36 -0
- data/spec/method/to_source_from_define_method_w_braced_block_spec.rb +113 -0
- data/spec/method/to_source_from_define_method_w_do_end_block_spec.rb +145 -0
- data/spec/method/to_source_from_define_method_w_multi_blocks_and_many_matches_spec.rb +56 -0
- data/spec/method/to_source_from_define_method_w_multi_blocks_and_single_match_spec.rb +73 -0
- data/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_and_many_matches_spec.rb +36 -0
- data/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_and_no_match_spec.rb +36 -0
- data/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_and_single_match_spec.rb +28 -0
- data/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_spec.rb +103 -0
- data/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_body_matcher_and_many_matches_spec.rb +36 -0
- data/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_body_matcher_and_no_match_spec.rb +36 -0
- data/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_body_matcher_and_single_match_spec.rb +28 -0
- data/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_ignore_nested_spec.rb +36 -0
- data/spec/method/to_source_from_define_method_within_irb_spec.rb +32 -0
- data/spec/method/to_source_magic_file_var_spec.rb +176 -0
- data/spec/method/to_source_magic_line_var_spec.rb +298 -0
- data/spec/method/to_source_w_specified_strip_enclosure_spec.rb +39 -0
- data/spec/no_method/unsupported_platform_spec.rb +26 -0
- data/spec/proc/raw_scanner/block_comment_spec.rb +8 -0
- data/spec/proc/raw_scanner/double_colons_spec.rb +8 -0
- data/spec/proc/raw_scanner/double_quote_str_w_interpolation_spec.rb +8 -0
- data/spec/proc/raw_scanner/double_quote_str_wo_interpolation_spec.rb +8 -0
- data/spec/proc/raw_scanner/heredoc_w_indent_spec.rb +8 -0
- data/spec/proc/raw_scanner/heredoc_wo_indent_spec.rb +8 -0
- data/spec/proc/raw_scanner/kw_block_start_alias1_spec.rb +20 -0
- data/spec/proc/raw_scanner/kw_block_start_alias2_spec.rb +20 -0
- data/spec/proc/raw_scanner/per_line_comment_spec.rb +8 -0
- data/spec/proc/raw_scanner/single_quote_str_spec.rb +8 -0
- data/spec/proc/raw_scanner/slash_operator_spec.rb +8 -0
- data/spec/proc/raw_scanner/spec_helper.rb +63 -0
- data/spec/{proc_scanner/block_comment_spec.rb → raw_scanner/block_comment_shared_spec.rb} +1 -5
- data/spec/{proc_scanner/double_colons_spec.rb → raw_scanner/double_colons_shared_spec.rb} +1 -5
- data/spec/{proc_scanner/double_quote_str_w_interpolation_spec.rb → raw_scanner/double_quote_str_w_interpolation_shared_spec.rb} +1 -5
- data/spec/{proc_scanner/double_quote_str_wo_interpolation_spec.rb → raw_scanner/double_quote_str_wo_interpolation_shared_spec.rb} +1 -5
- data/spec/raw_scanner/heredoc_w_indent_shared_spec.rb +69 -0
- data/spec/raw_scanner/heredoc_wo_indent_shared_spec.rb +70 -0
- data/spec/{proc_scanner/kw_do_alias1_spec.rb → raw_scanner/kw_block_start_alias1_shared_spec.rb} +10 -26
- data/spec/{proc_scanner/kw_do_alias2_spec.rb → raw_scanner/kw_block_start_alias2_shared_spec.rb} +10 -25
- data/spec/{proc_scanner/per_line_comment_spec.rb → raw_scanner/per_line_comment_shared_spec.rb} +1 -5
- data/spec/raw_scanner/shared_specs.rb +3 -0
- data/spec/{proc_scanner/single_quote_str_spec.rb → raw_scanner/single_quote_str_shared_spec.rb} +1 -5
- data/spec/{proc_scanner/slash_operator_spec.rb → raw_scanner/slash_operator_shared_spec.rb} +1 -5
- data/spec/run_spec.sh +7 -1
- data/spec/spec_helper.rb +8 -25
- metadata +204 -47
- data/.rvmrc +0 -1
- data/VERSION +0 -1
- data/lib/sourcify/proc/scanner/comment.rb +0 -21
- data/lib/sourcify/proc/scanner/counter.rb +0 -44
- data/lib/sourcify/proc/scanner/dstring.rb +0 -59
- data/lib/sourcify/proc/scanner/extensions.rb +0 -171
- data/lib/sourcify/proc/scanner/heredoc.rb +0 -24
- data/spec/proc_scanner/heredoc_spec.rb +0 -144
- data/spec/proc_scanner/spec_helper.rb +0 -33
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
|
|
2
|
+
|
|
3
|
+
describe 'Method#to_source (from #define_method)' do
|
|
4
|
+
describe 'w multi blocks and many matches' do
|
|
5
|
+
|
|
6
|
+
if has_parsetree?
|
|
7
|
+
# TODO: Should we support this ??
|
|
8
|
+
else
|
|
9
|
+
|
|
10
|
+
before { @thing = Object.new }
|
|
11
|
+
error = Sourcify::MultipleMatchingProcsPerLineError
|
|
12
|
+
|
|
13
|
+
describe 'w do...end block' do
|
|
14
|
+
should "raise #{error} w no nesting on same line" do
|
|
15
|
+
b1 = lambda do |a| @x end; b2 = lambda do @x end; b3 = lambda do @x end
|
|
16
|
+
@thing.class.send(:define_method, :m1, &b2)
|
|
17
|
+
lambda { @thing.method(:m1).to_source }.should.raise(error)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
should "raise #{error} w single level nesting on same line" do
|
|
21
|
+
b1 = lambda do |a| @x end; b2 = lambda do lambda do @x end end
|
|
22
|
+
@thing.class.send(:define_method, :m2, &b2)
|
|
23
|
+
lambda { @thing.method(:m2).to_source }.should.raise(error)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
should "raise #{error} w multi level nesting on same line" do
|
|
27
|
+
b2 = (lambda do |a| lambda do lambda do @x end end end).call(1)
|
|
28
|
+
@thing.class.send(:define_method, :m3, &b2)
|
|
29
|
+
lambda { @thing.method(:m3).to_source }.should.raise(error)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
describe 'w braced block' do
|
|
34
|
+
should "raise #{error} w no nesting on same line" do
|
|
35
|
+
b1 = lambda {|a| @x }; b2 = lambda { @x }; b3 = lambda { @x }
|
|
36
|
+
@thing.class.send(:define_method, :m1, &b2)
|
|
37
|
+
lambda { @thing.method(:m1).to_source }.should.raise(error)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
should "raise #{error} w single level nesting on same line" do
|
|
41
|
+
b1 = lambda {|a| @x }; b2 = lambda { lambda { @x } }
|
|
42
|
+
@thing.class.send(:define_method, :m2, &b2)
|
|
43
|
+
lambda { @thing.method(:m2).to_source }.should.raise(error)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
should "raise #{error} w multi level nesting on same line" do
|
|
47
|
+
b2 = (lambda {|a| lambda { lambda { @x } } }).call(1)
|
|
48
|
+
@thing.class.send(:define_method, :m3, &b2)
|
|
49
|
+
lambda { @thing.method(:m3).to_source }.should.raise(error)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
|
|
2
|
+
|
|
3
|
+
describe 'Method#to_source (from define_method)' do
|
|
4
|
+
describe 'w single blocks and many matches' do
|
|
5
|
+
|
|
6
|
+
before { @thing = Object.new }
|
|
7
|
+
|
|
8
|
+
describe 'w do...end block' do
|
|
9
|
+
should 'skip non-matching w no nesting on same line' do
|
|
10
|
+
b1 = lambda do |a| @x1 end; b2 = lambda do |b| @x2 end
|
|
11
|
+
@thing.class.send(:define_method, :m1, &b2)
|
|
12
|
+
@thing.method(:m1).should.be having_source(%(
|
|
13
|
+
def m1(b)
|
|
14
|
+
@x2
|
|
15
|
+
end
|
|
16
|
+
))
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
should 'skip non-matching w single level nesting on same line' do
|
|
20
|
+
b2 = (lambda do |a| lambda do |b| @x2 end end).call(1)
|
|
21
|
+
@thing.class.send(:define_method, :m2, &b2)
|
|
22
|
+
@thing.method(:m2).should.be having_source(%(
|
|
23
|
+
def m2(b)
|
|
24
|
+
@x2
|
|
25
|
+
end
|
|
26
|
+
))
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
should 'skip non-matching w multi level nesting on same line' do
|
|
30
|
+
b2 = (lambda do |a| lambda do |b| b2 = lambda do |c| @x3 end end end).call(1).call(1)
|
|
31
|
+
@thing.class.send(:define_method, :m3, &b2)
|
|
32
|
+
@thing.method(:m3).should.be having_source(%(
|
|
33
|
+
def m3(c)
|
|
34
|
+
@x3
|
|
35
|
+
end
|
|
36
|
+
))
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
describe 'w braced block' do
|
|
41
|
+
should 'skip non-matching w no nesting on same line' do
|
|
42
|
+
b1 = lambda {|a| @x1 }; b2 = lambda {|b| @x2 }
|
|
43
|
+
@thing.class.send(:define_method, :m1, &b2)
|
|
44
|
+
@thing.method(:m1).should.be having_source(%(
|
|
45
|
+
def m1(b)
|
|
46
|
+
@x2
|
|
47
|
+
end
|
|
48
|
+
))
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
should 'skip non-matching w single level nesting on same line' do
|
|
52
|
+
b2 = (lambda {|a| lambda {|b| @x2 } }).call(1)
|
|
53
|
+
@thing.class.send(:define_method, :m2, &b2)
|
|
54
|
+
@thing.method(:m2).should.be having_source(%(
|
|
55
|
+
def m2(b)
|
|
56
|
+
@x2
|
|
57
|
+
end
|
|
58
|
+
))
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
should 'skip non-matching w multi level nesting on same line' do
|
|
62
|
+
b2 = (lambda {|a| lambda {|b| b2 = lambda {|c| @x3 } } }).call(1).call(1)
|
|
63
|
+
@thing.class.send(:define_method, :m3, &b2)
|
|
64
|
+
@thing.method(:m3).should.be having_source(%(
|
|
65
|
+
def m3(c)
|
|
66
|
+
@x3
|
|
67
|
+
end
|
|
68
|
+
))
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
|
|
2
|
+
|
|
3
|
+
describe 'Method#to_source (from define_method)' do
|
|
4
|
+
describe 'w specified {:attached_to => ...} & single match' do
|
|
5
|
+
|
|
6
|
+
before { @thing = Object.new }
|
|
7
|
+
options = {:attached_to => :lambda}
|
|
8
|
+
|
|
9
|
+
if has_parsetree?
|
|
10
|
+
# TODO: Should we support this ??
|
|
11
|
+
else
|
|
12
|
+
|
|
13
|
+
error = Sourcify::MultipleMatchingProcsPerLineError
|
|
14
|
+
|
|
15
|
+
should "raise #{error} w no nesting on same line" do
|
|
16
|
+
b1 = lambda {|a| @x }; b2 = lambda { @x }; b3 = lambda { @x }
|
|
17
|
+
@thing.class.send(:define_method, :m1, &b2)
|
|
18
|
+
lambda { @thing.method(:m1).to_source(options) }.should.raise(error)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
should "raise #{error} w single level nesting on same line" do
|
|
22
|
+
b1 = lambda {|a| @x }; b2 = lambda { lambda { @x } }
|
|
23
|
+
@thing.class.send(:define_method, :m2, &b2)
|
|
24
|
+
lambda { @thing.method(:m2).to_source(options) }.should.raise(error)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
should "raise #{error} w multi level nesting on same line" do
|
|
28
|
+
b2 = (lambda {|a| lambda { lambda { @x } } }).call(1)
|
|
29
|
+
@thing.class.send(:define_method, :m3, &b2)
|
|
30
|
+
lambda { @thing.method(:m3).to_source(options) }.should.raise(error)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
|
|
2
|
+
|
|
3
|
+
describe 'Method#to_source (from define_method)' do
|
|
4
|
+
describe 'w specified {:attached_to => ...} & no match' do
|
|
5
|
+
|
|
6
|
+
before { @thing = Object.new }
|
|
7
|
+
options = {:attached_to => :forever}
|
|
8
|
+
|
|
9
|
+
if has_parsetree?
|
|
10
|
+
# TODO: Should we support this ??
|
|
11
|
+
else
|
|
12
|
+
|
|
13
|
+
error = Sourcify::NoMatchingProcError
|
|
14
|
+
|
|
15
|
+
should "raise #{error} w no nesting on same line" do
|
|
16
|
+
b1 = lambda {|a| @x }; b2 = watever { @x }; b3 = lambda { @x }
|
|
17
|
+
@thing.class.send(:define_method, :m1, &b2)
|
|
18
|
+
lambda { @thing.method(:m1).to_source(options) }.should.raise(error)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
should "raise #{error} w single level nesting on same line" do
|
|
22
|
+
b1 = lambda {|a| @x }; b2 = watever { lambda { @x } }
|
|
23
|
+
@thing.class.send(:define_method, :m2, &b2)
|
|
24
|
+
lambda { @thing.method(:m2).to_source(options) }.should.raise(error)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
should "raise #{error} w multi level nesting on same line" do
|
|
28
|
+
b2 = (lambda {|a| watever { lambda { @x } } }).call(1)
|
|
29
|
+
@thing.class.send(:define_method, :m3, &b2)
|
|
30
|
+
lambda { @thing.method(:m3).to_source(options) }.should.raise(error)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
|
|
2
|
+
|
|
3
|
+
describe 'Method#to_source (from define_method)' do
|
|
4
|
+
describe 'w specified {:attached_to => ...} & single match' do
|
|
5
|
+
|
|
6
|
+
before { @thing = Object.new }
|
|
7
|
+
options = {:attached_to => :watever}
|
|
8
|
+
|
|
9
|
+
should 'handle no nesting on same line' do
|
|
10
|
+
b1 = lambda {|a| @x1+1 }; b2 = watever { @x1+2 }; b3 = lambda { @x1+3 }
|
|
11
|
+
@thing.class.send(:define_method, :m1, &b2)
|
|
12
|
+
@thing.method(:m1).should.be having_source('def m1; @x1+2; end', options)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
should 'handle single level nesting on same line' do
|
|
16
|
+
b1 = lambda {|a| @x2+1 }; b2 = watever { lambda { @x2+2 } }
|
|
17
|
+
@thing.class.send(:define_method, :m2, &b2)
|
|
18
|
+
@thing.method(:m2).should.be having_source('def m2; lambda { @x2+2 }; end', options)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
should 'handle multi level nesting on same line' do
|
|
22
|
+
b2 = (lambda {|a| watever { lambda { @x3 } } }).call(1)
|
|
23
|
+
@thing.class.send(:define_method, :m3, &b2)
|
|
24
|
+
@thing.method(:m3).should.be having_source('def m3; lambda { @x3 }; end', options)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
end
|
data/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_spec.rb
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
|
|
2
|
+
|
|
3
|
+
describe 'Method#to_source (from define_method)' do
|
|
4
|
+
describe 'w specified {:attached_to => ...}' do
|
|
5
|
+
|
|
6
|
+
if has_parsetree?
|
|
7
|
+
# TODO: Should we support this ??
|
|
8
|
+
else
|
|
9
|
+
|
|
10
|
+
before { @thing = Object.new }
|
|
11
|
+
|
|
12
|
+
err1 = Sourcify::MultipleMatchingProcsPerLineError
|
|
13
|
+
err2 = Sourcify::NoMatchingProcError
|
|
14
|
+
|
|
15
|
+
describe '>> w :attached_to as regexp' do
|
|
16
|
+
|
|
17
|
+
should "raise Sourcify::MultipleMatchingProcsPerLineError for multiple matches" do
|
|
18
|
+
b1 = lambda {|a| @x }; b2 = lambda { @x }; b3 = lambda { @x }
|
|
19
|
+
@thing.class.send(:define_method, :m1, &b2)
|
|
20
|
+
lambda { @thing.method(:m1).to_source(:attached_to => /^(?:.*?\W|)lambda(?:\W)/) }.should.raise(err1)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
should "raise Sourcify::NoMatchingProcError for no match" do
|
|
24
|
+
b1 = lambda {|a| @x }; b2 = lambda { @x }; b3 = lambda { @x }
|
|
25
|
+
@thing.class.send(:define_method, :m2, &b2)
|
|
26
|
+
lambda { @thing.method(:m2).to_source(:attached_to => /^(?:.*?\W|)proc(?:\W)/) }.should.raise(err2)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
should "handle for single match" do
|
|
30
|
+
b1 = lambda {|a| @x1 }; b2 = proc { @x2 }; b3 = lambda { @x3 }
|
|
31
|
+
@thing.class.send(:define_method, :m3, &b2)
|
|
32
|
+
@thing.method(:m3).should.be having_source('def m3; @x2; end', :attached_to => /^(?:.*?\W|)proc(?:\W)/)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
describe '>> w :attached_to as string' do
|
|
38
|
+
|
|
39
|
+
should "raise Sourcify::MultipleMatchingProcsPerLineError for multiple matches" do
|
|
40
|
+
b1 = lambda {|a| @x }; b2 = lambda { @x }; b3 = lambda { @x }
|
|
41
|
+
@thing.class.send(:define_method, :m1, &b2)
|
|
42
|
+
lambda { @thing.method(:m1).to_source(:attached_to => 'lambda') }.should.raise(err1)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
should "raise Sourcify::NoMatchingProcError for no match" do
|
|
46
|
+
b1 = lambda {|a| @x }; b2 = lambda { @x }; b3 = lambda { @x }
|
|
47
|
+
@thing.class.send(:define_method, :m2, &b2)
|
|
48
|
+
lambda { @thing.method(:m2).to_source(:attached_to => 'proc') }.should.raise(err2)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
should "handle for single match" do
|
|
52
|
+
b1 = lambda {|a| @x1 }; b2 = proc { @x2 }; b3 = lambda { @x3 }
|
|
53
|
+
@thing.class.send(:define_method, :m3, &b2)
|
|
54
|
+
@thing.method(:m3).should.be having_source('def m3; @x2; end', :attached_to => 'proc')
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
describe '>> w :attached_to as symbol' do
|
|
60
|
+
|
|
61
|
+
should "raise Sourcify::MultipleMatchingProcsPerLineError for multiple matches" do
|
|
62
|
+
b1 = lambda {|a| @x }; b2 = lambda { @x }; b3 = lambda { @x }
|
|
63
|
+
@thing.class.send(:define_method, :m1, &b2)
|
|
64
|
+
lambda { @thing.method(:m1).to_source(:attached_to => :lambda) }.should.raise(err1)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
should "raise Sourcify::NoMatchingProcError for no match" do
|
|
68
|
+
b1 = lambda {|a| @x }; b2 = lambda { @x }; b3 = lambda { @x }
|
|
69
|
+
@thing.class.send(:define_method, :m2, &b2)
|
|
70
|
+
lambda { @thing.method(:m2).to_source(:attached_to => :proc) }.should.raise(err2)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
should "handle for single match" do
|
|
74
|
+
b1 = lambda {|a| @x1 }; b2 = proc { @x2 }; b3 = lambda { @x3 }
|
|
75
|
+
@thing.class.send(:define_method, :m3, &b2)
|
|
76
|
+
@thing.method(:m3).should.be having_source('def m3; @x2; end', :attached_to => :proc)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
describe '>> w false start as a result of preceding hash' do
|
|
82
|
+
|
|
83
|
+
option = {:attached_to => :watever}
|
|
84
|
+
aa = :aa
|
|
85
|
+
|
|
86
|
+
should 'handle for do ... end block' do
|
|
87
|
+
x = watever({aa => 1, :bb => 3}) do :blah end
|
|
88
|
+
@thing.class.send(:define_method, :m1, &x)
|
|
89
|
+
@thing.method(:m1).should.be having_source('def m1; :blah; end', option)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
should 'handle for { ... } block' do
|
|
93
|
+
x = watever({aa => 1, :bb => 3}) { :blah }
|
|
94
|
+
@thing.class.send(:define_method, :m2, &x)
|
|
95
|
+
@thing.method(:m2).should.be having_source('def m2; :blah; end', option)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
end
|
|
103
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
|
|
2
|
+
|
|
3
|
+
describe 'Method#to_source (from define_method)' do
|
|
4
|
+
describe 'w specified body matcher & single match' do
|
|
5
|
+
|
|
6
|
+
before { @thing = Object.new }
|
|
7
|
+
matcher = lambda {|code| code =~ /^(.*\W|)alert\W/ }
|
|
8
|
+
|
|
9
|
+
if has_parsetree?
|
|
10
|
+
# TODO: Should we support this ??
|
|
11
|
+
else
|
|
12
|
+
|
|
13
|
+
error = Sourcify::MultipleMatchingProcsPerLineError
|
|
14
|
+
|
|
15
|
+
should "raise #{error} w no nesting on same line" do
|
|
16
|
+
b1 = lambda {|a| @x }; b2 = lambda { alert(1) }; b3 = lambda { alert(2) }
|
|
17
|
+
@thing.class.send(:define_method, :m1, &b2)
|
|
18
|
+
lambda { @thing.method(:m1).to_source(&matcher) }.should.raise(error)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
should "raise #{error} w single level nesting on same line" do
|
|
22
|
+
b1 = lambda {|a| @x }; b2 = lambda { lambda { alert(1) } }
|
|
23
|
+
@thing.class.send(:define_method, :m2, &b2)
|
|
24
|
+
lambda { @thing.method(:m2).to_source(&matcher) }.should.raise(error)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
should "raise #{error} w multi level nesting on same line" do
|
|
28
|
+
b2 = (lambda {|a| lambda { lambda { alert(1) } } }).call(1)
|
|
29
|
+
@thing.class.send(:define_method, :m3, &b2)
|
|
30
|
+
lambda { @thing.method(:m3).to_source(&matcher) }.should.raise(error)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
|
|
2
|
+
|
|
3
|
+
describe 'Method#to_source (from define_method)' do
|
|
4
|
+
describe 'w specified body matcher & no match' do
|
|
5
|
+
|
|
6
|
+
before { @thing = Object.new }
|
|
7
|
+
matcher = lambda {|code| code =~ /^(.*\W|)def\W/ }
|
|
8
|
+
|
|
9
|
+
if has_parsetree?
|
|
10
|
+
# TODO: Should we support this ??
|
|
11
|
+
else
|
|
12
|
+
|
|
13
|
+
error = Sourcify::NoMatchingProcError
|
|
14
|
+
|
|
15
|
+
should "raise #{error} w no nesting on same line" do
|
|
16
|
+
b1 = lambda {|a| @x }; b2 = lambda { @x }; b3 = lambda { @x }
|
|
17
|
+
@thing.class.send(:define_method, :m1, &b2)
|
|
18
|
+
lambda { @thing.method(:m1).to_source(&matcher) }.should.raise(error)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
should "raise #{error} w single level nesting on same line" do
|
|
22
|
+
b1 = lambda {|a| @x }; b2 = lambda { lambda { @x } }
|
|
23
|
+
@thing.class.send(:define_method, :m2, &b2)
|
|
24
|
+
lambda { @thing.method(:m2).to_source(&matcher) }.should.raise(error)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
should "raise #{error} w multi level nesting on same line" do
|
|
28
|
+
b2 = (lambda {|a| lambda { lambda { @x } } }).call(1)
|
|
29
|
+
@thing.class.send(:define_method, :m3, &b2)
|
|
30
|
+
lambda { @thing.method(:m3).to_source(&matcher) }.should.raise(error)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
|
|
2
|
+
|
|
3
|
+
describe 'Method#to_source (from define_method)' do
|
|
4
|
+
describe 'w specified body matcher & single match' do
|
|
5
|
+
|
|
6
|
+
before { @thing = Object.new }
|
|
7
|
+
matcher = lambda {|code| code =~ /^(.*\W|)alert\W/ }
|
|
8
|
+
|
|
9
|
+
should 'handle no nesting on same line' do
|
|
10
|
+
b1 = lambda {|a| @x1+1 }; b2 = lambda { @x1+2 }; b3 = lambda { alert(1) }
|
|
11
|
+
@thing.class.send(:define_method, :m1, &b3)
|
|
12
|
+
@thing.method(:m1).should.be having_source('def m1; alert(1); end', &matcher)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
should 'handle single level nesting on same line' do
|
|
16
|
+
b1 = lambda {|a| @x2+1 }; b2 = lambda { alert(1); lambda { @x2+3 } }
|
|
17
|
+
@thing.class.send(:define_method, :m2, &b2)
|
|
18
|
+
@thing.method(:m2).should.be having_source('def m2; alert(1); lambda { @x2+3 }; end', &matcher)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
should 'handle multi level nesting on same line' do
|
|
22
|
+
b2 = (lambda {|a| lambda { alert(1); lambda { @x3+3 } } }).call(1)
|
|
23
|
+
@thing.class.send(:define_method, :m3, &b2)
|
|
24
|
+
@thing.method(:m3).should.be having_source('def m3; alert(1); lambda { @x3+3 }; end', &matcher)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
end
|
data/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_ignore_nested_spec.rb
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
|
|
2
|
+
|
|
3
|
+
describe 'Method#to_source w specified {:ignore_nested => ...} (for defind_method)' do
|
|
4
|
+
|
|
5
|
+
before { @thing = Object.new }
|
|
6
|
+
options = {:ignore_nested => true}
|
|
7
|
+
|
|
8
|
+
if has_parsetree?
|
|
9
|
+
# TODO: Should we support parsetree ??
|
|
10
|
+
else
|
|
11
|
+
|
|
12
|
+
should "raise Sourcify::MultipleMatchingProcsPerLineError w no nesting on same line" do
|
|
13
|
+
b1 = lambda {|a| @x1+1 }; b2 = lambda { @x1+2 }; b3 = lambda { @x1+3 }
|
|
14
|
+
@thing.class.send(:define_method, :m1, &b2)
|
|
15
|
+
lambda { @thing.method(:m1).to_source(options) }.should.raise(Sourcify::MultipleMatchingProcsPerLineError)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
should "handle w single level nesting on same line" do
|
|
19
|
+
b1 = lambda {|a| @x2+1 }; b2 = lambda { lambda { @x2+3 } }
|
|
20
|
+
@thing.class.send(:define_method, :m2, &b2)
|
|
21
|
+
@thing.method(:m2).should.be having_source(%(
|
|
22
|
+
def m2
|
|
23
|
+
lambda { @x2+3 }
|
|
24
|
+
end
|
|
25
|
+
), options)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
should "raise Sourcify::NoMatchingProcError w multi level nesting on same line (w outermost having diff arity)" do
|
|
29
|
+
b2 = (lambda {|a| lambda { lambda { @x3 } } }).call(1)
|
|
30
|
+
@thing.class.send(:define_method, :m3, &b2)
|
|
31
|
+
lambda { @thing.method(:m3).to_source(options) }.should.raise(Sourcify::NoMatchingProcError)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|