clean-hash 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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