sinatra 1.2.9 → 1.3.0.a
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of sinatra might be problematic. Click here for more details.
- data/CHANGES +12 -118
- data/Gemfile +23 -37
- data/LICENSE +1 -1
- data/README.de.rdoc +11 -15
- data/README.es.rdoc +50 -76
- data/README.fr.rdoc +7 -7
- data/README.hu.rdoc +1 -1
- data/README.jp.rdoc +2 -8
- data/README.pt-br.rdoc +1 -1
- data/README.pt-pt.rdoc +1 -1
- data/README.rdoc +64 -139
- data/README.ru.rdoc +618 -68
- data/README.zh.rdoc +7 -7
- data/Rakefile +6 -29
- data/lib/sinatra.rb +3 -0
- data/lib/sinatra/base.rb +115 -179
- data/lib/sinatra/main.rb +1 -1
- data/lib/sinatra/rack.rb +44 -0
- data/lib/sinatra/showexceptions.rb +3 -3
- data/sinatra.gemspec +5 -4
- data/test/coffee_test.rb +11 -15
- data/test/delegator_test.rb +3 -43
- data/test/helper.rb +0 -4
- data/test/helpers_test.rb +44 -37
- data/test/nokogiri_test.rb +6 -5
- data/test/result_test.rb +4 -4
- data/test/routing_test.rb +8 -132
- data/test/server_test.rb +2 -3
- data/test/settings_test.rb +0 -26
- data/test/slim_test.rb +25 -15
- data/test/static_test.rb +1 -0
- metadata +17 -67
- data/test/rack_test.rb +0 -45
data/CHANGES
CHANGED
@@ -1,127 +1,25 @@
|
|
1
|
-
= 1.
|
1
|
+
= 1.3.0 / Not Yet Released
|
2
2
|
|
3
|
-
|
3
|
+
* Added support for HTTP PATCH requests. (Konstantin Haase)
|
4
4
|
|
5
|
-
*
|
5
|
+
* Set up `Rack::Logger` or `Rack::NullLogger` depending on whether logging
|
6
|
+
was enabled or not. Also, expose that logger with the `logger` helper
|
7
|
+
method. (Konstantin Haase)
|
6
8
|
|
7
|
-
*
|
9
|
+
* The sessions setting now may be an options hash. (Konstantin Haase)
|
8
10
|
|
9
|
-
*
|
11
|
+
* Important: 1.8.6 support has been dropped. It is still usable if you use the
|
12
|
+
backports gem, but no longer officially supported. (Konstantin Haase)
|
10
13
|
|
11
|
-
*
|
14
|
+
* It is now possible to use a different target class for the top level DLS (aka
|
15
|
+
classic style) than `Sinatra::Application` by setting `Delegator.target`.
|
16
|
+
This was mainly introduced to ease testing. (Konstantin Haase)
|
12
17
|
|
13
|
-
|
14
|
-
|
15
|
-
= 1.2.8 (backports release) / 2011-12-30
|
16
|
-
|
17
|
-
Backported from 1.3.2:
|
18
|
-
|
19
|
-
* Fix bug where rendering a second template in the same request after the
|
20
|
-
first one raised an exception skipped the default layout (Nathan Baum)
|
21
|
-
|
22
|
-
= 1.2.7 (backports release) / 2011-09-30
|
23
|
-
|
24
|
-
Custom changes:
|
25
|
-
|
26
|
-
* Fix Ruby 1.8.6 issue with Accept header parsing. (Konstantin Haase)
|
27
|
-
|
28
|
-
Backported from 1.3.0:
|
29
|
-
|
30
|
-
* Ignore `to_ary` on response bodies. Fixes compatibility to Rails 3.1.
|
31
|
-
(Konstantin Haase)
|
32
|
-
|
33
|
-
* `Sinatra.run!` now prints to stderr rather than stdout. (Andrew Armenia)
|
34
|
-
|
35
|
-
* Automatic `app_file` detection now works in directories containing brackets
|
36
|
-
(Konstantin Haase)
|
37
|
-
|
38
|
-
* Improved documentation. (Emanuele Vicentini, Peter Higgins, Takanori
|
39
|
-
Ishikawa, Konstantin Haase)
|
40
|
-
|
41
|
-
* Also specify charset in Content-Type header for JSON. (Konstantin Haase)
|
42
|
-
|
43
|
-
* Rack handler names will not be converted to lower case internally, this
|
44
|
-
allows you to run Sinatra with custom Rack handlers, like Kirk or Mongrel2.
|
45
|
-
Example: `ruby app.rb -s Mongrel2` (Konstantin Haase)
|
46
|
-
|
47
|
-
* Fix uninitialized instance variable warning. (David Kellum)
|
48
|
-
|
49
|
-
* Command line options now complain if value passed to `-p` is not a valid
|
50
|
-
integer. (Konstantin Haase)
|
51
|
-
|
52
|
-
* Fix handling of broken query params when displaying exceptions. (Luke
|
53
|
-
Jahnke)
|
54
|
-
|
55
|
-
= 1.2.6 / 2011-05-01
|
56
|
-
|
57
|
-
* Fix broken delegation, backport delegation tests from Sinatra 1.3.
|
58
|
-
(Konstantin Haase)
|
59
|
-
|
60
|
-
= 1.2.5 / 2011-04-30
|
61
|
-
|
62
|
-
* Restore compatibility with Ruby 1.8.6. (Konstantin Haase)
|
63
|
-
|
64
|
-
= 1.2.4 / 2011-04-30
|
65
|
-
|
66
|
-
* Sinatra::Application (classic style) does not use a session secret in
|
67
|
-
development mode, so sessions are not invalidated after every request when
|
68
|
-
using Shotgun. (Konstantin Haase)
|
69
|
-
|
70
|
-
* The request object was shared between multiple Sinatra instances in the
|
71
|
-
same middleware chain. This caused issues if any non-sinatra routing
|
72
|
-
happend in-between two of those instances, or running a request twice
|
73
|
-
against an application (described in the README). The caching was reverted.
|
74
|
-
See GH#239 and GH#256 for more infos. (Konstantin Haase)
|
75
|
-
|
76
|
-
* Fixes issues where the top level DSL was interfering with method_missing
|
77
|
-
proxies. This issue surfaced when Rails 3 was used with older Sass versions
|
78
|
-
and Sinatra >= 1.2.0. (Konstantin Haase)
|
79
|
-
|
80
|
-
* Sinatra::Delegator.delegate is now able to delegate any method names, even
|
81
|
-
those containing special characters. This allows better integration into
|
82
|
-
other programming languages on Rubinius (probably on the JVM, too), like
|
83
|
-
Fancy. (Konstantin Haase)
|
84
|
-
|
85
|
-
* Remove HEAD request logic and let Rack::Head handle it instead. (Paolo
|
86
|
-
"Nusco" Perrotta)
|
87
|
-
|
88
|
-
= 1.2.3 / 2011-04-13
|
89
|
-
|
90
|
-
* This release is compatible with Tilt 1.3, it will still work with Tilt 1.2.2,
|
91
|
-
however, if you want to use a newer Tilt version, you have to upgrade to at
|
92
|
-
least this version of Sinatra. (Konstantin Haase)
|
93
|
-
|
94
|
-
* Helpers dealing with time, like `expires`, handle objects that pretend to be
|
95
|
-
numbers, like `ActiveSupport::Duration`, better. (Konstantin Haase)
|
96
|
-
|
97
|
-
= 1.2.2 / 2011-04-08
|
98
|
-
|
99
|
-
* The `:provides => :js` condition now matches both `application/javascript`
|
100
|
-
and `text/javascript`. The `:provides => :xml` condition now matches both
|
101
|
-
`application/xml` and `text/xml`. The `Content-Type` header is set
|
102
|
-
accordingly. If the client accepts both, the `application/*` version is
|
103
|
-
preferred, since the `text/*` versions are deprecated. (Konstantin Haase)
|
104
|
-
|
105
|
-
* The `provides` condition now handles wildcards in `Accept` headers correctly.
|
106
|
-
Thus `:provides => :html` matches `text/html`, `text/*` and `*/*`.
|
107
|
-
(Konstantin Haase)
|
108
|
-
|
109
|
-
* When parsing `Accept` headers, `Content-Type` preferences are honored
|
110
|
-
according to RFC 2616 section 14.1. (Konstantin Haase)
|
18
|
+
= 1.2.2 / Not Yet Released
|
111
19
|
|
112
20
|
* URIs passed to the `url` helper or `redirect` may now use any schema to be
|
113
21
|
identified as absolute URIs, not only `http` or `https`. (Konstantin Haase)
|
114
22
|
|
115
|
-
* Handles `Content-Type` strings that already contain parameters correctly in
|
116
|
-
`content_type` (example: `content_type "text/plain; charset=utf-16"`).
|
117
|
-
(Konstantin Haase)
|
118
|
-
|
119
|
-
* If a route with an empty pattern is defined (`get("") { ... }`) requests with
|
120
|
-
an empty path info match this route instead of "/". (Konstantin Haase)
|
121
|
-
|
122
|
-
* In development environment, when running under a nested path, the image URIs
|
123
|
-
on the error pages are set properly. (Konstantin Haase)
|
124
|
-
|
125
23
|
= 1.2.1 / 2011-03-17
|
126
24
|
|
127
25
|
* Use a generated session secret when using `enable :sessions`. (Konstantin
|
@@ -184,10 +82,6 @@ Backported from 1.3.0:
|
|
184
82
|
* Sinatra now ships with a Gemfile for development dependencies, since it eases
|
185
83
|
supporting different platforms, like JRuby. (Konstantin Haase)
|
186
84
|
|
187
|
-
= 1.1.4 (backports release) / 2011-04-13
|
188
|
-
|
189
|
-
* Compatible with Tilt 1.3. (Konstantin Haase)
|
190
|
-
|
191
85
|
= 1.1.3 / 2011-02-20
|
192
86
|
|
193
87
|
* Fixed issues with `user_agent` condition if the user agent header is missing.
|
data/Gemfile
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# Why use bundler?
|
2
|
-
# Well, not all development dependencies install on all rubies. Moreover, `gem
|
2
|
+
# Well, not all development dependencies install on all rubies. Moreover, `gem
|
3
3
|
# install sinatra --development` doesn't work, as it will also try to install
|
4
4
|
# development dependencies of our dependencies, and those are not conflict free.
|
5
5
|
# So, here we are, `bundle install`.
|
@@ -7,50 +7,36 @@
|
|
7
7
|
# If you have issues with a gem: `bundle install --without-coffee-script`.
|
8
8
|
|
9
9
|
RUBY_ENGINE = 'ruby' unless defined? RUBY_ENGINE
|
10
|
+
|
10
11
|
source :rubygems unless ENV['QUICK']
|
11
12
|
gemspec
|
12
13
|
|
13
|
-
gem 'rake'
|
14
|
+
gem 'rake'
|
14
15
|
gem 'rack-test', '>= 0.5.6'
|
15
|
-
gem 'ci_reporter', :group => :ci
|
16
|
-
|
17
|
-
# Allows stuff like `tilt=1.2.2 bundle install` or `tilt=master ...`.
|
18
|
-
# Used by the CI.
|
19
|
-
github = "git://github.com/%s.git"
|
20
|
-
repos = { 'tilt' => github % "rtomayko/tilt", 'rack' => github % "rack/rack" }
|
21
|
-
%w[tilt rack].each do |lib|
|
22
|
-
dep = (ENV[lib] || 'stable').sub "#{lib}-", ''
|
23
|
-
dep = nil if dep == 'stable'
|
24
|
-
dep = {:git => repos[lib], :branch => dep} if dep and dep !~ /(\d+\.)+\d+/
|
25
|
-
dep ||= '~> 1.1.0' if lib == 'rack' and RUBY_VERSION == '1.8.6'
|
26
|
-
gem lib, dep
|
27
|
-
end
|
28
16
|
|
29
|
-
gem 'haml', '
|
17
|
+
gem 'haml', '>= 3.0', :group => 'haml'
|
30
18
|
gem 'builder', :group => 'builder'
|
31
19
|
gem 'erubis', :group => 'erubis'
|
20
|
+
gem 'less', :group => 'less'
|
32
21
|
gem 'liquid', :group => 'liquid'
|
22
|
+
gem 'nokogiri', :group => 'nokogiri'
|
23
|
+
gem 'slim', :group => 'slim'
|
24
|
+
gem 'RedCloth', :group => 'redcloth'
|
25
|
+
gem 'coffee-script', '>= 2.0', :group => 'coffee-script'
|
26
|
+
gem 'rdoc', :group => 'rdoc'
|
27
|
+
|
28
|
+
platforms :ruby do
|
29
|
+
gem 'rdiscount', :group => 'rdiscount'
|
30
|
+
end
|
33
31
|
|
34
|
-
|
35
|
-
|
36
|
-
gem '
|
37
|
-
gem '
|
38
|
-
|
39
|
-
if RUBY_ENGINE == 'jruby'
|
40
|
-
gem 'nokogiri', '!= 1.5.0'
|
41
|
-
elsif RUBY_ENGINE != 'maglev'
|
42
|
-
gem 'nokogiri'
|
43
|
-
end
|
44
|
-
gem 'coffee-script', '>= 2.0', :group => 'coffee-script'
|
45
|
-
gem 'rdoc', '< 3.10', :group => 'rdoc'
|
46
|
-
|
47
|
-
platforms :ruby do
|
48
|
-
gem 'rdiscount', :group => 'rdiscount'
|
49
|
-
end
|
32
|
+
platforms :ruby_18, :jruby do
|
33
|
+
gem 'json', :group => 'coffee-script'
|
34
|
+
gem 'markaby', :group => 'markaby'
|
35
|
+
gem 'radius', :group => 'radius'
|
36
|
+
end
|
50
37
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
end
|
38
|
+
platforms :mri_18 do
|
39
|
+
# bundler platforms are broken
|
40
|
+
next if RUBY_ENGINE != 'ruby' or RUBY_VERSION > "1.8"
|
41
|
+
gem 'rcov', :group => 'rcov'
|
56
42
|
end
|
data/LICENSE
CHANGED
data/README.de.rdoc
CHANGED
@@ -903,8 +903,8 @@ Manchmal entspricht +pass+ nicht den Anforderungen, wenn das Ergebnis einer
|
|
903
903
|
anderen Route gefordert wird. Um das zu erreichen, lässt sich +call+ nutzen:
|
904
904
|
|
905
905
|
get '/foo' do
|
906
|
-
status, headers, body = call env.merge("PATH_INFO" => '/bar')
|
907
|
-
[status,
|
906
|
+
status, headers, body = call request.env.merge("PATH_INFO" => '/bar')
|
907
|
+
[status, body.upcase]
|
908
908
|
end
|
909
909
|
|
910
910
|
get '/bar' do
|
@@ -947,7 +947,7 @@ Vergleichbar mit +body+ lassen sich auch Status-Code und Header setzen:
|
|
947
947
|
get '/foo' do
|
948
948
|
status 418
|
949
949
|
headers \
|
950
|
-
"Allow" => "BREW, POST, GET, PROPFIND, WHEN"
|
950
|
+
"Allow" => "BREW, POST, GET, PROPFIND, WHEN"
|
951
951
|
"Refresh" => "Refresh: 20; http://www.ietf.org/rfc/rfc2324.txt"
|
952
952
|
halt "Ich bin ein Teekesselchen"
|
953
953
|
end
|
@@ -1018,7 +1018,7 @@ Um Argumente an ein Redirect weiterzugeben, können sie entweder dem Query
|
|
1018
1018
|
|
1019
1019
|
oder eine Session verwendet werden:
|
1020
1020
|
|
1021
|
-
enable :
|
1021
|
+
enable :session
|
1022
1022
|
|
1023
1023
|
get '/foo' do
|
1024
1024
|
session[:secret] = 'foo'
|
@@ -1357,7 +1357,7 @@ Routen-Block oder in einem Filter geworfen wurde. Die Exception kann über die
|
|
1357
1357
|
Benutzerdefinierte Fehler:
|
1358
1358
|
|
1359
1359
|
error MeinFehler do
|
1360
|
-
'Au weia, ' + env['sinatra.error'].message
|
1360
|
+
'Au weia, ' + request.env['sinatra.error'].message
|
1361
1361
|
end
|
1362
1362
|
|
1363
1363
|
Dann, wenn das passiert:
|
@@ -1561,7 +1561,7 @@ Oder über eine <tt>config.ru</tt>-Datei, die es erlaubt, einen beliebigen
|
|
1561
1561
|
Rack-Handler zu verwenden:
|
1562
1562
|
|
1563
1563
|
# config.ru
|
1564
|
-
require '
|
1564
|
+
require 'mein_app'
|
1565
1565
|
run MeineApp
|
1566
1566
|
|
1567
1567
|
Starte:
|
@@ -1582,7 +1582,7 @@ Schreibe eine Anwendungsdatei:
|
|
1582
1582
|
|
1583
1583
|
sowie eine dazugehörige <tt>config.ru</tt>-Datei:
|
1584
1584
|
|
1585
|
-
require '
|
1585
|
+
require 'app'
|
1586
1586
|
run Sinatra::Application
|
1587
1587
|
|
1588
1588
|
|
@@ -1819,10 +1819,10 @@ die so installiert werden:
|
|
1819
1819
|
=== Mit Bundler
|
1820
1820
|
|
1821
1821
|
Wenn die Applikation mit der neuesten Version von Sinatra und
|
1822
|
-
{Bundler}[http://gembundler.com/] genutzt werden soll,
|
1823
|
-
|
1822
|
+
{Bundler}[http://gembundler.com/] genutzt werden soll, schlagen wir folgenden
|
1823
|
+
Weg vor:
|
1824
1824
|
|
1825
|
-
Soweit Bundler noch nicht installiert ist:
|
1825
|
+
Soweit Bundler noch nicht installiert ist, folgendes:
|
1826
1826
|
|
1827
1827
|
gem install bundler
|
1828
1828
|
|
@@ -1897,13 +1897,9 @@ SemVer und SemVerTag.
|
|
1897
1897
|
* {Projekt-Website}[http://sinatra.github.com/] - Ergänzende Dokumentation,
|
1898
1898
|
News und Links zu anderen Ressourcen.
|
1899
1899
|
* {Hilfe beisteuern}[http://sinatra.github.com/contributing.html] - Einen
|
1900
|
-
|
1900
|
+
Fehler gefunden? Brauchst du Hilfe? Hast du einen Patch?
|
1901
1901
|
* {Issue-Tracker}[http://github.com/sinatra/sinatra/issues]
|
1902
1902
|
* {Twitter}[http://twitter.com/sinatra]
|
1903
1903
|
* {Mailing-Liste}[http://groups.google.com/group/sinatrarb]
|
1904
1904
|
* {IRC: #sinatra}[irc://chat.freenode.net/#sinatra] auf http://freenode.net
|
1905
1905
|
|
1906
|
-
* API Dokumentation für die {aktuelle Version}[http://rubydoc.info/gems/sinatra]
|
1907
|
-
oder für {HEAD}[http://rubydoc.info/github/sinatra/sinatra] auf
|
1908
|
-
http://rubydoc.info
|
1909
|
-
|
data/README.es.rdoc
CHANGED
@@ -35,7 +35,11 @@ Cada ruta se asocia con un bloque:
|
|
35
35
|
end
|
36
36
|
|
37
37
|
put '/' do
|
38
|
-
..
|
38
|
+
.. reemplazar algo ..
|
39
|
+
end
|
40
|
+
|
41
|
+
patch '/' do
|
42
|
+
.. modificar algo ..
|
39
43
|
end
|
40
44
|
|
41
45
|
delete '/' do
|
@@ -825,6 +829,11 @@ compartan un único secreto, tenés que definirlo vos:
|
|
825
829
|
|
826
830
|
set :session_secret, 'super secreto'
|
827
831
|
|
832
|
+
Si necesitás una configuración más específica, +sessions+ acepta un
|
833
|
+
Hash con opciones:
|
834
|
+
|
835
|
+
set :sessions, :domain => 'foo.com'
|
836
|
+
|
828
837
|
=== Interrupción
|
829
838
|
|
830
839
|
Para detener inmediatamente una petición dentro de un filtro o una ruta usá:
|
@@ -874,8 +883,8 @@ Cuando querés obtener el resultado de la llamada a una ruta, +pass+ no te va a
|
|
874
883
|
servir. Para lograr esto, podés usar +call+:
|
875
884
|
|
876
885
|
get '/foo' do
|
877
|
-
status, headers, body = call env.merge("PATH_INFO" => '/bar')
|
878
|
-
[status,
|
886
|
+
status, headers, body = call request.env.merge("PATH_INFO" => '/bar')
|
887
|
+
[status, body.upcase]
|
879
888
|
end
|
880
889
|
|
881
890
|
get '/bar' do
|
@@ -916,7 +925,7 @@ De manera similar, también podés asignar el código de estado y encabezados:
|
|
916
925
|
get '/foo' do
|
917
926
|
status 418
|
918
927
|
headers \
|
919
|
-
"Allow" => "BREW, POST, GET, PROPFIND, WHEN"
|
928
|
+
"Allow" => "BREW, POST, GET, PROPFIND, WHEN"
|
920
929
|
"Refresh" => "Refresh: 20; http://www.ietf.org/rfc/rfc2324.txt"
|
921
930
|
body "I'm a tea pot!"
|
922
931
|
end
|
@@ -924,6 +933,31 @@ De manera similar, también podés asignar el código de estado y encabezados:
|
|
924
933
|
También, al igual que +body+, tanto +status+ como +headers+ pueden utilizarse
|
925
934
|
para obtener sus valores cuando no se les pasa argumentos.
|
926
935
|
|
936
|
+
=== Log (Registro)
|
937
|
+
|
938
|
+
En el ámbito de la petición, el helper +logger+ (registrador) expone
|
939
|
+
una instancia de +Logger+:
|
940
|
+
|
941
|
+
get '/' do
|
942
|
+
logger.info "cargando datos"
|
943
|
+
# ...
|
944
|
+
end
|
945
|
+
|
946
|
+
Este logger tiene en cuenta la configuración de logueo de tu Rack
|
947
|
+
handler. Si el logueo está desactivado, este método va a devolver un
|
948
|
+
objeto que se comporta como un logger pero que en realidad no hace
|
949
|
+
nada. Así, no vas a tener que preocuparte por esta situación.
|
950
|
+
|
951
|
+
Tené en cuenta que el logueo está habilitado por defecto únicamente
|
952
|
+
para <tt>Sinatra::Application</tt>. Si heredaste de
|
953
|
+
<tt>Sinatra::Base</tt>, probablemente quieras habilitarlo manualmente:
|
954
|
+
|
955
|
+
class MiApp < Sinatra::Base
|
956
|
+
configure(:production, :development) do
|
957
|
+
enable :logging
|
958
|
+
end
|
959
|
+
end
|
960
|
+
|
927
961
|
=== Tipos Mime
|
928
962
|
|
929
963
|
Cuando usás <tt>send_file</tt> o archivos estáticos tal vez tengas tipos mime
|
@@ -983,7 +1017,7 @@ búsqueda:
|
|
983
1017
|
|
984
1018
|
O usar una sesión:
|
985
1019
|
|
986
|
-
enable :
|
1020
|
+
enable :session
|
987
1021
|
|
988
1022
|
get '/foo' do
|
989
1023
|
session[:secreto] = 'foo'
|
@@ -1305,9 +1339,7 @@ Podés acceder a estas opciones utilizando el método <tt>settings</tt>:
|
|
1305
1339
|
|
1306
1340
|
[reload_templates] define si se recargan las plantillas entre peticiones.
|
1307
1341
|
|
1308
|
-
Se encuentra activado en el entorno de desarrollo
|
1309
|
-
Ruby 1.8.6 (para compoensar un bug en Ruby que provoca una
|
1310
|
-
pérdida de memoria).
|
1342
|
+
Se encuentra activado en el entorno de desarrollo.
|
1311
1343
|
|
1312
1344
|
[root] directorio raíz del proyecto.
|
1313
1345
|
|
@@ -1331,11 +1363,9 @@ Podés acceder a estas opciones utilizando el método <tt>settings</tt>:
|
|
1331
1363
|
[static] define si Sinatra debe encargarse de servir archivos
|
1332
1364
|
estáticos.
|
1333
1365
|
|
1334
|
-
Deshabilitala cuando usés un servidor capaz de
|
1335
|
-
|
1336
|
-
|
1337
|
-
defecto en el estilo clásico y desactivado en el
|
1338
|
-
el modular.
|
1366
|
+
Deshabilitala cuando usés un servidor capaz de hacerlo
|
1367
|
+
por sí solo, porque mejorará el rendimiento. Se encuentra
|
1368
|
+
habilitada por defecto.
|
1339
1369
|
|
1340
1370
|
[views] directorio de las vistas.
|
1341
1371
|
|
@@ -1367,7 +1397,7 @@ obtener de la variable Rack <tt>sinatra.error</tt>:
|
|
1367
1397
|
Errores personalizados:
|
1368
1398
|
|
1369
1399
|
error MiErrorPersonalizado do
|
1370
|
-
'Lo que pasó fue...'
|
1400
|
+
'Lo que pasó fue...' request.env['sinatra.error'].message
|
1371
1401
|
end
|
1372
1402
|
|
1373
1403
|
Entonces, si pasa esto:
|
@@ -1536,7 +1566,6 @@ entre sus configuraciones:
|
|
1536
1566
|
logging true false
|
1537
1567
|
method_override true false
|
1538
1568
|
inline_templates true false
|
1539
|
-
static true false
|
1540
1569
|
|
1541
1570
|
=== Sirviendo una Aplicación Modular
|
1542
1571
|
|
@@ -1560,7 +1589,7 @@ Iniciar con:
|
|
1560
1589
|
O, con un archivo <tt>config.ru</tt>, que permite usar cualquier handler Rack:
|
1561
1590
|
|
1562
1591
|
# config.ru
|
1563
|
-
require '
|
1592
|
+
require 'mi_app'
|
1564
1593
|
run MiApp
|
1565
1594
|
|
1566
1595
|
Después ejecutar:
|
@@ -1580,7 +1609,7 @@ Escribí el archivo de tu aplicación:
|
|
1580
1609
|
|
1581
1610
|
Y el <tt>config.ru</tt> correspondiente:
|
1582
1611
|
|
1583
|
-
require '
|
1612
|
+
require 'app'
|
1584
1613
|
run Sinatra::Application
|
1585
1614
|
|
1586
1615
|
=== ¿Cuándo Usar config.ru?
|
@@ -1632,48 +1661,6 @@ aplicación basada en Rack (Rails/Ramaze/Camping/...):
|
|
1632
1661
|
get('/') { "Hola #{session['nombre_de_usuario']}." }
|
1633
1662
|
end
|
1634
1663
|
|
1635
|
-
=== Creación Dinámica de Aplicaciones
|
1636
|
-
|
1637
|
-
Puede que en algunas ocasiones quieras crear nuevas aplicaciones en
|
1638
|
-
tiempo de ejecución sin tener que asignarlas a una constante. Para
|
1639
|
-
esto tenés <tt>Sinatra.new</tt>:
|
1640
|
-
|
1641
|
-
require 'sinatra/base'
|
1642
|
-
mi_app = Sinatra.new { get('/') { "hola" } }
|
1643
|
-
mi_app.run!
|
1644
|
-
|
1645
|
-
Acepta como argumento opcional una aplicación desde la que se
|
1646
|
-
heredará:
|
1647
|
-
|
1648
|
-
require 'sinatra/base'
|
1649
|
-
|
1650
|
-
controller = Sinatra.new do
|
1651
|
-
enable :logging
|
1652
|
-
helpers MisHelpers
|
1653
|
-
end
|
1654
|
-
|
1655
|
-
map('/a') do
|
1656
|
-
run Sinatra.new(controller) { get('/') { 'a' } }
|
1657
|
-
end
|
1658
|
-
|
1659
|
-
map('/b') do
|
1660
|
-
run Sinatra.new(controller) { get('/') { 'b' } }
|
1661
|
-
end
|
1662
|
-
|
1663
|
-
Construir aplicaciones de esta forma resulta especialmente útil para
|
1664
|
-
testear extensiones Sinatra o para usar Sinatra en tus librerías.
|
1665
|
-
|
1666
|
-
Por otro lado, hace extremadamente sencillo usar Sinatra como
|
1667
|
-
middleware:
|
1668
|
-
|
1669
|
-
require 'sinatra/base'
|
1670
|
-
|
1671
|
-
use Sinatra do
|
1672
|
-
get('/') { ... }
|
1673
|
-
end
|
1674
|
-
|
1675
|
-
run ProyectoRails::Application
|
1676
|
-
|
1677
1664
|
== Ámbitos y Ligaduras
|
1678
1665
|
|
1679
1666
|
El ámbito en el que te encontrás determina que métodos y variables están
|
@@ -1775,22 +1762,10 @@ Las opciones son:
|
|
1775
1762
|
-s # especifica el servidor/manejador rack (thin es usado por defecto)
|
1776
1763
|
-x # activa el mutex lock (está desactivado por defecto)
|
1777
1764
|
|
1778
|
-
==
|
1779
|
-
|
1780
|
-
Se recomienda instalar Sinatra en Ruby 1.8.7, 1.9.2, JRuby o Rubinius.
|
1765
|
+
== Versiones de Ruby Soportadas
|
1781
1766
|
|
1782
1767
|
Las siguientes versiones de Ruby son soportadas oficialmente:
|
1783
1768
|
|
1784
|
-
[ Ruby 1.8.6 ]
|
1785
|
-
No se recomienda utilizar Sinatra en 1.8.6. Sin embargo, esta versión será
|
1786
|
-
soportada oficialmente hasta que se libere Sinatra 1.3.0. RDoc y CoffeeScript
|
1787
|
-
no son soportadas por esta versión de Ruby. 1.8.6 contiene una falla
|
1788
|
-
importante de pérdida de memoria en su implementación de Hash, que afecta a
|
1789
|
-
las versiones de Sinatra anteriores a 1.1.1. La versión actual evita
|
1790
|
-
explícitamente esta falla a expensas de una disminución del rendimiento. Por
|
1791
|
-
último, Rack >= 1.2 dejó de soportar 1.8.6, por lo que vas a tener que usar
|
1792
|
-
alguna versión 1.1.x.
|
1793
|
-
|
1794
1769
|
[ Ruby 1.8.7 ]
|
1795
1770
|
1.8.7 es soportado completamente. Sin embargo, si no hay nada que te lo
|
1796
1771
|
prohíba, te recomendamos que usés 1.9.2 o cambies a JRuby o Rubinius.
|
@@ -1812,6 +1787,8 @@ Las siguientes versiones de Ruby son soportadas oficialmente:
|
|
1812
1787
|
soporte de JRuby para extensiones C se encuentra en una etapa
|
1813
1788
|
experimental, sin embargo, de momento solo RDiscount se ve afectada.
|
1814
1789
|
|
1790
|
+
<b>Hemos dejado de soportar Ruby 1.8.6.</b>
|
1791
|
+
|
1815
1792
|
Siempre le prestamos atención a las nuevas versiones de Ruby.
|
1816
1793
|
|
1817
1794
|
Las siguientes implementaciones de Ruby no se encuentran soportadas
|
@@ -1820,6 +1797,7 @@ oficialmente. De cualquier manera, pueden ejecutar Sinatra:
|
|
1820
1797
|
* Versiones anteriores de JRuby y Rubinius
|
1821
1798
|
* MacRuby, Maglev e IronRuby
|
1822
1799
|
* Ruby 1.9.0 y 1.9.1
|
1800
|
+
* Ruby 1.8.6 con {backports}[https://github.com/marcandre/backports/#readme]
|
1823
1801
|
|
1824
1802
|
No estar soportada oficialmente, significa que si las cosas solamente se rompen
|
1825
1803
|
ahí y no en una plataforma soportada, asumimos que no es nuestro problema sino
|
@@ -1912,7 +1890,3 @@ siguiendo las especificaciones SemVer y SemVerTag.
|
|
1912
1890
|
* {Twitter}[http://twitter.com/sinatra]
|
1913
1891
|
* {Lista de Correo}[http://groups.google.com/group/sinatrarb/topics]
|
1914
1892
|
* {IRC: #sinatra}[irc://chat.freenode.net/#sinatra] en http://freenode.net
|
1915
|
-
* Documentación de la API para la
|
1916
|
-
{última versión liberada}[http://rubydoc.info/gems/sinatra] o para la
|
1917
|
-
{rama de desarrollo actual}[http://rubydoc.info/github/sinatra/sinatra]
|
1918
|
-
en http://rubydoc.info/
|