--- /dev/null
+/**
+ * @fileoverview Module for loading rules from files and directories.
+ * @author Michael Ficarra
+ */
+
+"use strict";
+
+//------------------------------------------------------------------------------
+// Requirements
+//------------------------------------------------------------------------------
+
+const fs = require("fs"),
+ path = require("path");
+
+const rulesDirCache = {};
+
+//------------------------------------------------------------------------------
+// Public Interface
+//------------------------------------------------------------------------------
+
+/**
+ * Load all rule modules from specified directory.
+ * @param {string} relativeRulesDir Path to rules directory, may be relative.
+ * @param {string} cwd Current working directory
+ * @returns {Object} Loaded rule modules.
+ */
+module.exports = function(relativeRulesDir, cwd) {
+ const rulesDir = path.resolve(cwd, relativeRulesDir);
+
+ // cache will help performance as IO operation are expensive
+ if (rulesDirCache[rulesDir]) {
+ return rulesDirCache[rulesDir];
+ }
+
+ const rules = Object.create(null);
+
+ fs.readdirSync(rulesDir).forEach(file => {
+ if (path.extname(file) !== ".js") {
+ return;
+ }
+ rules[file.slice(0, -3)] = require(path.join(rulesDir, file));
+ });
+ rulesDirCache[rulesDir] = rules;
+
+ return rules;
+};