diff --git a/src/RuleMatcher.js b/src/RuleMatcher.js index 1f31166..7644f0a 100644 --- a/src/RuleMatcher.js +++ b/src/RuleMatcher.js @@ -4,17 +4,18 @@ var RuleMatcher = function(rules){ this.rules = rules; this.redirectOnMatch = function(request){ - var rule = _.find(rules, function(rule){ - return rule.isActive - && request.url.indexOf(rule.from) > -1 - && request.requestId !== lastRequestId; + var rule = _.find(rules, function(rule){ + var match = new RegExp(rule.from); + return rule.isActive && match.test(request.url) && + request.requestId !== lastRequestId; }); if(rule){ lastRequestId = request.requestId; + var match = new RegExp(rule.from); return { - redirectUrl : request.url.replace(rule.from, rule.to) + redirectUrl : request.url.replace(match, rule.to) }; } }; -}; \ No newline at end of file +}; diff --git a/src/RulesController.js b/src/RulesController.js index 63c7f26..60a4f78 100644 --- a/src/RulesController.js +++ b/src/RulesController.js @@ -42,4 +42,4 @@ angular.module('switcheroo') $scope.$watch('rules', function(oldValue, newValue){ rulesService.set(newValue); }, true); -}]); \ No newline at end of file +}]); diff --git a/tests/spec/RuleMatcher.spec.js b/tests/spec/RuleMatcher.spec.js index 257224e..9c40a2c 100644 --- a/tests/spec/RuleMatcher.spec.js +++ b/tests/spec/RuleMatcher.spec.js @@ -32,6 +32,16 @@ describe("RuleMatcher", function() { expect(sut.redirectOnMatch(request)).toEqual({ redirectUrl: 'http://bard.com' }); }); + it('given request url should redirect to rule with regexp matching', function(){ + sut = new RuleMatcher([ + givenRule('fo+', 'bar', true), + ]); + + var request = givenRequest(1, 'http://food.com'); + + expect(sut.redirectOnMatch(request)).toEqual({ redirectUrl: 'http://bard.com' }); + }); + it('given request url should redirect to first matching active rule', function(){ sut = new RuleMatcher([ givenRule('foo', 'bar', false),