rodash 1.0.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rodash.rb +56 -14
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 065794978a50b2ed6a1d951f656756c9f0b63727
|
4
|
+
data.tar.gz: dc481f1efadbab5e1a780caf25418e5b83603495
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ac4f63f272d6d5ce5040e1090207cc71dfe6941979e7f28a98659a2638a039f354e1f264177e797e715b302adda2e46289ec6a8b8f3df38eb0d2fa4e2e9b3d52
|
7
|
+
data.tar.gz: c506010baea93b8a3499eaa687ff293fb36fcc7138a3a9c58bfebe4c57a30ca9c14482f02315610bc8a073418eded03d7126aad7f947d24f017c612a56298148
|
data/lib/rodash.rb
CHANGED
@@ -19,12 +19,12 @@ class Rodash
|
|
19
19
|
#
|
20
20
|
# object = { 'a' => [{ 'b' => { 'c' => 3 } }] }
|
21
21
|
#
|
22
|
-
# Rodash.set(object, 'a[0].b.c', 4)
|
23
|
-
# object['a'][0]['b']['c']
|
22
|
+
# Rodash.set(object, 'a[0].b.c', 4)
|
23
|
+
# object['a'][0]['b']['c']
|
24
24
|
# // => 4
|
25
25
|
#
|
26
|
-
# Rodash.set(object, 'x[0].y.z', 5)
|
27
|
-
# object['x'][0]['y']['z'])
|
26
|
+
# Rodash.set(object, 'x[0].y.z', 5)
|
27
|
+
# object['x'][0]['y']['z'])
|
28
28
|
# // => 5
|
29
29
|
#
|
30
30
|
def self.set(object, path, value)
|
@@ -40,27 +40,58 @@ class Rodash
|
|
40
40
|
# @returns {*} Returns the resolved value.
|
41
41
|
# @example
|
42
42
|
#
|
43
|
-
# object = { 'a' => [{ 'b' => { 'c' => 3 } }] }
|
43
|
+
# object = { 'a' => [{ 'b' => { 'c' => 3 } }] }
|
44
44
|
#
|
45
|
-
# Rodash.get(object, 'a[0].b.c')
|
45
|
+
# Rodash.get(object, 'a[0].b.c')
|
46
46
|
# // => 3
|
47
47
|
#
|
48
|
-
# Rodash.get(object, ['a', '0', 'b', 'c'])
|
48
|
+
# Rodash.get(object, ['a', '0', 'b', 'c'])
|
49
49
|
# // => 3
|
50
50
|
#
|
51
|
-
# Rodash.get(object, 'a.b.c', 'default')
|
51
|
+
# Rodash.get(object, 'a.b.c', 'default')
|
52
52
|
# // => 'default'
|
53
53
|
def self.get(object, path, defaultValue = nil)
|
54
54
|
result = object.nil? ? nil : baseGet(object, path)
|
55
55
|
result.nil? ? defaultValue : result
|
56
56
|
end
|
57
57
|
|
58
|
+
# Removes the property at `path` of `object`.
|
59
|
+
#
|
60
|
+
# **Note:** This method mutates `object`.
|
61
|
+
#
|
62
|
+
# @param {Hash} object The object to modify.
|
63
|
+
# @param {Array|string} path The path of the property to unset.
|
64
|
+
# @returns {boolean} Returns `true` if the property is deleted, else `false`.
|
65
|
+
# @example
|
66
|
+
#
|
67
|
+
# object = { 'a' => [{ 'b' => { 'c' => 7 } }] }
|
68
|
+
# Rodash.unset(object, 'a[0].b.c')
|
69
|
+
# // => true
|
70
|
+
#
|
71
|
+
# object
|
72
|
+
# // => { 'a' => [{ 'b' => {} }] }
|
73
|
+
#
|
74
|
+
# Rodash.unset(object, 'a[0].b.c')
|
75
|
+
# // => true
|
76
|
+
#
|
77
|
+
# object
|
78
|
+
# // => { 'a' => [{ 'b' => {} }] }
|
79
|
+
#
|
80
|
+
def self.unset(object, path)
|
81
|
+
object.nil? ? true : baseUnset(object, path)
|
82
|
+
end
|
83
|
+
|
58
84
|
protected
|
59
85
|
|
86
|
+
@@reIsDeepProp = /\.|\[(?:[^\[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/
|
87
|
+
@@reIsPlainProp = /^\w*$/
|
88
|
+
@@rePropName = /[^.\[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]/
|
89
|
+
@@reEscapeChar = /\\(\\)?/
|
90
|
+
|
60
91
|
def self.baseSet(object, path, value, customizer = false)
|
61
92
|
throw "object must be a hash" if not object.is_a? Hash
|
62
93
|
|
63
|
-
path = isKey(path, object) ? [path + ''] : baseToPath(path)
|
94
|
+
path = isKey(path, object) ? [path + ''] : baseToPath(path)
|
64
95
|
|
65
96
|
nested = object
|
66
97
|
newNested = nil
|
@@ -86,7 +117,7 @@ class Rodash
|
|
86
117
|
end
|
87
118
|
|
88
119
|
def self.baseGet(object, path)
|
89
|
-
path = isKey(path, object) ? [path + ''] : baseToPath(path)
|
120
|
+
path = isKey(path, object) ? [path + ''] : baseToPath(path)
|
90
121
|
|
91
122
|
index = 0
|
92
123
|
length = path.count
|
@@ -110,10 +141,21 @@ class Rodash
|
|
110
141
|
(index > 0 && index == length) ? object : nil
|
111
142
|
end
|
112
143
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
144
|
+
def self.baseUnset(object, path)
|
145
|
+
path = isKey(path, object) ? [path + ''] : baseToPath(path)
|
146
|
+
object = parent(object, path)
|
147
|
+
key = path.last
|
148
|
+
if object.is_a?(Array) && isIndex(key)
|
149
|
+
object[key.to_i] = nil
|
150
|
+
elsif not object.nil?
|
151
|
+
object.delete(key)
|
152
|
+
end
|
153
|
+
return true
|
154
|
+
end
|
155
|
+
|
156
|
+
def self.parent(object, path)
|
157
|
+
path.count == 1 ? object : get(object, path[0 ... -1])
|
158
|
+
end
|
117
159
|
|
118
160
|
def self.isKey(value, object)
|
119
161
|
return true if value.is_a? Numeric
|
metadata
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rodash
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Antoine Pultier
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02-
|
11
|
+
date: 2016-02-24 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
|
-
description: _.set and _.
|
13
|
+
description: _.set, _.get, and _.unset for Ruby
|
14
14
|
email: antoine.pultier@sintef.no
|
15
15
|
executables: []
|
16
16
|
extensions: []
|