devcenter 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (128) hide show
  1. data/CONTRIBUTING.md +14 -0
  2. data/Gemfile +0 -4
  3. data/devcenter.gemspec +2 -1
  4. data/lib/devcenter.rb +0 -1
  5. data/lib/devcenter/previewer/web_app.rb +3 -2
  6. data/lib/devcenter/version.rb +1 -1
  7. metadata +19 -124
  8. data/vendor/sinatra/.gitignore +0 -6
  9. data/vendor/sinatra/.travis.yml +0 -16
  10. data/vendor/sinatra/.yardopts +0 -4
  11. data/vendor/sinatra/AUTHORS +0 -61
  12. data/vendor/sinatra/Gemfile +0 -91
  13. data/vendor/sinatra/LICENSE +0 -22
  14. data/vendor/sinatra/README.de.rdoc +0 -2116
  15. data/vendor/sinatra/README.es.rdoc +0 -2106
  16. data/vendor/sinatra/README.fr.rdoc +0 -2133
  17. data/vendor/sinatra/README.hu.rdoc +0 -608
  18. data/vendor/sinatra/README.jp.rdoc +0 -1056
  19. data/vendor/sinatra/README.ko.rdoc +0 -1932
  20. data/vendor/sinatra/README.pt-br.rdoc +0 -778
  21. data/vendor/sinatra/README.pt-pt.rdoc +0 -647
  22. data/vendor/sinatra/README.rdoc +0 -2049
  23. data/vendor/sinatra/README.ru.rdoc +0 -2033
  24. data/vendor/sinatra/README.zh.rdoc +0 -1816
  25. data/vendor/sinatra/Rakefile +0 -182
  26. data/vendor/sinatra/examples/chat.rb +0 -61
  27. data/vendor/sinatra/examples/simple.rb +0 -3
  28. data/vendor/sinatra/examples/stream.ru +0 -26
  29. data/vendor/sinatra/lib/sinatra.rb +0 -5
  30. data/vendor/sinatra/lib/sinatra/base.rb +0 -1820
  31. data/vendor/sinatra/lib/sinatra/images/404.png +0 -0
  32. data/vendor/sinatra/lib/sinatra/images/500.png +0 -0
  33. data/vendor/sinatra/lib/sinatra/main.rb +0 -30
  34. data/vendor/sinatra/lib/sinatra/showexceptions.rb +0 -345
  35. data/vendor/sinatra/lib/sinatra/version.rb +0 -3
  36. data/vendor/sinatra/sinatra.gemspec +0 -18
  37. data/vendor/sinatra/test/base_test.rb +0 -172
  38. data/vendor/sinatra/test/builder_test.rb +0 -91
  39. data/vendor/sinatra/test/coffee_test.rb +0 -90
  40. data/vendor/sinatra/test/compile_test.rb +0 -139
  41. data/vendor/sinatra/test/contest.rb +0 -98
  42. data/vendor/sinatra/test/creole_test.rb +0 -65
  43. data/vendor/sinatra/test/delegator_test.rb +0 -160
  44. data/vendor/sinatra/test/encoding_test.rb +0 -20
  45. data/vendor/sinatra/test/erb_test.rb +0 -98
  46. data/vendor/sinatra/test/extensions_test.rb +0 -98
  47. data/vendor/sinatra/test/filter_test.rb +0 -437
  48. data/vendor/sinatra/test/haml_test.rb +0 -91
  49. data/vendor/sinatra/test/helper.rb +0 -123
  50. data/vendor/sinatra/test/helpers_test.rb +0 -1768
  51. data/vendor/sinatra/test/integration/app.rb +0 -62
  52. data/vendor/sinatra/test/integration_helper.rb +0 -222
  53. data/vendor/sinatra/test/integration_test.rb +0 -87
  54. data/vendor/sinatra/test/less_test.rb +0 -69
  55. data/vendor/sinatra/test/liquid_test.rb +0 -59
  56. data/vendor/sinatra/test/mapped_error_test.rb +0 -305
  57. data/vendor/sinatra/test/markaby_test.rb +0 -80
  58. data/vendor/sinatra/test/markdown_test.rb +0 -82
  59. data/vendor/sinatra/test/middleware_test.rb +0 -68
  60. data/vendor/sinatra/test/nokogiri_test.rb +0 -67
  61. data/vendor/sinatra/test/public/favicon.ico +0 -0
  62. data/vendor/sinatra/test/rabl_test.rb +0 -89
  63. data/vendor/sinatra/test/rack_test.rb +0 -45
  64. data/vendor/sinatra/test/radius_test.rb +0 -59
  65. data/vendor/sinatra/test/rdoc_test.rb +0 -66
  66. data/vendor/sinatra/test/readme_test.rb +0 -120
  67. data/vendor/sinatra/test/request_test.rb +0 -45
  68. data/vendor/sinatra/test/response_test.rb +0 -64
  69. data/vendor/sinatra/test/result_test.rb +0 -76
  70. data/vendor/sinatra/test/route_added_hook_test.rb +0 -59
  71. data/vendor/sinatra/test/routing_test.rb +0 -1175
  72. data/vendor/sinatra/test/sass_test.rb +0 -116
  73. data/vendor/sinatra/test/scss_test.rb +0 -89
  74. data/vendor/sinatra/test/server_test.rb +0 -48
  75. data/vendor/sinatra/test/settings_test.rb +0 -561
  76. data/vendor/sinatra/test/sinatra_test.rb +0 -12
  77. data/vendor/sinatra/test/slim_test.rb +0 -84
  78. data/vendor/sinatra/test/static_test.rb +0 -219
  79. data/vendor/sinatra/test/streaming_test.rb +0 -149
  80. data/vendor/sinatra/test/templates_test.rb +0 -333
  81. data/vendor/sinatra/test/textile_test.rb +0 -65
  82. data/vendor/sinatra/test/views/a/in_a.str +0 -1
  83. data/vendor/sinatra/test/views/ascii.erb +0 -2
  84. data/vendor/sinatra/test/views/b/in_b.str +0 -1
  85. data/vendor/sinatra/test/views/calc.html.erb +0 -1
  86. data/vendor/sinatra/test/views/error.builder +0 -3
  87. data/vendor/sinatra/test/views/error.erb +0 -3
  88. data/vendor/sinatra/test/views/error.haml +0 -3
  89. data/vendor/sinatra/test/views/error.sass +0 -2
  90. data/vendor/sinatra/test/views/explicitly_nested.str +0 -1
  91. data/vendor/sinatra/test/views/foo/hello.test +0 -1
  92. data/vendor/sinatra/test/views/hello.builder +0 -1
  93. data/vendor/sinatra/test/views/hello.coffee +0 -1
  94. data/vendor/sinatra/test/views/hello.creole +0 -1
  95. data/vendor/sinatra/test/views/hello.erb +0 -1
  96. data/vendor/sinatra/test/views/hello.haml +0 -1
  97. data/vendor/sinatra/test/views/hello.less +0 -5
  98. data/vendor/sinatra/test/views/hello.liquid +0 -1
  99. data/vendor/sinatra/test/views/hello.mab +0 -1
  100. data/vendor/sinatra/test/views/hello.md +0 -1
  101. data/vendor/sinatra/test/views/hello.nokogiri +0 -1
  102. data/vendor/sinatra/test/views/hello.rabl +0 -2
  103. data/vendor/sinatra/test/views/hello.radius +0 -1
  104. data/vendor/sinatra/test/views/hello.rdoc +0 -1
  105. data/vendor/sinatra/test/views/hello.sass +0 -2
  106. data/vendor/sinatra/test/views/hello.scss +0 -3
  107. data/vendor/sinatra/test/views/hello.slim +0 -1
  108. data/vendor/sinatra/test/views/hello.str +0 -1
  109. data/vendor/sinatra/test/views/hello.test +0 -1
  110. data/vendor/sinatra/test/views/hello.textile +0 -1
  111. data/vendor/sinatra/test/views/hello.wlang +0 -1
  112. data/vendor/sinatra/test/views/hello.yajl +0 -1
  113. data/vendor/sinatra/test/views/layout2.builder +0 -3
  114. data/vendor/sinatra/test/views/layout2.erb +0 -2
  115. data/vendor/sinatra/test/views/layout2.haml +0 -2
  116. data/vendor/sinatra/test/views/layout2.liquid +0 -2
  117. data/vendor/sinatra/test/views/layout2.mab +0 -2
  118. data/vendor/sinatra/test/views/layout2.nokogiri +0 -3
  119. data/vendor/sinatra/test/views/layout2.rabl +0 -3
  120. data/vendor/sinatra/test/views/layout2.radius +0 -2
  121. data/vendor/sinatra/test/views/layout2.slim +0 -3
  122. data/vendor/sinatra/test/views/layout2.str +0 -2
  123. data/vendor/sinatra/test/views/layout2.test +0 -1
  124. data/vendor/sinatra/test/views/layout2.wlang +0 -2
  125. data/vendor/sinatra/test/views/nested.str +0 -1
  126. data/vendor/sinatra/test/views/utf8.erb +0 -2
  127. data/vendor/sinatra/test/wlang_test.rb +0 -70
  128. data/vendor/sinatra/test/yajl_test.rb +0 -86
@@ -1,647 +0,0 @@
1
- = Sinatra
2
- <i>Atenção: Este documento é apenas uma tradução da versão em inglês e pode estar desatualizado.</i>
3
-
4
- Sinatra é uma
5
- {DSL}[http://pt.wikipedia.org/wiki/Linguagem_de_domínio_específico]
6
- para criar rapidamente aplicações web em Ruby com o mínimo de esforço:
7
-
8
- # minhaapp.rb
9
- require 'rubygems'
10
- require 'sinatra'
11
- get '/' do
12
- 'Olá Mundo!'
13
- end
14
-
15
- Instale a gem e execute com:
16
-
17
- sudo gem install sinatra
18
- ruby minhaapp.rb
19
-
20
- Aceda em: http://localhost:4567
21
-
22
- == Rotas
23
-
24
- No Sinatra, uma rota é um metodo HTTP associado a uma URL correspondente padrão.
25
- Cada rota é associada a um bloco:
26
-
27
- get '/' do
28
- .. mostrar algo ..
29
- end
30
-
31
- post '/' do
32
- .. criar algo ..
33
- end
34
-
35
- put '/' do
36
- .. atualizar algo ..
37
- end
38
-
39
- delete '/' do
40
- .. apagar algo ..
41
- end
42
-
43
- Rotas são encontradas na ordem em que são definidas. A primeira rota que
44
- é encontrada invoca o pedido.
45
-
46
- Padrões de rota podem incluir parâmetros nomeados, acessíveis através da
47
- hash <tt>params</tt>:
48
-
49
- get '/ola/:nome' do
50
- # corresponde a "GET /ola/foo" e "GET /ola/bar"
51
- # params[:nome] é 'foo' ou 'bar'
52
- "Olá #{params[:nome]}!"
53
- end
54
-
55
- Pode também aceder a parâmetros nomeados através do bloco de parâmetros:
56
-
57
- get '/ola/:nome' do |n|
58
- "Olá #{n}!"
59
- end
60
-
61
- Padrões de rota podem também incluir parâmetros splat (asteriscos), acessíveis
62
- através do array <tt>params[:splat]</tt>.
63
-
64
- get '/diga/*/ao/*' do
65
- # corresponde a /diga/ola/ao/mundo
66
- params[:splat] # => ["ola", "mundo"]
67
- end
68
-
69
- get '/download/*.*' do
70
- # corresponde a /download/pasta/do/arquivo.xml
71
- params[:splat] # => ["pasta/do/arquivo", "xml"]
72
- end
73
-
74
- Rotas correspondem-se com expressões regulares:
75
-
76
- get %r{/ola/([\w]+)} do
77
- "Olá, #{params[:captures].first}!"
78
- end
79
-
80
- Ou com um bloco de parâmetro:
81
-
82
- get %r{/ola/([\w]+)} do |c|
83
- "Olá, #{c}!"
84
- end
85
-
86
- Rotas podem incluir uma variedade de condições correspondentes, por exemplo, o agente usuário:
87
-
88
- get '/foo', :agent => /Songbird (\d\.\d)[\d\/]*?/ do
89
- "Você está a utilizar a versão #{params[:agent][0]} do Songbird."
90
- end
91
-
92
- get '/foo' do
93
- # Corresponde a um navegador não Songbird
94
- end
95
-
96
- == Arquivos estáticos
97
-
98
- Arquivos estáticos são disponibilizados a partir do directório <tt>./public</tt>. Você pode especificar
99
- um local diferente através da opção <tt>:public_folder</tt>
100
-
101
- set :public_folder, File.dirname(__FILE__) + '/estatico'
102
-
103
- Note que o nome do directório público não é incluido no URL. Um arquivo
104
- <tt>./public/css/style.css</tt> é disponibilizado como
105
- <tt>http://example.com/css/style.css</tt>.
106
-
107
- == Views / Templates
108
-
109
- Templates presumem-se estar localizados sob o directório <tt>./views</tt>.
110
- Para utilizar um directório de views diferente:
111
-
112
- set :views, File.dirname(__FILE__) + '/modelo'
113
-
114
- Uma coisa importante a ser lembrada é que você sempre tem as referências dos
115
- templates como símbolos, mesmo se eles estiverem num sub-directório (nesse
116
- caso utilize <tt>:'subdir/template'</tt>). Métodos de renderização irão processar
117
- qualquer string passada directamente para elas.
118
-
119
- === Haml Templates
120
-
121
- A gem/biblioteca haml é necessária para renderizar templates HAML:
122
-
123
- # É necessário requerir 'haml' na aplicação.
124
- require 'haml'
125
-
126
- get '/' do
127
- haml :index
128
- end
129
-
130
- Renderiza <tt>./views/index.haml</tt>.
131
-
132
- {Opções Haml}[http://haml.info/docs/yardoc/file.HAML_REFERENCE.html#options]
133
- podem ser definidas globalmente através das configurações do sinatra,
134
- veja {Opções e Configurações}[http://www.sinatrarb.com/configuration.html],
135
- e substitua em uma requisição individual.
136
-
137
- set :haml, {:format => :html5 } # o formato padrão do Haml é :xhtml
138
-
139
- get '/' do
140
- haml :index, :haml_options => {:format => :html4 } # substituido
141
- end
142
-
143
-
144
- === Erb Templates
145
-
146
- # É necessário requerir 'erb' na aplicação.
147
- require 'erb'
148
-
149
- get '/' do
150
- erb :index
151
- end
152
-
153
- Renderiza <tt>./views/index.erb</tt>
154
-
155
- === Erubis
156
-
157
- A gem/biblioteca erubis é necessária para renderizar templates erubis:
158
-
159
- # É necessário requerir 'erubis' na aplicação.
160
- require 'erubis'
161
-
162
- get '/' do
163
- erubis :index
164
- end
165
-
166
- Renderiza <tt>./views/index.erubis</tt>
167
-
168
- === Builder Templates
169
-
170
- A gem/biblioteca builder é necessária para renderizar templates builder:
171
-
172
- # É necessário requerir 'builder' na aplicação.
173
- require 'builder'
174
-
175
- get '/' do
176
- content_type 'application/xml', :charset => 'utf-8'
177
- builder :index
178
- end
179
-
180
- Renderiza <tt>./views/index.builder</tt>.
181
-
182
- === Sass Templates
183
-
184
- A gem/biblioteca sass é necessária para renderizar templates sass:
185
-
186
- # É necessário requerir 'haml' ou 'sass' na aplicação.
187
- require 'sass'
188
-
189
- get '/stylesheet.css' do
190
- content_type 'text/css', :charset => 'utf-8'
191
- sass :stylesheet
192
- end
193
-
194
- Renderiza <tt>./views/stylesheet.sass</tt>.
195
-
196
- {Opções Sass}[http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#options]
197
- podem ser definidas globalmente através das configurações do sinatra,
198
- veja {Opções e Configurações}[http://www.sinatrarb.com/configuration.html],
199
- e substitua em uma requisição individual.
200
-
201
- set :sass, {:style => :compact } # o estilo padrão do Sass é :nested
202
-
203
- get '/stylesheet.css' do
204
- content_type 'text/css', :charset => 'utf-8'
205
- sass :stylesheet, :style => :expanded # substituido
206
- end
207
-
208
- === Less Templates
209
-
210
- A gem/biblioteca less é necessária para renderizar templates Less:
211
-
212
- # É necessário requerir 'less' na aplicação.
213
- require 'less'
214
-
215
- get '/stylesheet.css' do
216
- content_type 'text/css', :charset => 'utf-8'
217
- less :stylesheet
218
- end
219
-
220
- Renderiza <tt>./views/stylesheet.less</tt>.
221
-
222
- === Templates Inline
223
-
224
- get '/' do
225
- haml '%div.title Olá Mundo'
226
- end
227
-
228
- Renderiza a string, em uma linha, no template.
229
-
230
- === Acedendo a Variáveis nos Templates
231
-
232
- Templates são avaliados dentro do mesmo contexto que os manipuladores de rota. Variáveis
233
- de instância definidas em rotas manipuladas são directamente acedidas por templates:
234
-
235
- get '/:id' do
236
- @foo = Foo.find(params[:id])
237
- haml '%h1= @foo.nome'
238
- end
239
-
240
- Ou, especifique um hash explícito para variáveis locais:
241
-
242
- get '/:id' do
243
- foo = Foo.find(params[:id])
244
- haml '%h1= foo.nome', :locals => { :foo => foo }
245
- end
246
-
247
- Isso é tipicamente utilizado quando renderizamos templates parciais (partials) dentro
248
- de outros templates.
249
-
250
- === Templates Inline
251
-
252
- Templates podem ser definidos no final do arquivo fonte(.rb):
253
-
254
- require 'rubygems'
255
- require 'sinatra'
256
-
257
- get '/' do
258
- haml :index
259
- end
260
-
261
- __END__
262
-
263
- @@ layout
264
- %html
265
- = yield
266
-
267
- @@ index
268
- %div.title Olá Mundo!!!!!
269
-
270
- NOTA: Templates inline definidos no arquivo fonte são automaticamente carregados
271
- pelo sinatra. Digite `enable :inline_templates` se tem templates inline no outro
272
- arquivo fonte.
273
-
274
- === Templates nomeados
275
-
276
- Templates também podem ser definidos utilizando o método top-level <tt>template</tt>:
277
-
278
- template :layout do
279
- "%html\n =yield\n"
280
- end
281
-
282
- template :index do
283
- '%div.title Olá Mundo!'
284
- end
285
-
286
- get '/' do
287
- haml :index
288
- end
289
-
290
- Se existir um template com nome "layout", ele será utilizado sempre que um
291
- template for renderizado. Pode desactivar layouts usando <tt>:layout => false</tt>.
292
-
293
- get '/' do
294
- haml :index, :layout => !request.xhr?
295
- end
296
-
297
- == Helpers
298
-
299
- Use o método de alto nível <tt>helpers</tt> para definir métodos auxiliares para utilizar em
300
- manipuladores de rotas e modelos:
301
-
302
- helpers do
303
- def bar(nome)
304
- "#{nome}bar"
305
- end
306
- end
307
-
308
- get '/:nome' do
309
- bar(params[:nome])
310
- end
311
-
312
- == Filtros
313
-
314
- Filtros Before são avaliados antes de cada requisição dentro do contexto da requisição
315
- e podem modificar a requisição e a reposta. Variáveis de instância definidas nos
316
- filtros são acedidas através de rotas e templates:
317
-
318
- before do
319
- @nota = 'Olá!'
320
- request.path_info = '/foo/bar/baz'
321
- end
322
-
323
- get '/foo/*' do
324
- @nota #=> 'Olá!'
325
- params[:splat] #=> 'bar/baz'
326
- end
327
-
328
- Filtros After são avaliados após cada requisição dentro do contexto da
329
- requisição e também podem modificar o pedido e a resposta. Variáveis de instância
330
- definidas nos filtros before e rotas são acedidas através dos filtros after:
331
-
332
- after do
333
- puts response.status
334
- end
335
-
336
- Filtros opcionalmente têm um padrão, fazendo com que sejam avaliados somente se o caminho
337
- do pedido coincidir com esse padrão:
338
-
339
- before '/protected/*' do
340
- autenticar!
341
- end
342
-
343
- after '/create/:slug' do |slug|
344
- session[:last_slug] = slug
345
- end
346
-
347
- == Halting
348
-
349
- Para parar imediatamente uma requisição dentro de um filtro ou rota utilize:
350
-
351
- halt
352
-
353
- Pode também especificar o status ao parar...
354
-
355
- halt 410
356
-
357
- Ou com um corpo de texto...
358
-
359
- halt 'isto será o corpo de texto'
360
-
361
- Ou também...
362
-
363
- halt 401, 'vamos embora!'
364
-
365
- Com cabeçalhos...
366
-
367
- halt 402, {'Content-Type' => 'text/plain'}, 'revanche'
368
-
369
- == Passing
370
-
371
- Dentro de uma rota, pode passar para a próxima rota correspondente usando <tt>pass</tt>:
372
-
373
- get '/adivinhar/:quem' do
374
- pass unless params[:quem] == 'Frank'
375
- 'Apanhaste-me!'
376
- end
377
-
378
- get '/adivinhar/*' do
379
- 'Falhaste!'
380
- end
381
-
382
- O bloqueio da rota é imediatamente encerrado e o controle continua com a próxima
383
- rota de parâmetro. Se o parâmetro da rota não for encontrado, um 404 é retornado.
384
-
385
- == Configuração
386
-
387
- Correndo uma vez, na inicialização, em qualquer ambiente:
388
-
389
- configure do
390
- ...
391
- end
392
-
393
- Correndo somente quando o ambiente (RACK_ENV environment variável) é definido para
394
- <tt>:production</tt>:
395
-
396
- configure :production do
397
- ...
398
- end
399
-
400
- Correndo quando o ambiente é definido para <tt>:production</tt> ou
401
- <tt>:test</tt>:
402
-
403
- configure :production, :test do
404
- ...
405
- end
406
-
407
- == Lidar com Erros
408
-
409
- Lida-se com erros no mesmo contexto das rotas e filtros before, o que signifca que
410
- <tt>haml</tt>, <tt>erb</tt>, etc, estão disponíveis.
411
-
412
- === Não Encontrado
413
-
414
- Quando um <tt>Sinatra::NotFound</tt> exception é levantado, ou o código de status
415
- da reposta é 404, o manipulador <tt>not_found</tt> é invocado:
416
-
417
- not_found do
418
- 'Isto está longe de ser encontrado'
419
- end
420
-
421
- === Erro
422
-
423
- O manipulador +error+ é invocado sempre que uma exceção é lançada a partir de
424
- um bloco de rota ou um filtro. O objecto da exceção pode ser obtido a partir da variável
425
- Rack <tt>sinatra.error</tt>:
426
-
427
- error do
428
- 'Peço desculpa, houve um erro desagradável - ' + env['sinatra.error'].name
429
- end
430
-
431
- Erros personalizados:
432
-
433
- error MeuErroPersonalizado do
434
- 'O que aconteceu foi...' + env['sinatra.error'].message
435
- end
436
-
437
- Então, se isso acontecer:
438
-
439
- get '/' do
440
- raise MeuErroPersonalizado, 'alguma coisa desagradável'
441
- end
442
-
443
- O resultado será:
444
-
445
- O que aconteceu foi...alguma coisa desagradável
446
-
447
- Alternativamente, pode definir um manipulador de erro para um código de status:
448
-
449
- error 403 do
450
- 'Accesso negado'
451
- end
452
-
453
- get '/secreto' do
454
- 403
455
- end
456
-
457
- Ou um range (alcance):
458
-
459
- error 400..510 do
460
- 'Boom'
461
- end
462
-
463
- O Sinatra define os manipuladores especiais <tt>not_found</tt> e <tt>error</tt> quando
464
- corre no ambiente de desenvolvimento.
465
-
466
- == Mime Types
467
-
468
- Quando utilizamos <tt>send_file</tt> ou arquivos estáticos pode ter mime types Sinatra
469
- não entendidos. Use +mime_type+ para os registar por extensão de arquivos:
470
-
471
- mime_type :foo, 'text/foo'
472
-
473
- Pode também utilizar isto com o helper +content_type+:
474
-
475
- content_type :foo
476
-
477
- == Middleware Rack
478
-
479
- O Sinatra corre no Rack[http://rack.rubyforge.org/], uma interface padrão mínima para
480
- frameworks web em Ruby. Uma das capacidades mais interessantes do Rack, para desenvolver
481
- aplicações, é o suporte de "middleware" -- componentes que residem entre o servidor e
482
- a aplicação, monitorizando e/ou manipulando o pedido/resposta (request/response) HTTP
483
- para providenciar varios tipos de funcionalidades comuns.
484
-
485
- O Sinatra torna a construção de pipelines do middleware Rack fácil a um nível superior
486
- utilizando o método +use+:
487
-
488
- require 'sinatra'
489
- require 'meu_middleware_personalizado'
490
-
491
- use Rack::Lint
492
- use MeuMiddlewarePersonalizado
493
-
494
- get '/ola' do
495
- 'Olá mundo'
496
- end
497
-
498
- A semântica de +use+ é idêntica aquela definida para a DSL
499
- Rack::Builder[http://rack.rubyforge.org/doc/classes/Rack/Builder.html]
500
- (mais frequentemente utilizada para arquivos rackup). Por exemplo, o método +use+
501
- aceita múltiplos argumentos/variáveis, bem como blocos:
502
-
503
- use Rack::Auth::Basic do |utilizador, senha|
504
- utilizador == 'admin' && senha == 'secreto'
505
- end
506
-
507
- O Rack é distribuido com uma variedade de middleware padrões para logs,
508
- debugs, rotas de URL, autenticação, e manipuladores de sessão.Sinatra utiliza
509
- muitos desses componentes automaticamente dependendo da configuração, por isso,
510
- tipicamente nao é necessário utilizar +use+ explicitamente.
511
-
512
- == Testando
513
-
514
- Testes no Sinatra podem ser escritos utilizando qualquer biblioteca ou framework
515
- de teste baseados no Rack. {Rack::Test}[http://gitrdoc.com/brynary/rack-test] é
516
- recomendado:
517
-
518
- require 'minha_aplicacao_sinatra'
519
- require 'rack/test'
520
-
521
- class MinhaAplicacaoTeste < Test::Unit::TestCase
522
- include Rack::Test::Methods
523
-
524
- def app
525
- Sinatra::Application
526
- end
527
-
528
- def meu_test_default
529
- get '/'
530
- assert_equal 'Ola Mundo!', last_response.body
531
- end
532
-
533
- def teste_com_parametros
534
- get '/atender', :name => 'Frank'
535
- assert_equal 'Olá Frank!', last_response.bodymeet
536
- end
537
-
538
- def test_com_ambiente_rack
539
- get '/', {}, 'HTTP_USER_AGENT' => 'Songbird'
540
- assert_equal "Você está utilizando o Songbird!", last_response.body
541
- end
542
- end
543
-
544
- NOTA: Os módulos de classe embutidos Sinatra::Test e Sinatra::TestHarness
545
- são depreciados na versão 0.9.2.
546
-
547
- == Sinatra::Base - Middleware, Bibliotecas e aplicativos modulares
548
-
549
- Definir sua aplicação a um nível superior de trabalho funciona bem para micro aplicativos, mas tem
550
- consideráveis incovenientes na construção de componentes reutilizáveis como um middleware Rack,
551
- metal Rails, bibliotecas simples como um componente de servidor, ou
552
- mesmo extensões Sinatra. A DSL de nível superior polui o espaço do objeto
553
- e assume um estilo de configuração de micro aplicativos (exemplo: um simples arquivo de
554
- aplicação, directórios ./public e ./views, logs, página de detalhes de excepção,
555
- etc.). É onde o Sinatra::Base entra em jogo:
556
-
557
- require 'sinatra/base'
558
-
559
- class MinhaApp < Sinatra::Base
560
- set :sessions, true
561
- set :foo, 'bar'
562
-
563
- get '/' do
564
- 'Olá mundo!'
565
- end
566
- end
567
-
568
- A classe MinhaApp é um componente Rack independente que pode utilizar como um
569
- middleware Rack, uma aplicação Rack, ou metal Rails. Pode +utilizar+ ou
570
- +executar+ esta classe com um arquivo rackup +config.ru+; ou, controlar um componente
571
- de servidor fornecendo como biblioteca:
572
-
573
- MinhaApp.run! :host => 'localhost', :port => 9090
574
-
575
- Os métodos disponíveis para subclasses Sinatra::Base são exatamente como aqueles
576
- disponíveis via a DSL de nível superior. Aplicações de nível mais alto podem ser convertidas para
577
- componentes Sinatra::Base com duas modificações:
578
-
579
- * Seu arquivo deve requerer +sinatra/base+ ao invés de +sinatra+;
580
- outra coisa, todos os métodos DSL do Sinatra são importados para o espaço
581
- principal.
582
- * Coloque as rotas da sua aplicação, manipuladores de erro, filtros e opções na subclasse de
583
- um Sinatra::Base.
584
-
585
- +Sinatra::Base+ é um quadro branco. Muitas opções são desactivadas por padrão,
586
- incluindo o servidor embutido. Veja {Opções e Configurações}[http://sinatra.github.com/configuration.html]
587
- para detalhes de opções disponíveis e seus comportamentos.
588
-
589
- SIDEBAR: A DSL de alto nível do Sinatra é implementada utilizando um simples sistema de
590
- delegação. A classe +Sinatra::Application+ -- uma subclasse especial da
591
- Sinatra::Base -- recebe todos os :get, :put, :post, :delete, :before,
592
- :error, :not_found, :configure, e :set messages enviados para o
593
- alto nível. Dê você mesmo uma vista de olhos ao código: aqui está o
594
- {Sinatra::Delegator mixin}[http://github.com/sinatra/sinatra/blob/ceac46f0bc129a6e994a06100aa854f606fe5992/lib/sinatra/base.rb#L1128]
595
- sendo {incluido dentro de um espaço principal}[http://github.com/sinatra/sinatra/blob/ceac46f0bc129a6e994a06100aa854f606fe5992/lib/sinatra/main.rb#L28]
596
-
597
- == Linha de Comandos
598
-
599
- As aplicações Sinatra podem ser executadas directamente:
600
-
601
- ruby minhaapp.rb [-h] [-x] [-e AMBIENTE] [-p PORTA] [-o HOST] [-s SERVIDOR]
602
-
603
- As opções são:
604
-
605
- -h # ajuda
606
- -p # define a porta (padrão é 4567)
607
- -o # define o host (padrão é 0.0.0.0)
608
- -e # define o ambiente (padrão é development)
609
- -s # especifica o servidor/manipulador rack (padrão é thin)
610
- -x # activa o bloqueio (padrão é desligado)
611
-
612
- == A última versão
613
-
614
- Se gostaria de utilizar o código da última versão do Sinatra, crie um clone
615
- local e execute sua aplicação com o directório <tt>sinatra/lib</tt> no
616
- <tt>LOAD_PATH</tt>:
617
-
618
- cd minhaapp
619
- git clone git://github.com/sinatra/sinatra.git
620
- ruby -I sinatra/lib minhaapp.rb
621
-
622
- Alternativamente, pode adicionar o directório do <tt>sinatra/lib</tt> no
623
- <tt>LOAD_PATH</tt> do seu aplicativo:
624
-
625
- $LOAD_PATH.unshift File.dirname(__FILE__) + '/sinatra/lib'
626
- require 'rubygems'
627
- require 'sinatra'
628
-
629
- get '/sobre' do
630
- "Estou correndo a versão" + Sinatra::VERSION
631
- end
632
-
633
- Para actualizar o código do Sinatra no futuro:
634
-
635
- cd meuprojeto/sinatra
636
- git pull
637
-
638
- == Mais
639
-
640
- * {Website do Projeto}[http://www.sinatrarb.com/] - Documentação adicional,
641
- novidades e links para outros recursos.
642
- * {Contribuir}[http://www.sinatrarb.com/contributing] - Encontrou um bug? Precisa
643
- de ajuda? Tem um patch?
644
- * {Acompanhar Questões}[http://github.com/sinatra/sinatra/issues]
645
- * {Twitter}[http://twitter.com/sinatra]
646
- * {Lista de Email}[http://groups.google.com/group/sinatrarb/topics]
647
- * {IRC: #sinatra}[irc://chat.freenode.net/#sinatra] em http://freenode.net