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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 47a55f5f6060f690c49d7b3bcfc6ac8daf5d174c1ad8daa22fc9e4b0861c846e
4
- data.tar.gz: a5e98c27b8688ffefbb27f552e771fb03d4cbdca2bd01cd6864e0c67c529fd10
3
+ metadata.gz: 45971a3560ed13e95d8f9b94230f7e1595b4e8c1244264cfe5f714d4a165c239
4
+ data.tar.gz: 0fe785d5fc385985182f762779c3edfb3236250a0a5df2dbc058f8efaf803ecc
5
5
  SHA512:
6
- metadata.gz: f2892ecab841197330f48c5f5cb1b448dfcff43cf13d6a52b70c7c4c1e14cf6cd117fd886a6836aaa522342d1a9db53e84c05acd690b7856904b40d0459b42ef
7
- data.tar.gz: ba9e7ff0f5438ebea25329cb57baef3f3e8df17897057685ae52113adb55be4f15d9e83f08bbe458aaf69d704d0bff5bdeb396f6d326d62dc61c88b82a7a58a5
6
+ metadata.gz: 43ee2cd7cec97d3bc6219c6402a8e7351d358b4bb7c8f2d2b8c0664d27a65b45f37c7396e8adf23755095431212bccfaacd1347279e60b9817566e785ff047cc
7
+ data.tar.gz: 57dfc84f72665d1ee5a5738afaeea9a5c3bc2befe5292303542d7454f6a85f5d73e2c8afb0a24ca45362bb39bebe0ee6553e2abd65ace7b9a64bbaf3be56a873
data/.version CHANGED
@@ -1 +1 @@
1
- 0.3.1
1
+ 0.4.0
@@ -22,16 +22,42 @@ class CleanHash
22
22
  end
23
23
 
24
24
  def [] key
25
- __value_for key.to_s
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
- @data[key.to_sym] = value
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
- __value_for name
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
- !__value_for(m.sub('?', '')).nil?
90
+ !self[m.sub('?', '')].nil?
76
91
  rescue NoMethodError
77
92
  false
78
93
  end
79
94
  else
80
- __value_for m
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 name=nil
7
- @data ||= {}
6
+ def initialize data={}
7
+ @data ||= data
8
8
  end
9
9
 
10
10
  def [] name
11
- @data[name.to_sym]
11
+ @data[name]
12
12
  end
13
13
 
14
14
  def []= name, value
15
15
  MUTEX.synchronize do
16
- @data[name.to_sym] = value
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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clean-hash
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dino Reic