From 2b43d84920c96bce9b3209d42090683b12eb8022 Mon Sep 17 00:00:00 2001 From: tkmru Date: Mon, 5 Nov 2018 01:41:24 +0900 Subject: [PATCH] add erubi to test and sinatra-contrib --- Gemfile | 1 + lib/sinatra/base.rb | 4 ++++ sinatra-contrib/lib/sinatra/capture.rb | 1 + sinatra-contrib/lib/sinatra/content_for.rb | 2 +- sinatra-contrib/lib/sinatra/engine_tracking.rb | 9 +++++++++ sinatra-contrib/lib/sinatra/respond_with.rb | 2 +- sinatra-contrib/sinatra-contrib.gemspec | 1 + sinatra-contrib/spec/capture_spec.rb | 2 ++ sinatra-contrib/spec/content_for_spec.rb | 2 +- test/erb_test.rb | 8 ++++++++ 10 files changed, 29 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 7989a8a5..13bee90d 100644 --- a/Gemfile +++ b/Gemfile @@ -53,6 +53,7 @@ if RUBY_ENGINE == "ruby" gem 'stylus' gem 'rabl' gem 'builder' + gem 'erubi' gem 'erubis' gem 'haml', '>= 3.0' gem 'sass' diff --git a/lib/sinatra/base.rb b/lib/sinatra/base.rb index eb94d3ed..754f5a6b 100644 --- a/lib/sinatra/base.rb +++ b/lib/sinatra/base.rb @@ -682,6 +682,10 @@ module Sinatra render(:erb, template, options, locals, &block) end + def erubi(template, options = {}, locals = {}, &block) + render(:erubi, template, options, locals, &block) + end + def erubis(template, options = {}, locals = {}) warn "Sinatra::Templates#erubis is deprecated and will be removed, use #erb instead.\n" \ "If you have Erubis installed, it will be used automatically." diff --git a/sinatra-contrib/lib/sinatra/capture.rb b/sinatra-contrib/lib/sinatra/capture.rb index 8a5d5fd9..0bbe7a17 100644 --- a/sinatra-contrib/lib/sinatra/capture.rb +++ b/sinatra-contrib/lib/sinatra/capture.rb @@ -86,6 +86,7 @@ module Sinatra DUMMIES = { :haml => "!= capture_haml(*args, &block)", + :erubi => "<% @capture = yield(*args) %>", :erubis => "<% @capture = yield(*args) %>", :slim => "== yield(*args)" } diff --git a/sinatra-contrib/lib/sinatra/content_for.rb b/sinatra-contrib/lib/sinatra/content_for.rb index c61d8191..5fb88559 100644 --- a/sinatra-contrib/lib/sinatra/content_for.rb +++ b/sinatra-contrib/lib/sinatra/content_for.rb @@ -9,7 +9,7 @@ module Sinatra # blocks inside views to be rendered later during the request. The most # common use is to populate different parts of your layout from your view. # - # The currently supported engines are: Erb, Erubis, Haml and Slim. + # The currently supported engines are: Erb, Erubi, Erubis, Haml and Slim. # # == Usage # diff --git a/sinatra-contrib/lib/sinatra/engine_tracking.rb b/sinatra-contrib/lib/sinatra/engine_tracking.rb index 47239afb..5ff2f75b 100644 --- a/sinatra-contrib/lib/sinatra/engine_tracking.rb +++ b/sinatra-contrib/lib/sinatra/engine_tracking.rb @@ -11,6 +11,15 @@ module Sinatra @current_engine == :erb end + # Returns true if the current engine is `:erubi`, or `Tilt[:erb]` is set + # to Tilt::ErubisTemplate. + # + # @return [Boolean] Returns true if current engine is `:erubi`. + def erubi? + @current_engine == :erubi or + erb? && Tilt[:erb] == Tilt::ErubiTemplate + end + # Returns true if the current engine is `:erubis`, or `Tilt[:erb]` is set # to Tilt::ErubisTemplate. # diff --git a/sinatra-contrib/lib/sinatra/respond_with.rb b/sinatra-contrib/lib/sinatra/respond_with.rb index 096a5f8a..8521ca98 100644 --- a/sinatra-contrib/lib/sinatra/respond_with.rb +++ b/sinatra-contrib/lib/sinatra/respond_with.rb @@ -245,7 +245,7 @@ module Sinatra :css => [:less, :sass, :scss], :xml => [:builder, :nokogiri], :js => [:coffee], - :html => [:erb, :erubis, :haml, :slim, :liquid, :radius, :mab, + :html => [:erb, :erubi, :erubis, :haml, :slim, :liquid, :radius, :mab, :markdown, :textile, :rdoc], :all => (Sinatra::Templates.instance_methods.map(&:to_sym) + [:mab] - [:find_template, :markaby]), diff --git a/sinatra-contrib/sinatra-contrib.gemspec b/sinatra-contrib/sinatra-contrib.gemspec index a61cd8bf..7d0d7852 100644 --- a/sinatra-contrib/sinatra-contrib.gemspec +++ b/sinatra-contrib/sinatra-contrib.gemspec @@ -45,6 +45,7 @@ EOF s.add_development_dependency "rspec", "~> 3.4" s.add_development_dependency "haml" + s.add_development_dependency "erubi" s.add_development_dependency "erubis" s.add_development_dependency "slim" s.add_development_dependency "less" diff --git a/sinatra-contrib/spec/capture_spec.rb b/sinatra-contrib/spec/capture_spec.rb index b65fcafb..7313c821 100644 --- a/sinatra-contrib/spec/capture_spec.rb +++ b/sinatra-contrib/spec/capture_spec.rb @@ -19,6 +19,7 @@ describe Sinatra::Capture do end shared_examples_for "a template language" do |engine| + lang = engine == :erubi ? :erb : engine lang = engine == :erubis ? :erb : engine require "#{engine}" @@ -33,6 +34,7 @@ describe Sinatra::Capture do describe('haml') { it_behaves_like "a template language", :haml } describe('slim') { it_behaves_like "a template language", :slim } + describe('erubi') { it_behaves_like "a template language", :erubi } describe('erubis') { it_behaves_like "a template language", :erubis } describe 'erb' do diff --git a/sinatra-contrib/spec/content_for_spec.rb b/sinatra-contrib/spec/content_for_spec.rb index d0902889..684f4a76 100644 --- a/sinatra-contrib/spec/content_for_spec.rb +++ b/sinatra-contrib/spec/content_for_spec.rb @@ -73,7 +73,7 @@ describe Sinatra::ContentFor do end # TODO: liquid radius markaby builder nokogiri - engines = %w[erb erubis haml slim] + engines = %w[erb erubi erubis haml slim] engines.each do |inner| describe inner.capitalize do diff --git a/test/erb_test.rb b/test/erb_test.rb index 40d02ce6..90c616f8 100644 --- a/test/erb_test.rb +++ b/test/erb_test.rb @@ -105,6 +105,14 @@ class ERBTest < Minitest::Test end end +begin + require 'erubi' + class ErubiTest < ERBTest + def engine; Tilt::ErubiTemplate end + end +rescue LoadError + warn "#{$!}: skipping erubi tests" +end begin require 'erubis'