middleman 2.0.4 → 2.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +8 -0
- data/lib/middleman.rb +7 -1
- data/lib/middleman/vendor/padrino-core-0.10.0/.document +5 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/.gitignore +22 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/LICENSE +20 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/README.rdoc +294 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/Rakefile +5 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/bin/padrino +9 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core.rb +119 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/application.rb +259 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/application/rendering.rb +228 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/application/routing.rb +821 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/application/showexceptions.rb +18 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/caller.rb +45 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/cli/adapter.rb +24 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/cli/base.rb +152 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/cli/console.rb +20 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/cli/rake.rb +24 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/cli/rake_tasks.rb +59 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/command.rb +27 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/images/404.png +0 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/images/500.png +0 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/loader.rb +182 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/cz.yml +30 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/da.yml +30 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/de.yml +30 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/en.yml +30 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/es.yml +30 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/fr.yml +30 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/hu.yml +30 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/it.yml +37 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/ja.yml +30 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/nl.yml +30 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/no.yml +31 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/pl.yml +30 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/pt_br.yml +37 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/ru.yml +30 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/tr.yml +30 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/uk.yml +30 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/zh_cn.yml +30 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/zh_tw.yml +30 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/logger.rb +344 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/mounter.rb +192 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/reloader.rb +247 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/router.rb +79 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/server.rb +70 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/support_lite.rb +135 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/tasks.rb +23 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/version.rb +15 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/padrino-core.gemspec +38 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/apps/.components +6 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/apps/.gitignore +7 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/apps/complex.rb +27 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/apps/simple.rb +33 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/dependencies/a.rb +9 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/dependencies/b.rb +4 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/dependencies/c.rb +1 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/dependencies/circular/e.rb +13 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/dependencies/circular/f.rb +2 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/dependencies/circular/g.rb +2 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/dependencies/d.rb +4 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/test/helper.rb +101 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/test/test_application.rb +83 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/test/test_core.rb +79 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/test/test_dependencies.rb +44 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/test/test_filters.rb +266 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/test/test_logger.rb +91 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/test/test_mounter.rb +176 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/test/test_reloader_complex.rb +66 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/test/test_reloader_simple.rb +97 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/test/test_rendering.rb +437 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/test/test_router.rb +146 -0
- data/lib/middleman/vendor/padrino-core-0.10.0/test/test_routing.rb +1491 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/.document +5 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/.gitignore +21 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/LICENSE +20 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/README.rdoc +239 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/Rakefile +5 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers.rb +51 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/asset_tag_helpers.rb +288 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/form_builder/abstract_form_builder.rb +220 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/form_builder/standard_form_builder.rb +43 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/form_helpers.rb +446 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/format_helpers.rb +260 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/cz.yml +103 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/da.yml +91 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/de.yml +78 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/en.yml +103 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/es.yml +103 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/fr.yml +79 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/hu.yml +103 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/it.yml +85 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/ja.yml +103 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/nl.yml +78 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/no.yml +91 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/pl.yml +95 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/pt_br.yml +103 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/ru.yml +103 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/tr.yml +103 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/uk.yml +103 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/zh_cn.yml +103 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/zh_tw.yml +103 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/number_helpers.rb +273 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/output_helpers.rb +128 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/output_helpers/abstract_handler.rb +103 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/output_helpers/erb_handler.rb +79 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/output_helpers/haml_handler.rb +64 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/output_helpers/slim_handler.rb +82 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/render_helpers.rb +40 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/tag_helpers.rb +59 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/translation_helpers.rb +21 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/padrino-helpers.gemspec +27 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/app.rb +73 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/capture_concat.erb +14 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/capture_concat.haml +12 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/capture_concat.slim +13 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/content_for.erb +11 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/content_for.haml +9 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/content_for.slim +9 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/content_tag.erb +11 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/content_tag.haml +9 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/content_tag.slim +9 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/current_engine.erb +5 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/current_engine.haml +5 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/current_engine.slim +5 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/fields_for.erb +20 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/fields_for.haml +15 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/fields_for.slim +15 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/form_for.erb +56 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/form_for.haml +47 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/form_for.slim +47 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/form_tag.erb +56 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/form_tag.haml +45 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/form_tag.slim +45 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/link_to.erb +5 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/link_to.haml +4 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/link_to.slim +4 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/mail_to.erb +3 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/mail_to.haml +3 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/mail_to.slim +3 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/meta_tag.erb +3 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/meta_tag.haml +3 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/meta_tag.slim +3 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/partials/_erb.erb +1 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/partials/_haml.haml +1 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/partials/_slim.slim +1 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/simple_partial.erb +1 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/simple_partial.haml +1 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/simple_partial.slim +1 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/app.rb +45 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/current_engine.haml +5 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/current_engines/_erb.erb +1 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/current_engines/_haml.haml +1 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/current_engines/_slim.slim +1 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/erb/test.erb +1 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/explicit_engine.haml +5 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/haml/test.haml +1 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/template/_user.haml +7 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/template/haml_template.haml +1 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/template/some_template.haml +2 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/helper.rb +78 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_asset_tag_helpers.rb +320 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_form_builder.rb +998 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_form_helpers.rb +645 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_format_helpers.rb +227 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_number_helpers.rb +136 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_output_helpers.rb +133 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_render_helpers.rb +69 -0
- data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_tag_helpers.rb +100 -0
- data/lib/middleman/version.rb +1 -1
- data/middleman.gemspec +6 -2
- metadata +218 -67
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
module Padrino
|
|
2
|
+
class ApplicationSetupError < RuntimeError #:nodoc:
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
##
|
|
6
|
+
# Subclasses of this become independent Padrino applications (stemming from Sinatra::Application)
|
|
7
|
+
# These subclassed applications can be easily mounted into other Padrino applications as well.
|
|
8
|
+
#
|
|
9
|
+
class Application < Sinatra::Base
|
|
10
|
+
register Padrino::Routing # Support for advanced routing, controllers, url_for
|
|
11
|
+
|
|
12
|
+
class << self
|
|
13
|
+
|
|
14
|
+
def inherited(base) #:nodoc:
|
|
15
|
+
logger.devel "Setup #{base}"
|
|
16
|
+
CALLERS_TO_IGNORE.concat(PADRINO_IGNORE_CALLERS)
|
|
17
|
+
base.default_configuration!
|
|
18
|
+
base.prerequisites.concat([
|
|
19
|
+
File.join(base.root, "/models.rb"),
|
|
20
|
+
File.join(base.root, "/models/**/*.rb"),
|
|
21
|
+
File.join(base.root, "/lib.rb"),
|
|
22
|
+
File.join(base.root, "/lib/**/*.rb")
|
|
23
|
+
]).uniq!
|
|
24
|
+
Padrino.require_dependencies(base.prerequisites)
|
|
25
|
+
super(base) # Loading the subclass inherited method
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
##
|
|
29
|
+
# Hooks into when a new instance of the application is created
|
|
30
|
+
# This is used because putting the configuration into inherited doesn't
|
|
31
|
+
# take into account overwritten app settings inside subclassed definitions
|
|
32
|
+
# Only performs the setup first time application is initialized.
|
|
33
|
+
#
|
|
34
|
+
def new(*args, &bk)
|
|
35
|
+
setup_application!
|
|
36
|
+
logging, logging_was = false, logging
|
|
37
|
+
show_exceptions, show_exceptions_was = false, show_exceptions
|
|
38
|
+
super(*args, &bk)
|
|
39
|
+
ensure
|
|
40
|
+
logging, show_exceptions = logging_was, show_exceptions_was
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
##
|
|
44
|
+
# Reloads the application files from all defined load paths
|
|
45
|
+
#
|
|
46
|
+
# This method is used from our Padrino Reloader during development mode
|
|
47
|
+
# in order to reload the source files.
|
|
48
|
+
#
|
|
49
|
+
# ==== Examples
|
|
50
|
+
#
|
|
51
|
+
# MyApp.reload!
|
|
52
|
+
#
|
|
53
|
+
def reload!
|
|
54
|
+
logger.devel "Reloading #{self}"
|
|
55
|
+
@_dependencies = nil # Reset dependencies
|
|
56
|
+
reset! # Reset sinatra app
|
|
57
|
+
reset_routes! # Remove all existing user-defined application routes
|
|
58
|
+
Padrino.require_dependencies(self.app_file, :force => true) # Reload the app file
|
|
59
|
+
require_dependencies # Reload dependencies
|
|
60
|
+
register_initializers # Reload our middlewares
|
|
61
|
+
default_filters! # Reload filters
|
|
62
|
+
default_errors! # Reload our errors
|
|
63
|
+
I18n.reload! if defined?(I18n) # Reload also our translations
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
##
|
|
67
|
+
# Resets application routes to only routes not defined by the user
|
|
68
|
+
#
|
|
69
|
+
# ==== Examples
|
|
70
|
+
#
|
|
71
|
+
# MyApp.reset_routes!
|
|
72
|
+
#
|
|
73
|
+
def reset_routes!
|
|
74
|
+
reset_router!
|
|
75
|
+
default_routes!
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
##
|
|
79
|
+
# Returns the routes of our app.
|
|
80
|
+
#
|
|
81
|
+
# ==== Examples
|
|
82
|
+
#
|
|
83
|
+
# MyApp.routes
|
|
84
|
+
#
|
|
85
|
+
def routes
|
|
86
|
+
router.routes
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
##
|
|
90
|
+
# Setup the application by registering initializers, load paths and logger
|
|
91
|
+
# Invoked automatically when an application is first instantiated
|
|
92
|
+
#
|
|
93
|
+
def setup_application!
|
|
94
|
+
return if @_configured
|
|
95
|
+
self.register_initializers
|
|
96
|
+
self.require_dependencies
|
|
97
|
+
self.disable :logging # We need do that as default because Sinatra use commonlogger.
|
|
98
|
+
self.default_filters!
|
|
99
|
+
self.default_routes!
|
|
100
|
+
self.default_errors!
|
|
101
|
+
if defined?(I18n)
|
|
102
|
+
I18n.load_path << self.locale_path
|
|
103
|
+
I18n.reload!
|
|
104
|
+
end
|
|
105
|
+
@_configured = true
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
##
|
|
109
|
+
# Run the Padrino app as a self-hosted server using
|
|
110
|
+
# Thin, Mongrel or WEBrick (in that order)
|
|
111
|
+
#
|
|
112
|
+
def run!(options={})
|
|
113
|
+
return unless Padrino.load!
|
|
114
|
+
Padrino.mount(self.to_s).to("/")
|
|
115
|
+
Padrino.run!(options)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
##
|
|
119
|
+
# Returns the used $LOAD_PATHS from this application
|
|
120
|
+
#
|
|
121
|
+
def load_paths
|
|
122
|
+
@_load_paths ||= %w(models lib mailers controllers helpers).map { |path| File.join(self.root, path) }
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
##
|
|
126
|
+
# Returns default list of path globs to load as dependencies
|
|
127
|
+
# Appends custom dependency patterns to the be loaded for your Application
|
|
128
|
+
#
|
|
129
|
+
# ==== Examples
|
|
130
|
+
# MyApp.dependencies << "#{Padrino.root}/uploaders/**/*.rb"
|
|
131
|
+
# MyApp.dependencies << Padrino.root('other_app', 'controllers.rb')
|
|
132
|
+
#
|
|
133
|
+
def dependencies
|
|
134
|
+
@_dependencies ||= [
|
|
135
|
+
"urls.rb", "config/urls.rb", "mailers/*.rb", "mailers.rb",
|
|
136
|
+
"controllers/**/*.rb", "controllers.rb", "helpers/**/*.rb", "helpers.rb"
|
|
137
|
+
].map { |file| Dir[File.join(self.root, file)] }.flatten
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
##
|
|
141
|
+
# An array of file to load before your app.rb, basically are files wich our app depends on.
|
|
142
|
+
#
|
|
143
|
+
# By default we look for files:
|
|
144
|
+
#
|
|
145
|
+
# yourapp/models.rb
|
|
146
|
+
# yourapp/models/**/*.rb
|
|
147
|
+
# yourapp/lib.rb
|
|
148
|
+
# yourapp/lib/**/*.rb
|
|
149
|
+
#
|
|
150
|
+
# ==== Examples
|
|
151
|
+
# MyApp.prerequisites << Padrino.root('my_app', 'custom_model.rb')
|
|
152
|
+
#
|
|
153
|
+
def prerequisites
|
|
154
|
+
@_prerequisites ||= []
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
protected
|
|
158
|
+
##
|
|
159
|
+
# Defines default settings for Padrino application
|
|
160
|
+
#
|
|
161
|
+
def default_configuration!
|
|
162
|
+
# Overwriting Sinatra defaults
|
|
163
|
+
set :app_file, File.expand_path(caller_files.first || $0) # Assume app file is first caller
|
|
164
|
+
set :environment, Padrino.env
|
|
165
|
+
set :reload, Proc.new { development? }
|
|
166
|
+
set :logging, Proc.new { development? }
|
|
167
|
+
set :method_override, true
|
|
168
|
+
set :sessions, false
|
|
169
|
+
set :public, Proc.new { Padrino.root('public', uri_root) }
|
|
170
|
+
set :views, Proc.new { File.join(root, "views") }
|
|
171
|
+
set :images_path, Proc.new { File.join(public, "images") }
|
|
172
|
+
# Padrino specific
|
|
173
|
+
set :uri_root, "/"
|
|
174
|
+
set :app_name, self.to_s.underscore.to_sym
|
|
175
|
+
set :default_builder, 'StandardFormBuilder'
|
|
176
|
+
set :flash, defined?(Rack::Flash)
|
|
177
|
+
set :authentication, false
|
|
178
|
+
# Padrino locale
|
|
179
|
+
set :locale_path, Proc.new { Dir[File.join(self.root, "/locale/**/*.{rb,yml}")] }
|
|
180
|
+
# Load the Global Configurations
|
|
181
|
+
class_eval(&Padrino.apps_configuration) if Padrino.apps_configuration
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
##
|
|
185
|
+
# We need to add almost __sinatra__ images.
|
|
186
|
+
#
|
|
187
|
+
def default_routes!
|
|
188
|
+
configure :development do
|
|
189
|
+
get '/__sinatra__/:image.png' do
|
|
190
|
+
content_type :png
|
|
191
|
+
filename = File.dirname(__FILE__) + "/images/#{params[:image]}.png"
|
|
192
|
+
send_file filename
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
##
|
|
198
|
+
# This filter it's used for know the format of the request, and automatically set the content type.
|
|
199
|
+
#
|
|
200
|
+
def default_filters!
|
|
201
|
+
before do
|
|
202
|
+
unless @_content_type
|
|
203
|
+
@_content_type = :html
|
|
204
|
+
response['Content-Type'] = 'text/html;charset=utf-8'
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
##
|
|
210
|
+
# This log errors for production environments
|
|
211
|
+
#
|
|
212
|
+
def default_errors!
|
|
213
|
+
configure :production do
|
|
214
|
+
error ::Exception do
|
|
215
|
+
boom = env['sinatra.error']
|
|
216
|
+
logger.error ["#{boom.class} - #{boom.message}:", *boom.backtrace].join("\n ")
|
|
217
|
+
response.status = 500
|
|
218
|
+
content_type 'text/html'
|
|
219
|
+
'<h1>Internal Server Error</h1>'
|
|
220
|
+
end
|
|
221
|
+
end
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
##
|
|
225
|
+
# Requires the Padrino middleware
|
|
226
|
+
#
|
|
227
|
+
def register_initializers
|
|
228
|
+
use Padrino::ShowExceptions if show_exceptions?
|
|
229
|
+
use Padrino::Logger::Rack, uri_root if Padrino.logger && logging?
|
|
230
|
+
use Padrino::Reloader::Rack if reload?
|
|
231
|
+
use Rack::Flash, :sweep => true if flash?
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
##
|
|
235
|
+
# Requires all files within the application load paths
|
|
236
|
+
#
|
|
237
|
+
def require_dependencies
|
|
238
|
+
Padrino.set_load_paths(*load_paths)
|
|
239
|
+
Padrino.require_dependencies(dependencies, :force => true)
|
|
240
|
+
end
|
|
241
|
+
end # self
|
|
242
|
+
|
|
243
|
+
# TODO Remove deprecated render inclusion in a few versions
|
|
244
|
+
# Detects if a user is incorrectly using 'render' and warns them about the fix
|
|
245
|
+
# In 0.10.0, Padrino::Rendering now has to be explicitly included in the application
|
|
246
|
+
def render(*args)
|
|
247
|
+
if !defined?(DEFAULT_RENDERING_OPTIONS) && !@_render_included &&
|
|
248
|
+
(args.size == 1 || (args.size == 2 && args[0].is_a?(String) && args[1].is_a?(Hash)))
|
|
249
|
+
logger.warn "[Deprecation] Please 'register Padrino::Rendering' for each application as shown here:
|
|
250
|
+
https://gist.github.com/1d36a35794dbbd664ea4 for 'render' to function as expected"
|
|
251
|
+
self.class.instance_eval { register Padrino::Rendering }
|
|
252
|
+
@_render_included = true
|
|
253
|
+
render(*args)
|
|
254
|
+
else # pass through, rendering is valid
|
|
255
|
+
super(*args)
|
|
256
|
+
end
|
|
257
|
+
end # render method
|
|
258
|
+
end # Application
|
|
259
|
+
end # Padrino
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
require 'padrino-core/support_lite' unless defined?(SupportLite)
|
|
2
|
+
|
|
3
|
+
module Padrino
|
|
4
|
+
##
|
|
5
|
+
# Padrino enhances the Sinatra ‘render’ method to have support for automatic template engine detection,
|
|
6
|
+
# enhanced layout functionality, locale enabled rendering, among other features.
|
|
7
|
+
#
|
|
8
|
+
module Rendering
|
|
9
|
+
class TemplateNotFound < RuntimeError #:nodoc:
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
##
|
|
13
|
+
# This is an array of file patterns to ignore.
|
|
14
|
+
# If your editor add a suffix during editing to your files please add it like:
|
|
15
|
+
#
|
|
16
|
+
# Padrino::Rendering::IGNORE_FILE_PATTERN << /~$/
|
|
17
|
+
#
|
|
18
|
+
IGNORE_FILE_PATTERN = [
|
|
19
|
+
/~$/ # This is for Gedit
|
|
20
|
+
] unless defined?(IGNORE_FILE_PATTERN)
|
|
21
|
+
|
|
22
|
+
##
|
|
23
|
+
# Default rendering options used in the #render-method
|
|
24
|
+
#
|
|
25
|
+
DEFAULT_RENDERING_OPTIONS = { :strict_format => false, :raise_exceptions => true } unless defined?(DEFAULT_RENDERING_OPTIONS)
|
|
26
|
+
|
|
27
|
+
##
|
|
28
|
+
# Main class that register this extension
|
|
29
|
+
#
|
|
30
|
+
class << self
|
|
31
|
+
def registered(app)
|
|
32
|
+
app.send(:include, InstanceMethods)
|
|
33
|
+
app.extend(ClassMethods)
|
|
34
|
+
end
|
|
35
|
+
alias :included :registered
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
module ClassMethods
|
|
39
|
+
##
|
|
40
|
+
# Use layout like rails does or if a block given then like sinatra.
|
|
41
|
+
# If used without a block, sets the current layout for the route.
|
|
42
|
+
#
|
|
43
|
+
# By default, searches in your:
|
|
44
|
+
#
|
|
45
|
+
# +app+/+views+/+layouts+/+application+.(+haml+|+erb+|+xxx+)
|
|
46
|
+
# +app+/+views+/+layout_name+.(+haml+|+erb+|+xxx+)
|
|
47
|
+
#
|
|
48
|
+
# If you define +layout+ :+custom+ then searches for your layouts in
|
|
49
|
+
# +app+/+views+/+layouts+/+custom+.(+haml+|+erb+|+xxx+)
|
|
50
|
+
# +app+/+views+/+custom+.(+haml+|+erb+|+xxx+)
|
|
51
|
+
#
|
|
52
|
+
def layout(name=:layout, &block)
|
|
53
|
+
return super(name, &block) if block_given?
|
|
54
|
+
@layout = name
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
##
|
|
58
|
+
# Returns the cached template file to render for a given url, content_type and locale.
|
|
59
|
+
#
|
|
60
|
+
# render_options = [template_path, content_type, locale]
|
|
61
|
+
#
|
|
62
|
+
def fetch_template_file(render_options)
|
|
63
|
+
(@_cached_templates ||= {})[render_options]
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
###
|
|
67
|
+
# Caches the template file for the given rendering options
|
|
68
|
+
#
|
|
69
|
+
# render_options = [template_path, content_type, locale]
|
|
70
|
+
#
|
|
71
|
+
def cache_template_file!(template_file, render_options)
|
|
72
|
+
(@_cached_templates ||= {})[render_options] = template_file || []
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
##
|
|
76
|
+
# Returns the cached layout path.
|
|
77
|
+
#
|
|
78
|
+
def fetch_layout_path(given_layout=nil)
|
|
79
|
+
layout_name = given_layout || @layout || :application
|
|
80
|
+
@_cached_layout ||= {}
|
|
81
|
+
cached_layout_path = @_cached_layout[layout_name]
|
|
82
|
+
return cached_layout_path if cached_layout_path
|
|
83
|
+
has_layout_at_root = Dir["#{views}/#{layout_name}.*"].any?
|
|
84
|
+
layout_path = has_layout_at_root ? layout_name.to_sym : File.join('layouts', layout_name.to_s).to_sym
|
|
85
|
+
@_cached_layout[layout_name] = layout_path unless reload_templates?
|
|
86
|
+
layout_path
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
module InstanceMethods
|
|
91
|
+
attr_reader :current_engine
|
|
92
|
+
|
|
93
|
+
def content_type(type=nil, params={}) #:nodoc:
|
|
94
|
+
type.nil? ? @_content_type : super(type, params)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
private
|
|
98
|
+
##
|
|
99
|
+
# Enhancing Sinatra render functionality for:
|
|
100
|
+
#
|
|
101
|
+
# * Using layout similar to rails
|
|
102
|
+
# * Use render 'path/to/my/template' (without symbols)
|
|
103
|
+
# * Use render 'path/to/my/template' (with engine lookup)
|
|
104
|
+
# * Use render 'path/to/template.haml' (with explicit engine lookup)
|
|
105
|
+
# * Use render 'path/to/template', :layout => false
|
|
106
|
+
# * Use render 'path/to/template', :layout => false, :engine => 'haml'
|
|
107
|
+
# * Use render { :a => 1, :b => 2, :c => 3 } # => return a json string
|
|
108
|
+
#
|
|
109
|
+
def render(engine, data=nil, options={}, locals={}, &block)
|
|
110
|
+
# If engine is a hash then render data converted to json
|
|
111
|
+
return engine.to_json if engine.is_a?(Hash)
|
|
112
|
+
|
|
113
|
+
# If engine is nil, ignore engine parameter and shift up all arguments
|
|
114
|
+
# render nil, "index", { :layout => true }, { :localvar => "foo" }
|
|
115
|
+
engine, data, options = data, options, locals if engine.nil? && data
|
|
116
|
+
|
|
117
|
+
# Data is a hash of options when no engine isn't explicit
|
|
118
|
+
# render "index", { :layout => true }, { :localvar => "foo" }
|
|
119
|
+
# Data is options, and options is locals in this case
|
|
120
|
+
data, options, locals = nil, data, options if data.is_a?(Hash)
|
|
121
|
+
|
|
122
|
+
# If data is unassigned then this is a likely a template to be resolved
|
|
123
|
+
# This means that no engine was explicitly defined
|
|
124
|
+
data, engine = *resolve_template(engine, options) if data.nil?
|
|
125
|
+
|
|
126
|
+
# Setup root
|
|
127
|
+
root = settings.respond_to?(:root) ? settings.root : ""
|
|
128
|
+
|
|
129
|
+
# Use @layout if it exists
|
|
130
|
+
options[:layout] = @layout if options[:layout].nil?
|
|
131
|
+
|
|
132
|
+
# Resolve layouts similar to in Rails
|
|
133
|
+
if (options[:layout].nil? || options[:layout] == true) && !settings.templates.has_key?(:layout)
|
|
134
|
+
layout_path, layout_engine = *resolved_layout
|
|
135
|
+
options[:layout] = layout_path || false # We need to force layout false so sinatra don't try to render it
|
|
136
|
+
options[:layout] = false unless layout_engine == engine # TODO allow different layout engine
|
|
137
|
+
options[:layout_engine] = layout_engine || engine if options[:layout]
|
|
138
|
+
logger.debug "Resolving layout #{root}/views#{options[:layout]}" if defined?(logger) && options[:layout].present?
|
|
139
|
+
elsif options[:layout].present?
|
|
140
|
+
options[:layout] = settings.fetch_layout_path(options[:layout] || @layout)
|
|
141
|
+
logger.debug "Resolving layout #{root}/views#{options[:layout]}" if defined?(logger)
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# Cleanup the template
|
|
145
|
+
@current_engine, engine_was = engine, @current_engine
|
|
146
|
+
@_out_buf, _buf_was = "", @_out_buf
|
|
147
|
+
|
|
148
|
+
# Pass arguments to Sinatra render method
|
|
149
|
+
super(engine, data, options.dup, locals, &block)
|
|
150
|
+
ensure
|
|
151
|
+
@current_engine = engine_was
|
|
152
|
+
@_out_buf = _buf_was
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
##
|
|
156
|
+
# Returns the located layout tuple to be used for the rendered template (if available)
|
|
157
|
+
#
|
|
158
|
+
# ==== Example
|
|
159
|
+
#
|
|
160
|
+
# resolve_layout
|
|
161
|
+
# => ["/layouts/custom", :erb]
|
|
162
|
+
# => [nil, nil]
|
|
163
|
+
#
|
|
164
|
+
def resolved_layout
|
|
165
|
+
located_layout = resolve_template(settings.fetch_layout_path, :raise_exceptions => false, :strict_format => true)
|
|
166
|
+
located_layout ? located_layout : [nil, nil]
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
##
|
|
170
|
+
# Returns the template path and engine that match content_type (if present), I18n.locale.
|
|
171
|
+
#
|
|
172
|
+
# === Options
|
|
173
|
+
#
|
|
174
|
+
# :strict_format:: The resolved template must match the content_type of the request (defaults to false)
|
|
175
|
+
# :raise_exceptions:: Raises a +TemplateNotFound+ exception if the template cannot be located.
|
|
176
|
+
#
|
|
177
|
+
# ==== Example
|
|
178
|
+
#
|
|
179
|
+
# get "/foo", :provides => [:html, :js] do; render 'path/to/foo'; end
|
|
180
|
+
# # If you request "/foo.js" with I18n.locale == :ru => [:"/path/to/foo.ru.js", :erb]
|
|
181
|
+
# # If you request "/foo" with I18n.locale == :de => [:"/path/to/foo.de.haml", :haml]
|
|
182
|
+
#
|
|
183
|
+
def resolve_template(template_path, options={})
|
|
184
|
+
# Fetch cached template for rendering options
|
|
185
|
+
template_path = "/#{template_path}" unless template_path.to_s[0] == ?/
|
|
186
|
+
rendering_options = [template_path, content_type, locale]
|
|
187
|
+
cached_template = settings.fetch_template_file(rendering_options)
|
|
188
|
+
return cached_template if cached_template
|
|
189
|
+
|
|
190
|
+
# Resolve view path and options
|
|
191
|
+
options.reverse_merge!(DEFAULT_RENDERING_OPTIONS)
|
|
192
|
+
view_path = options.delete(:views) || settings.views || "./views"
|
|
193
|
+
target_extension = File.extname(template_path)[1..-1] || "none" # explicit template extension
|
|
194
|
+
template_path = template_path.chomp(".#{target_extension}")
|
|
195
|
+
|
|
196
|
+
# Generate potential template candidates
|
|
197
|
+
templates = Dir[File.join(view_path, template_path) + ".*"].map do |file|
|
|
198
|
+
template_engine = File.extname(file)[1..-1].to_sym # retrieves engine extension
|
|
199
|
+
template_file = file.sub(view_path, '').chomp(".#{template_engine}").to_sym # retrieves template filename
|
|
200
|
+
[template_file, template_engine] unless IGNORE_FILE_PATTERN.any? { |pattern| template_engine.to_s =~ pattern }
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
# Check if we have a simple content type
|
|
204
|
+
simple_content_type = [:html, :plain].include?(content_type)
|
|
205
|
+
|
|
206
|
+
# Resolve final template to render
|
|
207
|
+
located_template =
|
|
208
|
+
templates.find { |file, e| file.to_s == "#{template_path}.#{locale}.#{content_type}" } ||
|
|
209
|
+
templates.find { |file, e| file.to_s == "#{template_path}.#{locale}" && simple_content_type } ||
|
|
210
|
+
templates.find { |file, e| File.extname(file.to_s) == ".#{target_extension}" or e.to_s == target_extension.to_s } ||
|
|
211
|
+
templates.find { |file, e| file.to_s == "#{template_path}.#{content_type}" } ||
|
|
212
|
+
templates.find { |file, e| file.to_s == "#{template_path}" && simple_content_type } ||
|
|
213
|
+
(!options[:strict_format] && templates.first) # If not strict, fall back to the first located template
|
|
214
|
+
|
|
215
|
+
raise TemplateNotFound, "Template '#{template_path}' not found in '#{view_path}'!" if !located_template && options[:raise_exceptions]
|
|
216
|
+
settings.cache_template_file!(located_template, rendering_options) unless settings.reload_templates?
|
|
217
|
+
located_template
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
##
|
|
221
|
+
# Return the I18n.locale if I18n is defined
|
|
222
|
+
#
|
|
223
|
+
def locale
|
|
224
|
+
I18n.locale if defined?(I18n)
|
|
225
|
+
end
|
|
226
|
+
end # InstanceMethods
|
|
227
|
+
end # Rendering
|
|
228
|
+
end # Padrino
|