Skip to content

increments/js_rails_routes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

f176f31 · Apr 19, 2024
Mar 1, 2024
Apr 18, 2024
Apr 18, 2024
Jul 3, 2018
Jun 25, 2016
May 10, 2022
May 10, 2022
Apr 18, 2024
Jul 13, 2018
Jan 19, 2022
Feb 1, 2024
Jul 11, 2018
May 10, 2022

Repository files navigation

rake js:routes

Gem Build Status Code Climate Test Coverage license

Generate a ES6 module that contains Rails routes.

Description

This gem provides "js:routes" rake task. It generates a ES6 requirable module which exports url helper functions defined in your Rails application.

Suppose the app has following routes:

# == Route Map
#
#       Prefix Verb   URI Pattern                  Controller#Action
#     articles GET    /articles(.:format)          articles#index
#              POST   /articles(.:format)          articles#create
#  new_article GET    /articles/new(.:format)      articles#new
# edit_article GET    /articles/:id/edit(.:format) articles#edit
#      article GET    /articles/:id(.:format)      articles#show
#              PATCH  /articles/:id(.:format)      articles#update
#              PUT    /articles/:id(.:format)      articles#update
#              DELETE /articles/:id(.:format)      articles#destroy
Rails.application.routes.draw do
  resources :articles
end

then rake js:routes generates "app/assets/javascripts/rails-routes.js" as:

// Don't edit manually. `rake js:routes` generates this file.
function process(route, params, keys) {
  var query = [];
  for (var param in params) if (Object.prototype.hasOwnProperty.call(params, param)) {
    if (keys.indexOf(param) === -1) {
      query.push(param + "=" + encodeURIComponent(params[param]));
    }
  }
  return query.length ? route + "?" + query.join("&") : route;
}

export function article_path(params) { return process('/articles/' + params.id + '', params, ['id']); }
export function articles_path(params) { return process('/articles', params, []); }
export function edit_article_path(params) { return process('/articles/' + params.id + '/edit', params, ['id']); }
export function new_article_path(params) { return process('/articles/new', params, []); }

VS.

railsware/js-routes spreads url helpers via global variable.

This gem uses ES6 modules.

Requirement

  • Rails >= 3.2

Usage

Generate routes file.

rake js:routes

Configuration

JSRailsRoutes supports several parameters:

Name Type Description Default
include_paths Regexp Paths match to the regexp are included /.*/
exclude_paths Regexp Paths match to the regexp are excluded /^$/
include_names Regexp Names match to the regexp are included /.*/
exclude_names Regexp Names match to the regexp are excluded /^$/
exclude_engines Regexp Rails engines match to the regexp are excluded /^$/
output_dir String Output JS file into the specified directory Rails.root.join("app", "assets", "javascripts")
camelize Symbol Output JS file with chosen camelcase type it also avaliable for :lower and :upper nil
target String Target type. "js" or "ts" "js"
route_filter Proc Fully customizable filter on JSRails::Route ->(route) { true }
route_set_filter Proc Fully customizable filter on JSRails::RouteSet ->(route_set) { true }

You can configure via JSRailsRoutes.configure.

# Rakefile
JSRailsRoutes.configure do |c|
  c.exclude_paths = %r{^/(rails|sidekiq)}
  c.output_dir = Rails.root.join('client/javascripts')
end

Now rake js:routes ignores paths starting with "/rails" or "/sidekiq".

Command line parameters

You can override the coniguration via command line parameters:

rake js:routes exclude_paths='^/rails'

The command still ignores "/rails" but includes "/sidekiq".

Rename route

You can rename route in route_filter:

# Rakefile
JSRailsRoutes.configure do |c|
  c.route_filter = -> (route) do
    # Remove common prefix if route's name starts with it.
    route.name = route.name[4..-1] if route.name.start_with?('foo_')
    true
  end
end

Install

Your Rails Gemfile:

gem 'js_rails_routes', group: :development

License

MIT

About

Generate a ES6 module that contains Rails routes

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages