lazibi 0.1.2 → 0.1.3

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.
data/History.txt CHANGED
@@ -1,3 +1,7 @@
1
+ == 0.1.3 2007-06-14
2
+
3
+ * Fix last release unusable bug :|
4
+
1
5
  == 0.1.2 2007-06-14
2
6
 
3
7
  * homepage, rdoc etc
data/README.txt CHANGED
@@ -44,12 +44,12 @@ Even sexier migrations ( with sexy_migration Rails plugin )
44
44
 
45
45
  == Download
46
46
 
47
- gem install lazibi ( not yet available )
47
+ gem install lazibi
48
48
  svn checkout http://lazibi.googlecode.com/svn/trunk/real lazibi
49
49
 
50
50
  == Install
51
51
 
52
- from source
52
+ If from source
53
53
 
54
54
  rake gem
55
55
  gem install pkg/lazibi-0.1.0.gem
@@ -60,7 +60,8 @@ Bootstrap
60
60
 
61
61
  mkdir shiny_project
62
62
  cd shiny_project
63
- svn co $svn_path/shiny_project/trunk real # or hand create your project in the "real" folder
63
+ # put trunk in real
64
+ svn co $svn_path/shiny_project/trunk real
64
65
  lazibi
65
66
 
66
67
  Make sure everything still works
@@ -80,10 +81,10 @@ Start hacking ruby/python :/
80
81
 
81
82
  After bootstrap, edit config/boot.py.rb in meta
82
83
 
83
- STDERR.puts %(Cannot find gem for Rails ~>#{version}.0:
84
- Install the missing gem with 'gem install -v=#{version} rails', or
85
- change environment.rb to define RAILS_GEM_VERSION with your desired version.
86
- )
84
+ STDERR.puts %(Cannot find gem for Rails ~>#{version}.0:
85
+ Install the missing gem with 'gem install -v=#{version} rails', or
86
+ change environment.rb to define RAILS_GEM_VERSION with your desired version.
87
+ )
87
88
 
88
89
  === Manually create meta files
89
90
 
data/Rakefile CHANGED
@@ -82,7 +82,7 @@ hoe.remote_rdoc_dir = File.join(PATH.gsub(/^#{RUBYFORGE_PROJECT}\/?/,''), 'rdoc'
82
82
  desc 'Generate website files'
83
83
  task :website_generate do
84
84
  Dir['website/**/*.txt'].each do |txt|
85
- sh %{ ruby scripts/txt2html #{txt} > #{txt.gsub(/txt$/,'html')} }
85
+ sh %{ ruby scripts/rdoc2html #{txt} > #{txt.gsub(/txt$/,'html')} }
86
86
  end
87
87
  end
88
88
 
@@ -2,8 +2,8 @@ module Lazibi #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 1
5
- TINY = 2
5
+ TINY = 3
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
9
- end
9
+ end
data/lib/lazibi.rb CHANGED
@@ -3,274 +3,274 @@ require 'find'
3
3
  require 'yaml'
4
4
 
5
5
  module Lazibi
6
- class Lazibi
7
- attr :config
6
+ class Lazibi
7
+ attr :config
8
8
 
9
- def load_config
10
- @config = {}
11
- default = {:exclude => ['^vendor']}
12
- if File.exists? '.lazibi'
13
- f = open '.lazibi'
14
- h = YAML.load(f)
15
- for k in h.keys
16
- begin
17
- @config[k.to_sym] = h[k]
18
- rescue
19
- raise "wrong pattern #{h[k]}"
9
+ def load_config
10
+ @config = {}
11
+ default = {:exclude => ['^vendor']}
12
+ if File.exists? '.lazibi'
13
+ f = open '.lazibi'
14
+ h = YAML.load(f)
15
+ for k in h.keys
16
+ begin
17
+ @config[k.to_sym] = h[k]
18
+ rescue
19
+ raise "wrong pattern #{h[k]}"
20
+ end
20
21
  end
21
22
  end
23
+ @config = default
22
24
  end
23
- @config = default
24
- end
25
25
 
26
26
 
27
- def init_meta
28
- # backup real
29
- real_dir = 'real'
30
- if File.directory? real_dir
31
- backup_dir = '.backup'
32
- unless File.exists? backup_dir
33
- FileUtils.cp_r real_dir, backup_dir
27
+ def init_meta
28
+ # backup real
29
+ real_dir = 'real'
30
+ if File.directory? real_dir
31
+ backup_dir = '.backup'
32
+ unless File.exists? backup_dir
33
+ FileUtils.cp_r real_dir, backup_dir
34
+ end
35
+ else
36
+ raise 'No directory named "real"'
34
37
  end
35
- else
36
- raise 'No directory named "real"'
37
- end
38
38
 
39
- # generate meta
40
- meta_dir = 'meta'
41
- if File.exists? meta_dir
42
- if File.directory? meta_dir
43
- FileUtils.rm_rf meta_dir
44
- else
45
- raise 'meta directory is reserved for instiki'
39
+ # generate meta
40
+ meta_dir = 'meta'
41
+ if File.exists? meta_dir
42
+ if File.directory? meta_dir
43
+ FileUtils.rm_rf meta_dir
44
+ else
45
+ raise 'meta directory is reserved for instiki'
46
+ end
46
47
  end
47
- end
48
48
 
49
49
 
50
- puts "Generating meta files:"
51
- puts "-" * 40
52
- Dir.glob(File.join('real', '**', '*.rb')) do |f|
53
- if skip_path? f
54
- puts "- #{f}"
55
- next
56
- end
50
+ puts "Generating meta files:"
51
+ puts "-" * 40
52
+ Dir.glob(File.join('real', '**', '*.rb')) do |f|
53
+ if skip_path? f
54
+ puts "- #{f}"
55
+ next
56
+ end
57
57
 
58
- next unless File.file? f
59
- next if f =~ /.*[.]py[.]rb$/
60
- py_path = convert_path f
61
- dir_name = File.dirname py_path
58
+ next unless File.file? f
59
+ next if f =~ /.*[.]py[.]rb$/
60
+ py_path = convert_path f
61
+ dir_name = File.dirname py_path
62
62
 
63
- puts ' ' + py_path
64
- FileUtils.mkdir_p dir_name
65
- make_py f, py_path
66
- end
63
+ puts ' ' + py_path
64
+ FileUtils.mkdir_p dir_name
65
+ make_py f, py_path
66
+ end
67
67
 
68
- puts "-" * 40
69
- end
68
+ puts "-" * 40
69
+ end
70
70
 
71
71
 
72
- def skip_path?(path)
73
- return false if @config[:exclude].nil?
74
- @config[:exclude].each do |f|
75
- offset = 'meta'.size + 1
76
- return true if path[offset..-1] =~ Regexp.new(f)
72
+ def skip_path?(path)
73
+ return false if @config[:exclude].nil?
74
+ @config[:exclude].each do |f|
75
+ offset = 'meta'.size + 1
76
+ return true if path[offset..-1] =~ Regexp.new(f)
77
+ end
78
+ false
77
79
  end
78
- false
79
- end
80
80
 
81
- def convert_path( path )
82
- if path =~ /.*[.]py[.]rb/
83
- from = 'meta'
84
- to = 'real'
85
- old_ext = '.py.rb'
86
- new_ext = '.rb'
87
- else
88
- from = 'real'
89
- to = 'meta'
90
- old_ext = '.rb'
91
- new_ext = '.py.rb'
92
- end
81
+ def convert_path( path )
82
+ if path =~ /.*[.]py[.]rb/
83
+ from = 'meta'
84
+ to = 'real'
85
+ old_ext = '.py.rb'
86
+ new_ext = '.rb'
87
+ else
88
+ from = 'real'
89
+ to = 'meta'
90
+ old_ext = '.rb'
91
+ new_ext = '.py.rb'
92
+ end
93
93
 
94
- dir_name = File.dirname path
95
- base_name = File.basename path, old_ext
94
+ dir_name = File.dirname path
95
+ base_name = File.basename path, old_ext
96
96
 
97
- new_dir_name = to + dir_name[from.size..-1]
98
- new_path = File.join new_dir_name, base_name + new_ext
99
- end
97
+ new_dir_name = to + dir_name[from.size..-1]
98
+ new_path = File.join new_dir_name, base_name + new_ext
99
+ end
100
100
 
101
- def make_py( rb_path, py_path )
102
- rb = open(rb_path).read
101
+ def make_py( rb_path, py_path )
102
+ rb = open(rb_path).read
103
103
 
104
- py_file = open(py_path, 'w')
105
- py_file.write(to_py(rb))
106
- py_file.close
107
- end
104
+ py_file = open(py_path, 'w')
105
+ py_file.write(to_py(rb))
106
+ py_file.close
107
+ end
108
108
 
109
- def to_py( rb )
110
- py = []
111
- rb.split("\n").each do |l|
112
- if l.strip =~ /^end$/
113
- next
114
- end
115
- s = l
116
- if l.rstrip[-3..-1] == 'end'
117
- s = l.rstrip[0...-3].rstrip
118
- end
109
+ def to_py( rb )
110
+ py = []
111
+ rb.split("\n").each do |l|
112
+ if l.strip =~ /^end$/
113
+ next
114
+ end
115
+ s = l
116
+ if l.rstrip[-4..-1] == ' end'
117
+ s = l.rstrip[0...-3].rstrip
118
+ end
119
119
 
120
- py << s
121
- end
120
+ py << s
121
+ end
122
122
 
123
- py.join("\n")
124
- end
123
+ py.join("\n")
124
+ end
125
125
 
126
126
 
127
- def run
128
- load_config
129
- init_meta unless File.exists? '.backup'
130
- @metas = {}
131
- while true
132
- current_metas = get_metas
133
- current_metas.each_pair do |meta, m_time|
134
- if @metas[meta] != m_time
135
- update_rb meta
136
- puts "+ #{meta}..."
127
+ def run
128
+ load_config
129
+ init_meta unless File.exists? '.backup'
130
+ @metas = {}
131
+ while true
132
+ current_metas = get_metas
133
+ current_metas.each_pair do |meta, m_time|
134
+ if @metas[meta] != m_time
135
+ update_rb meta
136
+ puts "+ #{meta}..."
137
+ end
137
138
  end
139
+ @metas = current_metas
140
+ sleep 1
138
141
  end
139
- @metas = current_metas
140
- sleep 1
141
142
  end
142
- end
143
143
 
144
- def get_metas
145
- meta_files = File.join('meta', "**", "*.py.rb")
146
- metas = {}
147
- Dir.glob(meta_files).each do |t|
148
- metas[t] = File.mtime t
144
+ def get_metas
145
+ meta_files = File.join('meta', "**", "*.py.rb")
146
+ metas = {}
147
+ Dir.glob(meta_files).each do |t|
148
+ metas[t] = File.mtime t
149
+ end
150
+ metas
149
151
  end
150
- metas
151
- end
152
152
 
153
- def update_rb( meta_name )
154
- meta = open(meta_name)
155
- real_name = convert_path meta_name
156
- begin
157
- real_rb = open( real_name, 'w' )
158
- real_rb.write(to_rb(meta.read))
159
- rescue Exception => e
160
- puts e
161
- ensure
162
- real_rb.close unless real_rb.nil?
153
+ def update_rb( meta_name )
154
+ meta = open(meta_name)
155
+ real_name = convert_path meta_name
156
+ begin
157
+ real_rb = open( real_name, 'w' )
158
+ real_rb.write(to_rb(meta.read))
159
+ rescue Exception => e
160
+ puts e
161
+ ensure
162
+ real_rb.close unless real_rb.nil?
163
+ end
164
+ meta.close
163
165
  end
164
- meta.close
165
- end
166
166
 
167
- def to_rb( content )
168
- insert_end content
169
- end
167
+ def to_rb( content )
168
+ insert_end content
169
+ end
170
170
 
171
- def insert_end( content )
172
- @lines = content.split("\n")
173
- progress = 0
174
- while progress < @lines.size
175
- lines = @lines[progress..-1]
176
- lines.each_index do |index|
177
- l = lines[index]
178
- if start_anchor?(get_rest(l))
179
- relative_index_for_end = find_end( lines[index..-1], get_indent(l))
180
- unless relative_index_for_end
171
+ def insert_end( content )
172
+ @lines = content.split("\n")
173
+ progress = 0
174
+ while progress < @lines.size
175
+ lines = @lines[progress..-1]
176
+ lines.each_index do |index|
177
+ l = lines[index]
178
+ if start_anchor?(get_rest(l))
179
+ relative_index_for_end = find_end( lines[index..-1], get_indent(l))
180
+ unless relative_index_for_end
181
+ progress += 1
182
+ break
183
+ end
184
+ index_for_end = relative_index_for_end + index
185
+ lines[index_for_end] = lines[index_for_end] + "\n" + ' ' * get_indent(l) + "end"
186
+ head = @lines[0...progress]
187
+ tail = lines[index..-1].join("\n").split("\n")
188
+ @lines = head + tail
181
189
  progress += 1
182
190
  break
183
191
  end
184
- index_for_end = relative_index_for_end + index
185
- lines[index_for_end] = lines[index_for_end] + "\n" + ' ' * get_indent(l) + "end"
186
- head = @lines[0...progress]
187
- tail = lines[index..-1].join("\n").split("\n")
188
- @lines = head + tail
189
192
  progress += 1
190
- break
191
193
  end
192
- progress += 1
193
194
  end
194
- end
195
195
 
196
- result = @lines.join("\n")
197
- end
196
+ result = @lines.join("\n")
197
+ end
198
198
 
199
- def find_end( lines, indent )
200
- return 0 if lines.size == 1
199
+ def find_end( lines, indent )
200
+ return 0 if lines.size == 1
201
201
 
202
- anchor = 0
202
+ anchor = 0
203
203
 
204
- lines = lines[1..-1]
205
- lines.each_index do |i|
206
- l = lines[i]
207
- next if l.strip == ''
208
- if l.strip =~ /^#/
209
- if get_indent(l) > indent
210
- anchor = i + 1
211
- end
212
- next
213
- end
214
- return anchor if get_indent(l) < indent
215
- if get_indent(l) == indent
216
- rest = get_rest l
217
- if middle_anchor? rest
218
- anchor = i + 1
204
+ lines = lines[1..-1]
205
+ lines.each_index do |i|
206
+ l = lines[i]
207
+ next if l.strip == ''
208
+ if l.strip =~ /^#/
209
+ if get_indent(l) > indent
210
+ anchor = i + 1
211
+ end
219
212
  next
220
- elsif end_anchor? rest
221
- return false
222
- else
223
- return anchor
224
213
  end
214
+ return anchor if get_indent(l) < indent
215
+ if get_indent(l) == indent
216
+ rest = get_rest l
217
+ if middle_anchor? rest
218
+ anchor = i + 1
219
+ next
220
+ elsif end_anchor? rest
221
+ return false
222
+ else
223
+ return anchor
224
+ end
225
+ end
226
+ anchor = i + 1
225
227
  end
226
- anchor = i + 1
228
+ return anchor
227
229
  end
228
- return anchor
229
- end
230
230
 
231
- def get_indent( line )
232
- line =~ /( *)/
233
- $1.size
234
- end
231
+ def get_indent( line )
232
+ line =~ /( *)/
233
+ $1.size
234
+ end
235
235
 
236
- def get_rest( line )
237
- line =~/( *)/
238
- $'
239
- end
236
+ def get_rest( line )
237
+ line =~/( *)/
238
+ $'
239
+ end
240
240
 
241
- def begin_keys
242
- s = %w( module def class if begin for while unless do )
243
- m = ['\sdo\s*$|\sdo\s+(\|[^|]+\|)']
244
- s.map!{|key| "^#{key}\\b"}
241
+ def begin_keys
242
+ s = %w( module def class if begin for while unless do )
243
+ m = ['\sdo\s*$|\sdo\s+(\|[^|]+\|)']
244
+ s.map!{|key| "^#{key}\\b"}
245
245
 
246
- Regexp.new(s.concat(m).join('|'))
247
- end
246
+ Regexp.new(s.concat(m).join('|'))
247
+ end
248
248
 
249
249
 
250
250
 
251
- def middle_keys
252
- s = %w( rescue else ensure elsif )
253
- s.map!{|key| "^#{key}\\b"}
254
- Regexp.new(s.join('|'))
255
- end
251
+ def middle_keys
252
+ s = %w( rescue else ensure elsif )
253
+ s.map!{|key| "^#{key}\\b"}
254
+ Regexp.new(s.join('|'))
255
+ end
256
256
 
257
- def end_keys
258
- /^end\b/
259
- end
257
+ def end_keys
258
+ /^end\b/
259
+ end
260
260
 
261
- def start_anchor?( str )
262
- str.gsub! /"[^"]+"|'[^']+'/, ''
263
- return false if str =~ /^#/
264
- return true if str =~ begin_keys
265
- end
261
+ def start_anchor?( str )
262
+ str.gsub! /"[^"]+"|'[^']+'/, ''
263
+ return false if str =~ /^#/
264
+ return true if str =~ begin_keys
265
+ end
266
266
 
267
- def middle_anchor?( str )
268
- str =~ middle_keys
269
- end
267
+ def middle_anchor?( str )
268
+ str =~ middle_keys
269
+ end
270
270
 
271
- def end_anchor?(str)
272
- str =~ end_keys
271
+ def end_anchor?(str)
272
+ str =~ end_keys
273
+ end
273
274
  end
274
275
  end
275
- end
276
- require 'lazibi/version'
276
+ require 'lazibi/version'
data/test/test_unit.rb CHANGED
@@ -42,7 +42,7 @@ class TestLazibi < Test::Unit::TestCase
42
42
  assert @r.middle_anchor?( 'rescue' )
43
43
  end
44
44
 
45
- def test_find_end
45
+ def test_find_
46
46
  assert_find :basic_class, 0, 0
47
47
  assert_find :class_with_def, 0, 1
48
48
  assert_find :class_with_def, 0, 1
data/website/index.html CHANGED
@@ -5,7 +5,7 @@
5
5
  <link rel="stylesheet" href="stylesheets/screen.css" type="text/css" media="screen" />
6
6
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
7
7
  <title>
8
- lazibi
8
+ Welcome to Lazibi
9
9
  </title>
10
10
  <script src="javascripts/rounded_corners_lite.inc.js" type="text/javascript"></script>
11
11
  <style>
@@ -30,58 +30,159 @@
30
30
  <body>
31
31
  <div id="main">
32
32
 
33
- <h1>lazibi</h1>
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.2</a>
36
+ <a href="http://rubyforge.org/projects/lazibi" class="numbers">0.1.3</a>
37
37
  </div>
38
- <h1>&#x2192; &#8216;lazibi&#8217;</h1>
38
+ <p>
39
+ Lazibi is a meta language which allows you to use Python like syntax (
40
+ tab-indented block ) in Ruby. It&#8217;s backward compatible with plain
41
+ Ruby if you indent your blocks properly.
42
+ </p>
43
+ <p>
44
+ 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.
46
+ </p>
47
+ <h2>Examples</h2>
48
+ <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
+ More DIY Rails controller
61
+ </p>
62
+ <pre>
63
+ class AuctionsController &lt; ApplicationController
64
+
65
+ def index
66
+ @auctions = Auction.paginate :page =&gt; params[:page]
67
+
68
+ respond_to do |format|
69
+ format.html # index.rhtml
70
+ format.xml { render :xml =&gt; @auctions.to_xml }
71
+ </pre>
72
+ <p>
73
+ Even sexier migrations ( with sexy_migration Rails plugin )
74
+ </p>
75
+ <pre>
76
+ class CreateOrders &lt; ActiveRecord::Migration
77
+ def self.up
78
+ create_table :orders do
79
+ fkey :user
80
+ fkey :auction
81
+ integer :bid_type
82
+ timestamps!
83
+
84
+ def self.down
85
+ drop_table :orders
86
+ </pre>
87
+ <h2>Download</h2>
88
+ <pre>
89
+ gem install lazibi
90
+ svn checkout http://lazibi.googlecode.com/svn/trunk/real lazibi
91
+ </pre>
92
+ <h2>Install</h2>
93
+ <p>
94
+ If from source
95
+ </p>
96
+ <pre>
97
+ rake gem
98
+ gem install pkg/lazibi-0.1.0.gem
99
+ </pre>
100
+ <h2>Usage</h2>
101
+ <p>
102
+ Bootstrap
103
+ </p>
104
+ <pre>
105
+ mkdir shiny_project
106
+ cd shiny_project
107
+ # put trunk in real
108
+ svn co $svn_path/shiny_project/trunk real
109
+ lazibi
110
+ </pre>
111
+ <p>
112
+ Make sure everything still works
113
+ </p>
114
+ <pre>
115
+ _start_a_new_terminal_
116
+ cd shiny_project/real
117
+ rake test / autotest
118
+ </pre>
119
+ <p>
120
+ Start hacking ruby/python :/
121
+ </p>
122
+ <pre>
123
+ cd shiny_project
124
+ $your_editor meta
125
+ </pre>
126
+ <h2>Tips</h2>
127
+ <h3>Rails fix</h3>
128
+ <p>
129
+ After bootstrap, edit config/boot.py.rb in meta
130
+ </p>
131
+ <pre>
132
+ STDERR.puts %(Cannot find gem for Rails ~&gt;#{version}.0:
133
+ Install the missing gem with 'gem install -v=#{version} rails', or
134
+ change environment.rb to define RAILS_GEM_VERSION with your desired version.
135
+ )
136
+ </pre>
137
+ <h3>Manually create meta files</h3>
138
+ <ul>
139
+ <li>Bootstrap your project as usual, just don&#8217;t run lazibi
140
+
141
+ </li>
142
+ <li>setup environment
143
+
144
+ <pre>
145
+ mkdir .backup
146
+ mkdir meta
147
+ </pre>
148
+ </li>
149
+ <li>run lazibi
150
+
151
+ </li>
152
+ <li>create .py.rb files in corresponding directories inside &#8216;meta&#8217;,
153
+ .rb files will be created and updated in &#8216;real&#8217; as usual
154
+
155
+ </li>
156
+ </ul>
157
+ <h2>Known issues</h2>
158
+ <p>
159
+ Here document like long strings are likely to screw up code generation, try
160
+ to indent long strings like the fix for rails
161
+ </p>
162
+ <h2>To Do</h2>
163
+ <ul>
164
+ <li>Here doc fix
165
+
166
+ </li>
167
+ <li>Two way sync between real and meta
168
+
169
+ </li>
170
+ <li>Erb for rhtml
171
+
172
+ </li>
173
+ </ul>
174
+ <h2>Author</h2>
175
+ <ul>
176
+ <li>Jinjing (mailto:nfjinjing@gmail.com)
177
+
178
+ </li>
179
+ </ul>
180
+ <p>
181
+ Released under the MIT license (included)
182
+ </p>
39
183
 
40
-
41
- <h2>What</h2>
42
-
43
-
44
- <h2>Installing</h2>
45
-
46
-
47
- <pre syntax="ruby">sudo gem install lazibi</pre>
48
-
49
- <h2>The basics</h2>
50
-
51
-
52
- <h2>Demonstration of usage</h2>
53
-
54
-
55
- <h2>Forum</h2>
56
-
57
-
58
- <p><a href="http://groups.google.com/group/lazibi">http://groups.google.com/group/lazibi</a></p>
59
-
60
-
61
- <p><span class="caps">TODO</span> &#8211; create Google Group &#8211; lazibi</p>
62
-
63
-
64
- <h2>How to submit patches</h2>
65
-
66
-
67
- <p>Read the <a href="http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/">8 steps for fixing other people&#8217;s code</a> and for section <a href="http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/#8b-google-groups">8b: Submit patch to Google Groups</a>, use the Google Group above.</p>
68
-
69
-
70
- <p>The trunk repository is <code>svn://rubyforge.org/var/svn/lazibi/trunk</code> for anonymous access.</p>
71
-
72
-
73
- <h2>License</h2>
74
-
75
-
76
- <p>This code is free to use under the terms of the <span class="caps">MIT</span> license.</p>
77
-
78
-
79
- <h2>Contact</h2>
80
-
81
-
82
- <p>Comments are welcome. Send an email to <a href="mailto:nfjinjing@gmail.com">Jinjing</a> email.</p>
83
184
  <p class="coda">
84
- <a href="mailto:drnicwilliams@gmail.com">Dr Nic</a>, 14th June 2007<br>
185
+ <a href="mailto:nfjinjing@gmail.com">Jinjing</a>, 14th June 2007<br>
85
186
  Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
86
187
  </p>
87
188
  </div>
data/website/index.txt CHANGED
@@ -1,38 +1,117 @@
1
- h1. lazibi
1
+ == Welcome to Lazibi
2
2
 
3
- h1. &#x2192; 'lazibi'
3
+ Lazibi is a meta language which allows you to use Python like syntax ( tab-indented block ) in
4
+ Ruby. It's backward compatible with plain Ruby if you indent your blocks properly.
4
5
 
6
+ 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.
5
8
 
6
- h2. What
9
+ == Examples
7
10
 
11
+ Is this Ruby or Python?
8
12
 
9
- h2. Installing
13
+ class MyClass
14
+
15
+ def hello
16
+ puts 'hello world'
17
+
18
+ MyClass.new.hello
10
19
 
11
- <pre syntax="ruby">sudo gem install lazibi</pre>
20
+ More DIY Rails controller
12
21
 
13
- h2. The basics
22
+ class AuctionsController < ApplicationController
14
23
 
24
+ def index
25
+ @auctions = Auction.paginate :page => params[:page]
26
+
27
+ respond_to do |format|
28
+ format.html # index.rhtml
29
+ format.xml { render :xml => @auctions.to_xml }
15
30
 
16
- h2. Demonstration of usage
17
31
 
32
+ Even sexier migrations ( with sexy_migration Rails plugin )
18
33
 
34
+ class CreateOrders < ActiveRecord::Migration
35
+ def self.up
36
+ create_table :orders do
37
+ fkey :user
38
+ fkey :auction
39
+ integer :bid_type
40
+ timestamps!
19
41
 
20
- h2. Forum
42
+ def self.down
43
+ drop_table :orders
21
44
 
22
- "http://groups.google.com/group/lazibi":http://groups.google.com/group/lazibi
45
+ == Download
23
46
 
24
- TODO - create Google Group - lazibi
47
+ gem install lazibi
48
+ svn checkout http://lazibi.googlecode.com/svn/trunk/real lazibi
25
49
 
26
- h2. How to submit patches
50
+ == Install
27
51
 
28
- Read the "8 steps for fixing other people's code":http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/ and for section "8b: Submit patch to Google Groups":http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/#8b-google-groups, use the Google Group above.
52
+ If from source
29
53
 
30
- The trunk repository is <code>svn://rubyforge.org/var/svn/lazibi/trunk</code> for anonymous access.
54
+ rake gem
55
+ gem install pkg/lazibi-0.1.0.gem
31
56
 
32
- h2. License
57
+ == Usage
33
58
 
34
- This code is free to use under the terms of the MIT license.
59
+ Bootstrap
35
60
 
36
- h2. Contact
61
+ mkdir shiny_project
62
+ cd shiny_project
63
+ # put trunk in real
64
+ svn co $svn_path/shiny_project/trunk real
65
+ lazibi
37
66
 
38
- Comments are welcome. Send an email to "Jinjing":mailto:nfjinjing@gmail.com email.
67
+ Make sure everything still works
68
+
69
+ _start_a_new_terminal_
70
+ cd shiny_project/real
71
+ rake test / autotest
72
+
73
+ Start hacking ruby/python :/
74
+
75
+ cd shiny_project
76
+ $your_editor meta
77
+
78
+ == Tips
79
+
80
+ === Rails fix
81
+
82
+ After bootstrap, edit config/boot.py.rb in meta
83
+
84
+ STDERR.puts %(Cannot find gem for Rails ~>#{version}.0:
85
+ Install the missing gem with 'gem install -v=#{version} rails', or
86
+ change environment.rb to define RAILS_GEM_VERSION with your desired version.
87
+ )
88
+
89
+ === Manually create meta files
90
+
91
+ * Bootstrap your project as usual, just don't run lazibi
92
+
93
+ * setup environment
94
+
95
+ mkdir .backup
96
+ mkdir meta
97
+
98
+ * run lazibi
99
+
100
+ * create .py.rb files in corresponding directories inside 'meta', .rb files will be created and updated in 'real' as usual
101
+
102
+
103
+ == Known issues
104
+
105
+ Here document like long strings are likely to screw up code generation, try
106
+ to indent long strings like the fix for rails
107
+
108
+ == To Do
109
+
110
+ * Here doc fix
111
+ * Two way sync between real and meta
112
+ * Erb for rhtml
113
+
114
+ == Author
115
+ * Jinjing (mailto:nfjinjing@gmail.com)
116
+
117
+ Released under the MIT license (included)
@@ -37,7 +37,7 @@
37
37
  </div>
38
38
  <%= body %>
39
39
  <p class="coda">
40
- <a href="mailto:drnicwilliams@gmail.com">Dr Nic</a>, <%= modified.pretty %><br>
40
+ <a href="mailto:nfjinjing@gmail.com">Jinjing</a>, <%= modified.pretty %><br>
41
41
  Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
42
42
  </p>
43
43
  </div>
metadata CHANGED
@@ -3,7 +3,7 @@ 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.2
6
+ version: 0.1.3
7
7
  date: 2007-06-14 00:00:00 +08:00
8
8
  summary: Python like syntax for Ruby
9
9
  require_paths: