diff --git a/middleman-core/lib/middleman-core/core_extensions/rendering.rb b/middleman-core/lib/middleman-core/core_extensions/rendering.rb index c40bdbfb..368d8808 100644 --- a/middleman-core/lib/middleman-core/core_extensions/rendering.rb +++ b/middleman-core/lib/middleman-core/core_extensions/rendering.rb @@ -413,8 +413,7 @@ module Middleman @_out_buf = _buf_was end - # concat_safe_content - concat_content render_individual_file(layout_path, @current_locs || {}, @current_opts || {}, self) { content } + concat_safe_content render_individual_file(layout_path, @current_locs || {}, @current_opts || {}, self) { content } ensure @current_engine = engine_was end diff --git a/middleman-core/lib/middleman-core/meta_pages/sitemap_resource.rb b/middleman-core/lib/middleman-core/meta_pages/sitemap_resource.rb index 85a9b2c0..096f5872 100644 --- a/middleman-core/lib/middleman-core/meta_pages/sitemap_resource.rb +++ b/middleman-core/lib/middleman-core/meta_pages/sitemap_resource.rb @@ -1,6 +1,6 @@ -if defined?(::Padrino::Helpers) - require 'vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/support_lite' - require 'vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers' +if !defined?(::Padrino::Helpers) + require 'vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/support_lite' + require 'vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers' end module Middleman diff --git a/middleman-core/lib/middleman-more/core_extensions/default_helpers.rb b/middleman-core/lib/middleman-more/core_extensions/default_helpers.rb index 670aa831..99573811 100644 --- a/middleman-core/lib/middleman-more/core_extensions/default_helpers.rb +++ b/middleman-core/lib/middleman-more/core_extensions/default_helpers.rb @@ -5,9 +5,9 @@ class Middleman::CoreExtensions::DefaultHelpers < ::Middleman::Extension require 'active_support/core_ext/object/to_query' - if defined?(::Padrino::Helpers) - require 'vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/support_lite' - require 'vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers' + if !defined?(::Padrino::Helpers) + require 'vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/support_lite' + require 'vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers' end app.helpers ::Padrino::Helpers::OutputHelpers @@ -18,7 +18,7 @@ class Middleman::CoreExtensions::DefaultHelpers < ::Middleman::Extension app.helpers ::Padrino::Helpers::RenderHelpers app.helpers ::Padrino::Helpers::NumberHelpers # app.helpers ::Padrino::Helpers::TranslationHelpers - # app.helpers ::Padrino::Helpers::Breadcrumbs + app.helpers ::Padrino::Helpers::Breadcrumbs app.config.define_setting :relative_links, false, 'Whether to generate relative links instead of absolute ones' end diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/cli/rake.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/cli/rake.rb deleted file mode 100644 index f0154150..00000000 --- a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/cli/rake.rb +++ /dev/null @@ -1,25 +0,0 @@ -require File.expand_path('../../tasks', __FILE__) -require 'rake' -require 'rake/dsl_definition' -require 'thor' -require 'securerandom' unless defined?(SecureRandom) - -module PadrinoTasks - def self.init(init=false) - Padrino::Tasks.files.flatten.uniq.each { |rakefile| Rake.application.add_import(rakefile) rescue puts "<= Failed load #{ext}" } - if init - Rake.application.init - Rake.application.instance_variable_set(:@rakefile, __FILE__) - load(File.expand_path('../rake_tasks.rb', __FILE__)) - Rake.application.load_imports - Rake.application.top_level - else - load(File.expand_path('../rake_tasks.rb', __FILE__)) - Rake.application.load_imports - end - end -end - -def shell - @_shell ||= Thor::Base.shell.new -end diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/.document b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/.document similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/.document rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/.document diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/.gitignore b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/.gitignore similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/.gitignore rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/.gitignore diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/.yardopts b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/.yardopts similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/.yardopts rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/.yardopts diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/LICENSE.txt b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/LICENSE.txt similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/LICENSE.txt rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/LICENSE.txt diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/README.rdoc b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/README.rdoc similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/README.rdoc rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/README.rdoc diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/Rakefile b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/Rakefile similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/Rakefile rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/Rakefile diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/bin/padrino b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/bin/padrino similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/bin/padrino rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/bin/padrino diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core.rb similarity index 70% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core.rb index 635e9074..52b800da 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core.rb @@ -1,8 +1,19 @@ require 'sinatra/base' -require 'padrino-core/support_lite' unless defined?(SupportLite) +require 'padrino-core/version' +require 'padrino-core/support_lite' +require 'padrino-core/application' + +require 'padrino-core/caller' +require 'padrino-core/command' +require 'padrino-core/loader' +require 'padrino-core/logger' +require 'padrino-core/mounter' +require 'padrino-core/reloader' +require 'padrino-core/router' +require 'padrino-core/server' +require 'padrino-core/tasks' +require 'padrino-core/module' -FileSet.glob_require('padrino-core/application/*.rb', __FILE__) -FileSet.glob_require('padrino-core/*.rb', __FILE__) # The Padrino environment (falls back to the rack env or finally develop) PADRINO_ENV = ENV["PADRINO_ENV"] ||= ENV["RACK_ENV"] ||= "development" unless defined?(PADRINO_ENV) @@ -80,7 +91,14 @@ module Padrino # end # def configure_apps(&block) - @_global_configuration = block if block_given? + return unless block_given? + @@_global_configurations ||= [] + @@_global_configurations << block + @_global_configuration = lambda do |app| + @@_global_configurations.each do |configuration| + app.class_eval(&configuration) + end + end end ## @@ -148,5 +166,41 @@ module Padrino def use(m, *args, &block) middleware << [m, args, block] end + + ## + # Registers a gem with padrino. This relieves the caller from setting up + # loadpaths by himself and enables Padrino to look up apps in gem folder. + # + # The name given has to be the proper gem name as given in the gemspec. + # + # @param [String] name + # The name of the gem being registered. + # + # @param [Module] main_module + # The main module of the gem. + # + # @returns The root path of the loaded gem + def gem(name, main_module) + _,spec = Gem.loaded_specs.find { |spec_name, spec| spec_name == name } + gems << spec + modules << main_module + spec.full_gem_path + end + + ## + # Returns all currently known padrino gems. + # + # @returns [Gem::Specification] + def gems + @gems ||= [] + end + + ## + # All loaded Padrino modules. + # + # @returns [] + def modules + @modules ||= [] + end end # self end # Padrino diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/application.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/application.rb similarity index 85% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/application.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/application.rb index d7723a57..95b12d92 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/application.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/application.rb @@ -1,3 +1,8 @@ +require 'padrino-core/application/rendering' +require 'padrino-core/application/routing' +require 'padrino-core/application/flash' +require 'padrino-core/application/showexceptions' + module Padrino class ApplicationSetupError < RuntimeError # @private end @@ -173,17 +178,21 @@ module Padrino set :method_override, true set :sessions, false set :public_folder, Proc.new { Padrino.root('public', uri_root) } - set :views, Proc.new { File.join(root, "views") } - set :images_path, Proc.new { File.join(public, "images") } - set :protection, false + set :views, Proc.new { File.join(root, 'views') } + set :images_path, Proc.new { File.join(public_folder, 'images') } + set :protection, true + # Haml specific + set :haml, { :ugly => (Padrino.env == :production) } if defined?(Haml) # Padrino specific set :uri_root, '/' set :app_name, settings.to_s.underscore.to_sym set :default_builder, 'StandardFormBuilder' - set :flash, defined?(Sinatra::Flash) || defined?(Rack::Flash) set :authentication, false # Padrino locale set :locale_path, Proc.new { Dir[File.join(settings.root, '/locale/**/*.{rb,yml}')] } + # Authenticity token + set :protect_from_csrf, false + set :allow_disabled_csrf, false # Load the Global Configurations class_eval(&Padrino.apps_configuration) if Padrino.apps_configuration end @@ -241,27 +250,42 @@ module Padrino # Also initializes the application after setting up the middleware def setup_default_middleware(builder) setup_sessions builder - setup_flash builder builder.use Padrino::ShowExceptions if show_exceptions? builder.use Padrino::Logger::Rack, uri_root if Padrino.logger && logging? builder.use Padrino::Reloader::Rack if reload? builder.use Rack::MethodOverride if method_override? builder.use Rack::Head + register Padrino::Flash setup_protection builder + setup_csrf_protection builder setup_application! end - # TODO Remove this in a few versions (rack-flash deprecation) - # Move register Sinatra::Flash into setup_default_middleware - # Initializes flash using sinatra-flash or rack-flash - def setup_flash(builder) - register Sinatra::Flash if flash? && defined?(Sinatra::Flash) - if defined?(Rack::Flash) && !defined?(Sinatra::Flash) - logger.warn %Q{ - [Deprecation] In Gemfile, 'rack-flash' should be replaced with 'sinatra-flash'! - Rack-Flash is not compatible with later versions of Rack and should be replaced. - } - builder.use Rack::Flash, :sweep => true if flash? + # sets up csrf protection for the app + def setup_csrf_protection(builder) + if protect_from_csrf? && !sessions? + raise(<<-ERROR) +`protect_from_csrf` is activated, but `sessions` are not. To enable csrf +protection, use: + + enable :sessions + +or deactivate protect_from_csrf: + + disable :protect_from_csrf +ERROR + end + + if protect_from_csrf? + if allow_disabled_csrf? + builder.use Rack::Protection::AuthenticityToken, + :reaction => :report, + :report_key => 'protection.csrf.failed', + :logger => logger + else + builder.use Rack::Protection::AuthenticityToken, + :logger => logger + end end end end # self diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/application/flash.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/application/flash.rb new file mode 100644 index 00000000..923ca110 --- /dev/null +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/application/flash.rb @@ -0,0 +1,229 @@ +module Padrino + module Flash + + class << self + # @private + def registered(app) + app.helpers Helpers + app.after do + session[:_flash] = @_flash.next if @_flash + end + end + end # self + + class Storage + include Enumerable + + # @private + def initialize(session=nil) + @_now = session || {} + @_next = {} + end + + def now + @_now + end + + def next + @_next + end + + # @since 0.10.8 + # @api public + def [](type) + @_now[type] + end + + # @since 0.10.8 + # @api public + def []=(type, message) + @_next[type] = message + end + + # @since 0.10.8 + # @api public + def delete(type) + @_now.delete(type) + self + end + + # @since 0.10.8 + # @api public + def keys + @_now.keys + end + + # @since 0.10.8 + # @api public + def key?(type) + @_now.key?(type) + end + + # @since 0.10.8 + # @api public + def each(&block) + @_now.each(&block) + end + + # @since 0.10.8 + # @api public + def replace(hash) + @_now.replace(hash) + self + end + + # @since 0.10.8 + # @api public + def update(hash) + @_now.update(hash) + self + end + alias_method :merge!, :update + + # @since 0.10.8 + # @api public + def sweep + @_now.replace(@_next) + @_next = {} + self + end + + # @since 0.10.8 + # @api public + def keep(key = nil) + if key + @_next[key] = @_now[key] + else + @_next.merge!(@_now) + end + self + end + + # @since 0.10.8 + # @api public + def discard(key = nil) + if key + @_next.delete(key) + else + @_next = {} + end + self + end + + # @since 0.10.8 + # @api public + def clear + @_now.clear + end + + # @since 0.10.8 + # @api public + def empty? + @_now.empty? + end + + # @since 0.10.8 + # @api public + def to_hash + @_now.dup + end + + def length + @_now.length + end + alias_method :size, :length + + # @since 0.10.8 + # @api public + def to_s + @_now.to_s + end + + # @since 0.10.8 + # @api public + def error=(message) + self[:error] = message + end + + # @since 0.10.8 + # @api public + def error + self[:error] + end + + # @since 0.10.8 + # @api public + def notice=(message) + self[:notice] = message + end + + # @since 0.10.8 + # @api public + def notice + self[:notice] + end + + # @since 0.10.8 + # @api public + def success=(message) + self[:success] = message + end + + # @since 0.10.8 + # @api public + def success + self[:success] + end + end # Storage + + module Helpers + ### + # Overloads the existing redirect helper in-order to provide support for flash messages + # + # @overload redirect(url) + # @param [String] url + # + # @overload redirect(url, status_code) + # @param [String] url + # @param [Fixnum] status_code + # + # @overload redirect(url, status_code, flash_messages) + # @param [String] url + # @param [Fixnum] status_code + # @param [Hash] flash_messages + # + # @overload redirect(url, flash_messages) + # @param [String] url + # @param [Hash] flash_messages + # + # @example + # redirect(dashboard, success: :user_created) + # redirect(new_location, 301, notice: 'This page has moved. Please update your bookmarks!!') + # + # @since 0.10.8 + # @api public + def redirect(url, *args) + flashes = args.extract_options! + + flashes.each do |type, message| + message = I18n.translate(message) if message.is_a?(Symbol) && defined?(I18n) + flash[type] = message + end + + super(url, args) + end + alias_method :redirect_to, :redirect + + ### + # Returns the flash storage object + # + # @return [Storage] + # + # @since 0.10.8 + # @api public + def flash + @_flash ||= Storage.new(env['rack.session'] ? session[:_flash] : {}) + end + end # Helpers + end # Flash +end # Padrino diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/application/rendering.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/application/rendering.rb similarity index 89% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/application/rendering.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/application/rendering.rb index 382e63df..f733d658 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/application/rendering.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/application/rendering.rb @@ -7,6 +7,16 @@ module Padrino # locale enabled rendering, among other features. # module Rendering + ## + # A SafeTemplate assumes that its output is safe. + # + # @api private + module SafeTemplate + def render(*) + super.html_safe + end + end + ## # Exception responsible for when an expected template did not exist. # @@ -25,19 +35,34 @@ module Padrino ] unless defined?(IGNORE_FILE_PATTERN) ## - # Default rendering options used in the #render-method. + # Default options used in the #resolve_template-method. # DEFAULT_RENDERING_OPTIONS = { :strict_format => false, :raise_exceptions => true } unless defined?(DEFAULT_RENDERING_OPTIONS) class << self + ## + # Default engine configurations for Padrino::Rendering + # + # @return {Hash} + # The configurations, keyed by engine. + def engine_configurations + @engine_configurations ||= {} + end + ## # Main class that register this extension. # def registered(app) - app.send(:include, InstanceMethods) - app.extend(ClassMethods) + included(app) + engine_configurations.each do |engine, configs| + app.set engine, configs + end + end + + def included(base) + base.send(:include, InstanceMethods) + base.extend(ClassMethods) end - alias :included :registered end ## @@ -152,11 +177,8 @@ module Padrino # * Use render 'path/to/template.haml' (with explicit engine lookup) # * Use render 'path/to/template', :layout => false # * Use render 'path/to/template', :layout => false, :engine => 'haml' - # * Use render { :a => 1, :b => 2, :c => 3 } # => return a json string # def render(engine, data=nil, options={}, locals={}, &block) - # If engine is a hash then render data converted to json - content_type(:json, :charset => 'utf-8') and return engine.to_json if engine.is_a?(Hash) # If engine is nil, ignore engine parameter and shift up all arguments # render nil, "index", { :layout => true }, { :localvar => "foo" } @@ -175,10 +197,10 @@ module Padrino root = settings.respond_to?(:root) ? settings.root : "" # Use @layout if it exists - options[:layout] = @layout if options[:layout].nil? - + layout_was = options[:layout] + options[:layout] = @layout if options[:layout].nil? || options[:layout] == true # Resolve layouts similar to in Rails - if (options[:layout].nil? || options[:layout] == true) && !settings.templates.has_key?(:layout) + if options[:layout].nil? && !settings.templates.has_key?(:layout) layout_path, layout_engine = *resolved_layout options[:layout] = layout_path || false # We need to force layout false so sinatra don't try to render it options[:layout] = false unless layout_engine == engine # TODO allow different layout engine @@ -186,10 +208,12 @@ module Padrino elsif options[:layout].present? options[:layout] = settings.fetch_layout_path(options[:layout] || @layout) end + # Default to original layout value if none found + options[:layout] ||= layout_was # Cleanup the template @current_engine, engine_was = engine, @current_engine - @_out_buf, _buf_was = "", @_out_buf + @_out_buf, _buf_was = ActiveSupport::SafeBuffer.new, @_out_buf # Pass arguments to Sinatra render method super(engine, data, options.dup, locals, &block) @@ -290,3 +314,7 @@ module Padrino end # InstanceMethods end # Rendering end # Padrino + +require 'padrino-core/application/rendering/extensions/haml' +require 'padrino-core/application/rendering/extensions/erubis' +require 'padrino-core/application/rendering/extensions/slim' diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/application/rendering/extensions/erubis.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/application/rendering/extensions/erubis.rb new file mode 100644 index 00000000..140136f9 --- /dev/null +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/application/rendering/extensions/erubis.rb @@ -0,0 +1,55 @@ +begin + require 'erubis' + + module Padrino + module Erubis + ## + # SafeBufferEnhancer is an Erubis Enhancer that compiles templates that + # are fit for using ActiveSupport::SafeBuffer as a Buffer. + # + # @api private + module SafeBufferEnhancer + def add_expr_literal(src, code) + src << " #{@bufvar}.concat((" << code << ').to_s);' + end + + def add_expr_escaped(src, code) + src << " #{@bufvar}.safe_concat " << code << ';' + end + + def add_text(src, text) + src << " #{@bufvar}.safe_concat '" << escape_text(text) << "';" unless text.empty? + end + end + + ## + # SafeBufferTemplate is the classic Erubis template, augmented with + # SafeBufferEnhancer. + # + # @api private + class SafeBufferTemplate < ::Erubis::Eruby + include SafeBufferEnhancer + end + + ## + # Modded ErubisTemplate that doesn't insist in an String as output + # buffer. + # + # @api private + class Template < Tilt::ErubisTemplate + def precompiled_preamble(locals) + old_postamble = super.split("\n")[0..-2] + [old_postamble, "#{@outvar} = _buf = (#{@outvar} || ActiveSupport::SafeBuffer.new)"].join("\n") + end + end + end + end + + Tilt.prefer Padrino::Erubis::Template, :erb + + if defined? Padrino::Rendering + Padrino::Rendering.engine_configurations[:erb] = + {:engine_class => Padrino::Erubis::SafeBufferTemplate} + end +rescue LoadError +end \ No newline at end of file diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/application/rendering/extensions/haml.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/application/rendering/extensions/haml.rb new file mode 100644 index 00000000..96402ec8 --- /dev/null +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/application/rendering/extensions/haml.rb @@ -0,0 +1,26 @@ +begin + require 'haml' + require 'haml/helpers/xss_mods' + + module Haml + module Helpers + include XssMods + end + + module Util + def self.rails_xss_safe? + true + end + end + end + + if defined? Padrino::Rendering + Padrino::Rendering.engine_configurations[:haml] = + {:escape_html => true} + + class Tilt::HamlTemplate + include Padrino::Rendering::SafeTemplate + end + end +rescue LoadError +end diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/application/rendering/extensions/slim.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/application/rendering/extensions/slim.rb new file mode 100644 index 00000000..e89043a8 --- /dev/null +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/application/rendering/extensions/slim.rb @@ -0,0 +1,14 @@ +begin + require 'slim' + + if defined? Padrino::Rendering + Padrino::Rendering.engine_configurations[:slim] = + {:generator => Temple::Generators::RailsOutputBuffer, + :buffer => "@_out_buf", :use_html_safe => true} + + class Slim::Template + include Padrino::Rendering::SafeTemplate + end + end +rescue LoadError +end diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/application/routing.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/application/routing.rb similarity index 84% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/application/routing.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/application/routing.rb index c2310fdf..fc850f92 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/application/routing.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/application/routing.rb @@ -11,6 +11,9 @@ class Sinatra::Request def controller route_obj && route_obj.controller end + def action + route_obj && route_obj.action + end end ## @@ -28,8 +31,8 @@ class HttpRouter @route = path.route @params ||= {} @params.update(env['router.params']) - @block_params = if path.route.is_a?(HttpRouter::RegexRoute) - params_list = env['router.request'].extra_env['router.regex_match'].to_a + @block_params = if match_data = env['router.request'].extra_env['router.regex_match'] + params_list = match_data.to_a params_list.shift @params[:captures] = params_list params_list @@ -47,7 +50,6 @@ class HttpRouter (@route.before_filters - settings.filters[:before]).each { |block| instance_eval(&block) } @layout = path.route.use_layout if path.route.use_layout @route.custom_conditions.each { |block| pass if block.bind(self).call == false } if @route.custom_conditions - @block_params = @block_params[0, @route.dest.arity] if @route.dest.arity > 0 halt_response = catch(:halt) { route_eval { @route.dest[self, @block_params] } } @_response_buffer = halt_response.is_a?(Array) ? halt_response.last : halt_response successful = true @@ -62,7 +64,9 @@ class HttpRouter # @private class Route - attr_accessor :use_layout, :controller, :cache, :cache_key, :cache_expires_in + VALID_HTTP_VERBS.replace %w[GET POST PUT PATCH DELETE HEAD OPTIONS LINK UNLINK] + + attr_accessor :use_layout, :controller, :action, :cache, :cache_key, :cache_expires_in, :parent def before_filters(&block) @_before_filters ||= [] @@ -84,6 +88,60 @@ class HttpRouter @_custom_conditions end + + def significant_variable_names + @significant_variable_names ||= if @original_path.is_a?(String) + @original_path.scan(/(^|[^\\])[:\*]([a-zA-Z0-9_]+)/).map{|p| p.last.to_sym} + elsif @original_path.is_a?(Regexp) and @original_path.respond_to?(:named_captures) + @original_path.named_captures.keys.map(&:to_sym) + else + [] + end + end + end + + #Monkey patching the Request class. Using Rack::Utils.unescape rather than + #URI.unescape which can't handle utf-8 chars + class Request + def initialize(path, rack_request) + @rack_request = rack_request + @path = Rack::Utils.unescape(path).split(/\//) + @path.shift if @path.first == '' + @path.push('') if path[-1] == ?/ + @extra_env = {} + @params = [] + @acceptable_methods = Set.new + end + end + + class Node::Path + def to_code + path_ivar = inject_root_ivar(self) + "#{"if !callback && request.path.size == 1 && request.path.first == '' && (request.rack_request.head? || request.rack_request.get?) && request.rack_request.path_info[-1] == ?/ + catch(:pass) do + response = ::Rack::Response.new + response.redirect(request.rack_request.path_info[0, request.rack_request.path_info.size - 1], 302) + return response.finish + end + end" if router.redirect_trailing_slash?} + + #{"if request.#{router.ignore_trailing_slash? ? 'path_finished?' : 'path.empty?'}" unless route.match_partially} + catch(:pass) do + if callback + request.called = true + callback.call(Response.new(request, #{path_ivar})) + else + env = request.rack_request.dup.env + env['router.request'] = request + env['router.params'] ||= {} + #{"env['router.params'].merge!(Hash[#{param_names.inspect}.zip(request.params)])" if dynamic?} + @router.rewrite#{"_partial" if route.match_partially}_path_info(env, request) + response = @router.process_destination_path(#{path_ivar}, env) + return response unless router.pass_on_response(response) + end + end + #{"end" unless route.match_partially}" + end end end @@ -98,7 +156,7 @@ module Padrino def apply?(request) detect = @args.any? do |arg| case arg - when Symbol then request.route_obj && (request.route_obj.named == arg or request.route_obj.named == [@scoped_controller, arg].flatten.join("_").to_sym) + when Symbol then request.route_obj && (request.route_obj.name == arg or request.route_obj.name == [@scoped_controller, arg].flatten.join("_").to_sym) else arg === request.path_info end end || @options.any? do |name, val| @@ -166,7 +224,7 @@ module Padrino # Class methods responsible for enhanced routing for controllers. module ClassMethods ## - # Method for organize in a better way our routes. + # Method to organize our routes in a better way. # # @param [Array] args # Controller arguments. @@ -237,8 +295,8 @@ module Padrino # get :index, :map => "/:lang" do; "params[:lang] == :de"; end # end # - # In a controller before and after filters are scoped and didn't affect other controllers or main app. - # In a controller layout are scoped and didn't affect others controllers and main app. + # In a controller, before and after filters are scoped and don't affect other controllers or the main app. + # In a controller, layouts are scoped and don't affect other controllers or the main app. # # @example # controller :posts do @@ -449,7 +507,8 @@ module Padrino # def recognize_path(path) responses = @router.recognize(Rack::MockRequest.env_for(path)) - [responses[0].path.route.named, responses[0].params] + responses = responses[0] if responses[0].is_a?(Array) + [responses[0].path.route.name, responses[0].params] end ## @@ -470,11 +529,12 @@ module Padrino params[:format] = params[:format].to_s unless params[:format].nil? params = value_to_param(params) end - url = if params_array.empty? - compiled_router.url(name, params) - else - compiled_router.url(name, *(params_array << params)) - end + url = + if params_array.empty? + compiled_router.path(name, params) + else + compiled_router.path(name, *(params_array << params)) + end url[0,0] = conform_uri(uri_root) if defined?(uri_root) url[0,0] = conform_uri(ENV['RACK_BASE_URI']) if ENV['RACK_BASE_URI'] url = "/" if url.blank? @@ -556,8 +616,17 @@ module Padrino # Do padrino parsing. We dup options so we can build HEAD request correctly route_options = options.dup route_options[:provides] = @_provides if @_provides + + # CSRF protection is always active except when explicitly switched off + if allow_disabled_csrf + unless route_options[:csrf_protection] == false + route_options[:csrf_protection] = true + end + end + path, *route_options[:with] = path if path.is_a?(Array) - path, name, options, route_options = *parse_route(path, route_options, verb) + action = path + path, name, route_parents, options, route_options = *parse_route(path, route_options, verb) options.reverse_merge!(@_conditions) if @_conditions # Sinatra defaults @@ -572,20 +641,22 @@ module Padrino # HTTPRouter route construction route = router.add(path, route_options) - route.name(name) if name + route.name = name if name + route.action = action priority_name = options.delete(:priority) || :normal priority = ROUTE_PRIORITY[priority_name] or raise("Priority #{priority_name} not recognized, try #{ROUTE_PRIORITY.keys.join(', ')}") route.cache = options.key?(:cache) ? options.delete(:cache) : @_cache - route.send(verb.downcase.to_sym) - route.host(options.delete(:host)) if options.key?(:host) - route.user_agent(options.delete(:agent)) if options.key?(:agent) + route.parent = route_parents ? (route_parents.count == 1 ? route_parents.first : route_parents) : route_parents + route.add_request_method(verb.downcase.to_sym) + route.host = options.delete(:host) if options.key?(:host) + route.user_agent = options.delete(:agent) if options.key?(:agent) if options.key?(:default_values) defaults = options.delete(:default_values) - route.default(defaults) if defaults + route.add_default_values(defaults) if defaults end options.delete_if do |option, args| - if route.send(:significant_variable_names).include?(option) - route.matching(option => Array(args).first) + if route.significant_variable_names.include?(option) + route.add_match_with(option => Array(args).first) true end end @@ -646,8 +717,8 @@ module Padrino if @_use_format or format_params = options[:provides] process_path_for_provides(path, format_params) - options[:matching] ||= {} - options[:matching][:format] = /[^\.]+/ + # options[:add_match_with] ||= {} + # options[:add_match_with][:format] = /[^\.]+/ end absolute_map = map && map[0] == ?/ @@ -657,14 +728,14 @@ module Padrino if map.blank? and !absolute_map controller_path = controller.join("/") path.gsub!(%r{^\(/\)|/\?}, "") - path = File.join(controller_path, path) + path = File.join(controller_path, path) unless @_map end # Here we build the correct name route end # Now we need to parse our 'parent' params and parent scope if !absolute_map and parent_params = options.delete(:parent) || @_parents - parent_params = Array(@_parents) + Array(parent_params) + parent_params = (Array(@_parents) + Array(parent_params)).uniq path = process_path_for_parent_params(path, parent_params) end @@ -692,7 +763,7 @@ module Padrino # Merge in option defaults options.reverse_merge!(:default_values => @_defaults) - [path, name, options, route_options] + [path, name, parent_params, options, route_options] end ## @@ -756,19 +827,22 @@ module Padrino def provides(*types) @_use_format = true condition do - mime_types = types.map { |t| mime_type(t) } + mime_types = types.map { |t| mime_type(t) }.compact url_format = params[:format].to_sym if params[:format] - accepts = request.accept.map { |a| a.split(";")[0].strip } + accepts = request.accept.map { |a| a.to_str } # per rfc2616-sec14: # Assume */* if no ACCEPT header is given. catch_all = (accepts.delete "*/*" || accepts.empty?) matching_types = accepts.empty? ? mime_types.slice(0,1) : (accepts & mime_types) + if matching_types.empty? && types.include?(:any) + matching_types = accepts + end if !url_format && matching_types.first type = ::Rack::Mime::MIME_TYPES.find { |k, v| v == matching_types.first }[0].sub(/\./,'').to_sym accept_format = CONTENT_TYPE_ALIASES[type] || type - elsif catch_all + elsif catch_all && !types.include?(:any) type = types.first accept_format = CONTENT_TYPE_ALIASES[type] || type end @@ -793,6 +867,21 @@ module Padrino matched_format end end + + ## + # Implements CSRF checking when `allow_disabled_csrf` is set to true. + # + # This condition is always on, except when it is explicitly switched + # off. + # + # @example + # post("/", :csrf_protection => false) + # + def csrf_protection(on = true) + if on + condition { halt 403 if request.env['protection.csrf.failed'] } + end + end end ## @@ -836,7 +925,7 @@ module Padrino else path_params << params end - @route.url(*path_params) + @route.path(*path_params) end ## @@ -905,13 +994,19 @@ module Padrino end def dispatch! - static! if settings.static? && (request.get? || request.head?) - route! + invoke do + static! if settings.static? && (request.get? || request.head?) + route! + end rescue ::Exception => boom - filter! :before - handle_exception!(boom) + filter! :before if boom.kind_of? ::Sinatra::NotFound + invoke { @boom_handled = handle_exception!(boom) } ensure - filter! :after unless env['sinatra.static_file'] + @boom_handled or begin + filter! :after unless env['sinatra.static_file'] + rescue ::Exception => boom + invoke { handle_exception!(boom) } unless @env['sinatra.error'] + end end def route!(base=settings, pass_block=nil) @@ -919,9 +1014,10 @@ module Padrino if base.compiled_router and match = base.compiled_router.call(@request.env) if match.respond_to?(:each) route_eval do - match[1].each {|k,v| response[k] = v} + match[1].each { |k,v| response[k] = v } status match[0] route_missing if match[0] == 404 + route_missing if allow = response['Allow'] and allow.include?(request.env['REQUEST_METHOD']) end end else diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/application/showexceptions.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/application/showexceptions.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/application/showexceptions.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/application/showexceptions.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/caller.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/caller.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/caller.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/caller.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/cli/adapter.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/cli/adapter.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/cli/adapter.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/cli/adapter.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/cli/base.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/cli/base.rb similarity index 69% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/cli/base.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/cli/base.rb index cea6efc0..d180de52 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/cli/base.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/cli/base.rb @@ -6,17 +6,18 @@ module Padrino class Base < Thor include Thor::Actions - class_option :chdir, :type => :string, :aliases => "-c", :desc => "Change to dir before starting" - class_option :environment, :type => :string, :aliases => "-e", :required => true, :default => :development, :desc => "Padrino Environment" + class_option :chdir, :type => :string, :aliases => "-c", :desc => "Change to dir before starting." + class_option :environment, :type => :string, :aliases => "-e", :required => true, :default => :development, :desc => "Padrino Environment." class_option :help, :type => :boolean, :desc => "Show help usage" - desc "start", "Starts the Padrino application" - method_option :server, :type => :string, :aliases => "-a", :desc => "Rack Handler (default: autodetect)" - method_option :host, :type => :string, :aliases => "-h", :required => true, :default => "0.0.0.0", :desc => "Bind to HOST address" - method_option :port, :type => :numeric, :aliases => "-p", :required => true, :default => 3000, :desc => "Use PORT" - method_option :daemonize, :type => :boolean, :aliases => "-d", :desc => "Run daemonized in the background" - method_option :pid, :type => :string, :aliases => "-i", :desc => "File to store pid" - method_option :debug, :type => :boolean, :desc => "Set debugging flags" + desc "start", "Starts the Padrino application (alternatively use 's')." + map "s" => :start + method_option :server, :type => :string, :aliases => "-a", :desc => "Rack Handler (default: autodetect)" + method_option :host, :type => :string, :aliases => "-h", :required => true, :default => '127.0.0.1', :desc => "Bind to HOST address." + method_option :port, :type => :numeric, :aliases => "-p", :required => true, :default => 3000, :desc => "Use PORT." + method_option :daemonize, :type => :boolean, :aliases => "-d", :desc => "Run daemonized in the background." + method_option :pid, :type => :string, :aliases => "-i", :desc => "File to store pid." + method_option :debug, :type => :boolean, :desc => "Set debugging flags." def start prepare :start require File.expand_path("../adapter", __FILE__) @@ -24,12 +25,8 @@ module Padrino Padrino::Cli::Adapter.start(options) end - desc "s", "Starts the Padrino application" - def s - invoke :start - end - - desc "stop", "Stops the Padrino application" + desc "stop", "Stops the Padrino application (alternatively use 'st')." + map "st" => :stop method_option :pid, :type => :string, :aliases => "-p", :desc => "File to store pid", :default => 'tmp/pids/server.pid' def stop prepare :stop @@ -37,7 +34,7 @@ module Padrino Padrino::Cli::Adapter.stop(options) end - desc "rake", "Execute rake tasks" + desc "rake", "Execute rake tasks." method_option :environment, :type => :string, :aliases => "-e", :required => true, :default => :development method_option :list, :type => :string, :aliases => "-T", :desc => "Display the tasks (matching optional PATTERN) with descriptions, then exit." method_option :trace, :type => :boolean, :aliases => "-t", :desc => "Turn on invoke/execute tracing, enable full backtrace." @@ -51,12 +48,15 @@ module Padrino ARGV.concat(args) puts "=> Executing Rake #{ARGV.join(' ')} ..." load File.expand_path('../rake.rb', __FILE__) - require File.expand_path('config/boot.rb') - PadrinoTasks.init(true) + Rake.application.init + Rake.application.instance_variable_set(:@rakefile, __FILE__) + load File.expand_path('Rakefile') + Rake.application.top_level end - desc "console", "Boots up the Padrino application irb console" - def console + desc "console", "Boots up the Padrino application irb console (alternatively use 'c')." + map "c" => :console + def console(*args) prepare :console require File.expand_path("../../version", __FILE__) ARGV.clear @@ -68,12 +68,8 @@ module Padrino IRB.start end - desc "c", "Boots up the Padrino application irb console" - def c(*args) - invoke(:console, args) - end - - desc "generate", "Executes the Padrino generator with given options." + desc "generate", "Executes the Padrino generator with given options (alternatively use 'gen' or 'g')." + map ["gen", "g"] => :generate def generate(*args) # Build Padrino g as an alias of padrino-gen begin @@ -90,23 +86,30 @@ module Padrino end end - desc "g", "Executes the Padrino generator with given options." - def g(*args) - invoke(:generate, args) - end - - desc "gen", "Executes the Padrino generator with given options." - def gen(*args) - invoke(:generate, args) - end - - desc "version", "Show current Padrino Version" - map "-v" => :version, "--version" => :version + desc "version", "Show current Padrino version." + map ["-v", "--version"] => :version def version require 'padrino-core/version' puts "Padrino v. #{Padrino.version}" end + desc "runner", "Run a piece of code in the Padrino application environment (alternatively use 'run' or 'r')." + map ["run", "r"] => :runner + def runner(*args) + prepare :runner + + code_or_file = args.shift + abort "Please specify code or file" if code_or_file.nil? + + require File.expand_path('config/boot.rb') + + if File.exist?(code_or_file) + eval(File.read(code_or_file), nil, code_or_file) + else + eval(code_or_file) + end + end + private def prepare(task) if options.help? diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/cli/console.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/cli/console.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/cli/console.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/cli/console.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/cli/rake.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/cli/rake.rb new file mode 100644 index 00000000..f1f4405d --- /dev/null +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/cli/rake.rb @@ -0,0 +1,47 @@ +require File.expand_path('../../tasks', __FILE__) +require 'rake' +require 'rake/dsl_definition' +require 'thor' +require 'securerandom' unless defined?(SecureRandom) +require 'padrino-gen' + +module PadrinoTasks + def self.init(init=false) + $LOAD_PATH.unshift(File.expand_path("lib")) # Adds "lib" to the load path + Padrino::Tasks.files.flatten.uniq.each { |rakefile| Rake.application.add_import(rakefile) rescue puts "<= Failed load #{ext}" } + load(File.expand_path('../rake_tasks.rb', __FILE__)) # Load default rake tasks + Rake.application.load_imports + end + + def self.use(task) + tasks << task + end + + def self.tasks + @tasks ||= [] + end + + def self.load?(task, constant_present) + if constant_present && !PadrinoTasks.tasks.include?(task) + warn <<-WARNING.undent + Loading #{task} tasks automatically. + This functionality will be disabled in future versions. Please put + + PadrinoTasks.use(#{task.inspect}) + PadrinoTasks.init + + and remove + + require File.expand_path('../config/boot.rb', __FILE__) + + in you Rakefile instead. + WARNING + end + + constant_present || PadrinoTasks.tasks.include?(task) + end +end + +def shell + @_shell ||= Thor::Base.shell.new +end diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/cli/rake_tasks.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/cli/rake_tasks.rb similarity index 79% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/cli/rake_tasks.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/cli/rake_tasks.rb index 076affa3..66207a6f 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/cli/rake_tasks.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/cli/rake_tasks.rb @@ -1,11 +1,17 @@ # Load rake tasks from common rake task definition locations -Dir["lib/tasks/**/*.rake"]. - concat(Dir["tasks/**/*.rake"]). - concat(Dir["{test,spec}/*.rake"]).each { |rake| load(rake) } +Dir["{lib/tasks/**,tasks/**,test,spec}/*.rake"].each do |file| + begin + load(file) + rescue LoadError => e + warn "#{file}: #{e.message}" + end +end # Loads the Padrino applications mounted within the project # setting up the required environment for Padrino task :environment do + require File.expand_path('config/boot.rb', Rake.application.original_dir) + Padrino.mounted_apps.each do |app| app.app_obj.setup_application! end @@ -46,14 +52,3 @@ namespace :routes do list_app_routes(app, args) if app end end - -desc "Generate the Rakefile" -task :gen do - File.open(Padrino.root("Rakefile"), "w") do |file| - file.puts <<-RUBY.gsub(/^ {6}/, '') - require File.expand_path('../config/boot.rb', __FILE__) - require 'padrino-core/cli/rake' - PadrinoTasks.init - RUBY - end -end diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/command.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/command.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/command.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/command.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/images/404.png b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/images/404.png similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/images/404.png rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/images/404.png diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/images/500.png b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/images/500.png similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/images/500.png rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/images/500.png diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/loader.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/loader.rb similarity index 89% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/loader.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/loader.rb index a49ec48d..890c1707 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/loader.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/loader.rb @@ -60,6 +60,8 @@ module Padrino # def load! return false if loaded? + t = Time.now + @_called_from = first_caller Padrino.set_encoding Padrino.set_load_paths(*load_paths) # We set the padrino load paths @@ -71,6 +73,8 @@ module Padrino Padrino.after_load.each(&:call) # Run after hooks Padrino::Reloader.run! Thread.current[:padrino_loaded] = true + + Padrino.logger.devel "Loaded Padrino in #{Time.now - t} seconds" end ## @@ -162,10 +166,8 @@ module Padrino begin Padrino::Reloader.safe_load(file, options.dup) files.delete(file) - rescue LoadError => e - errors << e - failed << file - rescue NameError => e + rescue NameError, LoadError => e + Padrino.logger.devel "Problem while loading #{file}: #{e.to_s}" errors << e failed << file rescue Exception => e @@ -190,11 +192,7 @@ module Padrino # Padrino.dependency_paths << "#{Padrino.root}/uploaders/*.rb" # def dependency_paths - @_dependency_paths_was = [ - "#{root}/config/database.rb", "#{root}/lib/**/*.rb", "#{root}/shared/lib/**/*.rb", - "#{root}/models/**/*.rb", "#{root}/shared/models/**/*.rb", "#{root}/config/apps.rb" - ] - @_dependency_paths ||= @_dependency_paths_was + @_dependency_paths ||= (dependency_paths_was + Array(module_paths)) end ## @@ -207,5 +205,21 @@ module Padrino $:.concat(paths); load_paths.concat(paths) $:.uniq!; load_paths.uniq! end + + private + def module_paths + Padrino.modules.map(&:dependency_paths).flatten! + end + + def dependency_paths_was + [ + "#{root}/config/database.rb", + "#{root}/lib/**/*.rb", + "#{root}/shared/lib/**/*.rb", + "#{root}/models/**/*.rb", + "#{root}/shared/models/**/*.rb", + "#{root}/config/apps.rb" + ] + end end # self end # Padrino diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/cs.yml b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/cs.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/cs.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/cs.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/da.yml b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/da.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/da.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/da.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/de.yml b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/de.yml similarity index 81% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/de.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/de.yml index d2675193..37ab35ad 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/de.yml +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/de.yml @@ -5,8 +5,8 @@ de: # Wenn keine Formate angegeben werden, wird "default" benutzt. # Du kannst auch weitere Formate hinzufügen, wenn Du möchtest. default: "&d.&m.%Y" - short: "%b %d" - long: "%B %d, %Y" + short: "%d. %b" + long: "%d. %B %Y" only_day: "%e" day_names: [Sonntag, Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag] @@ -20,9 +20,9 @@ de: time: formats: - default: "%a, %d %b %Y %H:%M:%S %z" - short: "%d %b %H:%M" - long: "%B %d, %Y %H:%M" + default: "%a, %d. %b %Y %H:%M:%S %z" + short: "%d. %b %H:%M" + long: "%d. %B %Y %H:%M" am: "am" pm: "pm" @@ -31,4 +31,4 @@ de: array: words_connector: ", " two_words_connector: " und " - last_word_connector: ", und " + last_word_connector: " und " diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/en.yml b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/en.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/en.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/en.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/es.yml b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/es.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/es.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/es.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/fr.yml b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/fr.yml similarity index 93% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/fr.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/fr.yml index dba1adb4..5faa0882 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/fr.yml +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/fr.yml @@ -12,7 +12,7 @@ fr: day_names: [Dimanche, Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi] abbr_day_names: [Lun, Mar, Mer, Jeu, Ven, Sam, Dim] month_names: [~, Janvier, Février, Mars, Avril, Mai, Juin, Juillet, Août, Septembre, Octobre, Novembre, Décembre] - abbr_month_names: [~, Jan, Fev, Mar, Avr, Mai, Jui, Jui, Aou, Sep, Oct, Nov, Dec] + abbr_month_names: [~, Jan, Fev, Mar, Avr, Mai, Jun, Jul, Aou, Sep, Oct, Nov, Dec] order: - day - month diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/hu.yml b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/hu.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/hu.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/hu.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/it.yml b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/it.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/it.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/it.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/ja.yml b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/ja.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/ja.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/ja.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/lv.yml b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/lv.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/lv.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/lv.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/nl.yml b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/nl.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/nl.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/nl.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/no.yml b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/no.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/no.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/no.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/pl.yml b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/pl.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/pl.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/pl.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/pt_br.yml b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/pt_br.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/pt_br.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/pt_br.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/ro.yml b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/ro.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/ro.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/ro.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/ru.yml b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/ru.yml similarity index 94% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/ru.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/ru.yml index e2bb550d..73fca54c 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/ru.yml +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/ru.yml @@ -12,7 +12,7 @@ ru: day_names: [Воскресенье, Понедельник, Вторник, Среда, Четверг, Пятница, Суббота] abbr_day_names: [Вс, Пн, Вт, Ср, Чт, Пт, Сб] month_names: [~, Январь, Февраль, Март, Апрель, Май, Июнь, Июль, Август, Сентябрь, Октябрь, Ноябрь, Декабрь] - abbr_month_names: [~, Янв, Феб, Мар, Апр, Май, Июн, Июл, Авг, Сен, Окт, Ноя, Дек] + abbr_month_names: [~, Янв, Фев, Мар, Апр, Май, Июн, Июл, Авг, Сен, Окт, Ноя, Дек] order: - year - month diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/sv.yml b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/sv.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/sv.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/sv.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/tr.yml b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/tr.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/tr.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/tr.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/uk.yml b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/uk.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/uk.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/uk.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/zh_cn.yml b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/zh_cn.yml similarity index 50% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/zh_cn.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/zh_cn.yml index 285e9d48..2fab66d5 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/zh_cn.yml +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/zh_cn.yml @@ -4,15 +4,15 @@ zh_cn: # Use the strftime parameters for formats. # When no format has been given, it uses default. # You can provide other formats here if you like! - default: "%Y-%m-%d" - short: "%b%d日" - long: "%Y年%b%d日" + default: "%Y 年 %m 月 %d 日" + short: "%b 月 %d 日" + long: "公元 %Y 年 %B 月 %d 日" only_day: "%e" day_names: [星期日, 星期一, 星期二, 星期三, 星期四, 星期五, 星期六] abbr_day_names: [日, 一, 二, 三, 四, 五, 六] - month_names: [~, 一月, 二月, 三月, 四月, 五月, 六月, 七月, 八月, 九月, 十月, 十一月, 十二月] - abbr_month_names: [~, 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月] + month_names: [~, 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月] + abbr_month_names: [~, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] order: - year - month @@ -20,15 +20,15 @@ zh_cn: time: formats: - default: "%Y年%b%d日 %A %H:%M:%S %Z" - short: "%b%d日 %H:%M" - long: "%Y年%b%d日 %H:%M" + default: "%Y 年 %b 月 %d 日 %H:%M:%S %z" + short: "%d 月 %b 日 %H:%M" + long: "%Y 年 %B 月 %d 日 %H 时 %M 分" am: "上午" pm: "下午" # Used in array.to_sentence. support: array: - words_connector: ", " - two_words_connector: " 和 " - last_word_connector: ", 和 " + words_connector: "," + two_words_connector: "和" + last_word_connector: ",还有" diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/zh_tw.yml b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/zh_tw.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/locale/zh_tw.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/locale/zh_tw.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/logger.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/logger.rb similarity index 86% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/logger.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/logger.rb index 3b08ecf0..cd17df0a 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/logger.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/logger.rb @@ -13,8 +13,7 @@ module Padrino # logger.warn "bar" # def self.logger - Padrino::Logger.setup! if Thread.current[:padrino_logger].nil? - Thread.current[:padrino_logger] + Padrino::Logger.logger end ## @@ -35,8 +34,7 @@ module Padrino # Padrino.logger = Buffered.new(STDOUT) # def self.logger=(value) - value.extend(Padrino::Logger::Extensions) unless (Padrino::Logger::Extensions === value) - Thread.current[:padrino_logger] = value + Padrino::Logger.logger = value end ## @@ -95,7 +93,7 @@ module Padrino # # @example # logger.bench 'GET', started_at, '/blog/categories' - # # => DEBUG - GET (0.056ms) - /blog/categories + # # => DEBUG - GET (0.0056s) - /blog/categories # def bench(action, began_at, message, level=:debug, color=:yellow) @_pad ||= 8 @@ -103,7 +101,7 @@ module Padrino duration = Time.now - began_at color = :red if duration > 1 action = colorize(action.to_s.upcase.rjust(@_pad), color) - duration = colorize('%0.4fms' % duration, :bold, color) + duration = colorize('%0.4fs' % duration, :bold, color) push "#{action} (#{duration}) #{message}", level end @@ -208,7 +206,6 @@ module Padrino end include Extensions - include Colorize attr_accessor :level attr_accessor :auto_flush @@ -216,8 +213,7 @@ module Padrino attr_reader :log attr_reader :init_args attr_accessor :log_static - - @@mutex = {} + attr_reader :colorize_logging ## # Configuration for a given environment, possible options are: @@ -233,6 +229,7 @@ module Padrino # :format_datetime:: Format of datetime. Defaults to: "%d/%b/%Y %H:%M:%S" # :format_message:: Format of message. Defaults to: ""%s - - [%s] \"%s\""" # :log_static:: Whether or not to show log messages for static files. Defaults to: false + # :colorize_logging:: Whether or not to colorize log messages. Defaults to: true # # @example # Padrino::Logger::Config[:development] = { :log_level => :debug, :stream => :to_file } @@ -254,11 +251,22 @@ module Padrino # Config = { :production => { :log_level => :warn, :stream => :to_file }, - :development => { :log_level => :debug, :stream => :stdout, :format_datetime => ' ' }, + :development => { :log_level => :debug, :stream => :stdout, :format_datetime => '' }, :test => { :log_level => :debug, :stream => :null } } Config.merge!(PADRINO_LOGGER) if PADRINO_LOGGER + @@mutex = Mutex.new + def self.logger + @_logger || setup! + end + + def self.logger=(logger) + logger.extend(Padrino::Logger::Extensions) + + @_logger = logger + end + ## # Setup a new logger # @@ -266,25 +274,27 @@ module Padrino # A {Padrino::Logger} instance # def self.setup! - config_level = (PADRINO_LOG_LEVEL || Padrino.env || :test).to_sym # need this for PADRINO_LOG_LEVEL - config = Config[config_level] + self.logger = begin + config_level = (PADRINO_LOG_LEVEL || Padrino.env || :test).to_sym # need this for PADRINO_LOG_LEVEL + config = Config[config_level] - unless config - warn("No logging configuration for :#{config_level} found, falling back to :production") - config = Config[:production] + unless config + warn("No logging configuration for :#{config_level} found, falling back to :production") + config = Config[:production] + end + + stream = case config[:stream] + when :to_file + FileUtils.mkdir_p(Padrino.root('log')) unless File.exists?(Padrino.root('log')) + File.new(Padrino.root('log', "#{Padrino.env}.log"), 'a+') + when :null then StringIO.new + when :stdout then $stdout + when :stderr then $stderr + else config[:stream] # return itself, probabilly is a custom stream. + end + + Padrino::Logger.new(config.merge(:stream => stream)) end - - stream = case config[:stream] - when :to_file - FileUtils.mkdir_p(Padrino.root('log')) unless File.exists?(Padrino.root('log')) - File.new(Padrino.root('log', "#{Padrino.env}.log"), 'a+') - when :null then StringIO.new - when :stdout then $stdout - when :stderr then $stderr - else config[:stream] # return itself, probabilly is a custom stream. - end - - Thread.current[:padrino_logger] = Padrino::Logger.new(config.merge(:stream => stream)) end ## @@ -311,16 +321,20 @@ module Padrino # @option options [Symbol] :log_static (false) # Whether or not to show log messages for static files. # + # @option options [Symbol] :colorize_logging (true) + # Whether or not to colorize log messages. Defaults to: true + # def initialize(options={}) @buffer = [] @auto_flush = options.has_key?(:auto_flush) ? options[:auto_flush] : true @level = options[:log_level] ? Padrino::Logger::Levels[options[:log_level]] : Padrino::Logger::Levels[:debug] @log = options[:stream] || $stdout @log.sync = true - @mutex = @@mutex[@log] ||= Mutex.new @format_datetime = options[:format_datetime] || "%d/%b/%Y %H:%M:%S" - @format_message = options[:format_message] || "%s -%s%s" + @format_message = options[:format_message] || "%s - %s %s" @log_static = options.has_key?(:log_static) ? options[:log_static] : false + @colorize_logging = options.has_key?(:colorize_logging) ? options[:colorize_logging] : true + colorize! if @colorize_logging end ## @@ -328,8 +342,9 @@ module Padrino # def flush return unless @buffer.size > 0 - @mutex.synchronize do - @log.write(@buffer.slice!(0..-1).join('')) + @@mutex.synchronize do + @log.write(@buffer.join('')) + @buffer.clear end end @@ -360,7 +375,9 @@ module Padrino # def <<(message = nil) message << "\n" unless message[-1] == ?\n - @buffer << message + @@mutex.synchronize { + @buffer << message + } flush if @auto_flush message end @@ -425,4 +442,3 @@ module Kernel # @private Padrino.logger end end # Kernel - diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/module.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/module.rb new file mode 100644 index 00000000..9f6b4382 --- /dev/null +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/module.rb @@ -0,0 +1,58 @@ +module Padrino + module Module + attr_accessor :root + + ## + # Register this module as being loaded from a gem. This automatically + # sets the root and therefore the dependency paths correctly. + # + # @param [String] name + # The name of the gem. Has to be the name as stated in the gemspec. + # + # @returns the gems root. + def gem!(name) + self.root = Padrino.gem(name, self) + end + + ## + # Helper method for file references within a Padrino module. + # + # @param [Array] args + # The directories to join to {Module.root}. + # + # @return [String] + # The absolute path. + # + # @example + # module MyModule + # extend Padrino::Module + # gem! 'my_gem' + # end + # Module.root! + def root(*args) + File.expand_path(File.join(@root, *args)) + end + + ## + # Returns the list of path globs to load as dependencies + # Appends custom dependency patterns to the be loaded for Padrino. + # + # @return [Array] + # The dependency paths. + # + # @example + # module MyModule + # extend Padrino::Module + # gem! 'my_gem' + # end + # + # Module.dependency_paths << "#{MyModule.root}/uploaders/*.rb" + # + def dependency_paths + [ + "#{root}/lib/**/*.rb", "#{root}/shared/lib/**/*.rb", + "#{root}/models/**/*.rb", "#{root}/shared/models/**/*.rb" + ] + end + end +end \ No newline at end of file diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/mounter.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/mounter.rb similarity index 88% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/mounter.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/mounter.rb index d7a4afe1..7adb9a28 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/mounter.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/mounter.rb @@ -22,10 +22,12 @@ module Padrino # @option options [Symbol] :app_file (Automatically detected) # @option options [Symbol] :app_obj (Detected) # @option options [Symbol] :app_root (Directory of :app_file) + # @option options [Symbol] :gem The gem to load the app from (Detected from name) # def initialize(name, options={}) @name = name.to_s @app_class = options[:app_class] || @name.camelize + @gem = options[:gem] || @app_class.split("::").first.underscore @app_file = options[:app_file] || locate_app_file @app_obj = options[:app_obj] || app_constant || locate_app_object ensure_app_file! || ensure_app_object! @@ -104,11 +106,12 @@ module Padrino # def named_routes app_obj.routes.map { |route| - name_array = "(#{route.named.to_s.split("_").map { |piece| %Q[:#{piece}] }.join(", ")})" - request_method = route.conditions[:request_method][0] - full_path = File.join(uri_root, route.original_path) - next if route.named.blank? || request_method == 'HEAD' - OpenStruct.new(:verb => request_method, :identifier => route.named, :name => name_array, :path => full_path) + name_array = "(#{route.name.to_s.split("_").map { |piece| %Q[:#{piece}] }.join(", ")})" + request_method = route.request_methods.first + next if route.name.blank? || request_method == 'HEAD' + original_path = route.original_path.is_a?(Regexp) ? route.original_path.inspect : route.original_path + full_path = File.join(uri_root, original_path) + OpenStruct.new(:verb => request_method, :identifier => route.name, :name => name_array, :path => full_path) }.compact end @@ -158,6 +161,13 @@ module Padrino candidates << app_constant.app_file if app_constant.respond_to?(:app_file) && File.exist?(app_constant.app_file.to_s) candidates << Padrino.first_caller if File.identical?(Padrino.first_caller.to_s, Padrino.called_from.to_s) candidates << Padrino.mounted_root(name.downcase, "app.rb") + simple_name = name.split("::").last.downcase + mod_name = name.split("::")[0..-2].join("::") + Padrino.modules.each do |mod| + if mod.name == mod_name + candidates << mod.root(simple_name, "app.rb") + end + end candidates << Padrino.root("app", "app.rb") candidates.find { |candidate| File.exist?(candidate) } end diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/reloader.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/reloader.rb similarity index 67% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/reloader.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/reloader.rb index dcc47c0a..be7086af 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/reloader.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/reloader.rb @@ -33,7 +33,7 @@ module Padrino # Specified constants can be excluded from the code unloading process. # def exclude_constants - @_exclude_constants ||= [] + @_exclude_constants ||= Set.new end ## @@ -41,7 +41,7 @@ module Padrino # Default included constants are: [none] # def include_constants - @_include_constants ||= [] + @_include_constants ||= Set.new end ## @@ -51,7 +51,7 @@ module Padrino # Detect changed files rotation do |file, mtime| # Retrive the last modified time - new_file = MTIMES[file].nil? + new_file = MTIMES[file].nil? previous_mtime = MTIMES[file] ||= mtime logger.devel "Detected a new file #{file}" if new_file # We skip to next file if it is not new and not modified @@ -74,15 +74,9 @@ module Padrino # Remove files and classes loaded with stat # def clear! - MTIMES.clear - LOADED_CLASSES.each do |file, klasses| - klasses.each { |klass| remove_constant(klass) } - LOADED_CLASSES.delete(file) - end - LOADED_FILES.each do |file, dependencies| - dependencies.each { |dependency| $LOADED_FEATURES.delete(dependency) } - $LOADED_FEATURES.delete(file) - end + clear_modification_times + clear_loaded_classes + clear_loaded_files_and_features end ## @@ -103,67 +97,59 @@ module Padrino # We lock dependencies sets to prevent reloading of protected constants # def lock! - klasses = ObjectSpace.classes.map { |klass| klass._orig_klass_name.split('::')[0] }.uniq + klasses = ObjectSpace.classes do |klass| + klass._orig_klass_name.split('::')[0] + end + klasses = klasses | Padrino.mounted_apps.map { |app| app.app_class } - Padrino::Reloader.exclude_constants.concat(klasses) + Padrino::Reloader.exclude_constants.merge(klasses) end ## # A safe Kernel::require which issues the necessary hooks depending on results # def safe_load(file, options={}) - began_at = Time.now - force, file = options[:force], figure_path(file) + began_at = Time.now + force = options[:force] + file = figure_path(file) + reload = should_reload?(file) + m_time = modification_time(file) - # Check if file was changed or if force a reload - reload = MTIMES[file] && File.mtime(file) > MTIMES[file] - return if !force && !reload && MTIMES[file] + return if !force && m_time && !reload - # Removes all classes declared in the specified file - if klasses = LOADED_CLASSES.delete(file) - klasses.each { |klass| remove_constant(klass) } - end - - # Remove all loaded fatures with our file - if features = LOADED_FILES[file] - features.each { |feature| $LOADED_FEATURES.delete(feature) } - end + remove_loaded_file_classes(file) + remove_loaded_file_features(file) # Duplicate objects and loaded features before load file - klasses = ObjectSpace.classes.dup - files = $LOADED_FEATURES.dup + klasses = ObjectSpace.classes + files = Set.new($LOADED_FEATURES.dup) - # Now we can reload dependencies of our file - if features = LOADED_FILES.delete(file) - features.each { |feature| safe_load(feature, :force => true) } - end + reload_deps_of_file(file) # And finally load the specified file begin logger.devel :loading, began_at, file if !reload logger.debug :reload, began_at, file if reload - $LOADED_FEATURES.delete(file) - verbosity_was, $-v = $-v, nil + + $LOADED_FEATURES.delete(file) if files.include?(file) + Padrino::Utils.silence_output loaded = false require(file) loaded = true - MTIMES[file] = File.mtime(file) + update_modification_time(file) rescue SyntaxError => e logger.error "Cannot require #{file} due to a syntax error: #{e.message}" ensure - $-v = verbosity_was - new_constants = (ObjectSpace.classes - klasses).uniq + Padrino::Utils.unsilence_output + new_constants = ObjectSpace.new_classes(klasses) if loaded - # Store the file details - LOADED_CLASSES[file] = new_constants - LOADED_FILES[file] = ($LOADED_FEATURES - files - [file]).uniq - # Track only features in our Padrino.root - LOADED_FILES[file].delete_if { |feature| !in_root?(feature) } + process_loaded_file(:file => file, + :constants => new_constants, + :files => files) else logger.devel "Failed to load #{file}; removing partially defined constants" - new_constants.each { |klass| remove_constant(klass) } + unload_constants(new_constants) end - end end @@ -183,8 +169,8 @@ module Padrino # Removes the specified class and constant. # def remove_constant(const) - return if exclude_constants.compact.uniq.any? { |c| const._orig_klass_name.index(c) == 0 } && - !include_constants.compact.uniq.any? { |c| const._orig_klass_name.index(c) == 0 } + return if exclude_constants.any? { |c| const._orig_klass_name.index(c) == 0 } && + !include_constants.any? { |c| const._orig_klass_name.index(c) == 0 } begin parts = const.to_s.sub(/^::(Object)?/, 'Object::').split('::') object = parts.pop @@ -195,6 +181,101 @@ module Padrino end private + + ### + # Clear instance variables that keep track of + # loaded features/files/mtimes + # + def clear_modification_times + MTIMES.clear + end + + def clear_loaded_classes + LOADED_CLASSES.each do |file, klasses| + klasses.each { |klass| remove_constant(klass) } + LOADED_CLASSES.delete(file) + end + end + + def clear_loaded_files_and_features + LOADED_FILES.each do |file, dependencies| + dependencies.each { |dependency| $LOADED_FEATURES.delete(dependency) } + $LOADED_FEATURES.delete(file) + end + end + + ### + # Macro for mtime query + # + def modification_time(file) + MTIMES[file] + end + + ### + # Macro for mtime update + # + def update_modification_time(file) + MTIMES[file] = File.mtime(file) + end + + ### + # Tracks loaded file features/classes/constants + # + def process_loaded_file(*args) + options = args.extract_options! + new_constants = options[:constants] + files = options[:files] + file = options[:file] + + # Store the file details + LOADED_CLASSES[file] = new_constants + LOADED_FILES[file] = Set.new($LOADED_FEATURES) - files - [file] + + # Track only features in our Padrino.root + LOADED_FILES[file].delete_if { |feature| !in_root?(feature) } + end + + ### + # Unloads all constants in new_constants + # + def unload_constants(new_constants) + new_constants.each { |klass| remove_constant(klass) } + end + + ### + # Safe load dependencies of a file + # + def reload_deps_of_file(file) + if features = LOADED_FILES.delete(file) + features.each { |feature| safe_load(feature, :force => true) } + end + end + + ## + # Check if file was changed or if force a reload + # + def should_reload?(file) + MTIMES[file] && File.mtime(file) > MTIMES[file] + end + + ## + # Removes all classes declared in the specified file + # + def remove_loaded_file_classes(file) + if klasses = LOADED_CLASSES.delete(file) + klasses.each { |klass| remove_constant(klass) } + end + end + + ## + # Remove all loaded fatures with our file + # + def remove_loaded_file_features(file) + if features = LOADED_FILES[file] + features.each { |feature| $LOADED_FEATURES.delete(feature) } + end + end + ## # Return the mounted_apps providing the app location # Can be an array because in one app.rb we can define multiple Padrino::Appplications @@ -218,15 +299,21 @@ module Padrino # and monitors them for any changes. # def rotation - files = Padrino.load_paths.map { |path| Dir["#{path}/**/*.rb"] }.flatten - files = files | Padrino.mounted_apps.map { |app| app.app_file } - files = files | Padrino.mounted_apps.map { |app| app.app_obj.dependencies }.flatten - files.uniq.map do |file| + files_for_rotation.uniq.map do |file| file = File.expand_path(file) next if Padrino::Reloader.exclude.any? { |base| file.index(base) == 0 } || !File.exist?(file) yield file, File.mtime(file) end.compact end + + ## + # Creates an array of paths for use in #rotation + # + def files_for_rotation + files = Padrino.load_paths.map { |path| Dir["#{path}/**/*.rb"] }.flatten + files = files | Padrino.mounted_apps.map { |app| app.app_file } + files = files | Padrino.mounted_apps.map { |app| app.app_obj.dependencies }.flatten + end end # self ## diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/router.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/router.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/router.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/router.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/server.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/server.rb similarity index 84% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/server.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/server.rb index 97e78427..07c8d4a0 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/server.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/server.rb @@ -4,8 +4,8 @@ module Padrino # thin, mongrel, or webrick in that order. # # @example - # Padrino.run! # with these defaults => host: "localhost", port: "3000", adapter: the first found - # Padrino.run!("localhost", "4000", "mongrel") # use => host: "0.0.0.0", port: "3000", adapter: "mongrel" + # Padrino.run! # with these defaults => host: "127.0.0.1", port: "3000", adapter: the first found + # Padrino.run!("0.0.0.0", "4000", "mongrel") # use => host: "0.0.0.0", port: "4000", adapter: "mongrel" # def self.run!(options={}) Padrino.load! @@ -17,17 +17,17 @@ module Padrino # class Server < Rack::Server # Server Handlers - Handlers = [:thin, :mongrel, :trinidad, :webrick] + Handlers = [:thin, :puma, :mongrel, :trinidad, :webrick] # Starts the application on the available server with specified options. def self.start(app, opts={}) options = {}.merge(opts) # We use a standard hash instead of Thor::CoreExt::HashWithIndifferentAccess options.symbolize_keys! - options[:Host] = options.delete(:host) || '0.0.0.0' + options[:Host] = options.delete(:host) || '127.0.0.1' options[:Port] = options.delete(:port) || 3000 options[:AccessLog] = [] if options[:daemonize] - options[:pid] = options[:pid].blank? ? File.expand_path('tmp/pids/server.pid') : opts[:pid] + options[:pid] = File.expand_path(options[:pid].blank? ? 'tmp/pids/server.pid' : opts[:pid]) FileUtils.mkdir_p(File.dirname(options[:pid])) end options[:server] = detect_rack_handler if options[:server].blank? diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/support_lite.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/support_lite.rb similarity index 80% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/support_lite.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/support_lite.rb index 0c92040d..97cbe518 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/support_lite.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/support_lite.rb @@ -9,6 +9,7 @@ require 'active_support/core_ext/object/blank' # present? require 'active_support/core_ext/array/extract_options' # extract_options require 'active_support/inflector/methods' # constantize require 'active_support/inflector/inflections' # pluralize +require 'active_support/core_ext/string/output_safety' # SafeBuffer and html_safe require 'active_support/inflections' # load default inflections require 'yaml' unless defined?(YAML) # load yaml for i18n require 'win32console' if RUBY_PLATFORM =~ /(win|m)32/ # ruby color support for win @@ -110,13 +111,49 @@ end module ObjectSpace class << self + ## # Returns all the classes in the object space. - def classes - ObjectSpace.each_object(Module).select do |klass| - # Why? Ruby, when you remove a costant dosen't remove it from - # rb_tables, this mean that here we can find classes that was - # removed. - klass.name rescue false + # Optionally, a block can be passed, for example the following code + # would return the classes that start with the character "A": + # + # ObjectSpace.classes do |klass| + # if klass.to_s[0] == "A" + # klass + # end + # end + # + def classes(&block) + rs = Set.new + + ObjectSpace.each_object(Class).each do |klass| + if block + if r = block.call(klass) + # add the returned value if the block returns something + rs << r + end + else + rs << klass + end + end + + rs + end + + ## + # Returns a list of existing classes that are not included in "snapshot" + # This method is useful to get the list of new classes that were loaded + # after an event like requiring a file. + # Usage: + # + # snapshot = ObjectSpace.classes + # # require a file + # ObjectSpace.new_classes(snapshot) + # + def new_classes(snapshot) + self.classes do |klass| + if !snapshot.include?(klass) + klass + end end end end @@ -205,3 +242,19 @@ I18n.load_path += Dir["#{File.dirname(__FILE__)}/locale/*.yml"] if defined?(I18n # Used to determine if this file has already been required # module SupportLite; end + +module Padrino + class Utils + ### + # Silences output verbosity level so load + # errors are not visible when safe_load(file) + # + def self.silence_output + @verbosity_level, $-v = $-v, nil + end + + def self.unsilence_output + $-v = @verbosity_level + end + end +end \ No newline at end of file diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/tasks.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/tasks.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/tasks.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/tasks.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/version.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/version.rb similarity index 87% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/version.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/version.rb index 60d844cd..ea940274 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/lib/padrino-core/version.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/version.rb @@ -6,7 +6,7 @@ # module Padrino # The version constant for the current version of Padrino. - VERSION = '0.10.7' unless defined?(Padrino::VERSION) + VERSION = '0.11.2' unless defined?(Padrino::VERSION) # # The current Padrino version. diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/padrino-core.gemspec b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/padrino-core.gemspec old mode 100755 new mode 100644 similarity index 81% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/padrino-core.gemspec rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/padrino-core.gemspec index 62ea3d4f..312c4105 --- a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/padrino-core.gemspec +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/padrino-core.gemspec @@ -30,9 +30,14 @@ Gem::Specification.new do |s| # s.post_install_message << " as shown here:\e[0m https://gist.github.com/1d36a35794dbbd664ea4" # s.post_install_message << "\n\e[32m" + ("*" * 20) + "\n\e[0m" - s.add_dependency("tilt", "~> 1.3.0") - s.add_dependency("sinatra", "~> 1.3.1") - s.add_dependency("http_router", "~> 0.10.2") - s.add_dependency("thor", "~> 0.15.2") - s.add_dependency("activesupport", "~> 3.2.0") + s.add_dependency("tilt", "~> 1.3.7") + if ENV["SINATRA_EDGE"] + s.add_dependency("sinatra") + else + s.add_dependency("sinatra", "~> 1.4.2") + end + s.add_dependency("http_router", "~> 0.11.0") + s.add_dependency("thor", "~> 0.17.0") + s.add_dependency("activesupport", ">= 3.1.0") + s.add_dependency("rack-protection", ">= 1.5.0") end diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/app_gem/Gemfile b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/app_gem/Gemfile new file mode 100644 index 00000000..d3e36607 --- /dev/null +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/app_gem/Gemfile @@ -0,0 +1,4 @@ +source 'https://rubygems.org' + +# Specify your gem's dependencies in app_gem.gemspec +gemspec diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/app_gem/app/app.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/app_gem/app/app.rb new file mode 100644 index 00000000..e3af462e --- /dev/null +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/app_gem/app/app.rb @@ -0,0 +1,3 @@ +class AppGem::App < Padrino::Application + set :version, AppGem::VERSION +end diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/app_gem/app_gem.gemspec b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/app_gem/app_gem.gemspec new file mode 100644 index 00000000..e94081c1 --- /dev/null +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/app_gem/app_gem.gemspec @@ -0,0 +1,17 @@ +# -*- encoding: utf-8 -*- +require File.expand_path('../lib/app_gem/version', __FILE__) + +Gem::Specification.new do |gem| + gem.authors = ["Florian Gilcher"] + gem.email = ["florian.gilcher@asquera.de"] + gem.description = %q{TODO: Write a gem description} + gem.summary = %q{TODO: Write a gem summary} + gem.homepage = "" + + gem.files = `git ls-files`.split($\) + gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) } + gem.test_files = gem.files.grep(%r{^(test|spec|features)/}) + gem.name = "app_gem" + gem.require_paths = ["app", "lib"] + gem.version = AppGem::VERSION +end diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/app_gem/lib/app_gem.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/app_gem/lib/app_gem.rb new file mode 100644 index 00000000..e4a4b239 --- /dev/null +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/app_gem/lib/app_gem.rb @@ -0,0 +1,7 @@ +require 'padrino' + +module AppGem + extend Padrino::Module + + gem! 'app_gem' +end \ No newline at end of file diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/app_gem/lib/app_gem/version.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/app_gem/lib/app_gem/version.rb new file mode 100644 index 00000000..ec2d476c --- /dev/null +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/app_gem/lib/app_gem/version.rb @@ -0,0 +1,3 @@ +module AppGem + VERSION = "0.0.1" +end diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/apps/.components b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/apps/.components similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/apps/.components rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/apps/.components diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/apps/.gitignore b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/apps/.gitignore similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/apps/.gitignore rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/apps/.gitignore diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/apps/complex.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/apps/complex.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/apps/complex.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/apps/complex.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/apps/simple.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/apps/simple.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/apps/simple.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/apps/simple.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/dependencies/a.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/dependencies/a.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/dependencies/a.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/dependencies/a.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/dependencies/b.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/dependencies/b.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/dependencies/b.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/dependencies/b.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/dependencies/c.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/dependencies/c.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/dependencies/c.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/dependencies/c.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/dependencies/circular/e.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/dependencies/circular/e.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/dependencies/circular/e.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/dependencies/circular/e.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/dependencies/circular/f.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/dependencies/circular/f.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/dependencies/circular/f.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/dependencies/circular/f.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/dependencies/circular/g.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/dependencies/circular/g.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/dependencies/circular/g.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/dependencies/circular/g.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/dependencies/d.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/dependencies/d.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/fixtures/dependencies/d.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/fixtures/dependencies/d.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/helper.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/helper.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/helper.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/helper.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/mini_shoulda.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/mini_shoulda.rb similarity index 95% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/mini_shoulda.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/mini_shoulda.rb index 1930d384..b61816a3 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/mini_shoulda.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/mini_shoulda.rb @@ -1,7 +1,7 @@ gem 'minitest' -require 'minitest/spec' require 'minitest/autorun' -require 'mocha' # Load mocha after minitest +require 'minitest/spec' +require 'mocha/setup' begin require 'ruby-debug' diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_application.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_application.rb similarity index 65% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_application.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_application.rb index be9c6202..50173cc8 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_application.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_application.rb @@ -1,17 +1,13 @@ require File.expand_path(File.dirname(__FILE__) + '/helper') +require 'haml' class PadrinoPristine < Padrino::Application; end -class PadrinoTestApp < Padrino::Application; end +class PadrinoTestApp < Padrino::Application; end class PadrinoTestApp2 < Padrino::Application; end describe "Application" do - def setup - Padrino.clear! - end - - def teardown - remove_views - end + before { Padrino.clear! } + after { remove_views } context 'for application functionality' do @@ -19,24 +15,36 @@ describe "Application" do assert File.identical?(__FILE__, PadrinoPristine.app_file) assert_equal :padrino_pristine, PadrinoPristine.app_name assert_equal :test, PadrinoPristine.environment - assert_equal Padrino.root("views"), PadrinoPristine.views - assert PadrinoPristine.raise_errors + assert_equal Padrino.root('views'), PadrinoPristine.views + assert PadrinoPristine.raise_errors assert !PadrinoPristine.logging assert !PadrinoPristine.sessions assert !PadrinoPristine.dump_errors assert !PadrinoPristine.show_exceptions - assert PadrinoPristine.raise_errors + assert PadrinoPristine.raise_errors assert !Padrino.configure_apps end + should 'check haml options on production' do + assert defined?(Haml), 'Haml not defined' + assert_equal :test, PadrinoPristine.environment + assert !PadrinoPristine.haml[:ugly] + Padrino.stub :env, :production do + PadrinoPristine.send :default_configuration! + assert_equal :production, Padrino.env + assert_equal :production, PadrinoPristine.environment + assert PadrinoPristine.haml[:ugly] + PadrinoPristine.environment = :test + end + end + should 'check padrino specific options' do assert !PadrinoPristine.instance_variable_get(:@_configured) PadrinoPristine.send(:setup_application!) assert_equal :padrino_pristine, PadrinoPristine.app_name assert_equal 'StandardFormBuilder', PadrinoPristine.default_builder - assert PadrinoPristine.instance_variable_get(:@_configured) + assert PadrinoPristine.instance_variable_get(:@_configured) assert !PadrinoPristine.reload? - assert !PadrinoPristine.flash end should 'set global project settings' do @@ -48,18 +56,27 @@ describe "Application" do assert_equal PadrinoTestApp.session_secret, PadrinoTestApp2.session_secret end + should 'be able to configure_apps multiple times' do + Padrino.configure_apps { set :foo1, "bar" } + Padrino.configure_apps { set :foo1, "bam" } + Padrino.configure_apps { set :foo2, "baz" } + PadrinoTestApp.send(:default_configuration!) + assert_equal "bam", PadrinoTestApp.settings.foo1, "should have foo1 assigned to bam" + assert_equal "baz", PadrinoTestApp.settings.foo2, "should have foo2 assigned to baz" + end + should "have shared sessions accessible in project" do Padrino.configure_apps { enable :sessions; set :session_secret, 'secret' } Padrino.mount("PadrinoTestApp").to("/write") Padrino.mount("PadrinoTestApp2").to("/read") - PadrinoTestApp.tap { |app| app.send(:default_configuration!) - app.get("/") { session[:foo] = "shared" } } - PadrinoTestApp2.tap { |app| app.send(:default_configuration!) - app.get("/") { session[:foo] } } - browser = Rack::Test::Session.new(Rack::MockSession.new(Padrino.application)) - browser.get '/write' - browser.get '/read' - assert_equal 'shared', browser.last_response.body + PadrinoTestApp.send :default_configuration! + PadrinoTestApp.get('/') { session[:foo] = "shared" } + PadrinoTestApp2.send(:default_configuration!) + PadrinoTestApp2.get('/') { session[:foo] } + @app = Padrino.application + get '/write' + get '/read' + assert_equal 'shared', body end # compare to: test_routing: allow global provides diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_core.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_core.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_core.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_core.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_csrf_protection.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_csrf_protection.rb new file mode 100644 index 00000000..fd6c7bd7 --- /dev/null +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_csrf_protection.rb @@ -0,0 +1,80 @@ +require File.expand_path(File.dirname(__FILE__) + '/helper') + +describe "Application" do + before { Padrino.clear! } + after { remove_views } + + context 'CSRF protection' do + context "with CSRF protection on" do + before do + mock_app do + enable :sessions + enable :protect_from_csrf + post('/'){ 'HI' } + end + end + + should "not allow requests without tokens" do + post "/" + assert_equal 403, status + end + + should "allow requests with correct tokens" do + post "/", {"authenticity_token" => "a"}, 'rack.session' => {:csrf => "a"} + assert_equal 200, status + end + + should "not allow requests with incorrect tokens" do + post "/", {"authenticity_token" => "a"}, 'rack.session' => {:csrf => "b"} + assert_equal 403, status + end + end + + context "without CSRF protection on" do + before do + mock_app do + enable :sessions + disable :protect_from_csrf + post('/'){ 'HI' } + end + end + + should "allows requests without tokens" do + post "/" + assert_equal 200, status + end + + should "allow requests with correct tokens" do + post "/", {"authenticity_token" => "a"}, 'rack.session' => {:csrf => "a"} + assert_equal 200, status + end + + should "allow requests with incorrect tokens" do + post "/", {"authenticity_token" => "a"}, 'rack.session' => {:csrf => "b"} + assert_equal 200, status + end + end + + context "with optional CSRF protection" do + before do + mock_app do + enable :sessions + enable :protect_from_csrf + set :allow_disabled_csrf, true + post('/on') { 'HI' } + post('/off', :csrf_protection => false) { 'HI' } + end + end + + should "allow access to routes with csrf_protection off" do + post "/off" + assert_equal 200, status + end + + should "not allow access to routes with csrf_protection on" do + post "/on" + assert_equal 403, status + end + end + end +end \ No newline at end of file diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_dependencies.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_dependencies.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_dependencies.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_dependencies.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_filters.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_filters.rb similarity index 81% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_filters.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_filters.rb index b1ebe47b..a7b615d6 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_filters.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_filters.rb @@ -275,4 +275,74 @@ describe "Filters" do get '/foo' assert_equal 'before', test end + + should "call before filters only once" do + once = '' + mock_app do + error 500 do + 'error 500' + end + before do + once += 'before' + end + get :index do + raise Exception, 'Oops' + end + end + + get '/' + assert_equal 'before', once + end + + should 'catch exceptions in before filters' do + doodle = nil + mock_app do + after do + doodle = 'Been after' + end + before do + raise StandardError, "before" + end + get :index do + doodle = 'Been now' + end + error 500 do + "We broke #{env['sinatra.error'].message}" + end + end + + get '/' + assert_equal 'We broke before', body + assert_equal nil, doodle + end + + should 'catch exceptions in after filters if no exceptions caught before' do + doodle = '' + mock_app do + after do + doodle += ' and after' + raise StandardError, "after" + end + get :foo do + doodle = 'Been now' + raise StandardError, "now" + end + get :index do + doodle = 'Been now' + end + error 500 do + "We broke #{env['sinatra.error'].message}" + end + end + + get '/foo' + assert_equal 'We broke now', body + assert_equal 'Been now', doodle + + doodle = '' + get '/' + assert_equal 'We broke after', body + assert_equal 'Been now and after', doodle + end + end diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_flash.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_flash.rb new file mode 100644 index 00000000..0e5bb8e9 --- /dev/null +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_flash.rb @@ -0,0 +1,168 @@ +require File.expand_path(File.dirname(__FILE__) + '/helper') + +describe Padrino::Flash do + context 'storage' do + before do + @storage = Padrino::Flash::Storage.new( + :success => 'Success msg', + :error => 'Error msg', + :notice => 'Notice msg', + :custom => 'Custom msg' + ) + @storage[:one] = 'One msg' + @storage[:two] = 'Two msg' + end + + should 'acts like hash' do + assert_respond_to @storage, :[] + end + + should 'know its size' do + assert_equal 4, @storage.length + assert_equal @storage.length, @storage.size + end + + should 'sweep its content' do + assert_equal 2, @storage.sweep.size + assert_empty @storage.sweep + end + + should 'discard everything' do + assert_empty @storage.discard.sweep + end + + should 'discard specified key' do + assert_equal 1, @storage.discard(:one).sweep.size + end + + should 'keep everything' do + assert_equal 2, @storage.sweep.keep.sweep.size + end + + should 'keep only specified key' do + assert_equal 1, @storage.sweep.keep(:one).sweep.size + end + + should 'not know the values you set right away' do + @storage[:foo] = 'bar' + assert_nil @storage[:foo] + end + + should 'knows the values you set next time' do + @storage[:foo] = 'bar' + @storage.sweep + assert_equal 'bar', @storage[:foo] + end + + should 'set values for now' do + @storage.now[:foo] = 'bar' + assert_equal 'bar', @storage[:foo] + end + + should 'forgets values you set only for now next time' do + @storage.now[:foo] = 'bar' + @storage.sweep + assert_nil @storage[:foo] + end + end + + routes = Proc.new do + get :index do + params[:key] ? flash[params[:key].to_sym].to_s : flash.now.inspect + end + + post :index do + params.each { |k,v| flash[k.to_sym] = v.to_s } + flash.next.inspect + end + + get :session do + settings.sessions?.inspect + end + + get :redirect do + redirect url(:index, :key => :foo), 301, :foo => 'redirected!' + end + + get :success do + flash.success = 'Yup' + end + + get :error do + flash.error = 'Arg' + end + + get :notice do + flash.notice = 'Mmm' + end + end + + context 'padrino application without sessions' do + before { mock_app(&routes) } + + should 'show nothing' do + get '/' + assert_equal '{}', body + end + + should 'set a flash' do + post '/', :foo => :bar + assert_equal '{:foo=>"bar"}', body + end + end + + context 'padrino application with sessions' do + before do + mock_app { enable :sessions; class_eval(&routes) } + end + + should 'be sure have sessions enabled' do + assert @app.sessions + get '/session' + assert_equal 'true', body + end + + should 'show nothing' do + get '/' + assert_equal '{}', body + end + + should 'set a flash' do + post '/', :foo => :bar + assert_equal '{:foo=>"bar"}', body + end + + should 'get a flash' do + post '/', :foo => :bar + get '/', :key => :foo + assert_equal 'bar', body + post '/' + assert_equal '{}', body + end + + should 'follow redirects with flash' do + get '/redirect' + follow_redirect! + assert_equal 'redirected!', body + assert 301, status + end + + should 'set success' do + get '/success' + get '/', :key => :success + assert_equal 'Yup', body + end + + should 'set error' do + get '/error' + get '/', :key => :error + assert_equal 'Arg', body + end + + should 'set notice' do + get '/notice' + get '/', :key => :notice + assert_equal 'Mmm', body + end + end +end diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_locale.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_locale.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_locale.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_locale.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_logger.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_logger.rb similarity index 87% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_logger.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_logger.rb index 767d5ed2..849d0647 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_logger.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_logger.rb @@ -152,3 +152,30 @@ describe "alternate logger: stdlib logger" do assert_match /\e\[1m200\e\[0m OK/, @log.string end end + +describe "options :colorize_logging" do + def access_to_mock_app + mock_app do + enable :logging + get("/"){ "Foo" } + end + get "/" + end + context 'default' do + should 'use colorize logging' do + Padrino::Logger.setup! + + access_to_mock_app + assert_match /\e\[1m200\e\[0m OK/, Padrino.logger.log.string + end + end + context 'set value is false' do + should 'not use colorize logging' do + Padrino::Logger::Config[:test][:colorize_logging] = false + Padrino::Logger.setup! + + access_to_mock_app + assert_match /200 OK/, Padrino.logger.log.string + end + end +end diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_mounter.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_mounter.rb similarity index 86% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_mounter.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_mounter.rb index 557de834..097be4b7 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_mounter.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_mounter.rb @@ -113,11 +113,13 @@ describe "Mounter" do class ::OneApp < Padrino::Application get("/test") { "test" } get(:index, :provides => [:js, :json]) { "index" } + get(%r{/foo|/baz}) { "regexp" } controllers :posts do get(:index) { "index" } get(:new, :provides => :js) { "new" } get(:show, :provides => [:js, :html], :with => :id) { "show" } post(:create, :provides => :js, :with => :id) { "create" } + get(:regexp, :map => %r{/foo|/baz}) { "regexp" } end end class ::TwoApp < Padrino::Application @@ -133,9 +135,9 @@ describe "Mounter" do Padrino.mount("one_app").to("/") Padrino.mount("two_app").to("/two_app") - assert_equal 11, Padrino.mounted_apps[0].routes.size + assert_equal 15, Padrino.mounted_apps[0].routes.size assert_equal 7, Padrino.mounted_apps[1].routes.size - assert_equal 5, Padrino.mounted_apps[0].named_routes.size + assert_equal 6, Padrino.mounted_apps[0].named_routes.size assert_equal 5, Padrino.mounted_apps[1].named_routes.size first_route = Padrino.mounted_apps[0].named_routes[3] @@ -148,6 +150,10 @@ describe "Mounter" do assert_equal "(:users, :create)", another_route.name assert_equal "POST", another_route.verb assert_equal "/two_app/users/create", another_route.path + regexp_route = Padrino.mounted_apps[0].named_routes[5] + assert_equal "posts_regexp", regexp_route.identifier.to_s + assert_equal "(:posts, :regexp)", regexp_route.name + assert_equal "/\\/foo|\\/baz/", regexp_route.path end should 'correctly instantiate a new padrino application' do @@ -173,5 +179,21 @@ describe "Mounter" do assert res.ok? assert_equal File.read(__FILE__), res.body end + + should "load apps from gems" do + spec_file = Padrino.root("fixtures", "app_gem", "app_gem.gemspec") + spec = Gem::Specification.load(spec_file) + spec.activate + def spec.full_gem_path + Padrino.root("fixtures", "app_gem") + end + + require Padrino.root("fixtures", "app_gem", "lib", "app_gem") + + Padrino.mount("AppGem::App").to("/from_gem") + mounter = Padrino.mounted_apps[0] + assert_equal AppGem::App, mounter.app_obj + assert_equal Padrino.root('public'), mounter.app_obj.public_folder + end end end diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_reloader_complex.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_reloader_complex.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_reloader_complex.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_reloader_complex.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_reloader_simple.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_reloader_simple.rb similarity index 90% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_reloader_simple.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_reloader_simple.rb index 2e9e81e6..ffcc37f4 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_reloader_simple.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_reloader_simple.rb @@ -78,20 +78,20 @@ describe "SimpleReloader" do last_body = body assert_equal 2, @app.filters[:before].size # one is ours the other is default_filter for content type assert_equal 1, @app.errors.size - assert_equal 1, @app.filters[:after].size + assert_equal 2, @app.filters[:after].size # app + content-type + padrino-flash assert_equal 0, @app.middleware.size assert_equal 4, @app.routes.size # GET+HEAD of "/" + GET+HEAD of "/rand" = 4 - assert_equal 2, @app.extensions.size # [Padrino::Routing, Padrino::Rendering] + assert_equal 3, @app.extensions.size # [Padrino::Routing, Padrino::Rendering, Padrino::Flash] assert_equal 0, @app.templates.size @app.reload! get "/rand" assert_not_equal last_body, body assert_equal 2, @app.filters[:before].size # one is ours the other is default_filter for content type assert_equal 1, @app.errors.size - assert_equal 1, @app.filters[:after].size + assert_equal 2, @app.filters[:after].size assert_equal 0, @app.middleware.size assert_equal 4, @app.routes.size # GET+HEAD of "/" = 2 - assert_equal 2, @app.extensions.size # [Padrino::Routing, Padrino::Rendering] + assert_equal 3, @app.extensions.size # [Padrino::Routing, Padrino::Rendering, Padrino::Flash] assert_equal 0, @app.templates.size end end diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_rendering.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_rendering.rb similarity index 85% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_rendering.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_rendering.rb index 9d03959e..bd9782b5 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_rendering.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_rendering.rb @@ -1,5 +1,6 @@ require File.expand_path(File.dirname(__FILE__) + '/helper') require 'i18n' +require 'slim' describe "Rendering" do def setup @@ -28,7 +29,7 @@ describe "Rendering" do "this is a <%= yield %>" end - get("/"){ render :erb, "sinatra layout" } + get("/"){ render :erb, "sinatra layout", :layout => true } end get "/" @@ -137,6 +138,7 @@ describe "Rendering" do should 'use correct layout with each controller' do create_layout :foo, "foo layout at <%= yield %>" create_layout :bar, "bar layout at <%= yield %>" + create_layout :baz, "baz layout at <%= yield %>" create_layout :application, "default layout at <%= yield %>" mock_app do get("/"){ render :erb, "application" } @@ -148,6 +150,10 @@ describe "Rendering" do layout :bar get("/"){ render :erb, "bar" } end + controller :baz do + layout :baz + get("/"){ render :erb, "baz", :layout => true } + end controller :none do get("/") { render :erb, "none" } get("/with_foo_layout") { render :erb, "none with layout", :layout => :foo } @@ -157,6 +163,8 @@ describe "Rendering" do assert_equal "foo layout at foo", body get "/bar" assert_equal "bar layout at bar", body + get "/baz" + assert_equal "baz layout at baz", body get "/none" assert_equal "default layout at none", body get "/none/with_foo_layout" @@ -207,7 +215,7 @@ describe "Rendering" do create_view :index, "<%= foo %>" mock_app do enable :logging - get("/") { render "index", { :layout => true }, { :foo => "bar" } } + get("/") { render "index", { :layout => nil }, { :foo => "bar" } } end get "/" assert_equal "bar", body @@ -396,7 +404,7 @@ describe "Rendering" do assert_equal "Im Italian Js", body I18n.locale = :en get "/foo.pk" - assert_equal 405, status + assert_equal 404, status end should 'resolve template content_type and locale with layout' do @@ -438,7 +446,7 @@ describe "Rendering" do get "/bar.json" assert_equal "Im a json", body get "/bar.pk" - assert_equal 405, status + assert_equal 404, status end should 'renders erb with blocks' do @@ -457,5 +465,68 @@ describe "Rendering" do assert ok? assert_equal 'THIS. IS. SPARTA!', body end + + should 'render erb to a SafeBuffer' do + mock_app do + layout do + "this is a <%= yield %>" + end + get '/' do + render :erb, '

<%= %q{} %>

', :layout => false + end + get '/with_layout' do + render :erb, 'span', :layout => true + end + end + get '/' + assert ok? + assert_equal '

<script lang="ronin">alert("https://github.com/ronin-ruby/ronin")</script>

', body + + get '/with_layout' + assert ok? + assert_equal 'this is a span', body + end + + should 'render haml to a SafeBuffer' do + mock_app do + layout do + "%p= yield" + end + get '/' do + render :haml, '%p= %s{}', :layout => false + end + get '/with_layout' do + render :haml, "%div\n foo", :layout => true + end + end + get '/' + assert ok? + assert_equal '

<script lang="ronin">alert("https://github.com/ronin-ruby/ronin")</script>

', body.strip + + get 'with_layout' + assert ok? + assert_equal '

foo

', body.gsub(/\s+/, "") + end + + should 'render slim to a SafeBuffer' do + mock_app do + layout do + "p= yield" + end + get '/' do + render :slim, 'p = %q{}', :layout => false + end + get "/with_layout" do + render :slim, 'div foo', :layout => true + end + end + get '/' + assert ok? + assert_equal '

<script lang="ronin">alert("https://github.com/ronin-ruby/ronin")</script>

', body.strip + + get '/with_layout' + assert ok? + assert_equal '

foo

', body.strip + end end end diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_restful_routing.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_restful_routing.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_restful_routing.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_restful_routing.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_router.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_router.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_router.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_router.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_routing.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_routing.rb similarity index 88% rename from middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_routing.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_routing.rb index d6ae1428..1dc97a01 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.10.7/test/test_routing.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_routing.rb @@ -1,3 +1,4 @@ +#encoding: utf-8 require File.expand_path(File.dirname(__FILE__) + '/helper') class FooError < RuntimeError; end @@ -57,12 +58,12 @@ describe "Routing" do should 'accept regexp routes' do mock_app do - get(%r{/fob|/baz}) { "regexp" } + get(%r./fob|/baz.) { "regexp" } get("/foo") { "str" } - get %r{/([0-9]+)/} do |num| - "Your lucky number: #{num} #{params[:captures].first}" + get %r./([0-9]+)/. do |num| + "Your lucky number: #{num} #{params[:captures].first}" end - get /\/page\/([0-9]+)|\// do |num| + get %r./page/([0-9]+)|/. do |num| "My lucky number: #{num} #{params[:captures].first}" end end @@ -72,8 +73,8 @@ describe "Routing" do assert_equal "regexp", body get "/baz" assert_equal "regexp", body - get "/1234/" - assert_equal "Your lucky number: 1234 1234", body + get "/321/" + assert_equal "Your lucky number: 321 321", body get "/page/99" assert_equal "My lucky number: 99 99", body end @@ -100,6 +101,24 @@ describe "Routing" do assert_equal "no access", body end + should 'parse routes that are encoded' do + mock_app do + get('/щч') { 'success!' } + end + get(URI.escape('/щч')) + assert_equal 'success!', body + end + + should 'encode params using UTF-8' do + skip unless ''.respond_to?(:encoding) # for 1.8.7 + + mock_app do + get('/:foo') { params[:foo].encoding.name } + end + get '/bar' + assert_equal 'UTF-8', body + end + should 'match correctly similar paths' do mock_app do get("/my/:foo_id"){ params[:foo_id] } @@ -138,9 +157,9 @@ describe "Routing" do post("/main"){ "hello" } end assert_equal 3, app.routes.size, "should generate GET, HEAD and PUT" - assert_equal ["GET"], app.routes[0].conditions[:request_method] - assert_equal ["HEAD"], app.routes[1].conditions[:request_method] - assert_equal ["POST"], app.routes[2].conditions[:request_method] + assert_equal "GET", app.routes[0].request_methods.first + assert_equal "HEAD", app.routes[1].request_methods.first + assert_equal "POST", app.routes[2].request_methods.first end should 'generate basic urls' do @@ -192,13 +211,13 @@ describe "Routing" do get "/b.js" assert_equal "/b.js", body get "/b.ru" - assert_equal 405, status + assert_equal 404, status get "/c.js" assert_equal "/c.json", body get "/c.json" assert_equal "/c.json", body get "/c.ru" - assert_equal 405, status + assert_equal 404, status get "/d" assert_equal "/d.js?foo=bar", body get "/d.js" @@ -207,6 +226,14 @@ describe "Routing" do assert_equal 404, status end + should 'allow regex url with format' do + mock_app do + get(/.*/, :provides => :any) { "regexp" } + end + get "/anything" + assert_equal "regexp", body + end + should 'use padrino url method' do mock_app do end @@ -255,7 +282,7 @@ describe "Routing" do end get "/a.xml", {}, {} - assert_equal 405, status + assert_equal 404, status end should "not set content_type to :html if Accept */* and html not in provides" do @@ -276,15 +303,6 @@ describe "Routing" do assert_equal 'json', body end - should "set content_type to :json if render => :json" do - mock_app do - get("/foo"){ render :foo => :bar } - end - - get '/foo' - assert_equal 'application/json;charset=utf-8', content_type - end - should 'set and get content_type' do mock_app do get("/foo"){ content_type(:json); content_type.to_s } @@ -303,6 +321,7 @@ describe "Routing" do end should "allow .'s in param values" do + skip mock_app do get('/id/:email', :provides => [:json]) { |email, format| [email, format] * '/' } end @@ -343,7 +362,7 @@ describe "Routing" do end get "/a.xml", {}, {"HTTP_ACCEPT" => "text/html"} - assert_equal 405, status + assert_equal 404, status end should "generate routes for format simple" do @@ -371,20 +390,32 @@ describe "Routing" do assert_equal "mini", body end + should "should inject the action name into the request" do + mock_app do + controller :posts do + get('/omnomnom(/:id)') { request.action.inspect } + controller :mini do + get([:a, :b, :c]) { request.action.inspect } + end + end + end + get "/posts/omnomnom" + assert_equal "\"/omnomnom(/:id)\"", body + get "/mini/a/b/c" + assert_equal ":a", body + end + should "support not_found" do mock_app do - not_found do - response.status = 404 - 'whatever' - end + not_found { 'whatever' } get :index, :map => "/" do 'index' end end - get '/something' - assert_equal 'whatever', body + get '/wrong' assert_equal 404, status + assert_equal 'whatever', body get '/' assert_equal 'index', body assert_equal 200, status @@ -393,7 +424,7 @@ describe "Routing" do should "should inject the route into the request" do mock_app do controller :posts do - get(:index) { request.route_obj.named.to_s } + get(:index) { request.route_obj.name.to_s } end end get "/posts" @@ -741,7 +772,27 @@ describe "Routing" do assert_equal 404, status end + should "match params and format" do + app = mock_app do + get '/:id', :provides => [:json, :html] do |id, _| + id + end + + get 'format/:id', :provides => [:json, :html] do |id, format| + format + end + end + + get '/123.html' + assert_equal '123', body + + get 'format/123.html' + assert_equal 'html', body + end + + should 'respect priorities' do + skip route_order = [] mock_app do get(:index, :priority => :normal) { route_order << :normal; pass } @@ -815,6 +866,55 @@ describe "Routing" do assert_equal "show 3 1 2", body end + should "respect parent precedence: controllers parents go before route parents" do + mock_app do + controllers :project do + get(:index, :parent => :user) { "index #{params[:user_id]}" } + end + + controllers :bar, :parent => :foo do + get(:index) { "index on foo #{params[:foo_id]} @ bar" } + get(:index, :parent => :baz) { "index on foo #{params[:foo_id]} @ baz #{params[:baz_id]} @ bar" } + end + end + + get "/user/1/project" + assert_equal "index 1", body + get "/foo/1/bar" + assert_equal "index on foo 1 @ bar", body + get "/foo/1/baz/2/bar" + assert_equal "index on foo 1 @ baz 2 @ bar", body + end + + should "keep a reference to the parent on the route" do + mock_app do + controllers :project do + get(:index, :parent => :user) { "index #{params[:user_id]}" } + get(:index, :parent => [:user, :section]) { "index #{params[:user_id]} #{params[:section_id]}" } + get(:edit, :with => :id, :parent => :user) { "edit #{params[:id]} #{params[:user_id]}"} + get(:show, :with => :id, :parent => [:user, :product]) { "show #{params[:id]} #{params[:user_id]} #{params[:product_id]}"} + end + + controllers :bar, :parent => :foo do + get(:index) { "index on foo/bar" } + get(:index, :parent => :baz) { "index on foo/baz/bar" } + end + end + + # get "/user/1/project" + assert_equal :user, @app.routes[0].parent + # get "/user/1/section/3/project" + assert_equal [:user, :section], @app.routes[2].parent + # get "/user/1/project/edit/2" + assert_equal :user, @app.routes[4].parent + # get "/user/1/product/2/project/show/3" + assert_equal [:user, :product], @app.routes[6].parent + # get "/foo/1/bar" + assert_equal :foo, @app.routes[8].parent + # get "/foo/1/baz/2/bar" + assert_equal [:foo, :baz], @app.routes[10].parent + end + should "apply parent to controller" do mock_app do controller :project, :parent => :user do @@ -1041,6 +1141,24 @@ describe "Routing" do assert_equal 'js', body end + should "set content_type to :html if Accept */* and provides of :any" do + mock_app do + get("/foo", :provides => :any) { content_type.to_s } + end + + get '/foo', {}, { 'HTTP_ACCEPT' => '*/*' } + assert_equal 'html', body + end + + should "set content_type to :js if Accept includes both application/javascript, */*;q=0.5 and provides of :any" do + mock_app do + get("/foo", :provides => :any) { content_type.to_s } + end + + get '/foo', {}, { 'HTTP_ACCEPT' => 'application/javascript, */*;q=0.5' } + assert_equal 'js', body + end + should 'allows custom route-conditions to be set via route options and halt' do protector = Module.new do def protect(*args) @@ -1323,11 +1441,11 @@ describe "Routing" do get "/.json" assert_equal "This is the get index.json", body get "/.js" - assert_equal 405, status + assert_equal 404, status post "/.json" assert_equal "This is the post index.json", body post "/.js" - assert_equal 405, status + assert_equal 404, status end should "allow controller level mapping" do @@ -1349,6 +1467,33 @@ describe "Routing" do assert_equal "1, 2", body end + should "replace name of named controller with mapping path" do + mock_app do + controller :ugly, :map => "/pretty/:id" do + get(:url3) { "#{params[:id]}" } + get(:url4, :map => 'test-:id2') { "#{params[:id]}, #{params[:id2]}" } + end + controller :voldemort, :map => "" do + get(:url5) { "okay" } + end + end + + url = @app.url(:ugly, :url3, :id => 1) + assert_equal "/pretty/1/url3", url + get url + assert_equal "1", body + + url = @app.url(:ugly, :url4, 3, 5) + assert_equal "/pretty/3/test-5", url + get url + assert_equal "3, 5", body + + url = @app.url(:voldemort, :url5) + assert_equal "/url5", url + get url + assert_equal 'okay', body + end + should 'use absolute and relative maps' do mock_app do controller :one do @@ -1544,8 +1689,8 @@ describe "Routing" do end should "have overideable format" do + ::Rack::Mime::MIME_TYPES[".other"] = "text/html" mock_app do - ::Rack::Mime::MIME_TYPES[".other"] = "text/html" before do params[:format] ||= :other end @@ -1553,6 +1698,7 @@ describe "Routing" do end get "/format_test" assert_equal "other", body + ::Rack::Mime::MIME_TYPES.delete('.other') end should 'invokes handlers registered with ::error when raised' do @@ -1626,13 +1772,33 @@ describe "Routing" do assert_match /not found/, body end - should 'render a custom 404 page' do + should 'render a custom 404 page using not_found' do mock_app do - error(404) { "not found" } + not_found { "custom 404 not found" } end get "/" assert_equal 404, status - assert_match /not found/, body + assert_equal "custom 404 not found", body + end + + should 'render a custom error page using error method' do + skip + mock_app do + error(404) { "custom 404 error" } + end + get "/" + assert_equal 404, status + assert_equal "custom 404 error", body + end + + should 'render a custom 403 page' do + mock_app do + error(403) { "custom 403 not found" } + get("/") { status 403 } + end + get "/" + assert_equal 403, status + assert_equal "custom 403 not found", body end should 'recognize paths' do @@ -1692,4 +1858,12 @@ describe "Routing" do get @app.url(:index, :page => 10) assert_equal "/paginate/66", body end + + should 'not route get :users, :with => :id to /users//' do + mock_app do + get(:users, :with => :id) { 'boo' } + end + get '/users//' + assert_equal 404, status + end end diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_support_lite.rb b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_support_lite.rb new file mode 100644 index 00000000..8102b288 --- /dev/null +++ b/middleman-core/lib/vendored-middleman-deps/padrino-core-0.11.2/test/test_support_lite.rb @@ -0,0 +1,56 @@ +require File.expand_path(File.dirname(__FILE__) + '/helper') + +describe "ObjectSpace" do + def setup + end + + def teardown + end + + context "#classes" do + should "take an snapshot of the current loaded classes" do + snapshot = ObjectSpace.classes + assert_equal snapshot.include?(Padrino::Logger), true + end + + should "return a Set object" do + snapshot = ObjectSpace.classes + assert_equal snapshot.kind_of?(Set), true + end + + should "be able to process a the class name given a block" do + klasses = ObjectSpace.classes do |klass| + if klass.name =~ /^Padrino::/ + klass + end + end + + assert_equal (klasses.size > 1), true + klasses.each do |klass| + assert_match /^Padrino::/, klass.to_s + end + end + end + + context "#new_classes" do + setup do + @snapshot = ObjectSpace.classes + end + + should "return list of new classes" do + class OSTest; end + module OSTestModule; class B; end; end + + new_classes = ObjectSpace.new_classes(@snapshot) + + assert_equal new_classes.size, 2 + assert_equal new_classes.include?(OSTest), true + assert_equal new_classes.include?(OSTestModule::B), true + end + + should "return a Set object" do + new_classes = ObjectSpace.new_classes(@snapshot) + assert_equal new_classes.kind_of?(Set), true + end + end +end diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/content_tag.slim b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/content_tag.slim deleted file mode 100644 index 84e42bf3..00000000 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/content_tag.slim +++ /dev/null @@ -1,9 +0,0 @@ -==content_tag :p, "Test 1", :class => 'test', :id => "test1" - -== content_tag :p, "Test 2" - -==content_tag(:p, :class => 'test', :id => 'test3') do - span Test 3 - -==content_tag(:p) do - span Test 4 diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/fields_for.slim b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/fields_for.slim deleted file mode 100644 index 517ef210..00000000 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/fields_for.slim +++ /dev/null @@ -1,15 +0,0 @@ -- @user = MarkupUser.new -== form_for @user , '/demo1', :id => 'demo-fields-for' do |f| - == f.text_field :gender - == fields_for @user.permission do |permission| - == permission.check_box :can_edit - == permission.check_box :can_delete - == f.fields_for :telephone do |child_form| - == child_form.label :number - == child_form.text_field :number - == f.fields_for :addresses do |child_form| - == child_form.label :name - == child_form.text_field :name - - unless child_form.object.new_record? - == child_form.check_box '_destroy' - == child_form.label '_destroy', :caption => 'Remove' diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/form_for.slim b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/form_for.slim deleted file mode 100644 index 5b3906d6..00000000 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/form_for.slim +++ /dev/null @@ -1,59 +0,0 @@ -== form_for MarkupUser.new, '/demo', :id => 'demo' do |f| - == f.error_messages(:header_message => "custom MarkupUser cannot be saved!") - == f.hidden_field :session_id - p - == f.label :username, :caption => "Login: ", :class => 'user-label' - == f.text_field :username, :class => 'user-text', :value => "John" - p - == f.label :password - == f.password_field :password, :class => 'user-password', :value => "secret" - p - == f.label :age - == f.number_field :age, :class => 'numeric' - p - == f.label :telephone - == f.telephone_field :telephone, :class => 'numeric' - p - == f.label :email, :caption => 'Email Address: ' - == f.email_field :email, :class => 'string' - p - == f.label :webpage, :caption => 'Your Web Page: ' - == f.url_field :webpage, :class => 'string' - p - == f.label :search - == f.search_field :search, :class => 'string' - p - == f.label :photo - == f.file_field :photo, :class => 'user-photo' - p - == f.label :about, :caption => "About Me: " - == f.text_area :about, :class => 'user-about' - p - == f.label :gender, :caption => "Your gender: " - == f.radio_button :gender, :value => 'male' - == f.radio_button :gender, :value => 'female' - p - == f.label :country, :caption => "Your country" - == f.select :country, :options => ['USA', 'Canada', 'Mexico'], :selected => 'USA', :class => 'selector' - p - == f.label :remember_me - == f.check_box :remember_me, :value => "1" - p - == f.submit "Create", :class => 'success', :id => 'demo-button' - p - == f.image_submit "buttons/post.png", :class => 'success', :id => 'image-button' - -== form_for MarkupUser.new, '/another_demo', :id => 'demo2', :method => 'get' do |f| - == f.error_messages :header_message => "custom MarkupUser cannot be saved!" - == f.hidden_field :session_id - == f.text_field_block :username, { :class => 'input' }, { :caption => 'Nickname: ', :class => 'label' } - == f.password_field_block :code, { :class => 'input' } - == f.text_area_block :about, { :class => 'textarea' } - == f.file_field_block :photo, { :class => 'upload' } - == f.check_box_block :remember_me, { :class => 'checker' } - == f.select_block :state, :options => ['California', 'Texas'], :class => 'selector' - == f.submit_block "Create", { :class => 'button' } - == f.image_submit_block "buttons/ok.png", { :class => 'image' } - -== form_for :markup_user, '/third_demo', :id => 'demo3', :method => 'get' do |f| - == f.text_field_block :username diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/form_tag.slim b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/form_tag.slim deleted file mode 100644 index 8ec5c58e..00000000 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/form_tag.slim +++ /dev/null @@ -1,70 +0,0 @@ -== form_tag '/simple', :class => 'simple-form' do - == error_messages_for nil - == field_set_tag do - == hidden_field_tag :session_id, :value => "__secret__" - == label_tag :username - == text_field_tag :username - == label_tag :password - == password_field_tag :password - == label_tag :email - == email_field_tag :email - == label_tag :age - == number_field_tag :age - == label_tag :telephone - == telephone_field_tag :telephone - == label_tag :webpage - == url_field_tag :webpage - == label_tag :search - == search_field_tag :search - == label_tag :color - == select_tag :color, :options => ['green', 'orange', 'purple'] - == label_tag :gender - == radio_button_tag :gender, :value => 'male' - == radio_button_tag :gender, :value => 'female' - == check_box_tag :remember_me - == submit_tag - -== form_tag '/advanced', :id => 'advanced', :class => 'advanced-form', :method => 'get' do - == error_messages_for MarkupUser.new, :header_message => "There are problems with saving user!" - == hidden_field_tag :session_id, :value => "__secret__" - == field_set_tag "Advanced", :class => 'advanced-field-set' do - p - == label_tag :username, :class => 'first', :caption => "Nickname" - == text_field_tag :username, :value => params[:username], :id => 'the_username' - p - == label_tag :password, :class => 'first' - == password_field_tag :password, :value => params[:password] - p - == label_tag :email, :caption => 'Email Address' - == email_field_tag :email, :class => 'string' - p - == label_tag :age, :class => 'age' - == number_field_tag :age, :class => 'numeric' - p - == label_tag :telephone, :class => 'telephone' - == telephone_field_tag :telephone, :class => 'numeric' - p - == label_tag :webpage, :caption => 'Your Home Page' - == url_field_tag :webpage, :class => 'string' - p - == label_tag :search - == search_field_tag :search, :class => 'string' - p - == label_tag :about, :class => 'about', :caption => "About Me" - == text_area_tag :about, :class => 'large' - p - == label_tag :gender, :class => 'gender' - == radio_button_tag :gender, :value => 'male', :checked => true - == radio_button_tag :gender, :value => 'female' - p - == label_tag :photo, :class => 'photo' - == file_field_tag :photo, :class => 'upload' - p - == label_tag :fav_color - == select_tag :fav_color, :options => [ ['green', '1'], ['orange', '2'], ['purple', '3'] ], :selected => '2' - p - == check_box_tag :remember_me, :value => "1", :checked => true - == field_set_tag(:class => 'buttons') do - == submit_tag "Login" - == button_tag "Cancel" - == image_submit_tag "buttons/submit.png" diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/link_to.slim b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/link_to.slim deleted file mode 100644 index 0b7e6e04..00000000 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/link_to.slim +++ /dev/null @@ -1,4 +0,0 @@ -== link_to "Test 1 No Block", '/test1', :class => 'test', :id => 'test1' - -== link_to("/test2", :class => 'test', :id => 'test2') do - span Test 2 With Block diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/mail_to.slim b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/mail_to.slim deleted file mode 100644 index e17a1a44..00000000 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/mail_to.slim +++ /dev/null @@ -1,3 +0,0 @@ -p.simple== mail_to 'test@demo.com' - -p.captioned== mail_to 'test@demo.com', "Click my Email" diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/meta_tag.slim b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/meta_tag.slim deleted file mode 100644 index 7d809deb..00000000 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/meta_tag.slim +++ /dev/null @@ -1,3 +0,0 @@ -== meta_tag "weblog,news", :name => "keywords" - -== meta_tag "text/html; charset=UTF-8", :"http-equiv" => "Content-Type" diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/partials/_slim.slim b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/partials/_slim.slim deleted file mode 100644 index 790066c9..00000000 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/partials/_slim.slim +++ /dev/null @@ -1 +0,0 @@ -=current_engine diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/simple_partial.slim b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/simple_partial.slim deleted file mode 100644 index 698d9a0e..00000000 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/simple_partial.slim +++ /dev/null @@ -1 +0,0 @@ -p.slim= partial 'partials/slim', :engine => "slim" diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/.document b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/.document similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/.document rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/.document diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/.gitignore b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/.gitignore similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/.gitignore rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/.gitignore diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/.yardopts b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/.yardopts similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/.yardopts rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/.yardopts diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/LICENSE.txt b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/LICENSE.txt similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/LICENSE.txt rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/LICENSE.txt diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/README.rdoc b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/README.rdoc similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/README.rdoc rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/README.rdoc diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/Rakefile b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/Rakefile similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/Rakefile rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/Rakefile diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers.rb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers.rb similarity index 96% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers.rb index 5b66eabc..118c0973 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers.rb @@ -4,7 +4,6 @@ require 'i18n' require 'enumerator' require 'active_support/time_with_zone' # next extension depends on this require 'active_support/core_ext/string/conversions' # to_date -require 'active_support/core_ext/float/rounding' # round require 'active_support/option_merger' # with_options require 'active_support/core_ext/object/with_options' # with_options require 'active_support/inflector' # humanize @@ -32,6 +31,7 @@ module Padrino # Padrino::Helpers::FormatHelpers # Padrino::Helpers::RenderHelpers # Padrino::Helpers::NumberHelpers + # Padrino::Helpers::Breadcrumbs # # @param [Sinatra::Application] app # The specified padrino application @@ -52,6 +52,7 @@ module Padrino app.helpers Padrino::Helpers::RenderHelpers app.helpers Padrino::Helpers::NumberHelpers app.helpers Padrino::Helpers::TranslationHelpers + app.helpers Padrino::Helpers::Breadcrumbs end alias :included :registered end diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/asset_tag_helpers.rb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/asset_tag_helpers.rb similarity index 80% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/asset_tag_helpers.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/asset_tag_helpers.rb index 5616c836..5b9601af 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/asset_tag_helpers.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/asset_tag_helpers.rb @@ -4,6 +4,10 @@ module Padrino # Helpers related to producing assets (images,stylesheets,js,etc) within templates. # module AssetTagHelpers + FRAGMENT_HASH = "#".html_safe.freeze + APPEND_ASSET_EXTENSIONS = ["js", "css"] # assets that require an appended extension + ABSOLUTE_URL_PATTERN = %r{^(https?://)} # absolute url regex + ## # Creates a div to display the flash of given type if it exists # @@ -11,6 +15,7 @@ module Padrino # The type of flash to display in the tag. # @param [Hash] options # The html options for this section. + # use :bootstrap => true to support Twitter's bootstrap dismiss alert button # # @return [String] Flash tag html with specified +options+. # @@ -24,11 +29,13 @@ module Padrino # @api public def flash_tag(*args) options = args.extract_options! - args.map do |kind| + bootstrap = options.delete(:bootstrap) if options[:bootstrap] + args.inject(''.html_safe) do |html,kind| flash_text = flash[kind] - next if flash_text.blank? - content_tag(:div, flash_text, options.reverse_merge(:class => kind)) - end.compact * "\n" + next html if flash_text.blank? + flash_text << safe_content_tag(:button, "×", {:type => :button, :class => :close, :'data-dismiss' => :alert}) if bootstrap + html << safe_content_tag(:div, flash_text, options.reverse_merge(:class => kind)) + end end ## @@ -45,6 +52,8 @@ module Padrino # # @option options [String] :anchor # The anchor for the link (i.e #something) + # @option options [String] :fragment + # Synonym for anchor # @option options [Boolean] :if # If true, the link will appear, otherwise not; # @option options [Boolean] :unless @@ -70,66 +79,38 @@ module Padrino # @api public def link_to(*args, &block) options = args.extract_options! - anchor = "##{CGI.escape options.delete(:anchor).to_s}" if options[:anchor] + fragment = options.delete(:anchor).to_s if options[:anchor] + fragment = options.delete(:fragment).to_s if options[:fragment] + url = ActiveSupport::SafeBuffer.new if block_given? - url = args[0] ? args[0] + anchor.to_s : anchor || '#' + if args[0] + url.concat(args[0]) + url.concat(FRAGMENT_HASH).concat(fragment) if fragment + else + url.concat(FRAGMENT_HASH) + url.concat(fragment) if fragment + end options.reverse_merge!(:href => url) link_content = capture_html(&block) return '' unless parse_conditions(url, options) result_link = content_tag(:a, link_content, options) block_is_template?(block) ? concat_content(result_link) : result_link else - name, url = args[0], (args[1] ? args[1] + anchor.to_s : anchor || '#') + if args[1] + url.concat(args[1]) + url.safe_concat(FRAGMENT_HASH).concat(fragment) if fragment + else + url = FRAGMENT_HASH + url.concat(fragment) if fragment + end + name = args[0] return name unless parse_conditions(url, options) options.reverse_merge!(:href => url) content_tag(:a, name, options) end end - ## - # Creates a form containing a single button that submits to the url. - # - # @overload button_to(name, url, options={}) - # @param [String] caption The text caption. - # @param [String] url The url href. - # @param [Hash] options The html options. - # @overload button_to(name, options={}, &block) - # @param [String] url The url href. - # @param [Hash] options The html options. - # @param [Proc] block The button content. - # - # @option options [Boolean] :multipart - # If true, this form will support multipart encoding. - # @option options [String] :remote - # Instructs ujs handler to handle the submit as ajax. - # @option options [Symbol] :method - # Instructs ujs handler to use different http method (i.e :post, :delete). - # - # @return [String] Form and button html with specified +options+. - # - # @example - # button_to 'Delete', url(:accounts_destroy, :id => account), :method => :delete, :class => :form - # # Generates: - # #
- # # - # # - # #
- # - # @api public - def button_to(*args, &block) - name, url = args[0], args[1] - options = args.extract_options! - desired_method = options[:method] - options.delete(:method) if options[:method].to_s !~ /get|post/i - options.reverse_merge!(:method => 'post', :action => url) - options[:enctype] = 'multipart/form-data' if options.delete(:multipart) - options['data-remote'] = 'true' if options.delete(:remote) - inner_form_html = hidden_form_method_field(desired_method) - inner_form_html += block_given? ? capture_html(&block) : submit_tag(name) - content_tag('form', inner_form_html, options) - end - ## # Creates a link tag that browsers and news readers can use to auto-detect an RSS or ATOM feed. # @@ -185,7 +166,7 @@ module Padrino # @api public def mail_to(email, caption=nil, mail_options={}) html_options = mail_options.slice!(:cc, :bcc, :subject, :body) - mail_query = Rack::Utils.build_query(mail_options).gsub(/\+/, '%20').gsub('%40', '@') + mail_query = Rack::Utils.build_query(mail_options).gsub(/\+/, '%20').gsub('%40', '@').gsub('&', '&') mail_href = "mailto:#{email}"; mail_href << "?#{mail_query}" if mail_query.present? link_to((caption || email), mail_href, html_options) end @@ -275,7 +256,7 @@ module Padrino options.reverse_merge!(:media => 'screen', :rel => 'stylesheet', :type => 'text/css') sources.flatten.map { |source| tag(:link, options.reverse_merge(:href => asset_path(:css, source))) - }.join("\n") + }.join("\n").html_safe end ## @@ -298,7 +279,7 @@ module Padrino options.reverse_merge!(:type => 'text/javascript') sources.flatten.map { |source| content_tag(:script, nil, options.reverse_merge(:src => asset_path(:js, source))) - }.join("\n") + }.join("\n").html_safe end ## @@ -341,14 +322,11 @@ module Padrino # # @api semipublic def asset_path(kind, source) - return source if source =~ /^http/ - is_absolute = source =~ %r{^/} - asset_folder = asset_folder_name(kind) - source = source.to_s.gsub(/\s/, '%20') - ignore_extension = (asset_folder.to_s == kind.to_s) # don't append an extension - source << ".#{kind}" unless ignore_extension or source =~ /\.#{kind}/ - result_path = is_absolute ? source : uri_root_path(asset_folder, source) - timestamp = asset_timestamp(result_path, is_absolute) + source = asset_normalize_extension(kind, URI.escape(source.to_s)) + return source if source =~ ABSOLUTE_URL_PATTERN || source =~ /^\// # absolute source + source = File.join(asset_folder_name(kind), source) + timestamp = asset_timestamp(source) + result_path = uri_root_path(source) "#{result_path}#{timestamp}" end @@ -370,14 +348,15 @@ module Padrino # # @example # asset_timestamp("some/path/to/file.png") => "?154543678" - # asset_timestamp("/some/absolute/path.png", true) => nil # - def asset_timestamp(file_path, absolute=false) + def asset_timestamp(file_path) return nil if file_path =~ /\?/ || (self.class.respond_to?(:asset_stamp) && !self.class.asset_stamp) - public_file_path = Padrino.root("public", file_path) if Padrino.respond_to?(:root) + public_path = self.class.public_folder if self.class.respond_to?(:public_folder) + public_path ||= Padrino.root("public") if Padrino.respond_to?(:root) + public_file_path = File.join(public_path, file_path) if public_path stamp = File.mtime(public_file_path).to_i if public_file_path && File.exist?(public_file_path) - stamp ||= Time.now.to_i unless absolute - "?#{stamp}" if stamp + stamp ||= Time.now.to_i + "?#{stamp}" end ### @@ -396,6 +375,19 @@ module Padrino end end + # Normalizes the extension for a given asset + # + # @example + # + # asset_normalize_extension(:images, "/foo/bar/baz.png") => "/foo/bar/baz.png" + # asset_normalize_extension(:js, "/foo/bar/baz") => "/foo/bar/baz.js" + # + def asset_normalize_extension(kind, source) + ignore_extension = !APPEND_ASSET_EXTENSIONS.include?(kind.to_s) + source << ".#{kind}" unless ignore_extension || source =~ /\.#{kind}/ || source =~ ABSOLUTE_URL_PATTERN + source + end + ## # Parses link_to options for given correct conditions # diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/breadcrumb_helpers.rb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/breadcrumb_helpers.rb new file mode 100644 index 00000000..4c244673 --- /dev/null +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/breadcrumb_helpers.rb @@ -0,0 +1,171 @@ +module Padrino + module Helpers + class Breadcrumb + + attr_accessor :home + attr_accessor :items + + DEFAULT_URL = "/" + DEFAULT_CAPTION ="Home Page" + + ## + # initialize breadcrumbs with default value + # + # @example + # before do + # @breadcrumbs = breadcrumbs.new + # end + # + # @api public + def initialize + self.home = { :url => DEFAULT_URL, :caption => DEFAULT_CAPTION, :name => :home } + reset + end + + ## + # Set the custom home (Parent) link + # + # @param [String] url + # The url href + # + # @param [String] caption + # The text caption. + # + # @example + # breadcrumbs.set_home "/HomeFoo", "Foo Home" + # + # + # @api public + def set_home(url, caption) + self.home = { :url => url, :caption => caption.to_s.humanize.html_safe, :name => :home } + reset + end + + ## + # Reset breadcrumbs to default or personal home + # + # @example + # breadcrumbs.reset + # + # @api public + def reset + self.items=[] + self.items << home + end + + ## + # Reset breadcrumbs to default home + # + # @example + # breadcrumbs.reset! + # + # @api public + def reset! + self.home = { :url => DEFAULT_URL, :caption => DEFAULT_CAPTION, :name => :home } + reset + end + + ## + # Add a new breadcrumbs + # + # @param [String] name + # The name of resource + # @param [Symbol] name + # The name of resource + # + # @param [String] url + # The url href. + # + # @param [String] caption + # The text caption + # + # @example + # breadcrumbs.add "foo", "/foo", "Foo Link" + # breadcrumbs.add :foo, "/foo", "Foo Link" + # + # @api public + def add(name, url, caption) + items << { :name => name, :url => url.to_s, :caption => caption.to_s.humanize.html_safe } + end + + alias :<< :add + + ## + # Remove a Breadcrumbs + # + # @param [String] name + # The name of resource to delete from breadcrumbs list + # + # @param [Symbol] name + # The name of resource to delete from breadcrumbs list + # + # @example + # breadcrumbs.del "foo" + # breadcrumbs.del :foo + # + # @api public + def del(name) + items.delete_if { |item| item[:name] == name.to_sym } + end + + end # Breadcrumb + + + module Breadcrumbs + + # Render breadcrumbs to view + # + # @param [Breadcrumbs] breadcrumbs + # The breadcrumbs to render into view + # + # @param [Boolean] bootstrap + # If true, render separation (usefull with Twitter Bootstrap) + # + # @param [String] active + # Css class style set to active breadcrumb + # + # @return [String] Unordered list with breadcrumbs + # + # @example + # = breadcrumbs @breacrumbs + # # Generates: + # # + # + # + # @api public + def breadcrumbs(breadcrumbs, bootstrap=false, active="active") + content="" + breadcrumbs.items[0..-2].each do |item| + content << render_item(item, bootstrap) + end + last = link_to(breadcrumbs.items.last[:caption], breadcrumbs.items.last[:url]) + content << safe_content_tag(:li, last, :class => active) + safe_content_tag(:ul, content, :class => "breadcrumb" ) + end + + private + ## + # Private method to return list item + # + # @param [Hash] item + # The breadcrumb item + # + # @param [Boolean] bootstrap + # If true, render separation (usefull with Twitter Bootstrap) + # + # @return [String] List item with breacrumb + # + # @api public + def render_item(item, bootstrap) + content = "" + content << link_to(item[:caption], item[:url]) + content << safe_content_tag(:span, "/", :class => "divider") if bootstrap + safe_content_tag(:li, content ) + end + + end # Breadcrumb + end # Helpers +end # Padrino diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/form_builder/abstract_form_builder.rb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/form_builder/abstract_form_builder.rb similarity index 72% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/form_builder/abstract_form_builder.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/form_builder/abstract_form_builder.rb index 2d279be9..4d5e54e8 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/form_builder/abstract_form_builder.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/form_builder/abstract_form_builder.rb @@ -24,9 +24,9 @@ module Padrino end # f.label :username, :caption => "Nickname" - def label(field, options={}) + def label(field, options={}, &block) options.reverse_merge!(:caption => "#{field_human_name(field)}: ") - @template.label_tag(field_id(field), options) + @template.label_tag(field_id(field), options, &block) end # f.hidden_field :session_id, :value => "45" @@ -95,12 +95,38 @@ module Padrino @template.select_tag field_name(field), options end + # f.check_box_group :color, :options => ['red', 'green', 'blue'], :selected => ['red', 'blue'] + # f.check_box_group :color, :collection => @colors, :fields => [:name, :id] + def check_box_group(field, options={}) + selected_values = Array(options[:selected] || field_value(field)) + if options[:collection] + fields = options[:fields] || [:name, :id] + # don't use map!, it will break some orms + selected_values = selected_values.map{ |v| (v.respond_to?(fields[0]) ? v.send(fields[1]) : v).to_s } + end + labeled_group( field, options ) do |variant| + @template.check_box_tag( field_name(field)+'[]', :value => variant[1], :id => variant[2], :checked => selected_values.include?(variant[1]) ) + end + end + + # f.radio_button_group :color, :options => ['red', 'green'] + # f.radio_button_group :color, :collection => @colors, :fields => [:name, :id], :selected => @colors.first + def radio_button_group(field, options={}) + fields = options[:fields] || [:name, :id] + selected_value = options[:selected] || field_value(field) + selected_value = selected_value.send(fields[1]) if selected_value.respond_to?(fields[0]) + labeled_group( field, options ) do |variant| + @template.radio_button_tag( field_name(field), :value => variant[1], :id => variant[2], :checked => variant[1] == selected_value.to_s ) + end + end + # f.check_box :remember_me, :value => 'true', :uncheck_value => '0' def check_box(field, options={}) + html = ActiveSupport::SafeBuffer.new unchecked_value = options.delete(:uncheck_value) || '0' options.reverse_merge!(:id => field_id(field), :value => '1') options.reverse_merge!(:checked => true) if values_matches_field?(field, options[:value]) - html = @template.hidden_field_tag(options[:name] || field_name(field), :value => unchecked_value, :id => nil) + html << @template.hidden_field_tag(options[:name] || field_name(field), :value => unchecked_value, :id => nil) html << @template.check_box_tag(field_name(field), options) end @@ -140,7 +166,11 @@ module Padrino result = nested_objects.each_with_index.map do |child_instance, index| nested_options[:index] = include_index ? index : nil @template.fields_for(child_instance, { :nested => nested_options }, &block) - end.join("\n") + end.join("\n").html_safe + end + + def csrf_token_field + @template.csrf_token_field end protected @@ -171,17 +201,8 @@ module Padrino # field_name(:number) => "user[telephone_attributes][number]" # field_name(:street) => "user[addresses_attributes][0][street]" def field_name(field=nil) - result = [] - if root_form? - result << object_model_name - elsif nested_form? - parent_form = @options[:nested][:parent] - attributes_name = "#{@options[:nested][:association]}_attributes" - nested_index = @options[:nested][:index] - fragment = [parent_form.field_name, "[#{attributes_name}", "]"] - fragment.insert(2, "][#{nested_index}") if nested_index - result << fragment - end + result = field_result + result << field_name_fragment if nested_form? result << "[#{field}]" unless field.blank? result.flatten.join end @@ -192,17 +213,8 @@ module Padrino # field_name(:number) => "user_telephone_attributes_number" # field_name(:street) => "user_addresses_attributes_0_street" def field_id(field=nil, value=nil) - result = [] - if root_form? - result << object_model_name - elsif nested_form? - parent_form = @options[:nested][:parent] - attributes_name = "#{@options[:nested][:association]}_attributes" - nested_index = @options[:nested][:index] - fragment = [parent_form.field_id, "_#{attributes_name}"] - fragment.push("_#{nested_index}") if nested_index - result << fragment - end + result = field_result + result << field_id_fragment if nested_form? result << "_#{field}" unless field.blank? result << "_#{value}" unless value.blank? result.flatten.join @@ -245,6 +257,52 @@ module Padrino def root_form? !nested_form? end + + # Builds a group of labels for radios or checkboxes + def labeled_group(field, options={}) + options.reverse_merge!(:id => field_id(field), :selected => field_value(field)) + options.merge!(:class => field_error(field, options)) + variants = case + when options[:options] + options[:options].map{ |caption, value| [caption.to_s, (value||caption).to_s] } + when options[:collection] + fields = options[:fields] || [:name, :id] + options[:collection].map{ |variant| [variant.send(fields.first).to_s, variant.send(fields.last).to_s] } + else + [] + end + variants.inject(''.html_safe) do |html, variant| + variant[2] = "#{field_id(field)}_#{variant[1]}" + html << @template.label_tag("#{field_name(field)}[]", :for => variant[2], :caption => "#{yield(variant)} #{variant[0]}") + end + end + + private + def field_result + result = [] + result << object_model_name if root_form? + result + end + + def field_name_fragment + fragment = [result_options[:parent_form].field_name, "[#{result_options[:attributes_name]}", "]"] + fragment.insert(2, "][#{result_options[:nested_index]}") if result_options[:nested_index] + fragment + end + + def field_id_fragment + fragment = [result_options[:parent_form].field_id, "_#{result_options[:attributes_name]}"] + fragment.push("_#{result_options[:nested_index]}") if result_options[:nested_index] + fragment + end + + def result_options + { + :parent_form => @options[:nested][:parent], + :nested_index => @options[:nested][:index], + :attributes_name => "#{@options[:nested][:association]}_attributes" + } + end end # AbstractFormBuilder end # FormBuilder end # Helpers diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/form_builder/standard_form_builder.rb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/form_builder/standard_form_builder.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/form_builder/standard_form_builder.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/form_builder/standard_form_builder.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/form_helpers.rb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/form_helpers.rb similarity index 89% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/form_helpers.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/form_helpers.rb index cc8ee5ba..7a03977d 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/form_helpers.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/form_helpers.rb @@ -1,3 +1,5 @@ +require 'securerandom' + module Padrino module Helpers ## @@ -28,8 +30,9 @@ module Padrino # # @api public def form_for(object, url, settings={}, &block) - form_html = capture_html(builder_instance(object, settings), &block) - form_tag(url, settings) { form_html } + instance = builder_instance(object, settings) + html = capture_html(instance, &block) + form_tag(url, settings) { html } end ## @@ -54,7 +57,7 @@ module Padrino instance = builder_instance(object, settings) fields_html = capture_html(instance, &block) fields_html << instance.hidden_field(:id) if instance.send(:nested_object_id) - concat_content fields_html + concat_safe_content fields_html end ## @@ -79,8 +82,9 @@ module Padrino options.reverse_merge!(:method => 'post', :action => url) options[:enctype] = 'multipart/form-data' if options.delete(:multipart) options['accept-charset'] ||= 'UTF-8' - inner_form_html = hidden_form_method_field(desired_method) - inner_form_html += capture_html(&block) + inner_form_html = hidden_form_method_field(desired_method) + inner_form_html << csrf_token_field + inner_form_html << mark_safe(capture_html(&block)) concat_content content_tag(:form, inner_form_html, options) end @@ -100,7 +104,7 @@ module Padrino # # @api semipublic def hidden_form_method_field(desired_method) - return '' if desired_method.blank? || desired_method.to_s =~ /get|post/i + return ActiveSupport::SafeBuffer.new if desired_method.blank? || desired_method.to_s =~ /get|post/i hidden_field_tag(:_method, :value => desired_method) end @@ -125,8 +129,8 @@ module Padrino def field_set_tag(*args, &block) options = args.extract_options! legend_text = args[0].is_a?(String) ? args.first : nil - legend_html = legend_text.blank? ? '' : content_tag(:legend, legend_text) - field_set_content = legend_html + capture_html(&block) + legend_html = legend_text.blank? ? ActiveSupport::SafeBuffer.new : content_tag(:legend, legend_text) + field_set_content = legend_html + mark_safe(capture_html(&block)) concat_content content_tag(:fieldset, field_set_content, options) end @@ -167,7 +171,7 @@ module Padrino objects = objects.map { |object_name| object_name.is_a?(Symbol) ? instance_variable_get("@#{object_name}") : object_name }.compact - count = objects.inject(0) { |sum, object| sum + object.errors.size } + count = objects.inject(0) { |sum, object| sum + object.errors.count } unless count.zero? html = {} @@ -199,10 +203,10 @@ module Padrino } }.join - contents = '' + contents = ActiveSupport::SafeBuffer.new contents << content_tag(options[:header_tag] || :h2, header_message) unless header_message.blank? contents << content_tag(:p, message) unless message.blank? - contents << content_tag(:ul, error_messages) + contents << safe_content_tag(:ul, error_messages) content_tag(:div, contents, html) end @@ -244,7 +248,14 @@ module Padrino def error_message_on(object, field, options={}) object = object.is_a?(Symbol) ? instance_variable_get("@#{object}") : object error = object.errors[field] rescue nil - # Array(error).first is necessary because some ORMs give us an array others directly a value + error = if defined?(Ohm::Model) && object.is_a?(Ohm::Model) + I18n.t("ohm.errors.messages.#{error[0]}", :default => error[0].to_s) + else + # Array(error).first is necessary because some ORMs + # give us an array others directly a value + Array(error)[0] + end + if error = Array(error)[0] options.reverse_merge!(:tag => :span, :class => :error) tag = options.delete(:tag) @@ -276,10 +287,11 @@ module Padrino # @api public def label_tag(name, options={}, &block) options.reverse_merge!(:caption => "#{name.to_s.humanize}: ", :for => name) - caption_text = options.delete(:caption) - caption_text << "* " if options.delete(:required) + caption_text = options.delete(:caption).html_safe + caption_text.safe_concat "* " if options.delete(:required) + if block_given? # label with inner content - label_content = caption_text + capture_html(&block) + label_content = caption_text.concat capture_html(&block) concat_content(content_tag(:label, label_content, options)) else # regular label content_tag(:label, caption_text, options) @@ -409,10 +421,10 @@ module Padrino # # => # # @api public - def number_field_tag(name, options={}) + def number_field_tag(name, options={}) input_tag(:number, options.reverse_merge(:name => name)) end - + ## # Creates a telephone field input with the given name and options # @@ -452,7 +464,7 @@ module Padrino def email_field_tag(name, options={}) input_tag(:email, options.reverse_merge(:name => name)) end - + ## # Creates a search field input with the given name and options # @@ -573,6 +585,7 @@ module Padrino # # @api public def file_field_tag(name, options={}) + name = "#{name}[]" if options[:multiple] options.reverse_merge!(:name => name) input_tag(:file, options) end @@ -630,7 +643,7 @@ module Padrino end select_options_html = select_options_html.unshift(blank_option(prompt)) if select_options_html.is_a?(Array) options.merge!(:name => "#{options[:name]}[]") if options[:multiple] - content_tag(:select, select_options_html, options) + safe_content_tag(:select, select_options_html, options) end ## @@ -689,6 +702,68 @@ module Padrino input_tag(:image, options) end + # Constructs a hidden field containing a CSRF token. + # + # @param [String] token + # The token to use. Will be read from the session by default. + # + # @return [String] The hidden field with CSRF token as value. + # + # @example + # csrf_token_field + # + # @api public + def csrf_token_field(token = nil) + if defined? session + token ||= (session[:csrf] ||= SecureRandom.hex(32)) + end + + hidden_field_tag :authenticity_token, :value => token + end + + ## + # Creates a form containing a single button that submits to the url. + # + # @overload button_to(name, url, options={}) + # @param [String] caption The text caption. + # @param [String] url The url href. + # @param [Hash] options The html options. + # @overload button_to(name, options={}, &block) + # @param [String] url The url href. + # @param [Hash] options The html options. + # @param [Proc] block The button content. + # + # @option options [Boolean] :multipart + # If true, this form will support multipart encoding. + # @option options [String] :remote + # Instructs ujs handler to handle the submit as ajax. + # @option options [Symbol] :method + # Instructs ujs handler to use different http method (i.e :post, :delete). + # + # @return [String] Form and button html with specified +options+. + # + # @example + # button_to 'Delete', url(:accounts_destroy, :id => account), :method => :delete, :class => :form + # # Generates: + # #
+ # # + # # + # #
+ # + # @api public + def button_to(*args, &block) + name, url = args[0], args[1] + options = args.extract_options! + options['data-remote'] = 'true' if options.delete(:remote) + if block_given? + form_tag(url, options, &block) + else + form_tag(url, options) do + submit_tag(name) + end + end + end + protected ## diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/format_helpers.rb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/format_helpers.rb similarity index 97% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/format_helpers.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/format_helpers.rb index ce661d5b..506590b6 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/format_helpers.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/format_helpers.rb @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- module Padrino module Helpers ### @@ -18,7 +19,7 @@ module Padrino # # @api public def escape_html(text) - Rack::Utils.escape_html(text) + Rack::Utils.escape_html(text).html_safe end alias h escape_html alias sanitize_html escape_html @@ -40,8 +41,8 @@ module Padrino # # @api public def h!(text, blank_text = ' ') - return blank_text if text.nil? || text.empty? - h text + return blank_text.html_safe if text.nil? || text.empty? + h(text) end ## @@ -82,12 +83,13 @@ module Padrino def simple_format(text, options={}) t = options.delete(:tag) || :p start_tag = tag(t, options, true) - text = text.to_s.dup + text = escape_html(text.to_s.dup) text.gsub!(/\r\n?/, "\n") # \r\n and \r -> \n text.gsub!(/\n\n+/, "\n\n#{start_tag}") # 2+ newline -> paragraph text.gsub!(/([^\n]\n)(?=[^\n])/, '\1
') # 1 newline -> br text.insert 0, start_tag text << "" + text.html_safe end ## @@ -373,7 +375,9 @@ module Padrino def js_escape_html(html_content) return '' unless html_content javascript_mapping = { '\\' => '\\\\', ' '<\/', "\r\n" => '\n', "\n" => '\n', "\r" => '\n', '"' => '\\"', "'" => "\\'" } - html_content.gsub(/(\\|<\/|\r\n|[\n\r"'])/) { javascript_mapping[$1] } + escaped_content = html_content.gsub(/(\\|<\/|\r\n|[\n\r"'])/){ |m| javascript_mapping[m] } + escaped_content = escaped_content.html_safe if html_content.html_safe? + escaped_content end alias :escape_javascript :js_escape_html end # FormatHelpers diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/cs.yml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/cs.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/cs.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/cs.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/da.yml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/da.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/da.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/da.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/de.yml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/de.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/de.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/de.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/en.yml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/en.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/en.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/en.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/es.yml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/es.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/es.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/es.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/fr.yml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/fr.yml similarity index 81% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/fr.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/fr.yml index 72113130..9f300f89 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/fr.yml +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/fr.yml @@ -27,25 +27,25 @@ fr: format: "%n %u" units: byte: - one: "Byte" - other: "Bytes" - kb: "KB" - mb: "MB" - gb: "GB" - tb: "TB" + one: "Octet" + other: "Octets" + kb: "Ko" + mb: "Mo" + gb: "Go" + tb: "To" datetime: distance_in_words: half_a_minute: "une demi minute" less_than_x_seconds: - one: "infèrieur à une seconde" - other: "infèrieur à %{count} secondes" + one: "inférieur à une seconde" + other: "inférieur à %{count} secondes" x_seconds: one: "1 seconde" other: "%{count} secondes" less_than_x_minutes: - one: "infèrieur à 1 minute" - other: "infèrieur à %{count} minutes" + one: "inférieur à 1 minute" + other: "inférieur à %{count} minutes" x_minutes: one: "1 minute" other: "%{count} minutes" @@ -68,8 +68,8 @@ fr: one: "plus d'un an" other: "plus de %{count} ans" almost_x_years: - one: "près d'un ans" - other: "près de %{count} years" + one: "près d'un an" + other: "près de %{count} ans" models: errors: template: diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/hu.yml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/hu.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/hu.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/hu.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/it.yml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/it.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/it.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/it.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/ja.yml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/ja.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/ja.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/ja.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/lv.yml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/lv.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/lv.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/lv.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/nl.yml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/nl.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/nl.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/nl.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/no.yml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/no.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/no.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/no.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/pl.yml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/pl.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/pl.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/pl.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/pt_br.yml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/pt_br.yml similarity index 98% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/pt_br.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/pt_br.yml index 35c4b1bc..ee5ea2f3 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/pt_br.yml +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/pt_br.yml @@ -17,8 +17,8 @@ pt_br: format: "%u%n" unit: "R$" # These three are to override number.format and are optional - separator: "." - delimiter: "," + separator: "," + delimiter: "." precision: 2 # Used in number_to_percentage() diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/ro.yml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/ro.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/ro.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/ro.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/ru.yml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/ru.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/ru.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/ru.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/sv.yml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/sv.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/sv.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/sv.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/tr.yml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/tr.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/tr.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/tr.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/uk.yml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/uk.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/uk.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/uk.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/zh_cn.yml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/zh_cn.yml similarity index 85% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/zh_cn.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/zh_cn.yml index 1a5ce1d6..adc64b4b 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/zh_cn.yml +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/zh_cn.yml @@ -14,8 +14,8 @@ zh_cn: currency: format: # Where is the currency sign? %u is the currency unit, %n the number (default: $5.00) - format: "%u %n" - unit: "元" + format: "%u%n" + unit: "RMB" # These three are to override number.format and are optional separator: "." delimiter: "," @@ -50,12 +50,12 @@ zh_cn: format: "%n %u" units: byte: - one: "Byte" - other: "Bytes" - kb: "KB" - mb: "MB" - gb: "GB" - tb: "TB" + one: "字节" + other: "字节" + kb: "K" + mb: "兆" + gb: "G" + tb: "T" # Used in distance_of_time_in_words(), distance_of_time_in_words_to_now(), time_ago_in_words() datetime: @@ -92,13 +92,12 @@ zh_cn: one: "一年多" other: "%{count} 年多" almost_x_years: - one: "接近一年" - other: "接近 %{count} 年" + one: "已经一年" + other: "已经 %{count} 年" models: errors: template: header: - one: "有1 个错误发生使得「%{model}」无法被储存。 " - other: "有%{count} 个错误发生使得「%{model}」无法被储存。 " - body: "以下栏位发生问题:" - + one: "%{model} 保存时产生错误" + other: "%{model} 保存时产生了 %{count} 个错误" + body: "下列字段产生错误:" diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/zh_tw.yml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/zh_tw.yml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/locale/zh_tw.yml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/locale/zh_tw.yml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/number_helpers.rb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/number_helpers.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/number_helpers.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/number_helpers.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/output_helpers.rb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/output_helpers.rb similarity index 77% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/output_helpers.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/output_helpers.rb index 792eaf5c..de1df3d1 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/output_helpers.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/output_helpers.rb @@ -26,6 +26,8 @@ module Padrino ## # Captures the html from a block of template code for any available handler. # + # Be aware that trusting the html is up to the caller. + # # @param [Object] *args # Objects yield to the captured block # @param [Proc] &block @@ -37,15 +39,21 @@ module Padrino # capture_html(&block) => "...html..." # capture_html(object_for_block, &block) => "...html..." # + # @example + # ActiveSupport::SafeBuffer.new + capture_html { "" } + # # => "<foo>" + # ActiveSupport::SafeBuffer.safe_concat + capture_html { "" } + # # => "" + # # @api semipublic def capture_html(*args, &block) handler = find_proper_handler - captured_html = "" + captured_block, captured_html = nil, "" if handler && handler.is_type? && handler.block_is_type?(block) - captured_html = handler.capture_from_template(*args, &block) + captured_html, captured_block = handler.capture_from_template(*args, &block) end # invoking the block directly if there was no template - captured_html = block_given? && block.call(*args) if captured_html.blank? + captured_html = block_given? && ( captured_block || block.call(*args) ) if captured_html.blank? captured_html end alias :capture :capture_html @@ -53,7 +61,9 @@ module Padrino ## # Outputs the given text to the templates buffer directly. # - # @param [String] text + # The output might be subject to escaping, if it is not marked as safe. + # + # @param [String,SafeBuffer] text # Text to concatenate to the buffer. # # @example @@ -70,6 +80,21 @@ module Padrino end alias :concat :concat_content + ## + # Outputs the given text to the templates buffer directly, + # assuming that it is safe. + # + # @param [String] text + # Text to concatenate to the buffer. + # + # @example + # concat_safe_content("This will be output to the template buffer") + # + # @api semipublic + def concat_safe_content(text="") + concat_content text.html_safe + end + ## # Returns true if the block is from a supported template type; false otherwise. # Used to determine if html should be returned or concatenated to the view. @@ -146,7 +171,7 @@ module Padrino def yield_content(key, *args) blocks = content_blocks[key.to_sym] return nil if blocks.empty? - blocks.map { |content| capture_html(*args, &content) }.join + mark_safe(blocks.map { |content| capture_html(*args, &content) }.join) end protected @@ -170,6 +195,21 @@ module Padrino def find_proper_handler OutputHelpers.handlers.map { |h| h.new(self) }.find { |h| h.engines.include?(current_engine) && h.is_type? } end + + ## + # Marks a String or a collection of Strings as safe. `nil` is accepted + # but ignored. + # + # @param [String, Array] the values to be marked safe. + # + # @return [ActiveSupport::SafeBuffer, Array] + def mark_safe(value) + if value.respond_to? :map! + value.map!{|v| v.html_safe if v } + else + value.html_safe if value + end + end end # OutputHelpers end # Helpers end # Padrino diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/output_helpers/abstract_handler.rb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/output_helpers/abstract_handler.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/output_helpers/abstract_handler.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/output_helpers/abstract_handler.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/output_helpers/erb_handler.rb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/output_helpers/erb_handler.rb similarity index 92% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/output_helpers/erb_handler.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/output_helpers/erb_handler.rb index f40cf715..72703719 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/output_helpers/erb_handler.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/output_helpers/erb_handler.rb @@ -28,11 +28,11 @@ module Padrino # @handler.capture_from_template(&block) => "...html..." # def capture_from_template(*args, &block) - self.output_buffer, _buf_was = "", self.output_buffer - block.call(*args) + self.output_buffer, _buf_was = ActiveSupport::SafeBuffer.new, self.output_buffer + captured_block = block.call(*args) ret = eval("@_out_buf", block.binding) self.output_buffer = _buf_was - ret + [ ret, captured_block ] end ## diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/output_helpers/haml_handler.rb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/output_helpers/haml_handler.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/output_helpers/haml_handler.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/output_helpers/haml_handler.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/output_helpers/slim_handler.rb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/output_helpers/slim_handler.rb similarity index 85% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/output_helpers/slim_handler.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/output_helpers/slim_handler.rb index 798ea922..91baa672 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/output_helpers/slim_handler.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/output_helpers/slim_handler.rb @@ -1,5 +1,4 @@ # Make slim works with sinatra/padrino -Slim::Engine.set_default_options(:buffer => '@_out_buf', :generator => Temple::Generators::StringBuffer) if defined?(Slim) module Padrino module Helpers @@ -31,11 +30,11 @@ module Padrino # @handler.capture_from_template(&block) => "...html..." # def capture_from_template(*args, &block) - self.output_buffer, _buf_was = '', self.output_buffer - block.call(*args) - ret = eval('@_out_buf', block.binding) + self.output_buffer, _buf_was = ActiveSupport::SafeBuffer.new, self.output_buffer + captured_block = block.call(*args) + ret = eval("@_out_buf", block.binding) self.output_buffer = _buf_was - ret + [ ret, captured_block ] end ## @@ -73,9 +72,9 @@ module Padrino def output_buffer=(val) template.instance_variable_set(:@_out_buf, val) end - end # SlimHandler + end # SlimHandler - OutputHelpers.register(SlimHandler) + OutputHelpers.register(SlimHandler) end # OutputHelpers end # Helpers end # Padrino diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/render_helpers.rb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/render_helpers.rb similarity index 95% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/render_helpers.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/render_helpers.rb index f51bc94f..a465db51 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/render_helpers.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/render_helpers.rb @@ -46,12 +46,12 @@ module Padrino counter += 1 options[:locals].merge!(object_name => member, "#{object_name}_counter".to_sym => counter) render(explicit_engine, template_path, options.dup) - }.join("\n") + }.join("\n").html_safe else if member = options.delete(:object) options[:locals].merge!(object_name => member) end - render(explicit_engine, template_path, options.dup) + render(explicit_engine, template_path, options.dup).html_safe end end alias :render_partial :partial diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/tag_helpers.rb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/tag_helpers.rb similarity index 88% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/tag_helpers.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/tag_helpers.rb index e89dba68..29f714d8 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/tag_helpers.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/tag_helpers.rb @@ -13,6 +13,12 @@ module Padrino '"' => """ } + ## + # Cached Regexp for escaping values to avoid rebuilding one + # on every escape operation. + # + ESCAPE_REGEXP = Regexp.union(*ESCAPE_VALUES.keys) + BOOLEAN_ATTRIBUTES = [ :autoplay, :autofocus, @@ -42,6 +48,12 @@ module Padrino :confirm ] + ## + # A html_safe newline string to avoid allocating a new on each + # concatenation. + # + NEWLINE = "\n".html_safe.freeze + ## # Creates an HTML tag with given name, content, and options # @@ -104,14 +116,30 @@ module Padrino content = capture_html(&block) end - content = content.join("\n") if content.respond_to?(:join) - options = parse_data_options(name, options) attributes = tag_attributes(options) - output = "<#{name}#{attributes}>#{content}" + output = ActiveSupport::SafeBuffer.new + output.safe_concat "<#{name}#{attributes}>" + if content.respond_to?(:each) && !content.is_a?(String) + content.each { |c| output.concat c; output.safe_concat NEWLINE } + else + output.concat content + end + output.safe_concat "" + block_is_template?(block) ? concat_content(output) : output end + ## + # Like #content_tag, but assumes its input to be safe and doesn't + # escape. It also returns safe html. + # + # @see #content_tag + # + def safe_content_tag(name, content = nil, options = nil, &block) + mark_safe(content_tag(name, mark_safe(content), options, &block)) + end + ## # Creates an HTML input field with the given type and options # @@ -185,7 +213,7 @@ module Padrino # # @example # tag :hr, :class => 'dotted' - # # =>
+ # # =>
# # tag :input, :name => 'username', :type => :text # # => @@ -200,7 +228,7 @@ module Padrino def tag(name, options = nil, open = false) options = parse_data_options(name, options) attributes = tag_attributes(options) - "<#{name}#{attributes}#{open ? '>' : ' />'}" + "<#{name}#{attributes}#{open ? '>' : ' />'}".html_safe end private @@ -226,7 +254,7 @@ module Padrino # Escape tag values to their HTML/XML entities. ## def escape_value(string) - string.to_s.gsub(Regexp.union(*ESCAPE_VALUES.keys)) { |c| ESCAPE_VALUES[c] } + string.to_s.gsub(ESCAPE_REGEXP) { |c| ESCAPE_VALUES[c] } end ## diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/translation_helpers.rb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/translation_helpers.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/lib/padrino-helpers/translation_helpers.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/translation_helpers.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/padrino-helpers.gemspec b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/padrino-helpers.gemspec old mode 100755 new mode 100644 similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/padrino-helpers.gemspec rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/padrino-helpers.gemspec diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/app.rb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/app.rb similarity index 65% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/app.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/app.rb index 6c44f893..cbbf5b5e 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/app.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/app.rb @@ -2,12 +2,19 @@ require 'sinatra/base' require 'haml' require 'erubis' require 'slim' +require 'padrino-core/application/rendering/extensions/erubis' +require 'padrino-core/application/rendering/extensions/haml' +require 'padrino-core/application/rendering/extensions/slim' class MarkupDemo < Sinatra::Base register Padrino::Helpers configure do set :root, File.dirname(__FILE__) + set :erb, :engine_class => Padrino::Erubis::SafeBufferTemplate + set :haml, :escape_html => true + set :slim, :generator => Temple::Generators::RailsOutputBuffer, + :buffer => "out_buf" end get '/:engine/:file' do @@ -23,19 +30,19 @@ class MarkupDemo < Sinatra::Base def captured_content(&block) content_html = capture_html(&block) - "

#{content_html}

" + "

#{content_html}

".html_safe end def concat_in_p(content_html) - concat_content "

#{content_html}

" + concat_safe_content "

#{content_html}

" end - def determine_block_is_template(name, &block) - concat_content "

The #{name} block passed in is a template

" if block_is_template?(block) + def concat_if_block_is_template(name, &block) + concat_safe_content "

The #{name} block passed in is a template

" if block_is_template?(block) end - def ruby_not_template_block - determine_block_is_template('ruby') do + def concat_ruby_not_template_block + concat_if_block_is_template('ruby') do content_tag(:span, "This not a template block") end end diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/capture_concat.erb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/capture_concat.erb similarity index 73% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/capture_concat.erb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/capture_concat.erb index 395536ad..220cbd4e 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/capture_concat.erb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/capture_concat.erb @@ -6,9 +6,9 @@ <% concat_in_p('Concat Line 3') %> -<% determine_block_is_template('erb') do %> +<% concat_if_block_is_template('erb') do %> This is erb This is erb <% end %> -<% ruby_not_template_block %> +<% concat_ruby_not_template_block %> diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/capture_concat.haml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/capture_concat.haml similarity index 69% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/capture_concat.haml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/capture_concat.haml index 54831676..527c0115 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/capture_concat.haml +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/capture_concat.haml @@ -5,8 +5,8 @@ - concat_in_p('Concat Line 3') -- determine_block_is_template('haml') do +- concat_if_block_is_template('haml') do %span This is haml %span This is haml -- ruby_not_template_block +- concat_ruby_not_template_block diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/capture_concat.slim b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/capture_concat.slim similarity index 51% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/capture_concat.slim rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/capture_concat.slim index ffef5e00..04186e7b 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/capture_concat.slim +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/capture_concat.slim @@ -1,13 +1,12 @@ - @content = captured_content do span Captured Line 1 span Captured Line 2 += @content -== @content +- concat_in_p('Concat Line 3') -- determine_block_is_template('slim') do +- concat_if_block_is_template('slim') do span This is slim span This is slim -== concat_in_p('Concat Line 3') - -== ruby_not_template_block +- concat_ruby_not_template_block \ No newline at end of file diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/content_for.erb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/content_for.erb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/content_for.erb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/content_for.erb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/content_for.haml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/content_for.haml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/content_for.haml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/content_for.haml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/content_for.slim b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/content_for.slim similarity index 53% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/content_for.slim rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/content_for.slim index f6e6770d..be66c854 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/content_for.slim +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/content_for.slim @@ -1,12 +1,12 @@ - content_for :demo do h1 This is content yielded from a content_for -.demo== yield_content :demo +.demo= yield_content :demo - content_for :demo2 do |fname, lname| h1 This is content yielded with name #{fname + " " + lname} -.demo2== yield_content :demo2, "Johnny", "Smith" +.demo2= yield_content :demo2, "Johnny", "Smith" -.demo_has_content== content_for?(:demo) -.fake_has_content== content_for?(:fake) \ No newline at end of file +.demo_has_content= content_for?(:demo) +.fake_has_content= content_for?(:fake) \ No newline at end of file diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/content_tag.erb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/content_tag.erb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/content_tag.erb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/content_tag.erb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/content_tag.haml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/content_tag.haml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/content_tag.haml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/content_tag.haml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/content_tag.slim b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/content_tag.slim new file mode 100644 index 00000000..5ba06188 --- /dev/null +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/content_tag.slim @@ -0,0 +1,9 @@ +=content_tag :p, "Test 1", :class => 'test', :id => "test1" + +=content_tag :p, "Test 2" + +=content_tag(:p, :class => 'test', :id => 'test3') do + span Test 3 + +=content_tag(:p) do + span Test 4 \ No newline at end of file diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/current_engine.erb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/current_engine.erb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/current_engine.erb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/current_engine.erb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/current_engine.haml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/current_engine.haml similarity index 78% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/current_engine.haml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/current_engine.haml index 3522395c..e7498a43 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/current_engine.haml +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/current_engine.haml @@ -1,5 +1,5 @@ %p.start= current_engine %p.haml= haml :'partials/_haml' -%p.erb= erb :'partials/_erb' +%p.erb= erb :'partials/_erb' %p.slim= slim :'partials/_slim' %p.end= current_engine diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/current_engine.slim b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/current_engine.slim similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/current_engine.slim rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/current_engine.slim diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/fields_for.erb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/fields_for.erb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/fields_for.erb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/fields_for.erb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/fields_for.haml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/fields_for.haml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/fields_for.haml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/fields_for.haml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/fields_for.slim b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/fields_for.slim new file mode 100644 index 00000000..9046b11c --- /dev/null +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/fields_for.slim @@ -0,0 +1,15 @@ +- @user = MarkupUser.new += form_for @user , '/demo1', :id => 'demo-fields-for' do |f| + = f.text_field :gender + = fields_for @user.permission do |permission| + = permission.check_box :can_edit + = permission.check_box :can_delete + = f.fields_for :telephone do |child_form| + = child_form.label :number + = child_form.text_field :number + = f.fields_for :addresses do |child_form| + = child_form.label :name + = child_form.text_field :name + - unless child_form.object.new_record? + = child_form.check_box '_destroy' + = child_form.label '_destroy', :caption => 'Remove' diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/form_for.erb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/form_for.erb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/form_for.erb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/form_for.erb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/form_for.haml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/form_for.haml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/form_for.haml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/form_for.haml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/form_for.slim b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/form_for.slim new file mode 100644 index 00000000..cf0ad875 --- /dev/null +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/form_for.slim @@ -0,0 +1,59 @@ += form_for MarkupUser.new, '/demo', :id => 'demo' do |f| + = f.error_messages(:header_message => "custom MarkupUser cannot be saved!") + = f.hidden_field :session_id + p + = f.label :username, :caption => "Login: ", :class => 'user-label' + = f.text_field :username, :class => 'user-text', :value => "John" + p + = f.label :password + = f.password_field :password, :class => 'user-password', :value => "secret" + p + = f.label :age + = f.number_field :age, :class => 'numeric' + p + = f.label :telephone + = f.telephone_field :telephone, :class => 'numeric' + p + = f.label :email, :caption => 'Email Address: ' + = f.email_field :email, :class => 'string' + p + = f.label :webpage, :caption => 'Your Web Page: ' + = f.url_field :webpage, :class => 'string' + p + = f.label :search + = f.search_field :search, :class => 'string' + p + = f.label :photo + = f.file_field :photo, :class => 'user-photo' + p + = f.label :about, :caption => "About Me: " + = f.text_area :about, :class => 'user-about' + p + = f.label :gender, :caption => "Your gender: " + = f.radio_button :gender, :value => 'male' + = f.radio_button :gender, :value => 'female' + p + = f.label :country, :caption => "Your country" + = f.select :country, :options => ['USA', 'Canada', 'Mexico'], :selected => 'USA', :class => 'selector' + p + = f.label :remember_me + = f.check_box :remember_me, :value => "1" + p + = f.submit "Create", :class => 'success', :id => 'demo-button' + p + = f.image_submit "buttons/post.png", :class => 'success', :id => 'image-button' + += form_for MarkupUser.new, '/another_demo', :id => 'demo2', :method => 'get' do |f| + = f.error_messages :header_message => "custom MarkupUser cannot be saved!" + = f.hidden_field :session_id + = f.text_field_block :username, { :class => 'input' }, { :caption => 'Nickname: ', :class => 'label' } + = f.password_field_block :code, { :class => 'input' } + = f.text_area_block :about, { :class => 'textarea' } + = f.file_field_block :photo, { :class => 'upload' } + = f.check_box_block :remember_me, { :class => 'checker' } + = f.select_block :state, :options => ['California', 'Texas'], :class => 'selector' + = f.submit_block "Create", { :class => 'button' } + = f.image_submit_block "buttons/ok.png", { :class => 'image' } + += form_for :markup_user, '/third_demo', :id => 'demo3', :method => 'get' do |f| + = f.text_field_block :username diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/form_tag.erb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/form_tag.erb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/form_tag.erb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/form_tag.erb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/form_tag.haml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/form_tag.haml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/form_tag.haml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/form_tag.haml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/form_tag.slim b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/form_tag.slim new file mode 100644 index 00000000..053097bf --- /dev/null +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/form_tag.slim @@ -0,0 +1,70 @@ += form_tag '/simple', :class => 'simple-form' do + = error_messages_for nil + = field_set_tag do + = hidden_field_tag :session_id, :value => "__secret__" + = label_tag :username + = text_field_tag :username + = label_tag :password + = password_field_tag :password + = label_tag :email + = email_field_tag :email + = label_tag :age + = number_field_tag :age + = label_tag :telephone + = telephone_field_tag :telephone + = label_tag :webpage + = url_field_tag :webpage + = label_tag :search + = search_field_tag :search + = label_tag :color + = select_tag :color, :options => ['green', 'orange', 'purple'] + = label_tag :gender + = radio_button_tag :gender, :value => 'male' + = radio_button_tag :gender, :value => 'female' + = check_box_tag :remember_me + = submit_tag + += form_tag '/advanced', :id => 'advanced', :class => 'advanced-form', :method => 'get' do + = error_messages_for MarkupUser.new, :header_message => "There are problems with saving user!" + = hidden_field_tag :session_id, :value => "__secret__" + = field_set_tag "Advanced", :class => 'advanced-field-set' do + p + = label_tag :username, :class => 'first', :caption => "Nickname" + = text_field_tag :username, :value => params[:username], :id => 'the_username' + p + = label_tag :password, :class => 'first' + = password_field_tag :password, :value => params[:password] + p + = label_tag :email, :caption => 'Email Address' + = email_field_tag :email, :class => 'string' + p + = label_tag :age, :class => 'age' + = number_field_tag :age, :class => 'numeric' + p + = label_tag :telephone, :class => 'telephone' + = telephone_field_tag :telephone, :class => 'numeric' + p + = label_tag :webpage, :caption => 'Your Home Page' + = url_field_tag :webpage, :class => 'string' + p + = label_tag :search + = search_field_tag :search, :class => 'string' + p + = label_tag :about, :class => 'about', :caption => "About Me" + = text_area_tag :about, :class => 'large' + p + = label_tag :gender, :class => 'gender' + = radio_button_tag :gender, :value => 'male', :checked => true + = radio_button_tag :gender, :value => 'female' + p + = label_tag :photo, :class => 'photo' + = file_field_tag :photo, :class => 'upload' + p + = label_tag :fav_color + = select_tag :fav_color, :options => [ ['green', '1'], ['orange', '2'], ['purple', '3'] ], :selected => '2' + p + = check_box_tag :remember_me, :value => "1", :checked => true + = field_set_tag(:class => 'buttons') do + = submit_tag "Login" + = button_tag "Cancel" + = image_submit_tag "buttons/submit.png" diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/link_to.erb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/link_to.erb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/link_to.erb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/link_to.erb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/link_to.haml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/link_to.haml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/link_to.haml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/link_to.haml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/link_to.slim b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/link_to.slim new file mode 100644 index 00000000..01392638 --- /dev/null +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/link_to.slim @@ -0,0 +1,4 @@ += link_to "Test 1 No Block", '/test1', :class => 'test', :id => 'test1' + += link_to("/test2", :class => 'test', :id => 'test2') do + span Test 2 With Block diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/mail_to.erb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/mail_to.erb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/mail_to.erb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/mail_to.erb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/mail_to.haml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/mail_to.haml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/mail_to.haml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/mail_to.haml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/mail_to.slim b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/mail_to.slim new file mode 100644 index 00000000..9a8e10f1 --- /dev/null +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/mail_to.slim @@ -0,0 +1,3 @@ +p.simple= mail_to 'test@demo.com' + +p.captioned= mail_to 'test@demo.com', "Click my Email" diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/meta_tag.erb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/meta_tag.erb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/meta_tag.erb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/meta_tag.erb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/meta_tag.haml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/meta_tag.haml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/meta_tag.haml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/meta_tag.haml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/meta_tag.slim b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/meta_tag.slim new file mode 100644 index 00000000..9ed5ae35 --- /dev/null +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/meta_tag.slim @@ -0,0 +1,3 @@ += meta_tag "weblog,news", :name => "keywords" + += meta_tag "text/html; charset=UTF-8", :"http-equiv" => "Content-Type" diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/partials/_erb.erb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/partials/_erb.erb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/partials/_erb.erb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/partials/_erb.erb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/partials/_haml.haml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/partials/_haml.haml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/partials/_haml.haml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/partials/_haml.haml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/partials/_slim.slim b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/partials/_slim.slim new file mode 100644 index 00000000..839716be --- /dev/null +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/partials/_slim.slim @@ -0,0 +1 @@ += current_engine diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/simple_partial.erb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/simple_partial.erb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/simple_partial.erb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/simple_partial.erb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/simple_partial.haml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/simple_partial.haml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/markup_app/views/simple_partial.haml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/simple_partial.haml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/simple_partial.slim b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/simple_partial.slim new file mode 100644 index 00000000..ca16c418 --- /dev/null +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/markup_app/views/simple_partial.slim @@ -0,0 +1 @@ +p.slim= partial 'partials/slim', :engine => "slim" \ No newline at end of file diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/app.rb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/app.rb similarity index 83% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/app.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/app.rb index 809bf766..9d492e46 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/app.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/app.rb @@ -16,6 +16,9 @@ class RenderDemo < Padrino::Application configure do set :logging, false set :padrino_logging, false + set :erb, :engine_class => Padrino::Erubis::SafeBufferTemplate + set :haml, :escape_html => true + set :slim, :generator => Temple::Generators::RailsOutputBuffer end # get current engines from partials @@ -28,6 +31,10 @@ class RenderDemo < Padrino::Application render :explicit_engine end + get '/double_capture_:ext' do + render "double_capture_#{params[:ext]}" + end + # partial with object get '/partial/object' do partial 'template/user', :object => RenderUser.new('John'), :locals => { :extra => "bar" } diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/current_engine.haml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/views/current_engine.haml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/current_engine.haml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/views/current_engine.haml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/current_engines/_erb.erb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/views/current_engines/_erb.erb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/current_engines/_erb.erb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/views/current_engines/_erb.erb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/current_engines/_haml.haml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/views/current_engines/_haml.haml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/current_engines/_haml.haml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/views/current_engines/_haml.haml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/current_engines/_slim.slim b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/views/current_engines/_slim.slim similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/current_engines/_slim.slim rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/views/current_engines/_slim.slim diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/views/double_capture_erb.erb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/views/double_capture_erb.erb new file mode 100644 index 00000000..c7f7e123 --- /dev/null +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/views/double_capture_erb.erb @@ -0,0 +1,3 @@ +<% form_for( :object, '/' ) do |f| %> + <%= $number_of_captures += 1 %> +<% end %> \ No newline at end of file diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/views/double_capture_haml.haml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/views/double_capture_haml.haml new file mode 100644 index 00000000..26102762 --- /dev/null +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/views/double_capture_haml.haml @@ -0,0 +1,2 @@ +- form_for :object, '/' do |f| + = $number_of_captures += 1 diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/views/double_capture_slim.slim b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/views/double_capture_slim.slim new file mode 100644 index 00000000..26102762 --- /dev/null +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/views/double_capture_slim.slim @@ -0,0 +1,2 @@ +- form_for :object, '/' do |f| + = $number_of_captures += 1 diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/erb/test.erb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/views/erb/test.erb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/erb/test.erb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/views/erb/test.erb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/explicit_engine.haml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/views/explicit_engine.haml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/explicit_engine.haml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/views/explicit_engine.haml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/haml/test.haml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/views/haml/test.haml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/haml/test.haml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/views/haml/test.haml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/template/_user.haml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/views/template/_user.haml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/template/_user.haml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/views/template/_user.haml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/template/haml_template.haml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/views/template/haml_template.haml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/template/haml_template.haml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/views/template/haml_template.haml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/template/some_template.haml b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/views/template/some_template.haml similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/fixtures/render_app/views/template/some_template.haml rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/fixtures/render_app/views/template/some_template.haml diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/helper.rb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/helper.rb similarity index 97% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/helper.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/helper.rb index b1452e6d..9038f4ea 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/helper.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/helper.rb @@ -27,6 +27,7 @@ class MiniTest::Spec # In this case, block is the html to evaluate def assert_has_tag(name, attributes = {}, &block) html = block && block.call + assert html.html_safe?, 'html_safe? failed' matcher = HaveSelector.new(name, attributes) raise "Please specify a block!" if html.blank? assert matcher.matches?(html), matcher.failure_message diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_asset_tag_helpers.rb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/test_asset_tag_helpers.rb similarity index 93% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_asset_tag_helpers.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/test_asset_tag_helpers.rb index 594be5b8..d0c196b2 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_asset_tag_helpers.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/test_asset_tag_helpers.rb @@ -23,7 +23,7 @@ describe "AssetTagHelpers" do should "display multiple flash tags with given attributes" do flash[:error] = 'wrong' flash[:success] = 'okey' - actual_html = flash_tag(:success, :error, :id => 'area') + actual_html = flash_tag(:success, :warning, :error, :id => 'area') assert_has_tag('div.success#area', :content => flash[:success]) { actual_html } assert_has_tag('div.error#area', :content => flash[:error]) { actual_html } assert_has_no_tag('div.notice') { actual_html } @@ -70,6 +70,17 @@ describe "AssetTagHelpers" do assert_has_tag('a#binky.first', :content => "Sign up", :href => '/register') { actual_link } end + should "escape the link text" do + actual_link = link_to('/register', :class => 'first', :id => 'binky') { "<>" } + assert_has_tag('a#binky.first', :href => '/register') { actual_link } + assert_match "<>", actual_link + end + + should "not escape image_tag" do + actual_link = link_to(image_tag("/my/fancy/image.png"), :class => 'first', :id => 'binky') + assert_has_tag('img', :src => "/my/fancy/image.png") { actual_link } + end + should "display link block element in haml" do visit '/haml/link_to' assert_have_selector :a, :content => "Test 1 No Block", :href => '/test1', :class => 'test', :id => 'test1' @@ -183,16 +194,15 @@ describe "AssetTagHelpers" do should "display image tag relative link with incorrect spacing" do time = stop_time_for_test assert_has_tag('img.photo', :src => "/images/%20relative/%20pic.gif%20%20?#{time.to_i}") { - image_tag(' relative/ pic.gif ', :class => 'photo') } + image_tag(' relative/ pic.gif ', :class => 'photo') + } end should "not use a timestamp if stamp setting is false" do - self.class.expects(:asset_stamp).returns(false) assert_has_tag('img', :src => "/absolute/pic.gif") { image_tag('/absolute/pic.gif') } end should "have xhtml convention tag" do - self.class.expects(:asset_stamp).returns(false) assert_equal image_tag('/absolute/pic.gif'), '' end end @@ -200,8 +210,10 @@ describe "AssetTagHelpers" do context 'for #stylesheet_link_tag method' do should "display stylesheet link item" do time = stop_time_for_test + actual_html = stylesheet_link_tag('style') expected_options = { :media => "screen", :rel => "stylesheet", :type => "text/css" } - assert_has_tag('link', expected_options.merge(:href => "/stylesheets/style.css?#{time.to_i}")) { stylesheet_link_tag('style') } + assert_has_tag('link', expected_options.merge(:href => "/stylesheets/style.css?#{time.to_i}")) { actual_html } + assert actual_html.html_safe? end should "display stylesheet link item for long relative path" do @@ -248,6 +260,7 @@ describe "AssetTagHelpers" do time = stop_time_for_test actual_html = javascript_include_tag('application') assert_has_tag('script', :src => "/javascripts/application.js?#{time.to_i}", :type => "text/javascript") { actual_html } + assert actual_html.html_safe? end should "display javascript item for long relative path" do @@ -281,6 +294,12 @@ describe "AssetTagHelpers" do assert_has_tag('script', :src => "/blog/javascripts/application.js?#{time.to_i}", :type => "text/javascript") { actual_html } end + should "not append extension to absolute paths" do + time = stop_time_for_test + actual_html = javascript_include_tag('https://maps.googleapis.com/maps/api/js?key=value&sensor=false') + assert_has_tag('script', :src => "https://maps.googleapis.com/maps/api/js?key=value&sensor=false") { actual_html } + end + should "display javascript items" do time = stop_time_for_test actual_html = javascript_include_tag('application', 'base.js', 'http://google.com/lib.js') diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_form_builder.rb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/test_form_builder.rb similarity index 95% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_form_builder.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/test_form_builder.rb index b3cdb744..6b462312 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_form_builder.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/test_form_builder.rb @@ -20,7 +20,7 @@ describe "FormBuilder" do mock_model('Role', :name => 'Moderate', :id => 2), mock_model('Role', :name => 'Limited', :id => 3)] @user = mock_model("User", :first_name => "Joe", :email => '', :session_id => 54) @user.stubs(:errors => {:a => "must be present", :b => "must be valid", :email => "Must be valid", :first_name => []}) - @user.stubs(:role_types => role_types, :role => "1") + @user.stubs(:role_types => role_types, :role => "1", :roles => [1,3]) @user_none = mock_model("User") end @@ -103,6 +103,7 @@ describe "FormBuilder" do assert_have_selector :form, :action => '/demo', :id => 'demo' assert_have_selector :form, :action => '/another_demo', :id => 'demo2', :method => 'get' assert_have_selector :form, :action => '/third_demo', :id => 'demo3', :method => 'get' + assert_have_selector :input, :name => 'authenticity_token' end should "display correct form in erb" do @@ -110,6 +111,7 @@ describe "FormBuilder" do assert_have_selector :form, :action => '/demo', :id => 'demo' assert_have_selector :form, :action => '/another_demo', :id => 'demo2', :method => 'get' assert_have_selector :form, :action => '/third_demo', :id => 'demo3', :method => 'get' + assert_have_selector :input, :name => 'authenticity_token' end should "display correct form in slim" do @@ -117,6 +119,7 @@ describe "FormBuilder" do assert_have_selector :form, :action => '/demo', :id => 'demo' assert_have_selector :form, :action => '/another_demo', :id => 'demo2', :method => 'get' assert_have_selector :form, :action => '/third_demo', :id => 'demo3', :method => 'get' + assert_have_selector :input, :name => 'authenticity_token' end should "have a class of 'invalid' for fields with errors" do @@ -253,6 +256,12 @@ describe "FormBuilder" do assert_has_tag('label', :class => 'large', :for => 'user_first_name', :content => "F. Name: ") { actual_html } end + should "set specific content inside the label if a block was provided" do + actual_html = standard_builder.label(:admin, :class => 'large') { input_tag :checkbox } + assert_has_tag('label', :class => 'large', :for => 'user_admin', :content => "Admin: ") { actual_html } + assert_has_tag('label input[type=checkbox]') { actual_html } + end + should "display correct label in haml" do visit '/haml/form_for' assert_have_selector '#demo label', :content => "Login: ", :class => 'user-label' @@ -492,6 +501,37 @@ describe "FormBuilder" do end end + context 'for #check_box_group and #radio_button_group methods' do + should 'display checkbox group html' do + checkboxes = standard_builder.check_box_group(:role, :collection => @user.role_types, :fields => [:name, :id], :selected => [2,3]) + assert_has_tag('input[type=checkbox]', :value => '1') { checkboxes } + assert_has_no_tag('input[type=checkbox][checked]', :value => '1') { checkboxes } + assert_has_tag('input[type=checkbox]', :checked => 'checked', :value => '2') { checkboxes } + assert_has_tag('label[for=user_role_3] input[name="user[role][]"][value="3"][checked]') { checkboxes } + end + + should 'display checkbox group html and extract selected values from the object' do + checkboxes = standard_builder.check_box_group(:roles, :collection => @user.role_types, :fields => [:name, :id]) + assert_has_tag('input[type=checkbox][name="user[roles][]"][value="1"][checked]') { checkboxes } + assert_has_tag('input[type=checkbox][name="user[roles][]"][value="3"][checked]') { checkboxes } + assert_has_no_tag('input[type=checkbox][name="user[roles][]"][value="2"][checked]') { checkboxes } + end + + should 'display radio group html' do + radios = standard_builder.radio_button_group(:role, :options => %W(red yellow blue), :selected => 'yellow') + assert_has_tag('input[type=radio]', :value => 'red') { radios } + assert_has_no_tag('input[type=radio][checked]', :value => 'red') { radios } + assert_has_tag('input[type=radio]', :checked => 'checked', :value => 'yellow') { radios } + assert_has_tag('label[for=user_role_blue] input[name="user[role]"][value=blue]') { radios } + end + + should 'display radio group html and extract selected value from the object' do + radios = standard_builder.radio_button_group(:role, :collection => @user.role_types) + assert_has_tag('input[type=radio][value="1"][checked]') { radios } + assert_has_no_tag('input[type=radio][value="2"][checked]') { radios } + end + end + context 'for #radio_button method' do should "display correct radio button html" do actual_html = standard_builder.radio_button(:gender, :value => 'male', :class => 'large') diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_form_helpers.rb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/test_form_helpers.rb similarity index 95% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_form_helpers.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/test_form_helpers.rb index 8cf3f891..5662c07f 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_form_helpers.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/test_form_helpers.rb @@ -58,18 +58,21 @@ describe "FormHelpers" do visit '/erb/form_tag' assert_have_selector 'form.simple-form', :action => '/simple' assert_have_selector 'form.advanced-form', :action => '/advanced', :id => 'advanced', :method => 'get' + assert_have_selector :input, :name => 'authenticity_token' end should "display correct forms in haml" do visit '/haml/form_tag' assert_have_selector 'form.simple-form', :action => '/simple' assert_have_selector 'form.advanced-form', :action => '/advanced', :id => 'advanced', :method => 'get' + assert_have_selector :input, :name => 'authenticity_token' end should "display correct forms in slim" do visit '/slim/form_tag' assert_have_selector 'form.simple-form', :action => '/simple' assert_have_selector 'form.advanced-form', :action => '/advanced', :id => 'advanced', :method => 'get' + assert_have_selector :input, :name => 'authenticity_token' end end @@ -197,6 +200,12 @@ describe "FormHelpers" do assert_has_tag('label[for=username] span.required', :content => "*") { actual_html } end + should "display label tag in ruby with a block" do + actual_html = label_tag(:admin, :class => 'long-label') { input_tag :checkbox } + assert_has_tag(:label, :for => 'admin', :class => 'long-label', :content => "Admin") { actual_html } + assert_has_tag('label input[type=checkbox]') { actual_html } + end + should "display label tag in erb for simple form" do visit '/erb/form_tag' assert_have_selector 'form.simple-form label', :count => 9 @@ -204,6 +213,7 @@ describe "FormHelpers" do assert_have_selector 'form.simple-form label', :content => "Password", :for => 'password' assert_have_selector 'form.simple-form label', :content => "Gender", :for => 'gender' end + should "display label tag in erb for advanced form" do visit '/erb/form_tag' assert_have_selector 'form.advanced-form label', :count => 11 @@ -484,6 +494,11 @@ describe "FormHelpers" do assert_has_tag(:input, :type => 'file', :class => "photo", :name => 'photo') { actual_html } end + should "have an array name with multiple option" do + actual_html = file_field_tag(:photos, :multiple => true) + assert_has_tag(:input, :name => 'photos[]') { actual_html } + end + should "display file field in erb" do visit '/erb/form_tag' assert_have_selector 'form.advanced-form input[type=file]', :count => 1, :name => 'photo', :class => 'upload' @@ -773,4 +788,25 @@ describe "FormHelpers" do assert_have_selector 'form.advanced-form input[type=image]', :count => 1, :src => "/images/buttons/submit.png?#{@stamp}" end end + + context 'for #button_to method' do + should "have a form and set the method properly" do + actual_html = button_to('Delete', '/users/1', :method => :delete) + assert_has_tag('form', :action => '/users/1') { actual_html } + assert_has_tag('form input', :type => 'hidden', :name => "_method", :value => 'delete') { actual_html } + assert_has_tag('form input', :type => 'hidden', :name => "authenticity_token") { actual_html } + end + + should "add a submit button by default if no content is specified" do + actual_html = button_to('My Delete Button', '/users/1', :method => :delete) + assert_has_tag('form input', :type => 'submit', :value => 'My Delete Button') { actual_html } + end + + should "set specific content inside the form if a block was sent" do + actual_html = button_to('My Delete Button', '/users/1', :method => :delete) do + content_tag :button, "My button's content", :type => :submit, :title => "My button" + end + assert_has_tag('form button', :type => 'submit', :content => "My button's content", :title => "My button") { actual_html } + end + end end diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_format_helpers.rb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/test_format_helpers.rb similarity index 91% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_format_helpers.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/test_format_helpers.rb index 19e9c5ed..8f107719 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_format_helpers.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/test_format_helpers.rb @@ -15,6 +15,7 @@ describe "FormatHelpers" do context 'for #simple_format method' do should "format simple text into html format" do actual_text = simple_format("Here is some basic text...\n...with a line break.") + assert_equal true, actual_text.html_safe? assert_equal "

Here is some basic text...\n
...with a line break.

", actual_text end @@ -139,6 +140,11 @@ describe "FormatHelpers" do should "return text escaped if not empty" do assert_equal '<h1>hello</h1>', h!('

hello

') end + should "mark escaped text as safe" do + assert_equal false, '

hello

'.html_safe? + assert_equal true, h('

hello

').html_safe? + assert_equal true, h!("", "default").html_safe? + end end context 'for #time_ago_in_words method' do @@ -213,15 +219,23 @@ describe "FormatHelpers" do context 'for #js_escape_html method' do should "escape double quotes" do assert_equal "\\\"hello\\\"", js_escape_html('"hello"') + assert_equal "\\\"hello\\\"", js_escape_html(ActiveSupport::SafeBuffer.new('"hello"')) end should "escape single quotes" do assert_equal "\\'hello\\'", js_escape_html("'hello'") + assert_equal "\\'hello\\'", js_escape_html(ActiveSupport::SafeBuffer.new("'hello'")) end should "escape html tags and breaks" do assert_equal "\\n\\n

hello<\\/p>\\n", js_escape_html("\n\r

hello

\r\n") + assert_equal "\\n\\n

hello<\\/p>\\n", js_escape_html(ActiveSupport::SafeBuffer.new("\n\r

hello

\r\n")) end should "escape data-confirm attribute" do assert_equal "", js_escape_html("") + assert_equal "", js_escape_html(ActiveSupport::SafeBuffer.new("")) + end + should "keep html_safe content html_safe" do + assert_equal false, js_escape_html('"hello"').html_safe? + assert_equal true, js_escape_html(ActiveSupport::SafeBuffer.new('"hello"')).html_safe? end end end diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_locale.rb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/test_locale.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_locale.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/test_locale.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_number_helpers.rb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/test_number_helpers.rb similarity index 100% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_number_helpers.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/test_number_helpers.rb diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_output_helpers.rb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/test_output_helpers.rb similarity index 94% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_output_helpers.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/test_output_helpers.rb index 56973280..fe244835 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_output_helpers.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/test_output_helpers.rb @@ -79,7 +79,8 @@ describe "OutputHelpers" do should "work for slim templates" do visit '/slim/capture_concat' - assert_have_selector 'p', :content => "Concat Line 3", :count => 1 + # TODO Get Slim concat working + # assert_have_selector 'p', :content => "Concat Line 3", :count => 1 end end @@ -97,9 +98,10 @@ describe "OutputHelpers" do assert_have_no_selector 'p', :content => "The ruby block passed in is a template", :class => 'is_template' end - should_eventually "work for slim templates" do + should "work for slim templates" do visit '/slim/capture_concat' - assert_have_selector 'p', :content => "The slim block passed in is a template", :class => 'is_template' + # TODO Get Slim template detection working + # assert_have_selector 'p', :content => "The slim block passed in is a template", :class => 'is_template' assert_have_no_selector 'p', :content => "The ruby block passed in is a template", :class => 'is_template' end end diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_render_helpers.rb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/test_render_helpers.rb similarity index 85% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_render_helpers.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/test_render_helpers.rb index 68bc6538..49dafd83 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_render_helpers.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/test_render_helpers.rb @@ -72,5 +72,23 @@ describe "RenderHelpers" do assert_have_selector 'p.slim span', :content => "slim" assert_have_selector 'p.end', :content => "haml" end + + should "capture slim template once and only once" do + $number_of_captures = 0 + visit '/double_capture_slim' + assert_equal 1,$number_of_captures + end + + should "capture haml template once and only once" do + $number_of_captures = 0 + visit '/double_capture_haml' + assert_equal 1,$number_of_captures + end + + should "capture erb template once and only once" do + $number_of_captures = 0 + visit '/double_capture_erb' + assert_equal 1,$number_of_captures + end end end diff --git a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_tag_helpers.rb b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/test_tag_helpers.rb similarity index 90% rename from middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_tag_helpers.rb rename to middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/test_tag_helpers.rb index 494d9d30..8c36956a 100644 --- a/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.10.7/test/test_tag_helpers.rb +++ b/middleman-core/lib/vendored-middleman-deps/padrino-helpers-0.11.2/test/test_tag_helpers.rb @@ -53,6 +53,17 @@ describe "TagHelpers" do assert_has_tag('p.large#star', :content => "Demo") { actual_html } end + should "escape non-html-safe content" do + actual_html = content_tag(:p, :class => 'large', :id => 'star') { "<>" } + assert_has_tag('p.large#star') { actual_html } + assert_match('<>', actual_html) + end + + should "not escape html-safe content" do + actual_html = content_tag(:p, :class => 'large', :id => 'star') { "<>" } + assert_has_tag('p.large#star', :content => "<>") { actual_html } + end + should "support tags with erb" do visit '/erb/content_tag' assert_have_selector :p, :content => "Test 1", :class => 'test', :id => 'test1'