lazibi 0.1.12 → 0.1.13

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,12 @@
1
+ == 0.1.13 2007-06-22
2
+
3
+ * Bugs
4
+ * {} and lambda syntax for optioanl_do
5
+ * correctly parse inline def; end
6
+
7
+ Features
8
+ * Passed all spec tests for RSpec with optional_do filter on
9
+
1
10
  == 0.1.12 2007-06-21
2
11
 
3
12
  * Bugs
data/Manifest.txt CHANGED
@@ -32,6 +32,18 @@ test/fixtures/clean/re.txt
32
32
  test/fixtures/clean/semi_colon_after_end.txt
33
33
  test/fixtures/clean/sep_line.txt
34
34
  test/fixtures/clean/unless_problem.txt
35
+ test/fixtures/functional/ruby/brackets_block.txt
36
+ test/fixtures/functional/ruby/classical.txt
37
+ test/fixtures/functional/ruby/describe.txt
38
+ test/fixtures/functional/ruby/do_block.txt
39
+ test/fixtures/functional/ruby/lambda.txt
40
+ test/fixtures/functional/ruby/square_brackets.txt
41
+ test/fixtures/functional/simply/brackets_block.txt
42
+ test/fixtures/functional/simply/classical.txt
43
+ test/fixtures/functional/simply/describe.txt
44
+ test/fixtures/functional/simply/do_block.txt
45
+ test/fixtures/functional/simply/lambda.txt
46
+ test/fixtures/functional/simply/square_brackets.txt
35
47
  test/fixtures/meta/basic_class.txt
36
48
  test/fixtures/meta/case.txt
37
49
  test/fixtures/meta/class_with_def.txt
data/README.txt CHANGED
@@ -110,6 +110,11 @@ Start hacking in meta :/
110
110
 
111
111
  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.
112
112
 
113
+ A few projects are used as test code:
114
+ ActiveRecord, ActionMailer, ActionPack, ActiveSupport, Mongrel, RSpec, redMine.
115
+
116
+ Lazibi was used to generate .py.rb files from these projects, and then to .rb files back ( this is the default process ). Tests were then run to ensure compatibility.
117
+
113
118
  == Known issues
114
119
 
115
120
  Here docs, eval, javascript related libs, and complex string evaluation are currently not supported.
@@ -49,9 +49,9 @@ module Lazibi
49
49
  offset = 'meta'.size + 1
50
50
  path[offset..-1]
51
51
  end
52
-
52
+
53
53
  def clean_block(line)
54
- line.gsub /do.*?end/, ''
54
+ line.gsub /do\b.*?;\s*end/, ''
55
55
  end
56
56
  end
57
57
  end
@@ -2,7 +2,7 @@ module Lazibi #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 1
5
- TINY = 12
5
+ TINY = 13
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
data/lib/parser.rb CHANGED
@@ -15,9 +15,9 @@ module Lazibi
15
15
  next
16
16
  end
17
17
  l = remove_colon_at_end(l)
18
-
18
+
19
19
  s = l
20
- if comment_at_end(l)
20
+ if comment_at_end(l)
21
21
  s = s.sub(/(\s*;\s*end*\s*)(#.*)/, ' \2')
22
22
  s = s.sub(/(\s+end*\s*)(#.*)/, ' \2')
23
23
  else
@@ -39,7 +39,7 @@ module Lazibi
39
39
  l.sub /;*$/, ''
40
40
  end
41
41
  end
42
-
42
+
43
43
  def to_rb( content, filters = [] )
44
44
  return '' if content.strip == ''
45
45
  lines = content.split("\n")
@@ -58,9 +58,13 @@ module Lazibi
58
58
  lines = @lines[progress..-1]
59
59
  lines.each_index do |index|
60
60
  # run through filters
61
+ # destructively
61
62
  l = filter_for_to_rb(lines, index, filters)
62
-
63
+ @lines[progress] = l
63
64
  safe_l = clean_block(clean_line(get_rest(l)))
65
+ if l =~ /dependencies/
66
+ puts l, safe_l, clean_line(get_rest(l))
67
+ end
64
68
  if start_anchor? safe_l
65
69
  relative_index_for_end = find_end( lines[index..-1], get_indent(l))
66
70
  unless relative_index_for_end
@@ -68,15 +72,19 @@ module Lazibi
68
72
  break
69
73
  end
70
74
  index_for_end = relative_index_for_end + index
75
+
71
76
  if relative_index_for_end == 0 && !comment_at_end(l)
72
- l = lines[index_for_end]
77
+ #l = lines[index_for_end]
73
78
  lines[index_for_end] = lines[index_for_end].rstrip + '; end'
74
79
  else
75
80
  lines[index_for_end] = lines[index_for_end] + "\n" + ' ' * get_indent(l) + "end"
76
81
  end
77
82
  head = @lines[0...progress]
78
83
  tail = lines[index..-1].join("\n").split("\n")
84
+
79
85
  @lines = head + tail
86
+
87
+
80
88
  progress += 1
81
89
  break
82
90
  end
@@ -126,7 +134,6 @@ module Lazibi
126
134
  if filters.include?( :optional_do )
127
135
  l = optional_do_filter_to_rb(lines, index)
128
136
  end
129
-
130
137
  # destructive behaviour
131
138
  lines[index] = l
132
139
  l
@@ -135,13 +142,24 @@ module Lazibi
135
142
  def optional_do_filter_to_rb(lines, index)
136
143
  l = lines[index]
137
144
  return l if l.strip == ''
138
- rest = get_rest l
145
+ return l if l =~ /[\{\[]\s*$/
146
+ rest = get_rest(l)
139
147
  return l if start_anchor?(rest) || middle_anchor?(rest) || end_anchor?(rest)
140
148
 
141
149
  l_check = clean_line l
142
- return l if nasty_line?(l_check)
143
- next_line = index + 1 < lines.size ? lines[index+1] : nil
144
- return l unless next_line
150
+ # bad code
151
+ # return l if nasty_line?(l_check)
152
+ next_line = ''
153
+ if index + 1 < lines.size
154
+ lines[index+1..-1].each_index do |i|
155
+ abs_i = index + 1 + i
156
+ next if lines[abs_i].strip == ''
157
+ next_line = lines[abs_i]
158
+ break
159
+ end
160
+ else
161
+ return l
162
+ end
145
163
  if get_indent(next_line) > get_indent(l)
146
164
  return l.rstrip + ' do'
147
165
  else
@@ -72,12 +72,12 @@ module Beautifier
72
72
 
73
73
  tline.gsub!(/#\{.*?\}/,"")
74
74
  tline.gsub!(/\\\"/,"'")
75
-
75
+
76
76
  # deal with nested syntax
77
-
77
+
78
78
  tline.gsub!(/"\/*?"/,"\"\"")
79
79
  tline.gsub!(/\/.*?[^\\]\//,"//")
80
-
80
+
81
81
  # again
82
82
  tline.gsub!(/".*?"/,"\"\"")
83
83
  tline.gsub!(/'.*?'/,"''")
@@ -0,0 +1,5 @@
1
+ it "should handle just a message" do
2
+ lambda {
3
+ Spec::Expectations.fail_with "the message"
4
+ }.should fail_with("the message")
5
+ end
@@ -0,0 +1,10 @@
1
+ describe Bowling do
2
+ before(:each) do
3
+ @bowling = Bowling.new
4
+ end
5
+
6
+ it "should score 0 for gutter game" do
7
+ 20.times { @bowling.hit(0) }
8
+ @bowling.score.should == 0
9
+ end
10
+ end
@@ -0,0 +1,11 @@
1
+ module Spec
2
+ module Mocks
3
+
4
+ describe "Mock ordering" do
5
+
6
+ before do
7
+ @mock = mock("test mock")
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ def require_dependencies(layer, dependencies)
2
+ dependencies.flatten.each do |dependency|
3
+ begin
4
+ require_dependency(dependency.to_s)
5
+ rescue LoadError => e
6
+ raise LoadError.new("Missing #{layer} #{dependency}.rb").copy_blame!(e)
7
+ rescue Exception => exception # error from loaded file
8
+ exception.blame_file! "=> #{layer} #{dependency}.rb"
9
+ raise
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,10 @@
1
+ it "should throw when told to" do
2
+ @mock.stub!(:something).and_throw(:blech)
3
+ lambda do
4
+ @mock.something
5
+ end.should throw_symbol(:blech)
6
+ end
7
+
8
+ lambda do
9
+ @mock.something
10
+ end.should throw_symbol(:blech)
@@ -0,0 +1,6 @@
1
+ it "should read several example names from file if --example is given an existing file name" do
2
+ options = parse(["--example", File.dirname(__FILE__) + '/examples.txt'])
3
+ options.examples.should eql([
4
+ "Sir, if you were my husband, I would poison your drink.",
5
+ "Madam, if you were my wife, I would drink it."])
6
+ end
@@ -0,0 +1,4 @@
1
+ it "should handle just a message"
2
+ lambda {
3
+ Spec::Expectations.fail_with "the message"
4
+ }.should fail_with("the message")
@@ -0,0 +1,7 @@
1
+ describe Bowling
2
+ before(:each)
3
+ @bowling = Bowling.new
4
+
5
+ it "should score 0 for gutter game"
6
+ 20.times { @bowling.hit(0) }
7
+ @bowling.score.should == 0
@@ -0,0 +1,7 @@
1
+ module Spec
2
+ module Mocks
3
+
4
+ describe "Mock ordering"
5
+
6
+ before
7
+ @mock = mock("test mock")
@@ -0,0 +1,9 @@
1
+ def require_dependencies(layer, dependencies)
2
+ dependencies.flatten.each do |dependency|
3
+ begin
4
+ require_dependency(dependency.to_s)
5
+ rescue LoadError => e
6
+ raise LoadError.new("Missing #{layer} #{dependency}.rb").copy_blame!(e)
7
+ rescue Exception => exception # error from loaded file
8
+ exception.blame_file! "=> #{layer} #{dependency}.rb"
9
+ raise
@@ -0,0 +1,9 @@
1
+ it "should throw when told to"
2
+ @mock.stub!(:something).and_throw(:blech)
3
+ lambda
4
+ @mock.something
5
+ end.should throw_symbol(:blech)
6
+
7
+ lambda
8
+ @mock.something
9
+ end.should throw_symbol(:blech)
@@ -0,0 +1,5 @@
1
+ it "should read several example names from file if --example is given an existing file name"
2
+ options = parse(["--example", File.dirname(__FILE__) + '/examples.txt'])
3
+ options.examples.should eql([
4
+ "Sir, if you were my husband, I would poison your drink.",
5
+ "Madam, if you were my wife, I would drink it."])
@@ -4,6 +4,30 @@ require 'pp'
4
4
  class TestLazibiFunctional < Test::Unit::TestCase
5
5
 
6
6
  def setup
7
+ # load fixtures
8
+ @ruby = {}
9
+ @beauty = {}
10
+ @simply = {}
11
+
12
+ ruby_dir = File.dirname(__FILE__) + '/fixtures/functional/ruby'
13
+ Dir.open(ruby_dir).each do |fn|
14
+ next unless fn =~ /[.]txt$/
15
+ @ruby[fn.scan(/(.*)[.]/).to_s.to_sym] = File.read(ruby_dir + "/#{fn}")
16
+ end
17
+
18
+ beauty_dir = File.dirname(__FILE__) + '/fixtures/functional/beauty'
19
+ Dir.open(beauty_dir).each do |fn|
20
+ next unless fn =~ /[.]txt$/
21
+ @beauty[fn.scan(/(.*)[.]/).to_s.to_sym] = File.read(beauty_dir + "/#{fn}")
22
+ end
23
+
24
+ simply_dir = File.dirname(__FILE__) + '/fixtures/functional/simply'
25
+ Dir.open(simply_dir).each do |fn|
26
+ next unless fn =~ /[.]txt$/
27
+ @simply[fn.scan(/(.*)[.]/).to_s.to_sym] = File.read(simply_dir + "/#{fn}")
28
+ end
29
+
30
+
7
31
  @r = Lazibi::Runner.new
8
32
  @r.load_config
9
33
  end
@@ -30,4 +54,22 @@ class TestLazibiFunctional < Test::Unit::TestCase
30
54
  assert_equal @r.to_py('it do' ), 'it do'
31
55
  assert_equal @r.to_rb("it\n abc" ), "it\n abc"
32
56
  end
57
+
58
+ def test_optional_do_filter
59
+ list = [:classical, :lambda, :brackets_block, :describe, :square_brackets, :do_block]
60
+ for token in list
61
+ assert_filter :optional_do, token
62
+ end
63
+ end
64
+
65
+
66
+ def assert_filter( filters, name )
67
+ if filters.class == 'Array'
68
+ f = filters
69
+ else
70
+ f = [filters]
71
+ end
72
+ assert_equal @r.to_py(@ruby[name], f), @simply[name]
73
+ assert_equal @r.to_rb(@simply[name], f), @ruby[name]
74
+ end
33
75
  end
data/test/test_unit.rb CHANGED
@@ -39,13 +39,18 @@ class TestLazibiUnit < Test::Unit::TestCase
39
39
  assert @r.start_anchor?( 'do |abc,def| ')
40
40
  assert !@r.start_anchor?( '"abc do "')
41
41
  assert !@r.start_anchor?( '"abc do |"')
42
+ assert !@r.start_anchor?( 'lambda')
42
43
  end
43
44
 
44
45
  def test_middle_anchor?
45
46
  assert !@r.middle_anchor?( '' )
46
47
  assert @r.middle_anchor?( 'rescue' )
48
+ assert !@r.middle_anchor?( 'lambda')
47
49
  end
48
50
 
51
+ def test_end_anchor?
52
+ assert !@r.end_anchor?( 'lambda' )
53
+ end
49
54
  def test_find_end
50
55
  assert_find :basic_class, 0, 0
51
56
  assert_find :class_with_def, 0, 1
data/website/index.html CHANGED
@@ -33,7 +33,7 @@
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.12</a>
36
+ <a href="http://rubyforge.org/projects/lazibi" class="numbers">0.1.13</a>
37
37
  </div>
38
38
  <p>
39
39
  Lazibi is a preprocessor that allows you to use Python style indentation in
@@ -180,6 +180,17 @@ Lazibi is written using Lazibi itself ( incrementally ). Personally I think
180
180
  autotest from http://www.zenspider.com/ZSS/Products/ZenTest/ is a must
181
181
  have, and Lazibi works pretty well using TDD.
182
182
  </p>
183
+ <p>
184
+ A few projects are used as test code:
185
+ </p>
186
+ <pre>
187
+ ActiveRecord, ActionMailer, ActionPack, ActiveSupport, Mongrel, RSpec, redMine.
188
+ </pre>
189
+ <p>
190
+ Lazibi was used to generate .py.rb files from these projects, and then to
191
+ .rb files back ( this is the default process ). Tests were then run to
192
+ ensure compatibility.
193
+ </p>
183
194
  <h2>Known issues</h2>
184
195
  <p>
185
196
  Here docs, eval, javascript related libs, and complex string evaluation are
@@ -212,7 +223,7 @@ Released under the MIT license (included)
212
223
  </p>
213
224
 
214
225
  <p class="coda">
215
- <a href="mailto:nfjinjing@gmail.com">Jinjing</a>, 20th June 2007<br>
226
+ <a href="mailto:nfjinjing@gmail.com">Jinjing</a>, 21st June 2007<br>
216
227
  Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
217
228
  </p>
218
229
  </div>
data/website/index.txt CHANGED
@@ -110,6 +110,11 @@ Start hacking in meta :/
110
110
 
111
111
  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.
112
112
 
113
+ A few projects are used as test code:
114
+ ActiveRecord, ActionMailer, ActionPack, ActiveSupport, Mongrel, RSpec, redMine.
115
+
116
+ Lazibi was used to generate .py.rb files from these projects, and then to .rb files back ( this is the default process ). Tests were then run to ensure compatibility.
117
+
113
118
  == Known issues
114
119
 
115
120
  Here docs, eval, javascript related libs, and complex string evaluation are currently not supported.
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.12
7
- date: 2007-06-21 00:00:00 +08:00
6
+ version: 0.1.13
7
+ date: 2007-06-22 00:00:00 +08:00
8
8
  summary: Python like syntax for Ruby
9
9
  require_paths:
10
10
  - lib
@@ -63,6 +63,18 @@ files:
63
63
  - test/fixtures/clean/semi_colon_after_end.txt
64
64
  - test/fixtures/clean/sep_line.txt
65
65
  - test/fixtures/clean/unless_problem.txt
66
+ - test/fixtures/functional/ruby/brackets_block.txt
67
+ - test/fixtures/functional/ruby/classical.txt
68
+ - test/fixtures/functional/ruby/describe.txt
69
+ - test/fixtures/functional/ruby/do_block.txt
70
+ - test/fixtures/functional/ruby/lambda.txt
71
+ - test/fixtures/functional/ruby/square_brackets.txt
72
+ - test/fixtures/functional/simply/brackets_block.txt
73
+ - test/fixtures/functional/simply/classical.txt
74
+ - test/fixtures/functional/simply/describe.txt
75
+ - test/fixtures/functional/simply/do_block.txt
76
+ - test/fixtures/functional/simply/lambda.txt
77
+ - test/fixtures/functional/simply/square_brackets.txt
66
78
  - test/fixtures/meta/basic_class.txt
67
79
  - test/fixtures/meta/case.txt
68
80
  - test/fixtures/meta/class_with_def.txt
@@ -143,6 +155,18 @@ extra_rdoc_files:
143
155
  - test/fixtures/clean/semi_colon_after_end.txt
144
156
  - test/fixtures/clean/sep_line.txt
145
157
  - test/fixtures/clean/unless_problem.txt
158
+ - test/fixtures/functional/ruby/brackets_block.txt
159
+ - test/fixtures/functional/ruby/classical.txt
160
+ - test/fixtures/functional/ruby/describe.txt
161
+ - test/fixtures/functional/ruby/do_block.txt
162
+ - test/fixtures/functional/ruby/lambda.txt
163
+ - test/fixtures/functional/ruby/square_brackets.txt
164
+ - test/fixtures/functional/simply/brackets_block.txt
165
+ - test/fixtures/functional/simply/classical.txt
166
+ - test/fixtures/functional/simply/describe.txt
167
+ - test/fixtures/functional/simply/do_block.txt
168
+ - test/fixtures/functional/simply/lambda.txt
169
+ - test/fixtures/functional/simply/square_brackets.txt
146
170
  - test/fixtures/meta/basic_class.txt
147
171
  - test/fixtures/meta/case.txt
148
172
  - test/fixtures/meta/class_with_def.txt