sinatra 1.2.0.a → 1.2.0.c

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of sinatra might be problematic. Click here for more details.

@@ -94,7 +94,7 @@ Sinatra — это предметно-ориентированный язык (D
94
94
  end
95
95
 
96
96
  get '/foo' do
97
- # соответствует с non-songbird браузерам
97
+ # соответствует non-songbird браузерам
98
98
  end
99
99
 
100
100
  Другими доступными условиями являются +host_name+ и +provides+:
@@ -126,7 +126,7 @@ Sinatra — это предметно-ориентированный язык (D
126
126
  === Возвращаемые значения
127
127
 
128
128
  Возвращаемое значение блока маршрута ограничивается телом ответа, которое будет передано HTTP клиенту,
129
- или следующей подпрограммой (middleware) в Rack стеке. Чаще всего это строка, как в вышеизложенных примерах.
129
+ или следующей "прослойкой" (middleware, промежуточная программа) в Rack стеке. Чаще всего это строка, как в вышеизложенных примерах.
130
130
  Но и другие значения также приемлемы.
131
131
 
132
132
  Вы можете вернуть любой объект, который будет либо корректным Rack ответом, Rack
@@ -172,9 +172,9 @@ Sinatra — это предметно-ориентированный язык (D
172
172
 
173
173
  === Haml шаблоны
174
174
 
175
- Haml gem/библиотека необходима для рендеринга HAML шаблонов:
175
+ <tt>haml</tt> gem/библиотека необходима для рендеринга HAML шаблонов:
176
176
 
177
- ## Вам нужно будет подключить haml gem в приложении
177
+ # Вам нужно будет подключить haml gem в приложении
178
178
  require 'haml'
179
179
 
180
180
  get '/' do
@@ -197,33 +197,44 @@ Haml gem/библиотека необходима для рендеринга H
197
197
 
198
198
  === Erb шаблоны
199
199
 
200
- ## Вам нужно будет подключить erb в приложении
200
+ # Вам нужно будет подключить erb в приложении
201
201
  require 'erb'
202
202
 
203
203
  get '/' do
204
204
  erb :index
205
205
  end
206
206
 
207
- Отрисует <tt>./views/index.erb</tt>
207
+ Отрисует <tt>./views/index.erb</tt>.
208
208
 
209
209
  === Erubis шаблоны
210
210
 
211
- Erubis gem/библиотека необходима для рендеринга erubis шаблонов:
211
+ <tt>erubis</tt> gem/библиотека необходима для рендеринга Erubis шаблонов:
212
212
 
213
- ## Вам нужно будет подключить erubis в приложении
213
+ # Вам нужно будет подключить Erubis в приложении
214
214
  require 'erubis'
215
215
 
216
216
  get '/' do
217
217
  erubis :index
218
218
  end
219
219
 
220
- Отрисует <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.
221
232
 
222
233
  === Builder шаблоны
223
234
 
224
- Builder gem/библиотека необходима для рендеринга builder шаблонов:
235
+ <tt>builder</tt> gem/библиотека необходима для рендеринга builder шаблонов:
225
236
 
226
- ## Вам нужно будет подключить builder в приложении
237
+ # Вам нужно будет подключить builder в приложении
227
238
  require 'builder'
228
239
 
229
240
  get '/' do
@@ -234,9 +245,9 @@ Builder gem/библиотека необходима для рендеринг
234
245
 
235
246
  === Nokogiri шаблоны
236
247
 
237
- Nokogiri gem/библиотека необходима для рендеринга nokogiri шаблонов:
248
+ <tt>nokogiri</tt> gem/библиотека необходима для рендеринга nokogiri шаблонов:
238
249
 
239
- ## Вам нужно будет подключить nokogiri в приложении
250
+ # Вам нужно будет подключить nokogiri в приложении
240
251
  require 'nokogiri'
241
252
 
242
253
  get '/' do
@@ -247,9 +258,9 @@ Nokogiri gem/библиотека необходима для рендеринг
247
258
 
248
259
  === Sass шаблоны
249
260
 
250
- Haml gem/библиотека необходима для рендеринга Sass шаблонов:
261
+ <tt>haml</tt> gem/библиотека необходима для рендеринга Sass шаблонов:
251
262
 
252
- ## Вам нужно будет подключить haml или sass в приложении
263
+ # Вам нужно будет подключить haml или sass в приложении
253
264
  require 'sass'
254
265
 
255
266
  get '/stylesheet.css' do
@@ -271,9 +282,9 @@ Haml gem/библиотека необходима для рендеринга S
271
282
 
272
283
  === Scss шаблоны
273
284
 
274
- Haml gem/библиотека необходима для рендеринга Scss шаблонов:
285
+ <tt>haml</tt> gem/библиотека необходима для рендеринга Scss шаблонов:
275
286
 
276
- ## Вам нужно будет подключить haml или sass в приложении
287
+ # Вам нужно будет подключить haml или sass в приложении
277
288
  require 'sass'
278
289
 
279
290
  get '/stylesheet.css' do
@@ -295,9 +306,9 @@ Haml gem/библиотека необходима для рендеринга S
295
306
 
296
307
  === Less шаблоны
297
308
 
298
- less gem/библиотека необходима для рендеринга Less шаблонов:
309
+ <tt>less</tt> gem/библиотека необходима для рендеринга Less шаблонов:
299
310
 
300
- ## Вам нужно будет подключить less в приложении
311
+ # Вам нужно будет подключить less в приложении
301
312
  require 'less'
302
313
 
303
314
  get '/stylesheet.css' do
@@ -308,9 +319,9 @@ less gem/библиотека необходима для рендеринга L
308
319
 
309
320
  === Liquid шаблоны
310
321
 
311
- liquid gem/библиотека необходима для рендеринга liquid шаблонов:
322
+ <tt>liquid</tt> gem/библиотека необходима для рендеринга liquid шаблонов:
312
323
 
313
- ## Вам нужно будет подключить liquid в приложении
324
+ # Вам нужно будет подключить liquid в приложении
314
325
  require 'liquid'
315
326
 
316
327
  get '/' do
@@ -326,9 +337,9 @@ liquid gem/библиотека необходима для рендеринга
326
337
 
327
338
  === Markdown шаблоны
328
339
 
329
- rdiscount gem/библиотека необходима для рендеринга Markdown шаблонов:
340
+ <tt>rdiscount</tt> gem/библиотека необходима для рендеринга Markdown шаблонов:
330
341
 
331
- ## Вам нужно будет подключить rdiscount в приложении
342
+ # Вам нужно будет подключить rdiscount в приложении
332
343
  require "rdiscount"
333
344
 
334
345
  get '/' do
@@ -338,21 +349,58 @@ rdiscount gem/библиотека необходима для рендерин
338
349
  Отрисует <tt>./views/index.markdown</tt> (+md+ и +mkd+ также являются допустимыми файловыми
339
350
  расширениями).
340
351
 
341
- В markdown невозможно вызывать методы или передавать локальные переменные. Следовательно, вам скорее всего придется
342
- использовать этот шаблон совместно с другим движком рендеринга:
352
+ В Markdown невозможно вызывать методы или передавать локальные переменные.
353
+ Следовательно, вам, скорее всего, придется использовать этот шаблон совместно с другим
354
+ движком рендеринга:
343
355
 
344
356
  erb :overview, :locals => { :text => markdown(:introduction) }
345
357
 
346
- Заметьте, что вы можете вызывать метод markdown из других шаблонов:
358
+ Заметьте, что вы можете вызывать метод +markdown+ из других шаблонов:
347
359
 
348
360
  %h1 Hello From Haml!
349
361
  %p= markdown(:greetings)
350
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
+
385
+ Также возможно обрабатывать Markdown с помощью BlueCloth, а не RDiscount:
386
+
387
+ require 'bluecloth'
388
+
389
+ Tilt.register 'markdown', BlueClothTemplate
390
+ Tilt.register 'mkd', BlueClothTemplate
391
+ Tilt.register 'md', BlueClothTemplate
392
+
393
+ get '/' do
394
+ markdown :index
395
+ end
396
+
397
+ Отрисует <tt>./views/index.md</tt> с помощью BlueCloth.
398
+
351
399
  === Textile шаблоны
352
400
 
353
- RedCloth gem/библиотека необходима для рендеринга Textile шаблонов:
401
+ <tt>RedCloth</tt> gem/библиотека необходима для рендеринга Textile шаблонов:
354
402
 
355
- ## Вам нужно будет подключить redcloth в приложении
403
+ # Вам нужно будет подключить redcloth в приложении
356
404
  require "redcloth"
357
405
 
358
406
  get '/' do
@@ -361,21 +409,43 @@ RedCloth gem/библиотека необходима для рендеринг
361
409
 
362
410
  Отрисует <tt>./views/index.textile</tt>.
363
411
 
364
- В textile невозможно вызывать методы или передавать локальные переменные. Следовательно, вам скорее всего придется
365
- использовать этот шаблон совместно с другим движком рендеринга:
412
+ В Textile невозможно вызывать методы или передавать локальные переменные. Следовательно, вам, скорее всего,
413
+ придется использовать этот шаблон совместно с другим движком рендеринга:
366
414
 
367
415
  erb :overview, :locals => { :text => textile(:introduction) }
368
416
 
369
- Заметьте, что вы можете вызывать метод textile из других шаблонов:
417
+ Заметьте, что вы можете вызывать метод +textile+ из других шаблонов:
370
418
 
371
419
  %h1 Hello From Haml!
372
420
  %p= textile(:greetings)
373
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
+
374
444
  === RDoc шаблоны
375
445
 
376
- RDoc gem/библиотека необходима для рендеринга RDoc шаблонов:
446
+ <tt>rdoc</tt> gem/библиотека необходима для рендеринга RDoc шаблонов:
377
447
 
378
- ## Вам нужно будет подключить rdoc в приложении
448
+ # Вам нужно будет подключить rdoc в приложении
379
449
  require "rdoc"
380
450
 
381
451
  get '/' do
@@ -384,21 +454,43 @@ RDoc gem/библиотека необходима для рендеринга R
384
454
 
385
455
  Отрисует <tt>./views/index.rdoc</tt>.
386
456
 
387
- В rdoc невозможно вызывать методы или передавать локальные переменные. Следовательно, вам скорее всего придется
388
- использовать этот шаблон совместно с другим движком рендеринга:
457
+ В RDoc невозможно вызывать методы или передавать локальные переменные. Следовательно, вам, скорее всего,
458
+ придется использовать этот шаблон совместно с другим движком рендеринга:
389
459
 
390
460
  erb :overview, :locals => { :text => rdoc(:introduction) }
391
461
 
392
- Заметьте, что вы можете вызывать метод rdoc из других шаблонов:
462
+ Заметьте, что вы можете вызывать метод +rdoc+ из других шаблонов:
393
463
 
394
464
  %h1 Hello From Haml!
395
465
  %p= rdoc(:greetings)
396
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
+
397
489
  === Radius шаблоны
398
490
 
399
- radius gem/библиотека необходима для рендеринга Radius шаблонов:
491
+ <tt>radius</tt> gem/библиотека необходима для рендеринга Radius шаблонов:
400
492
 
401
- ## Вам нужно будет подключить radius в приложении
493
+ # Вам нужно будет подключить radius в приложении
402
494
  require 'radius'
403
495
 
404
496
  get '/' do
@@ -414,9 +506,9 @@ radius gem/библиотека необходима для рендеринга
414
506
 
415
507
  === Markaby шаблоны
416
508
 
417
- markaby gem/библиотека необходима для рендеринга Markaby шаблонов:
509
+ <tt>markaby</tt> gem/библиотека необходима для рендеринга Markaby шаблонов:
418
510
 
419
- ## Вам нужно будет подключить markaby в приложении
511
+ # Вам нужно будет подключить markaby в приложении
420
512
  require 'markaby'
421
513
 
422
514
  get '/' do
@@ -425,8 +517,7 @@ markaby gem/библиотека необходима для рендеринг
425
517
 
426
518
  Отрисует <tt>./views/index.mab</tt>.
427
519
 
428
- Если у вас установлен Tilt версии 1.2 или выше, то вы также можете использовать внутристроковые
429
- markaby шаблоны:
520
+ Вы также можете использовать внутристроковые Markaby шаблоны:
430
521
 
431
522
  get '/' do
432
523
  markaby { h1 "Welcome!" }
@@ -434,9 +525,9 @@ markaby шаблоны:
434
525
 
435
526
  === Slim шаблоны
436
527
 
437
- slim gem/библиотека необходима для рендеринга slim шаблонов:
528
+ <tt>slim</tt> gem/библиотека необходима для рендеринга slim шаблонов:
438
529
 
439
- ## Вам нужно будет подключить slim в приложении
530
+ # Вам нужно будет подключить slim в приложении
440
531
  require 'slim'
441
532
 
442
533
  get '/' do
@@ -447,9 +538,18 @@ slim gem/библиотека необходима для рендеринга s
447
538
 
448
539
  === CoffeeScript шаблоны
449
540
 
450
- coffee-script gem/библиотека и `coffee` бинарный файл необходимы для рендеринга CoffeeScript шаблонов:
541
+ Вам понадобится <tt>coffee-script</tt> gem/библиотека и что-то <b>одно</b> из следующего списка,
542
+ чтобы запускать JavaScript:
543
+
544
+ * +node+ (из Node.js)
545
+ * вы можете использовать OSX (есть встроенные средства для выполнения JavaScript)
546
+ * +therubyracer+ gem/библиотека
547
+
548
+ Подробнее смотрите на {странице проекта}[http://github.com/josh/ruby-coffee-script].
451
549
 
452
- ## Вам нужно будет подключить coffee-script в приложении
550
+ Таким образом вы можете использовать CoffeeScript шаблоны.
551
+
552
+ # Вам нужно будет подключить coffee-script в приложении
453
553
  require 'coffee-script'
454
554
 
455
555
  get '/application.js' do
@@ -458,18 +558,18 @@ coffee-script gem/библиотека и `coffee` бинарный файл н
458
558
 
459
559
  Отрисует <tt>./views/application.coffee</tt>.
460
560
 
461
- === Внутристроковые шаблоны
561
+ === Встроенные шаблоны
462
562
 
463
563
  get '/' do
464
564
  haml '%div.title Hello World'
465
565
  end
466
566
 
467
- Отрисует внутристроковый шаблон.
567
+ Отрисует встроенный (строчный) шаблон.
468
568
 
469
569
  === Доступ к переменным в шаблонах
470
570
 
471
- Шаблоны интерпретируются в том же контексте, что и обработчики маршрутов. Переменные экзмепляра,
472
- установленные в процесе обработки маршрутов, будут доступны напрямую в шаблонах:
571
+ Шаблоны интерпретируются в том же контексте, что и обработчики маршрутов. Переменные экземпляра,
572
+ установленные в процессе обработки маршрутов, будут доступны напрямую в шаблонах:
473
573
 
474
574
  get '/:id' do
475
575
  @foo = Foo.find(params[:id])
@@ -483,7 +583,7 @@ coffee-script gem/библиотека и `coffee` бинарный файл н
483
583
  haml '%h1= foo.name', :locals => { :foo => foo }
484
584
  end
485
585
 
486
- Это обычно используется когда шаблоны рендерятся как частные (partials) из других шаблонов.
586
+ Это обычный подход, когда шаблоны рендерятся как частные (partials) из других шаблонов.
487
587
 
488
588
  === Вложенные шаблоны
489
589
 
@@ -504,7 +604,7 @@ coffee-script gem/библиотека и `coffee` бинарный файл н
504
604
  @@ index
505
605
  %div.title Hello world!!!!!
506
606
 
507
- Заметьте: Вложенные шаблоны, определенные в файле-исходнике, который подключил sinatra, будут
607
+ Заметьте: Вложенные шаблоны, определенные в файле-исходнике, который подключил Sinatra, будут
508
608
  автоматически загружены. Вызовите <tt>enable :inline_templates</tt> напрямую, если у вас вложенные
509
609
  шаблоны в других файлах.
510
610
 
@@ -525,16 +625,42 @@ coffee-script gem/библиотека и `coffee` бинарный файл н
525
625
  end
526
626
 
527
627
  Если шаблон с именем "layout" существует, то он будет использован каждый раз,
528
- когда шаблоны будут отрисовываться. Вы можете отключить layout-шаблон с помощью <tt>:layout => false</tt>.
628
+ когда шаблоны будут отрисовываться. Вы можете отключать лэйаут в каждом конкретном случае с помощью
629
+ <tt>:layout => false</tt> или отключить его для всего приложения, например, так: <tt>set :haml, :layout => false</tt>.
529
630
 
530
631
  get '/' do
531
632
  haml :index, :layout => !request.xhr?
532
633
  end
533
634
 
534
- == Методы помощники
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
656
+
657
+ Отрисует <tt>./views/index.myat</tt>. Чтобы узнать больше о Tilt,
658
+ смотрите https://github.com/rtomayko/tilt
535
659
 
536
- Используйте <tt>helpers</tt> метод для определения методов помощников для дальнейшего
537
- использования в обработчиках маршрутов и шаблонах:
660
+ == Методы-помощники
661
+
662
+ Используйте метод <tt>helpers</tt>, чтобы определить методы-помощники, которые
663
+ в дальнейшем можно будет использовать в обработчиках маршрутов и шаблонах:
538
664
 
539
665
  helpers do
540
666
  def bar(name)
@@ -641,23 +767,23 @@ After-фильтры выполняются после каждого запро
641
767
  request.request_method # "GET"
642
768
  request.query_string # ""
643
769
  request.content_length # длина тела запроса
644
- request.media_type # медиа тип тела запроса
770
+ request.media_type # медиатип тела запроса
645
771
  request.host # "example.com"
646
- request.get? # true (для других участвующих HTTP глаголов есть похожие методы)
772
+ request.get? # true (есть аналоги для других методов HTTP)
647
773
  request.form_data? # false
648
- request["SOME_HEADER"] # значение SOME_HEADER заголовка
774
+ request["SOME_HEADER"] # значение заголовка SOME_HEADER
649
775
  request.referer # источник запроса клиента либо '/'
650
776
  request.user_agent # user agent (используется для :agent условия)
651
- request.cookies # хеш куки браузера
777
+ request.cookies # хеш с куками браузера
652
778
  request.xhr? # является ли запрос ajax запросом?
653
779
  request.url # "http://example.com/example/foo"
654
780
  request.path # "/example/foo"
655
- request.ip # IP адрес клиента
781
+ request.ip # IP-адрес клиента
656
782
  request.secure? # false
657
- request.env # env хеш как получено Rack
783
+ request.env # "сырой" env хеш, полученный Rack
658
784
  end
659
785
 
660
- Некоторые опции, такие как <tt>script_name</tt> или <tt>path_info</tt> могут быть переписаны:
786
+ Некоторые опции, такие как <tt>script_name</tt> или <tt>path_info</tt> доступны для записи:
661
787
 
662
788
  before { request.path_info = "/" }
663
789
 
@@ -699,7 +825,7 @@ After-фильтры выполняются после каждого запро
699
825
  Обработчики ошибок исполняются в том же контексте, что и маршруты, before-фильтры, а это означает, что всякие
700
826
  прелести вроде <tt>haml</tt>, <tt>erb</tt>, <tt>halt</tt> и т.д. доступны и им.
701
827
 
702
- ===  NotFound
828
+ === NotFound
703
829
 
704
830
  Когда возбуждено исключение <tt>Sinatra::NotFound</tt>, или кодом ответа является 404,
705
831
  то будет вызван <tt>not_found</tt> обработчик:
@@ -752,9 +878,9 @@ After-фильтры выполняются после каждого запро
752
878
  Sinatra устанавливает специальные <tt>not_found</tt> и <tt>error</tt> обработчики, когда запущена в режиме
753
879
  разработки (окружение <tt>:development</tt>).
754
880
 
755
- == Mime типы
881
+ == Mime-типы
756
882
 
757
- Когда вы используете <tt>send_file</tt> или статические файлы, у вас могут быть mime типы, которые Sinatra
883
+ Когда вы используете <tt>send_file</tt> или статические файлы, у вас могут быть mime-типы, которые Sinatra
758
884
  не понимает по умолчанию. Используйте +mime_type+ для их регистрации по расширению файла:
759
885
 
760
886
  mime_type :foo, 'text/foo'
@@ -763,15 +889,15 @@ Sinatra устанавливает специальные <tt>not_found</tt> и
763
889
 
764
890
  content_type :foo
765
891
 
766
- == Rack подпрограммы
892
+ == Rack "прослойки"
767
893
 
768
894
  Sinatra использует Rack[http://rack.rubyforge.org/], минимальный стандартный
769
895
  интерфейс для веб-фреймворков на Ruby. Одной из самых интересных для разработчиков возможностей Rack
770
- является поддержка подпрограмм ("middleware") -- компонентов,
896
+ является поддержка "прослоек" ("middleware") компонентов,
771
897
  "сидящих" между сервером и вашим приложением, которые отслеживают и/или манипулируют
772
898
  HTTP запросами/ответами для предоставления различной функциональности.
773
899
 
774
- В Sinatra очень просто использовать такие Rack подпрограммы с помощью метода +use+:
900
+ В Sinatra очень просто использовать такие "прослойки" с помощью метода +use+:
775
901
 
776
902
  require 'sinatra'
777
903
  require 'my_custom_middleware'
@@ -792,7 +918,7 @@ Rack::Builder[http://rack.rubyforge.org/doc/classes/Rack/Builder.html] DSL
792
918
  username == 'admin' && password == 'secret'
793
919
  end
794
920
 
795
- Rack распространяется с различными стандартными подпрограммами
921
+ Rack распространяется с различными стандартными "прослойками"
796
922
  для логирования, отладки, маршрутизации URL, аутентификации, обработки сессий. Sinatra использует
797
923
  многие из этих компонентов автоматически, основываясь на конфигурации, чтобы вам не приходилось
798
924
  регистрировать/использовать (+use+) их вручную.
@@ -829,16 +955,15 @@ Rack распространяется с различными стандартн
829
955
  end
830
956
  end
831
957
 
832
- Заметьте: Встроенные модули Sinatra::Test и Sinatra::TestHarness являются
833
- устаревшими, начиная с 0.9.2 релиза.
958
+ Обратите внимание: Встроенные модуль Sinatra::Test и класс Sinatra::TestHarness являются
959
+ устаревшими, начиная с релиза 0.9.2.
834
960
 
835
- == Sinatra::Base - Подпрограммы, библиотеки и модульные приложения
961
+ == Sinatra::Base "прослойки", библиотеки и модульные приложения
836
962
 
837
963
  Описание своего приложения самым простейшим способом (с помощью DSL верхнего уровня, как в примерах выше)
838
- работает отлично для крохотных приложений, но имеет множество недостатков, когда надо
839
- создать компоненты, такие как Rack
840
- middleware, Rails metal, простые библиотеки с серверными компонентами,
841
- Sinatra расширения.
964
+ работает отлично для крохотных приложений, но имеет множество недостатков, когда надо создать компоненты, такие как
965
+ Rack middleware ("прослойки"), Rails metal, простые библиотеки с серверными компонентами,
966
+ расширения Sinatra.
842
967
  DSL верхнего уровня загрязняет пространство имен <tt>Object</tt> и подразумевает стиль конфигурации
843
968
  микро-приложения (например, единый файл приложения, ./public и
844
969
  ./views директории, создание логов, страницу деталей об исключениях
@@ -855,13 +980,6 @@ DSL верхнего уровня загрязняет пространство
855
980
  end
856
981
  end
857
982
 
858
- MyApp класс является независимым Rack компонентом, который может исполнять роли
859
- Rack подпрограммы, Rack приложения, Rails metal. Вы можете +use+ (использовать) или
860
- +run+ (запустить) этот класс из rackup файла +config.ru+; или контролировать серверную
861
- часть из библиотеки:
862
-
863
- MyApp.run! :host => 'localhost', :port => 9090
864
-
865
983
  Методы, доступные Sinatra::Base сабклассам идентичны тем, что доступны
866
984
  в DSL верхнего уровня. Большинство приложений верхнего уровня могут быть
867
985
  конвертированы в Sinatra::Base компоненты с помощью двух модификаций:
@@ -874,10 +992,68 @@ Rack подпрограммы, Rack приложения, Rails metal. Вы мо
874
992
  Смотрите {Опции и Конфигурация}[http://www.sinatrarb.com/configuration.html] для детальной информации
875
993
  об опциях и их поведении.
876
994
 
877
- === Использование Sinatra как подпрограммы
995
+ === Запуск модульных приложений
996
+
997
+ Есть два общепринятых способа запускать модульные приложения: запуск напрямую с помощью <tt>run!</tt>:
998
+
999
+ # my_app.rb
1000
+ require 'sinatra/base'
1001
+
1002
+ class MyApp < Sinatra::Base
1003
+ # ... здесь код приложения ...
1004
+
1005
+ # запускаем сервер, если исполняется текущий файл
1006
+ run! if app_file == $0
1007
+ end
1008
+
1009
+ И запускаем с помощью:
1010
+
1011
+ ruby my_app.rb
1012
+
1013
+ Или с помощью конфигурационного файла <tt>config.ru</tt>, который позволяет использовать любой
1014
+ Rack-совместимый сервер приложений.
1015
+
1016
+ # config.ru
1017
+ require 'my_app'
1018
+ run MyApp
1019
+
1020
+ Запускаем:
1021
+
1022
+ rackup -p 4567
1023
+
1024
+ === Запуск "классических" приложений с config.ru
1025
+
1026
+ Файл приложения:
1027
+
1028
+ # app.rb
1029
+ require 'sinatra'
1030
+
1031
+ get '/' do
1032
+ 'Hello world!'
1033
+ end
1034
+
1035
+ И соответствующий <tt>config.ru</tt>:
878
1036
 
879
- Не только сама Sinatra может использовать подпрограммы Rack, любое Sinatra приложение
880
- само может быть добавлено к любому Rack эндпоинту в качестве подпрограммы. Этим эндпоинтом
1037
+ require 'app'
1038
+ run Sinatra::Application
1039
+
1040
+ === Когда использовать config.ru?
1041
+
1042
+ Вот несколько причин, по которым вы, возможно, захотите использовать <tt>config.ru</tt>:
1043
+
1044
+ * вы хотите разворачивать свое приложение на различных Rack-совместимых серверах (Passenger, Unicorn,
1045
+ Heroku, ...).
1046
+ * вы хотите использовать более одного сабкласса <tt>Sinatra::Base</tt>.
1047
+ * вы хотите использовать Sinatra только в качестве "прослойки" Rack.
1048
+
1049
+ <b>Совсем необязательно переходить на использование <tt>config.ru</tt> лишь потому, что вы стали
1050
+ использовать модульный стиль приложения. И необязательно использовать модульный стиль, чтобы
1051
+ запускать приложение с помощью <tt>config.ru</tt>.</b>
1052
+
1053
+ === Использование Sinatra в качестве "прослойки"
1054
+
1055
+ Не только сама Sinatra может использовать "прослойки" Rack, но и любое Sinatra приложение
1056
+ само может быть добавлено к любому Rack эндпоинту в качестве "прослойки". Этим эндпоинтом
881
1057
  может быть другое Sinatra приложение, или приложение, основанное на Rack (Rails/Ramaze/Camping/...).
882
1058
 
883
1059
  require 'sinatra/base'
@@ -897,7 +1073,7 @@ Rack подпрограммы, Rack приложения, Rails metal. Вы мо
897
1073
  end
898
1074
 
899
1075
  class MyApp < Sinatra::Base
900
- # подпрограмма будет запущена перед фильтрами
1076
+ # "прослойка" будет запущена перед фильтрами
901
1077
  use LoginScreen
902
1078
 
903
1079
  before do
@@ -1014,31 +1190,69 @@ Sinatra приложения могут быть запущены напряму
1014
1190
 
1015
1191
  == На острие
1016
1192
 
1017
- Если вы хотите использовать новейший код Sinatra, то создайте локальный
1018
- клон и запускайте свое приложение с <tt>sinatra/lib</tt> директорией
1019
- в <tt>LOAD_PATH</tt>:
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>:
1020
1232
 
1021
1233
  cd myapp
1022
1234
  git clone git://github.com/sinatra/sinatra.git
1023
1235
  ruby -Isinatra/lib myapp.rb
1024
1236
 
1025
- Также вы можете добавить <tt>sinatra/lib</tt> директорию в
1026
- <tt>LOAD_PATH</tt> приложения:
1237
+ Чтобы обновить исходники Sinatra:
1027
1238
 
1028
- $LOAD_PATH.unshift File.dirname(__FILE__) + '/sinatra/lib'
1029
- require 'rubygems'
1030
- require 'sinatra'
1239
+ cd myapp/sinatra
1240
+ git pull
1031
1241
 
1032
- get '/about' do
1033
- "I'm running version " + Sinatra::VERSION
1034
- end
1242
+ === Установка глобально
1035
1243
 
1036
- Чтобы обновить исходники Sinatra:
1244
+ Вы можете самостоятельно собрать gem:
1037
1245
 
1038
- cd myproject/sinatra
1039
- git pull
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
1040
1254
 
1041
- == Больше информации
1255
+ == Дальнейшее чтение
1042
1256
 
1043
1257
  * {Вебсайт проекта}[http://www.sinatrarb.com/] - Дополнительная документация,
1044
1258
  новости и ссылки на другие ресурсы.