sinatra-acd 1.4.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (128) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +5 -0
  3. data/AUTHORS +61 -0
  4. data/CHANGES +1293 -0
  5. data/Gemfile +76 -0
  6. data/LICENSE +23 -0
  7. data/README.de.md +2864 -0
  8. data/README.es.md +2786 -0
  9. data/README.fr.md +2924 -0
  10. data/README.hu.md +694 -0
  11. data/README.ja.md +2726 -0
  12. data/README.ko.md +2832 -0
  13. data/README.md +2980 -0
  14. data/README.pt-br.md +965 -0
  15. data/README.pt-pt.md +791 -0
  16. data/README.ru.md +2799 -0
  17. data/README.zh.md +2158 -0
  18. data/Rakefile +199 -0
  19. data/examples/chat.rb +61 -0
  20. data/examples/simple.rb +3 -0
  21. data/examples/stream.ru +26 -0
  22. data/lib/sinatra.rb +4 -0
  23. data/lib/sinatra/base.rb +2044 -0
  24. data/lib/sinatra/images/404.png +0 -0
  25. data/lib/sinatra/images/500.png +0 -0
  26. data/lib/sinatra/main.rb +34 -0
  27. data/lib/sinatra/show_exceptions.rb +345 -0
  28. data/lib/sinatra/version.rb +3 -0
  29. data/sinatra.gemspec +19 -0
  30. data/test/asciidoctor_test.rb +72 -0
  31. data/test/base_test.rb +171 -0
  32. data/test/builder_test.rb +91 -0
  33. data/test/coffee_test.rb +90 -0
  34. data/test/compile_test.rb +183 -0
  35. data/test/contest.rb +100 -0
  36. data/test/creole_test.rb +65 -0
  37. data/test/delegator_test.rb +160 -0
  38. data/test/encoding_test.rb +20 -0
  39. data/test/erb_test.rb +116 -0
  40. data/test/extensions_test.rb +98 -0
  41. data/test/filter_test.rb +487 -0
  42. data/test/haml_test.rb +109 -0
  43. data/test/helper.rb +131 -0
  44. data/test/helpers_test.rb +1917 -0
  45. data/test/integration/app.rb +79 -0
  46. data/test/integration_helper.rb +236 -0
  47. data/test/integration_test.rb +104 -0
  48. data/test/less_test.rb +69 -0
  49. data/test/liquid_test.rb +77 -0
  50. data/test/mapped_error_test.rb +285 -0
  51. data/test/markaby_test.rb +80 -0
  52. data/test/markdown_test.rb +82 -0
  53. data/test/mediawiki_test.rb +68 -0
  54. data/test/middleware_test.rb +68 -0
  55. data/test/nokogiri_test.rb +67 -0
  56. data/test/public/favicon.ico +0 -0
  57. data/test/rabl_test.rb +89 -0
  58. data/test/rack_test.rb +45 -0
  59. data/test/radius_test.rb +59 -0
  60. data/test/rdoc_test.rb +66 -0
  61. data/test/readme_test.rb +130 -0
  62. data/test/request_test.rb +97 -0
  63. data/test/response_test.rb +63 -0
  64. data/test/result_test.rb +76 -0
  65. data/test/route_added_hook_test.rb +59 -0
  66. data/test/routing_test.rb +1412 -0
  67. data/test/sass_test.rb +115 -0
  68. data/test/scss_test.rb +88 -0
  69. data/test/server_test.rb +48 -0
  70. data/test/settings_test.rb +582 -0
  71. data/test/sinatra_test.rb +12 -0
  72. data/test/slim_test.rb +102 -0
  73. data/test/static_test.rb +236 -0
  74. data/test/streaming_test.rb +149 -0
  75. data/test/stylus_test.rb +90 -0
  76. data/test/templates_test.rb +382 -0
  77. data/test/textile_test.rb +65 -0
  78. data/test/views/a/in_a.str +1 -0
  79. data/test/views/ascii.erb +2 -0
  80. data/test/views/b/in_b.str +1 -0
  81. data/test/views/calc.html.erb +1 -0
  82. data/test/views/error.builder +3 -0
  83. data/test/views/error.erb +3 -0
  84. data/test/views/error.haml +3 -0
  85. data/test/views/error.sass +2 -0
  86. data/test/views/explicitly_nested.str +1 -0
  87. data/test/views/foo/hello.test +1 -0
  88. data/test/views/hello.asciidoc +1 -0
  89. data/test/views/hello.builder +1 -0
  90. data/test/views/hello.coffee +1 -0
  91. data/test/views/hello.creole +1 -0
  92. data/test/views/hello.erb +1 -0
  93. data/test/views/hello.haml +1 -0
  94. data/test/views/hello.less +5 -0
  95. data/test/views/hello.liquid +1 -0
  96. data/test/views/hello.mab +1 -0
  97. data/test/views/hello.md +1 -0
  98. data/test/views/hello.mediawiki +1 -0
  99. data/test/views/hello.nokogiri +1 -0
  100. data/test/views/hello.rabl +2 -0
  101. data/test/views/hello.radius +1 -0
  102. data/test/views/hello.rdoc +1 -0
  103. data/test/views/hello.sass +2 -0
  104. data/test/views/hello.scss +3 -0
  105. data/test/views/hello.slim +1 -0
  106. data/test/views/hello.str +1 -0
  107. data/test/views/hello.styl +2 -0
  108. data/test/views/hello.test +1 -0
  109. data/test/views/hello.textile +1 -0
  110. data/test/views/hello.wlang +1 -0
  111. data/test/views/hello.yajl +1 -0
  112. data/test/views/layout2.builder +3 -0
  113. data/test/views/layout2.erb +2 -0
  114. data/test/views/layout2.haml +2 -0
  115. data/test/views/layout2.liquid +2 -0
  116. data/test/views/layout2.mab +2 -0
  117. data/test/views/layout2.nokogiri +3 -0
  118. data/test/views/layout2.rabl +3 -0
  119. data/test/views/layout2.radius +2 -0
  120. data/test/views/layout2.slim +3 -0
  121. data/test/views/layout2.str +2 -0
  122. data/test/views/layout2.test +1 -0
  123. data/test/views/layout2.wlang +2 -0
  124. data/test/views/nested.str +1 -0
  125. data/test/views/utf8.erb +2 -0
  126. data/test/wlang_test.rb +87 -0
  127. data/test/yajl_test.rb +86 -0
  128. metadata +280 -0
@@ -0,0 +1,694 @@
1
+ # Sinatra
2
+ *Fontos megjegyzés: Ez a dokumentum csak egy fordítása az angol nyelvű
3
+ változat, és lehet, hogy nem naprakész.*
4
+
5
+ A Sinatra egy [DSL](http://en.wikipedia.org/wiki/Domain-specific_language)
6
+ webalkalmazások Ruby nyelven történő fejlesztéséhez, minimális
7
+ energiabefektetéssel:
8
+
9
+ ```ruby
10
+ # myapp.rb
11
+ require 'sinatra'
12
+ get '/' do
13
+ 'Helló Világ!'
14
+ end
15
+ ```
16
+
17
+ Telepítsd a gem-et és indítsd el az alkalmazást a következőképpen:
18
+
19
+ ```ruby
20
+ sudo gem install sinatra
21
+ ruby myapp.rb
22
+ ```
23
+
24
+ Az alkalmazás elérhető lesz itt: `http://localhost:4567`
25
+
26
+ ## Útvonalak (routes)
27
+
28
+ A Sinatrában az útvonalat egy HTTP metódus és egy URL-re illeszkedő minta
29
+ párosa alkotja. Minden egyes útvonalhoz tartozik egy blokk:
30
+
31
+ ```ruby
32
+ get '/' do
33
+ .. megjelenítünk valamit ..
34
+ end
35
+
36
+ post '/' do
37
+ .. létrehozunk valamit ..
38
+ end
39
+
40
+ put '/' do
41
+ .. frissítünk valamit ..
42
+ end
43
+
44
+ delete '/' do
45
+ .. törlünk valamit ..
46
+ end
47
+ ```
48
+
49
+ Az útvonalak illeszkedését a rendszer a definiálásuk sorrendjében
50
+ ellenőrzi. Sorrendben mindig az első illeszkedő útvonalhoz tartozó metódus kerül
51
+ meghívásra.
52
+
53
+ Az útvonalminták tartalmazhatnak paramétereket is, melyeket a `params`
54
+ hash-ből érhetünk el:
55
+
56
+ ```ruby
57
+ get '/hello/:name' do
58
+ # illeszkedik a "GET /hello/foo" és a "GET /hello/bar" útvonalakra
59
+ # ekkor params[:name] értéke 'foo' vagy 'bar' lesz
60
+ "Helló #{params[:name]}!"
61
+ end
62
+ ```
63
+
64
+ A kulcsszavas argumentumokat (named parameters) blokk paraméterek útján
65
+ is el tudod érni:
66
+
67
+ ```ruby
68
+ get '/hello/:name' do |n|
69
+ "Helló #{n}!"
70
+ end
71
+ ```
72
+
73
+ Az útvonalmintákban szerepelhetnek joker paraméterek is, melyeket a
74
+ `params[:splat]` tömbön keresztül tudunk elérni.
75
+
76
+ ```ruby
77
+ get '/say/*/to/*' do
78
+ # illeszkedik a /say/hello/to/world mintára
79
+ params[:splat] # => ["hello", "world"]
80
+ end
81
+
82
+ get '/download/*.*' do
83
+ # illeszkedik a /download/path/to/file.xml mintára
84
+ params[:splat] # => ["path/to/file", "xml"]
85
+ end
86
+ ```
87
+
88
+ Reguláris kifejezéseket is felvehetünk az útvonalba:
89
+
90
+ ```ruby
91
+ get %r{/hello/([\w]+)} do
92
+ "Helló, #{params[:captures].first}!"
93
+ end
94
+ ```
95
+
96
+ Vagy blokk paramétereket:
97
+
98
+ ```ruby
99
+ get %r{/hello/([\w]+)} do |c|
100
+ "Helló, #{c}!"
101
+ end
102
+ ```
103
+
104
+ Az útvonalak azonban számos egyéb illeszkedési feltétel szerint is
105
+ tervezhetők, így például az user agent karakterláncot alapul véve:
106
+
107
+ ```ruby
108
+ get '/foo', :agent => /Songbird (\d\.\d)[\d\/]*?/ do
109
+ "A Songbird #{params[:agent][0]} verzióját használod"
110
+ end
111
+
112
+ get '/foo' do
113
+ # illeszkedik az egyéb user agentekre
114
+ end
115
+ ```
116
+
117
+ ## Statikus állományok
118
+
119
+ A statikus fájlok kiszolgálása a `./public` könyvtárból
120
+ történik, de természetesen más könyvtárat is megadhatsz erre a célra,
121
+ mégpedig a :public_folder kapcsoló beállításával:
122
+
123
+ set :public_folder, File.dirname(__FILE__) + '/static'
124
+
125
+ Fontos mgejegyezni, hogy a nyilvános könyvtár neve nem szerepel az URL-ben.
126
+ A ./public/css/style.css fájl az
127
+ `http://example.com/css/style.css` URL-en lesz elérhető.
128
+
129
+ ## Nézetek és Sablonok
130
+
131
+ A sablonfájlokat rendszerint a `./views` könyvtárba helyezzük, de
132
+ itt is lehetőség nyílik egyéb könyvtár használatára:
133
+
134
+ set :views, File.dirname(__FILE__) + '/templates'
135
+
136
+ Nagyon fontos észben tartani, hogy a sablononkra mindig szimbólumokkal
137
+ hivatkozunk, még akkor is, ha egyéb (ebben az esetben a
138
+ :'subdir/template') könyvtárban tároljuk őket. A renderelő
139
+ metódusok minden, nekik közvetlenül átadott karakterláncot megjelenítenek.
140
+
141
+ ### Haml sablonok
142
+
143
+ HAML sablonok rendereléséhez szükségünk lesz a haml gem-re vagy könyvtárra:
144
+
145
+ ```ruby
146
+ # Importáljuk be a haml-t az alkalmazásba
147
+ require 'haml'
148
+
149
+ get '/' do
150
+ haml :index
151
+ end
152
+ ```
153
+
154
+ Ez szépen lerendereli a `./views/index.haml` sablont.
155
+
156
+ A [Haml kapcsolói](http://haml.hamptoncatlin.com/docs/rdoc/classes/Haml.html)
157
+ globálisan is beállíthatók a Sinatra konfigurációi között, lásd az
158
+ [Options and Configurations](http://www.sinatrarb.com/configuration.html) lapot.
159
+ A globális beállításokat lehetőségünk van felülírni metódus szinten is.
160
+
161
+ ```ruby
162
+ set :haml, {:format => :html5 } # az alapértelmezett Haml formátum az :xhtml
163
+
164
+ get '/' do
165
+ haml :index, :haml_options => {:format => :html4 } # immár felülírva
166
+ end
167
+ ```
168
+
169
+ ### Erb sablonok
170
+
171
+ # Importáljuk be az erb-t az alkalmazásba
172
+
173
+ ```ruby
174
+ require 'erb'
175
+
176
+ get '/' do
177
+ erb :index
178
+ end
179
+ ```
180
+
181
+ Ez a `./views/index.erb` sablont fogja lerenderelni.
182
+
183
+ ### Builder sablonok
184
+
185
+ Szükségünk lesz a builder gem-re vagy könyvtárra a builder sablonok
186
+ rendereléséhez:
187
+
188
+ # Importáljuk be a builder-t az alkalmazásba
189
+
190
+ ```ruby
191
+ require 'builder'
192
+
193
+ get '/' do
194
+ builder :index
195
+ end
196
+ ```
197
+
198
+ Ez pedig a `./views/index.builder` állományt fogja renderelni.
199
+
200
+ ### Sass sablonok
201
+
202
+ Sass sablonok használatához szükség lesz a haml gem-re vagy könyvtárra:
203
+
204
+ # Be kell importálni a haml, vagy a sass könyvtárat
205
+
206
+ ```ruby
207
+ require 'sass'
208
+
209
+ get '/stylesheet.css' do
210
+ sass :stylesheet
211
+ end
212
+ ```
213
+
214
+ Így a `./views/stylesheet.sass` fájl máris renderelhető.
215
+
216
+ A [Sass kapcsolói](http://haml.hamptoncatlin.com/docs/rdoc/classes/Sass.html)
217
+ globálisan is beállíthatók a Sinatra konfigurációi között, lásd az
218
+ [Options and Configurations](http://www.sinatrarb.com/configuration.html) lapot.
219
+ A globális beállításokat lehetőségünk van felülírni metódus szinten is.
220
+
221
+ ```ruby
222
+ set :sass, {:style => :compact } # az alapértelmezett Sass stílus a :nested
223
+
224
+ get '/stylesheet.css' do
225
+ sass :stylesheet, :sass_options => {:style => :expanded } # felülírva
226
+ end
227
+ ```
228
+
229
+ ### Beágyazott sablonok
230
+
231
+ ```ruby
232
+ get '/' do
233
+ haml '%div.title Helló Világ'
234
+ end
235
+ ```
236
+
237
+ Lerendereli a beágyazott sablon karakerláncát.
238
+
239
+ ### Változók elérése a sablonokban
240
+
241
+ A sablonok ugyanabban a kontextusban kerülnek kiértékelésre, mint az
242
+ útvonal metódusok (route handlers). Az útvonal metódusokban megadott
243
+ változók közvetlenül elérhetőek lesznek a sablonokban:
244
+
245
+ ```ruby
246
+ get '/:id' do
247
+ @foo = Foo.find(params[:id])
248
+ haml '%h1= @foo.name'
249
+ end
250
+ ```
251
+
252
+ De megadhatod egy lokális változókat tartalmazó explicit hash-ben is:
253
+
254
+ ```ruby
255
+ get '/:id' do
256
+ foo = Foo.find(params[:id])
257
+ haml '%h1= foo.name', :locals => { :foo => foo }
258
+ end
259
+ ```
260
+
261
+ Ezt leginkább akkor érdemes megtenni, ha partial-eket akarunk renderelni
262
+ valamely más sablonból.
263
+
264
+ ### Fájlon belüli sablonok
265
+
266
+ Sablonokat úgy is megadhatunk, hogy egyszerűen az alkalmazás fájl
267
+ végére begépeljük őket:
268
+
269
+ ```ruby
270
+ require 'rubygems'
271
+ require 'sinatra'
272
+
273
+ get '/' do
274
+ haml :index
275
+ end
276
+
277
+ __END__
278
+
279
+ @@ layout
280
+ %html
281
+ = yield
282
+
283
+ @@ index
284
+ %div.title Helló Világ!!!!!
285
+ ```
286
+
287
+ Megjegyzés: azok a fájlon belüli sablonok, amelyek az alkalmazás fájl végére
288
+ kerülnek és függnek a sinatra könyvtártól, automatikusan betöltődnek.
289
+ Ha ugyanezt más alkalmazásfájlban is szeretnéd megtenni, hívd meg
290
+ a <tt>use_in_file_templates!</tt> metódust az adott fájlban.
291
+
292
+ ### Kulcsszavas sablonok
293
+
294
+ Sablonokat végül a felsőszintű <tt>template</tt> metódussal is
295
+ definiálhatunk:
296
+
297
+ ```ruby
298
+ template :layout do
299
+ "%html\n =yield\n"
300
+ end
301
+
302
+ template :index do
303
+ '%div.title Helló Világ!'
304
+ end
305
+
306
+ get '/' do
307
+ haml :index
308
+ end
309
+ ```
310
+
311
+ Ha létezik "layout" nevű sablon, akkor az minden esetben meghívódik, amikor
312
+ csak egy sablon renderelésre kerül. A layoutokat ki lehet kapcsolni a
313
+ `:layout => false` meghívásával.
314
+
315
+ ```ruby
316
+ get '/' do
317
+ haml :index, :layout => !request.xhr?
318
+ end
319
+ ```
320
+
321
+ ## Helperek
322
+
323
+ Használd a felső szintű <tt>helpers</tt> metódust azokhoz a helper
324
+ függvényekhez, amiket az útvonal metódusokban és a sablonokban akarsz
325
+ használni:
326
+
327
+ ```ruby
328
+ helpers do
329
+ def bar(name)
330
+ "#{name}bar"
331
+ end
332
+ end
333
+
334
+ get '/:name' do
335
+ bar(params[:name])
336
+ end
337
+ ```
338
+
339
+ ## Szűrők (filters)
340
+
341
+ Az előszűrők (before filter) az adott hívás kontextusában minden egyes
342
+ kérés alkalmával kiértékelődnek, így módosíthatják a kérést és a
343
+ választ egyaránt. A szűrőkbe felvett példányváltozók elérhetőek lesznek
344
+ az útvonalakban és a sablonokban is:
345
+
346
+ ```ruby
347
+ before do
348
+ @note = 'Csá!'
349
+ request.path_info = '/foo/bar/baz'
350
+ end
351
+
352
+ get '/foo/*' do
353
+ @note #=> 'Szeva!'
354
+ params[:splat] #=> 'bar/baz'
355
+ end
356
+ ```
357
+
358
+ Az utószűrők az egyes kérések után, az adott kérés kontextusában kerülnek
359
+ kiértékelésre, így ezek is képesek módosítani a kérést és a választ egyaránt.
360
+ Az előszűrőkben és úvonalakban létrehozott példányváltozók elérhetőek lesznek
361
+ az utószűrők számára:
362
+
363
+ ```ruby
364
+ after do
365
+ puts response.status
366
+ end
367
+ ```
368
+
369
+ ## Megállítás
370
+
371
+ Egy kérés szűrőben vagy útvonalban történő azonnal blokkolásához
372
+ használd a következő parancsot:
373
+
374
+ halt
375
+
376
+ A megállításkor egy blokktörzset is megadhatsz ...
377
+
378
+ halt 'ez fog megjelenni a törzsben'
379
+
380
+ Vagy állítsd be a HTTP státuszt és a törzset is egyszerre ...
381
+
382
+ halt 401, 'menj innen!'
383
+
384
+ ## Passzolás
385
+
386
+ Az útvonalak továbbadhatják a végrehajtást egy másik útvonalnak
387
+ a `pass` függvényhívással:
388
+
389
+ ```ruby
390
+ get '/guess/:who' do
391
+ pass unless params[:who] == 'Frici'
392
+ "Elkaptál!"
393
+ end
394
+
395
+ get '/guess/*' do
396
+ "Elhibáztál!"
397
+ end
398
+ ```
399
+
400
+ Az útvonal blokkja azonnal kilép és átadja a vezérlést a következő
401
+ illeszkedő útvonalnak. Ha nem talál megfelelő útvonalat, a Sinatra
402
+ egy 404-es hibával tér vissza.
403
+
404
+ ## Beállítások
405
+
406
+ Csak indításkor, de minden környezetre érvényesen fusson le:
407
+
408
+ ```ruby
409
+ configure do
410
+ ...
411
+ end
412
+ ```
413
+
414
+ Csak akkor fusson le, ha a környezet (a RACK_ENV környezeti változóban)
415
+ `:production`-ra van állítva:
416
+
417
+ ```ruby
418
+ configure :production do
419
+ ...
420
+ end
421
+ ```
422
+
423
+ Csak akkor fusson le, ha a környezet <tt>:production</tt> vagy <tt>:test</tt>:
424
+
425
+ ```ruby
426
+ configure :production, :test do
427
+ ...
428
+ end
429
+ ```
430
+
431
+ ## Hibakezelés
432
+
433
+ A hibakezelők ugyanabban a kontextusban futnak le, mint az útvonalak és
434
+ előszűrők, ezért számukra is elérhetőek mindazok a könyvtárak, amelyek
435
+ az utóbbiak rendelkezésére is állnak; így például a `haml`,
436
+ az `erb`, a `halt` stb.
437
+
438
+ ### Nem található
439
+
440
+ Amikor a `Sinatra::NotFound` kivétel fellép, vagy a válasz HTTP
441
+ státuszkódja 404-es, mindig a `not_found` metódus hívódik meg.
442
+
443
+ ```ruby
444
+ not_found do
445
+ 'Sehol sem találom, amit keresel'
446
+ end
447
+ ```
448
+
449
+ ### Hiba
450
+
451
+ Az `error` metódus hívódik meg olyankor, amikor egy útvonal, blokk vagy
452
+ előszűrő kivételt vált ki. A kivétel objektum lehívható a
453
+ `sinatra.error` Rack változótól:
454
+
455
+ ```ruby
456
+ error do
457
+ 'Elnézést, de valami szörnyű hiba lépett fel - ' + env['sinatra.error'].name
458
+ end
459
+ ```
460
+
461
+ Egyéni hibakezelés:
462
+
463
+ ```ruby
464
+ error MyCustomError do
465
+ 'Szóval az van, hogy...' + env['sinatra.error'].message
466
+ end
467
+ ```
468
+
469
+ És amikor fellép:
470
+
471
+ ```ruby
472
+ get '/' do
473
+ raise MyCustomError, 'valami nem stimmel!'
474
+ end
475
+ ```
476
+
477
+ Ez fog megjelenni:
478
+
479
+ Szóval az van, hogy... valami nem stimmel!
480
+
481
+ A Sinatra speciális `not_found` és `error` hibakezelőket
482
+ használ, amikor a futtatási környezet fejlesztői módba van kapcsolva.
483
+
484
+ ## Mime típusok
485
+
486
+ A `send_file` metódus használatakor, vagy statikus fájlok
487
+ kiszolgálásakor előfordulhat, hogy a Sinatra nem ismeri fel a fájlok
488
+ mime típusát. Ilyenkor használd a +mime_type+ kapcsolót a fájlkiterjesztés
489
+ bevezetéséhez:
490
+
491
+ ```ruby
492
+ mime_type :foo, 'text/foo'
493
+ ```
494
+
495
+ ## Rack Middleware
496
+
497
+ A Sinatra egy Ruby keretrendszerek számára kifejlesztett egyszerű és szabványos
498
+ interfészre, a [Rack](http://rack.rubyforge.org/) -re épül. A Rack fejlesztői
499
+ szempontból egyik legérdekesebb jellemzője, hogy támogatja az úgynevezett
500
+ "middleware" elnevezésű komponenseket, amelyek beékelődnek a szerver és az
501
+ alkalmazás közé, így képesek megfigyelni és/vagy módosítani a HTTP
502
+ kéréseket és válaszokat. Segítségükkel különféle, egységesen működő
503
+ funkciókat építhetünk be rendszerünkbe.
504
+
505
+ A Sinatra keretrendszerben gyerekjáték a Rack middleware-ek behúzása a
506
+ `use` metódus segítségével:
507
+
508
+ ```ruby
509
+ require 'sinatra'
510
+ require 'my_custom_middleware'
511
+
512
+ use Rack::Lint
513
+ use MyCustomMiddleware
514
+
515
+ get '/hello' do
516
+ 'Helló Világ'
517
+ end
518
+ ```
519
+
520
+ A `use` metódus szemantikája megegyezik a
521
+ [Rack::Builder](http://rack.rubyforge.org/doc/classes/Rack/Builder.html) DSL-ben
522
+ használt +use+ metóduséval (az említett DSL-t leginkább rackup állományokban
523
+ használják). Hogy egy példát említsünk, a `use` metódus elfogad
524
+ változókat és blokkokat egyaránt, akár kombinálva is ezeket:
525
+
526
+ ```ruby
527
+ use Rack::Auth::Basic do |username, password|
528
+ username == 'admin' && password == 'titkos'
529
+ end
530
+ ```
531
+
532
+ A Rack terjesztéssel egy csomó alap middleware komponens is érkezik,
533
+ amelyekkel a naplózás, URL útvonalak megadása, autentikáció és
534
+ munkamenet-kezelés könnyen megvalósítható. A Sinatra ezek közül elég
535
+ sokat automatikusan felhasznál a beállításoktól függően, így ezek
536
+ explicit betöltésével (+use+) nem kell bajlódnod.
537
+
538
+ ## Tesztelés
539
+
540
+ Sinatra teszteket bármely Rack alapú tesztelő könyvtárral vagy
541
+ keretrendszerrel készíthetsz. Mi a [Rack::Test](http://gitrdoc.com/brynary/rack-test)
542
+ könyvtárat ajánljuk:
543
+
544
+ ```ruby
545
+ require 'my_sinatra_app'
546
+ require 'rack/test'
547
+
548
+ class MyAppTest < Test::Unit::TestCase
549
+ include Rack::Test::Methods
550
+
551
+ def app
552
+ Sinatra::Application
553
+ end
554
+
555
+ def test_my_default
556
+ get '/'
557
+ assert_equal 'Helló Világ!', last_response.body
558
+ end
559
+
560
+ def test_with_params
561
+ get '/meet', :name => 'Frici'
562
+ assert_equal 'Helló Frici!', last_response.body
563
+ end
564
+
565
+ def test_with_rack_env
566
+ get '/', {}, 'HTTP_USER_AGENT' => 'Songbird'
567
+ assert_equal "Songbird-öt használsz!", last_response.body
568
+ end
569
+ end
570
+ ```
571
+
572
+ Megjegyzés: A beépített Sinatra::Test és Sinatra::TestHarness osztályok
573
+ a 0.9.2-es kiadástól kezdve elavultnak számítanak.
574
+
575
+ ## Sinatra::Base - Middleware-ek, könyvtárak és moduláris alkalmazások
576
+
577
+ Az alkalmazást felső szinten építeni megfelelhet mondjuk egy kisebb
578
+ app esetén, ám kifejezetten károsnak bizonyulhat olyan komolyabb,
579
+ újra felhasználható komponensek készítésekor, mint például egy Rack
580
+ middleware, Rails metal, egyszerűbb kiszolgáló komponenssel bíró
581
+ könyvtárak vagy éppen Sinatra kiterjesztések. A felső szintű DSL
582
+ bepiszkítja az Objektum névteret, ráadásul kisalkalmazásokra szabott
583
+ beállításokat feltételez (így például egyetlen alkalmazásfájl,
584
+ `./public`
585
+ és `./views` könyvtár meglétét, naplózást, kivételkezelő oldalt stb.).
586
+ Itt jön a képbe a Sinatra::Base osztály:
587
+
588
+ ```ruby
589
+ require 'sinatra/base'
590
+
591
+ class MyApp < Sinatra::Base
592
+ set :sessions, true
593
+ set :foo, 'bar'
594
+
595
+ get '/' do
596
+ 'Helló Világ!'
597
+ end
598
+ end
599
+ ```
600
+
601
+ A MyApp osztály immár önálló Rack komponensként, mondjuk Rack middleware-ként
602
+ vagy alkalmazásként, esetleg Rails metal-ként is tud működni. Közvetlenül
603
+ használhatod (`use`) vagy futtathatod (`run`) az osztályodat egy rackup
604
+ konfigurációs állományban (`config.ru`), vagy egy szerverkomponenst
605
+ tartalmazó könyvtár vezérlésekor:
606
+
607
+ ```ruby
608
+ MyApp.run! :host => 'localhost', :port => 9090
609
+ ```
610
+
611
+ A Sinatra::Base gyermekosztályaiban elérhető metódusok egyúttal a felső
612
+ szintű DSL-en keresztül is hozzáférhetők. A legtöbb felső szintű
613
+ alkalmazás átalakítható Sinatra::Base alapú komponensekké két lépésben:
614
+
615
+ * A fájlban nem a `sinatra`, hanem a `sinatra/base` osztályt kell
616
+ beimportálni, mert egyébként az összes Sinatra DSL metódus a fő
617
+ névtérbe kerül.
618
+ * Az alkalmazás útvonalait, hibakezelőit, szűrőit és beállításait
619
+ a Sinatra::Base osztály gyermekosztályaiban kell megadni.
620
+
621
+ A `Sinatra::Base` osztály igazából egy üres lap: a legtöbb funkció
622
+ alapból ki van kapcsolva, beleértve a beépített szervert is. A
623
+ beállításokkal és az egyes kapcsolók hatásával az
624
+ [Options and Configuration](http://sinatra.github.com/configuration.html) lap
625
+ foglalkozik.
626
+
627
+ Széljegyzet: A Sinatra felső szintű DSL-je egy egyszerű delegációs
628
+ rendszerre épül. A Sinatra::Application osztály - a Sinatra::Base egy
629
+ speciális osztályaként - fogadja az összes :get, :put, :post,
630
+ :delete, :before, :error, :not_found, :configure és :set üzenetet,
631
+ ami csak a felső szintre beérkezik. Érdemes utánanézned a kódban,
632
+ miképp [kerül be](http://github.com/sinatra/sinatra/blob/master/lib/sinatra/main.rb#L25)
633
+ a [Sinatra::Delegator mixin](http://github.com/sinatra/sinatra/blob/master/lib/sinatra/base.rb#L1064)
634
+ a fő névtérbe.
635
+
636
+ ## Parancssori lehetőségek
637
+
638
+ Sinatra alkalmazásokat közvetlenül futtathatunk:
639
+
640
+ ```
641
+ ruby myapp.rb [-h] [-x] [-e ENVIRONMENT] [-p PORT] [-s HANDLER]
642
+ ```
643
+
644
+ Az alábbi kapcsolókat ismeri fel a rendszer:
645
+
646
+ -h # segítség
647
+ -p # a port beállítása (alapértelmezés szerint ez a 4567-es)
648
+ -e # a környezet beállítása (alapértelmezés szerint ez a development)
649
+ -s # a rack szerver/handler beállítása (alapértelmezetten ez a thin)
650
+ -x # a mutex lock bekapcsolása (alapértelmezetten ki van kapcsolva)
651
+
652
+ ## Fejlesztői változat
653
+
654
+ Ha a Sinatra legfrissebb, fejlesztői változatát szeretnéd használni,
655
+ készíts egy helyi másolatot és indítsd az alkalmazásodat úgy,
656
+ hogy a `sinatra/lib` könyvtár elérhető legyen a
657
+ `LOAD_PATH`-on:
658
+
659
+ ```
660
+ cd myapp
661
+ git clone git://github.com/sinatra/sinatra.git
662
+ ruby -Isinatra/lib myapp.rb
663
+ ```
664
+
665
+ De hozzá is adhatod a <tt>sinatra/lib</tt> könyvtárat a <tt>LOAD_PATH</tt>-hoz
666
+ az alkalmazásodban:
667
+
668
+ ```ruby
669
+ $LOAD_PATH.unshift File.dirname(__FILE__) + '/sinatra/lib'
670
+ require 'rubygems'
671
+ require 'sinatra'
672
+
673
+ get '/about' do
674
+ "A következő változatot futtatom " + Sinatra::VERSION
675
+ end
676
+ ```
677
+
678
+ A Sinatra frissítését később így végezheted el:
679
+
680
+ ```
681
+ cd myproject/sinatra
682
+ git pull
683
+ ```
684
+
685
+ ## További információk
686
+
687
+ * [A projekt weboldala](http://sinatra.github.com/) - Kiegészítő dokumentáció,
688
+ hírek, hasznos linkek
689
+ * [Közreműködés](http://sinatra.github.com/contributing.html) - Hibát találtál?
690
+ Segítségre van szükséged? Foltot küldenél be?
691
+ * [Lighthouse](http://sinatra.lighthouseapp.com) - Hibakövetés és kiadások
692
+ * [Twitter](http://twitter.com/sinatra)
693
+ * [Levelezőlista](http://groups.google.com/group/sinatrarb)
694
+ * [IRC: #sinatra](irc://chat.freenode.net/#sinatra) a http://freenode.net címen