sourcify 0.3.0 → 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.
Files changed (69) hide show
  1. data/.infinity_test +32 -0
  2. data/HISTORY.txt +12 -0
  3. data/README.rdoc +69 -30
  4. data/Rakefile +2 -3
  5. data/VERSION +1 -1
  6. data/lib/sourcify.rb +2 -2
  7. data/lib/sourcify/proc.rb +144 -65
  8. data/lib/sourcify/proc/methods.rb +3 -0
  9. data/lib/sourcify/proc/methods/source_location.rb +61 -0
  10. data/lib/sourcify/proc/methods/to_sexp.rb +40 -0
  11. data/lib/sourcify/proc/methods/to_source.rb +48 -0
  12. data/lib/sourcify/proc/parser.rb +36 -17
  13. data/lib/sourcify/proc/scanner.rb +317 -271
  14. data/lib/sourcify/proc/scanner.rl +13 -2
  15. data/lib/sourcify/proc/scanner/extensions.rb +34 -10
  16. data/sourcify.gemspec +36 -6
  17. data/spec/proc/created_on_the_fly_proc_spec.rb +1 -1
  18. data/spec/proc/others_spec.rb +6 -2
  19. data/spec/proc/spec_helper.rb +1 -0
  20. data/spec/proc/to_sexp_from_multi_blocks_w_specified_attached_to_spec.rb +46 -0
  21. data/spec/proc/to_sexp_variables_spec.rb +1 -1
  22. data/spec/proc/to_sexp_w_specified_strip_enclosure_spec.rb +60 -0
  23. data/spec/proc/to_sexp_within_irb_spec.rb +1 -1
  24. data/spec/proc/to_source_from_braced_block_w_nested_braced_block_spec.rb +1 -1
  25. data/spec/proc/to_source_from_braced_block_w_nested_hash_spec.rb +2 -2
  26. data/spec/proc/to_source_from_braced_block_wo_nesting_complication_spec.rb +1 -1
  27. data/spec/proc/to_source_from_do_end_block_w_nested_begin_spec.rb +1 -1
  28. data/spec/proc/to_source_from_do_end_block_w_nested_case_spec.rb +1 -1
  29. data/spec/proc/to_source_from_do_end_block_w_nested_class_spec.rb +1 -1
  30. data/spec/proc/to_source_from_do_end_block_w_nested_do_end_block_spec.rb +1 -1
  31. data/spec/proc/to_source_from_do_end_block_w_nested_for_spec.rb +1 -1
  32. data/spec/proc/to_source_from_do_end_block_w_nested_if_spec.rb +1 -1
  33. data/spec/proc/to_source_from_do_end_block_w_nested_literal_keyword_spec.rb +1 -1
  34. data/spec/proc/to_source_from_do_end_block_w_nested_method_spec.rb +1 -1
  35. data/spec/proc/to_source_from_do_end_block_w_nested_module_spec.rb +1 -1
  36. data/spec/proc/to_source_from_do_end_block_w_nested_unless_spec.rb +1 -1
  37. data/spec/proc/to_source_from_do_end_block_w_nested_until_spec.rb +1 -1
  38. data/spec/proc/to_source_from_do_end_block_w_nested_while_spec.rb +1 -1
  39. data/spec/proc/to_source_from_do_end_block_wo_nesting_complication_spec.rb +1 -1
  40. data/spec/proc/to_source_from_multi_blocks_w_many_matches_spec.rb +20 -126
  41. data/spec/proc/to_source_from_multi_blocks_w_single_match_spec.rb +10 -89
  42. data/spec/proc/to_source_from_multi_blocks_w_specified_attached_to_and_many_matches_spec.rb +45 -0
  43. data/spec/proc/to_source_from_multi_blocks_w_specified_attached_to_and_no_match_spec.rb +45 -0
  44. data/spec/proc/to_source_from_multi_blocks_w_specified_attached_to_and_single_match_spec.rb +22 -0
  45. data/spec/proc/to_source_from_multi_blocks_w_specified_attached_to_spec.rb +83 -0
  46. data/spec/proc/to_source_from_multi_blocks_w_specified_body_matcher_and_many_matches_spec.rb +45 -0
  47. data/spec/proc/to_source_from_multi_blocks_w_specified_body_matcher_and_no_match_spec.rb +45 -0
  48. data/spec/proc/to_source_from_multi_blocks_w_specified_body_matcher_and_single_match_spec.rb +22 -0
  49. data/spec/proc/to_source_from_multi_blocks_w_specified_ignore_nested_spec.rb +43 -0
  50. data/spec/proc/to_source_from_multi_do_end_blocks_w_single_match_spec.rb +1 -1
  51. data/spec/proc/to_source_magic_file_var_spec.rb +1 -1
  52. data/spec/proc/to_source_magic_line_var_spec.rb +1 -1
  53. data/spec/proc/to_source_variables_spec.rb +1 -1
  54. data/spec/proc/to_source_w_specified_strip_enclosure_spec.rb +33 -0
  55. data/spec/proc/to_source_within_irb_spec.rb +1 -1
  56. data/spec/proc_scanner/block_comment_spec.rb +1 -1
  57. data/spec/proc_scanner/double_colons_spec.rb +1 -1
  58. data/spec/proc_scanner/double_quote_str_w_interpolation_spec.rb +9 -9
  59. data/spec/proc_scanner/double_quote_str_wo_interpolation_spec.rb +13 -13
  60. data/spec/proc_scanner/heredoc_spec.rb +1 -1
  61. data/spec/proc_scanner/kw_do_alias1_spec.rb +1 -1
  62. data/spec/proc_scanner/kw_do_alias2_spec.rb +1 -1
  63. data/spec/proc_scanner/per_line_comment_spec.rb +1 -1
  64. data/spec/proc_scanner/single_quote_str_spec.rb +1 -1
  65. data/spec/proc_scanner/slash_operator_spec.rb +75 -0
  66. data/spec/proc_scanner/spec_helper.rb +1 -1
  67. data/spec/spec_helper.rb +53 -45
  68. metadata +46 -16
  69. data/ext/sourcify/extconf.rb +0 -2
@@ -132,7 +132,8 @@ module Sourcify
132
132
  sqm . sqs20 | sqm . sqs21 | sqm . sqs22 | sqm . sqs23 | sqm . sqs24 |
133
133
  sqm . sqs25 | sqm . sqs26 | sqm . sqs27 | sqm . sqs28
134
134
  ) => {
135
- push(:sstring, ts, te)
135
+ push(:sstring, ts, te);
136
+ fgoto main;
136
137
  };
137
138
 
138
139
  ## == Double quote strings
@@ -441,16 +442,26 @@ module Sourcify
441
442
  fgoto heredoc;
442
443
  };
443
444
 
444
- ('"' | "'" | '`' | '/' | '%') => {
445
+ ('"' | "'" | '`' | '%') => {
445
446
  fhold; fgoto string;
446
447
  };
447
448
 
449
+ '/' => {
450
+ if preceded_with?(:char, :digit, :var, :const, :symbol, :dstring, :sstring, ')', ']', '}')
451
+ push(:op, ts, te)
452
+ else
453
+ fhold; fgoto string;
454
+ end
455
+ };
456
+
448
457
  ## == Misc
449
458
 
450
459
  var => { push(:var, ts, te) };
451
460
  const => { push(:const, ts, te) };
452
461
  symbol => { push(:symbol, ts, te) };
453
462
  mspaces => { push(:space, ts, te) };
463
+ [0-9] => { push(:digit, ts, te) };
464
+ lower => { push(:char, ts, te) };
454
465
  any => { push(:any, ts, te) };
455
466
 
456
467
  *|;
@@ -9,9 +9,11 @@ module Sourcify
9
9
 
10
10
  class Escape < Exception; end
11
11
 
12
- def process(data, stop_on_newline = false)
12
+ def process(data, opts={})
13
13
  begin
14
- @stop_on_newline = stop_on_newline
14
+ @start_pattern = opts[:start_pattern] || /.*/
15
+ @body_matcher = opts[:body_matcher] || lambda{|_| true }
16
+ @stop_on_newline = opts[:stop_on_newline]
15
17
  @results, @data = [], data.unpack("c*")
16
18
  reset_attributes
17
19
  execute!
@@ -69,15 +71,28 @@ module Sourcify
69
71
  @tokens << [:assoc, '=>']
70
72
  end
71
73
 
74
+ def preceded_with?(*args)
75
+ begin
76
+ prev_token = @tokens[-1][0] == :space ? @tokens[-2] : @tokens[-1]
77
+ !([args].flatten & prev_token).empty?
78
+ rescue
79
+ end
80
+ end
81
+
72
82
  def increment_lineno
73
83
  @lineno += 1
74
- raise Escape if @stop_on_newline || !@results.empty?
84
+ if @stop_on_newline || !@results.empty? || (@results.empty? && @rejecting_block)
85
+ raise Escape
86
+ end
75
87
  end
76
88
 
77
89
  def increment_counter(key, count = 1)
78
90
  return if other_counter(key).started?
79
- counter = this_counter(key)
80
- offset_attributes unless counter.started?
91
+ unless (counter = this_counter(key)).started?
92
+ return if (@rejecting_block = codified_tokens !~ @start_pattern)
93
+ @false_start_backup = @tokens.dup if key == :brace
94
+ offset_attributes
95
+ end
81
96
  counter.increment(count)
82
97
  end
83
98
 
@@ -88,7 +103,9 @@ module Sourcify
88
103
  end
89
104
 
90
105
  def fix_counter_false_start(key)
91
- reset_attributes if this_counter(key).just_started?
106
+ return unless this_counter(key).just_started?
107
+ reset_attributes
108
+ @tokens, @false_start_backup = @false_start_backup.dup, nil if @false_start_backup
92
109
  end
93
110
 
94
111
  def other_counter(type)
@@ -101,22 +118,29 @@ module Sourcify
101
118
 
102
119
  def construct_result_code
103
120
  begin
104
- code = 'proc ' + @tokens.map(&:last).join
121
+ code = 'proc ' + codified_tokens
105
122
  eval(code) # TODO: any better way to check for completeness of proc code ??
106
- @results << code
107
- raise Escape if @stop_on_newline or @lineno != 1
108
- reset_attributes
123
+ if @body_matcher.call(code)
124
+ @results << code
125
+ raise Escape if @stop_on_newline or @lineno != 1
126
+ reset_attributes
127
+ end
109
128
  rescue Exception
110
129
  raise if $!.is_a?(Escape)
111
130
  end
112
131
  end
113
132
 
133
+ def codified_tokens
134
+ @tokens.map(&:last).join
135
+ end
136
+
114
137
  def reset_attributes
115
138
  @tokens = []
116
139
  @lineno = 1
117
140
  @heredoc, @dstring, @comment = nil
118
141
  @do_end_counter = DoEndBlockCounter.new
119
142
  @brace_counter = BraceBlockCounter.new
143
+ @rejecting_block = false
120
144
  end
121
145
 
122
146
  def offset_attributes
@@ -5,14 +5,13 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{sourcify}
8
- s.version = "0.3.0"
8
+ s.version = "0.4.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["NgTzeYang"]
12
- s.date = %q{2010-09-24}
12
+ s.date = %q{2010-10-15}
13
13
  s.description = %q{}
14
14
  s.email = %q{ngty77@gmail.com}
15
- s.extensions = ["ext/sourcify/extconf.rb"]
16
15
  s.extra_rdoc_files = [
17
16
  "LICENSE",
18
17
  "README.rdoc"
@@ -20,6 +19,7 @@ Gem::Specification.new do |s|
20
19
  s.files = [
21
20
  ".document",
22
21
  ".gitignore",
22
+ ".infinity_test",
23
23
  "HISTORY.txt",
24
24
  "LICENSE",
25
25
  "README.rdoc",
@@ -27,6 +27,10 @@ Gem::Specification.new do |s|
27
27
  "VERSION",
28
28
  "lib/sourcify.rb",
29
29
  "lib/sourcify/proc.rb",
30
+ "lib/sourcify/proc/methods.rb",
31
+ "lib/sourcify/proc/methods/source_location.rb",
32
+ "lib/sourcify/proc/methods/to_sexp.rb",
33
+ "lib/sourcify/proc/methods/to_source.rb",
30
34
  "lib/sourcify/proc/parser.rb",
31
35
  "lib/sourcify/proc/scanner.rb",
32
36
  "lib/sourcify/proc/scanner.rl",
@@ -41,7 +45,10 @@ Gem::Specification.new do |s|
41
45
  "spec/proc/created_on_the_fly_proc_spec.rb",
42
46
  "spec/proc/others_spec.rb",
43
47
  "spec/proc/readme",
48
+ "spec/proc/spec_helper.rb",
49
+ "spec/proc/to_sexp_from_multi_blocks_w_specified_attached_to_spec.rb",
44
50
  "spec/proc/to_sexp_variables_spec.rb",
51
+ "spec/proc/to_sexp_w_specified_strip_enclosure_spec.rb",
45
52
  "spec/proc/to_sexp_within_irb_spec.rb",
46
53
  "spec/proc/to_source_from_braced_block_w_nested_braced_block_spec.rb",
47
54
  "spec/proc/to_source_from_braced_block_w_nested_hash_spec.rb",
@@ -61,10 +68,19 @@ Gem::Specification.new do |s|
61
68
  "spec/proc/to_source_from_do_end_block_wo_nesting_complication_spec.rb",
62
69
  "spec/proc/to_source_from_multi_blocks_w_many_matches_spec.rb",
63
70
  "spec/proc/to_source_from_multi_blocks_w_single_match_spec.rb",
71
+ "spec/proc/to_source_from_multi_blocks_w_specified_attached_to_and_many_matches_spec.rb",
72
+ "spec/proc/to_source_from_multi_blocks_w_specified_attached_to_and_no_match_spec.rb",
73
+ "spec/proc/to_source_from_multi_blocks_w_specified_attached_to_and_single_match_spec.rb",
74
+ "spec/proc/to_source_from_multi_blocks_w_specified_attached_to_spec.rb",
75
+ "spec/proc/to_source_from_multi_blocks_w_specified_body_matcher_and_many_matches_spec.rb",
76
+ "spec/proc/to_source_from_multi_blocks_w_specified_body_matcher_and_no_match_spec.rb",
77
+ "spec/proc/to_source_from_multi_blocks_w_specified_body_matcher_and_single_match_spec.rb",
78
+ "spec/proc/to_source_from_multi_blocks_w_specified_ignore_nested_spec.rb",
64
79
  "spec/proc/to_source_from_multi_do_end_blocks_w_single_match_spec.rb",
65
80
  "spec/proc/to_source_magic_file_var_spec.rb",
66
81
  "spec/proc/to_source_magic_line_var_spec.rb",
67
82
  "spec/proc/to_source_variables_spec.rb",
83
+ "spec/proc/to_source_w_specified_strip_enclosure_spec.rb",
68
84
  "spec/proc/to_source_within_irb_spec.rb",
69
85
  "spec/proc_scanner/block_comment_spec.rb",
70
86
  "spec/proc_scanner/double_colons_spec.rb",
@@ -75,6 +91,7 @@ Gem::Specification.new do |s|
75
91
  "spec/proc_scanner/kw_do_alias2_spec.rb",
76
92
  "spec/proc_scanner/per_line_comment_spec.rb",
77
93
  "spec/proc_scanner/single_quote_str_spec.rb",
94
+ "spec/proc_scanner/slash_operator_spec.rb",
78
95
  "spec/proc_scanner/spec_helper.rb",
79
96
  "spec/spec_helper.rb"
80
97
  ]
@@ -87,6 +104,7 @@ Gem::Specification.new do |s|
87
104
  s.test_files = [
88
105
  "spec/proc_scanner/kw_do_alias1_spec.rb",
89
106
  "spec/proc_scanner/single_quote_str_spec.rb",
107
+ "spec/proc_scanner/slash_operator_spec.rb",
90
108
  "spec/proc_scanner/kw_do_alias2_spec.rb",
91
109
  "spec/proc_scanner/double_colons_spec.rb",
92
110
  "spec/proc_scanner/block_comment_spec.rb",
@@ -96,6 +114,8 @@ Gem::Specification.new do |s|
96
114
  "spec/proc_scanner/spec_helper.rb",
97
115
  "spec/proc_scanner/double_quote_str_wo_interpolation_spec.rb",
98
116
  "spec/proc/to_source_from_do_end_block_w_nested_until_spec.rb",
117
+ "spec/proc/to_source_from_multi_blocks_w_specified_body_matcher_and_single_match_spec.rb",
118
+ "spec/proc/to_source_from_multi_blocks_w_specified_attached_to_and_no_match_spec.rb",
99
119
  "spec/proc/to_source_from_do_end_block_w_nested_begin_spec.rb",
100
120
  "spec/proc/to_source_from_braced_block_w_nested_hash_spec.rb",
101
121
  "spec/proc/created_on_the_fly_proc_spec.rb",
@@ -107,18 +127,28 @@ Gem::Specification.new do |s|
107
127
  "spec/proc/to_sexp_within_irb_spec.rb",
108
128
  "spec/proc/to_source_from_do_end_block_w_nested_module_spec.rb",
109
129
  "spec/proc/to_source_from_do_end_block_w_nested_do_end_block_spec.rb",
130
+ "spec/proc/to_source_from_multi_blocks_w_specified_attached_to_spec.rb",
110
131
  "spec/proc/to_source_from_do_end_block_w_nested_method_spec.rb",
111
132
  "spec/proc/to_source_from_do_end_block_w_nested_class_spec.rb",
112
133
  "spec/proc/to_source_within_irb_spec.rb",
113
134
  "spec/proc/to_source_from_do_end_block_w_nested_case_spec.rb",
114
135
  "spec/proc/to_source_magic_line_var_spec.rb",
136
+ "spec/proc/to_sexp_w_specified_strip_enclosure_spec.rb",
137
+ "spec/proc/to_source_from_multi_blocks_w_specified_body_matcher_and_many_matches_spec.rb",
115
138
  "spec/proc/to_source_from_do_end_block_w_nested_literal_keyword_spec.rb",
116
139
  "spec/proc/to_source_from_do_end_block_w_nested_unless_spec.rb",
140
+ "spec/proc/to_source_from_multi_blocks_w_specified_body_matcher_and_no_match_spec.rb",
117
141
  "spec/proc/others_spec.rb",
118
142
  "spec/proc/19x_extras.rb",
143
+ "spec/proc/to_source_from_multi_blocks_w_specified_attached_to_and_many_matches_spec.rb",
119
144
  "spec/proc/to_source_from_braced_block_w_nested_braced_block_spec.rb",
120
145
  "spec/proc/to_source_from_do_end_block_wo_nesting_complication_spec.rb",
121
146
  "spec/proc/to_source_variables_spec.rb",
147
+ "spec/proc/to_source_w_specified_strip_enclosure_spec.rb",
148
+ "spec/proc/to_source_from_multi_blocks_w_specified_attached_to_and_single_match_spec.rb",
149
+ "spec/proc/to_sexp_from_multi_blocks_w_specified_attached_to_spec.rb",
150
+ "spec/proc/to_source_from_multi_blocks_w_specified_ignore_nested_spec.rb",
151
+ "spec/proc/spec_helper.rb",
122
152
  "spec/proc/to_sexp_variables_spec.rb",
123
153
  "spec/proc/to_source_magic_file_var_spec.rb",
124
154
  "spec/proc/to_source_from_do_end_block_w_nested_if_spec.rb",
@@ -133,17 +163,17 @@ Gem::Specification.new do |s|
133
163
 
134
164
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
135
165
  s.add_runtime_dependency(%q<ruby2ruby>, [">= 1.2.5"])
166
+ s.add_runtime_dependency(%q<sexp_processor>, [">= 3.0.5"])
136
167
  s.add_development_dependency(%q<bacon>, [">= 0"])
137
- s.add_development_dependency(%q<otaku>, [">= 0.4.0"])
138
168
  else
139
169
  s.add_dependency(%q<ruby2ruby>, [">= 1.2.5"])
170
+ s.add_dependency(%q<sexp_processor>, [">= 3.0.5"])
140
171
  s.add_dependency(%q<bacon>, [">= 0"])
141
- s.add_dependency(%q<otaku>, [">= 0.4.0"])
142
172
  end
143
173
  else
144
174
  s.add_dependency(%q<ruby2ruby>, [">= 1.2.5"])
175
+ s.add_dependency(%q<sexp_processor>, [">= 3.0.5"])
145
176
  s.add_dependency(%q<bacon>, [">= 0"])
146
- s.add_dependency(%q<otaku>, [">= 0.4.0"])
147
177
  end
148
178
  end
149
179
 
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', 'spec_helper')
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
2
 
3
3
  describe "Created on the fly proc" do
4
4
  unless has_parsetree?
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', 'spec_helper')
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
2
 
3
3
  describe "Misc" do
4
4
 
@@ -12,6 +12,10 @@ describe "Misc" do
12
12
  s_proc.should.be having_source('proc { :test }')
13
13
  end
14
14
 
15
+ should "handle proc with '/' char" do
16
+ (lambda { @x1/2 }).should.be having_source('proc { @x1/2 }')
17
+ end
18
+
15
19
  should "handle lexer bug in missing trailing chars after '=>' operator" do
16
20
  # This example addresses bug @ http://redmine.ruby-lang.org/issues/show/3765
17
21
  {
@@ -26,7 +30,7 @@ describe "Misc" do
26
30
  }.values.last.should.be having_source('proc { :test }')
27
31
  end
28
32
 
29
- unless Object.const_defined?(:ParseTree)
33
+ unless has_parsetree?
30
34
  should "raise Sourcify::CannotParseEvalCodeError when proc is created from eval" do
31
35
  lambda { eval("proc {:test }").to_source }.should.
32
36
  raise(Sourcify::CannotParseEvalCodeError)
@@ -0,0 +1 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), '..', 'spec_helper')
@@ -0,0 +1,46 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe 'Proc#to_sexp w specified {:attached_to => ...}' do
4
+
5
+ # NOTE: We just want enough specs to show that handling of :attached_to
6
+ # works for Proc#to_sexp as well.
7
+
8
+ options = {:attached_to => /^.*?(\W|)watever(\W)/}
9
+
10
+ should 'handle no nesting on same line' do
11
+ b1 = lambda {|a| @x1+1 }; b2 = watever { @x1+2 }; b3 = lambda { @x1+3 }
12
+ b2.should.be having_sexp(
13
+ s(:iter,
14
+ s(:call, nil, :proc, s(:arglist)),
15
+ nil,
16
+ s(:call, s(:ivar, :@x1), :+, s(:arglist, s(:lit, 2)))),
17
+ options
18
+ )
19
+ end
20
+
21
+ should 'handle single level nesting on same line' do
22
+ b1 = lambda {|a| @x2+1 }; b2 = watever { lambda { @x2+2 } }
23
+ b2.should.be having_sexp(
24
+ s(:iter,
25
+ s(:call, nil, :proc, s(:arglist)),
26
+ nil,
27
+ s(:iter,
28
+ s(:call, nil, :lambda, s(:arglist)),
29
+ nil,
30
+ s(:call, s(:ivar, :@x2), :+, s(:arglist, s(:lit, 2))))),
31
+ options
32
+ )
33
+ end
34
+
35
+ should 'handle multi level nesting on same line' do
36
+ b2 = (lambda {|a| watever { lambda { @x3 } } }).call(1)
37
+ b2.should.be having_sexp(
38
+ s(:iter,
39
+ s(:call, nil, :proc, s(:arglist)),
40
+ nil,
41
+ s(:iter, s(:call, nil, :lambda, s(:arglist)), nil, s(:ivar, :@x3))),
42
+ options
43
+ )
44
+ end
45
+
46
+ end
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', 'spec_helper')
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
2
 
3
3
  describe "Proc#to_sexp (variables)" do
4
4
 
@@ -0,0 +1,60 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe 'Proc#to_sexp w specified {:strip_enclosure => ...}' do
4
+
5
+ describe '>> w true' do
6
+
7
+ options = {:strip_enclosure => true}
8
+
9
+ should 'strip enclosing proc wo arg' do
10
+ lambda { a+b }.should.be having_sexp(
11
+ s(:call,
12
+ s(:call, nil, :a, s(:arglist)),
13
+ :+,
14
+ s(:arglist, s(:call, nil, :b, s(:arglist)))),
15
+ options
16
+ )
17
+ end
18
+
19
+ should 'strip enclosing proc w arg' do
20
+ lambda {|a| a+b }.should.be having_sexp(
21
+ s(:call,
22
+ s(:lvar, :a),
23
+ :+,
24
+ s(:arglist, s(:call, nil, :b, s(:arglist)))),
25
+ options
26
+ )
27
+ end
28
+
29
+ end
30
+
31
+ describe '>> w false' do
32
+
33
+ options = {:strip_enclosure => false}
34
+
35
+ should 'not strip enclosing proc wo arg' do
36
+ lambda { a+b }.should.be having_sexp(
37
+ s(:iter,
38
+ s(:call, nil, :proc, s(:arglist)),
39
+ nil,
40
+ s(:call,
41
+ s(:call, nil, :a, s(:arglist)),
42
+ :+,
43
+ s(:arglist, s(:call, nil, :b, s(:arglist))))),
44
+ options
45
+ )
46
+ end
47
+
48
+ should 'not strip enclosing proc w arg' do
49
+ lambda {|a| a+b }.should.be having_sexp(
50
+ s(:iter,
51
+ s(:call, nil, :proc, s(:arglist)),
52
+ s(:lasgn, :a),
53
+ s(:call, s(:lvar, :a), :+, s(:arglist, s(:call, nil, :b, s(:arglist))))),
54
+ options
55
+ )
56
+ end
57
+
58
+ end
59
+
60
+ end
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', 'spec_helper')
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
2
 
3
3
  describe "Proc#to_sexp within IRB" do
4
4
 
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', 'spec_helper')
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
2
 
3
3
  describe "Proc#to_source from { ... } block (w nested { ... } block)" do
4
4
 
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', 'spec_helper')
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
2
 
3
3
  describe "Proc#to_source from { ... } block (w nested hash)" do
4
4
 
@@ -27,7 +27,7 @@ describe "Proc#to_source from { ... } block (w nested hash)" do
27
27
  end
28
28
 
29
29
  if RUBY_VERSION.include?('1.9.')
30
- require File.join(File.dirname(__FILE__), '19x_extras')
30
+ require File.join(File.expand_path(File.dirname(__FILE__)), '19x_extras')
31
31
  behaves_like 'Proc#to_source from { ... } block (1.9.*)'
32
32
  end
33
33
 
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '..', 'spec_helper')
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
2
 
3
3
  describe "Proc#to_source from { ... } block (wo nesting complication)" do
4
4