Sha256: ad3a2cee15cea49361b0de940ee3d272d171cc806c99c832286d5ed0e64ede28

Contents?: true

Size: 1.1 KB

Versions: 8

Compression:

Stored size: 1.1 KB

Contents

# encoding: UTF-8

require 'stringio'
require 'erubis'
require 'tilt'

module Spontaneous
  module Rack
    class Reloader
      include Spontaneous::Rack::Helpers

      def initialize(app, *args)
        @app = app
        config = args.first || {}
        @cooldown = config[:cooldown] || 3
        @last = (Time.now - @cooldown)
      end


      def call(env)
        if @cooldown and Time.now > @last + @cooldown
          if Thread.list.size > 1
            Thread.exclusive{ reload! }
          else
            reload!
          end

          @last = Time.now
        end

        @app.call(env)
      rescue Spontaneous::SchemaModificationError => error
        template = Tilt::ErubisTemplate.new(File.expand_path('../../../../application/views/schema_modification_error.html.erb', __FILE__))
        html = template.render(self, :modification => error.modification, :env => env)
        [412, {'Content-type' => ::Rack::Mime.mime_type('.html')}, StringIO.new(html)].tap do |response|
        end
      end

      def reload!
        Spontaneous.reload!
      end
    end # Reloader
  end # Rack
end # Spontaneous

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
spontaneous-0.2.0.beta1 lib/spontaneous/rack/reloader.rb
spontaneous-0.2.0.alpha7 lib/spontaneous/rack/reloader.rb
spontaneous-0.2.0.alpha6 lib/spontaneous/rack/reloader.rb
spontaneous-0.2.0.alpha5 lib/spontaneous/rack/reloader.rb
spontaneous-0.2.0.alpha4 lib/spontaneous/rack/reloader.rb
spontaneous-0.2.0.alpha3 lib/spontaneous/rack/reloader.rb
spontaneous-0.2.0.alpha2 lib/spontaneous/rack/reloader.rb
spontaneous-0.2.0.alpha1 lib/spontaneous/rack/reloader.rb