js-routes 1.4.7 → 1.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/js_routes.rb +34 -29
- data/lib/js_routes/version.rb +1 -1
- data/lib/routes.js +2 -5
- data/lib/routes.js.coffee +3 -5
- data/spec/js_routes/options_spec.rb +28 -18
- data/spec/spec_helper.rb +2 -2
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 2fb822322b2dc899d084e7562fb8208f490cfa466acb560faa624391e5c08d78
         | 
| 4 | 
            +
              data.tar.gz: 5b8ef3ebf451d7b6a3ea519c84d63c9360a63b80422756a60f4de76f68207cfe
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: c62cf998ca3b96ce493a94bba20cbaf5b0980c29c2e3f4320f5633f4ea1336f0eaa4309658bb941be393184b332cb7f2eb2437a13b95351ff71b67c368d1a629
         | 
| 7 | 
            +
              data.tar.gz: f008e5cc545deb0e8fb389de0111b796af4cc66f3fccaed002e1c2107b2ed61955ab2c12502b0c87d6f39f4b4106a958cdc742830b3df0e12181bfc3a5b0732e
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    
    
        data/lib/js_routes.rb
    CHANGED
    
    | @@ -118,18 +118,18 @@ class JsRoutes | |
| 118 118 | 
             
                end
         | 
| 119 119 |  | 
| 120 120 | 
             
                {
         | 
| 121 | 
            -
                   | 
| 122 | 
            -
                   | 
| 123 | 
            -
                   | 
| 124 | 
            -
                   | 
| 125 | 
            -
                   | 
| 126 | 
            -
             | 
| 127 | 
            -
                   | 
| 128 | 
            -
                   | 
| 129 | 
            -
                   | 
| 130 | 
            -
                   | 
| 131 | 
            -
                   | 
| 132 | 
            -
                   | 
| 121 | 
            +
                  'GEM_VERSION'         => JsRoutes::VERSION,
         | 
| 122 | 
            +
                  'ROUTES'              => js_routes,
         | 
| 123 | 
            +
                  'NODE_TYPES'          => json(NODE_TYPES),
         | 
| 124 | 
            +
                  'RAILS_VERSION'       => ActionPack.version,
         | 
| 125 | 
            +
                  'DEPRECATED_GLOBBING_BEHAVIOR' => ActionPack::VERSION::MAJOR == 4 && ActionPack::VERSION::MINOR == 0,
         | 
| 126 | 
            +
             | 
| 127 | 
            +
                  'APP_CLASS'           => application.class.to_s,
         | 
| 128 | 
            +
                  'NAMESPACE'           => json(@configuration.namespace),
         | 
| 129 | 
            +
                  'DEFAULT_URL_OPTIONS' => json(@configuration.default_url_options),
         | 
| 130 | 
            +
                  'PREFIX'              => json(@configuration.prefix),
         | 
| 131 | 
            +
                  'SPECIAL_OPTIONS_KEY' => json(@configuration.special_options_key),
         | 
| 132 | 
            +
                  'SERIALIZER'          => @configuration.serializer || json(nil),
         | 
| 133 133 | 
             
                }.inject(File.read(File.dirname(__FILE__) + "/routes.js")) do |js, (key, value)|
         | 
| 134 134 | 
             
                  js.gsub!(key, value.to_s)
         | 
| 135 135 | 
             
                end
         | 
| @@ -173,7 +173,8 @@ class JsRoutes | |
| 173 173 |  | 
| 174 174 | 
             
              def mounted_app_routes(route)
         | 
| 175 175 | 
             
                rails_engine_app = get_app_from_route(route)
         | 
| 176 | 
            -
                if rails_engine_app.respond_to?(:superclass) && | 
| 176 | 
            +
                if rails_engine_app.respond_to?(:superclass) &&
         | 
| 177 | 
            +
                   rails_engine_app.superclass == Rails::Engine && !route.path.anchored
         | 
| 177 178 | 
             
                  rails_engine_app.routes.named_routes.map do |_, engine_route|
         | 
| 178 179 | 
             
                    build_route_if_match(engine_route, route)
         | 
| 179 180 | 
             
                  end
         | 
| @@ -183,7 +184,8 @@ class JsRoutes | |
| 183 184 | 
             
              end
         | 
| 184 185 |  | 
| 185 186 | 
             
              def get_app_from_route(route)
         | 
| 186 | 
            -
                # rails engine in Rails 4.2 use additional | 
| 187 | 
            +
                # rails engine in Rails 4.2 use additional
         | 
| 188 | 
            +
                # ActionDispatch::Routing::Mapper::Constraints, which contain app
         | 
| 187 189 | 
             
                if route.app.respond_to?(:app) && route.app.respond_to?(:constraints)
         | 
| 188 190 | 
             
                  route.app.app
         | 
| 189 191 | 
             
                else
         | 
| @@ -191,8 +193,9 @@ class JsRoutes | |
| 191 193 | 
             
                end
         | 
| 192 194 | 
             
              end
         | 
| 193 195 |  | 
| 194 | 
            -
              def build_route_if_match(route, parent_route=nil)
         | 
| 195 | 
            -
                if any_match?(route, parent_route, @configuration[:exclude]) || | 
| 196 | 
            +
              def build_route_if_match(route, parent_route = nil)
         | 
| 197 | 
            +
                if any_match?(route, parent_route, @configuration[:exclude]) ||
         | 
| 198 | 
            +
                   !any_match?(route, parent_route, @configuration[:include])
         | 
| 196 199 | 
             
                  nil
         | 
| 197 200 | 
             
                else
         | 
| 198 201 | 
             
                  build_js(route, parent_route)
         | 
| @@ -203,7 +206,7 @@ class JsRoutes | |
| 203 206 | 
             
                full_route = [parent_route.try(:name), route.name].compact.join('_')
         | 
| 204 207 |  | 
| 205 208 | 
             
                matchers = Array(matchers)
         | 
| 206 | 
            -
                matchers.any? {|regex| full_route =~ regex}
         | 
| 209 | 
            +
                matchers.any? { |regex| full_route =~ regex }
         | 
| 207 210 | 
             
              end
         | 
| 208 211 |  | 
| 209 212 | 
             
              def build_js(route, parent_route)
         | 
| @@ -211,7 +214,7 @@ class JsRoutes | |
| 211 214 | 
             
                route_name = generate_route_name(name, (:path unless @configuration[:compact]))
         | 
| 212 215 | 
             
                parent_spec = parent_route.try(:path).try(:spec)
         | 
| 213 216 | 
             
                route_arguments = route_js_arguments(route, parent_spec)
         | 
| 214 | 
            -
                url_link = generate_url_link(name,  | 
| 217 | 
            +
                url_link = generate_url_link(name, route_arguments)
         | 
| 215 218 | 
             
                _ = <<-JS.strip!
         | 
| 216 219 | 
             
              // #{name.join('.')} => #{parent_spec}#{route.path.spec}
         | 
| 217 220 | 
             
              // function(#{build_params(route.required_parts)})
         | 
| @@ -225,7 +228,8 @@ class JsRoutes | |
| 225 228 | 
             
                  hash[part] = required_parts.include?(part)
         | 
| 226 229 | 
             
                end
         | 
| 227 230 | 
             
                default_options = route.defaults.select do |part, _|
         | 
| 228 | 
            -
                  FILTERED_DEFAULT_PARTS.exclude?(part) && | 
| 231 | 
            +
                  FILTERED_DEFAULT_PARTS.exclude?(part) &&
         | 
| 232 | 
            +
                    URL_OPTIONS.include?(part) || parts_table[part]
         | 
| 229 233 | 
             
                end
         | 
| 230 234 | 
             
                [
         | 
| 231 235 | 
             
                  # JS objects don't preserve the order of properties which is crucial,
         | 
| @@ -235,19 +239,19 @@ class JsRoutes | |
| 235 239 | 
             
                  serialize(route.path.spec, parent_spec)
         | 
| 236 240 | 
             
                ].map do |argument|
         | 
| 237 241 | 
             
                  json(argument)
         | 
| 238 | 
            -
                end.join( | 
| 242 | 
            +
                end.join(', ')
         | 
| 239 243 | 
             
              end
         | 
| 240 244 |  | 
| 241 | 
            -
              def generate_url_link(name,  | 
| 242 | 
            -
                return  | 
| 245 | 
            +
              def generate_url_link(name, route_arguments)
         | 
| 246 | 
            +
                return '' unless @configuration[:url_links]
         | 
| 247 | 
            +
             | 
| 243 248 | 
             
                <<-JS.strip!
         | 
| 244 249 | 
             
                #{generate_route_name(name, :url)}: Utils.route(#{route_arguments}, true)
         | 
| 245 250 | 
             
                JS
         | 
| 246 251 | 
             
              end
         | 
| 247 252 |  | 
| 248 | 
            -
              def generate_route_name( | 
| 249 | 
            -
                route_name =  | 
| 250 | 
            -
                route_name << "_#{ suffix }" if suffix
         | 
| 253 | 
            +
              def generate_route_name(*parts)
         | 
| 254 | 
            +
                route_name = parts.compact.join('_')
         | 
| 251 255 | 
             
                @configuration[:camel_case] ? route_name.camelize(:lower) : route_name
         | 
| 252 256 | 
             
              end
         | 
| 253 257 |  | 
| @@ -257,7 +261,7 @@ class JsRoutes | |
| 257 261 |  | 
| 258 262 | 
             
              def build_params(required_parts)
         | 
| 259 263 | 
             
                params = required_parts + [LAST_OPTIONS_KEY]
         | 
| 260 | 
            -
                params.join( | 
| 264 | 
            +
                params.join(', ')
         | 
| 261 265 | 
             
              end
         | 
| 262 266 |  | 
| 263 267 | 
             
              # This function serializes Journey route into JSON structure
         | 
| @@ -266,7 +270,9 @@ class JsRoutes | |
| 266 270 | 
             
              # Routes.js file will be smaller.
         | 
| 267 271 | 
             
              def serialize(spec, parent_spec=nil)
         | 
| 268 272 | 
             
                return nil unless spec
         | 
| 269 | 
            -
                 | 
| 273 | 
            +
                # Rails 4 globbing requires * removal
         | 
| 274 | 
            +
                return spec.tr(':*', '') if spec.is_a?(String)
         | 
| 275 | 
            +
             | 
| 270 276 | 
             
                result = serialize_spec(spec, parent_spec)
         | 
| 271 277 | 
             
                if parent_spec && result[1].is_a?(String)
         | 
| 272 278 | 
             
                  result = [
         | 
| @@ -280,7 +286,7 @@ class JsRoutes | |
| 280 286 | 
             
                result
         | 
| 281 287 | 
             
              end
         | 
| 282 288 |  | 
| 283 | 
            -
              def serialize_spec(spec, parent_spec=nil)
         | 
| 289 | 
            +
              def serialize_spec(spec, parent_spec = nil)
         | 
| 284 290 | 
             
                [
         | 
| 285 291 | 
             
                  NODE_TYPES[spec.type],
         | 
| 286 292 | 
             
                  serialize(spec.left, parent_spec),
         | 
| @@ -288,4 +294,3 @@ class JsRoutes | |
| 288 294 | 
             
                ]
         | 
| 289 295 | 
             
              end
         | 
| 290 296 | 
             
            end
         | 
| 291 | 
            -
             | 
    
        data/lib/js_routes/version.rb
    CHANGED
    
    
    
        data/lib/routes.js
    CHANGED
    
    | @@ -336,9 +336,6 @@ Based on Rails RAILS_VERSION routes of APP_CLASS | |
| 336 336 | 
             
                visit_globbing: function(route, parameters, optional) {
         | 
| 337 337 | 
             
                  var left, right, type, value;
         | 
| 338 338 | 
             
                  type = route[0], left = route[1], right = route[2];
         | 
| 339 | 
            -
                  if (left.replace(/^\*/i, "") !== left) {
         | 
| 340 | 
            -
                    route[1] = left = left.replace(/^\*/i, "");
         | 
| 341 | 
            -
                  }
         | 
| 342 339 | 
             
                  value = parameters[left];
         | 
| 343 340 | 
             
                  delete parameters[left];
         | 
| 344 341 | 
             
                  if (value == null) {
         | 
| @@ -472,7 +469,7 @@ Based on Rails RAILS_VERSION routes of APP_CLASS | |
| 472 469 | 
             
                },
         | 
| 473 470 | 
             
                namespace: function(root, namespace, routes) {
         | 
| 474 471 | 
             
                  var index, j, len, part, parts;
         | 
| 475 | 
            -
                  parts = namespace.split(".");
         | 
| 472 | 
            +
                  parts = namespace ? namespace.split(".") : [];
         | 
| 476 473 | 
             
                  if (parts.length === 0) {
         | 
| 477 474 | 
             
                    return routes;
         | 
| 478 475 | 
             
                  }
         | 
| @@ -518,7 +515,7 @@ Based on Rails RAILS_VERSION routes of APP_CLASS | |
| 518 515 | 
             
                  return Utils.make();
         | 
| 519 516 | 
             
                });
         | 
| 520 517 | 
             
              } else {
         | 
| 521 | 
            -
                Utils.make();
         | 
| 518 | 
            +
                return Utils.make();
         | 
| 522 519 | 
             
              }
         | 
| 523 520 |  | 
| 524 521 | 
             
            }).call(this);
         | 
    
        data/lib/routes.js.coffee
    CHANGED
    
    | @@ -258,8 +258,6 @@ Utils = | |
| 258 258 | 
             
              #
         | 
| 259 259 | 
             
              visit_globbing: (route, parameters, optional) ->
         | 
| 260 260 | 
             
                [type, left, right] = route
         | 
| 261 | 
            -
                # fix for rails 4 globbing
         | 
| 262 | 
            -
                route[1] = left = left.replace(/^\*/i, "") if left.replace(/^\*/i, "") isnt left
         | 
| 263 261 | 
             
                value = parameters[left]
         | 
| 264 262 | 
             
                delete parameters[left]
         | 
| 265 263 | 
             
                return @visit(route, parameters, optional) unless value?
         | 
| @@ -377,7 +375,7 @@ Utils = | |
| 377 375 | 
             
                result
         | 
| 378 376 |  | 
| 379 377 | 
             
              namespace: (root, namespace, routes) ->
         | 
| 380 | 
            -
                parts = namespace.split(".")
         | 
| 378 | 
            +
                parts = if namespace then namespace.split(".") else []
         | 
| 381 379 | 
             
                return routes if parts.length == 0
         | 
| 382 380 | 
             
                for part, index in parts
         | 
| 383 381 | 
             
                  if index < parts.length - 1
         | 
| @@ -402,6 +400,7 @@ Utils = | |
| 402 400 |  | 
| 403 401 | 
             
                routes.default_serializer = (object, prefix) ->
         | 
| 404 402 | 
             
                  Utils.default_serializer(object, prefix)
         | 
| 403 | 
            +
                # Browser globals
         | 
| 405 404 | 
             
                Utils.namespace(root, NAMESPACE, routes)
         | 
| 406 405 |  | 
| 407 406 | 
             
            # Set up Routes appropriately for the environment.
         | 
| @@ -409,5 +408,4 @@ if typeof define is "function" and define.amd | |
| 409 408 | 
             
              # AMD
         | 
| 410 409 | 
             
              define [], -> Utils.make()
         | 
| 411 410 | 
             
            else
         | 
| 412 | 
            -
               | 
| 413 | 
            -
              Utils.make()
         | 
| 411 | 
            +
              return Utils.make()
         | 
| @@ -167,36 +167,46 @@ describe JsRoutes, "options" do | |
| 167 167 | 
             
                expect(evaljs("Routes.no_format_path({format: 'json'})")).to eq(test_routes.no_format_path(format: 'json'))
         | 
| 168 168 | 
             
              end
         | 
| 169 169 |  | 
| 170 | 
            -
              describe " | 
| 170 | 
            +
              describe "namespace option" do
         | 
| 171 171 | 
             
                let(:_options) { {:namespace => "PHM"} }
         | 
| 172 172 | 
             
                it "should use this namespace for routing" do
         | 
| 173 173 | 
             
                  expect(evaljs("window.Routes")).to be_nil
         | 
| 174 174 | 
             
                  expect(evaljs("PHM.inbox_path")).not_to be_nil
         | 
| 175 175 | 
             
                end
         | 
| 176 | 
            -
              end
         | 
| 177 176 |  | 
| 178 | 
            -
             | 
| 179 | 
            -
             | 
| 180 | 
            -
                  let(:_presetup) { "window.PHM = {}" }
         | 
| 181 | 
            -
                  let(:_options) { {:namespace => "PHM.Routes"} }
         | 
| 177 | 
            +
                context "is nil" do
         | 
| 178 | 
            +
                  let(:_options) { {:namespace => nil} }
         | 
| 182 179 | 
             
                  it "should use this namespace for routing" do
         | 
| 183 | 
            -
                     | 
| 180 | 
            +
                    evaljs("window.zz = #{JsRoutes.generate(namespace: nil)}")
         | 
| 181 | 
            +
                    expect(evaljs("window.Routes")).to be_nil
         | 
| 182 | 
            +
                    expect(evaljs("window.zz.inbox_path")).not_to be_nil
         | 
| 184 183 | 
             
                  end
         | 
| 184 | 
            +
             | 
| 185 185 | 
             
                end
         | 
| 186 186 |  | 
| 187 | 
            -
                 | 
| 188 | 
            -
                   | 
| 189 | 
            -
             | 
| 190 | 
            -
                     | 
| 187 | 
            +
                describe "is nested" do
         | 
| 188 | 
            +
                  context "and defined on client" do
         | 
| 189 | 
            +
                    let(:_presetup) { "window.PHM = {}" }
         | 
| 190 | 
            +
                    let(:_options) { {:namespace => "PHM.Routes"} }
         | 
| 191 | 
            +
                    it "should use this namespace for routing" do
         | 
| 192 | 
            +
                      expect(evaljs("PHM.Routes.inbox_path")).not_to be_nil
         | 
| 193 | 
            +
                    end
         | 
| 191 194 | 
             
                  end
         | 
| 192 | 
            -
                end
         | 
| 193 195 |  | 
| 194 | 
            -
             | 
| 195 | 
            -
             | 
| 196 | 
            -
             | 
| 197 | 
            -
             | 
| 198 | 
            -
                     | 
| 199 | 
            -
             | 
| 196 | 
            +
                  context "but undefined on client" do
         | 
| 197 | 
            +
                    let(:_options) { {:namespace => "PHM.Routes"} }
         | 
| 198 | 
            +
                    it "should initialize namespace" do
         | 
| 199 | 
            +
                      expect(evaljs("window.PHM.Routes.inbox_path")).not_to be_nil
         | 
| 200 | 
            +
                    end
         | 
| 201 | 
            +
                  end
         | 
| 202 | 
            +
             | 
| 203 | 
            +
                  context "and some parts are defined" do
         | 
| 204 | 
            +
                    let(:_presetup) { "window.PHM = { Utils: {} };" }
         | 
| 205 | 
            +
                    let(:_options) { {:namespace => "PHM.Routes"} }
         | 
| 206 | 
            +
                    it "should not overwrite existing parts" do
         | 
| 207 | 
            +
                      expect(evaljs("window.PHM.Utils")).not_to be_nil
         | 
| 208 | 
            +
                      expect(evaljs("window.PHM.Routes.inbox_path")).not_to be_nil
         | 
| 209 | 
            +
                    end
         | 
| 200 210 | 
             
                  end
         | 
| 201 211 | 
             
                end
         | 
| 202 212 | 
             
              end
         | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    | @@ -95,11 +95,11 @@ RSpec.configure do |config| | |
| 95 95 |  | 
| 96 96 | 
             
                if defined?(JRUBY_VERSION)
         | 
| 97 97 | 
             
                  jscontext[:log] = lambda do |context, value|
         | 
| 98 | 
            -
                    puts value
         | 
| 98 | 
            +
                    puts value.inspect
         | 
| 99 99 | 
             
                  end
         | 
| 100 100 | 
             
                else
         | 
| 101 101 | 
             
                  jscontext.attach("log", proc do |value|
         | 
| 102 | 
            -
                    puts value
         | 
| 102 | 
            +
                    puts value.inspect
         | 
| 103 103 | 
             
                  end)
         | 
| 104 104 | 
             
                end
         | 
| 105 105 | 
             
              end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: js-routes
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.4. | 
| 4 | 
            +
              version: 1.4.8
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Bogdan Gusiev
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2019- | 
| 11 | 
            +
            date: 2019-07-19 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: railties
         |