start RuleSet class

Signed-off-by: Doug Hellmann <doug@doughellmann.com>
This commit is contained in:
Doug Hellmann 2017-08-23 12:55:57 -04:00
parent 8b1ece685b
commit 6a4c080f56
2 changed files with 40 additions and 0 deletions

View File

@ -70,3 +70,20 @@ class RedirectMatch(Rule):
if m:
return (self.code, self.regex.sub(self.target_repl, path))
return None
class RuleSet(object):
"An ordered collection of rules."
_factories = {
'redirect': Redirect,
'redirectmatch': RedirectMatch,
}
def __init__(self):
self._rules = []
def add(self, linenum, *params):
rule_type = params[0].lower()
rule = self._factories[rule_type](linenum, *params)
self._rules.append(rule)

View File

@ -132,3 +132,26 @@ class TestRedirectMatch(base.TestCase):
(1, 'redirectmatch', '301', '/the/path', '/new/path',
'extra-value'),
)
class TestRuleSet(base.TestCase):
def setUp(self):
super(TestRuleSet, self).setUp()
self.ruleset = rules.RuleSet()
def test_add_redirect(self):
self.ruleset.add(
1,
'redirect', '301', '/path', '/new/path',
)
self.assertEqual(1, len(self.ruleset._rules))
self.assertIsInstance(self.ruleset._rules[0], rules.Redirect)
def test_add_redirectmatch(self):
self.ruleset.add(
1,
'redirectmatch', '301', '/path', '/new/path',
)
self.assertEqual(1, len(self.ruleset._rules))
self.assertIsInstance(self.ruleset._rules[0], rules.RedirectMatch)