• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*!
2  * prr
3  * (c) 2013 Rod Vagg <rod@vagg.org>
4  * https://github.com/rvagg/prr
5  * License: MIT
6  */
7
8(function (name, context, definition) {
9  if (typeof module != 'undefined' && module.exports)
10    module.exports = definition()
11  else
12    context[name] = definition()
13})('prr', this, function() {
14
15  var setProperty = typeof Object.defineProperty == 'function'
16      ? function (obj, key, options) {
17          Object.defineProperty(obj, key, options)
18          return obj
19        }
20      : function (obj, key, options) { // < es5
21          obj[key] = options.value
22          return obj
23        }
24
25    , makeOptions = function (value, options) {
26        var oo = typeof options == 'object'
27          , os = !oo && typeof options == 'string'
28          , op = function (p) {
29              return oo
30                ? !!options[p]
31                : os
32                  ? options.indexOf(p[0]) > -1
33                  : false
34            }
35
36        return {
37            enumerable   : op('enumerable')
38          , configurable : op('configurable')
39          , writable     : op('writable')
40          , value        : value
41        }
42      }
43
44    , prr = function (obj, key, value, options) {
45        var k
46
47        options = makeOptions(value, options)
48
49        if (typeof key == 'object') {
50          for (k in key) {
51            if (Object.hasOwnProperty.call(key, k)) {
52              options.value = key[k]
53              setProperty(obj, k, options)
54            }
55          }
56          return obj
57        }
58
59        return setProperty(obj, key, options)
60      }
61
62  return prr
63})