From 8aaed9557dad49a5ddf0e9eed06c4185833a1c6d Mon Sep 17 00:00:00 2001 From: Vasily Polovnyov Date: Mon, 20 Dec 2010 14:21:07 +0300 Subject: [PATCH 01/19] Updated README.ru.rdoc to reflect latest changes * filter conditions; * inline markaby; * OPTIONS request type. --- README.ru.rdoc | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/README.ru.rdoc b/README.ru.rdoc index e6fe7a7e..f7e82334 100644 --- a/README.ru.rdoc +++ b/README.ru.rdoc @@ -39,6 +39,10 @@ Sinatra — это предметно-ориентированный язык (D .. что-то удалить .. end + options '/' do + .. что-то ответить .. + end + Маршруты сверяются с запросом по очередности определения. Первый же совпавший с запросом маршрут и будет вызван. Шаблоны маршрутов могут включать в себя параметры доступные в @@ -421,6 +425,13 @@ markaby gem/библиотека необходима для рендеринг Отрисует ./views/index.mab. +Если у вас установлен Tilt версии 1.2 или выше, то вы также можете использовать внутристроковые +markaby шаблоны: + + get '/' do + markaby { h1 "Welcome!" } + end + === Slim шаблоны slim gem/библиотека необходима для рендеринга slim шаблонов: @@ -567,6 +578,16 @@ After-фильтры выполняются после каждого запро session[:last_slug] = slug end +Как и маршруты, фильтры могут использовать условия: + + before :agent => /Songbird/ do + # ... + end + + after '/blog/*', :host_name => 'example.com' do + # ... + end + == Прерывание Чтобы незамедлительно прервать обработку запроса внутри фильтра или маршрута, используйте: @@ -952,7 +973,7 @@ Sinatra::Application, иначе это будет сабкласс, котор У вас будет область видимости запроса внутри: -* get/head/post/put/delete блоков +* get/head/post/put/delete/options блоков * before/after фильтрах * методах помощниках * шаблонах/видах From d9f62bae0106d9e580448637d9673e8139777df1 Mon Sep 17 00:00:00 2001 From: Vasily Polovnyov Date: Fri, 14 Jan 2011 11:11:06 +0300 Subject: [PATCH 02/19] disable :layout by default --- README.ru.rdoc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.ru.rdoc b/README.ru.rdoc index cbcd1e1d..e5e12310 100644 --- a/README.ru.rdoc +++ b/README.ru.rdoc @@ -525,7 +525,8 @@ coffee-script gem/библиотека и `coffee` бинарный файл н end Если шаблон с именем "layout" существует, то он будет использован каждый раз, -когда шаблоны будут отрисовываться. Вы можете отключить layout-шаблон с помощью :layout => false. +когда шаблоны будут отрисовываться. Вы можете отключать layout-шаблон в каждом конкретном случае с помощью +:layout => false или отключить его для всего приложения, например, так: set :haml, :layout => false. get '/' do haml :index, :layout => !request.xhr? From 390e3a0b7ad9fd9db4c1146e23e8f260a3b438fd Mon Sep 17 00:00:00 2001 From: Vasily Polovnyov Date: Fri, 14 Jan 2011 11:57:04 +0300 Subject: [PATCH 03/19] explain run! vs config.ru in russian README --- README.ru.rdoc | 69 +++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 60 insertions(+), 9 deletions(-) diff --git a/README.ru.rdoc b/README.ru.rdoc index e5e12310..cabf7320 100644 --- a/README.ru.rdoc +++ b/README.ru.rdoc @@ -94,7 +94,7 @@ Sinatra — это предметно-ориентированный язык (D end get '/foo' do - # соответствует с non-songbird браузерам + # соответствует non-songbird браузерам end Другими доступными условиями являются +host_name+ и +provides+: @@ -833,7 +833,7 @@ Rack распространяется с различными стандартн Заметьте: Встроенные модули Sinatra::Test и Sinatra::TestHarness являются устаревшими, начиная с 0.9.2 релиза. -== Sinatra::Base - Подпрограммы, библиотеки и модульные приложения +== Sinatra::Base — подпрограммы, библиотеки и модульные приложения Описание своего приложения самым простейшим способом (с помощью DSL верхнего уровня, как в примерах выше) работает отлично для крохотных приложений, но имеет множество недостатков, когда надо @@ -856,13 +856,6 @@ DSL верхнего уровня загрязняет пространство end end -MyApp класс является независимым Rack компонентом, который может исполнять роли -Rack подпрограммы, Rack приложения, Rails metal. Вы можете +use+ (использовать) или -+run+ (запустить) этот класс из rackup файла +config.ru+; или контролировать серверную -часть из библиотеки: - - MyApp.run! :host => 'localhost', :port => 9090 - Методы, доступные Sinatra::Base сабклассам идентичны тем, что доступны в DSL верхнего уровня. Большинство приложений верхнего уровня могут быть конвертированы в Sinatra::Base компоненты с помощью двух модификаций: @@ -875,6 +868,64 @@ Rack подпрограммы, Rack приложения, Rails metal. Вы мо Смотрите {Опции и Конфигурация}[http://www.sinatrarb.com/configuration.html] для детальной информации об опциях и их поведении. +=== Запуск модульных приложений + +Есть два общепринятых способа запускать модульные приложения: запуск напрямую с помощью run!: + + # my_app.rb + require 'sinatra/base' + + class MyApp < Sinatra::Base + # ... здесь код приложения ... + + # запускаем сервер, если исполняется текущий файл + run! if app_file == $0 + end + +И запускаем с помощью: + + ruby my_app.rb + +Или с помощью конфигурационного файла config.ru, который позволяет использовать любой +Rack-совместимый сервер приложений. + + # config.ru + require 'my_app' + run MyApp + +Запускаем: + + rackup -p 4567 + +=== Запуск "классических" приложений с config.ru + +Файл приложения: + + # app.rb + require 'sinatra' + + get '/' do + 'Hello world!' + end + +И соответствующий config.ru: + + require 'app' + run Sinatra::Application + +=== Когда использовать config.ru? + +Вот несколько причин, по которым вы, возможно, захотите использовать config.ru: + +* вы хотите разворачивать свое приложение на различных Rack-совместимых серверах (Passenger, Unicorn, + Heroku, ...). +* вы хотите использовать более одного сабкласса Sinatra::Base. +* вы хотите использовать Sinatra только в качестве подпрограммы Rack. + +Совсем необязательно переходить на использование config.ru лишь потому, что вы стали +использовать модульный стиль приложения. И необязательно использовать модульный стиль, чтобы +запускать приложение с помощью config.ru. + === Использование Sinatra как подпрограммы Не только сама Sinatra может использовать подпрограммы Rack, любое Sinatra приложение From 726569bd0fb006483f43a4b0683ef1cca23a230e Mon Sep 17 00:00:00 2001 From: Vasily Polovnyov Date: Fri, 14 Jan 2011 12:05:42 +0300 Subject: [PATCH 04/19] better translation for all "middleware" mentions --- README.ru.rdoc | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/README.ru.rdoc b/README.ru.rdoc index cabf7320..6287effc 100644 --- a/README.ru.rdoc +++ b/README.ru.rdoc @@ -126,7 +126,7 @@ Sinatra — это предметно-ориентированный язык (D === Возвращаемые значения Возвращаемое значение блока маршрута ограничивается телом ответа, которое будет передано HTTP клиенту, -или следующей подпрограммой (middleware) в Rack стеке. Чаще всего это строка, как в вышеизложенных примерах. +или следующей "прослойкой" (middleware, промежуточная программа) в Rack стеке. Чаще всего это строка, как в вышеизложенных примерах. Но и другие значения также приемлемы. Вы можете вернуть любой объект, который будет либо корректным Rack ответом, Rack @@ -764,15 +764,15 @@ Sinatra устанавливает специальные not_found и content_type :foo -== Rack подпрограммы +== Rack "прослойки" Sinatra использует Rack[http://rack.rubyforge.org/], минимальный стандартный интерфейс для веб-фреймворков на Ruby. Одной из самых интересных для разработчиков возможностей Rack -является поддержка подпрограмм ("middleware") -- компонентов, +является поддержка "прослоек" ("middleware") — компонентов, "сидящих" между сервером и вашим приложением, которые отслеживают и/или манипулируют HTTP запросами/ответами для предоставления различной функциональности. -В Sinatra очень просто использовать такие Rack подпрограммы с помощью метода +use+: +В Sinatra очень просто использовать такие "прослойки" с помощью метода +use+: require 'sinatra' require 'my_custom_middleware' @@ -793,7 +793,7 @@ Rack::Builder[http://rack.rubyforge.org/doc/classes/Rack/Builder.html] DSL username == 'admin' && password == 'secret' end -Rack распространяется с различными стандартными подпрограммами +Rack распространяется с различными стандартными "прослойками" для логирования, отладки, маршрутизации URL, аутентификации, обработки сессий. Sinatra использует многие из этих компонентов автоматически, основываясь на конфигурации, чтобы вам не приходилось регистрировать/использовать (+use+) их вручную. @@ -833,13 +833,12 @@ Rack распространяется с различными стандартн Заметьте: Встроенные модули Sinatra::Test и Sinatra::TestHarness являются устаревшими, начиная с 0.9.2 релиза. -== Sinatra::Base — подпрограммы, библиотеки и модульные приложения +== Sinatra::Base — "прослойки", библиотеки и модульные приложения Описание своего приложения самым простейшим способом (с помощью DSL верхнего уровня, как в примерах выше) -работает отлично для крохотных приложений, но имеет множество недостатков, когда надо -создать компоненты, такие как Rack -middleware, Rails metal, простые библиотеки с серверными компонентами, -Sinatra расширения. +работает отлично для крохотных приложений, но имеет множество недостатков, когда надо создать компоненты, такие как +Rack middleware ("прослойки"), Rails metal, простые библиотеки с серверными компонентами, +расширения Sinatra. DSL верхнего уровня загрязняет пространство имен Object и подразумевает стиль конфигурации микро-приложения (например, единый файл приложения, ./public и ./views директории, создание логов, страницу деталей об исключениях @@ -920,16 +919,16 @@ Rack-совместимый сервер приложений. * вы хотите разворачивать свое приложение на различных Rack-совместимых серверах (Passenger, Unicorn, Heroku, ...). * вы хотите использовать более одного сабкласса Sinatra::Base. -* вы хотите использовать Sinatra только в качестве подпрограммы Rack. +* вы хотите использовать Sinatra только в качестве "прослойки" Rack. Совсем необязательно переходить на использование config.ru лишь потому, что вы стали использовать модульный стиль приложения. И необязательно использовать модульный стиль, чтобы запускать приложение с помощью config.ru. -=== Использование Sinatra как подпрограммы +=== Использование Sinatra в качестве "прослойки" -Не только сама Sinatra может использовать подпрограммы Rack, любое Sinatra приложение -само может быть добавлено к любому Rack эндпоинту в качестве подпрограммы. Этим эндпоинтом +Не только сама Sinatra может использовать "прослойки" Rack, но и любое Sinatra приложение +само может быть добавлено к любому Rack эндпоинту в качестве "прослойки". Этим эндпоинтом может быть другое Sinatra приложение, или приложение, основанное на Rack (Rails/Ramaze/Camping/...). require 'sinatra/base' @@ -949,7 +948,7 @@ Rack-совместимый сервер приложений. end class MyApp < Sinatra::Base - # подпрограмма будет запущена перед фильтрами + # "прослойка" будет запущена перед фильтрами use LoginScreen before do From 7bc2946c9ccd0d2d99a9e3fe3bab48d41778772d Mon Sep 17 00:00:00 2001 From: Vasily Polovnyov Date: Fri, 14 Jan 2011 12:15:32 +0300 Subject: [PATCH 05/19] explain how to replace ERB with Erubis in russian README --- README.ru.rdoc | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/README.ru.rdoc b/README.ru.rdoc index 6287effc..66b14533 100644 --- a/README.ru.rdoc +++ b/README.ru.rdoc @@ -204,20 +204,31 @@ Haml gem/библиотека необходима для рендеринга H erb :index end -Отрисует ./views/index.erb +Отрисует ./views/index.erb. === Erubis шаблоны -Erubis gem/библиотека необходима для рендеринга erubis шаблонов: +Erubis gem/библиотека необходима для рендеринга Erubis шаблонов: - # Вам нужно будет подключить erubis в приложении + # Вам нужно будет подключить Erubis в приложении require 'erubis' get '/' do erubis :index end -Отрисует ./views/index.erubis +Отрисует ./views/index.erubis. + +Также возможно заменить Erb на Erubis: + + require 'erubis' + Tilt.register :erb, Tilt[:erubis] + + get '/' do + erb :index + end + +Отрисует ./views/index.erb с помощью Erubis. === Builder шаблоны From 2bbd6a0e31a90c8b92975e64a6c7560f32f8c604 Mon Sep 17 00:00:00 2001 From: Vasily Polovnyov Date: Fri, 14 Jan 2011 12:23:06 +0300 Subject: [PATCH 06/19] added BlueCloth example to russian README --- README.ru.rdoc | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/README.ru.rdoc b/README.ru.rdoc index 66b14533..3f500287 100644 --- a/README.ru.rdoc +++ b/README.ru.rdoc @@ -349,16 +349,31 @@ rdiscount gem/библиотека необходима для рендерин Отрисует ./views/index.markdown (+md+ и +mkd+ также являются допустимыми файловыми расширениями). -В markdown невозможно вызывать методы или передавать локальные переменные. Следовательно, вам скорее всего придется -использовать этот шаблон совместно с другим движком рендеринга: +В Markdown невозможно вызывать методы или передавать локальные переменные. +Следовательно, вам скорее всего придется использовать этот шаблон совместно с другим +движком рендеринга: erb :overview, :locals => { :text => markdown(:introduction) } -Заметьте, что вы можете вызывать метод markdown из других шаблонов: +Заметьте, что вы можете вызывать метод +markdown+ из других шаблонов: %h1 Hello From Haml! %p= markdown(:greetings) +Также возможно обрабатывать Markdown с помощью BlueCloth, а не RDiscount: + + require 'bluecloth' + + Tilt.register 'markdown', BlueClothTemplate + Tilt.register 'mkd', BlueClothTemplate + Tilt.register 'md', BlueClothTemplate + + get '/' do + markdown :index + end + +Отрисует ./views/index.md с помощью BlueCloth. + === Textile шаблоны RedCloth gem/библиотека необходима для рендеринга Textile шаблонов: From e316cfceef0a419ab9940213af13aab418bedba7 Mon Sep 17 00:00:00 2001 From: Vasily Polovnyov Date: Fri, 14 Jan 2011 12:28:47 +0300 Subject: [PATCH 07/19] README.ru formatting adjustments --- README.ru.rdoc | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/README.ru.rdoc b/README.ru.rdoc index 3f500287..79194a20 100644 --- a/README.ru.rdoc +++ b/README.ru.rdoc @@ -172,7 +172,7 @@ Sinatra — это предметно-ориентированный язык (D === Haml шаблоны -Haml gem/библиотека необходима для рендеринга HAML шаблонов: +haml gem/библиотека необходима для рендеринга HAML шаблонов: # Вам нужно будет подключить haml gem в приложении require 'haml' @@ -208,7 +208,7 @@ Haml gem/библиотека необходима для рендеринга H === Erubis шаблоны -Erubis gem/библиотека необходима для рендеринга Erubis шаблонов: +erubis gem/библиотека необходима для рендеринга Erubis шаблонов: # Вам нужно будет подключить Erubis в приложении require 'erubis' @@ -232,7 +232,7 @@ Erubis gem/библиотека необходима для рендеринга === Builder шаблоны -Builder gem/библиотека необходима для рендеринга builder шаблонов: +builder gem/библиотека необходима для рендеринга builder шаблонов: # Вам нужно будет подключить builder в приложении require 'builder' @@ -245,7 +245,7 @@ Builder gem/библиотека необходима для рендеринг === Nokogiri шаблоны -Nokogiri gem/библиотека необходима для рендеринга nokogiri шаблонов: +nokogiri gem/библиотека необходима для рендеринга nokogiri шаблонов: # Вам нужно будет подключить nokogiri в приложении require 'nokogiri' @@ -258,7 +258,7 @@ Nokogiri gem/библиотека необходима для рендеринг === Sass шаблоны -Haml gem/библиотека необходима для рендеринга Sass шаблонов: +haml gem/библиотека необходима для рендеринга Sass шаблонов: # Вам нужно будет подключить haml или sass в приложении require 'sass' @@ -282,7 +282,7 @@ Haml gem/библиотека необходима для рендеринга S === Scss шаблоны -Haml gem/библиотека необходима для рендеринга Scss шаблонов: +haml gem/библиотека необходима для рендеринга Scss шаблонов: # Вам нужно будет подключить haml или sass в приложении require 'sass' @@ -306,7 +306,7 @@ Haml gem/библиотека необходима для рендеринга S === Less шаблоны -less gem/библиотека необходима для рендеринга Less шаблонов: +less gem/библиотека необходима для рендеринга Less шаблонов: # Вам нужно будет подключить less в приложении require 'less' @@ -319,7 +319,7 @@ less gem/библиотека необходима для рендеринга L === Liquid шаблоны -liquid gem/библиотека необходима для рендеринга liquid шаблонов: +liquid gem/библиотека необходима для рендеринга liquid шаблонов: # Вам нужно будет подключить liquid в приложении require 'liquid' @@ -337,7 +337,7 @@ liquid gem/библиотека необходима для рендеринга === Markdown шаблоны -rdiscount gem/библиотека необходима для рендеринга Markdown шаблонов: +rdiscount gem/библиотека необходима для рендеринга Markdown шаблонов: # Вам нужно будет подключить rdiscount в приложении require "rdiscount" @@ -376,7 +376,7 @@ rdiscount gem/библиотека необходима для рендерин === Textile шаблоны -RedCloth gem/библиотека необходима для рендеринга Textile шаблонов: +RedCloth gem/библиотека необходима для рендеринга Textile шаблонов: # Вам нужно будет подключить redcloth в приложении require "redcloth" @@ -392,14 +392,14 @@ RedCloth gem/библиотека необходима для рендеринг erb :overview, :locals => { :text => textile(:introduction) } -Заметьте, что вы можете вызывать метод textile из других шаблонов: +Заметьте, что вы можете вызывать метод +textile+ из других шаблонов: %h1 Hello From Haml! %p= textile(:greetings) === RDoc шаблоны -RDoc gem/библиотека необходима для рендеринга RDoc шаблонов: +rdoc gem/библиотека необходима для рендеринга RDoc шаблонов: # Вам нужно будет подключить rdoc в приложении require "rdoc" @@ -415,14 +415,14 @@ RDoc gem/библиотека необходима для рендеринга R erb :overview, :locals => { :text => rdoc(:introduction) } -Заметьте, что вы можете вызывать метод rdoc из других шаблонов: +Заметьте, что вы можете вызывать метод +rdoc+ из других шаблонов: %h1 Hello From Haml! %p= rdoc(:greetings) === Radius шаблоны -radius gem/библиотека необходима для рендеринга Radius шаблонов: +radius gem/библиотека необходима для рендеринга Radius шаблонов: # Вам нужно будет подключить radius в приложении require 'radius' @@ -440,7 +440,7 @@ radius gem/библиотека необходима для рендеринга === Markaby шаблоны -markaby gem/библиотека необходима для рендеринга Markaby шаблонов: +markaby gem/библиотека необходима для рендеринга Markaby шаблонов: # Вам нужно будет подключить markaby в приложении require 'markaby' From 7dfbea97f18b3511426de94bf4ce8105569b717e Mon Sep 17 00:00:00 2001 From: Vasily Polovnyov Date: Fri, 14 Jan 2011 12:29:49 +0300 Subject: [PATCH 08/19] more README.ru formatting: slim --- README.ru.rdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.ru.rdoc b/README.ru.rdoc index 79194a20..18564c3c 100644 --- a/README.ru.rdoc +++ b/README.ru.rdoc @@ -460,7 +460,7 @@ markaby шаблоны: === Slim шаблоны -slim gem/библиотека необходима для рендеринга slim шаблонов: +slim gem/библиотека необходима для рендеринга slim шаблонов: # Вам нужно будет подключить slim в приложении require 'slim' From 0bc7313906fe3241619c06e6311e20c7f207fe50 Mon Sep 17 00:00:00 2001 From: Vasily Polovnyov Date: Fri, 14 Jan 2011 12:31:01 +0300 Subject: [PATCH 09/19] update using inline Markaby in russian README --- README.ru.rdoc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.ru.rdoc b/README.ru.rdoc index 18564c3c..f4aee53c 100644 --- a/README.ru.rdoc +++ b/README.ru.rdoc @@ -451,8 +451,7 @@ Sinatra — это предметно-ориентированный язык (D Отрисует ./views/index.mab. -Если у вас установлен Tilt версии 1.2 или выше, то вы также можете использовать внутристроковые -markaby шаблоны: +Вы также можете использовать внутристроковые Markaby шаблоны: get '/' do markaby { h1 "Welcome!" } From 8f5b94beb1e7a7c9a9b9ac4e13220a103ae54c4b Mon Sep 17 00:00:00 2001 From: Vasily Polovnyov Date: Fri, 14 Jan 2011 17:07:44 +0300 Subject: [PATCH 10/19] updated CoffeeScript section in russian README --- README.ru.rdoc | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/README.ru.rdoc b/README.ru.rdoc index f4aee53c..3a87e748 100644 --- a/README.ru.rdoc +++ b/README.ru.rdoc @@ -472,7 +472,16 @@ Sinatra — это предметно-ориентированный язык (D === CoffeeScript шаблоны -coffee-script gem/библиотека и `coffee` бинарный файл необходимы для рендеринга CoffeeScript шаблонов: +Вам понадобится coffee-script gem/библиотека и что-то одно из следующего списка, +чтобы запускать JavaScript: + +* +node+ (из Node.js) +* вы можете использовать OSX (есть встроенные средства для выполнения JavaScript) +* +therubyracer+ gem/библиотека + +Подробнее смотрите на {странице проекта}[http://github.com/josh/ruby-coffee-script]. + +Таким образом вы можете использовать CoffeeScript шаблоны. # Вам нужно будет подключить coffee-script в приложении require 'coffee-script' From cadbb3597759bbb9d4edc00e35fba6e8928a0d45 Mon Sep 17 00:00:00 2001 From: Vasily Polovnyov Date: Mon, 17 Jan 2011 17:14:18 +0300 Subject: [PATCH 11/19] explain how to use :layout_engine in russian README, typo --- README.ru.rdoc | 86 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 76 insertions(+), 10 deletions(-) diff --git a/README.ru.rdoc b/README.ru.rdoc index 3a87e748..e875c7d6 100644 --- a/README.ru.rdoc +++ b/README.ru.rdoc @@ -350,7 +350,7 @@ Sinatra — это предметно-ориентированный язык (D расширениями). В Markdown невозможно вызывать методы или передавать локальные переменные. -Следовательно, вам скорее всего придется использовать этот шаблон совместно с другим +Следовательно, вам, скорее всего, придется использовать этот шаблон совместно с другим движком рендеринга: erb :overview, :locals => { :text => markdown(:introduction) } @@ -360,6 +360,28 @@ Sinatra — это предметно-ориентированный язык (D %h1 Hello From Haml! %p= markdown(:greetings) +Вы не можете вызывать Ruby из Markdown, соответственно, вы не можете использовать +лэйаут-шаблоны (layouts) на Markdown. Тем не менее, есть возможность использовать один +движок рендеринга для шаблона, а другой для лэйаута с помощью опции `:layout_engine`: + + get '/' do + markdown :index, :layout_engine => :erb + end + +Отрисует ./views/index.md с ./views/layout.erb в качестве +лэйаута. + +Также вы можете задать такие опции рендеринга глобально: + + set :markdown, :layout_engine => :haml, :layout => :post + + get '/' do + markdown :index + end + +Отрисует ./views/index.md (и любой другой шаблон на Markdown) с +./views/post.haml в качестве лэйаута. + Также возможно обрабатывать Markdown с помощью BlueCloth, а не RDiscount: require 'bluecloth' @@ -387,8 +409,8 @@ Sinatra — это предметно-ориентированный язык (D Отрисует ./views/index.textile. -В textile невозможно вызывать методы или передавать локальные переменные. Следовательно, вам скорее всего придется -использовать этот шаблон совместно с другим движком рендеринга: +В Textile невозможно вызывать методы или передавать локальные переменные. Следовательно, вам, скорее всего, +придется использовать этот шаблон совместно с другим движком рендеринга: erb :overview, :locals => { :text => textile(:introduction) } @@ -397,6 +419,28 @@ Sinatra — это предметно-ориентированный язык (D %h1 Hello From Haml! %p= textile(:greetings) +Вы не можете вызывать Ruby из Textile, соответственно, вы не можете использовать +лэйаут-шаблоны на Textile. Тем не менее, есть возможность использовать один +движок рендеринга для шаблона, а другой для лэйаута с помощью опции `:layout_engine`: + + get '/' do + textile :index, :layout_engine => :erb + end + +Отрисует ./views/index.textile с ./views/layout.erb в качестве +лэйаута. + +Также вы можете задать такие опции рендеринга глобально: + + set :textile, :layout_engine => :haml, :layout => :post + + get '/' do + textile :index + end + +Отрисует ./views/index.textile (и любой другой шаблон на Textile) с +./views/post.haml в качестве лэйаута. + === RDoc шаблоны rdoc gem/библиотека необходима для рендеринга RDoc шаблонов: @@ -410,8 +454,8 @@ Sinatra — это предметно-ориентированный язык (D Отрисует ./views/index.rdoc. -В rdoc невозможно вызывать методы или передавать локальные переменные. Следовательно, вам скорее всего придется -использовать этот шаблон совместно с другим движком рендеринга: +В RDoc невозможно вызывать методы или передавать локальные переменные. Следовательно, вам, скорее всего, +придется использовать этот шаблон совместно с другим движком рендеринга: erb :overview, :locals => { :text => rdoc(:introduction) } @@ -420,6 +464,28 @@ Sinatra — это предметно-ориентированный язык (D %h1 Hello From Haml! %p= rdoc(:greetings) +Вы не можете вызывать Ruby из RDoc, соответственно, вы не можете использовать +лэйаут-шаблоны на RDoc. Тем не менее, есть возможность использовать один +движок рендеринга для шаблона, а другой для лэйаута с помощью опции `:layout_engine`: + + get '/' do + rdoc :index, :layout_engine => :erb + end + +Отрисует ./views/index.rdoc с ./views/layout.erb в качестве +лэйаута. + +Также вы можете задать такие опции рендеринга глобально: + + set :rdoc, :layout_engine => :haml, :layout => :post + + get '/' do + rdoc :index + end + +Отрисует ./views/index.rdoc (и любой другой шаблон на RDoc) с +./views/post.haml в качестве лэйаута. + === Radius шаблоны radius gem/библиотека необходима для рендеринга Radius шаблонов: @@ -502,8 +568,8 @@ Sinatra — это предметно-ориентированный язык (D === Доступ к переменным в шаблонах -Шаблоны интерпретируются в том же контексте, что и обработчики маршрутов. Переменные экзмепляра, -установленные в процесе обработки маршрутов, будут доступны напрямую в шаблонах: +Шаблоны интерпретируются в том же контексте, что и обработчики маршрутов. Переменные экземпляра, +установленные в процессе обработки маршрутов, будут доступны напрямую в шаблонах: get '/:id' do @foo = Foo.find(params[:id]) @@ -517,7 +583,7 @@ Sinatra — это предметно-ориентированный язык (D haml '%h1= foo.name', :locals => { :foo => foo } end -Это обычно используется когда шаблоны рендерятся как частные (partials) из других шаблонов. +Это обычный подход, когда шаблоны рендерятся как частные (partials) из других шаблонов. === Вложенные шаблоны @@ -538,7 +604,7 @@ Sinatra — это предметно-ориентированный язык (D @@ index %div.title Hello world!!!!! -Заметьте: Вложенные шаблоны, определенные в файле-исходнике, который подключил sinatra, будут +Заметьте: Вложенные шаблоны, определенные в файле-исходнике, который подключил Sinatra, будут автоматически загружены. Вызовите enable :inline_templates напрямую, если у вас вложенные шаблоны в других файлах. @@ -559,7 +625,7 @@ Sinatra — это предметно-ориентированный язык (D end Если шаблон с именем "layout" существует, то он будет использован каждый раз, -когда шаблоны будут отрисовываться. Вы можете отключать layout-шаблон в каждом конкретном случае с помощью +когда шаблоны будут отрисовываться. Вы можете отключать лэйаут в каждом конкретном случае с помощью :layout => false или отключить его для всего приложения, например, так: set :haml, :layout => false. get '/' do From bd03fe511f0b5dd29faab5f69cf19a053ef365c1 Mon Sep 17 00:00:00 2001 From: Vasily Polovnyov Date: Mon, 17 Jan 2011 17:21:48 +0300 Subject: [PATCH 12/19] renamed first 'Inline Templates' section in russian README --- README.ru.rdoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.ru.rdoc b/README.ru.rdoc index e875c7d6..a02d4877 100644 --- a/README.ru.rdoc +++ b/README.ru.rdoc @@ -558,13 +558,13 @@ Sinatra — это предметно-ориентированный язык (D Отрисует ./views/application.coffee. -=== Внутристроковые шаблоны +=== Встроенные шаблоны get '/' do haml '%div.title Hello World' end -Отрисует внутристроковый шаблон. +Отрисует встроенный (строчный) шаблон. === Доступ к переменным в шаблонах From bfed14be51cf2ce2cb1500ea324e5c128577faeb Mon Sep 17 00:00:00 2001 From: Vasily Polovnyov Date: Mon, 17 Jan 2011 17:34:02 +0300 Subject: [PATCH 13/19] added 'Associating File Extensions' section to russian README --- README.ru.rdoc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.ru.rdoc b/README.ru.rdoc index a02d4877..2ef64406 100644 --- a/README.ru.rdoc +++ b/README.ru.rdoc @@ -632,6 +632,14 @@ Sinatra — это предметно-ориентированный язык (D haml :index, :layout => !request.xhr? end +=== Привязка файловых расширений + +Чтобы связать расширение файла и движок рендеринга, используйте +Tilt.register. Например, если вы хотите использовать расширение +tt+ +для шаблонов Textile: + + Tilt.register :tt, Tilt[:textile] + == Методы помощники Используйте helpers метод для определения методов помощников для дальнейшего From ceecd8235896dad5a1b2b474165fe35f0cfd7231 Mon Sep 17 00:00:00 2001 From: Vasily Polovnyov Date: Mon, 17 Jan 2011 17:38:30 +0300 Subject: [PATCH 14/19] added 'Adding You Own Template Engine' section to russian README --- README.ru.rdoc | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/README.ru.rdoc b/README.ru.rdoc index 2ef64406..87695608 100644 --- a/README.ru.rdoc +++ b/README.ru.rdoc @@ -640,6 +640,23 @@ Sinatra — это предметно-ориентированный язык (D Tilt.register :tt, Tilt[:textile] +=== Добавляем собственный движок рендеринга + +Сначала зарегистрируйте свой движок в Tilt, затем создать метод, отвечающий за отрисовку: + + Tilt.register :myat, MyAwesomeTemplateEngine + + helpers do + def myat(*args) render(:myat, *args) end + end + + get '/' do + myat :index + end + +Отрисует ./views/index.myat. Чтобы узнать больше о Tilt, +смотрите https://github.com/rtomayko/tilt + == Методы помощники Используйте helpers метод для определения методов помощников для дальнейшего From 904d9fb8d737fdf0d5b4006bc0ef432815b6f94f Mon Sep 17 00:00:00 2001 From: Vasily Polovnyov Date: Mon, 17 Jan 2011 17:46:10 +0300 Subject: [PATCH 15/19] fixed header in russian README --- README.ru.rdoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.ru.rdoc b/README.ru.rdoc index 87695608..69c8abfa 100644 --- a/README.ru.rdoc +++ b/README.ru.rdoc @@ -825,7 +825,7 @@ After-фильтры выполняются после каждого запро Обработчики ошибок исполняются в том же контексте, что и маршруты, before-фильтры, а это означает, что всякие прелести вроде haml, erb, halt и т.д. доступны и им. -===  NotFound +=== NotFound Когда возбуждено исключение Sinatra::NotFound, или кодом ответа является 404, то будет вызван not_found обработчик: @@ -1214,7 +1214,7 @@ Sinatra приложения могут быть запущены напряму cd myproject/sinatra git pull -== Больше информации +== Дальнейшее чтение * {Вебсайт проекта}[http://www.sinatrarb.com/] - Дополнительная документация, новости и ссылки на другие ресурсы. From 3c6fc409f0a6f9f7dc863338e10b54f7592eda13 Mon Sep 17 00:00:00 2001 From: Vasily Polovnyov Date: Tue, 18 Jan 2011 15:29:04 +0300 Subject: [PATCH 16/19] recommended bundler (bleeding edge section) in russian README --- README.ru.rdoc | 39 ++++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/README.ru.rdoc b/README.ru.rdoc index 69c8abfa..70387d56 100644 --- a/README.ru.rdoc +++ b/README.ru.rdoc @@ -1190,6 +1190,34 @@ Sinatra приложения могут быть запущены напряму == На острие +=== С помощью Bundler + +Если вы хотите запускать свое приложение с последней версией Sinatra, то +рекомендуем использовать {Bundler}[http://gembundler.com/]. + +Сначала установите Bundler, если у вас его еще нет: + + gem install bundler + +Затем создайте файл +Gemfile+ в директории вашего проекта: + + source :rubygems + gem 'sinatra', :git => "git://github.com/sinatra/sinatra.git" + + # другие зависимости + gem 'haml' # например, если используете haml + gem 'activerecord', '~> 3.0' # может быть, вам нужен и ActiveRecord 3.x + +Обратите внимание, вам нужно будет указывать все зависимости вашего приложения +в этом файле. Однако, непосредственные зависимости Sinatra (Rack и Tilt) Bundler +автоматически скачает и добавит. + +Теперь вы можете запускать свое приложение примерно так: + + bundle exec ruby myapp.rb + +=== Вручную + Если вы хотите использовать новейший код Sinatra, то создайте локальный клон и запускайте свое приложение с sinatra/lib директорией в LOAD_PATH: @@ -1198,17 +1226,6 @@ Sinatra приложения могут быть запущены напряму git clone git://github.com/sinatra/sinatra.git ruby -Isinatra/lib myapp.rb -Также вы можете добавить sinatra/lib директорию в -LOAD_PATH приложения: - - $LOAD_PATH.unshift File.dirname(__FILE__) + '/sinatra/lib' - require 'rubygems' - require 'sinatra' - - get '/about' do - "I'm running version " + Sinatra::VERSION - end - Чтобы обновить исходники Sinatra: cd myproject/sinatra From 85af03467665eedf92a795d2bff8aee1ee39c4f8 Mon Sep 17 00:00:00 2001 From: Vasily Polovnyov Date: Tue, 18 Jan 2011 15:30:39 +0300 Subject: [PATCH 17/19] made paths consistent in russian README --- README.ru.rdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.ru.rdoc b/README.ru.rdoc index 70387d56..683b0f48 100644 --- a/README.ru.rdoc +++ b/README.ru.rdoc @@ -1228,7 +1228,7 @@ Sinatra приложения могут быть запущены напряму Чтобы обновить исходники Sinatra: - cd myproject/sinatra + cd myapp/sinatra git pull == Дальнейшее чтение From 1b38cae5e94295a7a0da1d6962157509c2100e27 Mon Sep 17 00:00:00 2001 From: Vasily Polovnyov Date: Tue, 18 Jan 2011 15:44:43 +0300 Subject: [PATCH 18/19] updated Bleeding Edge section in russian README --- README.ru.rdoc | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/README.ru.rdoc b/README.ru.rdoc index 683b0f48..24820d42 100644 --- a/README.ru.rdoc +++ b/README.ru.rdoc @@ -1190,6 +1190,15 @@ Sinatra приложения могут быть запущены напряму == На острие +Если вы хотите использовать самый последний код Sinatra, не бойтесь запускать +свое приложение вместе с master бранчем Sinatra, он весьма стабилен. + +Мы также время от времени выпускаем предварительные версии, так что вы можете делать так: + + gem install sinatra --pre + +Чтобы воспользоваться некоторыми самыми последними возможностям. + === С помощью Bundler Если вы хотите запускать свое приложение с последней версией Sinatra, то @@ -1218,9 +1227,8 @@ Sinatra приложения могут быть запущены напряму === Вручную -Если вы хотите использовать новейший код Sinatra, то создайте локальный -клон и запускайте свое приложение с sinatra/lib директорией -в LOAD_PATH: +Создайте локальный клон репозитория и запускайте свое приложение с sinatra/lib +директорией в LOAD_PATH: cd myapp git clone git://github.com/sinatra/sinatra.git @@ -1231,6 +1239,19 @@ Sinatra приложения могут быть запущены напряму cd myapp/sinatra git pull +=== Установка глобально + +Вы можете самостоятельно собрать gem: + + git clone git://github.com/sinatra/sinatra.git + cd sinatra + rake sinatra.gemspec + rake install + +Если вы устанавливаете пакеты (gem) от пользователя root, то вашим последним шагом должна быть команда + + sudo rake install + == Дальнейшее чтение * {Вебсайт проекта}[http://www.sinatrarb.com/] - Дополнительная документация, From e583ea82f109f9a8e30d22aa4b6feb2b14fc94ed Mon Sep 17 00:00:00 2001 From: Vasily Polovnyov Date: Tue, 18 Jan 2011 16:17:54 +0300 Subject: [PATCH 19/19] else one proofreading in russian README --- README.ru.rdoc | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/README.ru.rdoc b/README.ru.rdoc index 24820d42..c2383592 100644 --- a/README.ru.rdoc +++ b/README.ru.rdoc @@ -640,9 +640,9 @@ Sinatra — это предметно-ориентированный язык (D Tilt.register :tt, Tilt[:textile] -=== Добавляем собственный движок рендеринга +=== Добавление собственного движка рендеринга -Сначала зарегистрируйте свой движок в Tilt, затем создать метод, отвечающий за отрисовку: +Сначала зарегистрируйте свой движок в Tilt, затем создайте метод, отвечающий за отрисовку: Tilt.register :myat, MyAwesomeTemplateEngine @@ -657,10 +657,10 @@ Sinatra — это предметно-ориентированный язык (D Отрисует ./views/index.myat. Чтобы узнать больше о Tilt, смотрите https://github.com/rtomayko/tilt -== Методы помощники +== Методы-помощники -Используйте helpers метод для определения методов помощников для дальнейшего -использования в обработчиках маршрутов и шаблонах: +Используйте метод helpers, чтобы определить методы-помощники, которые +в дальнейшем можно будет использовать в обработчиках маршрутов и шаблонах: helpers do def bar(name) @@ -767,23 +767,23 @@ After-фильтры выполняются после каждого запро request.request_method # "GET" request.query_string # "" request.content_length # длина тела запроса - request.media_type # медиа тип тела запроса + request.media_type # медиатип тела запроса request.host # "example.com" - request.get? # true (для других участвующих HTTP глаголов есть похожие методы) + request.get? # true (есть аналоги для других методов HTTP) request.form_data? # false - request["SOME_HEADER"] # значение SOME_HEADER заголовка + request["SOME_HEADER"] # значение заголовка SOME_HEADER request.referer # источник запроса клиента либо '/' request.user_agent # user agent (используется для :agent условия) - request.cookies # хеш куки браузера + request.cookies # хеш с куками браузера request.xhr? # является ли запрос ajax запросом? request.url # "http://example.com/example/foo" request.path # "/example/foo" - request.ip # IP адрес клиента + request.ip # IP-адрес клиента request.secure? # false - request.env # env хеш как получено Rack + request.env # "сырой" env хеш, полученный Rack end -Некоторые опции, такие как script_name или path_info могут быть переписаны: +Некоторые опции, такие как script_name или path_info доступны для записи: before { request.path_info = "/" } @@ -878,9 +878,9 @@ After-фильтры выполняются после каждого запро Sinatra устанавливает специальные not_found и error обработчики, когда запущена в режиме разработки (окружение :development). -== Mime типы +== Mime-типы -Когда вы используете send_file или статические файлы, у вас могут быть mime типы, которые Sinatra +Когда вы используете send_file или статические файлы, у вас могут быть mime-типы, которые Sinatra не понимает по умолчанию. Используйте +mime_type+ для их регистрации по расширению файла: mime_type :foo, 'text/foo' @@ -955,8 +955,8 @@ Rack распространяется с различными стандартн end end -Заметьте: Встроенные модули Sinatra::Test и Sinatra::TestHarness являются -устаревшими, начиная с 0.9.2 релиза. +Обратите внимание: Встроенные модуль Sinatra::Test и класс Sinatra::TestHarness являются +устаревшими, начиная с релиза 0.9.2. == Sinatra::Base — "прослойки", библиотеки и модульные приложения