lib/sinatra/respond_with.rb in sinatra-contrib-2.2.4 vs lib/sinatra/respond_with.rb in sinatra-contrib-3.0.0
- old
+ new
@@ -1,5 +1,7 @@
+# frozen_string_literal: true
+
require 'sinatra/json'
require 'sinatra/base'
module Sinatra
#
@@ -86,71 +88,79 @@
#
# Definition order does not matter.
module RespondWith
class Format
def initialize(app)
- @app, @map, @generic, @default = app, {}, {}, nil
+ @app = app
+ @map = {}
+ @generic = {}
+ @default = nil
end
def on(type, &block)
@app.settings.mime_types(type).each do |mime|
case mime
when '*/*' then @default = block
- when /^([^\/]+)\/\*$/ then @generic[$1] = block
+ when %r{^([^/]+)/\*$} then @generic[$1] = block
else @map[mime] = block
end
end
end
def finish
yield self if block_given?
- mime_type = @app.content_type ||
- @app.request.preferred_type(@map.keys) ||
- @app.request.preferred_type ||
- 'text/html'
+ mime_type = @app.content_type ||
+ @app.request.preferred_type(@map.keys) ||
+ @app.request.preferred_type ||
+ 'text/html'
type = mime_type.split(/\s*;\s*/, 2).first
- handlers = [@map[type], @generic[type[/^[^\/]+/]], @default].compact
+ handlers = [@map[type], @generic[type[%r{^[^/]+}]], @default].compact
handlers.each do |block|
- if result = block.call(type)
+ if (result = block.call(type))
@app.content_type mime_type
@app.halt result
end
end
- @app.halt 500, "Unknown template engine"
+ @app.halt 500, 'Unknown template engine'
end
def method_missing(method, *args, &block)
- return super if args.any? or block.nil? or not @app.mime_type(method)
+ return super if args.any? || block.nil? || !@app.mime_type(method)
+
on(method, &block)
end
end
module Helpers
include Sinatra::JSON
def respond_with(template, object = nil, &block)
- object, template = template, nil unless Symbol === template
+ unless Symbol === template
+ object = template
+ template = nil
+ end
format = Format.new(self)
- format.on "*/*" do |type|
+ format.on '*/*' do |type|
exts = settings.ext_map[type]
exts << :xml if type.end_with? '+xml'
if template
args = template_cache.fetch(type, template) { template_for(template, exts) }
if args.any?
- locals = { :object => object }
+ locals = { object: object }
locals.merge! object.to_hash if object.respond_to? :to_hash
renderer = args.first
- options = args[1..-1] + [{:locals => locals}]
+ options = args[1..] + [{ locals: locals }]
halt send(renderer, *options)
end
end
if object
exts.each do |ext|
halt json(object) if ext == :json
next unless object.respond_to? method = "to_#{ext}"
+
halt(*object.send(method))
end
end
false
end
@@ -174,24 +184,25 @@
settings.template_engines[ext].each { |e| possible << [e, name] }
end
possible.each do |engine, template|
klass = Tilt.default_mapping.template_map[engine.to_s] ||
- Tilt.lazy_map[engine.to_s].fetch(0, [])[0]
+ Tilt.lazy_map[engine.to_s].fetch(0, [])[0]
find_template(settings.views, template, klass) do |file|
next unless File.exist? file
+
return settings.rendering_method(engine) << template.to_sym
end
end
[] # nil or false would not be cached
end
end
def remap_extensions
ext_map.clear
- Rack::Mime::MIME_TYPES.each { |e,t| ext_map[t] << e[1..-1].to_sym }
+ Rack::Mime::MIME_TYPES.each { |e, t| ext_map[t] << e[1..].to_sym }
ext_map['text/javascript'] << 'js'
ext_map['text/xml'] << 'xml'
end
def mime_type(*)
@@ -204,21 +215,22 @@
@respond_to ||= nil
if formats.any?
@respond_to ||= []
@respond_to.concat formats
- elsif @respond_to.nil? and superclass.respond_to? :respond_to
+ elsif @respond_to.nil? && superclass.respond_to?(:respond_to)
superclass.respond_to
else
@respond_to
end
end
def rendering_method(engine)
return [engine] if Sinatra::Templates.method_defined? engine
return [:mab] if engine.to_sym == :markaby
- [:render, :engine]
+
+ %i[render engine]
end
private
def compile!(verb, path, block, **options)
@@ -226,33 +238,31 @@
super
end
def self.jrubyify(engs)
not_supported = [:markdown]
- engs.keys.each do |key|
- engs[key].collect! { |eng| (eng == :yajl) ? :json_pure : eng }
+ engs.each_key do |key|
+ engs[key].collect! { |eng| eng == :yajl ? :json_pure : eng }
engs[key].delete_if { |eng| not_supported.include?(eng) }
end
engs
end
def self.engines
engines = {
- :css => [:less, :sass, :scss],
- :xml => [:builder, :nokogiri],
- :js => [:coffee],
- :html => [:erb, :erubi, :erubis, :haml, :hamlit, :slim, :liquid, :radius,
- :mab, :markdown, :textile, :rdoc],
- :all => (Sinatra::Templates.instance_methods.map(&:to_sym) +
- [:mab] - [:find_template, :markaby]),
- :json => [:yajl],
+ xml: %i[builder nokogiri],
+ html: %i[erb erubi haml hamlit slim liquid
+ mab markdown rdoc],
+ all: (Sinatra::Templates.instance_methods.map(&:to_sym) +
+ [:mab] - %i[find_template markaby]),
+ json: [:yajl]
}
engines.default = []
- (defined? JRUBY_VERSION) ? jrubyify(engines) : engines
+ defined?(JRUBY_VERSION) ? jrubyify(engines) : engines
end
def self.registered(base)
- base.set :ext_map, Hash.new { |h,k| h[k] = [] }
+ base.set :ext_map, Hash.new { |h, k| h[k] = [] }
base.set :template_engines, engines
base.remap_extensions
base.helpers Helpers
end
end