sinatra 1.3.0.a → 1.3.0.b

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.

Potentially problematic release.


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

@@ -1099,29 +1099,33 @@ error handlers) through the <tt>request</tt> method:
1099
1099
 
1100
1100
  # app running on http://example.com/example
1101
1101
  get '/foo' do
1102
- request.body # request body sent by the client (see below)
1103
- request.scheme # "http"
1104
- request.script_name # "/example"
1105
- request.path_info # "/foo"
1106
- request.port # 80
1107
- request.request_method # "GET"
1108
- request.query_string # ""
1109
- request.content_length # length of request.body
1110
- request.media_type # media type of request.body
1111
- request.host # "example.com"
1112
- request.get? # true (similar methods for other verbs)
1113
- request.form_data? # false
1114
- request["SOME_HEADER"] # value of SOME_HEADER header
1115
- request.referrer # the referrer of the client or '/'
1116
- request.user_agent # user agent (used by :agent condition)
1117
- request.cookies # hash of browser cookies
1118
- request.xhr? # is this an ajax request?
1119
- request.url # "http://example.com/example/foo"
1120
- request.path # "/example/foo"
1121
- request.ip # client IP address
1122
- request.secure? # false (would be true over ssl)
1123
- request.forwarded? # true (if running behind a reverse proxy)
1124
- request.env # raw env hash handed in by Rack
1102
+ t = %w[text/css text/html application/javascript]
1103
+ request.accept # ['text/html', '*/*']
1104
+ request.accept? 'text/xml' # true
1105
+ request.preferred_type(t) # 'text/html'
1106
+ request.body # request body sent by the client (see below)
1107
+ request.scheme # "http"
1108
+ request.script_name # "/example"
1109
+ request.path_info # "/foo"
1110
+ request.port # 80
1111
+ request.request_method # "GET"
1112
+ request.query_string # ""
1113
+ request.content_length # length of request.body
1114
+ request.media_type # media type of request.body
1115
+ request.host # "example.com"
1116
+ request.get? # true (similar methods for other verbs)
1117
+ request.form_data? # false
1118
+ request["SOME_HEADER"] # value of SOME_HEADER header
1119
+ request.referrer # the referrer of the client or '/'
1120
+ request.user_agent # user agent (used by :agent condition)
1121
+ request.cookies # hash of browser cookies
1122
+ request.xhr? # is this an ajax request?
1123
+ request.url # "http://example.com/example/foo"
1124
+ request.path # "/example/foo"
1125
+ request.ip # client IP address
1126
+ request.secure? # false (would be true over ssl)
1127
+ request.forwarded? # true (if running behind a reverse proxy)
1128
+ request.env # raw env hash handed in by Rack
1125
1129
  end
1126
1130
 
1127
1131
  Some options, like <tt>script_name</tt> or <tt>path_info</tt>, can also be
@@ -1615,6 +1619,45 @@ application (Rails/Ramaze/Camping/...):
1615
1619
  get('/') { "Hello #{session['user_name']}." }
1616
1620
  end
1617
1621
 
1622
+ === Dynamic Application Creation
1623
+
1624
+ Sometimes you want to create new applications at runtime without having to
1625
+ assign them to a constant, you can do this with `Sinatra.new`:
1626
+
1627
+ require 'sinatra/base'
1628
+ my_app = Sinatra.new { get('/') { "hi" } }
1629
+ my_app.run!
1630
+
1631
+ It takes the application to inherit from as optional argument:
1632
+
1633
+ require 'sinatra/base'
1634
+
1635
+ controller = Sinatra.new do
1636
+ enable :logging
1637
+ helpers MyHelpers
1638
+ end
1639
+
1640
+ map('/a') do
1641
+ run Sinatra.new(controller) { get('/') { 'a' } }
1642
+ end
1643
+
1644
+ map('/b') do
1645
+ run Sinatra.new(controller) { get('/') { 'b' } }
1646
+ end
1647
+
1648
+ This is especially useful for testing Sinatra extensions or using Sinatra in
1649
+ your own library.
1650
+
1651
+ This also makes using Sinatra as middleware extremely easy:
1652
+
1653
+ require 'sinatra/base'
1654
+
1655
+ use Sinatra do
1656
+ get('/') { ... }
1657
+ end
1658
+
1659
+ run RailsProject::Application
1660
+
1618
1661
  == Scopes and Binding
1619
1662
 
1620
1663
  The scope you are currently in determines what methods and variables are
@@ -1647,6 +1690,7 @@ You have the application scope binding inside:
1647
1690
  * Methods defined by extensions
1648
1691
  * The block passed to +helpers+
1649
1692
  * Procs/blocks used as value for +set+
1693
+ * The block passed to <tt>Sinatra.new</tt>
1650
1694
 
1651
1695
  You can reach the scope object (the class) like this:
1652
1696
 
@@ -1,8 +1,7 @@
1
1
  = Sinatra
2
2
  <i>Внимание: Этот документ является переводом Английской версии и может быть устаревшим</i>
3
3
 
4
- Sinatra — это предметно-ориентированный язык (DSL) для быстрого создания приложений на Ruby с
5
- приложением минимума усилий:
4
+ Sinatra — это предметно-ориентированный каркас (DSL) для быстрого создания функциональных веб-приложений на Ruby:
6
5
 
7
6
  # myapp.rb
8
7
  require 'sinatra'
@@ -11,20 +10,23 @@ Sinatra — это предметно-ориентированный язык (D
11
10
  'Hello world!'
12
11
  end
13
12
 
14
- Установите gem и запустите приложение с помощью:
13
+ Установите gem:
15
14
 
16
15
  gem install sinatra
16
+
17
+ и запустите приложение с помощью:
18
+
17
19
  ruby -rubygems myapp.rb
18
20
 
19
- Результат будет тут: http://localhost:4567
21
+ Результат можно увидеть: http://localhost:4567
20
22
 
21
- Рекомендуется также запустить <tt>gem install thin</tt>, чтобы Sinatra
22
- могла использовать thin в качестве сервера.
23
+ Рекомендуется также установить thin, сделать это можно командой: <tt>gem install thin</tt>.
24
+ Thin - это более производительный и функциональный сервер для разработки приложений на Sinatra.
23
25
 
24
26
  == Маршруты
25
27
 
26
- В Sinatra маршрут — это пара: HTTP метод и шаблон (образец) URL.
27
- Каждый маршрут ассоциирован с блоком:
28
+ В Sinatra маршрут — это пара: <HTTP метод> и <шаблон URL>.
29
+ Каждый маршрут ассоциирован с блоком кода, исполняемого внутри, пример:
28
30
 
29
31
  get '/' do
30
32
  .. что-то показать ..
@@ -50,7 +52,7 @@ Sinatra — это предметно-ориентированный язык (D
50
52
  .. что-то ответить ..
51
53
  end
52
54
 
53
- Маршруты сверяются с запросом по очередности определения. Первый же совпавший с запросом маршрут и будет вызван.
55
+ Маршруты сверяются с запросом в порядке очередности их записи в файле приложения. По умолчанию, будет вызван первый совпавший с запросом маршрут.
54
56
 
55
57
  Шаблоны маршрутов могут включать в себя параметры доступные в
56
58
  <tt>params</tt> xэше:
@@ -67,8 +69,8 @@ Sinatra — это предметно-ориентированный язык (D
67
69
  "Hello #{n}!"
68
70
  end
69
71
 
70
- Шаблоны маршрутов также могут включать splat (wildcard, *, любая строка символов) параметры доступные
71
- в <tt>params[:splat]</tt> массиве:
72
+ Шаблоны маршрутов также могут включать splat (или '*' маску, обозначающую любой символ) параметры доступные
73
+ в массиве <tt>params[:splat]</tt>:
72
74
 
73
75
  get '/say/*/to/*' do
74
76
  # соответствует /say/hello/to/world
@@ -80,7 +82,7 @@ Sinatra — это предметно-ориентированный язык (D
80
82
  params[:splat] # => ["path/to/file", "xml"]
81
83
  end
82
84
 
83
- Маршруты также могут использовать регулярные выражения в качестве шаблона URL:
85
+ Маршруты также могут содержать регулярные выражения:
84
86
 
85
87
  get %r{/hello/([\w]+)} do
86
88
  "Hello, #{params[:captures].first}!"
@@ -118,7 +120,7 @@ Sinatra — это предметно-ориентированный язык (D
118
120
  builder :feed
119
121
  end
120
122
 
121
- Довольно легко можно задать собственные условия:
123
+ Вы можете задать собственные условия:
122
124
 
123
125
  set(:probability) { |value| condition { rand <= value } }
124
126
 
@@ -133,18 +135,17 @@ Sinatra — это предметно-ориентированный язык (D
133
135
  === Возвращаемые значения
134
136
 
135
137
  Возвращаемое значение блока маршрута ограничивается телом ответа, которое будет передано HTTP клиенту,
136
- или следующей "прослойкой" (middleware, промежуточная программа) в Rack стеке. Чаще всего это строка, как в вышеизложенных примерах.
138
+ или следующей "прослойкой" (middleware) в Rack стеке. Чаще всего это строка, как в примерах выше.
137
139
  Но и другие значения также приемлемы.
138
140
 
139
- Вы можете вернуть любой объект, который будет либо корректным Rack ответом, Rack
140
- телом ответа, либо кодом состояния HTTP:
141
+ Вы можете вернуть любой объект, который будет либо корректным Rack ответом, объектом Rack body, либо кодом состояния HTTP:
141
142
 
142
- * Массив с тремя переменными: <tt>[status (Fixnum), headers (Hash), response body (должен отвечать на #each)]</tt>
143
- * Массив с двумя переменными: <tt>[status (Fixnum), response body (должен отвечать на #each)]</tt>
144
- * Объект, отвечающий на <tt>#each</tt>, который передает только строковые типы данных в этот блок
145
- * Fixnum, соответствующий коду состояния HTTP
143
+ * массив с тремя переменными: <tt>[status (Fixnum), headers (Hash), response body (должен отвечать на #each)]</tt>;
144
+ * массив с двумя переменными: <tt>[status (Fixnum), response body (должен отвечать на #each)]</tt>;
145
+ * объект, отвечающий на <tt>#each</tt>, который передает только строковые типы данных в этот блок;
146
+ * Fixnum, представляющий код состояния HTTP.
146
147
 
147
- Таким образом мы легко можем создать поточный пример:
148
+ Таким образом, мы легко можем создать поточный пример:
148
149
 
149
150
  class Stream
150
151
  def each
@@ -157,7 +158,7 @@ Sinatra — это предметно-ориентированный язык (D
157
158
  === Собственные детекторы совпадений для маршрутов
158
159
 
159
160
  Как показано выше, Sinatra поставляется со встроенной поддержкой строк и
160
- регулярных выражений как шаблонов URL. Но и это еще не все. Вы можете
161
+ регулярных выражений в качестве шаблонов URL. Но и это еще не все. Вы можете
161
162
  легко определить свои собственные детекторы совпадений (matchers) для маршрутов:
162
163
 
163
164
  class AllButPattern
@@ -181,8 +182,7 @@ Sinatra — это предметно-ориентированный язык (D
181
182
  # ...
182
183
  end
183
184
 
184
- Заметьте, что предыдущий пример довольно переусложнен, ведь он также может
185
- быть записан в следующем виде:
185
+ Заметьте, что предыдущий пример возможно чересчур сложен, он также может быть представлен как:
186
186
 
187
187
  get // do
188
188
  pass if request.path_info == "/index"
@@ -198,7 +198,7 @@ Sinatra — это предметно-ориентированный язык (D
198
198
  == Статические файлы
199
199
 
200
200
  Статические файлы отдаются из <tt>./public</tt> директории. Вы можете указать другое место,
201
- используя <tt>:public</tt> опцию:
201
+ указав его через опцию <tt>:public</tt>:
202
202
 
203
203
  set :public, File.dirname(__FILE__) + '/static'
204
204
 
@@ -206,17 +206,17 @@ Sinatra — это предметно-ориентированный язык (D
206
206
  <tt>./public/css/style.css</tt> будет доступен как
207
207
  <tt>http://example.com/css/style.css</tt>.
208
208
 
209
- == Виды / Шаблоны
209
+ == Представления / Шаблоны
210
210
 
211
- Шаблоны по умолчанию будут использованы из директории <tt>./views</tt>.
212
- Для использования другой директории:
211
+ Шаблоны по умолчанию должны находиться в директории <tt>./views</tt>.
212
+ Для использования другой директории шаблонов:
213
213
 
214
214
  set :views, File.dirname(__FILE__) + '/templates'
215
215
 
216
216
  Важно помнить, что вы всегда должны указывать шаблоны
217
217
  с помощью символов, даже если это подкаталог (в этом случае
218
218
  используйте <tt>:'subdir/template'</tt>). Вы должны использовать
219
- символ, иначе методы, ответственные за рендеринг, отобразят просто переданную им строку.
219
+ символ, иначе методы рендеринга, отобразят просто переданную им строку.
220
220
 
221
221
  === Haml шаблоны
222
222
 
@@ -229,7 +229,7 @@ Sinatra — это предметно-ориентированный язык (D
229
229
  haml :index
230
230
  end
231
231
 
232
- Отрисует <tt>./views/index.haml</tt>.
232
+ Отобразит <tt>./views/index.haml</tt>.
233
233
 
234
234
  {Опции Haml}[http://haml-lang.com/docs/yardoc/file.HAML_REFERENCE.html#options]
235
235
  могут быть установлены глобально через конфигурацию Sinatra,
@@ -252,7 +252,7 @@ Sinatra — это предметно-ориентированный язык (D
252
252
  erb :index
253
253
  end
254
254
 
255
- Отрисует <tt>./views/index.erb</tt>.
255
+ Отобразит <tt>./views/index.erb</tt>.
256
256
 
257
257
  === Erubis шаблоны
258
258
 
@@ -265,7 +265,7 @@ Sinatra — это предметно-ориентированный язык (D
265
265
  erubis :index
266
266
  end
267
267
 
268
- Отрисует <tt>./views/index.erubis</tt>.
268
+ Отобразит <tt>./views/index.erubis</tt>.
269
269
 
270
270
  Также возможно заменить Erb на Erubis:
271
271
 
@@ -276,7 +276,7 @@ Sinatra — это предметно-ориентированный язык (D
276
276
  erb :index
277
277
  end
278
278
 
279
- Отрисует <tt>./views/index.erb</tt> с помощью Erubis.
279
+ Отобразит <tt>./views/index.erb</tt> с помощью Erubis.
280
280
 
281
281
  === Builder шаблоны
282
282
 
@@ -289,7 +289,7 @@ Sinatra — это предметно-ориентированный язык (D
289
289
  builder :index
290
290
  end
291
291
 
292
- Отрисует <tt>./views/index.builder</tt>.
292
+ Отобразит <tt>./views/index.builder</tt>.
293
293
 
294
294
  === Nokogiri шаблоны
295
295
 
@@ -302,7 +302,7 @@ Sinatra — это предметно-ориентированный язык (D
302
302
  nokogiri :index
303
303
  end
304
304
 
305
- Отрисует <tt>./views/index.nokogiri</tt>.
305
+ Отобразит <tt>./views/index.nokogiri</tt>.
306
306
 
307
307
  === Sass шаблоны
308
308
 
@@ -315,7 +315,7 @@ Sinatra — это предметно-ориентированный язык (D
315
315
  sass :stylesheet
316
316
  end
317
317
 
318
- Отрисует <tt>./views/stylesheet.sass</tt>.
318
+ Отобразит <tt>./views/stylesheet.sass</tt>.
319
319
 
320
320
  {Опции Sass}[http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#options]
321
321
  могут быть установлены глобально через конфигурацию Sinatra,
@@ -339,7 +339,7 @@ Sinatra — это предметно-ориентированный язык (D
339
339
  scss :stylesheet
340
340
  end
341
341
 
342
- Отрисует <tt>./views/stylesheet.scss</tt>.
342
+ Отобразит <tt>./views/stylesheet.scss</tt>.
343
343
 
344
344
  {Опции Scss}[http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#options]
345
345
  могут быть установлены глобально через конфигурацию Sinatra,
@@ -363,7 +363,7 @@ Sinatra — это предметно-ориентированный язык (D
363
363
  less :stylesheet
364
364
  end
365
365
 
366
- Отрисует <tt>./views/stylesheet.less</tt>.
366
+ Отобразит <tt>./views/stylesheet.less</tt>.
367
367
 
368
368
  === Liquid шаблоны
369
369
 
@@ -376,7 +376,7 @@ Sinatra — это предметно-ориентированный язык (D
376
376
  liquid :index
377
377
  end
378
378
 
379
- Отрисует <tt>./views/index.liquid</tt>.
379
+ Отобразит <tt>./views/index.liquid</tt>.
380
380
 
381
381
  Так как в Liquid шаблонах невозможно вызывать методы из Ruby (кроме +yield+),
382
382
  то вы почти всегда будете передавать локальные переменные:
@@ -388,13 +388,13 @@ Sinatra — это предметно-ориентированный язык (D
388
388
  <tt>rdiscount</tt> gem/библиотека необходима для рендеринга Markdown шаблонов:
389
389
 
390
390
  # Вам нужно будет подключить rdiscount в приложении
391
- require "rdiscount"
391
+ require 'rdiscount'
392
392
 
393
393
  get '/' do
394
394
  markdown :index
395
395
  end
396
396
 
397
- Отрисует <tt>./views/index.markdown</tt> (+md+ и +mkd+ также являются допустимыми файловыми
397
+ Отобразит <tt>./views/index.markdown</tt> (+md+ и +mkd+ также являются допустимыми файловыми
398
398
  расширениями).
399
399
 
400
400
  В Markdown невозможно вызывать методы или передавать локальные переменные.
@@ -410,14 +410,14 @@ Sinatra — это предметно-ориентированный язык (D
410
410
 
411
411
  Вы не можете вызывать Ruby из Markdown, соответственно, вы не можете использовать
412
412
  лэйаут-шаблоны (layouts) на Markdown. Тем не менее, есть возможность использовать один
413
- движок рендеринга для шаблона, а другой для лэйаута с помощью опции <tt>:layout_engine</tt>:
413
+ движок рендеринга для шаблона, а другой для лэйаута (разметки) с помощью опции <tt>:layout_engine</tt>:
414
414
 
415
415
  get '/' do
416
416
  markdown :index, :layout_engine => :erb
417
417
  end
418
418
 
419
- Отрисует <tt>./views/index.md</tt> с <tt>./views/layout.erb</tt> в качестве
420
- лэйаута.
419
+ Отобразит <tt>./views/index.md</tt> с <tt>./views/layout.erb</tt> в качестве
420
+ лэйаута (разметки).
421
421
 
422
422
  Также вы можете задать такие опции рендеринга глобально:
423
423
 
@@ -427,8 +427,8 @@ Sinatra — это предметно-ориентированный язык (D
427
427
  markdown :index
428
428
  end
429
429
 
430
- Отрисует <tt>./views/index.md</tt> (и любой другой шаблон на Markdown) с
431
- <tt>./views/post.haml</tt> в качестве лэйаута.
430
+ Отобразит <tt>./views/index.md</tt> (и любой другой шаблон на Markdown) с
431
+ <tt>./views/post.haml</tt> в качестве лэйаута (разметки).
432
432
 
433
433
  Также возможно обрабатывать Markdown с помощью BlueCloth, а не RDiscount:
434
434
 
@@ -442,20 +442,20 @@ Sinatra — это предметно-ориентированный язык (D
442
442
  markdown :index
443
443
  end
444
444
 
445
- Отрисует <tt>./views/index.md</tt> с помощью BlueCloth.
445
+ Отобразит <tt>./views/index.md</tt> с помощью BlueCloth.
446
446
 
447
447
  === Textile шаблоны
448
448
 
449
449
  <tt>RedCloth</tt> gem/библиотека необходима для рендеринга Textile шаблонов:
450
450
 
451
451
  # Вам нужно будет подключить redcloth в приложении
452
- require "redcloth"
452
+ require 'redcloth'
453
453
 
454
454
  get '/' do
455
455
  textile :index
456
456
  end
457
457
 
458
- Отрисует <tt>./views/index.textile</tt>.
458
+ Отобразит <tt>./views/index.textile</tt>.
459
459
 
460
460
  В Textile невозможно вызывать методы или передавать локальные переменные. Следовательно, вам, скорее всего,
461
461
  придется использовать этот шаблон совместно с другим движком рендеринга:
@@ -469,14 +469,14 @@ Sinatra — это предметно-ориентированный язык (D
469
469
 
470
470
  Вы не можете вызывать Ruby из Textile, соответственно, вы не можете использовать
471
471
  лэйаут-шаблоны на Textile. Тем не менее, есть возможность использовать один
472
- движок рендеринга для шаблона, а другой для лэйаута с помощью опции <tt>:layout_engine</tt>:
472
+ движок рендеринга для шаблона, а другой для лэйаута (разметки) с помощью опции <tt>:layout_engine</tt>:
473
473
 
474
474
  get '/' do
475
475
  textile :index, :layout_engine => :erb
476
476
  end
477
477
 
478
- Отрисует <tt>./views/index.textile</tt> с <tt>./views/layout.erb</tt> в качестве
479
- лэйаута.
478
+ Отобразит <tt>./views/index.textile</tt> с <tt>./views/layout.erb</tt> в качестве
479
+ лэйаута (разметки).
480
480
 
481
481
  Также вы можете задать такие опции рендеринга глобально:
482
482
 
@@ -486,21 +486,21 @@ Sinatra — это предметно-ориентированный язык (D
486
486
  textile :index
487
487
  end
488
488
 
489
- Отрисует <tt>./views/index.textile</tt> (и любой другой шаблон на Textile) с
490
- <tt>./views/post.haml</tt> в качестве лэйаута.
489
+ Отобразит <tt>./views/index.textile</tt> (и любой другой шаблон на Textile) с
490
+ <tt>./views/post.haml</tt> в качестве лэйаута (разметки).
491
491
 
492
492
  === RDoc шаблоны
493
493
 
494
494
  <tt>rdoc</tt> gem/библиотека необходима для рендеринга RDoc шаблонов:
495
495
 
496
496
  # Вам нужно будет подключить rdoc/markup/to_html в приложении
497
- require "rdoc/markup/to_html"
497
+ require 'rdoc/markup/to_html'
498
498
 
499
499
  get '/' do
500
500
  rdoc :index
501
501
  end
502
502
 
503
- Отрисует <tt>./views/index.rdoc</tt>.
503
+ Отобразит <tt>./views/index.rdoc</tt>.
504
504
 
505
505
  В RDoc невозможно вызывать методы или передавать локальные переменные. Следовательно, вам, скорее всего,
506
506
  придется использовать этот шаблон совместно с другим движком рендеринга:
@@ -514,14 +514,14 @@ Sinatra — это предметно-ориентированный язык (D
514
514
 
515
515
  Вы не можете вызывать Ruby из RDoc, соответственно, вы не можете использовать
516
516
  лэйаут-шаблоны на RDoc. Тем не менее, есть возможность использовать один
517
- движок рендеринга для шаблона, а другой для лэйаута с помощью опции <tt>:layout_engine</tt>:
517
+ движок рендеринга для шаблона, а другой для лэйаута (разметки) с помощью опции <tt>:layout_engine</tt>:
518
518
 
519
519
  get '/' do
520
520
  rdoc :index, :layout_engine => :erb
521
521
  end
522
522
 
523
- Отрисует <tt>./views/index.rdoc</tt> с <tt>./views/layout.erb</tt> в качестве
524
- лэйаута.
523
+ Отобразит <tt>./views/index.rdoc</tt> с <tt>./views/layout.erb</tt> в качестве
524
+ лэйаута (разметки).
525
525
 
526
526
  Также вы можете задать такие опции рендеринга глобально:
527
527
 
@@ -531,8 +531,8 @@ Sinatra — это предметно-ориентированный язык (D
531
531
  rdoc :index
532
532
  end
533
533
 
534
- Отрисует <tt>./views/index.rdoc</tt> (и любой другой шаблон на RDoc) с
535
- <tt>./views/post.haml</tt> в качестве лэйаута.
534
+ Отобразит <tt>./views/index.rdoc</tt> (и любой другой шаблон на RDoc) с
535
+ <tt>./views/post.haml</tt> в качестве лэйаута (разметки).
536
536
 
537
537
  === Radius шаблоны
538
538
 
@@ -545,7 +545,7 @@ Sinatra — это предметно-ориентированный язык (D
545
545
  radius :index
546
546
  end
547
547
 
548
- Отрисует <tt>./views/index.radius</tt>.
548
+ Отобразит <tt>./views/index.radius</tt>.
549
549
 
550
550
  Так как в Radius шаблоне невозможно вызывать методы из Ruby (кроме +yield+),
551
551
  то вы почти всегда будете передавать локальные переменные:
@@ -563,7 +563,7 @@ Sinatra — это предметно-ориентированный язык (D
563
563
  markaby :index
564
564
  end
565
565
 
566
- Отрисует <tt>./views/index.mab</tt>.
566
+ Отобразит <tt>./views/index.mab</tt>.
567
567
 
568
568
  Вы также можете использовать внутристроковые Markaby шаблоны:
569
569
 
@@ -582,29 +582,29 @@ Sinatra — это предметно-ориентированный язык (D
582
582
  slim :index
583
583
  end
584
584
 
585
- Отрисует <tt>./views/index.slim</tt>.
585
+ Отобразит <tt>./views/index.slim</tt>.
586
586
 
587
587
  === CoffeeScript шаблоны
588
588
 
589
589
  Вам понадобится <tt>coffee-script</tt> gem/библиотека и что-то <b>одно</b> из следующего списка,
590
590
  чтобы запускать JavaScript:
591
591
 
592
- * +node+ (из Node.js)
593
- * вы можете использовать OSX (есть встроенные средства для выполнения JavaScript)
594
- * +therubyracer+ gem/библиотека
592
+ * +node+ (из Node.js);
593
+ * вы можете использовать OS X (в которой есть встроенные средства для выполнения JavaScript);
594
+ * +therubyracer+ gem/библиотека.
595
595
 
596
596
  Подробнее смотрите на {странице проекта}[http://github.com/josh/ruby-coffee-script].
597
597
 
598
- Таким образом вы можете использовать CoffeeScript шаблоны.
598
+ Таким образом, вы можете использовать CoffeeScript шаблоны.
599
599
 
600
- # Вам нужно будет подключить coffee-script в приложении
600
+ # Вам нужно будет подключить coffee-script gem в приложении
601
601
  require 'coffee-script'
602
602
 
603
603
  get '/application.js' do
604
604
  coffee :application
605
605
  end
606
606
 
607
- Отрисует <tt>./views/application.coffee</tt>.
607
+ Отобразит <tt>./views/application.coffee</tt>.
608
608
 
609
609
  === Встроенные шаблоны
610
610
 
@@ -612,7 +612,7 @@ Sinatra — это предметно-ориентированный язык (D
612
612
  haml '%div.title Hello World'
613
613
  end
614
614
 
615
- Отрисует встроенный (строчный) шаблон.
615
+ Отобразит строку встроенного шаблона.
616
616
 
617
617
  === Доступ к переменным в шаблонах
618
618
 
@@ -631,11 +631,11 @@ Sinatra — это предметно-ориентированный язык (D
631
631
  haml '%h1= foo.name', :locals => { :foo => foo }
632
632
  end
633
633
 
634
- Это обычный подход, когда шаблоны рендерятся как частные (partials) из других шаблонов.
634
+ Это обычный подход, когда шаблоны рендерятся как части других шаблонов.
635
635
 
636
636
  === Вложенные шаблоны
637
637
 
638
- Шаблоны также могут быть определены в конце файла-исходника:
638
+ Шаблоны также могут быть определены в конце исходного файла:
639
639
 
640
640
  require 'sinatra'
641
641
 
@@ -652,13 +652,13 @@ Sinatra — это предметно-ориентированный язык (D
652
652
  @@ index
653
653
  %div.title Hello world!!!!!
654
654
 
655
- Заметьте: вложенные шаблоны, определенные в файле-исходнике, который подключил Sinatra, будут
655
+ Заметьте: вложенные шаблоны, определенные в исходном файле, который подключила Sinatra, будут
656
656
  автоматически загружены. Вызовите <tt>enable :inline_templates</tt> напрямую, если у вас вложенные
657
657
  шаблоны в других файлах.
658
658
 
659
659
  === Именные шаблоны
660
660
 
661
- Шаблоны также могут быть определены, используя <tt>template</tt> метод:
661
+ Шаблоны также могут быть определены при помощи <tt>template</tt> метода:
662
662
 
663
663
  template :layout do
664
664
  "%html\n =yield\n"
@@ -672,8 +672,8 @@ Sinatra — это предметно-ориентированный язык (D
672
672
  haml :index
673
673
  end
674
674
 
675
- Если шаблон с именем "layout" существует, то он будет использован каждый раз,
676
- когда шаблоны будут отрисовываться. Вы можете отключать лэйаут в каждом конкретном случае с помощью
675
+ Если шаблон с именем "layout" существует, то он будет использоваться каждый раз
676
+ при рендеринге. Вы можете отключать лэйаут (разметку) в каждом конкретном случае с помощью
677
677
  <tt>:layout => false</tt> или отключить его для всего приложения, например, так: <tt>set :haml, :layout => false</tt>:
678
678
 
679
679
  get '/' do
@@ -682,7 +682,7 @@ Sinatra — это предметно-ориентированный язык (D
682
682
 
683
683
  === Привязка файловых расширений
684
684
 
685
- Чтобы связать расширение файла и движок рендеринга, используйте
685
+ Чтобы связать расширение файла с движком рендеринга, используйте
686
686
  <tt>Tilt.register</tt>. Например, если вы хотите использовать расширение +tt+
687
687
  для шаблонов Textile:
688
688
 
@@ -702,7 +702,7 @@ Sinatra — это предметно-ориентированный язык (D
702
702
  myat :index
703
703
  end
704
704
 
705
- Отрисует <tt>./views/index.myat</tt>. Чтобы узнать больше о Tilt,
705
+ Отобразит <tt>./views/index.myat</tt>. Чтобы узнать больше о Tilt,
706
706
  смотрите https://github.com/rtomayko/tilt
707
707
 
708
708
  == Фильтры
@@ -729,9 +729,9 @@ Sinatra — это предметно-ориентированный язык (D
729
729
  end
730
730
 
731
731
  Заметьте: если вы используете метод +body+, а не просто возвращаете строку из
732
- маршрута, то тело ответа не будет доступно в +after+-фильтрах, потому что оно будет сгенерировано позднее.
732
+ маршрута, то тело ответа не будет доступно в +after+-фильтрах, так как оно будет сгенерировано позднее.
733
733
 
734
- Фильтры могут использовать шаблоны URL и будут интерпретированы, только если путь запроса совпадет с этим шаблоном:
734
+ Фильтры могут использовать шаблоны URL и будут интерпретированы только если путь запроса совпадет с этим шаблоном:
735
735
 
736
736
  before '/protected/*' do
737
737
  authenticate!
@@ -782,7 +782,7 @@ Sinatra — это предметно-ориентированный язык (D
782
782
  end
783
783
 
784
784
  Заметьте, что при использовании <tt>enable :sessions</tt> все данные
785
- сохраняются в куки. Это может быть не совсем то, что вы хотите (например,
785
+ сохраняются в cookies. Это может быть не совсем то, что вы хотите (например,
786
786
  сохранение больших объемов данных увеличит ваш трафик). В таком случае вы
787
787
  можете использовать альтернативную Rack "прослойку" (middleware), реализующую
788
788
  механизм сессий. Для этого *не надо* вызывать <tt>enable :sessions</tt>,
@@ -806,8 +806,7 @@ Sinatra — это предметно-ориентированный язык (D
806
806
 
807
807
  set :session_secret, 'super secret'
808
808
 
809
- Если вы хотите больше настроек для сессий, вы можете задать их, используя
810
- хэш с опциями и параметр +sessions+:
809
+ Если вы хотите больше настроек для сессий, вы можете задать их, передав хэш опций в параметр +sessions+:
811
810
 
812
811
  set :sessions, :domain => 'foo.com'
813
812
 
@@ -909,6 +908,29 @@ Sinatra — это предметно-ориентированный язык (D
909
908
  Как и +body+, методы +headers+ и +status+, вызванные без аргументов, возвращают
910
909
  свои текущие значения.
911
910
 
911
+ === Логирование
912
+
913
+ В области видимости запроса метод +logger+ предоставляет доступ к экземпляру +Logger+:
914
+
915
+ get '/' do
916
+ logger.info "loading data"
917
+ # ...
918
+ end
919
+
920
+ Этот логер автоматически учитывает ваши настройки логирования в Rack. Если
921
+ логирование выключено, то этот метод вернет пустой (dummy) объект, поэтому вы можете
922
+ смело использовать его в маршрутах и фильтрах.
923
+
924
+ Заметьте, что логирование включено по умолчанию только для <tt>Sinatra::Application</tt>,
925
+ а если ваше приложение -- подкласс <tt>Sinatra::Base</tt>, то вы, наверное, захотите включить
926
+ его вручную:
927
+
928
+ class MyApp < Sinatra::Base
929
+ configure(:production, :development) do
930
+ enable :logging
931
+ end
932
+ end
933
+
912
934
  === Mime-типы
913
935
 
914
936
  Когда вы используете <tt>send_file</tt> или статические файлы, у вас могут быть mime-типы, которые Sinatra
@@ -916,7 +938,7 @@ Sinatra — это предметно-ориентированный язык (D
916
938
 
917
939
  mime_type :foo, 'text/foo'
918
940
 
919
- Вы также можете использовать это в +content_type+ помощнике:
941
+ Вы также можете использовать это в +content_type+ методе-помощнике:
920
942
 
921
943
  get '/' do
922
944
  content_type :foo
@@ -1000,9 +1022,9 @@ Sinatra — это предметно-ориентированный язык (D
1000
1022
  end
1001
1023
 
1002
1024
  Чтобы как следует использовать кэши, вам следует подумать об использовании
1003
- +etag+ и +last_modified+. Рекомендуется использовать эти методы *до*
1025
+ +etag+ и +last_modified+. Рекомендуется использовать эти методы-помощники *до*
1004
1026
  выполнения "тяжелых" вычислений, так как они немедленно отправят ответ клиенту,
1005
- если текущая версия уже есть в его кэше:
1027
+ если текущая версия уже есть в их кэше:
1006
1028
 
1007
1029
  get '/article/:id' do
1008
1030
  @article = Article.find params[:id]
@@ -1011,7 +1033,7 @@ Sinatra — это предметно-ориентированный язык (D
1011
1033
  erb :article
1012
1034
  end
1013
1035
 
1014
- Так же вы можете использовать
1036
+ Также вы можете использовать
1015
1037
  {weak ETag}[http://en.wikipedia.org/wiki/HTTP_ETag#Strong_and_weak_validation]:
1016
1038
 
1017
1039
  etag @article.sha1, :weak
@@ -1020,8 +1042,8 @@ Sinatra — это предметно-ориентированный язык (D
1020
1042
  необходимую информацию для вашего кэша. Если вы ищите легкое решение для
1021
1043
  кэширования, попробуйте {rack-cache}[http://rtomayko.github.com/rack-cache/]:
1022
1044
 
1023
- require "rack/cache"
1024
- require "sinatra"
1045
+ require 'rack/cache'
1046
+ require 'sinatra'
1025
1047
 
1026
1048
  use Rack::Cache
1027
1049
 
@@ -1052,7 +1074,7 @@ Sinatra — это предметно-ориентированный язык (D
1052
1074
  значение для заголовка Last-Modified, по умолчанию: mtime (время изменения) файла.
1053
1075
 
1054
1076
  [type]
1055
- тип файла, по умолчанию: угадывается по расширению файла.
1077
+ тип файла, по умолчанию: предполагается по расширению файла.
1056
1078
 
1057
1079
  [disposition]
1058
1080
  используется для заголовка Content-Disposition, возможные значения:
@@ -1067,7 +1089,7 @@ Sinatra — это предметно-ориентированный язык (D
1067
1089
  Метод <tt>send_file</tt> также обеспечивает автоматическую обработку частичных (range)
1068
1090
  запросов с помощью Sinatra.
1069
1091
 
1070
- === Доспут к объекту запроса
1092
+ === Доступ к объекту запроса
1071
1093
 
1072
1094
  Объект входящего запроса доступен на уровне обработки запроса (в фильтрах, маршрутах,
1073
1095
  обработчиках ошибок) с помощью <tt>request</tt> метода:
@@ -1089,7 +1111,7 @@ Sinatra — это предметно-ориентированный язык (D
1089
1111
  request["SOME_HEADER"] # значение заголовка SOME_HEADER
1090
1112
  request.referrer # источник запроса клиента либо '/'
1091
1113
  request.user_agent # user agent (используется для :agent условия)
1092
- request.cookies # хеш с куками браузера
1114
+ request.cookies # хеш, содержащий cookies браузера
1093
1115
  request.xhr? # является ли запрос ajax запросом?
1094
1116
  request.url # "http://example.com/example/foo"
1095
1117
  request.path # "/example/foo"
@@ -1099,7 +1121,7 @@ Sinatra — это предметно-ориентированный язык (D
1099
1121
  request.env # "сырой" env хеш, полученный Rack
1100
1122
  end
1101
1123
 
1102
- Некоторые опции, такие как <tt>script_name</tt> или <tt>path_info</tt> доступны для записи:
1124
+ Некоторые опции, такие как <tt>script_name</tt> или <tt>path_info</tt> доступны для изменения:
1103
1125
 
1104
1126
  before { request.path_info = "/" }
1105
1127
 
@@ -1125,7 +1147,7 @@ Sinatra — это предметно-ориентированный язык (D
1125
1147
  "store it!"
1126
1148
  end
1127
1149
 
1128
- Вы также можете указать и имя файла:
1150
+ Вы также можете указать имя файла:
1129
1151
 
1130
1152
  get '/' do
1131
1153
  attachment "info.txt"
@@ -1170,8 +1192,8 @@ Sinatra — это предметно-ориентированный язык (D
1170
1192
  а вызывает заданный блок для всех возможных путей. Дело тут не в производительности,
1171
1193
  дело в том, что +render+ вызовет +break+, как только файл не будет найден.
1172
1194
  Содержимое и местонахождение шаблонов будет закэшировано, если приложение запущено не
1173
- в режиме разработки. Вы должны помнить об этих нюансах, если пишите по-настоящему
1174
- сумашедший метод.
1195
+ в режиме разработки (set :environment, :development). Вы должны помнить об этих нюансах,
1196
+ если пишите по-настоящему "сумашедший" метод.
1175
1197
 
1176
1198
  == Конфигурация
1177
1199
 
@@ -1252,7 +1274,7 @@ Sinatra — это предметно-ориентированный язык (D
1252
1274
  [environment] текущее окружение, по умолчанию, значение <tt>ENV['RACK_ENV']</tt>
1253
1275
  или <tt>"development"</tt>, если <tt>ENV['RACK_ENV']</tt> не доступна.
1254
1276
 
1255
- [logging] использовать логгер.
1277
+ [logging] использовать логер.
1256
1278
 
1257
1279
  [lock] создает блокировку для каждого запроса, которая гарантирует обработку
1258
1280
  только одного запроса в текущий момент времени в Ruby процессе.
@@ -1268,7 +1290,7 @@ Sinatra — это предметно-ориентированный язык (D
1268
1290
  встроенным сервером.
1269
1291
 
1270
1292
  [prefixed_redirects] добавлять или нет параметр <tt>request.script_name</tt> к редиректам,
1271
- если не задан абсолютный путь. Таким образом <tt>redirect '/foo'</tt>
1293
+ если не задан абсолютный путь. Таким образом, <tt>redirect '/foo'</tt>
1272
1294
  будет вести себя как <tt>redirect to('/foo')</tt>. Отключено по умолчанию.
1273
1295
 
1274
1296
  [public] директория, откуда будут раздаваться статические файлы.
@@ -1278,7 +1300,7 @@ Sinatra — это предметно-ориентированный язык (D
1278
1300
 
1279
1301
  [root] корневая директория проекта.
1280
1302
 
1281
- [raise_errors] возбуждать исключения (будет останавливать приложение).
1303
+ [raise_errors] выбрасывать исключения (будет останавливать приложение).
1282
1304
 
1283
1305
  [run] если включено, Sinatra будет самостоятельно запускать веб-сервер.
1284
1306
  Не включайте, если используете rackup или аналогичные средства.
@@ -1292,9 +1314,9 @@ Sinatra — это предметно-ориентированный язык (D
1292
1314
 
1293
1315
  [sessions] включить сессии на основе кук (cookie).
1294
1316
 
1295
- [show_exceptions] показывать стек вызовов (stack trace) в браузере.
1317
+ [show_exceptions] показывать исключения/стек вызовов (stack trace) в браузере.
1296
1318
 
1297
- [static] должен ли Sinatra осуществлять раздачу статических файлов.
1319
+ [static] должна ли Sinatra осуществлять раздачу статических файлов.
1298
1320
  Отключите, когда используете какой-либо веб-сервер для этой цели.
1299
1321
  Отключение значительно улучшит производительность приложения.
1300
1322
  Включено по умолчанию.
@@ -1306,9 +1328,9 @@ Sinatra — это предметно-ориентированный язык (D
1306
1328
  Обработчики ошибок исполняются в том же контексте, что и маршруты, +before+-фильтры, а это означает, что всякие
1307
1329
  прелести вроде <tt>haml</tt>, <tt>erb</tt>, <tt>halt</tt> и т.д. доступны и им.
1308
1330
 
1309
- === NotFound
1331
+ === Not Found
1310
1332
 
1311
- Когда возбуждено исключение <tt>Sinatra::NotFound</tt>, или кодом ответа является 404,
1333
+ Когда выброшено исключение <tt>Sinatra::NotFound</tt>, или кодом ответа является 404,
1312
1334
  то будет вызван <tt>not_found</tt> обработчик:
1313
1335
 
1314
1336
  not_found do
@@ -1317,7 +1339,7 @@ Sinatra — это предметно-ориентированный язык (D
1317
1339
 
1318
1340
  === Ошибки
1319
1341
 
1320
- Обработчик ошибок +error+ будет вызван, когда исключение возбуждено из блока маршрута, либо из фильтра.
1342
+ Обработчик ошибок +error+ будет вызван, когда исключение выброшено из блока маршрута, либо из фильтра.
1321
1343
  Объект-исключение доступен как переменная <tt>sinatra.error</tt> в Rack:
1322
1344
 
1323
1345
  error do
@@ -1356,7 +1378,7 @@ Sinatra — это предметно-ориентированный язык (D
1356
1378
  'Boom'
1357
1379
  end
1358
1380
 
1359
- Sinatra устанавливает специальные <tt>not_found</tt> и <tt>error</tt> обработчики, когда запущен в режиме
1381
+ Sinatra устанавливает специальные <tt>not_found</tt> и <tt>error</tt> обработчики, когда приложение запущено в режиме
1360
1382
  разработки (окружение <tt>:development</tt>).
1361
1383
 
1362
1384
  == Rack "прослойки"
@@ -1364,7 +1386,7 @@ Sinatra устанавливает специальные <tt>not_found</tt> и
1364
1386
  Sinatra использует Rack[http://rack.rubyforge.org/], минимальный стандартный
1365
1387
  интерфейс для веб-фреймворков на Ruby. Одной из самых интересных для разработчиков возможностей Rack
1366
1388
  является поддержка "прослоек" ("middleware") — компонентов,
1367
- "сидящих" между сервером и вашим приложением, которые отслеживают и/или манипулируют
1389
+ находящихся "между" сервером и вашим приложением, которые отслеживают и/или манипулируют
1368
1390
  HTTP запросами/ответами для предоставления различной функциональности.
1369
1391
 
1370
1392
  В Sinatra очень просто использовать такие "прослойки" с помощью метода +use+:
@@ -1391,7 +1413,7 @@ Rack::Builder[http://rack.rubyforge.org/doc/classes/Rack/Builder.html] DSL
1391
1413
  Rack распространяется с различными стандартными "прослойками"
1392
1414
  для логирования, отладки, маршрутизации URL, аутентификации, обработки сессий. Sinatra использует
1393
1415
  многие из этих компонентов автоматически, основываясь на конфигурации, чтобы вам не приходилось
1394
- регистрировать/использовать (+use+) их вручную.
1416
+ подключать (+use+) их вручную.
1395
1417
 
1396
1418
  == Тестирование
1397
1419
 
@@ -1432,9 +1454,9 @@ Rack распространяется с различными стандартн
1432
1454
 
1433
1455
  Описание своего приложения самым простейшим способом (с помощью DSL верхнего уровня, как в примерах выше)
1434
1456
  работает отлично для крохотных приложений, но имеет множество недостатков, когда надо создать компоненты, такие как
1435
- Rack middleware ("прослойки"), Rails metal, простые библиотеки с серверными компонентами,
1436
- расширения Sinatra.
1437
- DSL верхнего уровня загрязняет пространство имен <tt>Object</tt> и подразумевает стиль конфигурации
1457
+ Rack middleware ("прослойки"), Rails metal, простые библиотеки с серверными компонентами, расширения Sinatra.
1458
+
1459
+ DSL верхнего уровня "загрязняет" пространство имен <tt>Object</tt> и подразумевает стиль конфигурации
1438
1460
  микро-приложения (например, единый файл приложения, ./public и
1439
1461
  ./views директории, создание логов, страницу деталей об исключениях
1440
1462
  и т.д.). И тут на помощь приходит Sinatra::Base:
@@ -1450,13 +1472,13 @@ DSL верхнего уровня загрязняет пространство
1450
1472
  end
1451
1473
  end
1452
1474
 
1453
- Методы, доступные Sinatra::Base сабклассам идентичны тем, что доступны
1475
+ Методы, доступные Sinatra::Base подклассам идентичны тем, что доступны
1454
1476
  в DSL верхнего уровня. Большинство приложений верхнего уровня могут быть
1455
1477
  конвертированы в Sinatra::Base компоненты с помощью двух модификаций:
1456
1478
 
1457
1479
  * Вы должны подключать <tt>sinatra/base</tt> вместо +sinatra+,
1458
1480
  иначе все методы предоставляемые Sinatra будут импортированы в глобальное пространство имен.
1459
- * Поместите все маршруты, обработчики ошибок, фильтры и опции в сабкласс Sinatra::Base.
1481
+ * Поместите все маршруты, обработчики ошибок, фильтры и опции в подкласс Sinatra::Base.
1460
1482
 
1461
1483
  <tt>Sinatra::Base</tt> — это чистый лист. Большинство опций, включая встроенный сервер, по умолчанию отключены.
1462
1484
  Смотрите {Опции и Конфигурация}[http://www.sinatrarb.com/configuration.html] для детальной информации
@@ -1540,8 +1562,8 @@ Rack-совместимый сервер приложений.
1540
1562
  Вот несколько причин, по которым вы, возможно, захотите использовать <tt>config.ru</tt>:
1541
1563
 
1542
1564
  * вы хотите разворачивать свое приложение на различных Rack-совместимых серверах (Passenger, Unicorn,
1543
- Heroku, ...).
1544
- * вы хотите использовать более одного сабкласса <tt>Sinatra::Base</tt>.
1565
+ Heroku, ...);
1566
+ * вы хотите использовать более одного подкласса <tt>Sinatra::Base</tt>;
1545
1567
  * вы хотите использовать Sinatra только в качестве "прослойки" Rack.
1546
1568
 
1547
1569
  <b>Совсем необязательно переходить на использование <tt>config.ru</tt> лишь потому, что вы стали
@@ -1551,7 +1573,7 @@ Rack-совместимый сервер приложений.
1551
1573
  === Использование Sinatra в качестве "прослойки"
1552
1574
 
1553
1575
  Не только сам Sinatra может использовать "прослойки" Rack, но и любое Sinatra приложение
1554
- само может быть добавлено к любому Rack эндпоинту в качестве "прослойки". Этим эндпоинтом
1576
+ само может быть добавлено к любому Rack endpoint в качестве "прослойки". Этим endpoint (конечной точкой)
1555
1577
  может быть другое Sinatra приложение, или приложение, основанное на Rack (Rails/Ramaze/Camping/...):
1556
1578
 
1557
1579
  require 'sinatra/base'
@@ -1590,10 +1612,9 @@ Rack-совместимый сервер приложений.
1590
1612
 
1591
1613
  === Область видимости приложения / класса
1592
1614
 
1593
- Любое Sinatra приложение соответствует сабклассу Sinatra::Base. Если вы
1594
- используете DSL верхнего
1595
- уровня (<tt>require 'sinatra'</tt>), то этим классом будет
1596
- Sinatra::Application, иначе это будет сабкласс, который вы создали вручную.
1615
+ Любое Sinatra приложение соответствует подклассу Sinatra::Base. Если вы
1616
+ используете DSL верхнего уровня (<tt>require 'sinatra'</tt>), то этим классом будет
1617
+ Sinatra::Application, иначе это будет подкласс, который вы создали вручную.
1597
1618
  На уровне класса вам будут доступны такие методы, как +get+ или +before+, но вы
1598
1619
  не сможете иметь доступ к объектам +request+ или +session+, так как существует
1599
1620
  только один класс приложения для всех запросов.
@@ -1612,15 +1633,15 @@ Sinatra::Application, иначе это будет сабкласс, котор
1612
1633
 
1613
1634
  У вас будет область видимости приложения внутри:
1614
1635
 
1615
- * Тела вашего класса приложения
1616
- * Методов, определенных расширениями
1617
- * Блока, переданного в +helpers+
1618
- * Блоков, использованных как значения для +set+
1636
+ * тела вашего класса приложения;
1637
+ * методов, определенных расширениями;
1638
+ * блока, переданного в +helpers+;
1639
+ * блоков, использованных как значения для +set+.
1619
1640
 
1620
1641
  Вы можете получить доступ к объекту области видимости (классу приложения) следующими способами:
1621
1642
 
1622
- * объект, переданный блокам конфигурации (<tt>configure { |c| ... }</tt>)
1623
- * +settings+ внутри области видимости запроса
1643
+ * через объект, переданный блокам конфигурации (<tt>configure { |c| ... }</tt>);
1644
+ * +settings+ внутри области видимости запроса.
1624
1645
 
1625
1646
  === Область видимости запроса/экземпляра
1626
1647
 
@@ -1628,7 +1649,7 @@ Sinatra::Application, иначе это будет сабкласс, котор
1628
1649
  и все блоки обработчика будут запущены в этом контексте. В этой области
1629
1650
  видимости вам доступны +request+ и +session+ объекты, вызовы методов
1630
1651
  рендеринга, такие как +erb+ или +haml+. Вы можете получить доступ к
1631
- области видимости приложения из контекста запроса, используя помощник +settings+:
1652
+ области видимости приложения из контекста запроса, используя метод-помощник +settings+:
1632
1653
 
1633
1654
  class MyApp < Sinatra::Base
1634
1655
  # Я в области видимости приложения!
@@ -1647,10 +1668,10 @@ Sinatra::Application, иначе это будет сабкласс, котор
1647
1668
 
1648
1669
  У вас будет область видимости запроса внутри:
1649
1670
 
1650
- * get/head/post/put/delete/options блоков
1651
- * before/after фильтрах
1652
- * методах помощниках
1653
- * шаблонах/видах
1671
+ * get/head/post/put/delete/options блоков;
1672
+ * before/after фильтрах;
1673
+ * методах-помощниках;
1674
+ * шаблонах/отображениях.
1654
1675
 
1655
1676
  === Область видимости делегирования
1656
1677
 
@@ -1664,8 +1685,8 @@ Sinatra::Application, иначе это будет сабкласс, котор
1664
1685
 
1665
1686
  У вас будет контекст делегирования внутри:
1666
1687
 
1667
- * Привязки верхнего уровня, если вы сделали <tt>require "sinatra"</tt>
1668
- * Объекта, расширенного с помощью примеси <tt>Sinatra::Delegator</tt>
1688
+ * привязки верхнего уровня, если вы сделали <tt>require 'sinatra'</tt>;
1689
+ * объекта, расширенного с помощью <tt>Sinatra::Delegator</tt>.
1669
1690
 
1670
1691
  Посмотрите сами в код: тут
1671
1692
  {Sinatra::Delegator примесь}[http://github.com/sinatra/sinatra/blob/ceac46f0bc129a6e994a06100aa854f606fe5992/lib/sinatra/base.rb#L1128]
@@ -1679,12 +1700,12 @@ Sinatra приложения могут быть запущены напряму
1679
1700
 
1680
1701
  Опции включают:
1681
1702
 
1682
- -h # помощь
1683
- -p # настроить порт (по умолчанию 4567)
1684
- -o # настроить хост (по умолчанию 0.0.0.0)
1685
- -e # настроить окружение, режим (по умолчанию development)
1686
- -s # настроить rack сервер/обработчик (по умолчанию thin)
1687
- -x # включить мьютекс (по умолчанию выключен)
1703
+ -h # раздел помощи
1704
+ -p # указание порта (по умолчанию 4567)
1705
+ -o # указание хоста (по умолчанию 0.0.0.0)
1706
+ -e # указание окружения, режима (по умолчанию development)
1707
+ -s # указание rack сервера/обработчика (по умолчанию thin)
1708
+ -x # включить мьютекс-блокировку (по умолчанию выключена)
1688
1709
 
1689
1710
  == Системные требования
1690
1711
 
@@ -1695,12 +1716,12 @@ Sinatra приложения могут быть запущены напряму
1695
1716
  этой версии, рекомендуем обновиться до 1.9.2 или перейти на JRuby или Rubinius.
1696
1717
 
1697
1718
  [ Ruby 1.9.2 ]
1698
- 1.9.2 поддерживается и рекомендована. Заметьте, что Radius и Markaby
1719
+ 1.9.2 поддерживается и рекомендована к использованию. Заметьте, что Radius и Markaby
1699
1720
  пока несовместимы с 1.9.2. Не используйте 1.9.2p0, известно, что эта
1700
1721
  версия весьма не стабильна при использовании Sinatra.
1701
1722
 
1702
1723
  [ Rubinius ]
1703
- Rubinius официально поддерживается (Rubinius >= 1.2.3), все, включая все
1724
+ Rubinius официально поддерживается (Rubinius >= 1.2.3), всё, включая все
1704
1725
  языки шаблонов, работает.
1705
1726
 
1706
1727
  [ JRuby ]
@@ -1712,37 +1733,35 @@ Sinatra приложения могут быть запущены напряму
1712
1733
 
1713
1734
  <b>Ruby 1.8.6 больше не поддерживается.</b>
1714
1735
 
1715
- Мы также следим за новыми версиями Ruby.
1736
+ Мы также следим за предстоящими к выходу версиями Ruby.
1716
1737
 
1717
1738
  Следующие реализации Ruby не поддерживаются официально, но известно, что на
1718
1739
  них запускается Sinatra:
1719
1740
 
1720
- * Старые версии JRuby и Rubinius
1721
- * MacRuby, Maglev, IronRuby
1722
- * Ruby 1.9.0 и 1.9.1
1723
- * Ruby 1.8.6 с помощью {backports}[https://github.com/marcandre/backports/#readme]
1741
+ * старые версии JRuby и Rubinius;
1742
+ * MacRuby, Maglev, IronRuby;
1743
+ * Ruby 1.9.0 и 1.9.1;
1744
+ * Ruby 1.8.6 с помощью {backports}[https://github.com/marcandre/backports/#readme].
1724
1745
 
1725
1746
  То, что версия официально не поддерживается, означает, что, если что-то не
1726
- работает на этой версии, а на поддерживаемой работает, то мы предполагаем,
1727
- что это не наша проблема, а их.
1747
+ работает на этой версии, а на поддерживаемой работает - это не наша проблема, а их.
1728
1748
 
1729
1749
  Мы также запускаем наши CI-тесты на последней версии Ruby (предстоящий 1.9.3),
1730
1750
  но мы не можем ничего гарантировать, так как она постоянно развивается.
1731
1751
  Предполагается, что 1.9.3p0 будет поддерживаться.
1732
1752
 
1733
- Sinatra должен работать на любой операционной системе, поддерживаемой выбранной
1734
- реализацией Ruby.
1753
+ Sinatra должна работать на любой операционной системе, в которой есть одна из указанных выше версий Ruby.
1735
1754
 
1736
1755
  == На острие
1737
1756
 
1738
1757
  Если вы хотите использовать самый последний код Sinatra, не бойтесь запускать
1739
- свое приложение вместе с master бранчем Sinatra, он весьма стабилен.
1758
+ свое приложение вместе из master ветки Sinatra, она весьма стабильна.
1740
1759
 
1741
1760
  Мы также время от времени выпускаем предварительные версии, так что вы можете делать так:
1742
1761
 
1743
1762
  gem install sinatra --pre
1744
1763
 
1745
- Чтобы воспользоваться некоторыми самыми последними возможностям.
1764
+ Чтобы воспользоваться некоторыми самыми последними возможностями.
1746
1765
 
1747
1766
  === С помощью Bundler
1748
1767
 
@@ -1766,7 +1785,7 @@ Sinatra должен работать на любой операционной
1766
1785
  в этом файле. Однако, непосредственные зависимости Sinatra (Rack и Tilt) Bundler
1767
1786
  автоматически скачает и добавит.
1768
1787
 
1769
- Теперь вы можете запускать свое приложение примерно так:
1788
+ Теперь вы можете запускать свое приложение так:
1770
1789
 
1771
1790
  bundle exec ruby myapp.rb
1772
1791
 
@@ -1804,10 +1823,10 @@ SemVerTag.
1804
1823
 
1805
1824
  == Дальнейшее чтение
1806
1825
 
1807
- * {Вебсайт проекта}[http://www.sinatrarb.com/] - Дополнительная документация,
1826
+ * {Веб-сайт проекта}[http://www.sinatrarb.com/] - Дополнительная документация,
1808
1827
  новости и ссылки на другие ресурсы.
1809
- * {Участие}[http://www.sinatrarb.com/contributing] - Нашли баг? Нужна помощь? Написали патч?
1810
- * {Слежение за проблемами}[http://github.com/sinatra/sinatra/issues]
1828
+ * {Участие в проекте}[http://www.sinatrarb.com/contributing] - Обнаружили баг? Нужна помощь? Написали патч?
1829
+ * {Слежение за проблемами/ошибками}[http://github.com/sinatra/sinatra/issues]
1811
1830
  * {Twitter}[http://twitter.com/sinatra]
1812
- * {Лист рассылки}[http://groups.google.com/group/sinatrarb/topics]
1813
- * {IRC: #sinatra}[irc://chat.freenode.net/#sinatra] on http://freenode.net 
1831
+ * {Группы рассылки}[http://groups.google.com/group/sinatrarb/topics]
1832
+ * {IRC: #sinatra}[irc://chat.freenode.net/#sinatra] on http://freenode.net