lazibi 0.1.7 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
data/.autotest ADDED
@@ -0,0 +1,2 @@
1
+ require 'autotest/redgreen'
2
+ require 'autotest/growl'
data/History.txt CHANGED
@@ -1,3 +1,10 @@
1
+ == 0.1.8 2007-06-19
2
+
3
+ * Support Here doc by not processing it :/
4
+ * Support ruby eval by not processing it :|
5
+ * Numeric fix of code
6
+ * Passed rake test for actionmailer :p
7
+
1
8
  == 0.1.7 2007-06-18
2
9
 
3
10
  * Bug fix: when .backup exists, code generation stops to work
data/Manifest.txt CHANGED
@@ -1,9 +1,11 @@
1
+ .autotest
1
2
  History.txt
2
3
  License.txt
3
4
  Manifest.txt
4
5
  README.txt
5
6
  Rakefile
6
7
  bin/lazibi
8
+ lib/helper/app_helper.rb
7
9
  lib/helper/parser_helper.rb
8
10
  lib/helper/task_helper.rb
9
11
  lib/lazibi.rb
@@ -13,23 +15,41 @@ lib/task.rb
13
15
  lib/vendor/beautifier.rb
14
16
  scripts/rdoc2html
15
17
  scripts/txt2html
18
+ test/fixtures/clean/end_concat.txt
19
+ test/fixtures/clean/long_indent.txt
20
+ test/fixtures/clean/only_if.txt
21
+ test/fixtures/clean/re.txt
22
+ test/fixtures/clean/sep_line.txt
16
23
  test/fixtures/meta/basic_class.txt
17
24
  test/fixtures/meta/case.txt
18
25
  test/fixtures/meta/class_with_def.txt
19
26
  test/fixtures/meta/comment.txt
27
+ test/fixtures/meta/eval_code.txt
28
+ test/fixtures/meta/here_doc.txt
20
29
  test/fixtures/meta/inline_end.txt
21
30
  test/fixtures/meta/middle.txt
22
31
  test/fixtures/meta/nested_comment.txt
32
+ test/fixtures/meta/optional_do.txt
33
+ test/fixtures/meta/optional_do_with_nasty_chars.txt
23
34
  test/fixtures/meta/partial_method.txt
24
35
  test/fixtures/meta/two_methods.txt
25
36
  test/fixtures/real/basic_class.txt
26
37
  test/fixtures/real/case.txt
27
38
  test/fixtures/real/class_with_def.txt
28
39
  test/fixtures/real/comment.txt
40
+ test/fixtures/real/end_concat.txt
41
+ test/fixtures/real/eval_code.txt
42
+ test/fixtures/real/here_doc.txt
29
43
  test/fixtures/real/inline_end.txt
44
+ test/fixtures/real/long_indent.txt
30
45
  test/fixtures/real/middle.txt
31
46
  test/fixtures/real/nested_comment.txt
47
+ test/fixtures/real/only_if.txt
48
+ test/fixtures/real/optional_do.txt
49
+ test/fixtures/real/optional_do_with_nasty_chars.txt
32
50
  test/fixtures/real/partial_method.txt
51
+ test/fixtures/real/re.txt
52
+ test/fixtures/real/sep_line.txt
33
53
  test/fixtures/real/two_methods.txt
34
54
  test/test_helper.rb
35
55
  test/test_unit.rb
data/README.txt CHANGED
@@ -1,22 +1,12 @@
1
1
  == Welcome to Lazibi
2
2
 
3
- Lazibi is a preprocessor that allows you to use Python style indenting in Ruby.
4
- It tries to be backward compatible with plain Ruby if you like to indent your blocks properly.
3
+ Lazibi is a preprocessor that allows you to use Python style indentation in Ruby.
5
4
 
6
5
  The idea is to edit .py.rb files in a meta directory and let the engine generates .rb files in
7
- the real directory for you in _real time_.
6
+ the real directory for you in real time.
8
7
 
9
8
  == Examples
10
9
 
11
- Is this Ruby or Python?
12
-
13
- class MyClass
14
-
15
- def hello
16
- puts 'hello world'
17
-
18
- MyClass.new.hello
19
-
20
10
  More DIY Rails controller
21
11
 
22
12
  class AuctionsController < ApplicationController
@@ -63,7 +53,7 @@ Make sure everything still works
63
53
  cd shiny_project/real
64
54
  rake test / autotest
65
55
 
66
- Start hacking ruby/python in meta :/
56
+ Start hacking in meta :/
67
57
 
68
58
  cd shiny_project
69
59
  $your_editor meta
@@ -94,7 +84,7 @@ Start hacking ruby/python in meta :/
94
84
 
95
85
  == In Practice
96
86
 
97
- Lazibi is written using Lazibi itself ( incrementally ). Personally I think autotest from http://www.zenspider.com/ZSS/Products/ZenTest/ is a must have, and Lazibi works best using TDD.
87
+ Lazibi is written using Lazibi itself ( incrementally ). Personally I think autotest from http://www.zenspider.com/ZSS/Products/ZenTest/ is a must have, and Lazibi works pretty well using TDD.
98
88
 
99
89
  == Known issues
100
90
 
@@ -102,9 +92,8 @@ Here docs are likely to screw up code generation. Give them enough indent so the
102
92
 
103
93
  == To Do
104
94
 
105
- * Here doc fix
95
+ * Targeting Rspec
106
96
  * Two way sync between real and meta
107
- * Erb for rhtml
108
97
 
109
98
  == Author
110
99
  * Jinjing (mailto:nfjinjing@gmail.com)
File without changes
@@ -4,6 +4,7 @@ require 'beautifier'
4
4
 
5
5
  module Lazibi
6
6
  module ParserHelper
7
+ SKIP = "#skip_parse"
7
8
 
8
9
  def get_indent( line )
9
10
  line =~ /( *)/
@@ -16,19 +17,34 @@ module Lazibi
16
17
  end
17
18
 
18
19
  def begin_keys
19
- s = %w( module def class if begin for while unless do case )
20
- m = ['\sdo\s*$|\sdo\s+(\|[^|]+\|)']
21
- s.map!{|key| "^#{key}\\b"}
22
-
23
- Regexp.new(s.concat(m).join('|'))
20
+ [
21
+ /^module\b/,
22
+ /(=\s*|^)if\b/,
23
+ /(=\s*|^)until\b/,
24
+ /(=\s*|^)for\b/,
25
+ /(=\s*|^)unless\b/,
26
+ /(=\s*|^)while\b/,
27
+ /(=\s*|^)begin\b/,
28
+ /\bcase\b/,
29
+ /(=\s*|^)loop\b/,
30
+ /^class\b/,
31
+ /^def\b/,
32
+ /\bdo\b/,
33
+ ]
24
34
  end
25
35
 
26
36
  def middle_keys
27
- s = %w( rescue else ensure elsif when )
28
- s.map!{|key| "^#{key}\\b"}
29
- Regexp.new(s.join('|'))
37
+ [
38
+ /\bthen\b/,
39
+ /^else\b/,
40
+ /^elsif\b/,
41
+ /^ensure\b/,
42
+ /^rescue\b/,
43
+ /\bwhen\b/
44
+ ]
30
45
  end
31
46
 
47
+
32
48
  def end_keys
33
49
  /^end\b/
34
50
  end
@@ -36,11 +52,20 @@ module Lazibi
36
52
  def start_anchor?( str )
37
53
  return false if str =~ /^#/
38
54
  str = clean_line str
39
- return true if str =~ begin_keys
55
+ group_match str, begin_keys
40
56
  end
41
57
 
42
58
  def middle_anchor?( str )
43
- str =~ middle_keys
59
+ str = clean_line str
60
+ group_match str, middle_keys
61
+ end
62
+
63
+
64
+ def group_match(str, patterns)
65
+ for pattern in patterns
66
+ return true if str =~ pattern
67
+ end
68
+ false
44
69
  end
45
70
 
46
71
  def end_anchor?(str)
@@ -50,5 +75,11 @@ module Lazibi
50
75
  def clean_line(line)
51
76
  Beautifier::clean_line line
52
77
  end
78
+
79
+ def nasty_line?(line)
80
+ s = %w! \/ ' " \( \{ \[ !
81
+ p = Regexp.new(s.join('|'))
82
+ return line =~ p
83
+ end
53
84
  end
54
85
  end
@@ -1,6 +1,6 @@
1
1
  module Lazibi
2
2
  module TaskHelper
3
-
3
+ SKIP = "#skip_parse"
4
4
  def skip_path?(path)
5
5
  return false if @config[:exclude].nil?
6
6
  @config[:exclude].each do |f|
@@ -2,7 +2,7 @@ module Lazibi #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 1
5
- TINY = 7
5
+ TINY = 8
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
data/lib/parser.rb CHANGED
@@ -8,7 +8,9 @@ module Lazibi
8
8
 
9
9
  def to_py( rb )
10
10
  py = []
11
- rb.split("\n").each do |l|
11
+ lines = rb.split("\n")
12
+ lines.each_index do |index|
13
+ l = filter_for_to_py(lines, index)
12
14
  if l.strip =~ /^end$/
13
15
  next
14
16
  end
@@ -23,7 +25,12 @@ module Lazibi
23
25
  py.join("\n")
24
26
  end
25
27
 
28
+
26
29
  def to_rb( content )
30
+ return '' if content.strip == ''
31
+ lines = content.split("\n")
32
+ first_line = lines.first.strip
33
+ return lines[1..-1].join("\n") if first_line == '#skip_parse'
27
34
  insert_end content
28
35
  end
29
36
 
@@ -36,7 +43,9 @@ module Lazibi
36
43
  while progress < @lines.size
37
44
  lines = @lines[progress..-1]
38
45
  lines.each_index do |index|
39
- l = lines[index]
46
+ # run through filters
47
+ l = filter_for_to_rb(lines, index)
48
+
40
49
  if start_anchor?(get_rest(l))
41
50
  relative_index_for_end = find_end( lines[index..-1], get_indent(l))
42
51
  unless relative_index_for_end
@@ -58,7 +67,7 @@ module Lazibi
58
67
  result = @lines.join("\n")
59
68
  end
60
69
 
61
- def find_end( lines, indent )
70
+ def find_end( lines, indent )
62
71
  return 0 if lines.size == 1
63
72
 
64
73
  anchor = 0
@@ -89,5 +98,49 @@ module Lazibi
89
98
  end
90
99
  return anchor
91
100
  end
101
+
102
+ def filter_for_to_rb(lines, index)
103
+ l = lines[index]
104
+
105
+ # maybe do is a good thing .....
106
+ return l
107
+
108
+ return l if l.strip == ''
109
+ rest = get_rest l
110
+ return l if start_anchor?(rest) || middle_anchor?(rest) || end_anchor?(rest)
111
+ l = add_do(l, lines, index)
112
+
113
+ # also change the original array
114
+ lines[index] = l
115
+ end
116
+
117
+ def add_do(l, lines, index)
118
+ l_check = clean_line l
119
+ return l if nasty_line?(l_check)
120
+ next_line = index + 1 < lines.size ? lines[index+1] : nil
121
+ return l unless next_line
122
+ if get_indent(next_line) > get_indent(l)
123
+ return l.rstrip + ' do'
124
+ else
125
+ return l
126
+ end
127
+ end
128
+
129
+
130
+ def filter_for_to_py(lines, index)
131
+ l = lines[index]
132
+
133
+ # same
134
+ return l
135
+ l = remove_do(l, lines, index)
136
+ end
137
+
138
+ def remove_do(l, lines, index)
139
+ l_check = clean_line(l).strip
140
+ if l_check.size > 3 && l.strip[-3..-1] == ' do' && !nasty_line?(l_check)
141
+ return l.rstrip[0...-3].rstrip
142
+ end
143
+ return l
144
+ end
92
145
  end
93
146
  end
data/lib/task.rb CHANGED
@@ -77,8 +77,14 @@ module Lazibi
77
77
  rb = open(rb_path).read
78
78
 
79
79
  py_file = open(py_path, 'w')
80
- rb = Beautifier::ruby rb if beautify
81
- py_file.write(to_py(rb))
80
+ new_rb = Beautifier::ruby rb if beautify
81
+ if new_rb
82
+ py = to_py(new_rb)
83
+ else
84
+ py = SKIP + "\n" + rb
85
+ end
86
+
87
+ py_file.write(py)
82
88
  py_file.close
83
89
  end
84
90
 
@@ -19,8 +19,9 @@ module Beautifier
19
19
  /(=\s*|^)unless\b/,
20
20
  /(=\s*|^)while\b/,
21
21
  /(=\s*|^)begin\b/,
22
- /(=\s*|^)case\b/,
23
- /\bthen\b/,
22
+ /\bcase\b/,
23
+ /(=\s*|^)loop\b/,
24
+ # /\bthen\b/,
24
25
  /^class\b/,
25
26
  /^rescue\b/,
26
27
  /^def\b/,
@@ -39,6 +40,7 @@ module Beautifier
39
40
  /^rescue\b/,
40
41
  /^ensure\b/,
41
42
  /^elsif\b/,
43
+ # /\bthen\b/,
42
44
  /^end\b/,
43
45
  /^else\b/,
44
46
  /\bwhen\b/,
@@ -56,10 +58,12 @@ module Beautifier
56
58
  return line + "\n"
57
59
  end
58
60
 
59
- def self.clean_line( tline )
61
+ def self.clean_line( line )
60
62
 
61
63
  # throw out sequences that will
62
64
  # only sow confusion
65
+
66
+ tline = line.dup
63
67
  tline.gsub!(/\/.*?[^\\]\//,"")
64
68
  tline.gsub!(/%r\{.*?\}/,"")
65
69
  tline.gsub!(/%r(.).*?\1/,"")
@@ -69,13 +73,93 @@ module Beautifier
69
73
  tline.gsub!(/#\{.*?\}/,"")
70
74
 
71
75
  # more ..
72
- tline.gsub!(/%w\{[^\{]*?\}/, '')
73
- tline.gsub!(/%w\([^(]*?\)/, '')
76
+ tline.gsub!(/%w\{.*?\}/, '')
77
+ tline.gsub!(/%w\(.*?\)/, '')
78
+ tline.gsub!(/%w\[.*?\]/, '')
79
+
80
+ tline.gsub!(/%w(.).*?\1/, '')
74
81
 
75
82
  tline
76
83
  end
77
84
 
85
+ def self.split_end( source )
86
+ lines = source.split("\n")
87
+ new_lines = []
88
+ for line in lines
89
+ if line =~ /^\s*#/
90
+ new_lines << line
91
+ else
92
+ new_lines << line.gsub( /\send\./, "\nend." )
93
+ end
94
+ end
95
+
96
+ new_lines.join("\n")
97
+ end
98
+
99
+ def self.join_sep_line( source )
100
+ lines = source.split("\n")
101
+ continue = false
102
+ buffer = ''
103
+ new_lines = []
104
+ for line in lines
105
+ if line =~ /^\s*#/
106
+ if continue
107
+ new_lines << buffer
108
+ new_lines << line
109
+ buffer = ''
110
+ else
111
+ new_lines << line
112
+ end
113
+ next
114
+ end
115
+
116
+ if continue
117
+ if line.strip == ''
118
+ continue = false
119
+ new_lines << buffer
120
+ new_lines << line
121
+ buffer = ''
122
+ elsif line.strip[-1..-1] == "\\"
123
+ continue = true
124
+ buffer += ' ' + line.strip[0...-1].strip
125
+ else
126
+ continue = false
127
+ buffer += ' ' + line.lstrip
128
+ new_lines << buffer
129
+ buffer = ''
130
+ end
131
+ else
132
+ if line.strip == ''
133
+ new_lines << line
134
+ elsif line.strip[-1..-1] == "\\"
135
+ continue = true
136
+ buffer += line.rstrip[0...-1].strip
137
+ else
138
+ new_lines << line
139
+ end
140
+ end
141
+ end
142
+
143
+ new_lines.join("\n")
144
+ end
145
+
146
+
147
+ def self.valid?( line )
148
+ not_supported = using_eval?(line) || here_doc?(line)
149
+ return !not_supported
150
+ end
151
+
152
+ def self.using_eval?( line )
153
+ line =~ /\b(class|module|instance)_eval\b/
154
+ end
155
+
156
+ def self.here_doc?( line )
157
+ line =~ /(=\s*<<)|(<<-)/
158
+ end
159
+
78
160
  def self.ruby( source )
161
+ invalid = false
162
+ source = join_sep_line(split_end(source))
79
163
  commentBlock = false
80
164
  multiLineArray = Array.new
81
165
  multiLineStr = ""
@@ -108,7 +192,11 @@ module Beautifier
108
192
  # throw out sequences that will
109
193
  # only sow confusion
110
194
  tline = clean_line(tline)
111
-
195
+ unless valid?(tline)
196
+ puts 'Skipped since: ' + tline
197
+ invalid = true
198
+ break
199
+ end
112
200
  $outdentExp.each do |re|
113
201
  if(tline =~ re)
114
202
  tab -= 1
@@ -127,7 +215,7 @@ module Beautifier
127
215
  end
128
216
  if(!commentLine)
129
217
  $indentExp.each do |re|
130
- if(tline =~ re && !(tline =~ /\s+end\s*$/))
218
+ if(tline =~ re) && !(tline =~ /\s+end\s*$/)
131
219
  tab += 1
132
220
  break
133
221
  end
@@ -143,7 +231,7 @@ module Beautifier
143
231
  # if(tab != 0)
144
232
  # STDERR.puts "Indentation error: #{tab}"
145
233
  #
146
-
234
+ return false if invalid
147
235
  dest
148
236
  end
149
237
  end
@@ -0,0 +1,7 @@
1
+ if mail._builtin_multipart?
2
+ then @multipart_composer
3
+ else @singlepart_composer
4
+ end.exec mail
5
+
6
+ class a
7
+ end
@@ -0,0 +1,4 @@
1
+ class abc
2
+ def a
3
+ end
4
+ end
@@ -0,0 +1,12 @@
1
+ before + case quoting_method
2
+ when "q", "Q" then
3
+ unquote_quoted_printable_and_convert_to(text, to_charset, from_charset, preserve_underscores)
4
+ when "b", "B" then
5
+ unquote_base64_and_convert_to(text, to_charset, from_charset)
6
+ when nil then
7
+ # will be nil at the end of the string, due to the nature of
8
+ # the regex used.
9
+ ""
10
+ else
11
+ raise "unknown quoting method #{quoting_method.inspect}"
12
+ end
@@ -0,0 +1,4 @@
1
+ Dir.open(expected_dir).each do |fn|
2
+ next unless fn =~ /[.]txt$/
3
+ @real[fn.scan(/(.*)[.]/).to_s.to_sym] = File.read(expected_dir + "/#{fn}")
4
+ end
@@ -0,0 +1 @@
1
+ abc def
@@ -0,0 +1,8 @@
1
+ #skip_parse
2
+ unless $".index 'racc/parser.rb'
3
+ $".push 'racc/parser.rb'
4
+
5
+ self.class.module_eval <<'..end /home/aamine/lib/ruby/racc/parser.rb modeval..idb76f2e220d', '/home/aamine/lib/ruby/racc/parser.rb', 1
6
+
7
+ def abc
8
+ end
@@ -0,0 +1,3 @@
1
+ #skip_parse
2
+ <<-AB
3
+ AB
@@ -0,0 +1,2 @@
1
+ create_table :orders
2
+ fkey :user
@@ -0,0 +1,3 @@
1
+ abc = %w[
2
+ abc
3
+ ]
@@ -0,0 +1,6 @@
1
+ if mail._builtin_multipart?
2
+ then @multipart_composer
3
+ else @singlepart_composer end.exec mail
4
+
5
+ class a
6
+ end
@@ -0,0 +1,7 @@
1
+ unless $".index 'racc/parser.rb'
2
+ $".push 'racc/parser.rb'
3
+
4
+ self.class.module_eval <<'..end /home/aamine/lib/ruby/racc/parser.rb modeval..idb76f2e220d', '/home/aamine/lib/ruby/racc/parser.rb', 1
5
+
6
+ def abc
7
+ end
@@ -0,0 +1,2 @@
1
+ <<-AB
2
+ AB
@@ -0,0 +1,4 @@
1
+ class abc
2
+ def a
3
+ end
4
+ end
@@ -0,0 +1,12 @@
1
+ before + case quoting_method
2
+ when "q", "Q" then
3
+ unquote_quoted_printable_and_convert_to(text, to_charset, from_charset, preserve_underscores)
4
+ when "b", "B" then
5
+ unquote_base64_and_convert_to(text, to_charset, from_charset)
6
+ when nil then
7
+ # will be nil at the end of the string, due to the nature of
8
+ # the regex used.
9
+ ""
10
+ else
11
+ raise "unknown quoting method #{quoting_method.inspect}"
12
+ end
@@ -0,0 +1,3 @@
1
+ create_table :orders do
2
+ fkey :user
3
+ end
@@ -0,0 +1,3 @@
1
+ abc = %w[
2
+ abc
3
+ ]
@@ -0,0 +1,4 @@
1
+ Dir.open(expected_dir).each do |fn|
2
+ next unless fn =~ /[.]txt$/
3
+ @real[fn.scan(/(.*)[.]/).to_s.to_sym] = File.read(expected_dir + "/#{fn}")
4
+ end
@@ -0,0 +1,2 @@
1
+ abc \
2
+ def
data/test/test_unit.rb CHANGED
@@ -22,7 +22,7 @@ class TestLazibi < Test::Unit::TestCase
22
22
  next unless fn =~ /[.]txt$/
23
23
  @real[fn.scan(/(.*)[.]/).to_s.to_sym] = File.read(expected_dir + "/#{fn}")
24
24
  end
25
-
25
+
26
26
  clean_dir = File.dirname(__FILE__) + '/fixtures/clean'
27
27
  Dir.open(clean_dir).each do |fn|
28
28
  next unless fn =~ /[.]txt$/
@@ -64,19 +64,26 @@ class TestLazibi < Test::Unit::TestCase
64
64
  end
65
65
 
66
66
  def test_convert_content
67
- @meta.keys.reject{|k| ['partial_method', 'inline_end'].include? k.to_s }.each do |k|
67
+ @meta.keys.reject{|k| ['partial_method', 'inline_end', 'optional_do', 'eval_code', 'here_doc'].include? k.to_s }.each do |k|
68
68
  assert_convert k
69
69
  end
70
70
  end
71
71
 
72
72
  def test_to_rb
73
73
  assert_to_rb :partial_method
74
+ # assert_to_rb :optional_do
75
+ assert_to_rb :eval_code
74
76
  end
75
77
 
76
78
  def test_to_py
77
79
  assert_to_py :inline_end
78
80
  end
79
-
81
+
82
+ def test_skip
83
+ assert_skip :eval_code
84
+ assert_skip :here_doc
85
+ end
86
+
80
87
  def test_beauty
81
88
  @clean.keys.each do |k|
82
89
  assert_beauty k
@@ -105,8 +112,12 @@ class TestLazibi < Test::Unit::TestCase
105
112
  def assert_identity( s )
106
113
  assert_equal @r.to_rb( @r.to_py( s ) ), s
107
114
  end
108
-
115
+
109
116
  def assert_beauty( name )
110
117
  assert_equal Beautifier::ruby(@real[name]), @clean[name], name
111
118
  end
119
+
120
+ def assert_skip( name )
121
+ assert_equal Beautifier::ruby(@real[name]), false, name
122
+ end
112
123
  end
data/website/index.html CHANGED
@@ -33,30 +33,18 @@
33
33
  <h1>Welcome to Lazibi</h1>
34
34
  <div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/lazibi"; return false'>
35
35
  <p>Get Version</p>
36
- <a href="http://rubyforge.org/projects/lazibi" class="numbers">0.1.7</a>
36
+ <a href="http://rubyforge.org/projects/lazibi" class="numbers">0.1.8</a>
37
37
  </div>
38
38
  <p>
39
- Lazibi is a preprocessor that allows you to use Python style indenting in
40
- Ruby. It tries to be backward compatible with plain Ruby if you like to
41
- indent your blocks properly.
39
+ Lazibi is a preprocessor that allows you to use Python style indentation in
40
+ Ruby.
42
41
  </p>
43
42
  <p>
44
43
  The idea is to edit .py.rb files in a meta directory and let the engine
45
- generates .rb files in the real directory for you in _real time_.
44
+ generates .rb files in the real directory for you in real time.
46
45
  </p>
47
46
  <h2>Examples</h2>
48
47
  <p>
49
- Is this Ruby or Python?
50
- </p>
51
- <pre>
52
- class MyClass
53
-
54
- def hello
55
- puts 'hello world'
56
-
57
- MyClass.new.hello
58
- </pre>
59
- <p>
60
48
  More DIY Rails controller
61
49
  </p>
62
50
  <pre>
@@ -109,7 +97,7 @@ Make sure everything still works
109
97
  rake test / autotest
110
98
  </pre>
111
99
  <p>
112
- Start hacking ruby/python in meta :/
100
+ Start hacking in meta :/
113
101
  </p>
114
102
  <pre>
115
103
  cd shiny_project
@@ -152,7 +140,7 @@ Start hacking ruby/python in meta :/
152
140
  <p>
153
141
  Lazibi is written using Lazibi itself ( incrementally ). Personally I think
154
142
  autotest from http://www.zenspider.com/ZSS/Products/ZenTest/ is a must
155
- have, and Lazibi works best using TDD.
143
+ have, and Lazibi works pretty well using TDD.
156
144
  </p>
157
145
  <h2>Known issues</h2>
158
146
  <p>
@@ -161,14 +149,11 @@ so they are treated like normal code inside current code block ;|
161
149
  </p>
162
150
  <h2>To Do</h2>
163
151
  <ul>
164
- <li>Here doc fix
152
+ <li>Targeting Rspec
165
153
 
166
154
  </li>
167
155
  <li>Two way sync between real and meta
168
156
 
169
- </li>
170
- <li>Erb for rhtml
171
-
172
157
  </li>
173
158
  </ul>
174
159
  <h2>Author</h2>
@@ -182,7 +167,7 @@ Released under the MIT license (included)
182
167
  </p>
183
168
 
184
169
  <p class="coda">
185
- <a href="mailto:nfjinjing@gmail.com">Jinjing</a>, 18th June 2007<br>
170
+ <a href="mailto:nfjinjing@gmail.com">Jinjing</a>, 19th June 2007<br>
186
171
  Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
187
172
  </p>
188
173
  </div>
data/website/index.txt CHANGED
@@ -1,22 +1,12 @@
1
1
  == Welcome to Lazibi
2
2
 
3
- Lazibi is a preprocessor that allows you to use Python style indenting in Ruby.
4
- It tries to be backward compatible with plain Ruby if you like to indent your blocks properly.
3
+ Lazibi is a preprocessor that allows you to use Python style indentation in Ruby.
5
4
 
6
5
  The idea is to edit .py.rb files in a meta directory and let the engine generates .rb files in
7
- the real directory for you in _real time_.
6
+ the real directory for you in real time.
8
7
 
9
8
  == Examples
10
9
 
11
- Is this Ruby or Python?
12
-
13
- class MyClass
14
-
15
- def hello
16
- puts 'hello world'
17
-
18
- MyClass.new.hello
19
-
20
10
  More DIY Rails controller
21
11
 
22
12
  class AuctionsController < ApplicationController
@@ -63,7 +53,7 @@ Make sure everything still works
63
53
  cd shiny_project/real
64
54
  rake test / autotest
65
55
 
66
- Start hacking ruby/python in meta :/
56
+ Start hacking in meta :/
67
57
 
68
58
  cd shiny_project
69
59
  $your_editor meta
@@ -94,7 +84,7 @@ Start hacking ruby/python in meta :/
94
84
 
95
85
  == In Practice
96
86
 
97
- Lazibi is written using Lazibi itself ( incrementally ). Personally I think autotest from http://www.zenspider.com/ZSS/Products/ZenTest/ is a must have, and Lazibi works best using TDD.
87
+ Lazibi is written using Lazibi itself ( incrementally ). Personally I think autotest from http://www.zenspider.com/ZSS/Products/ZenTest/ is a must have, and Lazibi works pretty well using TDD.
98
88
 
99
89
  == Known issues
100
90
 
@@ -102,9 +92,8 @@ Here docs are likely to screw up code generation. Give them enough indent so the
102
92
 
103
93
  == To Do
104
94
 
105
- * Here doc fix
95
+ * Targeting Rspec
106
96
  * Two way sync between real and meta
107
- * Erb for rhtml
108
97
 
109
98
  == Author
110
99
  * Jinjing (mailto:nfjinjing@gmail.com)
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.3
3
3
  specification_version: 1
4
4
  name: lazibi
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.1.7
7
- date: 2007-06-18 00:00:00 +08:00
6
+ version: 0.1.8
7
+ date: 2007-06-19 00:00:00 +08:00
8
8
  summary: Python like syntax for Ruby
9
9
  require_paths:
10
10
  - lib
@@ -29,12 +29,14 @@ post_install_message:
29
29
  authors:
30
30
  - Jinjing
31
31
  files:
32
+ - .autotest
32
33
  - History.txt
33
34
  - License.txt
34
35
  - Manifest.txt
35
36
  - README.txt
36
37
  - Rakefile
37
38
  - bin/lazibi
39
+ - lib/helper/app_helper.rb
38
40
  - lib/helper/parser_helper.rb
39
41
  - lib/helper/task_helper.rb
40
42
  - lib/lazibi.rb
@@ -44,23 +46,41 @@ files:
44
46
  - lib/vendor/beautifier.rb
45
47
  - scripts/rdoc2html
46
48
  - scripts/txt2html
49
+ - test/fixtures/clean/end_concat.txt
50
+ - test/fixtures/clean/long_indent.txt
51
+ - test/fixtures/clean/only_if.txt
52
+ - test/fixtures/clean/re.txt
53
+ - test/fixtures/clean/sep_line.txt
47
54
  - test/fixtures/meta/basic_class.txt
48
55
  - test/fixtures/meta/case.txt
49
56
  - test/fixtures/meta/class_with_def.txt
50
57
  - test/fixtures/meta/comment.txt
58
+ - test/fixtures/meta/eval_code.txt
59
+ - test/fixtures/meta/here_doc.txt
51
60
  - test/fixtures/meta/inline_end.txt
52
61
  - test/fixtures/meta/middle.txt
53
62
  - test/fixtures/meta/nested_comment.txt
63
+ - test/fixtures/meta/optional_do.txt
64
+ - test/fixtures/meta/optional_do_with_nasty_chars.txt
54
65
  - test/fixtures/meta/partial_method.txt
55
66
  - test/fixtures/meta/two_methods.txt
56
67
  - test/fixtures/real/basic_class.txt
57
68
  - test/fixtures/real/case.txt
58
69
  - test/fixtures/real/class_with_def.txt
59
70
  - test/fixtures/real/comment.txt
71
+ - test/fixtures/real/end_concat.txt
72
+ - test/fixtures/real/eval_code.txt
73
+ - test/fixtures/real/here_doc.txt
60
74
  - test/fixtures/real/inline_end.txt
75
+ - test/fixtures/real/long_indent.txt
61
76
  - test/fixtures/real/middle.txt
62
77
  - test/fixtures/real/nested_comment.txt
78
+ - test/fixtures/real/only_if.txt
79
+ - test/fixtures/real/optional_do.txt
80
+ - test/fixtures/real/optional_do_with_nasty_chars.txt
63
81
  - test/fixtures/real/partial_method.txt
82
+ - test/fixtures/real/re.txt
83
+ - test/fixtures/real/sep_line.txt
64
84
  - test/fixtures/real/two_methods.txt
65
85
  - test/test_helper.rb
66
86
  - test/test_unit.rb
@@ -80,23 +100,41 @@ extra_rdoc_files:
80
100
  - License.txt
81
101
  - Manifest.txt
82
102
  - README.txt
103
+ - test/fixtures/clean/end_concat.txt
104
+ - test/fixtures/clean/long_indent.txt
105
+ - test/fixtures/clean/only_if.txt
106
+ - test/fixtures/clean/re.txt
107
+ - test/fixtures/clean/sep_line.txt
83
108
  - test/fixtures/meta/basic_class.txt
84
109
  - test/fixtures/meta/case.txt
85
110
  - test/fixtures/meta/class_with_def.txt
86
111
  - test/fixtures/meta/comment.txt
112
+ - test/fixtures/meta/eval_code.txt
113
+ - test/fixtures/meta/here_doc.txt
87
114
  - test/fixtures/meta/inline_end.txt
88
115
  - test/fixtures/meta/middle.txt
89
116
  - test/fixtures/meta/nested_comment.txt
117
+ - test/fixtures/meta/optional_do.txt
118
+ - test/fixtures/meta/optional_do_with_nasty_chars.txt
90
119
  - test/fixtures/meta/partial_method.txt
91
120
  - test/fixtures/meta/two_methods.txt
92
121
  - test/fixtures/real/basic_class.txt
93
122
  - test/fixtures/real/case.txt
94
123
  - test/fixtures/real/class_with_def.txt
95
124
  - test/fixtures/real/comment.txt
125
+ - test/fixtures/real/end_concat.txt
126
+ - test/fixtures/real/eval_code.txt
127
+ - test/fixtures/real/here_doc.txt
96
128
  - test/fixtures/real/inline_end.txt
129
+ - test/fixtures/real/long_indent.txt
97
130
  - test/fixtures/real/middle.txt
98
131
  - test/fixtures/real/nested_comment.txt
132
+ - test/fixtures/real/only_if.txt
133
+ - test/fixtures/real/optional_do.txt
134
+ - test/fixtures/real/optional_do_with_nasty_chars.txt
99
135
  - test/fixtures/real/partial_method.txt
136
+ - test/fixtures/real/re.txt
137
+ - test/fixtures/real/sep_line.txt
100
138
  - test/fixtures/real/two_methods.txt
101
139
  - website/index.txt
102
140
  executables: