| /*! |
| * prr |
| * (c) 2013 Rod Vagg <rod@vagg.org> |
| * https://github.com/rvagg/prr |
| * License: MIT |
| */ |
| |
| (function (name, context, definition) { |
| if (typeof module != 'undefined' && module.exports) |
| module.exports = definition() |
| else |
| context[name] = definition() |
| })('prr', this, function() { |
| |
| var setProperty = typeof Object.defineProperty == 'function' |
| ? function (obj, key, options) { |
| Object.defineProperty(obj, key, options) |
| return obj |
| } |
| : function (obj, key, options) { // < es5 |
| obj[key] = options.value |
| return obj |
| } |
| |
| , makeOptions = function (value, options) { |
| var oo = typeof options == 'object' |
| , os = !oo && typeof options == 'string' |
| , op = function (p) { |
| return oo |
| ? !!options[p] |
| : os |
| ? options.indexOf(p[0]) > -1 |
| : false |
| } |
| |
| return { |
| enumerable : op('enumerable') |
| , configurable : op('configurable') |
| , writable : op('writable') |
| , value : value |
| } |
| } |
| |
| , prr = function (obj, key, value, options) { |
| var k |
| |
| options = makeOptions(value, options) |
| |
| if (typeof key == 'object') { |
| for (k in key) { |
| if (Object.hasOwnProperty.call(key, k)) { |
| options.value = key[k] |
| setProperty(obj, k, options) |
| } |
| } |
| return obj |
| } |
| |
| return setProperty(obj, key, options) |
| } |
| |
| return prr |
| }) |