sinatra 1.3.0.c → 1.3.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 CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  * Added support for HTTP PATCH requests. (Konstantin Haase)
4
4
 
5
+ * Support for Creole templates, Creole is a standardized wiki markup,
6
+ supported by many wiki implementations. (Konstanin Haase)
7
+
8
+ * The `erubis` method has been deprecated. If Erubis is available, Sinatra
9
+ will automatically use it for rendering ERB templates. `require 'erb'`
10
+ explicitly to prevent that behavior. (Magnus Holm, Ryan Tomayko, Konstantin
11
+ Haase)
12
+
5
13
  * Set up `Rack::Logger` or `Rack::NullLogger` depending on whether logging
6
14
  was enabled or not. Also, expose that logger with the `logger` helper
7
15
  method. (Konstantin Haase)
@@ -18,6 +26,30 @@
18
26
  * Added `request.accept?` and `request.preferred_type` to ease dealing with
19
27
  `Accept` headers. (Konstantin Haase)
20
28
 
29
+ = 1.2.4 / 2011-04-30
30
+
31
+ * Sinatra::Application (classic style) does not use a session secret in
32
+ development mode, so sessions are not invalidated after every request when
33
+ using Shotgun. (Konstantin Haase)
34
+
35
+ * The request object was shared between multiple Sinatra instances in the
36
+ same middleware chain. This caused issues if any non-sinatra routing
37
+ happend in-between two of those instances, or running a request twice
38
+ against an application (described in the README). The caching was reverted.
39
+ See GH#239 and GH#256 for more infos. (Konstantin Haase)
40
+
41
+ * Fixes issues where the top level DSL was interfering with method_missing
42
+ proxies. This issue surfaced when Rails 3 was used with older Sass versions
43
+ and Sinatra >= 1.2.0. (Konstantin Haase)
44
+
45
+ * Sinatra::Delegator.delegate is now able to delegate any method names, even
46
+ those containing special characters. This allows better integration into
47
+ other programming languages on Rubinius (probably on the JVM, too), like
48
+ Fancy. (Konstantin Haase)
49
+
50
+ * Remove HEAD request logic and let Rack::Head handle it instead. (Paolo
51
+ "Nusco" Perrotta)
52
+
21
53
  = 1.2.3 / 2011-04-13
22
54
 
23
55
  * This release is compatible with Tilt 1.3, it will still work with Tilt 1.2.2,
data/Gemfile CHANGED
@@ -17,7 +17,7 @@ gem 'rack-test', '>= 0.5.6'
17
17
 
18
18
  # Allows stuff like `tilt=1.2.2 bundle install` or `tilt=master ...`.
19
19
  # Used by the CI.
20
- tilt = ENV['tilt'].dup || 'stable'
20
+ tilt = (ENV['tilt'] || 'stable').dup
21
21
  tilt.sub! 'tilt-', ''
22
22
  if tilt != 'stable'
23
23
  tilt = {:git => TILT_REPO, :branch => tilt} unless tilt =~ /(\d+\.)+\d+/
@@ -25,6 +25,7 @@ if tilt != 'stable'
25
25
  end
26
26
 
27
27
  gem 'haml', '>= 3.0', :group => 'haml'
28
+ gem 'sass', :group => 'sass'
28
29
  gem 'builder', :group => 'builder'
29
30
  gem 'erubis', :group => 'erubis'
30
31
  gem 'less', :group => 'less'
@@ -34,9 +35,14 @@ gem 'slim', :group => 'slim'
34
35
  gem 'RedCloth', :group => 'redcloth'
35
36
  gem 'coffee-script', '>= 2.0', :group => 'coffee-script'
36
37
  gem 'rdoc', :group => 'rdoc'
38
+ gem 'kramdown', :group => 'kramdown'
39
+ gem 'maruku', :group => 'maruku'
40
+ gem 'creole', :group => 'creole'
37
41
 
38
42
  platforms :ruby do
39
43
  gem 'rdiscount', :group => 'rdiscount'
44
+ ## bluecloth is broken
45
+ #gem 'bluecloth', :group => 'bluecloth'
40
46
  end
41
47
 
42
48
  platforms :ruby_18, :jruby do
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2007, 2008, 2009, 2010 Blake Mizerany
1
+ Copyright (c) 2007, 2008, 2009, 2010, 2011 Blake Mizerany
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person
4
4
  obtaining a copy of this software and associated documentation
@@ -22,7 +22,6 @@ Die Seite kann nun unter http://localhost:4567 betrachtet werden.
22
22
  Es wird empfohlen, den Thin-Server via <tt>gem install thin</tt> zu
23
23
  installieren, den Sinatra dann, soweit vorhanden, automatisch verwendet.
24
24
 
25
-
26
25
  == Routen
27
26
 
28
27
  In Sinatra wird eine Route durch eine HTTP-Methode und ein URL-Muster
@@ -91,7 +90,6 @@ Und auch hier können Block-Parameter genutzt werden:
91
90
  "Hallo, #{c}!"
92
91
  end
93
92
 
94
-
95
93
  === Bedingungen
96
94
 
97
95
  An Routen können eine Vielzahl von Bedingungen angehängt werden, die erfüllt
@@ -132,7 +130,6 @@ Es können auch andere Bedingungen relativ einfach hinzugefügt werden:
132
130
  "Tut mir leid, verloren."
133
131
  end
134
132
 
135
-
136
133
  === Rückgabewerte
137
134
 
138
135
  Durch den Rückgabewert eines Routen-Blocks wird mindestens der Response-Body
@@ -162,7 +159,6 @@ Damit lässt sich relativ einfach Streaming implementieren:
162
159
 
163
160
  get('/') { Stream.new }
164
161
 
165
-
166
162
  === Eigene Routen-Muster
167
163
 
168
164
  Wie oben schon beschrieben, ist Sinatra von Haus aus mit Unterstützung für
@@ -205,7 +201,6 @@ Oder unter Verwendung eines negativen look ahead:
205
201
  # ...
206
202
  end
207
203
 
208
-
209
204
  == Statische Dateien
210
205
 
211
206
  Statische Dateien werden aus dem <tt>./public</tt>-Ordner ausgeliefert. Es ist
@@ -218,7 +213,6 @@ Zu beachten ist, dass der Ordnername public nicht Teil der URL ist. Die Datei
218
213
  <tt>./public/css/style.css</tt> ist unter
219
214
  <tt>http://example.com/css/style.css</tt> zu finden.
220
215
 
221
-
222
216
  == Views/Templates
223
217
 
224
218
  Standardmäßig wird davon ausgegangen, dass sich Templates im
@@ -232,7 +226,6 @@ mit Symbols auf Templates verweisen sollte, auch wenn sich ein Template in
232
226
  einem Unterordner befindet (in diesen Fall <tt>:'subdir/template'</tt>).
233
227
  Rendering-Methoden rendern jeden String direkt.
234
228
 
235
-
236
229
  === Haml-Templates
237
230
 
238
231
  Das +haml+-Gem wird benötigt, um Haml-Templates rendern zu können:
@@ -257,7 +250,6 @@ und individuell überschrieben werden.
257
250
  haml :index, :format => :html4 # überschrieben
258
251
  end
259
252
 
260
-
261
253
  === Erb-Templates
262
254
 
263
255
  # erb muss eingebunden werden
@@ -269,7 +261,6 @@ und individuell überschrieben werden.
269
261
 
270
262
  Dieser Code rendert <tt>./views/index.erb</tt>.
271
263
 
272
-
273
264
  === Erubis
274
265
 
275
266
  Das +erubis+-Gem wird benötigt, um Erubis-Templates rendern zu können:
@@ -294,7 +285,6 @@ Es ist auch möglich, Erb durch Erubis zu ersetzen:
294
285
 
295
286
  Dieser Code rendert ebenfalls <tt>./views/index.erb</tt>.
296
287
 
297
-
298
288
  === Builder-Templates
299
289
 
300
290
  Das +builder+-Gem wird benötigt, um Builder-Templates rendern zu können:
@@ -308,7 +298,6 @@ Das +builder+-Gem wird benötigt, um Builder-Templates rendern zu können:
308
298
 
309
299
  Dieser Code rendert <tt>./views/index.builder</tt>.
310
300
 
311
-
312
301
  === Nokogiri-Templates
313
302
 
314
303
  Das +nokogiri+-Gem wird benötigt, um Nokogiri-Templates rendern zu können:
@@ -322,7 +311,6 @@ Das +nokogiri+-Gem wird benötigt, um Nokogiri-Templates rendern zu können:
322
311
 
323
312
  Dieser Code rendert <tt>./views/index.nokogiri</tt>.
324
313
 
325
-
326
314
  === Sass-Templates
327
315
 
328
316
  Das +haml+- oder +sass+-Gem wird benötigt, um Sass-Templates rendern zu können:
@@ -347,7 +335,6 @@ und individuell überschrieben werden.
347
335
  sass :stylesheet, :style => :expanded # überschrieben
348
336
  end
349
337
 
350
-
351
338
  === SCSS-Templates
352
339
 
353
340
  Das +haml+- oder +sass+-Gem wird benötigt, um SCSS-Templates rendern zu können:
@@ -372,7 +359,6 @@ individuell überschrieben werden.
372
359
  scss :stylesheet, :style => :expanded # überschrieben
373
360
  end
374
361
 
375
-
376
362
  === Less-Templates
377
363
 
378
364
  Das +less+-Gem wird benötigt, um Less-Templates rendern zu können:
@@ -386,7 +372,6 @@ Das +less+-Gem wird benötigt, um Less-Templates rendern zu können:
386
372
 
387
373
  Dieser Code rendert <tt>./views/stylesheet.less</tt>.
388
374
 
389
-
390
375
  === Liquid-Templates
391
376
 
392
377
  Das +liquid+-Gem wird benötigt, um Liquid-Templates rendern zu können:
@@ -405,7 +390,6 @@ aufgerufen werden können, ist es möglich, +locals+ zu übergeben:
405
390
 
406
391
  liquid :index, :locals => { :key => 'value' }
407
392
 
408
-
409
393
  === Markdown-Templates
410
394
 
411
395
  Das +rdiscount+-Gem wird benötigt, um Markdown-Templates rendern zu können:
@@ -469,7 +453,6 @@ Ebenso ist es möglich, Markdown mit BlueCloth anstelle von RDiscount zu parsen:
469
453
 
470
454
  Das sollte <tt>./views/index.md</tt> mit BlueCloth rendern.
471
455
 
472
-
473
456
  === Textile-Templates
474
457
 
475
458
  Das +redcloth+-Gem wird benötigt, um Textile-Templates rendern zu können:
@@ -518,7 +501,6 @@ Denk daran, dass solche Einstellungen auch global gesetzt werden können:
518
501
  Das wird <tt>./views/index.textile</tt> (und jedes andere Markdown-Template)
519
502
  mit <tt>./views/post.haml</tt> als Layout rendern.
520
503
 
521
-
522
504
  === RDoc-Templates
523
505
 
524
506
  Das +rdoc+-Gem wird benötigt, um RDoc-Templates rendern zu können:
@@ -566,7 +548,6 @@ Denk daran, dass solche Einstellungen auch global gesetzt werden können:
566
548
  Das wird <tt>./views/index.rdoc</tt> (und jedes andere Markdown-Template) mit
567
549
  <tt>./views/post.haml</tt> als Layout rendern.
568
550
 
569
-
570
551
  === Radius-Templates
571
552
 
572
553
  Das +radius+-Gem wird benötigt, um Radius-Templates rendern zu können:
@@ -585,7 +566,6 @@ aufgerufen werden können, es es möglich, +locals+ zu übergeben:
585
566
 
586
567
  radius :index, :locals => { :key => 'value' }
587
568
 
588
-
589
569
  === Markaby-Templates
590
570
 
591
571
  Das +markaby+-Gem wird benötigt, um Markaby-Templates rendern zu können:
@@ -599,7 +579,6 @@ Das +markaby+-Gem wird benötigt, um Markaby-Templates rendern zu können:
599
579
 
600
580
  Dieser Code rendert <tt>./views/index.mab</tt>.
601
581
 
602
-
603
582
  === Slim-Templates
604
583
 
605
584
  Das +slim+-Gem wird benötigt, um Slim-Templates rendern zu können:
@@ -613,6 +592,18 @@ Das +slim+-Gem wird benötigt, um Slim-Templates rendern zu können:
613
592
 
614
593
  Dieser Code rendert <tt>./views/index.slim</tt>.
615
594
 
595
+ === Creole-Templates
596
+
597
+ Das +creole+-Gem wird benötigt, um Creole-Templates rendern zu können:
598
+
599
+ # creole muss eingebunden werden
600
+ require 'creole'
601
+
602
+ get '/' do
603
+ creole :index
604
+ end
605
+
606
+ Dieser Code rendert <tt>./views/index.creole</tt>.
616
607
 
617
608
  === CoffeeScript-Templates
618
609
 
@@ -637,7 +628,6 @@ Nun können CoffeeScript-Templates in der Applikation gerendert werden:
637
628
 
638
629
  Dieser Code rendert <tt>./views/application.coffee</tt>.
639
630
 
640
-
641
631
  === Inline-Templates
642
632
 
643
633
  get '/' do
@@ -646,7 +636,6 @@ Dieser Code rendert <tt>./views/application.coffee</tt>.
646
636
 
647
637
  Rendert den Inline-Template-String.
648
638
 
649
-
650
639
  === Auf Variablen in Templates zugreifen
651
640
 
652
641
  Templates werden in demselben Kontext ausgeführt wie Routen. Instanzvariablen
@@ -667,7 +656,6 @@ Oder durch einen expliziten Hash von lokalen Variablen:
667
656
  Dies wird typischerweise bei Verwendung von Subtemplates (partials) in anderen
668
657
  Templates eingesetzt.
669
658
 
670
-
671
659
  === Inline-Templates
672
660
 
673
661
  Templates können auch am Ende der Datei definiert werden:
@@ -692,7 +680,6 @@ Anmerkung: Inline-Templates, die in der Datei definiert sind, die <tt>require
692
680
  in anderen Dateien aufzurufen, muss explizit <tt>enable :inline_templates</tt>
693
681
  verwendet werden.
694
682
 
695
-
696
683
  === Benannte Templates
697
684
 
698
685
  Templates können auch mit der Top-Level <tt>template</tt>-Methode definiert
@@ -718,7 +705,6 @@ werden:
718
705
  haml :index, :layout => !request.xhr?
719
706
  end
720
707
 
721
-
722
708
  === Dateiendungen zuordnen
723
709
 
724
710
  Um eine Dateiendung einer Template-Engine zuzuordnen, kann
@@ -728,7 +714,6 @@ bewerkstelligen:
728
714
 
729
715
  Tilt.register :tt, Tilt[:textile]
730
716
 
731
-
732
717
  === Eine eigene Template-Engine hinzufügen
733
718
 
734
719
  Zu allererst muss die Engine bei Tilt registriert und danach eine
@@ -748,7 +733,6 @@ Dieser Code rendert <tt>./views/application.mtt</tt>. Siehe
748
733
  github.com/rtomayko/tilt[https://github.com/rtomayko/tilt], um mehr über Tilt
749
734
  zu lernen.
750
735
 
751
-
752
736
  == Filter
753
737
 
754
738
  Before-Filter werden vor jedem Request in demselben Kontext, wie danach die
@@ -796,7 +780,6 @@ werden:
796
780
  # ...
797
781
  end
798
782
 
799
-
800
783
  == Helfer
801
784
 
802
785
  Durch die Top-Level <tt>helpers</tt>-Methode werden sogenannte Helfer-Methoden
@@ -812,7 +795,6 @@ definiert, die in Routen und Templates verwendet werden können:
812
795
  bar(params[:name])
813
796
  end
814
797
 
815
-
816
798
  === Sessions verwenden
817
799
  Sessions werden verwendet, um Zustände zwischen den Requests zu speichern.
818
800
  Sind sie aktiviert, kann ein Session-Hash je Benutzer-Session verwendet werden.
@@ -856,7 +838,6 @@ Einstellungen ablegen.
856
838
 
857
839
  set :sessions, :domain => 'foo.com'
858
840
 
859
-
860
841
  == Anhalten
861
842
 
862
843
  Zum sofortigen Stoppen eines Request in einem Filter oder einer Route:
@@ -883,7 +864,6 @@ Natürlich ist es auch möglich, ein Template mit +halt+ zu verwenden:
883
864
 
884
865
  halt erb(:error)
885
866
 
886
-
887
867
  == Weiterspringen
888
868
 
889
869
  Eine Route kann mittels <tt>pass</tt> zu der nächsten passenden Route springen:
@@ -901,15 +881,14 @@ Der Block wird sofort verlassen und es wird nach der nächsten treffenden Route
901
881
  gesucht. Ein 404-Fehler wird zurückgegeben, wenn kein treffendes Routen-Muster
902
882
  gefunden wird.
903
883
 
904
-
905
884
  === Eine andere Route ansteuern
906
885
 
907
886
  Manchmal entspricht +pass+ nicht den Anforderungen, wenn das Ergebnis einer
908
887
  anderen Route gefordert wird. Um das zu erreichen, lässt sich +call+ nutzen:
909
888
 
910
889
  get '/foo' do
911
- status, headers, body = call request.env.merge("PATH_INFO" => '/bar')
912
- [status, body.upcase]
890
+ status, headers, body = call env.merge("PATH_INFO" => '/bar')
891
+ [status, headers, body.map(&:upcase)]
913
892
  end
914
893
 
915
894
  get '/bar' do
@@ -926,7 +905,6 @@ Kopie der Instanz erzeugt werden soll, kann <tt>call!</tt> anstelle von
926
905
 
927
906
  Die Rack-Spezifikationen enthalten weitere Informationen zu +call+.
928
907
 
929
-
930
908
  === Body, Status-Code und Header setzen
931
909
 
932
910
  Es ist möglich und empfohlen, den Status-Code sowie den Response-Body mit einem
@@ -974,7 +952,6 @@ Der Logger übernimmt dabei automatisch alle im Rack-Handler eingestellten Log-
974
952
  Vorgaben. Ist Loggen ausgeschaltet, gibt die Methode ein Leerobjekt zurück.
975
953
  In den Routen und Filtern muss man sich also nicht weiter darum kümmern.
976
954
 
977
-
978
955
  Beachte, dass das Loggen standardmäßig nur für <tt>Sinatra::Application</tt>
979
956
  voreingestellt ist. Wird über <tt>Sinatra::Base</tt> vererbt, muss es erst
980
957
  aktiviert werden:
@@ -985,7 +962,6 @@ aktiviert werden:
985
962
  end
986
963
  end
987
964
 
988
-
989
965
  == Mime-Types
990
966
 
991
967
  Wenn <tt>send_file</tt> oder statische Dateien verwendet werden, kann es
@@ -1001,7 +977,6 @@ Es kann aber auch der +content_type+-Helfer verwendet werden:
1001
977
  "foo foo foo"
1002
978
  end
1003
979
 
1004
-
1005
980
  === URLs generieren
1006
981
 
1007
982
  Zum Generieren von URLs sollte die +url+-Helfer-Methode genutzen werden, so
@@ -1014,7 +989,6 @@ Soweit vorhanden, wird Rücksicht auf Proxys und Rack-Router genommen.
1014
989
  Diese Methode ist ebenso über das Alias +to+ zu erreichen (siehe Beispiel
1015
990
  unten).
1016
991
 
1017
-
1018
992
  === Browser-Umleitung
1019
993
 
1020
994
  Eine Browser-Umleitung kann mithilfe der +redirect+-Helfer-Methode erreicht
@@ -1060,6 +1034,63 @@ oder eine Session verwendet werden:
1060
1034
  end
1061
1035
 
1062
1036
 
1037
+ === Cache einsetzen
1038
+
1039
+ Ein sinnvolles Einstellen von Header-Daten ist die Grundlage für ein
1040
+ ordentliches HTTP-Caching.
1041
+
1042
+ Der Cache-Control-Header lässt sich ganz einfach einstellen:
1043
+
1044
+ get '/' do
1045
+ cache_control :public
1046
+ "schon gecached!"
1047
+ end
1048
+
1049
+ Profitipp: Caching im before-Filter aktivieren
1050
+
1051
+ before do
1052
+ cache_control :public, :must_revalidate, :max_age => 60
1053
+ end
1054
+
1055
+ Bei Verwendung der +expires+-Helfermethode zum Setzen des gleichnamigen
1056
+ Headers, wird <tt>Cache-Control</tt> automatisch eigestellt:
1057
+
1058
+ before do
1059
+ expires 500, :public, :must_revalidate
1060
+ end
1061
+
1062
+ Um alles richtig zu machen, sollten auch +etag+ und +last_modified+ verwendet
1063
+ werden. Es wird empfohlen, dass diese Helfer aufgerufen werden *bevor* die
1064
+ eigentliche Arbeit anfängt, da sie sofort eine Antwort senden, wenn der
1065
+ Client eine aktuelle Version im Cache vorhält:
1066
+
1067
+ get '/article/:id' do
1068
+ @article = Article.find params[:id]
1069
+ last_modified @article.updated_at
1070
+ etag @article.sha1
1071
+ erb :article
1072
+ end
1073
+
1074
+ ebenso ist es möglich einen
1075
+ {schwachen ETag}[http://de.wikipedia.org/wiki/HTTP_ETag] zu verwenden:
1076
+
1077
+ etag @article.sha1, :weak
1078
+
1079
+ Diese Helfer führen nicht das eigentliche Caching aus, sondern geben die dafür
1080
+ notwendigen Informationen an den Cache weiter. Für schnelle Cache-Lösungen
1081
+ bietet sich z.B. {rack-cache}[http://rtomayko.github.com/rack-cache/] an:
1082
+
1083
+ require "rack/cache"
1084
+ require "sinatra"
1085
+
1086
+ use Rack::Cache
1087
+
1088
+ get '/' do
1089
+ cache_control :public, :max_age => 36000
1090
+ sleep 5
1091
+ "hello"
1092
+ end
1093
+
1063
1094
  === Dateien versenden
1064
1095
 
1065
1096
  Zum Versenden von Dateien kann die <tt>send_file</tt>-Helfer-Methode verwendet
@@ -1095,7 +1126,6 @@ Ruby-Prozess auch andere Möglichkeiten genutzt. Bei Verwendung der
1095
1126
  <tt>send_file</tt>-Helfer-Methode kümmert sich Sinatra selbstständig um die
1096
1127
  Range-Requests.
1097
1128
 
1098
-
1099
1129
  == Das Request-Objekt
1100
1130
 
1101
1131
  Auf das +request+-Objekt der eigehenden Anfrage kann vom Anfrage-Scope aus
@@ -1149,7 +1179,6 @@ Der <tt>request.body</tt> ist ein IO- oder StringIO-Objekt:
1149
1179
  "Hallo #{daten['name']}!"
1150
1180
  end
1151
1181
 
1152
-
1153
1182
  === Anhänge
1154
1183
 
1155
1184
  Damit der Browser erkennt, dass ein Response gespeichert und nicht im Browser
@@ -1167,7 +1196,6 @@ Ebenso kann eine Dateiname als Parameter hinzugefügt werden:
1167
1196
  "Speichern!"
1168
1197
  end
1169
1198
 
1170
-
1171
1199
  === Nachschlagen von Template-Dateien
1172
1200
 
1173
1201
  Die <tt>find_template</tt>-Helfer-Methode wird genutzt, um Template-Dateien zum
@@ -1213,7 +1241,6 @@ Template-Pfade samt Inhalt gecached, solange nicht im Entwicklungsmodus
1213
1241
  gearbeitet wird. Das sollte im Hinterkopf behalten werden, wenn irgendwelche
1214
1242
  verrückten Methoden zusammenbastelt werden.
1215
1243
 
1216
-
1217
1244
  == Konfiguration
1218
1245
 
1219
1246
  Wird einmal beim Starten in jedweder Umgebung ausgeführt:
@@ -1261,7 +1288,6 @@ Diese Einstellungen sind über +settings+ erreichbar:
1261
1288
  ...
1262
1289
  end
1263
1290
 
1264
-
1265
1291
  === Mögliche Einstellungen
1266
1292
 
1267
1293
  [absolute_redirects] Wenn ausgeschaltet, wird Sinatra relative Redirects
@@ -1357,14 +1383,12 @@ Diese Einstellungen sind über +settings+ erreichbar:
1357
1383
 
1358
1384
  [views] Verzeichnis der Views.
1359
1385
 
1360
-
1361
1386
  == Fehlerbehandlung
1362
1387
 
1363
1388
  Error-Handler laufen in demselben Kontext wie Routen und Filter, was bedeutet,
1364
1389
  dass alle Goodies wie <tt>haml</tt>, <tt>erb</tt>, <tt>halt</tt>, etc.
1365
1390
  verwendet werden können.
1366
1391
 
1367
-
1368
1392
  === Nicht gefunden
1369
1393
 
1370
1394
  Wenn eine <tt>Sinatra::NotFound</tt>-Exception geworfen wird oder der
@@ -1374,7 +1398,6 @@ Statuscode 404 ist, wird der <tt>not_found</tt>-Handler ausgeführt:
1374
1398
  'Seite kann nirgendwo gefunden werden.'
1375
1399
  end
1376
1400
 
1377
-
1378
1401
  === Fehler
1379
1402
 
1380
1403
  Der +error+-Handler wird immer ausgeführt, wenn eine Exception in einem
@@ -1388,7 +1411,7 @@ Routen-Block oder in einem Filter geworfen wurde. Die Exception kann über die
1388
1411
  Benutzerdefinierte Fehler:
1389
1412
 
1390
1413
  error MeinFehler do
1391
- 'Au weia, ' + request.env['sinatra.error'].message
1414
+ 'Au weia, ' + env['sinatra.error'].message
1392
1415
  end
1393
1416
 
1394
1417
  Dann, wenn das passiert:
@@ -1420,7 +1443,6 @@ Oder ein Status-Code-Bereich:
1420
1443
  Sinatra setzt verschiedene <tt>not_found</tt>- und <tt>error</tt>-Handler in
1421
1444
  der Development-Umgebung.
1422
1445
 
1423
-
1424
1446
  == Rack-Middleware
1425
1447
 
1426
1448
  Sinatra baut auf Rack[http://rack.rubyforge.org/], einem minimalistischen
@@ -1456,7 +1478,6 @@ URL-Routing, Authentifizierung und Session-Verarbeitung. Sinatra verwendet
1456
1478
  viele von diesen Komponenten automatisch, abhängig von der Konfiguration. So
1457
1479
  muss +use+ häufig nicht explizit verwendet werden.
1458
1480
 
1459
-
1460
1481
  == Testen
1461
1482
 
1462
1483
  Sinatra-Tests können mit jedem auf Rack aufbauendem Test-Framework geschrieben
@@ -1492,7 +1513,6 @@ werden. {Rack::Test}[http://gitrdoc.com/brynary/rack-test] wird empfohlen:
1492
1513
  Anmerkung: Das eingebaute Sinatra::Test-Modul und die
1493
1514
  Sinatra::TestHarness-Klasse werden seit Version 0.9.2 nicht mehr unterstützt.
1494
1515
 
1495
-
1496
1516
  == Sinatra::Base - Middleware, Bibliotheken und modulare Anwendungen
1497
1517
 
1498
1518
  Das Definieren einer Top-Level-Anwendung funktioniert gut für
@@ -1538,7 +1558,6 @@ per Standard deaktiviert. Das betrifft auch den eingebauten Server. Siehe
1538
1558
  {Optionen und Konfiguration}[http://sinatra.github.com/configuration.html] für
1539
1559
  Details über mögliche Optionen.
1540
1560
 
1541
-
1542
1561
  === Modularer vs. klassischer Stil
1543
1562
 
1544
1563
  Entgegen häufiger Meinungen gibt es nichts gegen den klassischen Stil
@@ -1568,7 +1587,6 @@ Unterschiede beachtet werden:
1568
1587
  method_override true false
1569
1588
  inline_templates true false
1570
1589
 
1571
-
1572
1590
  === Eine modulare Applikation bereitstellen
1573
1591
 
1574
1592
  Es gibt zwei übliche Wege, eine modulare Anwendung zu starten. Zum einen über
@@ -1599,7 +1617,6 @@ Starte:
1599
1617
 
1600
1618
  rackup -p 4567
1601
1619
 
1602
-
1603
1620
  === Eine klassische Anwendung mit einer config.ru verwenden
1604
1621
 
1605
1622
  Schreibe eine Anwendungsdatei:
@@ -1616,7 +1633,6 @@ sowie eine dazugehörige <tt>config.ru</tt>-Datei:
1616
1633
  require 'app'
1617
1634
  run Sinatra::Application
1618
1635
 
1619
-
1620
1636
  === Wann sollte eine config.ru-Datei verwendet werden?
1621
1637
 
1622
1638
  Anzeichen dafür, dass eine <tt>config.ru</tt>-Datei gebraucht wird:
@@ -1631,7 +1647,6 @@ eine Anwendung im modularen Stil betrieben werden soll. Ebenso wird keine
1631
1647
  Anwendung mit modularem Stil benötigt, um eine <tt>config.ru</tt>-Datei zu
1632
1648
  verwenden.</b>
1633
1649
 
1634
-
1635
1650
  === Sinatra als Middleware nutzen
1636
1651
 
1637
1652
  Es ist nicht nur möglich, andere Rack-Middleware mit Sinatra zu nutzen, es kann
@@ -1679,7 +1694,6 @@ ohne dass sie einer Konstanten zugeordnet werden. Dies lässt sich mit
1679
1694
  my_app = Sinatra.new { get('/') { "hallo" } }
1680
1695
  my_app.run!
1681
1696
 
1682
-
1683
1697
  Die Applikation kann mit Hilfe eines optionalen Parameters erstellt werden:
1684
1698
 
1685
1699
  require 'sinatra/base'
@@ -1710,13 +1724,11 @@ Ebenso lassen sich damit hervorragend Sinatra-Middlewares erstellen:
1710
1724
 
1711
1725
  run RailsProject::Application
1712
1726
 
1713
-
1714
1727
  == Geltungsbereich und Bindung
1715
1728
 
1716
1729
  Der Geltungsbereich (Scope) legt fest, welche Methoden und Variablen zur
1717
1730
  Verfügung stehen.
1718
1731
 
1719
-
1720
1732
  === Anwendungs- oder Klassen-Scope
1721
1733
 
1722
1734
  Jede Sinatra-Anwendung entspricht einer Sinatra::Base-Subklasse. Falls die Top-
@@ -1752,7 +1764,6 @@ Auf das Scope-Objekt (die Klasse) kann wie folgt zugegriffen werden:
1752
1764
  { |c| ... }</tt>).
1753
1765
  * +settings+ aus den anderen Scopes heraus.
1754
1766
 
1755
-
1756
1767
  === Anfrage- oder Instanz-Scope
1757
1768
 
1758
1769
  Für jede eingehende Anfrage wird eine neue Instanz der Anwendungs-Klasse
@@ -1783,7 +1794,6 @@ Im Anfrage-Scope befindet man sich:
1783
1794
  * In Helfer-Methoden
1784
1795
  * In Templates
1785
1796
 
1786
-
1787
1797
  === Delegation-Scope
1788
1798
 
1789
1799
  Vom Delegation-Scope aus werden Methoden einfach an den Klassen-Scope
@@ -1805,7 +1815,6 @@ Schau am besten im Code nach: Hier ist
1805
1815
  definiert und wird in den
1806
1816
  {globalen Namespace eingebunden}[http://github.com/sinatra/sinatra/blob/master/lib/sinatra/main.rb#L25].
1807
1817
 
1808
-
1809
1818
  == Kommandozeile
1810
1819
 
1811
1820
  Sinatra-Anwendungen können direkt von der Kommandozeile aus gestartet werden:
@@ -1821,7 +1830,6 @@ Die Optionen sind:
1821
1830
  -s # Rack-Server/Handler setzen (Standard ist thin)
1822
1831
  -x # Mutex-Lock einschalten (Standard ist off)
1823
1832
 
1824
-
1825
1833
  == Systemanforderungen
1826
1834
 
1827
1835
  Die folgenden Versionen werden offiziell unterstützt:
@@ -1871,22 +1879,21 @@ Zeit für nichts garantiert werden. Es kann aber erwartet werden, dass Ruby
1871
1879
  Sinatra sollte auf jedem Betriebssystem laufen, dass den gewählten Ruby-
1872
1880
  Interpreter unterstützt.
1873
1881
 
1874
-
1875
1882
  == Der neueste Stand (The Bleeding Edge)
1883
+
1876
1884
  Um auf dem neusten Stand zu bleiben, kann der Master-Branch verwendet werden.
1877
1885
  Er sollte recht stabil sein. Ebenso gibt es von Zeit zu Zeit prerelease Gems,
1878
1886
  die so installiert werden:
1879
1887
 
1880
1888
  gem install sinatra --pre
1881
1889
 
1882
-
1883
1890
  === Mit Bundler
1884
1891
 
1885
1892
  Wenn die Applikation mit der neuesten Version von Sinatra und
1886
- {Bundler}[http://gembundler.com/] genutzt werden soll, schlagen wir folgenden
1887
- Weg vor:
1893
+ {Bundler}[http://gembundler.com/] genutzt werden soll, empfehlen wir den
1894
+ nachfolgenden Weg.
1888
1895
 
1889
- Soweit Bundler noch nicht installiert ist, folgendes:
1896
+ Soweit Bundler noch nicht installiert ist:
1890
1897
 
1891
1898
  gem install bundler
1892
1899
 
@@ -1934,7 +1941,6 @@ Um Sinatra-Code von Zeit zu Zeit zu aktualisieren:
1934
1941
  cd myproject/sinatra
1935
1942
  git pull
1936
1943
 
1937
-
1938
1944
  === Gem erstellen
1939
1945
 
1940
1946
  Aus der eigenen lokalen Kopie kann nun auch ein globales Gem gebaut werden:
@@ -1949,21 +1955,23 @@ folgendermaßen lauten:
1949
1955
 
1950
1956
  sudo rake install
1951
1957
 
1952
-
1953
1958
  == Versions-Verfahren
1954
1959
 
1955
1960
  Sinatra folgt dem sogenannten {Semantic Versioning}[http://semver.org/], d.h.
1956
1961
  SemVer und SemVerTag.
1957
1962
 
1958
-
1959
1963
  == Mehr
1960
1964
 
1961
1965
  * {Projekt-Website}[http://sinatra.github.com/] - Ergänzende Dokumentation,
1962
1966
  News und Links zu anderen Ressourcen.
1963
1967
  * {Hilfe beisteuern}[http://sinatra.github.com/contributing.html] - Einen
1964
- Fehler gefunden? Brauchst du Hilfe? Hast du einen Patch?
1968
+ Fehler gefunden? Brauchst du Hilfe? Hast du einen Patch?
1965
1969
  * {Issue-Tracker}[http://github.com/sinatra/sinatra/issues]
1966
1970
  * {Twitter}[http://twitter.com/sinatra]
1967
1971
  * {Mailing-Liste}[http://groups.google.com/group/sinatrarb]
1968
1972
  * {IRC: #sinatra}[irc://chat.freenode.net/#sinatra] auf http://freenode.net
1969
1973
 
1974
+ * API Dokumentation für die {aktuelle Version}[http://rubydoc.info/gems/sinatra]
1975
+ oder für {HEAD}[http://rubydoc.info/github/sinatra/sinatra] auf
1976
+ http://rubydoc.info
1977
+