farleyknight-ionize 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (98) hide show
  1. data/README.rdoc +59 -0
  2. data/Rakefile +5 -0
  3. data/bin/ionize +47 -0
  4. data/lib/ionize.rb +75 -0
  5. data/lib/ionize/environment.rb +56 -0
  6. data/lib/ionize/environment/application.rb +58 -0
  7. data/lib/ionize/environment/php_array.rb +95 -0
  8. data/lib/ionize/parser.rb +272 -0
  9. data/lib/ionize/tokenizer.rb +544 -0
  10. data/lib/ionize/translate.rb +34 -0
  11. data/lib/ionize/translate/composite_string_statements.rb +79 -0
  12. data/lib/ionize/translate/debug.rb +16 -0
  13. data/lib/ionize/translate/ext.rb +47 -0
  14. data/lib/ionize/translate/function_args.rb +132 -0
  15. data/lib/ionize/translate/if_statements.rb +42 -0
  16. data/lib/ionize/translate/multiple_statements.rb +22 -0
  17. data/lib/ionize/translate/php_to_ruby.rb +40 -0
  18. data/lib/ionize/translate/rails_for_php.rb +191 -0
  19. data/lib/ionize/translate/rewritable.rb +133 -0
  20. data/lib/ionize/translate/rewrites.rb +51 -0
  21. data/lib/ionize/translate/statements.rb +622 -0
  22. data/lib/ionize/translate/switch_case_statements.rb +52 -0
  23. data/lib/ionize/translate/term_statements.rb +76 -0
  24. data/lib/ionize/translate/translator.rb +52 -0
  25. data/lib/ionize/version.rb +9 -0
  26. data/spec/fixtures/array_lookup.php +10 -0
  27. data/spec/fixtures/boolean_operators.php +5 -0
  28. data/spec/fixtures/boolean_operators.rb +6 -0
  29. data/spec/fixtures/class_def.php +34 -0
  30. data/spec/fixtures/class_def.rb +34 -0
  31. data/spec/fixtures/dangling_else.php +8 -0
  32. data/spec/fixtures/dangling_else.rb +12 -0
  33. data/spec/fixtures/drupal_1.php +663 -0
  34. data/spec/fixtures/drupal_2.php +1152 -0
  35. data/spec/fixtures/empty_string.php +12 -0
  36. data/spec/fixtures/for_loop.php +17 -0
  37. data/spec/fixtures/for_loop2.php +13 -0
  38. data/spec/fixtures/for_loop3.php +16 -0
  39. data/spec/fixtures/for_loop3.rb +17 -0
  40. data/spec/fixtures/for_loop4.php +5 -0
  41. data/spec/fixtures/for_loop4.rb +6 -0
  42. data/spec/fixtures/foreach.php +9 -0
  43. data/spec/fixtures/foreach2.php +8 -0
  44. data/spec/fixtures/foreach3.php +7 -0
  45. data/spec/fixtures/foreach3.rb +7 -0
  46. data/spec/fixtures/fun_def.php +9 -0
  47. data/spec/fixtures/fun_def2.php +30 -0
  48. data/spec/fixtures/fun_def2.rb +30 -0
  49. data/spec/fixtures/fun_def3.php +33 -0
  50. data/spec/fixtures/fun_def4.php +43 -0
  51. data/spec/fixtures/fun_def4.rb +37 -0
  52. data/spec/fixtures/fun_def5.php +36 -0
  53. data/spec/fixtures/fun_with_if.php +6 -0
  54. data/spec/fixtures/fun_with_if.rb +6 -0
  55. data/spec/fixtures/fun_with_ifs.php +12 -0
  56. data/spec/fixtures/fun_with_ifs.rb +14 -0
  57. data/spec/fixtures/hello_world.php +6 -0
  58. data/spec/fixtures/heredoc.php +6 -0
  59. data/spec/fixtures/heredoc.rb +5 -0
  60. data/spec/fixtures/if.php +6 -0
  61. data/spec/fixtures/if.rb +7 -0
  62. data/spec/fixtures/if_boolean.php +5 -0
  63. data/spec/fixtures/if_boolean.rb +5 -0
  64. data/spec/fixtures/if_else.php +11 -0
  65. data/spec/fixtures/if_else1.php +17 -0
  66. data/spec/fixtures/if_else2.php +8 -0
  67. data/spec/fixtures/if_else3.php +15 -0
  68. data/spec/fixtures/if_else_nested.php +14 -0
  69. data/spec/fixtures/if_else_nested.rb +15 -0
  70. data/spec/fixtures/if_else_series.php +12 -0
  71. data/spec/fixtures/if_else_series.rb +12 -0
  72. data/spec/fixtures/if_not.php +5 -0
  73. data/spec/fixtures/if_not.rb +5 -0
  74. data/spec/fixtures/if_with_brackets.php +7 -0
  75. data/spec/fixtures/if_with_brackets.rb +7 -0
  76. data/spec/fixtures/long_if_else.php +10 -0
  77. data/spec/fixtures/long_if_else.rb +9 -0
  78. data/spec/fixtures/oo.php +16 -0
  79. data/spec/fixtures/php_nuke/sql_layer.php +527 -0
  80. data/spec/fixtures/postop.php +3 -0
  81. data/spec/fixtures/preop.php +7 -0
  82. data/spec/fixtures/simple_fun_def.php +4 -0
  83. data/spec/fixtures/switch_case.php +13 -0
  84. data/spec/fixtures/switch_case.rb +14 -0
  85. data/spec/fixtures/switch_case2.php +25 -0
  86. data/spec/fixtures/switch_case3.php +40 -0
  87. data/spec/fixtures/switch_case3.rb +42 -0
  88. data/spec/fixtures/switch_case4.php +56 -0
  89. data/spec/fixtures/switch_case5.php +71 -0
  90. data/spec/fixtures/switch_case_with_rescue_nil.php +43 -0
  91. data/spec/fixtures/switch_case_with_rescue_nil.rb +35 -0
  92. data/spec/fixtures/tertiary.php +3 -0
  93. data/spec/helper.rb +17 -0
  94. data/spec/php_environment_spec.rb +83 -0
  95. data/spec/php_parser_spec.rb +121 -0
  96. data/spec/php_translator_spec.rb +358 -0
  97. data/spec/rails_for_php_spec.rb +303 -0
  98. metadata +191 -0
@@ -0,0 +1,3 @@
1
+
2
+
3
+ $i++;
@@ -0,0 +1,7 @@
1
+
2
+
3
+ // ! is the boolean preop
4
+ // ++ and -- are the numeric preops
5
+
6
+ !empty($_GET['locale']);
7
+
@@ -0,0 +1,4 @@
1
+
2
+ function db_add_column(&$ret, $table, $column, $type, $attributes = array()) {
3
+ print "something";
4
+ }
@@ -0,0 +1,13 @@
1
+
2
+ $something = "none";
3
+ switch($something) {
4
+ case "one":
5
+ return "one";
6
+ break;
7
+ case "two":
8
+ return "two";
9
+ break;
10
+ default:
11
+ return "none";
12
+ break;
13
+ }
@@ -0,0 +1,14 @@
1
+
2
+
3
+ something = "none"
4
+ case something
5
+ when "one"
6
+ return "one"
7
+ break
8
+ when "two"
9
+ return "two"
10
+ break
11
+ else
12
+ return "none"
13
+ break
14
+ end
@@ -0,0 +1,25 @@
1
+
2
+ switch ($op) {
3
+ // update.php ops
4
+ case 'info':
5
+ $output = update_info_page();
6
+ break;
7
+
8
+ case 'selection':
9
+ $output = update_selection_page();
10
+ break;
11
+
12
+ case 'Update':
13
+ update_batch();
14
+ break;
15
+
16
+ case 'results':
17
+ $output = update_results_page();
18
+ break;
19
+
20
+ // Regular batch ops : defer to batch processing API
21
+ default:
22
+ update_task_list('run');
23
+ $output = _batch_page();
24
+ break;
25
+ }
@@ -0,0 +1,40 @@
1
+
2
+ $mode = 'reply';
3
+ $res = "res";
4
+ $nr = "nr";
5
+ $lang = "lang";
6
+
7
+ switch( $mode ) {
8
+ case 'reply':
9
+ case 'quote':
10
+ $is_auth_type = 'auth_reply';
11
+ break;
12
+ case 'editpost':
13
+ $is_auth_type = 'auth_edit';
14
+ break;
15
+ case 'delete':
16
+ case 'poll_delete':
17
+ $is_auth_type = 'auth_delete';
18
+ break;
19
+ case 'vote':
20
+ $is_auth_type = 'auth_vote';
21
+ break;
22
+ case 'topicreview':
23
+ $is_auth_type = 'auth_read';
24
+ break;
25
+ case "ODBC":
26
+ $row = array();
27
+ $result = array();
28
+ $result = odbc_fetch_row($res, $nr);
29
+ $nf = odbc_num_fields($res); /* Field numbering starts at 1 */
30
+ for($count=1; $count < $nf+1; $count++) {
31
+ $field_name = odbc_field_name($res, $count);
32
+ $field_value = odbc_result($res, $field_name);
33
+ $row[$field_name] = $field_value;
34
+ }
35
+ return $row;
36
+ break;
37
+ default:
38
+ message_die(GENERAL_MESSAGE, $lang['No_post_mode']);
39
+ break;
40
+ }
@@ -0,0 +1,42 @@
1
+
2
+ mode = 'reply'
3
+ res = "res"
4
+ nr = "nr"
5
+ lang = "lang"
6
+
7
+ case mode
8
+ when 'reply'
9
+ when 'quote'
10
+ is_auth_type = 'auth_reply'
11
+ break
12
+ when 'editpost'
13
+ is_auth_type = 'auth_edit'
14
+ break
15
+ when 'delete'
16
+ when 'poll_delete'
17
+ is_auth_type = 'auth_delete';
18
+ break
19
+ when 'vote'
20
+ is_auth_type = 'auth_vote'
21
+ break
22
+ when 'topicreview'
23
+ is_auth_type = 'auth_read'
24
+ break
25
+ when 'ODBC'
26
+ row = array()
27
+ result = array()
28
+ result = odbc_fetch_row(res, nr)
29
+ nf = odbc_num_fields(res)
30
+ count = 1
31
+ while count < nf + 1
32
+ field_name = odbc_field_name(res, count)
33
+ field_value = odbc_result(res, field_name)
34
+ row[field_name] = field_value
35
+ count += 1
36
+ end
37
+ return row
38
+ break
39
+ else
40
+ message_die(GENERAL_MESSAGE, lang['No_post_mode'])
41
+ break
42
+ end
@@ -0,0 +1,56 @@
1
+
2
+ /*
3
+ * sql_query($query, $id)
4
+ * executes an SQL statement, returns a result identifier
5
+ */
6
+
7
+ function sql_query($query, $id)
8
+ {
9
+ global $dbtype, $sql_debug;
10
+ $sql_debug = 0;
11
+
12
+ if($sql_debug) echo "SQL query: ".str_replace(",",", ",$query)."<BR>";
13
+
14
+ switch ($dbtype) {
15
+
16
+ case "MySQL":
17
+ $res=@mysql_query($query, $id);
18
+ return $res;
19
+ break;;
20
+
21
+ case "mSQL":
22
+ $res=@msql_query($query, $id);
23
+ return $res;
24
+ break;;
25
+
26
+ case "postgres":
27
+ case "postgres_local":
28
+ $res=pg_exec($id,$query);
29
+ $result_set = new ResultSet;
30
+ $result_set->set_result( $res );
31
+ $result_set->set_total_rows( sql_num_rows( $result_set ) );
32
+ $result_set->set_fetched_rows( 0 );
33
+ return $result_set;
34
+ break;;
35
+
36
+ case "ODBC":
37
+ case "ODBC_Adabas":
38
+ $res=@odbc_exec($id,$query);
39
+ return $res;
40
+ break;;
41
+
42
+ case "Interbase":
43
+ $res=@ibase_query($id,$query);
44
+ return $res;
45
+ break;;
46
+
47
+ case "Sybase":
48
+ $res=@sybase_query($query, $id);
49
+ return $res;
50
+ break;;
51
+
52
+ default:
53
+ break;;
54
+
55
+ }
56
+ }
@@ -0,0 +1,71 @@
1
+
2
+
3
+ function sql_fetch_array(&$res, $nr=0)
4
+ {
5
+ global $dbtype;
6
+ switch ($dbtype)
7
+ {
8
+ case "MySQL":
9
+ $row = array();
10
+ $row = mysql_fetch_array($res);
11
+ return $row;
12
+ break;;
13
+
14
+ case "mSQL":
15
+ $row = array();
16
+ $row = msql_fetch_array($res);
17
+ return $row;
18
+ break;;
19
+
20
+ case "postgres":
21
+ case "postgres_local":
22
+ if( $res->get_total_rows() > $res->get_fetched_rows() ) {
23
+ $row = array();
24
+ $row = pg_fetch_array($res->get_result(), $res->get_fetched_rows() );
25
+ $res->increment_fetched_rows();
26
+ return $row;
27
+ } else {
28
+ return false;
29
+ }
30
+ break;;
31
+
32
+ case "ODBC":
33
+ $row = array();
34
+ $result = array();
35
+ $result = odbc_fetch_row($res, $nr);
36
+ $nf = odbc_num_fields($res); /* Field numbering starts at 1 */
37
+ for($count=1; $count < $nf+1; $count++) {
38
+ $field_name = odbc_field_name($res, $count);
39
+ $field_value = odbc_result($res, $field_name);
40
+ $row[$field_name] = $field_value;
41
+ }
42
+ return $row;
43
+ break;;
44
+
45
+ case "ODBC_Adabas":
46
+ $row = array();
47
+ $result = array();
48
+ $result = odbc_fetch_row($res, $nr);
49
+
50
+ $nf = count($result)+2; /* Field numbering starts at 1 */
51
+ for($count=1; $count < $nf; $count++) {
52
+ $field_name = odbc_field_name($res, $count);
53
+ $field_value = odbc_result($res, $field_name);
54
+ $row[$field_name] = $field_value;
55
+ }
56
+ return $row;
57
+ break;;
58
+
59
+ case "Interbase":
60
+ $orow=ibase_fetch_object($res);
61
+ $row=get_object_vars($orow);
62
+ return $row;
63
+ break;;
64
+
65
+ case "Sybase":
66
+ $row = sybase_fetch_array($res);
67
+ return $row;
68
+ break;;
69
+
70
+ }
71
+ }
@@ -0,0 +1,43 @@
1
+
2
+
3
+ function sql_logout($id)
4
+ {
5
+ global $dbtype;
6
+ switch ($dbtype) {
7
+
8
+ case "MySQL":
9
+ $dbi=@mysql_close($id);
10
+ return $dbi;
11
+ break;;
12
+
13
+ case "mSQL":
14
+ $dbi=@msql_close($id);
15
+ return $dbi;
16
+ break;;
17
+
18
+ case "postgres":
19
+ case "postgres_local":
20
+ $dbi=@pg_close($id);
21
+ return $dbi;
22
+ break;;
23
+
24
+ case "ODBC":
25
+ case "ODBC_Adabas":
26
+ $dbi=@odbc_close($id);
27
+ return $dbi;
28
+ break;;
29
+
30
+ case "Interbase":
31
+ $dbi=@ibase_close($id);
32
+ return $dbi;
33
+ break;;
34
+
35
+ case "Sybase":
36
+ $dbi=@sybase_close($id);
37
+ return $dbi;
38
+ break;;
39
+
40
+ default:
41
+ break;;
42
+ }
43
+ }
@@ -0,0 +1,35 @@
1
+
2
+ def sql_logout(id)
3
+ $dbtype
4
+
5
+ case $dbtype
6
+ when "MySQL"
7
+ dbi = mysql_close(id) rescue nil
8
+ return dbi
9
+ break
10
+ when "mSQL"
11
+ dbi = msql_close(id) rescue nil
12
+ return dbi
13
+ break
14
+ when "postgres"
15
+ when"postgres_local"
16
+ dbi = pg_close(id) rescue nil
17
+ return dbi
18
+ break
19
+ when "ODBC"
20
+ when "ODBC_Adabas"
21
+ dbi = odbc_close(id) rescue nil
22
+ return dbi
23
+ break
24
+ when "Interbase"
25
+ dbi = ibase_close(id) rescue nil
26
+ return dbi
27
+ break
28
+ when "Sybase"
29
+ dbi = sybase_close(id) rescue nil
30
+ return dbi
31
+ break
32
+ else
33
+ break
34
+ end
35
+ end
@@ -0,0 +1,3 @@
1
+
2
+
3
+ $message = isset($requirement['description']) ? $requirement['description'] : '';
@@ -0,0 +1,17 @@
1
+
2
+
3
+ module SpecHelperMethods
4
+ # teh php codez
5
+ def php_ast(text)
6
+ Ionize::Php.to_sexp(text)
7
+ end
8
+
9
+ # teh ruby codez
10
+ def ruby_ast(text)
11
+ ParseTree.translate(text)
12
+ end
13
+
14
+ def php_to_ruby_eval(text)
15
+ eval(Ionize::Php.to_ruby(text))
16
+ end
17
+ end
@@ -0,0 +1,83 @@
1
+
2
+ require 'spec'
3
+ require 'spec/helper'
4
+ require 'lib/ionize'
5
+
6
+ describe "Transforms Php for posix regex" do
7
+ include Ionize::Php::Environment, SpecHelperMethods
8
+
9
+ it "rewrites ereg" do
10
+ php_ast(%Q{ $date = "2008-08-09"; $result = ereg("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $matches); }).should ==
11
+ ruby_ast(%Q{ date = "2008-08-09"; result, matches = date.match(/([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})/) })
12
+ end
13
+
14
+ it "rewrites eregi" do
15
+ php_ast(%Q{ $date = "2008-08-09"; $result = eregi("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $matches); }).should ==
16
+ ruby_ast(%Q{ date = "2008-08-09"; result, matches = date.match(/([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})/i) })
17
+ end
18
+ end
19
+
20
+ describe "Transforms Php for miscellaneous functions" do
21
+ include Ionize::Php::Environment, SpecHelperMethods
22
+
23
+ it "rewites var_dump" do
24
+ php_ast(%Q{ a = "something"; var_dump($a); }).should ==
25
+ ruby_ast(%Q{ a = "something"; puts a })
26
+ end
27
+
28
+ it "rewrites isset" do
29
+ php_ast(%Q{ $a = "something"; isset($a); }).should ==
30
+ ruby_ast(%Q{ a = "something"; a.not_nil? })
31
+ end
32
+
33
+ it "rewrites function_exists" do
34
+ php_ast(%Q{ function_exists('file_get_contents'); }).should ==
35
+ ruby_ast(%Q{ respond_to? 'file_get_contents' })
36
+ end
37
+ end
38
+
39
+ describe "Transforms Php for miscellaneous functions" do
40
+ include Ionize::Php::Environment, SpecHelperMethods
41
+
42
+ it "evaluates gethostbyaddr to the domain name" do
43
+ php_to_ruby_eval(%Q{ gethostbyaddr("127.0.0.1"); }).should == "localhost"
44
+ php_to_ruby_eval(%Q{ gethostbyaddr("75.127.96.35"); }).should == "li22-35.members.linode.com"
45
+ end
46
+ end
47
+
48
+
49
+ describe "Transforms Php for arrays" do
50
+ include Ionize::Php::Environment, SpecHelperMethods
51
+
52
+
53
+ it "rewrites array_intersect" do
54
+ php_ast(%Q{
55
+ $array1 = array("a" => "green", "red", "blue");
56
+ $array2 = array("b" => "green", "yellow", "red");
57
+ $result = array_intersect($array1, $array2);
58
+ }).should == ruby_ast(%Q{
59
+ array1 = array({"a" => "green"}, "red", "blue")
60
+ array2 = array({"b" => "green"}, "yellow", "red")
61
+ result = array1.intersect(array2)
62
+ })
63
+ end
64
+
65
+ it "finds common hash values from the first array in the rest of the arrays" do
66
+ php_to_ruby_eval(%Q{
67
+ $array1 = array("a" => "green", "red", "blue");
68
+ $array2 = array("b" => "green", "yellow", "red");
69
+ $result = array_intersect($array1, $array2);
70
+ $result;
71
+ }).should == array("a" => "green", 0 => "red")
72
+ end
73
+
74
+ it "creates a 1-based array" do
75
+ php_to_ruby_eval(%Q{ array(1 => 'January', 'February', 'March'); }).should ==
76
+ array(1=>"January", 2=>"February", 3=>"March")
77
+ end
78
+
79
+ it "evaluates the order of arguments for array() similar to Php" do
80
+ php_to_ruby_eval(%Q{ array(1, 1, 1, 1, 1, 8 => 1, 4 => 1, 19, 3 => 13); }).should ==
81
+ array(0 => 1, 1 => 1, 2 => 1, 3 => 13, 4 => 1, 8 => 1, 9 => 19)
82
+ end
83
+ end