Skip to content
This repository
Browse code

German README: Improve language and bring up to speed with English ve…

…rsion.
  • Loading branch information...
commit b7b43f70b3a8806f414f6ba57e9583bd7fc19a51 1 parent c6d0614
Konstantin Haase authored September 10, 2010

Showing 1 changed file with 248 additions and 146 deletions. Show diff stats Hide diff stats

  1. 394  README.de.rdoc
394  README.de.rdoc
Source Rendered
... ...
@@ -1,6 +1,7 @@
1 1
 = Sinatra
2 2
 
3  
-Sinatra ist eine DSL für die rasche Erstellung von Web Anwendungen in Ruby mit minimalen Aufwand:
  3
+Sinatra ist eine DSL das schnelles Erstellen von Webanwendungen in Ruby mit
  4
+minimalen Aufwand ermöglicht:
4 5
 
5 6
   # myapp.rb
6 7
   require 'sinatra'
@@ -8,17 +9,16 @@ Sinatra ist eine DSL für die rasche Erstellung von Web Anwendungen in Ruby mit
8 9
     'Hallo Welt!'
9 10
   end
10 11
 
11  
-Das gem installieren und starten:
  12
+Eingach via rubygems installieren und starten:
12 13
 
13 14
   gem install sinatra
14 15
   ruby -rubygems myapp.rb
15 16
 
16  
-Aufrufen unter: http://localhost:4567
  17
+Die Seite kann nun unter http://localhost:4567 betrachtet werden.
17 18
 
18 19
 == Routen
19 20
 
20  
-In Sinatra ist eine Route eine HTTP Methode gebunden an ein URL Muster.
21  
-Jede Route besitzt einen Block:
  21
+In Sinatra ist eine Route definiert durch eine HTTP Methode und ein URL Muster. Jeder dieser Routen wird ein Ruby block zugeordnnet.
22 22
 
23 23
   get '/' do
24 24
     .. zeig etwas ..
@@ -36,11 +36,11 @@ Jede Route besitzt einen Block:
36 36
     .. entferne etwas ..
37 37
   end
38 38
 
39  
-Die Routen werden in der Reihenfolge angesprochen, wie sie definiert sind.
40  
-Das erste Route-Muster das mit dem Request übereinstimmt wird ausgeführt.
  39
+Die Routen werden in der Reihenfolge durchlaufen, in der sie definiert sind.
  40
+Das erste Routemuster, das mit dem Request übereinstimmt, wird ausgeführt.
41 41
 
42  
-Die Muster der Routen können über benannte Parameter erreicht werden mit dem
43  
-<tt>params</tt> Hash:
  42
+Die Muster der Routen können benannte Parameter beinhalten, die über den
  43
+<tt>params</tt> Hash zugänglich gemacht werden:
44 44
 
45 45
   get '/hallo/:name' do
46 46
     # passt auf "GET /hallo/foo" und "GET /hallo/bar"
@@ -48,13 +48,13 @@ Die Muster der Routen können über benannte Parameter erreicht werden mit dem
48 48
     "Hallo #{params[:name]}!"
49 49
   end
50 50
 
51  
-Oder auch über benannte Parameter:
  51
+Man kann auf diese auch mit Blockparametern zugreifen:
52 52
 
53 53
   get '/hallo/:name' do |n|
54 54
     "Hallo #{n}!"
55 55
   end
56 56
 
57  
-Routen-Muster können auch mit splat (oder Wildcards) Parametern über das
  57
+Routenmuster können auch mit Splat- oder Wildcardparametern über das
58 58
 <tt>params[:splat]</tt> Array angesprochen werden.
59 59
 
60 60
   get '/sag/*/zu/*' do
@@ -67,56 +67,113 @@ Routen-Muster können auch mit splat (oder Wildcards) Parametern über das
67 67
     params[:splat] # => ["pfad/zu/datei", "xml"]
68 68
   end
69 69
 
70  
-Routen mit Regular Expressions:
  70
+Routen mit regulären Ausdrücken sind auch möglich:
71 71
 
72 72
   get %r{/hallo/([\w]+)} do
73 73
     "Hallo, #{params[:captures].first}!"
74 74
   end
75 75
 
76  
-Oder mit einem Block-Parameter:
  76
+Un auch hier kann man Blockparameter nutzen:
77 77
 
78 78
   get %r{/hallo/([\w]+)} do |c|
79 79
     "Hallo, #{c}!"
80 80
   end
81 81
 
82  
-Routen können eine Vielzahl von zutreffenden Bedingungen haben, möglich wäre
83  
-ein User Agent:
  82
+=== Bedingungen
  83
+
  84
+An Routen können eine Vielzahl von Bedingungen angehängt werden, die erfüllt
  85
+sein müssen, damit der Block ausgeführt wird. möglich wäre etwa eine
  86
+Einschränkung des User Agents:
84 87
 
85 88
   get '/foo', :agent => /Songbird (\d\.\d)[\d\/]*?/ do
86  
-    "Du verwendest Songbird version #{params[:agent][0]}"
  89
+    "Du verwendest Songbird Version #{params[:agent][0]}"
87 90
   end
88 91
 
89 92
   get '/foo' do
90 93
     # passt auf andere Browser
91 94
   end
92 95
 
  96
+Andere mitgelieferte Bedingungen sind +host_name+ und +provides+:
  97
+
  98
+  get '/', :host_name => /^admin\./ do
  99
+    "Adminbereich, Zugriff verweigert!"
  100
+  end
  101
+
  102
+  get '/', :provides => 'html' do
  103
+    haml :index
  104
+  end
  105
+
  106
+  get '/', :provides => ['rss', 'atom', 'xml'] do
  107
+    builder :feed
  108
+  end
  109
+
  110
+Man kann auch relativ einfach eigene Bedingungen hinzufügen:
  111
+
  112
+  set(:probability) { |value| condition { rand <= value } }
  113
+
  114
+  get '/auto_gewinnen', :probability => 0.1 do
  115
+    "Du hast gewonnen!"
  116
+  end
  117
+
  118
+  get '/auto_gewinnen' do
  119
+    "Tut mir leid, verloren."
  120
+  end
  121
+
  122
+=== Rückgabewerte
  123
+
  124
+Durch den Rückgabewert eines Routenblocks wird mindestens der Response Body
  125
+festgelegt, der an den HTTP Client, bzw die nächste Rack Middleware
  126
+weitergegeben wird. Im Normalfall handelt es sich hierbei um einen String, wie
  127
+in den vorrangehenden Beispielen zu sehen. Es werden alledings auch andere
  128
+Werte akzeptiert.
  129
+
  130
+Man kann jedes Object zurückgeben, bei dem es sich entweder um einenen validen
  131
+Rack-Rückgabewert, einen validen Rack-Body oder einen HTTP Status Code
  132
+handelt:
  133
+
  134
+* Ein Array mit drei Elementen: <tt>[Status (Fixnum), Headers (Hash), Response Body (hört auf #each)]</tt>
  135
+* Ein Array mit zwei Elementen: <tt>[Status (Fixnum), Response Body (hört auf #each)]</tt>
  136
+* Ein Objekt, das auf <tt>#each</tt> hört und den an diese Methode übergebenen Block nur mit Strings als Übergabewerte aufruft.
  137
+* Ein Fixnum, das den Status Code festlegt.
  138
+
  139
+Damit lässt sich relativ einfach Streaming implementieren:
  140
+
  141
+    class Stream
  142
+      def each
  143
+        100.times { |i| yield "#{i}\n" }
  144
+      end
  145
+    end
  146
+
  147
+    get('/') { Stream.new }
  148
+
93 149
 == Statische Dateien
94 150
 
95  
-Statische Dateien werden vom Ordner <tt>./public</tt> geliefert. Es ist
96  
-möglich einen anderen Ort zu definieren, wenn die <tt>:public</tt> Option
97  
-gesetzt wird:
  151
+Statische Dateien werden aus dem <tt>./public</tt> Ordner ausgeliefert. Es ist
  152
+möglich einen anderen Ort zu definieren, indem man die <tt>:public</tt> Option
  153
+setzt:
98 154
 
99 155
   set :public, File.dirname(__FILE__) + '/static'
100 156
 
101  
-Anmerkung: Der public Ordner ist nicht über die URL aufrufbar. Die Datei
102  
-<tt>./public/css/style.css</tt> wird gefunden unter
103  
-<tt>http://example.com/css/style.css</tt>.
  157
+Zu beachten ist, dass der Ordnername public nicht Teil der URL ist. Die Datei
  158
+<tt>./public/css/style.css</tt> ist unter
  159
+<tt>http://example.com/css/style.css</tt> zu finden.
104 160
 
105  
-== Ansichten / Templates
  161
+== Views / Templates
106 162
 
107  
-Es wird davon ausgegangen das Templates sich im Ordner <tt>./views</tt>
108  
-befinden. Um einen anderen Ordner zu definieren:
  163
+Standardmäßig wird davon ausgegangen, dass sich Templates sich im
  164
+<tt>./views</tt> Ordner befinden. Man kann jedoch einen anderen Ordner
  165
+festlegen:
109 166
 
110 167
   set :views, File.dirname(__FILE__) + '/templates'
111 168
 
112  
-Eine wichtige Sache die man sich merken sollte, ist das man immer um auf
113  
-Templates zu verweisen Symbole verwenden sollte, auch dann wenn sich ein
114  
-Template in einen Unterordner befindet (in diesen Fall <tt>:'subdir/template'</tt>).
115  
-Rendering-Methoden rendern jede Zeichenkette direkt.
  169
+Eine wichtige Sache, die man sich hierbei merken sollte, ist das man immer mit
  170
+Symbols auf Templates verweisen sollte, auch wenn sich ein Template in einen
  171
+Unterordner befindet (in diesen Fall <tt>:'subdir/template'</tt>).
  172
+Renderingmethoden rendern jeden String direkt.
116 173
 
117 174
 === Haml Templates
118 175
 
119  
-Die haml gem/Bibliothek wird benötigt um HAML Templates rendern zu können:
  176
+Das haml gem wird benötigt um HAML-Templates rendern zu können:
120 177
 
121 178
   ## haml muss eingebunden werden
122 179
   require 'haml'
@@ -125,17 +182,17 @@ Die haml gem/Bibliothek wird benötigt um HAML Templates rendern zu können:
125 182
     haml :index
126 183
   end
127 184
 
128  
-gerendert wird <tt>./views/index.haml</tt>.
  185
+Dieser Code rendert <tt>./views/index.haml</tt>.
129 186
 
130 187
 {Hamls Optionen}[http://haml-lang.com/docs/yardoc/file.HAML_REFERENCE.html#options]
131  
-können global durch die Sinatra Konfiguration gesetzt werden,
  188
+können global durch die Sinatrakonfiguration gesetzt werden,
132 189
 siehe {Optionen und Konfiguration}[http://www.sinatrarb.com/configuration.html],
133 190
 und individuell überschrieben werden.
134 191
 
135  
-  set :haml, {:format => :html5 } # Standard Haml Format ist :xhtml
  192
+  set :haml, :format => :html5 # Standard Haml-Format ist :xhtml
136 193
 
137 194
   get '/' do
138  
-    haml :index, :haml_options => {:format => :html4 } # überschrieben
  195
+    haml :index, :format => :html4 # überschrieben
139 196
   end
140 197
 
141 198
 
@@ -148,11 +205,11 @@ und individuell überschrieben werden.
148 205
     erb :index
149 206
   end
150 207
 
151  
-gerendert wird <tt>./views/index.erb</tt>
  208
+Dieser Code rendert <tt>./views/index.erb</tt>.
152 209
 
153 210
 === Erubis
154 211
 
155  
-Die erubis gem/Bibliothek wird benötigt um erubis Templates rendern zu können:
  212
+Das erubis gem wird benötigt um Erubis-Templates rendern zu können:
156 213
 
157 214
   ## erbubis muss eingebunden werden
158 215
   require 'erubis'
@@ -161,11 +218,11 @@ Die erubis gem/Bibliothek wird benötigt um erubis Templates rendern zu können:
161 218
     erubis :index
162 219
   end
163 220
 
164  
-gerendert wird <tt>./views/index.erubis</tt>
  221
+Dieser Code rendert <tt>./views/index.erubis</tt>.
165 222
 
166 223
 === Builder Templates
167 224
 
168  
-Die buidler gem/Bibliothek wird benötigt um builder Templates rendern zu können:
  225
+Das buidler gem wird benötigt um Builder-Templates rendern zu können:
169 226
 
170 227
   ## builder muss eingebunden werden
171 228
   require 'builder'
@@ -175,13 +232,13 @@ Die buidler gem/Bibliothek wird benötigt um builder Templates rendern zu könne
175 232
     builder :index
176 233
   end
177 234
 
178  
-gerendert wird <tt>./views/index.builder</tt>.
  235
+Dieser Code rendert <tt>./views/index.builder</tt>.
179 236
 
180 237
 === Sass Templates
181 238
 
182  
-Die sass gem/Bibliothek wird benötigt um sass Templates rendern zu können:
  239
+Das haml gem wird benötigt um SASS-Templates rendern zu können:
183 240
 
184  
-  ## haml order sass müssen eingebunden werden
  241
+  ## sass muss eingebunden werden
185 242
   require 'sass'
186 243
 
187 244
   get '/stylesheet.css' do
@@ -189,53 +246,92 @@ Die sass gem/Bibliothek wird benötigt um sass Templates rendern zu können:
189 246
     sass :stylesheet
190 247
   end
191 248
 
192  
-gerendert wird <tt>./views/stylesheet.sass</tt>.
  249
+Dieser Code rendert <tt>./views/stylesheet.sass</tt>.
193 250
 
194 251
 {Sass Optionen}[http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#options]
195  
-können global durch die Sinatra Konfiguration gesetzt werden,
  252
+können global durch die Sinatra-Konfiguration gesetzt werden,
196 253
 siehe {Optionen und Konfiguration}[http://www.sinatrarb.com/configuration.html],
197 254
 und individuell überschrieben werden.
198 255
 
199  
-  set :sass, {:style => :compact } # Standard Sass style ist :nested
  256
+  set :sass, :style => :compact # Standard Sass-Style ist :nested
200 257
 
201 258
   get '/stylesheet.css' do
202 259
     content_type 'text/css', :charset => 'utf-8'
203 260
     sass :stylesheet, :style => :expanded # überschrieben
204 261
   end
205 262
 
  263
+=== Scss Templates
  264
+
  265
+Das haml gem wird benötigt um SCSS-Templates rendern zu können:
  266
+
  267
+  ## sass muss eingebunden werden
  268
+  require 'sass'
  269
+
  270
+  get '/stylesheet.css' do
  271
+    content_type 'text/css', :charset => 'utf-8'
  272
+    scss :stylesheet
  273
+  end
  274
+
  275
+Dieser Code rendert <tt>./views/stylesheet.scss</tt>.
  276
+
  277
+{Scss Optionen}[http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#options]
  278
+können global durch die Sinatra-Konfiguration gesetzt werden,
  279
+siehe {Optionen und Konfiguration}[http://www.sinatrarb.com/configuration.html],
  280
+und individuell überschrieben werden.
  281
+
  282
+  set :scss, :style => :compact # Standard Scss-Style ist :nested
  283
+
  284
+  get '/stylesheet.css' do
  285
+    content_type 'text/css', :charset => 'utf-8'
  286
+    scss :stylesheet, :style => :expanded # überschrieben
  287
+  end
  288
+
  289
+=== Less Templates
  290
+
  291
+Das less gem wird benötigt um Less-Templates rendern zu können:
  292
+
  293
+  ## less muss eingebunden werden
  294
+  require 'less'
  295
+
  296
+  get '/stylesheet.css' do
  297
+    content_type 'text/css', :charset => 'utf-8'
  298
+    less :stylesheet
  299
+  end
  300
+
  301
+Dieser Code rendert <tt>./views/stylesheet.less</tt>.
  302
+
206 303
 === Inline Templates
207 304
 
208 305
   get '/' do
209 306
     haml '%div.title Hallo Welt'
210 307
   end
211 308
 
212  
-Rendert die inline Template Zeichenkette.
  309
+Rendert den Inline Template String.
213 310
 
214 311
 === Auf Variablen in Templates zugreifen
215 312
 
216  
-Templates werden im selben Kontext ausgewertet wie Routen. Instanz Variablen in
217  
-Routen sind auch direkt im Template ansprechbar:
  313
+Templates werden im selben Kontext ausgeführt wie Routen. Instanzvariablen in
  314
+Routen sind auch direkt im Template verfügbar:
218 315
 
219 316
   get '/:id' do
220 317
     @foo = Foo.find(params[:id])
221 318
     haml '%h1= @foo.name'
222 319
   end
223 320
 
224  
-Oder durch ein explizites Hash von lokalen Variablen:
  321
+Oder durch einen expliziten Hash von lokalen Variablen:
225 322
 
226 323
   get '/:id' do
227 324
     foo = Foo.find(params[:id])
228 325
     haml '%h1= foo.name', :locals => { :foo => foo }
229 326
   end
230 327
 
231  
-Wird typischerweise bei Verwendung von Subtemplates (partials) in anderen
  328
+Dies wird typischerweise bei Verwendung von Subtemplates (partials) in anderen
232 329
 Templates eingesetzt.
233 330
 
234  
-=== Inline Templates
  331
+=== Inline-Templates
235 332
 
236  
-Templates können am Ende der Datei definiert werden:
  333
+Templates können auch am Ende der Datei definiert werden:
237 334
 
238  
-  require 'rubygems'
239 335
   require 'sinatra'
240 336
 
241 337
   get '/' do
@@ -251,13 +347,14 @@ Templates können am Ende der Datei definiert werden:
251 347
   @@ index
252 348
   %div.title Hallo Welt!!!!!
253 349
 
254  
-Anmerkung: Inline Templates die in der Quelldatei definiert sind die Sinatra
255  
-braucht werden automatisch geladen. Um andere Inline Templates in anderen
256  
-Quelldateien aufzurufen muss `enable :inline_templates` explizit verwendet werden.
  350
+Anmerkung: Inline-Templates die in der Datei definiert sind die <tt>require
  351
+'sinatra'</tt> aufruft werden automatisch geladen. Um andere Inline-Templates
  352
+in anderen Dateien aufzurufen muss <tt>enable :inline_templates</tt> explizit
  353
+verwendet werden.
257 354
 
258 355
 === Benannte Templates
259 356
 
260  
-Templates können auch mit der top-level <tt>template</tt> Methode definiert
  357
+Templates können auch mit der Top-Level <tt>template</tt>-Methode definiert
261 358
 werden:
262 359
 
263 360
   template :layout do
@@ -281,8 +378,8 @@ verwendet. Durch <tt>:layout => false</tt> kann das Ausführen verhindert werden
281 378
 
282 379
 == Helfer
283 380
 
284  
-Am top-level werden durch die <tt>helpers</tt> Methode, Helfer Methoden
285  
-definiert bevor die Routen und Templates definiert werden:
  381
+Durch die Top-Level <tt>helpers</tt>-Methode, Helfer-Methoden
  382
+definiert, die in Routen und Templates verwendet werden können:
286 383
 
287 384
   helpers do
288 385
     def bar(name)
@@ -296,9 +393,9 @@ definiert bevor die Routen und Templates definiert werden:
296 393
 
297 394
 == Filter
298 395
 
299  
-"Before" Filter werden immer vor jedem Request ausgeführt. Der Request kann so
300  
-Request und Antwort ändern. Gesetzte Instanz Variablen in Filtern können in
301  
-Routen und Templates verwendet werden:
  396
+Before-Filter werden immer vor jedem Request in dem selben Kontext wie danach
  397
+die Routen ausgeführt. So kann man etwa Request und Antwort ändern. Gesetzte
  398
+Instanzvariablen in Filtern können in Routen und Templates verwendet werden:
302 399
 
303 400
   before do
304 401
     @note = 'Hi!'
@@ -310,46 +407,56 @@ Routen und Templates verwendet werden:
310 407
     params[:splat] #=> 'bar/baz'
311 408
   end
312 409
 
313  
-"After" Filter werden nach jedem Request ausgeführt, können auch Request und
314  
-Antwort ändern. Gesetzte Instanz Variablen in before Filtern können in after Filter
315  
-verwendet werden:
  410
+After-Filter werden nach jedem Request im selben Kontext ausgeführt, und
  411
+können ebenfalls Request und Antwort ändern. In Before-Filtern gesetzte
  412
+Instanzvariablen können in After-Filterm verwendet werden:
316 413
 
317 414
   after do
318 415
     puts response.status
319 416
   end
320 417
 
  418
+Filter können optional auch mit einem Pattern ausgestattet werden, welches auf den Request-Pfad passen müssen, damit der Filter ausgeführt wird:
  419
+
  420
+  before '/protected/*' do
  421
+    authenticate!
  422
+  end
  423
+
  424
+  after '/create/:slug' do |slug|
  425
+    session[:last_slug] = slug
  426
+  end
  427
+
321 428
 == Anhalten
322 429
 
323 430
 Zum sofortigen stoppen eines Request in einen Filter oder einer Route:
324 431
 
325 432
   halt
326 433
 
327  
-Der Status kann beim stoppen auch angegeben werden ...
  434
+Der Status kann beim stoppen auch angegeben werden:
328 435
 
329 436
   halt 410
330 437
 
331  
-Oder den Rumpf ...
  438
+Oder auch den Response-Body:
332 439
 
333  
-  halt 'Hier steht der Rumpf'
  440
+  halt 'Hier steht der Body'
334 441
 
335  
-Oder beides ...
  442
+Oder beides:
336 443
 
337 444
   halt 401, 'verschwinde!'
338 445
 
339  
-Mit Headers ...
  446
+Sogar mit Headers:
340 447
 
341 448
   halt 402, {'Content-Type' => 'text/plain'}, 'Rache'
342 449
 
343 450
 == Weiterspringen
344 451
 
345  
-Eine Route kann mittels <tt>pass</tt> zu der nächsten treffenden Route springen:
  452
+Eine Route kann mittels <tt>pass</tt> zu der nächsten passenden Route springen:
346 453
 
347  
-  get '/rate/:wer' do
348  
-    pass unless params[:er] == 'Frank'
  454
+  get '/raten/:wer' do
  455
+    pass unless params[:wer] == 'Frank'
349 456
     'Du hast mich!'
350 457
   end
351 458
 
352  
-  get '/rate/*' do
  459
+  get '/raten/*' do
353 460
     'Du hast mich verfehlt!'
354 461
   end
355 462
 
@@ -359,46 +466,45 @@ gefunden wird.
359 466
 
360 467
 == Konfiguration
361 468
 
362  
-Lauft einmal beim starten in jeder Umgebung:
  469
+Wird einmal beim Starten in jedweder Umgebung ausgeführt:
363 470
 
364 471
   configure do
365 472
     ...
366 473
   end
367 474
 
368  
-Lauft nur wenn die Umgebung (RACK_ENV environment variable) auf <tt>:production</tt>
369  
-gesetzt ist:
  475
+Läuft nurm wenn die Umgebung (RACK_ENV Umgebungsvariable) auf
  476
+<tt>:production</tt> gesetzt ist:
370 477
 
371 478
   configure :production do
372 479
     ...
373 480
   end
374 481
 
375  
-Lauft nur wenn die Umgebung auf <tt>:production</tt> oder auf <tt>:test</tt>
  482
+Läuft nur wenn die Umgebung auf <tt>:production</tt> oder auf <tt>:test</tt>
376 483
 gesetzt ist:
377 484
 
378 485
   configure :production, :test do
379 486
     ...
380 487
   end
381 488
 
382  
-== Fehler-Behandlung
  489
+== Fehlerbehandlung
383 490
 
384  
-Error Handler laufen im selben Kontext wie Routen und before Filter, was bedeutet
385  
-es können alle Goodies wie <tt>haml</tt>, <tt>erb</tt>, <tt>halt</tt>, etc.
386  
-verwendet werden.
  491
+Error Handler laufen im selben Kontext wie Routen und Filter, was bedeutet,
  492
+dass alle Goodies wie <tt>haml</tt>, <tt>erb</tt>, <tt>halt</tt>, etc.
  493
+verwendet werden können.
387 494
 
388 495
 === Nicht gefunden
389 496
 
390  
-Wenn eine <tt>Sinatra::NotFound</tt> Exception geworfen wird oder ein Statuscode
391  
-ist 404, wird der <tt>not_found</tt> Handler ausgeführt:
  497
+Wenn eine <tt>Sinatra::NotFound</tt> Exception geworfen wird oder der Statuscode 404ist, wird der <tt>not_found</tt> Handler ausgeführt:
392 498
 
393 499
   not_found do
394  
-    'Das ist nirgendwo'
  500
+    'Kann nirgendwo gefunden werden.'
395 501
   end
396 502
 
397 503
 === Fehler
398 504
 
399 505
 Der +error+ Handler wird immer ausgeführt wenn eine Exception in einem Routenblock
400  
-oder in einen Filter geworfen wurde. Das Exception Objekt kann über die
401  
-<tt>sinatra.error</tt> Rack Variable angesprochen werden:
  506
+oder in einen Filter geworfen wurde. Doe Exception kann über die
  507
+<tt>sinatra.error</tt> Rack-Variable angesprochen werden:
402 508
 
403 509
   error do
404 510
     'Entschuldige es gab einen hässlichen Fehler - ' + env['sinatra.error'].name
@@ -420,7 +526,7 @@ Bekommt man dieses:
420 526
 
421 527
   Was passiert ist... etwas schlechtes
422 528
 
423  
-Alternativ kann ein Fehler Handler vor dem Status Code definiert werden:
  529
+Alternativ kann ein Error Handler auch für Statuscode definiert werden:
424 530
 
425 531
   error 403 do
426 532
     'Zugriff verboten'
@@ -430,37 +536,36 @@ Alternativ kann ein Fehler Handler vor dem Status Code definiert werden:
430 536
     403
431 537
   end
432 538
 
433  
-Oder ein Bereich:
  539
+Oder ein Statuscode-Bereich:
434 540
 
435 541
   error 400..510 do
436 542
     'Boom'
437 543
   end
438 544
 
439  
-Sinatra verwendet verschiedene <tt>not_found</tt> und <tt>error</tt>
  545
+Sinatra setzt verschiedene <tt>not_found</tt> und <tt>error</tt>
440 546
 Handler in der Development Umgebung.
441 547
 
442  
-== Mime Typen
  548
+== Mime-Types
443 549
 
444  
-Wenn mit <tt>send_file</tt> oder statische Dateien verwendet wird, kann es
445  
-sein das Sinatra den Mime-Typ nicht versteht. Registriert wird mit +mime_type+
446  
-per Datei Endung:
  550
+Wenn <tt>send_file</tt> oder statische Dateien verwendet werden, kann es
  551
+vorkommen, dass Sinatra den Mime-Typ nicht kennt. Registriert wird dieser mit
  552
++mime_type+ per Dateiendung:
447 553
 
448 554
   mime_type :foo, 'text/foo'
449 555
 
450  
-Es kann auch der +content_type+ Helfer verwendet werden:
  556
+Es kann aber auch der +content_type+ Helfer verwendet werden:
451 557
 
452 558
   content_type :foo
453 559
 
454 560
 == Rack Middleware
455 561
 
456  
-Sinatra baut auf Rack[http://rack.rubyforge.org/], einen minimalen Standard
457  
-Interface für Ruby Web Frameworks. Eines der am meisten interessantesten
458  
-Fähigkeiten für Entwickler ist der Support von "Middleware" Komponenten die
459  
-zwischen dem Server und der Anwendung überwacht laufen und/oder den HTTP
460  
-Request/Antwort manipulieren können.
  562
+Sinatra baut auf Rack[http://rack.rubyforge.org/], einen minimales Standardinterface für Ruby Webframeworks. Eines der ainteressantesten
  563
+Features für Entwickler ist der Support von Middleware, die
  564
+zwischen den Server und die Anwendung geschaltet wird und so HTTP
  565
+Request und/order Antwort überwachen und/oder manipulieren kann.
461 566
 
462  
-Sinatra macht das bauen von Rack middleware pipelines sicher via der top-level
463  
-+use+ Methode:
  567
+Sinatra macht das erstellen von Middleware-Verkettungen mit der Top-Level
  568
+Methode +use+ zu einem Kinderspiel:
464 569
 
465 570
   require 'sinatra'
466 571
   require 'my_custom_middleware'
@@ -472,24 +577,24 @@ Sinatra macht das bauen von Rack middleware pipelines sicher via der top-level
472 577
     'Hallo Welt'
473 578
   end
474 579
 
475  
-Die Semantik von +use+ sind identisch mit den Definierten von
  580
+Die Semantik von +use+ mit identisch mit der gleichnamigen Methode der
476 581
 Rack::Builder[http://rack.rubyforge.org/doc/classes/Rack/Builder.html] DSL
477  
-(meistens verwendet von rackup Dateien). Als Beispiel, die +use+ Methode
478  
-akzeptiert mehrere/verschiedene Argumente genauso wie Blöcke:
  582
+(meist verwendet in Rackup-Dateien). Ein Beispiel dafür ist, dass die
  583
++use+-Methode mehrere/verschiedene Argumente und auch Blöcke entgegen nimmt:
479 584
 
480 585
   use Rack::Auth::Basic do |username, password|
481 586
     username == 'admin' && password == 'secret'
482 587
   end
483 588
 
484  
-Rack hat eine Vielzahl von Standard Middleware Komponenten für Logging, Debugging,
485  
-URL Routing, Authentifizierung und Session Verarbeitung.
486  
-Sinatra verwendet viele von diesen Komponenten automatisch passierend auf der
487  
-Konfiguration, so muss man nicht +use+ explizit verwenden.
  589
+Rack bietet eine Vielzahl von Standard Middleware für Logging, Debugging,
  590
+URL-Routing, Authentifizierung und Session-Verarbeitung.
  591
+Sinatra verwendet viele von diesen Komponenten automatisch, abhängig von der
  592
+Konfiguration, so muss man häufig +use+ nicht explizit verwenden.
488 593
 
489 594
 == Testen
490 595
 
491  
-Sinatra Tests können mit dem Rack-basierten Test Framework geschrieben werden.
492  
-{Rack::Test}[http://gitrdoc.com/brynary/rack-test] wird empfohlen:
  596
+Sinatra Tests können mit jedem auf Rack aufbauendem Test Framework geschrieben
  597
+werden. {Rack::Test}[http://gitrdoc.com/brynary/rack-test] wird empfohlen:
493 598
 
494 599
   require 'my_sinatra_app'
495 600
   require 'rack/test'
@@ -518,17 +623,16 @@ Sinatra Tests können mit dem Rack-basierten Test Framework geschrieben werden.
518 623
   end
519 624
 
520 625
 Anmerkung: Das eingebaute Sinatra::Test Modul und die Sinatra::TestHarness
521  
-Klasse werden nach Version 0.9.2 nicht mehr unterstützt.
  626
+Klasse werden seit Version 0.9.2 nicht mehr unterstützt.
522 627
 
523 628
 == Sinatra::Base - Middleware, Bibliotheken, und modulare Anwendungen
524 629
 
525  
-Die Definition einer Anwendung vom top-level weg funktioniert gut für
526  
-Micro-Anwendungen hat aber Nachteile wenn man wiederverwendbare Komponenten
527  
-wie Rack Middleware, Rails metal, einfache Bibliotheken mit Server Komponenten
  630
+Das Definitieren einer Top-Level Anwendung  funktioniert gut für
  631
+Microanwendungen, hat aber Nachteile wenn man wiederverwendbare Komponenten
  632
+wie Middleware, Rails Metal, einfache Bibliotheken mit Server Komponenten
528 633
 oder auch Sinatra Erweiterungen bauen will.
529  
-Das top-level DSL belastet den Objekt-Namespace und setzt einen Style einer
530  
-Micro-Anwendung voraus (ein einzelne Anwendungs-Datei, ./public und ./views
531  
-Ordner, Logging, Exception Detail Seite, etc). Genau hier kommt Sinatra::Base
  634
+Die Top-Level DSL belastet den Objekt-Namespace und setzt einen Microanwendungsstil voraus (ein einzelne Anwendungsdatei, ./public und ./views
  635
+Ordner, Logging, Exception-Detail-Seite, usw). Genau hier kommt Sinatra::Base
532 636
 in das Spiel:
533 637
 
534 638
   require 'sinatra/base'
@@ -542,39 +646,37 @@ in das Spiel:
542 646
     end
543 647
   end
544 648
 
545  
-Die MyApp Klasse ist eine unabhängige Rack Komponente die als Rack Middleware,
546  
-Rack Anwendung oder als Rails metal verwendet werden kann.
547  
-Verwendet wird sie mit +use+ oder +run+ von einer rackup +config.ru+ Datei oder
548  
-als Server Komponente als Bibliothek:
  649
+Die MyApp-Klasse ist eine unabhängige Rack-Komponente die als Middleware,
  650
+Endpunkt oder via Rails Metal verwendet werden kann. Verwendet wird sie durch
  651
++use+ oder +run+ von einer Rackup +config.ru+ Datei oder als Serverkomponente
  652
+einer Bibliothek:
549 653
 
550 654
    MyApp.run! :host => 'localhost', :port => 9090
551 655
 
552  
-Die Methoden von der Sinatra::Base Subklasse sind genau die selben wie die
553  
-über die top-level DSL möglichen. Die meisten top-level Anwendungen können zu
554  
-Sinatra::Base Komponenten mit 2 Veränderungen konvertiert werden:
  656
+Die Methoden der Sinatra::Base-Subklasse sind genau die selben wie die
  657
+der Top-Level DSL. Die meisten Top-Level Anwendungen können mit nur zwei Veränderungen zu Sinatra::Base-Komponenten konvertiert werden:
555 658
 
556  
-* Die Datei sollte +sinatra/base+ und nicht aus +sinatra+; importieren
557  
-  ansonsten werden alle von Sinatra's DSL Methoden im Namespace importiert.
558  
-* Alle Anwendungs Routen, Error Handler, Filter und Optionen in eine SubKlasse
559  
-  von Sinatra::Base.
  659
+* Die Datei sollte <tt>require 'sinatra/base'</tt> anstelle von
  660
+  <tt>require 'sinatra/base'</tt> aufrufen, ansonsten werden alle von
  661
+  Sinatra's DSL Methoden in den Top-Level- Namespace importiert.
  662
+* Alle Routen, Error Handler, Filter und Optionen der Applikation müssen in
  663
+  einer Subklass von Sinatra::Base definiert werden.
560 664
 
561  
-+Sinatra::Base+ ist ein leeres Blatt. Die meisten Optionen sind per Standard
562  
-deaktiviert, das betrifft auch dem eingebauten Server. Siehe {Optionen und Konfiguration}[http://sinatra.github.com/configuration.html] für Details an möglichen Optionen.
  665
++Sinatra::Base+ ist ein unbeschriebense Blatt. Die meisten Optionen sind per default deaktiviert, das betrifft auch den eingebauten Server. Siehe {Optionen und Konfiguration}[http://sinatra.github.com/configuration.html] für Details über möglichen Optionen.
563 666
 
564  
-SIDEBAR: Sinatras top-level DSL ist implementiert als einfaches Delegations
565  
-System. Die +Sinatra::Application+ Klasse -- ein paar spezielle SubKlassen von
566  
-Sinatra::Base -- enthält alle :get, :put, :post, :delete, :before,
567  
-:error, :not_found, :configure und :set Meldungen gesendet durch den top-level.
568  
-Schaue am besten im Code nach: hier im {Sinatra::Delegator mixin}[http://github.com/sinatra/sinatra/blob/master/lib/sinatra/base.rb#L1064]
569  
- {inkludieren im Haupt-Namespace}[http://github.com/sinatra/sinatra/blob/master/lib/sinatra/main.rb#L25].
  667
+SIDEBAR: Sinatras Top-Level DSL-Methoden sind als einfache Delegationen
  668
+implementiert. Die Sinatra::Application-Klasse -- eine spezielle Subklasse von
  669
+Sinatra::Base -- erhält alle :get, :put, :post, :delete, :before, :error,
  670
+:not_found, :configure und :set Meldungen die vom Top-Level aus gesendet
  671
+werden. Schau am besten im Code nach: Hier ist {Sinatra::Delegator mixin}[http://github.com/sinatra/sinatra/blob/master/lib/sinatra/base.rb#L1064] definiert und wird in den {globalen Namespace eingebunden}[http://github.com/sinatra/sinatra/blob/master/lib/sinatra/main.rb#L25].
570 672
 
571 673
 == Kommandozeile
572 674
 
573  
-Sinatra Anwendungen können gestartet werden:
  675
+Sinatra Anwendungen können direkt gestartet werden:
574 676
 
575 677
   ruby myapp.rb [-h] [-x] [-e ENVIRONMENT] [-p PORT] [-h HOST] [-s HANDLER]
576 678
 
577  
-Optionen sind:
  679
+Die Optionen sind:
578 680
 
579 681
   -h # Hilfe
580 682
   -p # Den Port setzen (Standard ist 4567)
@@ -583,17 +685,17 @@ Optionen sind:
583 685
   -s # rack server/handler setzen (Standard ist thin)
584 686
   -x # mutex lock einschalten (Standard ist off)
585 687
 
586  
-== Am neuesten Stand (The Bleeding Edge)
  688
+== Der neueste Stand (The Bleeding Edge)
587 689
 
588  
-Um auf den neuesten Stand von Sinatras Code zu sein, kann ein lokaler Clone
  690
+Um auf den neuesten Stand von Sinatras Code zu sein, kann eine lokale Kopie
589 691
 angelegt werden. Gestartet wird in der Anwendung mit dem <tt>sinatra/lib</tt>
590  
-Ordner und dem <tt>LOAD_PATH</tt>:
  692
+Ordner im <tt>LOAD_PATH</tt>:
591 693
 
592 694
   cd myapp
593 695
   git clone git://github.com/sinatra/sinatra.git
594 696
   ruby -Isinatra/lib myapp.rb
595 697
 
596  
-Alternativ kann <tt>sinatra/lib</tt> Ordner zum <tt>LOAD_PATH</tt> in
  698
+Alternativ kann der <tt>sinatra/lib</tt> Ordner zum <tt>LOAD_PATH</tt> in
597 699
 der Anwendung hinzugefügt werden:
598 700
 
599 701
   $LOAD_PATH.unshift File.dirname(__FILE__) + '/sinatra/lib'
@@ -604,7 +706,7 @@ der Anwendung hinzugefügt werden:
604 706
     "Ich laufe mit Version " + Sinatra::VERSION
605 707
   end
606 708
 
607  
-Um Sinatra Code in Zukunft zu aktualisieren:
  709
+Um Sinatra Code in der Zukunft zu aktualisieren:
608 710
 
609 711
   cd myproject/sinatra
610 712
   git pull
@@ -613,8 +715,8 @@ Um Sinatra Code in Zukunft zu aktualisieren:
613 715
 
614 716
 * {Projekt Website}[http://sinatra.github.com/] - Ergänzende Dokumentation,
615 717
   News und Links zu anderen Ressourcen.
616  
-* {helfen}[http://sinatra.github.com/contributing.html] - Einen Fehler gefunden? Brauchst du Hilfe? Hast du einen Patch?
617  
-* {Issue tracker}[http://github.com/sinatra/sinatra/issues]
  718
+* {Hilfe beisteuern}[http://sinatra.github.com/contributing.html] - Einen Fehler gefunden? Brauchst du Hilfe? Hast du einen Patch?
  719
+* {Issue Tracker}[http://github.com/sinatra/sinatra/issues]
618 720
 * {Twitter}[http://twitter.com/sinatra]
619  
-* {Mailing List}[http://groups.google.com/group/sinatrarb]
  721
+* {Mailingliste}[http://groups.google.com/group/sinatrarb]
620 722
 * {IRC: #sinatra}[irc://chat.freenode.net/#sinatra] auf http://freenode.net

0 notes on commit b7b43f7

Please sign in to comment.
Something went wrong with that request. Please try again.