clean-hash 0.3.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.version +1 -1
- data/lib/clean-hash/base.rb +36 -38
- data/lib/clean-hash/mutex_hash.rb +9 -4
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 45971a3560ed13e95d8f9b94230f7e1595b4e8c1244264cfe5f714d4a165c239
|
4
|
+
data.tar.gz: 0fe785d5fc385985182f762779c3edfb3236250a0a5df2dbc058f8efaf803ecc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 43ee2cd7cec97d3bc6219c6402a8e7351d358b4bb7c8f2d2b8c0664d27a65b45f37c7396e8adf23755095431212bccfaacd1347279e60b9817566e785ff047cc
|
7
|
+
data.tar.gz: 57dfc84f72665d1ee5a5738afaeea9a5c3bc2befe5292303542d7454f6a85f5d73e2c8afb0a24ca45362bb39bebe0ee6553e2abd65ace7b9a64bbaf3be56a873
|
data/.version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/lib/clean-hash/base.rb
CHANGED
@@ -22,16 +22,42 @@ class CleanHash
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def [] key
|
25
|
-
|
25
|
+
data = @data[key.to_sym]
|
26
|
+
data = @data[key.to_s] if data.nil?
|
27
|
+
|
28
|
+
if data.nil?
|
29
|
+
if @is_strict && !keys.include?(key.to_sym)
|
30
|
+
raise NoMethodError, 'Clean hash: key "%s" not found' % key
|
31
|
+
else
|
32
|
+
nil
|
33
|
+
end
|
34
|
+
elsif data.is_a?(Hash)
|
35
|
+
CleanHash.new data, @mode
|
36
|
+
else
|
37
|
+
data
|
38
|
+
end
|
26
39
|
end
|
27
40
|
|
28
41
|
def []= key, value
|
42
|
+
key = key.to_sym unless key.class == Symbol
|
43
|
+
|
29
44
|
__error_set if @is_strict && !key?(key)
|
30
|
-
|
45
|
+
|
46
|
+
if @is_safe
|
47
|
+
value = value.to_s if value.is_a?(Symbol)
|
48
|
+
|
49
|
+
unless value.nil? || value.is_a?(Hash) || value.is_a?(Numeric) || value.is_a?(String)
|
50
|
+
raise ArgumentError.new('Unsupported safe type: %s' % value.class)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
@data.delete(key.to_s)
|
55
|
+
|
56
|
+
@data[key] = value
|
31
57
|
end
|
32
58
|
|
33
59
|
def key? name
|
34
|
-
|
60
|
+
self[name]
|
35
61
|
true
|
36
62
|
rescue NoMethodError
|
37
63
|
false
|
@@ -49,57 +75,29 @@ class CleanHash
|
|
49
75
|
@data
|
50
76
|
end
|
51
77
|
|
78
|
+
def to_json *args
|
79
|
+
@data.to_json *args
|
80
|
+
end
|
81
|
+
|
52
82
|
def method_missing name, *args
|
53
83
|
m = name.to_s
|
54
84
|
|
55
85
|
if m.end_with?('=')
|
56
86
|
m = m.sub('=', '')
|
57
|
-
|
58
|
-
__error_set if @is_strict && !key?(m)
|
59
|
-
|
60
|
-
value = args.first
|
61
|
-
|
62
|
-
if @is_safe
|
63
|
-
value = value.to_s if value.is_a?(Symbol)
|
64
|
-
|
65
|
-
unless value.nil? || value.is_a?(Hash) || value.is_a?(Numeric) || value.is_a?(String)
|
66
|
-
raise ArgumentError.new('Unsupported safe type: %s' % value.class)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
m = m.to_sym if @data[m].nil?
|
71
|
-
|
72
|
-
@data[m] = value
|
87
|
+
self[m] = args.first
|
73
88
|
elsif m.end_with?('?')
|
74
89
|
begin
|
75
|
-
!
|
90
|
+
!self[m.sub('?', '')].nil?
|
76
91
|
rescue NoMethodError
|
77
92
|
false
|
78
93
|
end
|
79
94
|
else
|
80
|
-
|
95
|
+
self[m]
|
81
96
|
end
|
82
97
|
end
|
83
98
|
|
84
99
|
private
|
85
100
|
|
86
|
-
def __value_for name
|
87
|
-
data = @data[name.to_s]
|
88
|
-
data = @data[name.to_sym] if data.nil?
|
89
|
-
|
90
|
-
if data.nil?
|
91
|
-
if @is_strict && !keys.include?(name.to_sym)
|
92
|
-
raise NoMethodError, 'Clean hash: key "%s" not found' % name
|
93
|
-
else
|
94
|
-
nil
|
95
|
-
end
|
96
|
-
elsif data.is_a?(Hash)
|
97
|
-
CleanHash.new data, @mode
|
98
|
-
else
|
99
|
-
data
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
101
|
def __error_set
|
104
102
|
raise NoMethodError, 'Clean hash: setting a key value is not allowedß'
|
105
103
|
end
|
@@ -3,17 +3,22 @@ class CleanHash
|
|
3
3
|
class MutexHash
|
4
4
|
MUTEX = Mutex.new
|
5
5
|
|
6
|
-
def initialize
|
7
|
-
@data ||=
|
6
|
+
def initialize data={}
|
7
|
+
@data ||= data
|
8
8
|
end
|
9
9
|
|
10
10
|
def [] name
|
11
|
-
@data[name
|
11
|
+
@data[name]
|
12
12
|
end
|
13
13
|
|
14
14
|
def []= name, value
|
15
15
|
MUTEX.synchronize do
|
16
|
-
@data[name
|
16
|
+
@data[name] =
|
17
|
+
if value.is_a?(Hash)
|
18
|
+
self.class.new value
|
19
|
+
else
|
20
|
+
value
|
21
|
+
end
|
17
22
|
end
|
18
23
|
end
|
19
24
|
end
|