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 +32 -0
- data/Gemfile +7 -1
- data/LICENSE +1 -1
- data/README.de.rdoc +81 -73
- data/README.es.rdoc +26 -6
- data/README.fr.rdoc +17 -3
- data/README.hu.rdoc +1 -1
- data/README.jp.rdoc +14 -1
- data/README.pt-br.rdoc +1 -1
- data/README.pt-pt.rdoc +1 -1
- data/README.rdoc +145 -277
- data/README.ru.rdoc +16 -3
- data/README.zh.rdoc +16 -3
- data/lib/sinatra/base.rb +25 -30
- data/sinatra.gemspec +5 -7
- data/test/creole_test.rb +65 -0
- data/test/delegator_test.rb +27 -1
- data/test/erb_test.rb +24 -1
- data/test/helper.rb +7 -0
- data/test/helpers_test.rb +14 -0
- data/test/markdown_test.rb +54 -9
- data/test/radius_test.rb +0 -1
- data/test/rdoc_test.rb +30 -0
- data/test/routing_test.rb +35 -4
- data/test/settings_test.rb +18 -0
- data/test/textile_test.rb +30 -0
- data/test/views/hello.creole +1 -0
- metadata +8 -15
- data/test/erubis_test.rb +0 -88
- data/test/views/error.erubis +0 -3
- data/test/views/hello.erubis +0 -1
- data/test/views/layout2.erubis +0 -2
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']
|
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
data/README.de.rdoc
CHANGED
@@ -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
|
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, ' +
|
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,
|
1887
|
-
Weg
|
1893
|
+
{Bundler}[http://gembundler.com/] genutzt werden soll, empfehlen wir den
|
1894
|
+
nachfolgenden Weg.
|
1888
1895
|
|
1889
|
-
Soweit Bundler noch nicht installiert ist
|
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
|
+
|