sinatra 1.0 → 1.1.a

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

Potentially problematic release.


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

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