Class: JsRoutes
- Inherits:
-
Object
- Object
- JsRoutes
- Defined in:
- lib/js_routes.rb,
lib/js_routes/engine.rb,
lib/js_routes/version.rb
Defined Under Namespace
Classes: Configuration, Engine, SprocketsExtension
Constant Summary collapse
- DEFAULTS =
OPTIONS
{ namespace: -> { defined?(Webpacker) ? nil : "Routes" }, exclude: [], include: //, file: -> do sprockets_dir = Rails.root.join('app','assets','javascripts') sprockets_file = sprockets_dir.join('routes.js') webpacker_file = Rails.root.join('app', 'javascript', 'routes.js') Dir.exists?(sprockets_dir) ? sprockets_file : webpacker_file end, prefix: -> { Rails.application.config.relative_url_root || "" }, url_links: false, camel_case: false, default_url_options: {}, compact: false, serializer: nil, special_options_key: "_options", application: -> { Rails.application } }
- NODE_TYPES =
:nodoc:
{ GROUP: 1, CAT: 2, SYMBOL: 3, OR: 4, STAR: 5, LITERAL: 6, SLASH: 7, DOT: 8 }
- LAST_OPTIONS_KEY =
:nodoc:
"options".freeze
- FILTERED_DEFAULT_PARTS =
:nodoc:
[:controller, :action]
- URL_OPTIONS =
:nodoc:
[:protocol, :domain, :host, :port, :subdomain]
- VERSION =
"1.4.11"
Class Method Summary collapse
- .configuration ⇒ Object
- .generate(opts = {}) ⇒ Object
- .generate!(file_name = nil, opts = {}) ⇒ Object
- .json(string) ⇒ Object
- .options ⇒ Object
- .setup(&block) ⇒ Object
Instance Method Summary collapse
- #generate ⇒ Object
- #generate!(file_name = nil) ⇒ Object
-
#initialize(options = {}) ⇒ JsRoutes
constructor
Implementation.
Constructor Details
#initialize(options = {}) ⇒ JsRoutes
Implementation
115 116 117 |
# File 'lib/js_routes.rb', line 115 def initialize( = {}) @configuration = self.class.configuration.merge() end |
Class Method Details
.configuration ⇒ Object
90 91 92 |
# File 'lib/js_routes.rb', line 90 def configuration @configuration ||= Configuration.new end |
.generate(opts = {}) ⇒ Object
94 95 96 |
# File 'lib/js_routes.rb', line 94 def generate(opts = {}) new(opts).generate end |
.generate!(file_name = nil, opts = {}) ⇒ Object
98 99 100 101 102 103 104 |
# File 'lib/js_routes.rb', line 98 def generate!(file_name=nil, opts = {}) if file_name.is_a?(Hash) opts = file_name file_name = opts[:file] end new(opts).generate!(file_name) end |
.json(string) ⇒ Object
106 107 108 |
# File 'lib/js_routes.rb', line 106 def json(string) ActiveSupport::JSON.encode(string) end |
.options ⇒ Object
85 86 87 88 |
# File 'lib/js_routes.rb', line 85 def ActiveSupport::Deprecation.warn('JsRoutes.options method is deprecated use JsRoutes.configuration instead') configuration end |
.setup(&block) ⇒ Object
81 82 83 |
# File 'lib/js_routes.rb', line 81 def setup(&block) configuration.tap(&block) if block end |
Instance Method Details
#generate ⇒ Object
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/js_routes.rb', line 119 def generate # Ensure routes are loaded. If they're not, load them. if named_routes.to_a.empty? && application.respond_to?(:reload_routes!) application.reload_routes! end { 'GEM_VERSION' => JsRoutes::VERSION, 'ROUTES' => js_routes, 'NODE_TYPES' => json(NODE_TYPES), 'RAILS_VERSION' => ActionPack.version, 'DEPRECATED_GLOBBING_BEHAVIOR' => ActionPack::VERSION::MAJOR == 4 && ActionPack::VERSION::MINOR == 0, 'APP_CLASS' => application.class.to_s, 'NAMESPACE' => json(@configuration.namespace), 'DEFAULT_URL_OPTIONS' => json(@configuration.), 'PREFIX' => json(@configuration.prefix), 'SPECIAL_OPTIONS_KEY' => json(@configuration.), 'SERIALIZER' => @configuration.serializer || json(nil), }.inject(File.read(File.dirname(__FILE__) + "/routes.js")) do |js, (key, value)| js.gsub!(key, value.to_s) end end |
#generate!(file_name = nil) ⇒ Object
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
# File 'lib/js_routes.rb', line 143 def generate!(file_name = nil) # Some libraries like Devise do not yet loaded their routes so we will wait # until initialization process finish # https://github.com/railsware/js-routes/issues/7 Rails.configuration.after_initialize do file_name ||= self.class.configuration['file'] file_path = Rails.root.join(file_name) js_content = generate # We don't need to rewrite file if it already exist and have same content. # It helps asset pipeline or webpack understand that file wasn't changed. next if File.exist?(file_path) && File.read(file_path) == js_content File.open(file_path, 'w') do |f| f.write js_content end end end |