Skip to content

Commit

Permalink
internal: add setRewriteRules method + an id on built ins
Browse files Browse the repository at this point in the history
  • Loading branch information
shakyShane committed Jul 28, 2015
1 parent 2c943c6 commit 5c26e69
Show file tree
Hide file tree
Showing 4 changed files with 137 additions and 1 deletion.
16 changes: 16 additions & 0 deletions lib/browser-sync.js
Original file line number Diff line number Diff line change
Expand Up @@ -616,6 +616,22 @@ BrowserSync.prototype.addRewriteRule = function (rule) {
}
};

/**
* Completely replace all rules
* @param {Array} rules
*/
BrowserSync.prototype.setRewriteRules = function (rules) {
var bs = this;

if (bs.options.get("mode") === "server") {
bs.snippetMw.opts.rules = rules;
}

if (bs.options.get("mode") === "proxy") {
bs.proxy.config.rules = rules;
}
};

/**
* Handle Browser Reloads
*/
Expand Down
3 changes: 2 additions & 1 deletion lib/snippet.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ var utils = {
return {
match: options.getIn(["rule", "match"]),
fn: fn,
once: true
once: true,
id: "bs-snippet"
};
},
getSnippetMiddleware: function (snippet, options, rewriteRules) {
Expand Down
70 changes: 70 additions & 0 deletions test/specs/e2e/proxy/e2e.proxy.rewrite.rules.replace.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
"use strict";

var browserSync = require("../../../../index");

var connect = require("connect");
var serveStatic = require("serve-static");
var request = require("supertest");
var assert = require("chai").assert;

describe("E2E proxy test with replacing rewrite rules dynamically", function () {

var bs, server, options;

before(function (done) {

browserSync.reset();

var app = connect();
app.use(serveStatic("test/fixtures"));
server = app.listen();
var proxytarget = "http://localhost:" + server.address().port;

var config = {
proxy: proxytarget,
logLevel: "silent",
open: false,
rewriteRules: [
{
match: /BrowserSync/g,
fn: function () {
return "BROWSERSYNC";
}
}
]
};

bs = browserSync.init([], config, function (err, bs) {
options = bs.options;
done();
}).instance;
});

after(function () {
bs.cleanup();
server.close();
});

it("can add rules on the fly", function (done) {

request(bs.server)
.get("/index.html")
.set("accept", "text/html")
.expect(200)
.end(function (err, res) {

assert.include(res.text, "BROWSERSYNC");

bs.setRewriteRules([]);

request(bs.server)
.get("/index.html")
.set("accept", "text/html")
.expect(200)
.end(function (err, res) {
assert.include(res.text, "BrowserSync");
done();
});
});
});
});
49 changes: 49 additions & 0 deletions test/specs/e2e/server/e2e.server.rewrite.rules.replace.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
"use strict";

var browserSync = require("../../../../index");

var request = require("supertest");
var assert = require("chai").assert;

describe("E2E server test with rewrite rules replaced on the fly", function () {

var bs;

before(function (done) {

browserSync.reset();

var config = {
server: {
baseDir: "test/fixtures"
},
logLevel: "silent",
open: false
};

bs = browserSync.init(config, done).instance;
});

after(function () {
bs.cleanup();
});

it("serves files with HTML rewritten", function (done) {

bs.setRewriteRules([{
match: /Forms/g,
fn: function () {
return "Shane's forms";
}
}]);

request(bs.server)
.get("/index.html")
.set("accept", "text/html")
.expect(200)
.end(function (err, res) {
assert.include(res.text, "Shane's forms");
done();
});
});
});

0 comments on commit 5c26e69

Please sign in to comment.