Sha256: 4c4934c8eb24aca941069838fbf50bf515ad2fea47347a82c420a6ac368e6f08

Contents?: true

Size: 1.4 KB

Versions: 4

Compression:

Stored size: 1.4 KB

Contents

module JsRoutes

  class Middleware
    def initialize app
      @app = app
    end

    def call(env)
      JsRoutes.generate_routes_file

      @app.call(env)
    end
  end

  class Railtie < ::Rails::Railtie

    initializer "js_routes.insert_middleware" do |app|
      if Rails.env.development?
        app.config.middleware.insert_after ActionDispatch::Head, JsRoutes::Middleware
      end
    end

    rake_tasks do
      Dir[File.join(File.dirname(__FILE__), '../tasks/*.rake')].each { |f| load f }
    end

    config.before_configuration do
      config.action_view.javascript_expansions[:defaults] |= %w{ js_routes jquery.pathBuilder.js }
    end

  end

  def self.generate_routes_file
    puts 'GENERATING ROUTES FILE'
    filename = File.join(Rails.root, 'public', 'javascripts', 'js_routes.js')
    FileUtils.rm filename, :force => true
    File.open(filename, 'w') do |f|
      f << 'window.Routes = {};'
      Rails.application.reload_routes!
      Rails.application.routes.routes.each do |route|
        defaults = route.defaults

        unless defaults.present? && defaults.has_key?(:exclude_from_js) && defaults[:exclude_from_js]
          f << <<-JS.strip
            Routes.#{route.name}_path = function() {
                Array.prototype.unshift.call(arguments, '#{route.path}');
                return $.buildPath.apply($, arguments);
            };
          JS
        end
      end
    end
  end

end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
js_routes-0.1.18 lib/js_routes/railtie.rb
js_routes-0.1.17 lib/js_routes/railtie.rb
js_routes-0.1.16 lib/js_routes/railtie.rb
js_routes-0.1.15 lib/js_routes/railtie.rb