sinatra 1.1.4 → 1.2.0
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/AUTHORS +5 -1
- data/CHANGES +47 -2
- data/Gemfile +53 -0
- data/README.de.rdoc +732 -85
- data/README.es.rdoc +725 -75
- data/README.fr.rdoc +29 -16
- data/README.hu.rdoc +4 -4
- data/README.jp.rdoc +29 -16
- data/README.pt-br.rdoc +6 -6
- data/README.rdoc +664 -91
- data/README.ru.rdoc +257 -75
- data/README.zh.rdoc +889 -111
- data/Rakefile +7 -32
- data/lib/sinatra/base.rb +133 -66
- data/lib/sinatra/showexceptions.rb +25 -0
- data/sinatra.gemspec +10 -18
- data/test/builder_test.rb +6 -0
- data/test/coffee_test.rb +1 -1
- data/test/encoding_test.rb +4 -3
- data/test/erubis_test.rb +6 -0
- data/test/filter_test.rb +105 -1
- data/test/haml_test.rb +2 -1
- data/test/helper.rb +2 -0
- data/test/helpers_test.rb +105 -13
- data/test/less_test.rb +6 -0
- data/test/liquid_test.rb +2 -1
- data/test/markaby_test.rb +23 -1
- data/test/markdown_test.rb +3 -2
- data/test/nokogiri_test.rb +2 -1
- data/test/radius_test.rb +3 -2
- data/test/rdoc_test.rb +3 -2
- data/test/routing_test.rb +38 -1
- data/test/sass_test.rb +1 -1
- data/test/scss_test.rb +1 -1
- data/test/slim_test.rb +98 -0
- data/test/templates_test.rb +53 -0
- data/test/textile_test.rb +2 -1
- data/test/views/a/in_a.str +1 -0
- data/test/views/{ascii.haml → ascii.erb} +1 -1
- data/test/views/b/in_b.str +1 -0
- data/test/views/hello.slim +1 -0
- data/test/views/layout2.slim +3 -0
- data/test/views/{utf8.haml → utf8.erb} +1 -1
- metadata +42 -161
data/README.ru.rdoc
CHANGED
|
@@ -39,6 +39,10 @@ Sinatra — это предметно-ориентированный язык (D
|
|
|
39
39
|
.. что-то удалить ..
|
|
40
40
|
end
|
|
41
41
|
|
|
42
|
+
options '/' do
|
|
43
|
+
.. что-то ответить ..
|
|
44
|
+
end
|
|
45
|
+
|
|
42
46
|
Маршруты сверяются с запросом по очередности определения. Первый же совпавший с запросом маршрут и будет вызван.
|
|
43
47
|
|
|
44
48
|
Шаблоны маршрутов могут включать в себя параметры доступные в
|
|
@@ -168,9 +172,9 @@ Sinatra — это предметно-ориентированный язык (D
|
|
|
168
172
|
|
|
169
173
|
=== Haml шаблоны
|
|
170
174
|
|
|
171
|
-
|
|
175
|
+
<tt>haml</tt> gem/библиотека необходима для рендеринга HAML шаблонов:
|
|
172
176
|
|
|
173
|
-
|
|
177
|
+
# Вам нужно будет подключить haml gem в приложении
|
|
174
178
|
require 'haml'
|
|
175
179
|
|
|
176
180
|
get '/' do
|
|
@@ -193,33 +197,44 @@ Haml gem/библиотека необходима для рендеринга H
|
|
|
193
197
|
|
|
194
198
|
=== Erb шаблоны
|
|
195
199
|
|
|
196
|
-
|
|
200
|
+
# Вам нужно будет подключить erb в приложении
|
|
197
201
|
require 'erb'
|
|
198
202
|
|
|
199
203
|
get '/' do
|
|
200
204
|
erb :index
|
|
201
205
|
end
|
|
202
206
|
|
|
203
|
-
Отрисует <tt>./views/index.erb</tt
|
|
207
|
+
Отрисует <tt>./views/index.erb</tt>.
|
|
204
208
|
|
|
205
209
|
=== Erubis шаблоны
|
|
206
210
|
|
|
207
|
-
|
|
211
|
+
<tt>erubis</tt> gem/библиотека необходима для рендеринга Erubis шаблонов:
|
|
208
212
|
|
|
209
|
-
|
|
213
|
+
# Вам нужно будет подключить Erubis в приложении
|
|
210
214
|
require 'erubis'
|
|
211
215
|
|
|
212
216
|
get '/' do
|
|
213
217
|
erubis :index
|
|
214
218
|
end
|
|
215
219
|
|
|
216
|
-
Отрисует <tt>./views/index.erubis</tt
|
|
220
|
+
Отрисует <tt>./views/index.erubis</tt>.
|
|
221
|
+
|
|
222
|
+
Также возможно заменить Erb на Erubis:
|
|
223
|
+
|
|
224
|
+
require 'erubis'
|
|
225
|
+
Tilt.register :erb, Tilt[:erubis]
|
|
226
|
+
|
|
227
|
+
get '/' do
|
|
228
|
+
erb :index
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
Отрисует <tt>./views/index.erb</tt> с помощью Erubis.
|
|
217
232
|
|
|
218
233
|
=== Builder шаблоны
|
|
219
234
|
|
|
220
|
-
|
|
235
|
+
<tt>builder</tt> gem/библиотека необходима для рендеринга builder шаблонов:
|
|
221
236
|
|
|
222
|
-
|
|
237
|
+
# Вам нужно будет подключить builder в приложении
|
|
223
238
|
require 'builder'
|
|
224
239
|
|
|
225
240
|
get '/' do
|
|
@@ -230,9 +245,9 @@ Builder gem/библиотека необходима для рендеринг
|
|
|
230
245
|
|
|
231
246
|
=== Nokogiri шаблоны
|
|
232
247
|
|
|
233
|
-
|
|
248
|
+
<tt>nokogiri</tt> gem/библиотека необходима для рендеринга nokogiri шаблонов:
|
|
234
249
|
|
|
235
|
-
|
|
250
|
+
# Вам нужно будет подключить nokogiri в приложении
|
|
236
251
|
require 'nokogiri'
|
|
237
252
|
|
|
238
253
|
get '/' do
|
|
@@ -243,9 +258,9 @@ Nokogiri gem/библиотека необходима для рендеринг
|
|
|
243
258
|
|
|
244
259
|
=== Sass шаблоны
|
|
245
260
|
|
|
246
|
-
|
|
261
|
+
<tt>haml</tt> gem/библиотека необходима для рендеринга Sass шаблонов:
|
|
247
262
|
|
|
248
|
-
|
|
263
|
+
# Вам нужно будет подключить haml или sass в приложении
|
|
249
264
|
require 'sass'
|
|
250
265
|
|
|
251
266
|
get '/stylesheet.css' do
|
|
@@ -267,9 +282,9 @@ Haml gem/библиотека необходима для рендеринга S
|
|
|
267
282
|
|
|
268
283
|
=== Scss шаблоны
|
|
269
284
|
|
|
270
|
-
|
|
285
|
+
<tt>haml</tt> gem/библиотека необходима для рендеринга Scss шаблонов:
|
|
271
286
|
|
|
272
|
-
|
|
287
|
+
# Вам нужно будет подключить haml или sass в приложении
|
|
273
288
|
require 'sass'
|
|
274
289
|
|
|
275
290
|
get '/stylesheet.css' do
|
|
@@ -291,9 +306,9 @@ Haml gem/библиотека необходима для рендеринга S
|
|
|
291
306
|
|
|
292
307
|
=== Less шаблоны
|
|
293
308
|
|
|
294
|
-
less gem/библиотека необходима для рендеринга Less шаблонов:
|
|
309
|
+
<tt>less</tt> gem/библиотека необходима для рендеринга Less шаблонов:
|
|
295
310
|
|
|
296
|
-
|
|
311
|
+
# Вам нужно будет подключить less в приложении
|
|
297
312
|
require 'less'
|
|
298
313
|
|
|
299
314
|
get '/stylesheet.css' do
|
|
@@ -304,9 +319,9 @@ less gem/библиотека необходима для рендеринга L
|
|
|
304
319
|
|
|
305
320
|
=== Liquid шаблоны
|
|
306
321
|
|
|
307
|
-
liquid gem/библиотека необходима для рендеринга liquid шаблонов:
|
|
322
|
+
<tt>liquid</tt> gem/библиотека необходима для рендеринга liquid шаблонов:
|
|
308
323
|
|
|
309
|
-
|
|
324
|
+
# Вам нужно будет подключить liquid в приложении
|
|
310
325
|
require 'liquid'
|
|
311
326
|
|
|
312
327
|
get '/' do
|
|
@@ -322,9 +337,9 @@ liquid gem/библиотека необходима для рендеринга
|
|
|
322
337
|
|
|
323
338
|
=== Markdown шаблоны
|
|
324
339
|
|
|
325
|
-
rdiscount gem/библиотека необходима для рендеринга Markdown шаблонов:
|
|
340
|
+
<tt>rdiscount</tt> gem/библиотека необходима для рендеринга Markdown шаблонов:
|
|
326
341
|
|
|
327
|
-
|
|
342
|
+
# Вам нужно будет подключить rdiscount в приложении
|
|
328
343
|
require "rdiscount"
|
|
329
344
|
|
|
330
345
|
get '/' do
|
|
@@ -335,7 +350,7 @@ rdiscount gem/библиотека необходима для рендерин
|
|
|
335
350
|
расширениями).
|
|
336
351
|
|
|
337
352
|
В Markdown невозможно вызывать методы или передавать локальные переменные.
|
|
338
|
-
Следовательно,
|
|
353
|
+
Следовательно, вам, скорее всего, придется использовать этот шаблон совместно с другим
|
|
339
354
|
движком рендеринга:
|
|
340
355
|
|
|
341
356
|
erb :overview, :locals => { :text => markdown(:introduction) }
|
|
@@ -345,6 +360,28 @@ rdiscount gem/библиотека необходима для рендерин
|
|
|
345
360
|
%h1 Hello From Haml!
|
|
346
361
|
%p= markdown(:greetings)
|
|
347
362
|
|
|
363
|
+
Вы не можете вызывать Ruby из Markdown, соответственно, вы не можете использовать
|
|
364
|
+
лэйаут-шаблоны (layouts) на Markdown. Тем не менее, есть возможность использовать один
|
|
365
|
+
движок рендеринга для шаблона, а другой для лэйаута с помощью опции `:layout_engine`:
|
|
366
|
+
|
|
367
|
+
get '/' do
|
|
368
|
+
markdown :index, :layout_engine => :erb
|
|
369
|
+
end
|
|
370
|
+
|
|
371
|
+
Отрисует <tt>./views/index.md</tt> с <tt>./views/layout.erb</tt> в качестве
|
|
372
|
+
лэйаута.
|
|
373
|
+
|
|
374
|
+
Также вы можете задать такие опции рендеринга глобально:
|
|
375
|
+
|
|
376
|
+
set :markdown, :layout_engine => :haml, :layout => :post
|
|
377
|
+
|
|
378
|
+
get '/' do
|
|
379
|
+
markdown :index
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
Отрисует <tt>./views/index.md</tt> (и любой другой шаблон на Markdown) с
|
|
383
|
+
<tt>./views/post.haml</tt> в качестве лэйаута.
|
|
384
|
+
|
|
348
385
|
Также возможно обрабатывать Markdown с помощью BlueCloth, а не RDiscount:
|
|
349
386
|
|
|
350
387
|
require 'bluecloth'
|
|
@@ -361,9 +398,9 @@ rdiscount gem/библиотека необходима для рендерин
|
|
|
361
398
|
|
|
362
399
|
=== Textile шаблоны
|
|
363
400
|
|
|
364
|
-
RedCloth gem/библиотека необходима для рендеринга Textile шаблонов:
|
|
401
|
+
<tt>RedCloth</tt> gem/библиотека необходима для рендеринга Textile шаблонов:
|
|
365
402
|
|
|
366
|
-
|
|
403
|
+
# Вам нужно будет подключить redcloth в приложении
|
|
367
404
|
require "redcloth"
|
|
368
405
|
|
|
369
406
|
get '/' do
|
|
@@ -372,22 +409,44 @@ RedCloth gem/библиотека необходима для рендеринг
|
|
|
372
409
|
|
|
373
410
|
Отрисует <tt>./views/index.textile</tt>.
|
|
374
411
|
|
|
375
|
-
В
|
|
376
|
-
использовать этот шаблон совместно с другим движком рендеринга:
|
|
412
|
+
В Textile невозможно вызывать методы или передавать локальные переменные. Следовательно, вам, скорее всего,
|
|
413
|
+
придется использовать этот шаблон совместно с другим движком рендеринга:
|
|
377
414
|
|
|
378
415
|
erb :overview, :locals => { :text => textile(:introduction) }
|
|
379
416
|
|
|
380
|
-
Заметьте, что вы можете вызывать метод textile из других шаблонов:
|
|
417
|
+
Заметьте, что вы можете вызывать метод +textile+ из других шаблонов:
|
|
381
418
|
|
|
382
419
|
%h1 Hello From Haml!
|
|
383
420
|
%p= textile(:greetings)
|
|
384
421
|
|
|
422
|
+
Вы не можете вызывать Ruby из Textile, соответственно, вы не можете использовать
|
|
423
|
+
лэйаут-шаблоны на Textile. Тем не менее, есть возможность использовать один
|
|
424
|
+
движок рендеринга для шаблона, а другой для лэйаута с помощью опции `:layout_engine`:
|
|
425
|
+
|
|
426
|
+
get '/' do
|
|
427
|
+
textile :index, :layout_engine => :erb
|
|
428
|
+
end
|
|
429
|
+
|
|
430
|
+
Отрисует <tt>./views/index.textile</tt> с <tt>./views/layout.erb</tt> в качестве
|
|
431
|
+
лэйаута.
|
|
432
|
+
|
|
433
|
+
Также вы можете задать такие опции рендеринга глобально:
|
|
434
|
+
|
|
435
|
+
set :textile, :layout_engine => :haml, :layout => :post
|
|
436
|
+
|
|
437
|
+
get '/' do
|
|
438
|
+
textile :index
|
|
439
|
+
end
|
|
440
|
+
|
|
441
|
+
Отрисует <tt>./views/index.textile</tt> (и любой другой шаблон на Textile) с
|
|
442
|
+
<tt>./views/post.haml</tt> в качестве лэйаута.
|
|
443
|
+
|
|
385
444
|
=== RDoc шаблоны
|
|
386
445
|
|
|
387
|
-
|
|
446
|
+
<tt>rdoc</tt> gem/библиотека необходима для рендеринга RDoc шаблонов:
|
|
388
447
|
|
|
389
|
-
|
|
390
|
-
require "rdoc"
|
|
448
|
+
# Вам нужно будет подключить rdoc/markup/to_html в приложении
|
|
449
|
+
require "rdoc/markup/to_html"
|
|
391
450
|
|
|
392
451
|
get '/' do
|
|
393
452
|
rdoc :index
|
|
@@ -395,21 +454,43 @@ RDoc gem/библиотека необходима для рендеринга R
|
|
|
395
454
|
|
|
396
455
|
Отрисует <tt>./views/index.rdoc</tt>.
|
|
397
456
|
|
|
398
|
-
В
|
|
399
|
-
использовать этот шаблон совместно с другим движком рендеринга:
|
|
457
|
+
В RDoc невозможно вызывать методы или передавать локальные переменные. Следовательно, вам, скорее всего,
|
|
458
|
+
придется использовать этот шаблон совместно с другим движком рендеринга:
|
|
400
459
|
|
|
401
460
|
erb :overview, :locals => { :text => rdoc(:introduction) }
|
|
402
461
|
|
|
403
|
-
Заметьте, что вы можете вызывать метод rdoc из других шаблонов:
|
|
462
|
+
Заметьте, что вы можете вызывать метод +rdoc+ из других шаблонов:
|
|
404
463
|
|
|
405
464
|
%h1 Hello From Haml!
|
|
406
465
|
%p= rdoc(:greetings)
|
|
407
466
|
|
|
467
|
+
Вы не можете вызывать Ruby из RDoc, соответственно, вы не можете использовать
|
|
468
|
+
лэйаут-шаблоны на RDoc. Тем не менее, есть возможность использовать один
|
|
469
|
+
движок рендеринга для шаблона, а другой для лэйаута с помощью опции `:layout_engine`:
|
|
470
|
+
|
|
471
|
+
get '/' do
|
|
472
|
+
rdoc :index, :layout_engine => :erb
|
|
473
|
+
end
|
|
474
|
+
|
|
475
|
+
Отрисует <tt>./views/index.rdoc</tt> с <tt>./views/layout.erb</tt> в качестве
|
|
476
|
+
лэйаута.
|
|
477
|
+
|
|
478
|
+
Также вы можете задать такие опции рендеринга глобально:
|
|
479
|
+
|
|
480
|
+
set :rdoc, :layout_engine => :haml, :layout => :post
|
|
481
|
+
|
|
482
|
+
get '/' do
|
|
483
|
+
rdoc :index
|
|
484
|
+
end
|
|
485
|
+
|
|
486
|
+
Отрисует <tt>./views/index.rdoc</tt> (и любой другой шаблон на RDoc) с
|
|
487
|
+
<tt>./views/post.haml</tt> в качестве лэйаута.
|
|
488
|
+
|
|
408
489
|
=== Radius шаблоны
|
|
409
490
|
|
|
410
|
-
radius gem/библиотека необходима для рендеринга Radius шаблонов:
|
|
491
|
+
<tt>radius</tt> gem/библиотека необходима для рендеринга Radius шаблонов:
|
|
411
492
|
|
|
412
|
-
|
|
493
|
+
# Вам нужно будет подключить radius в приложении
|
|
413
494
|
require 'radius'
|
|
414
495
|
|
|
415
496
|
get '/' do
|
|
@@ -425,9 +506,9 @@ radius gem/библиотека необходима для рендеринга
|
|
|
425
506
|
|
|
426
507
|
=== Markaby шаблоны
|
|
427
508
|
|
|
428
|
-
markaby gem/библиотека необходима для рендеринга Markaby шаблонов:
|
|
509
|
+
<tt>markaby</tt> gem/библиотека необходима для рендеринга Markaby шаблонов:
|
|
429
510
|
|
|
430
|
-
|
|
511
|
+
# Вам нужно будет подключить markaby в приложении
|
|
431
512
|
require 'markaby'
|
|
432
513
|
|
|
433
514
|
get '/' do
|
|
@@ -436,11 +517,39 @@ markaby gem/библиотека необходима для рендеринг
|
|
|
436
517
|
|
|
437
518
|
Отрисует <tt>./views/index.mab</tt>.
|
|
438
519
|
|
|
520
|
+
Вы также можете использовать внутристроковые Markaby шаблоны:
|
|
521
|
+
|
|
522
|
+
get '/' do
|
|
523
|
+
markaby { h1 "Welcome!" }
|
|
524
|
+
end
|
|
525
|
+
|
|
526
|
+
=== Slim шаблоны
|
|
527
|
+
|
|
528
|
+
<tt>slim</tt> gem/библиотека необходима для рендеринга slim шаблонов:
|
|
529
|
+
|
|
530
|
+
# Вам нужно будет подключить slim в приложении
|
|
531
|
+
require 'slim'
|
|
532
|
+
|
|
533
|
+
get '/' do
|
|
534
|
+
slim :index
|
|
535
|
+
end
|
|
536
|
+
|
|
537
|
+
Отрисует <tt>./views/index.slim</tt>.
|
|
538
|
+
|
|
439
539
|
=== CoffeeScript шаблоны
|
|
440
540
|
|
|
441
|
-
coffee-script gem/библиотека и
|
|
541
|
+
Вам понадобится <tt>coffee-script</tt> gem/библиотека и что-то <b>одно</b> из следующего списка,
|
|
542
|
+
чтобы запускать JavaScript:
|
|
543
|
+
|
|
544
|
+
* +node+ (из Node.js)
|
|
545
|
+
* вы можете использовать OSX (есть встроенные средства для выполнения JavaScript)
|
|
546
|
+
* +therubyracer+ gem/библиотека
|
|
442
547
|
|
|
443
|
-
|
|
548
|
+
Подробнее смотрите на {странице проекта}[http://github.com/josh/ruby-coffee-script].
|
|
549
|
+
|
|
550
|
+
Таким образом вы можете использовать CoffeeScript шаблоны.
|
|
551
|
+
|
|
552
|
+
# Вам нужно будет подключить coffee-script в приложении
|
|
444
553
|
require 'coffee-script'
|
|
445
554
|
|
|
446
555
|
get '/application.js' do
|
|
@@ -459,8 +568,8 @@ coffee-script gem/библиотека и `coffee` бинарный файл н
|
|
|
459
568
|
|
|
460
569
|
=== Доступ к переменным в шаблонах
|
|
461
570
|
|
|
462
|
-
Шаблоны интерпретируются в том же контексте, что и обработчики маршрутов. Переменные
|
|
463
|
-
установленные в
|
|
571
|
+
Шаблоны интерпретируются в том же контексте, что и обработчики маршрутов. Переменные экземпляра,
|
|
572
|
+
установленные в процессе обработки маршрутов, будут доступны напрямую в шаблонах:
|
|
464
573
|
|
|
465
574
|
get '/:id' do
|
|
466
575
|
@foo = Foo.find(params[:id])
|
|
@@ -474,7 +583,7 @@ coffee-script gem/библиотека и `coffee` бинарный файл н
|
|
|
474
583
|
haml '%h1= foo.name', :locals => { :foo => foo }
|
|
475
584
|
end
|
|
476
585
|
|
|
477
|
-
Это
|
|
586
|
+
Это обычный подход, когда шаблоны рендерятся как частные (partials) из других шаблонов.
|
|
478
587
|
|
|
479
588
|
=== Вложенные шаблоны
|
|
480
589
|
|
|
@@ -495,7 +604,7 @@ coffee-script gem/библиотека и `coffee` бинарный файл н
|
|
|
495
604
|
@@ index
|
|
496
605
|
%div.title Hello world!!!!!
|
|
497
606
|
|
|
498
|
-
Заметьте: Вложенные шаблоны, определенные в файле-исходнике, который подключил
|
|
607
|
+
Заметьте: Вложенные шаблоны, определенные в файле-исходнике, который подключил Sinatra, будут
|
|
499
608
|
автоматически загружены. Вызовите <tt>enable :inline_templates</tt> напрямую, если у вас вложенные
|
|
500
609
|
шаблоны в других файлах.
|
|
501
610
|
|
|
@@ -516,17 +625,42 @@ coffee-script gem/библиотека и `coffee` бинарный файл н
|
|
|
516
625
|
end
|
|
517
626
|
|
|
518
627
|
Если шаблон с именем "layout" существует, то он будет использован каждый раз,
|
|
519
|
-
когда шаблоны будут отрисовываться. Вы можете отключать
|
|
628
|
+
когда шаблоны будут отрисовываться. Вы можете отключать лэйаут в каждом конкретном случае с помощью
|
|
520
629
|
<tt>:layout => false</tt> или отключить его для всего приложения, например, так: <tt>set :haml, :layout => false</tt>.
|
|
521
630
|
|
|
522
631
|
get '/' do
|
|
523
632
|
haml :index, :layout => !request.xhr?
|
|
524
633
|
end
|
|
525
634
|
|
|
526
|
-
|
|
635
|
+
=== Привязка файловых расширений
|
|
636
|
+
|
|
637
|
+
Чтобы связать расширение файла и движок рендеринга, используйте
|
|
638
|
+
<tt>Tilt.register</tt>. Например, если вы хотите использовать расширение +tt+
|
|
639
|
+
для шаблонов Textile:
|
|
640
|
+
|
|
641
|
+
Tilt.register :tt, Tilt[:textile]
|
|
642
|
+
|
|
643
|
+
=== Добавление собственного движка рендеринга
|
|
644
|
+
|
|
645
|
+
Сначала зарегистрируйте свой движок в Tilt, затем создайте метод, отвечающий за отрисовку:
|
|
646
|
+
|
|
647
|
+
Tilt.register :myat, MyAwesomeTemplateEngine
|
|
648
|
+
|
|
649
|
+
helpers do
|
|
650
|
+
def myat(*args) render(:myat, *args) end
|
|
651
|
+
end
|
|
652
|
+
|
|
653
|
+
get '/' do
|
|
654
|
+
myat :index
|
|
655
|
+
end
|
|
527
656
|
|
|
528
|
-
|
|
529
|
-
|
|
657
|
+
Отрисует <tt>./views/index.myat</tt>. Чтобы узнать больше о Tilt,
|
|
658
|
+
смотрите https://github.com/rtomayko/tilt
|
|
659
|
+
|
|
660
|
+
== Методы-помощники
|
|
661
|
+
|
|
662
|
+
Используйте метод <tt>helpers</tt>, чтобы определить методы-помощники, которые
|
|
663
|
+
в дальнейшем можно будет использовать в обработчиках маршрутов и шаблонах:
|
|
530
664
|
|
|
531
665
|
helpers do
|
|
532
666
|
def bar(name)
|
|
@@ -570,6 +704,16 @@ After-фильтры выполняются после каждого запро
|
|
|
570
704
|
session[:last_slug] = slug
|
|
571
705
|
end
|
|
572
706
|
|
|
707
|
+
Как и маршруты, фильтры могут использовать условия:
|
|
708
|
+
|
|
709
|
+
before :agent => /Songbird/ do
|
|
710
|
+
# ...
|
|
711
|
+
end
|
|
712
|
+
|
|
713
|
+
after '/blog/*', :host_name => 'example.com' do
|
|
714
|
+
# ...
|
|
715
|
+
end
|
|
716
|
+
|
|
573
717
|
== Прерывание
|
|
574
718
|
|
|
575
719
|
Чтобы незамедлительно прервать обработку запроса внутри фильтра или маршрута, используйте:
|
|
@@ -623,23 +767,23 @@ After-фильтры выполняются после каждого запро
|
|
|
623
767
|
request.request_method # "GET"
|
|
624
768
|
request.query_string # ""
|
|
625
769
|
request.content_length # длина тела запроса
|
|
626
|
-
request.media_type #
|
|
770
|
+
request.media_type # медиатип тела запроса
|
|
627
771
|
request.host # "example.com"
|
|
628
|
-
request.get? # true (для других
|
|
772
|
+
request.get? # true (есть аналоги для других методов HTTP)
|
|
629
773
|
request.form_data? # false
|
|
630
|
-
request["SOME_HEADER"] # значение SOME_HEADER
|
|
774
|
+
request["SOME_HEADER"] # значение заголовка SOME_HEADER
|
|
631
775
|
request.referer # источник запроса клиента либо '/'
|
|
632
776
|
request.user_agent # user agent (используется для :agent условия)
|
|
633
|
-
request.cookies # хеш
|
|
777
|
+
request.cookies # хеш с куками браузера
|
|
634
778
|
request.xhr? # является ли запрос ajax запросом?
|
|
635
779
|
request.url # "http://example.com/example/foo"
|
|
636
780
|
request.path # "/example/foo"
|
|
637
|
-
request.ip # IP
|
|
781
|
+
request.ip # IP-адрес клиента
|
|
638
782
|
request.secure? # false
|
|
639
|
-
request.env # env
|
|
783
|
+
request.env # "сырой" env хеш, полученный Rack
|
|
640
784
|
end
|
|
641
785
|
|
|
642
|
-
Некоторые опции, такие как <tt>script_name</tt> или <tt>path_info</tt>
|
|
786
|
+
Некоторые опции, такие как <tt>script_name</tt> или <tt>path_info</tt> доступны для записи:
|
|
643
787
|
|
|
644
788
|
before { request.path_info = "/" }
|
|
645
789
|
|
|
@@ -681,7 +825,7 @@ After-фильтры выполняются после каждого запро
|
|
|
681
825
|
Обработчики ошибок исполняются в том же контексте, что и маршруты, before-фильтры, а это означает, что всякие
|
|
682
826
|
прелести вроде <tt>haml</tt>, <tt>erb</tt>, <tt>halt</tt> и т.д. доступны и им.
|
|
683
827
|
|
|
684
|
-
===
|
|
828
|
+
=== NotFound
|
|
685
829
|
|
|
686
830
|
Когда возбуждено исключение <tt>Sinatra::NotFound</tt>, или кодом ответа является 404,
|
|
687
831
|
то будет вызван <tt>not_found</tt> обработчик:
|
|
@@ -734,9 +878,9 @@ After-фильтры выполняются после каждого запро
|
|
|
734
878
|
Sinatra устанавливает специальные <tt>not_found</tt> и <tt>error</tt> обработчики, когда запущена в режиме
|
|
735
879
|
разработки (окружение <tt>:development</tt>).
|
|
736
880
|
|
|
737
|
-
== Mime
|
|
881
|
+
== Mime-типы
|
|
738
882
|
|
|
739
|
-
Когда вы используете <tt>send_file</tt> или статические файлы, у вас могут быть mime
|
|
883
|
+
Когда вы используете <tt>send_file</tt> или статические файлы, у вас могут быть mime-типы, которые Sinatra
|
|
740
884
|
не понимает по умолчанию. Используйте +mime_type+ для их регистрации по расширению файла:
|
|
741
885
|
|
|
742
886
|
mime_type :foo, 'text/foo'
|
|
@@ -811,8 +955,8 @@ Rack распространяется с различными стандартн
|
|
|
811
955
|
end
|
|
812
956
|
end
|
|
813
957
|
|
|
814
|
-
|
|
815
|
-
устаревшими, начиная с 0.9.2
|
|
958
|
+
Обратите внимание: Встроенные модуль Sinatra::Test и класс Sinatra::TestHarness являются
|
|
959
|
+
устаревшими, начиная с релиза 0.9.2.
|
|
816
960
|
|
|
817
961
|
== Sinatra::Base — "прослойки", библиотеки и модульные приложения
|
|
818
962
|
|
|
@@ -1005,7 +1149,7 @@ Sinatra::Application, иначе это будет сабкласс, котор
|
|
|
1005
1149
|
|
|
1006
1150
|
У вас будет область видимости запроса внутри:
|
|
1007
1151
|
|
|
1008
|
-
* get/head/post/put/delete блоков
|
|
1152
|
+
* get/head/post/put/delete/options блоков
|
|
1009
1153
|
* before/after фильтрах
|
|
1010
1154
|
* методах помощниках
|
|
1011
1155
|
* шаблонах/видах
|
|
@@ -1046,31 +1190,69 @@ Sinatra приложения могут быть запущены напряму
|
|
|
1046
1190
|
|
|
1047
1191
|
== На острие
|
|
1048
1192
|
|
|
1049
|
-
Если вы хотите использовать
|
|
1050
|
-
|
|
1051
|
-
|
|
1193
|
+
Если вы хотите использовать самый последний код Sinatra, не бойтесь запускать
|
|
1194
|
+
свое приложение вместе с master бранчем Sinatra, он весьма стабилен.
|
|
1195
|
+
|
|
1196
|
+
Мы также время от времени выпускаем предварительные версии, так что вы можете делать так:
|
|
1197
|
+
|
|
1198
|
+
gem install sinatra --pre
|
|
1199
|
+
|
|
1200
|
+
Чтобы воспользоваться некоторыми самыми последними возможностям.
|
|
1201
|
+
|
|
1202
|
+
=== С помощью Bundler
|
|
1203
|
+
|
|
1204
|
+
Если вы хотите запускать свое приложение с последней версией Sinatra, то
|
|
1205
|
+
рекомендуем использовать {Bundler}[http://gembundler.com/].
|
|
1206
|
+
|
|
1207
|
+
Сначала установите Bundler, если у вас его еще нет:
|
|
1208
|
+
|
|
1209
|
+
gem install bundler
|
|
1210
|
+
|
|
1211
|
+
Затем создайте файл +Gemfile+ в директории вашего проекта:
|
|
1212
|
+
|
|
1213
|
+
source :rubygems
|
|
1214
|
+
gem 'sinatra', :git => "git://github.com/sinatra/sinatra.git"
|
|
1215
|
+
|
|
1216
|
+
# другие зависимости
|
|
1217
|
+
gem 'haml' # например, если используете haml
|
|
1218
|
+
gem 'activerecord', '~> 3.0' # может быть, вам нужен и ActiveRecord 3.x
|
|
1219
|
+
|
|
1220
|
+
Обратите внимание, вам нужно будет указывать все зависимости вашего приложения
|
|
1221
|
+
в этом файле. Однако, непосредственные зависимости Sinatra (Rack и Tilt) Bundler
|
|
1222
|
+
автоматически скачает и добавит.
|
|
1223
|
+
|
|
1224
|
+
Теперь вы можете запускать свое приложение примерно так:
|
|
1225
|
+
|
|
1226
|
+
bundle exec ruby myapp.rb
|
|
1227
|
+
|
|
1228
|
+
=== Вручную
|
|
1229
|
+
|
|
1230
|
+
Создайте локальный клон репозитория и запускайте свое приложение с <tt>sinatra/lib</tt>
|
|
1231
|
+
директорией в <tt>LOAD_PATH</tt>:
|
|
1052
1232
|
|
|
1053
1233
|
cd myapp
|
|
1054
1234
|
git clone git://github.com/sinatra/sinatra.git
|
|
1055
1235
|
ruby -Isinatra/lib myapp.rb
|
|
1056
1236
|
|
|
1057
|
-
|
|
1058
|
-
<tt>LOAD_PATH</tt> приложения:
|
|
1237
|
+
Чтобы обновить исходники Sinatra:
|
|
1059
1238
|
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
require 'sinatra'
|
|
1239
|
+
cd myapp/sinatra
|
|
1240
|
+
git pull
|
|
1063
1241
|
|
|
1064
|
-
|
|
1065
|
-
"I'm running version " + Sinatra::VERSION
|
|
1066
|
-
end
|
|
1242
|
+
=== Установка глобально
|
|
1067
1243
|
|
|
1068
|
-
|
|
1244
|
+
Вы можете самостоятельно собрать gem:
|
|
1069
1245
|
|
|
1070
|
-
|
|
1071
|
-
|
|
1246
|
+
git clone git://github.com/sinatra/sinatra.git
|
|
1247
|
+
cd sinatra
|
|
1248
|
+
rake sinatra.gemspec
|
|
1249
|
+
rake install
|
|
1250
|
+
|
|
1251
|
+
Если вы устанавливаете пакеты (gem) от пользователя root, то вашим последним шагом должна быть команда
|
|
1252
|
+
|
|
1253
|
+
sudo rake install
|
|
1072
1254
|
|
|
1073
|
-
==
|
|
1255
|
+
== Дальнейшее чтение
|
|
1074
1256
|
|
|
1075
1257
|
* {Вебсайт проекта}[http://www.sinatrarb.com/] - Дополнительная документация,
|
|
1076
1258
|
новости и ссылки на другие ресурсы.
|