{"_id":"honor","_rev":"31-85bb6473d66e4e016aed93e8969585b6","name":"honor","description":"Simple and powerful NodeJS data validation library","dist-tags":{"latest":"0.2.7"},"versions":{"0.1.0":{"name":"honor","description":"Simple and powerful NodeJS data validation library","version":"0.1.0","keywords":["data","validation","validator"],"maintainers":[{"name":"jhiver","email":"jhiver@gmail.com"}],"repositories":[{"type":"git","url":"https://github.com/jhiver/honor.git"}],"licenses":[{"name":"MIT","url":"http://opensource.org/licenses/MIT"}],"devDependencies":{"nodeunit":"0.8.1"},"dependencies":{"deepcopy":"^0.3.3","moment":"^2.8.4","underscore":"^1.7.0","valid-url":"^1.0.9"},"scripts":{"test":"nodeunit tests/*.js"},"main":"lib/honor.js","homepage":"https://github.com/jhiver/honor","gitHead":"8cff8627a926512b109c3b4581a02e2ebdd4a743","repository":{"type":"git","url":"https://github.com/jhiver/honor.git"},"bugs":{"url":"https://github.com/jhiver/honor/issues"},"_id":"honor@0.1.0","_shasum":"b635866d709a3db2cda441e36560d75220c8dfb3","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"jhiver","email":"jhiver@gmail.com"},"dist":{"shasum":"b635866d709a3db2cda441e36560d75220c8dfb3","tarball":"https://registry.npmjs.org/honor/-/honor-0.1.0.tgz","integrity":"sha512-/Egcvdpv21rSQ3e7TUsmO1OCVZFUjYuyRxf4oIHZ+aaMfLE/mtZY4N18JuvSZEfzItFz808heWd477TPH/UAgQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC/r8dQX+5gcFtdeNR9T74YxgFxKWyoQJncICTzBK48lQIhAKL2MKWtAcxkU/39XK4BXe4WHVieMrLYyDVom+tgm/Gy"}]}},"0.1.1":{"name":"honor","description":"Simple and powerful NodeJS data validation library","version":"0.1.1","keywords":["data","validation","validator"],"maintainers":[{"name":"jhiver","email":"jhiver@gmail.com"}],"repositories":[{"type":"git","url":"https://github.com/jhiver/honor.git"}],"licenses":[{"name":"MIT","url":"http://opensource.org/licenses/MIT"}],"devDependencies":{"nodeunit":"0.8.1"},"dependencies":{"deepcopy":"^0.3.3","moment":"^2.8.4","underscore":"^1.7.0","valid-url":"^1.0.9"},"scripts":{"test":"nodeunit tests/*.js"},"main":"lib/honor.js","homepage":"https://github.com/jhiver/honor","gitHead":"8cff8627a926512b109c3b4581a02e2ebdd4a743","repository":{"type":"git","url":"https://github.com/jhiver/honor.git"},"bugs":{"url":"https://github.com/jhiver/honor/issues"},"_id":"honor@0.1.1","_shasum":"12036aecb922e98096f8a0ea717f98a362f3958a","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"jhiver","email":"jhiver@gmail.com"},"dist":{"shasum":"12036aecb922e98096f8a0ea717f98a362f3958a","tarball":"https://registry.npmjs.org/honor/-/honor-0.1.1.tgz","integrity":"sha512-as65zdl95KVnrGwuxVgbEFujXls0dMV3b4X5WjRs8/RrwkRhP7qTOYqL0o55MTBU/AKHziRKzVOtIxjwtQkz3A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFCNOSJiuWeOGgeql0Giar9OvjBkQUTo6rFu8ivRtH6CAiBK2HVb0w5yoZ3FF8c4xt68b0K+XS3c+JzNDvoi7Flctg=="}]}},"0.1.2":{"name":"honor","description":"Simple and powerful NodeJS data validation library","version":"0.1.2","keywords":["data","validation","validator"],"maintainers":[{"name":"jhiver","email":"jhiver@gmail.com"}],"repositories":[{"type":"git","url":"https://github.com/jhiver/honor.git"}],"licenses":[{"name":"MIT","url":"http://opensource.org/licenses/MIT"}],"devDependencies":{"nodeunit":"0.8.1"},"dependencies":{"deepcopy":"^0.3.3","moment":"^2.8.4","underscore":"^1.7.0","valid-url":"^1.0.9"},"scripts":{"test":"nodeunit tests/*.js"},"main":"lib/honor.js","homepage":"https://github.com/jhiver/honor","gitHead":"8cff8627a926512b109c3b4581a02e2ebdd4a743","repository":{"type":"git","url":"https://github.com/jhiver/honor.git"},"bugs":{"url":"https://github.com/jhiver/honor/issues"},"_id":"honor@0.1.2","_shasum":"c1be55b0308e1085469f8f5fcd8dcceffd75d762","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"jhiver","email":"jhiver@gmail.com"},"dist":{"shasum":"c1be55b0308e1085469f8f5fcd8dcceffd75d762","tarball":"https://registry.npmjs.org/honor/-/honor-0.1.2.tgz","integrity":"sha512-wazntex1JgVwAT9LZZ6UaC2FPNszpOFQ3RNw9TSoDFwbjup/STKD8O4oc0eHJNNcaiNK1ZrGkR5DB1gKGttKAw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICjQ3k/rImuJdmfZiVdyQkeBI3b5KvSfeBfYHnZNLQO3AiEApBLrsWx/5vBTKgyMN+Rv6yW2dyCmbOGHo4A9Pyo8QoM="}]}},"0.1.3":{"name":"honor","description":"Simple and powerful NodeJS data validation library","version":"0.1.3","keywords":["data","validation","validator"],"maintainers":[{"name":"jhiver","email":"jhiver@gmail.com"}],"repositories":[{"type":"git","url":"https://github.com/jhiver/honor.git"}],"licenses":[{"name":"MIT","url":"http://opensource.org/licenses/MIT"}],"devDependencies":{"nodeunit":"0.8.1"},"dependencies":{"deepcopy":"^0.3.3","moment":"^2.8.4","underscore":"^1.7.0","valid-url":"^1.0.9"},"scripts":{"test":"nodeunit tests/*.js"},"main":"lib/honor.js","homepage":"https://github.com/jhiver/honor","gitHead":"8cff8627a926512b109c3b4581a02e2ebdd4a743","repository":{"type":"git","url":"https://github.com/jhiver/honor.git"},"bugs":{"url":"https://github.com/jhiver/honor/issues"},"_id":"honor@0.1.3","_shasum":"42521656a3d73c5a1e4de7c33d40eb03ba0a0f54","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"jhiver","email":"jhiver@gmail.com"},"dist":{"shasum":"42521656a3d73c5a1e4de7c33d40eb03ba0a0f54","tarball":"https://registry.npmjs.org/honor/-/honor-0.1.3.tgz","integrity":"sha512-ml9BxKncxdoR+XuPeShFOC2TyOxmHlbT9b6M2gh6f/a84RIVCpm8BVgIovrrLv5sNAY585Jar78id+gC+2KeKw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID6Fdi4+QAqISloMtVGFSH8Nm2wTMIyumD2HM8cq/ZSOAiEApkD++ezUR35xqqPTZ7dEL9jczc9aD0r//uLF89NppSI="}]}},"0.1.4":{"name":"honor","description":"Simple and powerful NodeJS data validation library","version":"0.1.4","keywords":["data","validation","validator"],"maintainers":[{"name":"jhiver","email":"jhiver@gmail.com"}],"repositories":[{"type":"git","url":"https://github.com/jhiver/honor.git"}],"licenses":[{"name":"MIT","url":"http://opensource.org/licenses/MIT"}],"devDependencies":{"nodeunit":"0.8.1"},"dependencies":{"deepcopy":"^0.3.3","moment":"^2.8.4","underscore":"^1.7.0","valid-url":"^1.0.9"},"scripts":{"test":"nodeunit tests/*.js"},"main":"lib/honor.js","homepage":"https://github.com/jhiver/honor","gitHead":"8cff8627a926512b109c3b4581a02e2ebdd4a743","repository":{"type":"git","url":"https://github.com/jhiver/honor.git"},"bugs":{"url":"https://github.com/jhiver/honor/issues"},"_id":"honor@0.1.4","_shasum":"b67e50c8a3e967b5ade13b05bf9b3674087c9e86","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"jhiver","email":"jhiver@gmail.com"},"dist":{"shasum":"b67e50c8a3e967b5ade13b05bf9b3674087c9e86","tarball":"https://registry.npmjs.org/honor/-/honor-0.1.4.tgz","integrity":"sha512-MEUceOok20lcL5zpZfA9zA4TW3pOHtcqQ3DBQhFzjHGdaiCk5KDtl7s2+nTyKMmVDgDT9doEN0DNmWDTIFF0nw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDC9ek3OKth7daiXu54aK0h0Ibnfgnlv3qgQXQxOceMAgIhAIhHaSab7TvTKs8Vcmt8XQK01pBEtgV2utlFFCxOQ9KP"}]}},"0.1.5":{"name":"honor","description":"Simple and powerful NodeJS data validation library","version":"0.1.5","keywords":["data","validation","validator"],"maintainers":[{"name":"jhiver","email":"jhiver@gmail.com"}],"repositories":[{"type":"git","url":"https://github.com/jhiver/honor.git"}],"licenses":[{"name":"MIT","url":"http://opensource.org/licenses/MIT"}],"devDependencies":{"nodeunit":"0.8.1"},"dependencies":{"deepcopy":"^0.3.3","moment":"^2.8.4","underscore":"^1.7.0","valid-url":"^1.0.9"},"scripts":{"test":"nodeunit tests/*.js"},"main":"lib/honor.js","homepage":"https://github.com/jhiver/honor","gitHead":"8cff8627a926512b109c3b4581a02e2ebdd4a743","repository":{"type":"git","url":"https://github.com/jhiver/honor.git"},"bugs":{"url":"https://github.com/jhiver/honor/issues"},"_id":"honor@0.1.5","_shasum":"f1e93d0f99614ea5bd1a50024ac95e2632681dca","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"jhiver","email":"jhiver@gmail.com"},"dist":{"shasum":"f1e93d0f99614ea5bd1a50024ac95e2632681dca","tarball":"https://registry.npmjs.org/honor/-/honor-0.1.5.tgz","integrity":"sha512-1BXBzF3WMgrBfz73aNfSZwBykRSfRg3ebM0XKXYhcErCqLIgOeobrO6vPAxXOk4mJS/FGpoy+T139nopAWH9Tw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDCk51aG+MeFek3poKGj9FSmUww6NEyIES/E1yKunYFAQIgFo+Q294XTowigD2gls6PlwVOTVlhFo31BUj9YnXxdbQ="}]}},"0.1.6":{"name":"honor","description":"Simple and powerful NodeJS data validation library","version":"0.1.6","keywords":["data","validation","validator"],"maintainers":[{"name":"jhiver","email":"jhiver@gmail.com"}],"repositories":[{"type":"git","url":"https://github.com/jhiver/honor.git"}],"licenses":[{"name":"MIT","url":"http://opensource.org/licenses/MIT"}],"devDependencies":{"nodeunit":"0.8.1"},"dependencies":{"deepcopy":"^0.3.3","moment":"^2.8.4","underscore":"^1.7.0","valid-url":"^1.0.9"},"scripts":{"test":"nodeunit tests/*.js"},"main":"lib/honor.js","homepage":"https://github.com/jhiver/honor","gitHead":"49980dd09a32bd1d8914f1d4add23d952c1f9e25","repository":{"type":"git","url":"https://github.com/jhiver/honor.git"},"bugs":{"url":"https://github.com/jhiver/honor/issues"},"_id":"honor@0.1.6","_shasum":"4675e77c78dc3052c830310983279572e98e2d2c","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"jhiver","email":"jhiver@gmail.com"},"dist":{"shasum":"4675e77c78dc3052c830310983279572e98e2d2c","tarball":"https://registry.npmjs.org/honor/-/honor-0.1.6.tgz","integrity":"sha512-u0vFAMJGO66Ja33WREJP9nPi+keAFCqwxVJ2J24CZE1ry4kPkieOlBfvCkUJmBw4774eqXCuI9WD3wnG4amKpA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDCHTZB5E/wWD4+EDxwcLPmIOWaLPo0n0Rrfa3kAQoJTgIhAJzPk9eIsN6MfU/w1C9pZKevwjHs035tOrfdBaUvET7x"}]}},"0.1.7":{"name":"honor","description":"Simple and powerful NodeJS data validation library","version":"0.1.7","keywords":["data","validation","validator"],"maintainers":[{"name":"jhiver","email":"jhiver@gmail.com"}],"repositories":[{"type":"git","url":"https://github.com/jhiver/honor.git"}],"licenses":[{"name":"MIT","url":"http://opensource.org/licenses/MIT"}],"devDependencies":{"nodeunit":"0.8.1"},"dependencies":{"deepcopy":"^0.3.3","moment":"^2.8.4","underscore":"^1.7.0","valid-url":"^1.0.9"},"scripts":{"test":"nodeunit tests/*.js"},"main":"lib/honor.js","homepage":"https://github.com/jhiver/honor","gitHead":"49980dd09a32bd1d8914f1d4add23d952c1f9e25","repository":{"type":"git","url":"https://github.com/jhiver/honor.git"},"bugs":{"url":"https://github.com/jhiver/honor/issues"},"_id":"honor@0.1.7","_shasum":"2d4ae97bb7a77dafa6cc4882018758c228fae74a","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"jhiver","email":"jhiver@gmail.com"},"dist":{"shasum":"2d4ae97bb7a77dafa6cc4882018758c228fae74a","tarball":"https://registry.npmjs.org/honor/-/honor-0.1.7.tgz","integrity":"sha512-lQV8ImOLCwvrMcYTF8Romz2Q6UBPtKMB5p33d3OftjVlIA/tbvykgPpAN8f6bjhl514INzCyrMRiaHz7jRaN/w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBwVsqhMfYpqBGtMMD5V7N1FCrrwuhNTni8vq760uM2oAiAGHjYMoft70N/fYFvjiSOjOYyTw9IFvLFvNdqEV497KQ=="}]}},"0.1.8":{"name":"honor","description":"Simple and powerful NodeJS data validation library","version":"0.1.8","keywords":["data","validation","validator"],"maintainers":[{"name":"jhiver","email":"jhiver@gmail.com"}],"repositories":[{"type":"git","url":"https://github.com/jhiver/objection.git"}],"licenses":[{"name":"MIT","url":"http://opensource.org/licenses/MIT"}],"devDependencies":{"nodeunit":"0.8.1"},"dependencies":{"deepcopy":"^0.3.3","moment":"^2.8.4","underscore":"^1.7.0","valid-url":"^1.0.9"},"scripts":{"test":"nodeunit tests/*.js"},"main":"lib/honor.js","homepage":"https://github.com/jhiver/objection","gitHead":"782e3850b4e44254d5b94243985b9460cc129495","repository":{"type":"git","url":"https://github.com/jhiver/objection.git"},"bugs":{"url":"https://github.com/jhiver/objection/issues"},"_id":"honor@0.1.8","_shasum":"03c8d658bc32981f3d1d4198299ebe0dc7e4ea19","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"jhiver","email":"jhiver@gmail.com"},"dist":{"shasum":"03c8d658bc32981f3d1d4198299ebe0dc7e4ea19","tarball":"https://registry.npmjs.org/honor/-/honor-0.1.8.tgz","integrity":"sha512-S1KfXhaThPrFSqqalrFCX41St5iiQJtMXoFDWxZ2o2SQnKrJOtPbB71N6Pgb7DwbskDSmok1zfK/PlZf9uiGZw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTVttRhqIfNaMe8GoYL6g5mnBnrFYflH4Mj/W7Ncq0dQIgeL9O5bOvP78dSDSyUiQ74i1tjRnlb1JBNy/XKPJTi2M="}]}},"0.1.9":{"name":"honor","description":"Simple and powerful NodeJS data validation library","version":"0.1.9","keywords":["data","validation","validator"],"maintainers":[{"name":"jhiver","email":"jhiver@gmail.com"}],"repositories":[{"type":"git","url":"https://github.com/jhiver/objection.git"}],"licenses":[{"name":"MIT","url":"http://opensource.org/licenses/MIT"}],"devDependencies":{"nodeunit":"0.8.1"},"dependencies":{"deepcopy":"^0.3.3","moment":"^2.8.4","underscore":"^1.7.0","valid-url":"^1.0.9"},"scripts":{"test":"nodeunit tests/*.js"},"main":"lib/honor.js","homepage":"https://github.com/jhiver/objection","gitHead":"0d4497a00b5203673924601ece974170636e36fc","repository":{"type":"git","url":"https://github.com/jhiver/objection.git"},"bugs":{"url":"https://github.com/jhiver/objection/issues"},"_id":"honor@0.1.9","_shasum":"a54238fc52a9022b018e8abc748227c00e6b01bf","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"jhiver","email":"jhiver@gmail.com"},"dist":{"shasum":"a54238fc52a9022b018e8abc748227c00e6b01bf","tarball":"https://registry.npmjs.org/honor/-/honor-0.1.9.tgz","integrity":"sha512-KfNWTAl5RyYgyZXEyeQ2EZmqVM/EXgdHWahKxu6/B71o3cI1LJ+a2qEm4QRxXP4lOAQvJAIuhUsK9j5XktDLIg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDAIDTQNQNj3x0v/otJS0UNIQwsBAVmC/wRPDSI2NN01AIhALRGZ7FoGouILMmLp2rup46xD6tFii2TA+YT8xDuYp7J"}]}},"0.2.0":{"name":"honor","description":"Simple and powerful NodeJS data validation library","version":"0.2.0","keywords":["data","validation","validator"],"maintainers":[{"name":"jhiver","email":"jhiver@gmail.com"}],"repositories":[{"type":"git","url":"https://github.com/jhiver/objection.git"}],"licenses":[{"name":"MIT","url":"http://opensource.org/licenses/MIT"}],"devDependencies":{"nodeunit":"0.8.1"},"dependencies":{"deepcopy":"^0.3.3","moment":"^2.8.4","underscore":"^1.7.0","valid-url":"^1.0.9"},"scripts":{"test":"nodeunit tests/*.js"},"main":"lib/honor.js","homepage":"https://github.com/jhiver/objection","gitHead":"207872a02fc978dc0a69f239e557793160ed904d","repository":{"type":"git","url":"https://github.com/jhiver/objection.git"},"bugs":{"url":"https://github.com/jhiver/objection/issues"},"_id":"honor@0.2.0","_shasum":"1ba414f6e4185d2676dc60047239a5895d9c7e07","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"jhiver","email":"jhiver@gmail.com"},"dist":{"shasum":"1ba414f6e4185d2676dc60047239a5895d9c7e07","tarball":"https://registry.npmjs.org/honor/-/honor-0.2.0.tgz","integrity":"sha512-HWB6zqEil3NalNceh4+wlTQSFlhM/fhWEG2NK1gcwzSy1e0nEtldr3M6Gibqps1OXeGmP8iJJzRc7KKvftcMMw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDGZrHMSgadkLOx4aDEpM2yIWdWXl4klJulqPpcT36/iAIgHbXhSKfcUakXmjJrZL2fn8aLykAkzSXeQK/Me/L9xzM="}]}},"0.2.1":{"name":"honor","description":"Simple and powerful NodeJS data validation library","version":"0.2.1","keywords":["data","validation","validator"],"maintainers":[{"name":"jhiver","email":"jhiver@gmail.com"}],"repository":{"type":"git","url":"https://github.com/jhiver/objection.git"},"licenses":[{"name":"MIT","url":"http://opensource.org/licenses/MIT"}],"devDependencies":{"nodeunit":"0.8.1"},"dependencies":{"deepcopy":"^0.3.3","moment":"^2.8.4","underscore":"^1.7.0","valid-url":"^1.0.9"},"scripts":{"test":"nodeunit tests/*.js"},"main":"lib/honor.js","homepage":"https://github.com/jhiver/objection","gitHead":"ecdc421828fa51ba5b4c73dbbe3519f040d1c61d","bugs":{"url":"https://github.com/jhiver/objection/issues"},"_id":"honor@0.2.1","_shasum":"ccf84f5572b412234378cc45b3dbadb548a40d85","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"jhiver","email":"jhiver@gmail.com"},"dist":{"shasum":"ccf84f5572b412234378cc45b3dbadb548a40d85","tarball":"https://registry.npmjs.org/honor/-/honor-0.2.1.tgz","integrity":"sha512-ifwmkb8zhZ2NNa7jWJvY0sDHibftI23aagIN+72C7qEr2LsYjVv4y1LH4g7F3BP0fQd7PgPScnNXHWbeTcLwrg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD50ti+YxVxtIcCUoC3O/ywES4qtBULI2T+q32pApoNgAIgXfJuJXgwc+6gWPlENilFxRnaqY2/LFsHH+m/lSClpg4="}]}},"0.2.3":{"name":"honor","description":"Simple and powerful NodeJS data validation library","version":"0.2.3","keywords":["data","validation","validator"],"maintainers":[{"name":"jhiver","email":"jhiver@gmail.com"}],"repository":{"type":"git","url":"https://github.com/jhiver/objection.git"},"licenses":[{"name":"MIT","url":"http://opensource.org/licenses/MIT"}],"devDependencies":{"nodeunit":"0.8.1"},"dependencies":{"deepcopy":"^0.3.3","moment":"^2.8.4","underscore":"^1.7.0","valid-url":"^1.0.9"},"scripts":{"test":"nodeunit tests/*.js"},"main":"lib/honor.js","homepage":"https://github.com/jhiver/objection","gitHead":"5ac7f60bc9dc106904161b9a4c32fa34f7921576","bugs":{"url":"https://github.com/jhiver/objection/issues"},"_id":"honor@0.2.3","_shasum":"68c01f74c7a6336037f61be61638a332317de364","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"jhiver","email":"jhiver@gmail.com"},"dist":{"shasum":"68c01f74c7a6336037f61be61638a332317de364","tarball":"https://registry.npmjs.org/honor/-/honor-0.2.3.tgz","integrity":"sha512-85DDrv32JtMcyaGljdeGoRsa+SJqLX2X1GrI503m/Nk/my/r6W34qg92H2aSUZeDArJJLr7tK9lSujOOcxhVAg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC7Jsgcye1lYdFYvkOPIPn5nXdKVlzTYg7AdbKRfMRpWAiEAx9Kqkn4lyp0X0A93Ehv+faH++qJ3Va49/0D0X03LfFY="}]}},"0.2.4":{"name":"honor","description":"Simple and powerful NodeJS data validation library","version":"0.2.4","keywords":["data","validation","validator"],"maintainers":[{"name":"jhiver","email":"jhiver@gmail.com"}],"repository":{"type":"git","url":"https://github.com/jhiver/objection.git"},"licenses":[{"name":"MIT","url":"http://opensource.org/licenses/MIT"}],"devDependencies":{"nodeunit":"0.8.1"},"dependencies":{"deepcopy":"^0.3.3","moment":"^2.8.4","underscore":"^1.7.0","valid-url":"^1.0.9"},"scripts":{"test":"nodeunit tests/*.js"},"main":"lib/honor.js","homepage":"https://github.com/jhiver/objection","gitHead":"e6dc34048ba34d9a8a9f004c19ea271741edad5c","bugs":{"url":"https://github.com/jhiver/objection/issues"},"_id":"honor@0.2.4","_shasum":"c0e202c0c21698dbe052fbf1c854172900e26b77","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"jhiver","email":"jhiver@gmail.com"},"dist":{"shasum":"c0e202c0c21698dbe052fbf1c854172900e26b77","tarball":"https://registry.npmjs.org/honor/-/honor-0.2.4.tgz","integrity":"sha512-ZXoIISEaNems5civacT0fvY1f2jbRAsxm1zHPVkMed6INwrCOmm+tAopsK5oP5m6igLUfyyIXp6teXfZLI7dUA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDH0vS8c2z2Prnqkn/WNP4FG9He42qhyQIXUdWQ5X1RNgIhAJIV5FfrzkrbvX7RP+QRNHAS59TJCY+feEHzNcULvzJW"}]}},"0.2.5":{"name":"honor","description":"Simple and powerful NodeJS data validation library","version":"0.2.5","keywords":["data","validation","validator"],"maintainers":[{"name":"jhiver","email":"jhiver@gmail.com"}],"repository":{"type":"git","url":"https://github.com/jhiver/objection.git"},"licenses":[{"name":"MIT","url":"http://opensource.org/licenses/MIT"}],"devDependencies":{"nodeunit":"0.8.1"},"dependencies":{"deepcopy":"^0.3.3","moment":"^2.8.4","underscore":"^1.7.0","valid-url":"^1.0.9"},"scripts":{"test":"nodeunit tests/*.js"},"main":"lib/honor.js","homepage":"https://github.com/jhiver/objection","gitHead":"092081f8758cf78d8a071bc689adfa7e4193b792","bugs":{"url":"https://github.com/jhiver/objection/issues"},"_id":"honor@0.2.5","_shasum":"7f071acbec0f6d77d8b19d2dcd10a45ff99b3f94","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"jhiver","email":"jhiver@gmail.com"},"dist":{"shasum":"7f071acbec0f6d77d8b19d2dcd10a45ff99b3f94","tarball":"https://registry.npmjs.org/honor/-/honor-0.2.5.tgz","integrity":"sha512-mUKW0l8jPZJiYY/XK24s7G83xfmoiX6KLgSaQre3kVjt6LZ84siXFmVxhDYLO94TPtRD74Av9X8YOU07bceBjQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBW6f5bVDecIZatCC93AZiLpIJ8cpoV7C85+7Q1wJ0rFAiEA4nUqJtUVgTzBDn+Cd7rNLbuUmvCXQhS0KwDWlic7NYs="}]}},"0.2.6":{"name":"honor","description":"Simple and powerful NodeJS data validation library","version":"0.2.6","keywords":["data","validation","validator"],"maintainers":[{"name":"jhiver","email":"jhiver@gmail.com"}],"repository":{"type":"git","url":"https://github.com/jhiver/objection.git"},"licenses":[{"name":"MIT","url":"http://opensource.org/licenses/MIT"}],"devDependencies":{"nodeunit":"0.8.1"},"dependencies":{"deepcopy":"^0.3.3","moment":"^2.8.4","underscore":"^1.7.0","valid-url":"^1.0.9"},"scripts":{"test":"nodeunit tests/*.js"},"main":"lib/honor.js","homepage":"https://github.com/jhiver/objection","gitHead":"092081f8758cf78d8a071bc689adfa7e4193b792","bugs":{"url":"https://github.com/jhiver/objection/issues"},"_id":"honor@0.2.6","_shasum":"80154677b5dbae6a6935006e7561206b9df85fd8","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"jhiver","email":"jhiver@gmail.com"},"dist":{"shasum":"80154677b5dbae6a6935006e7561206b9df85fd8","tarball":"https://registry.npmjs.org/honor/-/honor-0.2.6.tgz","integrity":"sha512-C3cjm7CFsP/pmYFtPks1eknTxuEXC+vor0mTEtE068XY7s6xiX6V2PXvhW8qs6LJGGPLJAzilamHHIXpPouOQA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCKCevk1hnnOAlb0CJ3zjj47Ivo8Dl2LV8p4FS+5E73NQIhAKgt4xTHSpIiniDdoVhV0ouGMQbuR/5BDWSOAXphC+Ek"}]}},"0.2.7":{"name":"honor","description":"Simple and powerful NodeJS data validation library","version":"0.2.7","keywords":["data","validation","validator"],"maintainers":[{"name":"jhiver","email":"jhiver@gmail.com"}],"repository":{"type":"git","url":"https://github.com/jhiver/objection.git"},"licenses":[{"name":"MIT","url":"http://opensource.org/licenses/MIT"}],"devDependencies":{"nodeunit":"0.8.1"},"dependencies":{"deepcopy":"^0.3.3","moment":"^2.8.4","underscore":"^1.7.0","valid-url":"^1.0.9"},"scripts":{"test":"nodeunit tests/*.js"},"main":"lib/honor.js","homepage":"https://github.com/jhiver/objection","gitHead":"447197603181981b649d61a4999a7fe22a738721","bugs":{"url":"https://github.com/jhiver/objection/issues"},"_id":"honor@0.2.7","_shasum":"80ea7927fe76044b6fb59ecbc83ce7261905ecc2","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"jhiver","email":"jhiver@gmail.com"},"dist":{"shasum":"80ea7927fe76044b6fb59ecbc83ce7261905ecc2","tarball":"https://registry.npmjs.org/honor/-/honor-0.2.7.tgz","integrity":"sha512-QVyJlRB5w5LPfmPhk/g0rywS2DWQ8ZGEBVQg8ySiFAOe09J6OWsU/Vzc0ZjhR81e+md8XVuMA1vsFjK+cBdeIg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHk9VPbufa2zG8c6pzx0H2PbriRABATdwaGawXefLmc/AiAFj74pBkCT7570c5f3jtkG/e9Zm7oR9Cw/S7jufho7HQ=="}]}}},"readme":"#Objection your Honor!\n\nData validation library for node and the browser.\n\nWhen doing web development, you spend a lot of time with data validation. It's\na very boring and repetitive task. `honor` is a data validation library which\naims at making it much simpler.\n\nThis library is written with CoffeeScript so the examples below are written in\nCoffeeScript as well. You can use http://js2coffee.org/ to translate the\nexamples if you're allergic to it. My sincere apologies to the hardcore\nJavascript purists out there.\n\n\n#Schema\n\nFirst of all, let's create our base object. You do this by simply requiring\n`honor`.\n\n\n    Honor = require 'honor'\n    \nThis is our base, root object. We can start to define some field types in\nthere. For instance, let us defined a 'label' field,\n\n    Honor.define 'label',\n      trim: true     # trim leading and trailing edges\n      required: true # non null, not undefined, not empty string\n      maxlen: 50\n\nAn 'email' field,\n\n    Honor.define 'email',\n      trim: true\n      required: true\n      maxlen: 50\n      email: true\n\nAnd a 'password' field.\n\n    Honor.define 'password',\n      trim: true\n      required: true\n      maxlen: 50\n      minlen: 6\n      not_like: /\\s/\n      default: -> String(Math.random()) # yeap... cool huh?\n\n\n> **note about _not**...\n>\n> Any test can be prefixed with \"not_\", which tests for the\n> reverse. So while the \"null\" test, which returns true if a value is null,\n> might seem pretty useless, you can use the \"not_null\" check, for instance.\n  \nNow that we have a few field types sorted out, let us create our first schema.\nWe'll use the classical \"User\" example. You create new types by calling\nextend(). extend() works by doing a deep copy of the parent object, so be sure\nto define all the fields, checks, etc. you want shared with your children\nobjects **before** calling extend()\n\n    User = Honor.extend\n      label: Honor.field 'label'\n      email: Honor.field 'email'\n      password: Honor.field 'password', minlen: 8 # override...\n      \n# Let's validate something!\n\n    newUser =\n      label: \"JM Hiver\",\n      email: \" jhiver@gmail.com\", some: \"junk\"\n      \n    User.validate newUser, (err, usr) ->\n      if err\n        console.error JSON.stringify { error: err }, null, 2\n      else\n        console.log JSON.stringify { result: usr }, null, 2\n    \nLet's see what this outputs:\n\n    {\n      \"result\": {\n      \"label\": \"JM Hiver\",\n        \"email\": \"jhiver@gmail.com\",\n        \"password\": \"0.15217827167361975\"\n      }\n    }\n\nHey, not bad! We got our object back, the password field was auto-generated (okay, the password function isn't great, I'll let the reader come up with a better one as an exercise...), the email value was trimmed nicely (noticed the leading whitespace?) and the junk field was removed / cleaned up.\n\nPretty cool huh?\n\nNow let's see what happens if we pass an invalid object, say\n\n    newUser =\n      label: \" \",\n      email: \" jhiver.foo.bar\",\n      password: 'secrt',\n      some: \"junk\"\n\nOutput:\n\n    {\n      \"error\": {\n        \"label\": {\n          \"required\": true\n        },\n        \"email\": {\n          \"email\": true\n        },\n        \"password\": {\n          \"minlen\": true\n        }\n      }\n    }\n\n# Tests you get for free\n\n`honor` comes with a bunch of pre-written tests, so you don't have to do it\nagain. Here's the list, in their order or execution.\n\n! order of execution is important !\n\n* **trim**: not really a \"test\". if the value is a string, it will remove\nleading and trailing whitespace, e.g. `password: { trim: true }`\n\n* **default**: again, not really a test. If the value is undefined, replace it\nwith some other value. Oh and actually, that value can be a function. And\nyes, that function can even be asynchronous... see more about that below.\n\n* **coerce**: Forces the type to be a certain value. Current supported types:\n'string', 'number', 'boolean', 'moment'. `\"password\": { \"coerce\": \"string\" }`\n\n* **defined**: Will succeed only if the value is not undefined. `\"password\": {\n\"defined\": true }`\n\n* **null**: Will succeed only if the value is null. `\"password\": { \"null\": true\n}`\n\n* **required**: true - succeeds if the value is not undefined, not null, and\nnot an empty string.\n\n* **uuid**: true - succeeds if the value looks like an UUID\n\n* **moment**: true - succeeds if the value is a parseable moment value, see\nmomentjs library for this awesome date manipulation library.\n\n* **email**: true - succeeds if the value looks like an email\n\n* **integer**: true - succeeds if the value looks like an integer number\n\n* **boolean**: true - succeeds if the value looks like a \"boolean\". This is\ndone by casting the value to a string. If the value looks like on|yes|true|1,\nthen the value is replaced with true and the test succeeds. If the value\nlooks like off|no|false|0, it's replaced with false. For any other value, the\ntest fails because the value doesn't look like a yes/no value.\n\n* **hex**: true - succeeds if the value looks like a hexadecimal integer.\n\n* **float**: true - succeeds if the value looks like a float value.\n\n* **like**: regex - succeeds if the String(value) matches the supplied regex.\n\n* **ipv4**: true - succeeds if the value looks like an IPv4 address.\n\n* **host**: true - succeeds if the value looks like a server address,\noptionally with a port, i.e. my.server:8080\n\n* **phone**: true - succeeds if the value looks like an e.164 phone number.\ni.e. a succession of digits, which can be preceeded with a + sign.\n\n* **url**: true - succeeds if the value looks like an URL.\n\n* **sip**: true - succeeds if the value looks like a SIP address.\n\n* **maxlen**: (length) - succeeds if the value .length attribute is less or\nequals than (length)\n\n* **minlen**: (length) - succeeds if the value .length attribute is more or\nequals than (length)\n\n* **maxval**: (number) - succeeds if the value is less or equals than (number)\n\n* **minval**: (number) - succeeds if the value is more or equals than (number)\n\n* **equals**: (otherValue) - succeeds if the value is the same as (otherValue)\n\n* **in**: [ value1, value2... ] - succeeds if the value if the same as any of\nthe values supplied in the array.\n\n* **starts**: (subString) - succeeds if the value starts with (subString)\n\n* **schema**: (schema) - succeeds if the value is an object that matches a sub\nschema. Useful for constructing nested schema validation.\n\n* **array_of**: (schema) - succeeds if the value is an array, each object in\nthe array matching the specified sub schema. Useful for constructing nested\nschema validation.\n\n\n# Writing your own tests\n\n    Honor = require 'honor'\n    Honor.check 'mycheck', (c) ->\n      ... do stuff with 'c' ...\n      return true | false\n\nHere, the 'c' argument if your *context object*. It contains the following\nattributes:\n\n* **c.checkValue** - the value of the check. When you write: { \"minlen\": 25 },\n  then 25 is the check value.\n\n* **c.modelValue** - the actual attribute value of the model which is being\n  checked against. This is the value that we actually want to validate! Also\n  take note that if you used a function in the schema, then c.modelValue is the\n  result of that function.\n\n* **c.model** - a reference to the model we are validating. This is not a copy,\n  so yes, your checks can alter the model!\n\n* **c.modelAttribute** - the name of the attribute of the model which is being\n  checked against.\n\n* **c.honor** - a reference the the honor object that's running the check. In\n  the example above, that would be the 'User' object.\n\n# Example:\n\nLet's write a 'young' test, which can be applied to any \"moment\" type fields,\nthat measures wether the date is \"young\" by a factor of certain years, i.e. we\nwant to be able to write something like:\n\n    Youngster = Honor.extend\n      name: Honor.field 'label'\n      dob:\n        required: true\n        moment: true\n        young: 25\n\nLet's get down to business and write our test, shall we?\n\n    # adds a 'young' check to  Youngster. I suppose we could also\n    # have added it to 'Honor', but then we would have had to\n    # to it **before** extending the object with extend().\n    Youngster.check 'young', (c) ->\n      \n      # first get the check value, i.e. if our check looked\n      # like young: 25 then the check value would be 25.\n      checkValue = Number(c.checkValue)\n      if String(checkValue) is 'NaN'\n        throw Error \"invalid schema: not a number\"\n      \n      # if the model value is not moment, the test should succeed.\n      # these things should be checked by other checks, such as\n      # required: true and moment: true for instance\n      return true unless c.modelValue\n      modelValue = moment(c.modelValue)\n      return true if not modelValue.isValid()\n      \n      # the person is deemed 'young'...\n      # if he was born AFTER than \"checkValue\"\n      # (in our example, 25...) years ago.\n      dateOfBirth = modelValue.valueOf()\n      yearsAgo = moment().subtract(checkValue, 'years').valueOf()\n      return dateOfBirth > yearsAgo\n\n# Test order is important!\n\nInternally, tests are stored in an array. This is important, because some\nchecks always need to be run before others. For example, required: true needs\nto be run very early, since if a required value isn't present, it's pretty\npointless to be running the other tests.\n\nBy default, when you call `Honor.check 'checkName', checkFunction`, the test\nwill be pushed at the end of the list, unless it replaces another test with the\nsame name.\n\nYou can choose to run the test after or before a certain test however. To do\nthis, use:\n\n    # let us move 'mycheck' just before the 'email' check\n    Honor.moveBefore 'email', 'mycheck'\n\nAnd of course its counter part function:\n\n    # will you guess what this does?\n    Honor.moveAfter 'email', 'mycheck'\n  \n  \n# Asynchronous operations\n\nSometimes you may want to perform a check against an asynchronous resource,\nsuch as disk, networks, or database. `honor` has you covered!\n\nThe only trick is that `honor` needs a way to distinguish between asynchronous\nand synchronous functions. If your function returns `Infinity`, then\n`honor` will consider it to be asynchronous.\n\nLet's write a test to make sure a URL actually exists.\n\n    request = require 'request'\n    Honor = Honor.Create()\n    Honor.check 'urlexists', (c, callback) ->\n\n      # if the check value is not true, then we are done\n      # and should return true\n      unless c.checkValue\n        callback null, c.model\n        return Infinity\n      \n      # if the model value is undefined or null,\n      # the test should succeed.\n      # we can use another test such as \"required\" to make\n      # sure the value is mandatory.\n      if c.modelValue is undefined or c.modelValue is null\n        callback null, c.model\n        return Infinity\n      \n      modelValue = String c.modelValue\n      \n      # return check result!\n      request modelValue, (error, response, body) ->\n        if error\n          callback error, null\n          return\n        \n        if not String(response.statusCode).match /^2/\n          callback \"didn't get 2XX\", null\n          return\n          \n        # yes, you must return the model\n        # which you may have changed\n        return callback null, c.model\n     \n     return Infinity\n\nNote that not only your checks can work asynchronously, but also your check\nvalues! For instance:\n\n    getNetworkTime = (callback) ->\n      # code here...\n  \n    Timestamp = Honor.extend\n      time:\n        required: true\n      default: (c, callback) ->\n        getNetworkTime callback\n        return Infinity\n  \n\n# Global consistency checks\n\nLet's say we define a user object.\n\n    User = Honor.extend\n      label: Honor.field 'label'\n      email: Honor.field 'email'\n      password: Honor.field 'password'\n\nAnd then we define another schema for the sign up page.\n\n    Signup = User.extend\n      password_verify: required: true\n    \nAnd we want to make sure that password equals password_verify. Let's add a constraint!\n\n    Signup.constraint 'same_passwords', (c) ->\n      return c.model.password is c.model.password_verify\n\nIt is important to note that constraint checks are performed ONLY if all the\n\"regular\" checks went through without errors.\n \nFurther more, constraints can also be used async-style, which is useful for\ndatabase checks.\n\n    dbWrapper = <some_object...>\n    Signup.constraint 'email_unique', (c, callback) ->\n      filter = email: c.model.email\n      dbWrapper.findOne filter, (err, res) ->\n        return callback err, null if err\n        callback null, c.model\n      return Infinity\n  \nNote that constraints do not run in any particular order. If the error\nconstraint above fails, error object will contain:\n\n  \"constraint\": { \"email_unique\": true }\n\n\n# Wrapping it up...\n\nThat's pretty much it! To summarize:\n\n* Instantiate the root `honor` object by importing the module:\n  `Honor = require 'honor'`\n\n* Define some fields if you plan to share field definitions across your schemas\n  `Honor.field 'foo', coerce: 'string', trim: true`\n\n* Add your custom tests, which can be synchronous or asynchronous, using Honor.check().\n\n* Define your own schemas using Honor.extend(). Remember this makes a deep copy\n  of the object, so you can fiddle with the new object internals as much as you\n  like without breaking anything on your other objects.\n  `MyModel = Honor.extend <newSchema>`\n\n* Add some constraints to your newly created schema.\n\n* Have fun!\n\n\n  \n\n","maintainers":[{"name":"jhiver","email":"jhiver@gmail.com"}],"time":{"modified":"2022-06-18T21:26:44.782Z","created":"2014-11-26T19:54:45.708Z","0.1.0":"2014-11-26T19:54:45.708Z","0.1.1":"2014-11-26T20:03:07.987Z","0.1.2":"2014-11-26T20:04:19.751Z","0.1.3":"2014-11-26T20:05:28.384Z","0.1.4":"2014-11-26T20:06:52.158Z","0.1.5":"2014-11-26T20:08:36.375Z","0.1.6":"2014-11-26T20:09:46.509Z","0.1.7":"2014-11-26T20:11:16.577Z","0.1.8":"2014-11-26T20:15:51.848Z","0.1.9":"2014-11-27T06:11:12.656Z","0.2.0":"2014-12-03T08:47:41.115Z","0.2.1":"2014-12-03T08:52:00.577Z","0.2.3":"2015-04-20T10:09:53.557Z","0.2.4":"2015-04-28T08:04:42.012Z","0.2.5":"2015-04-28T08:17:36.441Z","0.2.6":"2015-04-28T08:25:35.913Z","0.2.7":"2015-04-28T08:26:41.923Z"},"homepage":"https://github.com/jhiver/objection","keywords":["data","validation","validator"],"repository":{"type":"git","url":"https://github.com/jhiver/objection.git"},"bugs":{"url":"https://github.com/jhiver/objection/issues"},"readmeFilename":"README.md"}