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