object_flatten 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rspec +1 -0
- data/README.md +6 -1
- data/lib/object_flatten/object_flatten.rb +18 -7
- data/lib/object_flatten/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 330f41e3b644c51dd35dffc7c853afa1f8e05b31
|
4
|
+
data.tar.gz: 655aca8b572fdb8393815194b91cc9bdd828d9ac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e4f5c52e394516067cc3b0a9099aea9ad4ca675dea0cdebd3ce99e51ae4385390e4db86960fa586f87580c6c31685f08cc541b3615dfc08a1dd2faeeafe3527
|
7
|
+
data.tar.gz: 6f7fd409b8b9125eca130910a8b2c816449901947eb3cab8c2d4c1cae51780d12a6e9fa3483db11157ecd755be16828a3696e38d73e8e42c9d01b94cba5b1eeb
|
data/.rspec
CHANGED
data/README.md
CHANGED
@@ -42,12 +42,17 @@ ObjectFlatten.flatten({"foo"=>{"bar1"=>"zoo", "bar2"=>"baz"}})
|
|
42
42
|
# {"foo.bar2"=>"baz"}
|
43
43
|
# ]
|
44
44
|
|
45
|
-
ObjectFlatten.flatten({"foo"=>{"bar1"=>"zoo", "bar2"=>"baz"}}, '/')
|
45
|
+
ObjectFlatten.flatten({"foo"=>{"bar1"=>"zoo", "bar2"=>"baz"}}, separator: '/')
|
46
46
|
#=> [
|
47
47
|
# {"foo/bar1"=>"zoo"},
|
48
48
|
# {"foo/bar2"=>"baz"}
|
49
49
|
# ]
|
50
50
|
|
51
|
+
ObjectFlatten.flatten({"foo bar"=>{"zoo"=>"baz"}}, tr: [' ', '_'])
|
52
|
+
#=> [
|
53
|
+
# {"foo_bar.zoo"=>"baz"}
|
54
|
+
# ]
|
55
|
+
|
51
56
|
ObjectFlatten.flatten({
|
52
57
|
"foo1"=>{"bar1"=>"zoo", "bar2"=>"baz"},
|
53
58
|
"foo2"=>{"bar"=>["zoo", "baz"], "zoo"=>"baz"}
|
@@ -1,24 +1,28 @@
|
|
1
1
|
class ObjectFlatten
|
2
2
|
class << self
|
3
|
-
def flatten(obj,
|
3
|
+
def flatten(obj, options = {})
|
4
4
|
unless obj.is_a?(Hash)
|
5
5
|
raise TypeError, "TypeError: wrong argument type #{obj.class} (expected Hash)"
|
6
6
|
end
|
7
7
|
|
8
|
-
|
8
|
+
options = {
|
9
|
+
:separator => '.',
|
10
|
+
}.merge(options)
|
11
|
+
|
12
|
+
flatten0(nil, obj, options)
|
9
13
|
end
|
10
14
|
|
11
15
|
private
|
12
16
|
|
13
|
-
def flatten0(root, obj,
|
17
|
+
def flatten0(root, obj, options, acc = [])
|
14
18
|
case obj
|
15
19
|
when Array
|
16
20
|
obj.each do |value|
|
17
|
-
flatten0(root, value,
|
21
|
+
flatten0(root, value, options, acc)
|
18
22
|
end
|
19
23
|
when Hash
|
20
24
|
obj.each do |key, value|
|
21
|
-
flatten0(join(root, key,
|
25
|
+
flatten0(join(root, key, options), value, options, acc)
|
22
26
|
end
|
23
27
|
else
|
24
28
|
acc << {root => obj}
|
@@ -27,9 +31,16 @@ class ObjectFlatten
|
|
27
31
|
acc
|
28
32
|
end
|
29
33
|
|
30
|
-
def join(root, key,
|
34
|
+
def join(root, key, options)
|
31
35
|
key = key.to_s
|
32
|
-
|
36
|
+
sep = options[:separator]
|
37
|
+
tr = options[:tr]
|
38
|
+
|
39
|
+
if tr
|
40
|
+
key = key.tr(*tr)
|
41
|
+
end
|
42
|
+
|
43
|
+
root ? (root + sep + key) : key
|
33
44
|
end
|
34
45
|
end
|
35
46
|
end
|