recursive_case_indifferent_ostruct 0.1 → 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/README.md +15 -2
- data/lib/recursive_case_indifferent_ostruct.rb +14 -0
- 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: f29ef3fcb8655257fc1562d6bf09f61be465b3a9
|
4
|
+
data.tar.gz: 46487154c944ea8af316dfad6db57ec28f5fe82f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 86b4fc3a58b06dbc6b663b95180af5cba20c0db15f10d74659cc081ce3a2edcd7fff9267c8aa587287bfb53669ff883c9293e6d229b21b89b99424d3f876f416
|
7
|
+
data.tar.gz: 8fa6ec8cb3e36ff33cd60e8b78096f559a55738ead20cbeb74b4f26a5b454a564983e8e2bb9f3e9643ab05caf83d8446171c3235da6b7500073f2ed0b76c893d
|
data/README.md
CHANGED
@@ -36,7 +36,7 @@ user.last_name # "Johnson"
|
|
36
36
|
user.father.age # 72
|
37
37
|
user.siblings[0].age # 12
|
38
38
|
|
39
|
-
user.birth_place = "New York" #
|
39
|
+
user.birth_place = "New York" # sets Birth-Place
|
40
40
|
user.first_name = "Ken" # sets {"firstName" => "Ken", "first-name" => "Ken"}
|
41
41
|
user.mothers_maiden = "Woods" # Since case is mixed in that hash, use default :lower_camel
|
42
42
|
|
@@ -44,7 +44,7 @@ user.mothers_maiden = "Woods" # Since case is mixed in that hash, use default :l
|
|
44
44
|
user.to_h
|
45
45
|
# {
|
46
46
|
# "firstName" => "Ken",
|
47
|
-
# "first-name" => "
|
47
|
+
# "first-name" => "Ken",
|
48
48
|
# "LAST_NAME" => "Johnson",
|
49
49
|
# "Birth-Place" => "New York",
|
50
50
|
# "father" => {
|
@@ -58,6 +58,18 @@ user.to_h
|
|
58
58
|
```
|
59
59
|
|
60
60
|
|
61
|
+
```
|
62
|
+
# .merge() is case insensative
|
63
|
+
user = RecursiveCaseIndifferentOstruct.new(first_name: "Bob")
|
64
|
+
new_user = user.merge({"FirstName" => "Bobby"})
|
65
|
+
new_user.first_name # Bobby
|
66
|
+
user.first_name # Bob
|
67
|
+
|
68
|
+
user.merge!({"FirstName" => "Bobby"})
|
69
|
+
user.first_name # Bobby
|
70
|
+
|
71
|
+
```
|
72
|
+
|
61
73
|
### Case Matching
|
62
74
|
Since the key matching is fuzzy, should there be two attributes with
|
63
75
|
the same name but different case (`first-name` and `firstName`), the
|
@@ -89,6 +101,7 @@ The value can still be accessed via `json.pi_value`.
|
|
89
101
|
if the method is not defined and there is not attribute matching that
|
90
102
|
name. However, all the hash methods operate on the original hash, so
|
91
103
|
`#has_key?`, `#each`, `#fetch`, etc, will not be case-indifferent.
|
104
|
+
Feel free to implement them and submit a PR.
|
92
105
|
|
93
106
|
```ruby
|
94
107
|
json = RecursiveCaseIndifferentOstruct.new({
|
@@ -19,6 +19,20 @@ class RecursiveCaseIndifferentOstruct
|
|
19
19
|
def []=(key, value)
|
20
20
|
handle_assignment(key, value, true)
|
21
21
|
end
|
22
|
+
|
23
|
+
def merge(other_hash)
|
24
|
+
out = self.dup
|
25
|
+
other_hash.each do |k, v|
|
26
|
+
out.send("#{k}=", v)
|
27
|
+
end
|
28
|
+
out
|
29
|
+
end
|
30
|
+
|
31
|
+
def merge!(other_hash)
|
32
|
+
other_hash.each do |k, v|
|
33
|
+
send("#{k}=", v)
|
34
|
+
end
|
35
|
+
end
|
22
36
|
|
23
37
|
def method_missing(method_sym, *args, &block)
|
24
38
|
method_name = method_sym.to_s
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: recursive_case_indifferent_ostruct
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tyler Roberts
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: See github.
|
14
14
|
email: code@polar-concepts.com
|
@@ -38,7 +38,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
38
38
|
version: '0'
|
39
39
|
requirements: []
|
40
40
|
rubyforge_project:
|
41
|
-
rubygems_version: 2.
|
41
|
+
rubygems_version: 2.5.1
|
42
42
|
signing_key:
|
43
43
|
specification_version: 4
|
44
44
|
summary: Access JSON or Hashes attributes without regards to snake_case, camelCase,
|