class Rack::Polly
Constants
- DEFAULT_ASSETS_PATH_PREFIX
- DEFAULT_BACKEND_PATH_PREFIX
- DEFAULT_IMAGE_STORAGE
Public Class Methods
new(app, options = {})
click to toggle source
# File lib/rack/polly.rb, line 17 def initialize(app, options = {}) @app = app @options = { image_storage: DEFAULT_IMAGE_STORAGE, uploadcare_api_key: nil, backend_path_prefix: DEFAULT_ASSETS_PATH_PREFIX, assets_path_prefix: DEFAULT_BACKEND_PATH_PREFIX }.merge(options) end
Public Instance Methods
call(env)
click to toggle source
# File lib/rack/polly.rb, line 27 def call(env) dup._call(env) end
Protected Instance Methods
_call(env)
click to toggle source
# File lib/rack/polly.rb, line 33 def _call(env) @status, @headers, @response = @app.call(env) return [@status, @headers, @response] unless @headers['Content-Type'] =~ /html/ response = Rack::Response.new([], @status, @headers) @response.each do |fragment| template = "" require_config = { 'models/page_content' => { 'backendPathPrefix' => @options[:backend_path_prefix] } } if @options[:image_storage] == 'uploadcare' require_config['views/bar_edit_mode'] = { 'imageStorage' => @options[:image_storage] } template += <<END <script> UPLOADCARE_PUBLIC_KEY = "#{@options[:uploadcare_api_key]}"; </script> END end template += <<END <script> var require = { config: #{JSON.pretty_generate(require_config)} } </script> <script data-main=\"#{@options[:assets_path_prefix]}main.js\" src=\"#{@options[:assets_path_prefix]}require.js\"></script> END response.write fragment.gsub(%r{</body>}, template + "</body>") end response.finish end