ikra 0.0.1

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 (220) hide show
  1. checksums.yaml +7 -0
  2. data/lib/ast/builder.rb +100 -0
  3. data/lib/ast/lexical_variables_enumerator.rb +34 -0
  4. data/lib/ast/method_definition.rb +37 -0
  5. data/lib/ast/nodes.rb +208 -0
  6. data/lib/ast/printer.rb +99 -0
  7. data/lib/ast/translator.rb +264 -0
  8. data/lib/ast/visitor.rb +173 -0
  9. data/lib/config/configuration.rb +18 -0
  10. data/lib/config/os_configuration.rb +56 -0
  11. data/lib/entity.rb +11 -0
  12. data/lib/ikra.rb +7 -0
  13. data/lib/parsing.rb +32 -0
  14. data/lib/resources/cuda/block_function_head.cpp +1 -0
  15. data/lib/resources/cuda/env_builder_copy_array.cpp +4 -0
  16. data/lib/resources/cuda/header.cpp +46 -0
  17. data/lib/resources/cuda/kernel.cpp +8 -0
  18. data/lib/resources/cuda/kernel_launcher.cpp +28 -0
  19. data/lib/resources/cuda/soa_header.cpp +4 -0
  20. data/lib/scope.rb +166 -0
  21. data/lib/sourcify/Gemfile +10 -0
  22. data/lib/sourcify/HISTORY.txt +88 -0
  23. data/lib/sourcify/LICENSE +20 -0
  24. data/lib/sourcify/README.rdoc +352 -0
  25. data/lib/sourcify/Rakefile +111 -0
  26. data/lib/sourcify/lib/sourcify.rb +44 -0
  27. data/lib/sourcify/lib/sourcify/common/parser/converter.rb +29 -0
  28. data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/comment.rb +23 -0
  29. data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/counter.rb +43 -0
  30. data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/dstring.rb +58 -0
  31. data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/extensions.rb +140 -0
  32. data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/heredoc.rb +26 -0
  33. data/lib/sourcify/lib/sourcify/common/parser/source_code.rb +45 -0
  34. data/lib/sourcify/lib/sourcify/common/ragel/common.rl +5 -0
  35. data/lib/sourcify/lib/sourcify/common/ragel/expressions.rl +38 -0
  36. data/lib/sourcify/lib/sourcify/common/ragel/machines.rl +317 -0
  37. data/lib/sourcify/lib/sourcify/errors.rb +4 -0
  38. data/lib/sourcify/lib/sourcify/method.rb +138 -0
  39. data/lib/sourcify/lib/sourcify/method/methods.rb +3 -0
  40. data/lib/sourcify/lib/sourcify/method/methods/to_raw_source.rb +30 -0
  41. data/lib/sourcify/lib/sourcify/method/methods/to_sexp.rb +30 -0
  42. data/lib/sourcify/lib/sourcify/method/methods/to_source.rb +30 -0
  43. data/lib/sourcify/lib/sourcify/method/parser.rb +110 -0
  44. data/lib/sourcify/lib/sourcify/method/parser/converter.rb +8 -0
  45. data/lib/sourcify/lib/sourcify/method/parser/raw_scanner.rb +2494 -0
  46. data/lib/sourcify/lib/sourcify/method/parser/raw_scanner.rl +144 -0
  47. data/lib/sourcify/lib/sourcify/method/parser/raw_scanner_extensions.rb +68 -0
  48. data/lib/sourcify/lib/sourcify/method/parser/scanner.rb +52 -0
  49. data/lib/sourcify/lib/sourcify/method/parser/source_code.rb +8 -0
  50. data/lib/sourcify/lib/sourcify/patches.rb +63 -0
  51. data/lib/sourcify/lib/sourcify/proc.rb +183 -0
  52. data/lib/sourcify/lib/sourcify/proc/methods.rb +3 -0
  53. data/lib/sourcify/lib/sourcify/proc/methods/source_location.rb +61 -0
  54. data/lib/sourcify/lib/sourcify/proc/methods/to_raw_source.rb +20 -0
  55. data/lib/sourcify/lib/sourcify/proc/methods/to_sexp.rb +40 -0
  56. data/lib/sourcify/lib/sourcify/proc/methods/to_source.rb +48 -0
  57. data/lib/sourcify/lib/sourcify/proc/parser.rb +51 -0
  58. data/lib/sourcify/lib/sourcify/proc/parser/converter.rb +8 -0
  59. data/lib/sourcify/lib/sourcify/proc/parser/normalizer.rb +43 -0
  60. data/lib/sourcify/lib/sourcify/proc/parser/raw_scanner.rb +2498 -0
  61. data/lib/sourcify/lib/sourcify/proc/parser/raw_scanner.rl +149 -0
  62. data/lib/sourcify/lib/sourcify/proc/parser/raw_scanner_extensions.rb +74 -0
  63. data/lib/sourcify/lib/sourcify/proc/parser/scanner.rb +49 -0
  64. data/lib/sourcify/lib/sourcify/proc/parser/source_code.rb +8 -0
  65. data/lib/sourcify/lib/sourcify/version.rb +3 -0
  66. data/lib/sourcify/sourcify.gemspec +31 -0
  67. data/lib/sourcify/spec/dump_object_space_procs.rb +84 -0
  68. data/lib/sourcify/spec/method/encoding_from_def_end_block_spec.rb +33 -0
  69. data/lib/sourcify/spec/method/encoding_from_define_method_spec.rb +37 -0
  70. data/lib/sourcify/spec/method/others_from_def_end_block_spec.rb +49 -0
  71. data/lib/sourcify/spec/method/others_from_define_method_spec.rb +63 -0
  72. data/lib/sourcify/spec/method/raw_scanner/block_comment_spec.rb +8 -0
  73. data/lib/sourcify/spec/method/raw_scanner/double_colons_spec.rb +8 -0
  74. data/lib/sourcify/spec/method/raw_scanner/double_quote_str_w_interpolation_spec.rb +8 -0
  75. data/lib/sourcify/spec/method/raw_scanner/double_quote_str_wo_interpolation_spec.rb +8 -0
  76. data/lib/sourcify/spec/method/raw_scanner/heredoc_w_indent_spec.rb +8 -0
  77. data/lib/sourcify/spec/method/raw_scanner/heredoc_wo_indent_spec.rb +8 -0
  78. data/lib/sourcify/spec/method/raw_scanner/kw_block_start_alias1_spec.rb +20 -0
  79. data/lib/sourcify/spec/method/raw_scanner/kw_block_start_alias2_spec.rb +20 -0
  80. data/lib/sourcify/spec/method/raw_scanner/per_line_comment_spec.rb +8 -0
  81. data/lib/sourcify/spec/method/raw_scanner/single_quote_str_spec.rb +8 -0
  82. data/lib/sourcify/spec/method/raw_scanner/slash_operator_spec.rb +8 -0
  83. data/lib/sourcify/spec/method/raw_scanner/spec_helper.rb +80 -0
  84. data/lib/sourcify/spec/method/spec_helper.rb +1 -0
  85. data/lib/sourcify/spec/method/to_raw_source_spec.rb +31 -0
  86. data/lib/sourcify/spec/method/to_raw_source_w_specified_strip_enclosure_spec.rb +148 -0
  87. data/lib/sourcify/spec/method/to_sexp_from_def_end_block_w_variables_spec.rb +46 -0
  88. data/lib/sourcify/spec/method/to_sexp_from_def_end_block_within_irb_spec.rb +38 -0
  89. data/lib/sourcify/spec/method/to_sexp_from_def_end_block_within_pry_spec.rb +38 -0
  90. data/lib/sourcify/spec/method/to_sexp_from_define_method_w_multi_blocks_and_specified_attached_to_spec.rb +56 -0
  91. data/lib/sourcify/spec/method/to_sexp_from_define_method_w_variables_spec.rb +52 -0
  92. data/lib/sourcify/spec/method/to_sexp_from_define_method_within_irb_spec.rb +42 -0
  93. data/lib/sourcify/spec/method/to_sexp_from_define_method_within_pry_spec.rb +42 -0
  94. data/lib/sourcify/spec/method/to_sexp_w_specified_strip_enclosure_spec.rb +74 -0
  95. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_19_extras_spec.rb +23 -0
  96. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_begin_spec.rb +35 -0
  97. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_case_spec.rb +35 -0
  98. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_class_spec.rb +51 -0
  99. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_do_end_block_spec.rb +33 -0
  100. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_for_spec.rb +126 -0
  101. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_if_spec.rb +83 -0
  102. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_literal_keyword_spec.rb +141 -0
  103. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_method_spec.rb +33 -0
  104. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_module_spec.rb +59 -0
  105. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_unless_spec.rb +83 -0
  106. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_until_spec.rb +179 -0
  107. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_while_spec.rb +179 -0
  108. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_singleton_method_spec.rb +19 -0
  109. data/lib/sourcify/spec/method/to_source_from_def_end_block_within_irb_spec.rb +30 -0
  110. data/lib/sourcify/spec/method/to_source_from_def_end_block_within_pry_spec.rb +45 -0
  111. data/lib/sourcify/spec/method/to_source_from_def_end_w_multi_blocks_and_many_matches_spec.rb +30 -0
  112. data/lib/sourcify/spec/method/to_source_from_def_end_w_multi_blocks_and_single_match_spec.rb +36 -0
  113. data/lib/sourcify/spec/method/to_source_from_define_method_w_braced_block_spec.rb +113 -0
  114. data/lib/sourcify/spec/method/to_source_from_define_method_w_do_end_block_spec.rb +145 -0
  115. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_many_matches_spec.rb +56 -0
  116. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_single_match_spec.rb +73 -0
  117. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_and_many_matches_spec.rb +36 -0
  118. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_and_no_match_spec.rb +36 -0
  119. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_and_single_match_spec.rb +28 -0
  120. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_spec.rb +103 -0
  121. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_body_matcher_and_many_matches_spec.rb +36 -0
  122. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_body_matcher_and_no_match_spec.rb +36 -0
  123. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_body_matcher_and_single_match_spec.rb +28 -0
  124. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_ignore_nested_spec.rb +36 -0
  125. data/lib/sourcify/spec/method/to_source_from_define_method_within_irb_spec.rb +32 -0
  126. data/lib/sourcify/spec/method/to_source_from_define_method_within_pry_spec.rb +49 -0
  127. data/lib/sourcify/spec/method/to_source_magic_file_var_spec.rb +176 -0
  128. data/lib/sourcify/spec/method/to_source_magic_line_var_spec.rb +298 -0
  129. data/lib/sourcify/spec/method/to_source_w_specified_strip_enclosure_spec.rb +39 -0
  130. data/lib/sourcify/spec/no_method/unsupported_platform_spec.rb +26 -0
  131. data/lib/sourcify/spec/proc/19x_extras.rb +27 -0
  132. data/lib/sourcify/spec/proc/created_on_the_fly_proc_spec.rb +80 -0
  133. data/lib/sourcify/spec/proc/encoding_spec.rb +36 -0
  134. data/lib/sourcify/spec/proc/others_spec.rb +40 -0
  135. data/lib/sourcify/spec/proc/raw_scanner/block_comment_spec.rb +8 -0
  136. data/lib/sourcify/spec/proc/raw_scanner/double_colons_spec.rb +8 -0
  137. data/lib/sourcify/spec/proc/raw_scanner/double_quote_str_w_interpolation_spec.rb +8 -0
  138. data/lib/sourcify/spec/proc/raw_scanner/double_quote_str_wo_interpolation_spec.rb +8 -0
  139. data/lib/sourcify/spec/proc/raw_scanner/heredoc_w_indent_spec.rb +8 -0
  140. data/lib/sourcify/spec/proc/raw_scanner/heredoc_wo_indent_spec.rb +8 -0
  141. data/lib/sourcify/spec/proc/raw_scanner/kw_block_start_alias1_spec.rb +20 -0
  142. data/lib/sourcify/spec/proc/raw_scanner/kw_block_start_alias2_spec.rb +20 -0
  143. data/lib/sourcify/spec/proc/raw_scanner/per_line_comment_spec.rb +8 -0
  144. data/lib/sourcify/spec/proc/raw_scanner/single_quote_str_spec.rb +8 -0
  145. data/lib/sourcify/spec/proc/raw_scanner/slash_operator_spec.rb +8 -0
  146. data/lib/sourcify/spec/proc/raw_scanner/spec_helper.rb +63 -0
  147. data/lib/sourcify/spec/proc/readme +5 -0
  148. data/lib/sourcify/spec/proc/spec_helper.rb +1 -0
  149. data/lib/sourcify/spec/proc/to_raw_source_spec.rb +33 -0
  150. data/lib/sourcify/spec/proc/to_raw_source_w_specified_strip_enclosure_spec.rb +69 -0
  151. data/lib/sourcify/spec/proc/to_sexp_from_multi_blocks_w_specified_attached_to_spec.rb +46 -0
  152. data/lib/sourcify/spec/proc/to_sexp_variables_spec.rb +146 -0
  153. data/lib/sourcify/spec/proc/to_sexp_w_specified_strip_enclosure_spec.rb +60 -0
  154. data/lib/sourcify/spec/proc/to_sexp_within_irb_spec.rb +146 -0
  155. data/lib/sourcify/spec/proc/to_sexp_within_pry_spec.rb +149 -0
  156. data/lib/sourcify/spec/proc/to_source_from_braced_block_w_nested_braced_block_spec.rb +33 -0
  157. data/lib/sourcify/spec/proc/to_source_from_braced_block_w_nested_hash_spec.rb +82 -0
  158. data/lib/sourcify/spec/proc/to_source_from_braced_block_wo_nesting_complication_spec.rb +46 -0
  159. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_begin_spec.rb +35 -0
  160. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_case_spec.rb +35 -0
  161. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_class_spec.rb +89 -0
  162. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_do_end_block_spec.rb +33 -0
  163. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_for_spec.rb +132 -0
  164. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_if_spec.rb +87 -0
  165. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_literal_keyword_spec.rb +103 -0
  166. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_method_spec.rb +33 -0
  167. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_module_spec.rb +49 -0
  168. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_unless_spec.rb +87 -0
  169. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_until_spec.rb +189 -0
  170. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_while_spec.rb +189 -0
  171. data/lib/sourcify/spec/proc/to_source_from_do_end_block_wo_nesting_complication_spec.rb +46 -0
  172. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_many_matches_spec.rb +43 -0
  173. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_single_match_spec.rb +20 -0
  174. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_attached_to_and_many_matches_spec.rb +45 -0
  175. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_attached_to_and_no_match_spec.rb +45 -0
  176. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_attached_to_and_single_match_spec.rb +22 -0
  177. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_attached_to_spec.rb +84 -0
  178. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_body_matcher_and_many_matches_spec.rb +45 -0
  179. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_body_matcher_and_no_match_spec.rb +45 -0
  180. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_body_matcher_and_single_match_spec.rb +22 -0
  181. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_ignore_nested_spec.rb +43 -0
  182. data/lib/sourcify/spec/proc/to_source_from_multi_do_end_blocks_w_single_match_spec.rb +31 -0
  183. data/lib/sourcify/spec/proc/to_source_magic_file_var_spec.rb +127 -0
  184. data/lib/sourcify/spec/proc/to_source_magic_line_var_spec.rb +127 -0
  185. data/lib/sourcify/spec/proc/to_source_variables_spec.rb +29 -0
  186. data/lib/sourcify/spec/proc/to_source_w_specified_strip_enclosure_spec.rb +33 -0
  187. data/lib/sourcify/spec/proc/to_source_within_irb_spec.rb +38 -0
  188. data/lib/sourcify/spec/proc/to_source_within_pry_spec.rb +61 -0
  189. data/lib/sourcify/spec/raw_scanner/block_comment_shared_spec.rb +57 -0
  190. data/lib/sourcify/spec/raw_scanner/double_colons_shared_spec.rb +11 -0
  191. data/lib/sourcify/spec/raw_scanner/double_quote_str_w_interpolation_shared_spec.rb +60 -0
  192. data/lib/sourcify/spec/raw_scanner/double_quote_str_wo_interpolation_shared_spec.rb +86 -0
  193. data/lib/sourcify/spec/raw_scanner/heredoc_w_indent_shared_spec.rb +69 -0
  194. data/lib/sourcify/spec/raw_scanner/heredoc_wo_indent_shared_spec.rb +70 -0
  195. data/lib/sourcify/spec/raw_scanner/kw_block_start_alias1_shared_spec.rb +73 -0
  196. data/lib/sourcify/spec/raw_scanner/kw_block_start_alias2_shared_spec.rb +73 -0
  197. data/lib/sourcify/spec/raw_scanner/per_line_comment_shared_spec.rb +32 -0
  198. data/lib/sourcify/spec/raw_scanner/shared_specs.rb +3 -0
  199. data/lib/sourcify/spec/raw_scanner/single_quote_str_shared_spec.rb +79 -0
  200. data/lib/sourcify/spec/raw_scanner/slash_operator_shared_spec.rb +71 -0
  201. data/lib/sourcify/spec/run_build.sh +25 -0
  202. data/lib/sourcify/spec/spec_helper.rb +130 -0
  203. data/lib/symbolic/symbolic.rb +248 -0
  204. data/lib/symbolic/visitor.rb +51 -0
  205. data/lib/translator/block_translator.rb +123 -0
  206. data/lib/translator/command_translator.rb +421 -0
  207. data/lib/translator/last_returns_visitor.rb +57 -0
  208. data/lib/translator/local_variables_enumerator.rb +35 -0
  209. data/lib/translator/method_translator.rb +24 -0
  210. data/lib/translator/translator.rb +49 -0
  211. data/lib/type_aware_array.rb +71 -0
  212. data/lib/types/array_type.rb +51 -0
  213. data/lib/types/class_type.rb +128 -0
  214. data/lib/types/object_tracer.rb +162 -0
  215. data/lib/types/primitive_type.rb +73 -0
  216. data/lib/types/ruby_extension.rb +67 -0
  217. data/lib/types/ruby_type.rb +45 -0
  218. data/lib/types/type_inference.rb +382 -0
  219. data/lib/types/union_type.rb +155 -0
  220. metadata +321 -0
@@ -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
@@ -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
@@ -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
@@ -0,0 +1,32 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe 'Method#to_source (from define_method)' do
4
+ describe 'within IRB' do
5
+
6
+ class << self
7
+
8
+ def irb_eval(string)
9
+ irb_exec(string)[-1]
10
+ end
11
+
12
+ def equal_to(expected)
13
+ lambda {|found| normalize_code(found) == normalize_code(expected) }
14
+ end
15
+
16
+ end
17
+
18
+ should 'handle' do
19
+ irb_eval(%\
20
+ thing = Object.new
21
+ blk = lambda { x }
22
+ thing.class.send(:define_method, :m1, &blk)
23
+ thing.method(:m1).to_source
24
+ \).should.be equal_to(%(
25
+ def m1
26
+ x
27
+ end
28
+ ))
29
+ end
30
+
31
+ end
32
+ end