clean-hash 0.5.11 → 0.6.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: 7b4ab8e9884ce9634b844cd3c4376ff353bbe1017279b49e0ce0cbd6d3c40301
4
- data.tar.gz: dfe2c01fa31add7234eaa6fb05c62cdbb4ea1a6eccd79a02df40076e4db2a9e0
3
+ metadata.gz: ed7704c53ff11469472d74438b7c3b99a663e2c6226a930da13850425db16453
4
+ data.tar.gz: 4ecfc3fac7c9e3a957b11e3d89e2cf0f7d1bf468d5e8c5ca3ac6f2bc800f147d
5
5
  SHA512:
6
- metadata.gz: d6af7a328d16dffe592cb6cbd4d341b5623b293efac278efb71f1dab6ca6bd0a9763a7f1f6ca5a18351c6d622595e639f89426861f3e8702b3f42e93fdffb576
7
- data.tar.gz: f763eb0ef805f540e0133f381474d999cdbd63b62bb349b1208b7aad756e1243fd2859fe6b71c877b12ab9612320e47c5500a1fbe932195fc4a97aa99b72cf40
6
+ metadata.gz: 1d96dd9791146a09714230fed546573c53e0551ac65203a21e4dbd0da0f7b82841d6ccb5f3d6b09c3a71c6d052142bffda5da563b4a53e8aec668a741162bb66
7
+ data.tar.gz: 64d668f59ae76a6464f4e8109654350ea289df671d83ccb98ddf4f0a0b6983a35b4609203a8e7aa165d5db163f2882471943048bbe41228d19c6f78fc8a0633d
data/.version CHANGED
@@ -1 +1 @@
1
- 0.5.11
1
+ 0.6.0
@@ -1,10 +1,7 @@
1
1
  require 'hashie'
2
2
 
3
- require_relative 'clean-hash/base'
4
3
  require_relative 'clean-hash/types/indifferent_type'
5
- require_relative 'clean-hash/types/mutex_type'
6
4
  require_relative 'clean-hash/types/safe_type'
7
- require_relative 'clean-hash/types/strict_type'
8
5
  require_relative 'clean-hash/types/struct_type'
9
6
  require_relative 'clean-hash/deep_merge'
10
7
  require_relative 'clean-hash/hash_pollute'
@@ -19,10 +19,9 @@ class CleanHash
19
19
  end
20
20
 
21
21
  mode.each { |el| self[el] = nil if self[el].nil? }
22
- ::CleanHash.create_struct self
22
+ CleanHash.create_struct self
23
23
  else
24
- mode ||= :indifferent
25
- ::CleanHash.create mode, self
24
+ CleanHash.new self
26
25
  end
27
26
  end
28
27
  end
@@ -1,84 +1,94 @@
1
+ # raise error if accessing hash with method and key not found
2
+ # stict_hash = { foo: :bar }.to_ch :strict
3
+ # stict_hash[:not_found] # nil
4
+ # stict_hash.foo # :bar
5
+ # stict_hash.not_found # ArgumentError
6
+
1
7
  class CleanHash
2
- class Indifferent
3
- def initialize data
4
- @data = data
5
- end
8
+ MUTEX ||= Mutex.new
6
9
 
7
- # for debug
8
- def to_json
9
- JSON.pretty_generate @data
10
- end
10
+ def initialize data
11
+ @data = data
12
+ end
11
13
 
12
- # for puts
13
- def to_ary
14
- [@data]
15
- end
14
+ # for debug
15
+ def to_json
16
+ JSON.pretty_generate @data
17
+ end
16
18
 
17
- # overload key ruby method because it is common hash key name
18
- # still accessible via to_h.key
19
- def key
20
- self[:key]
21
- end
19
+ # for puts
20
+ def to_ary
21
+ [@data]
22
+ end
22
23
 
23
- def key? name
24
- @data.key?(name) || @data.key?(name.to_s) || (name.respond_to?(:to_sym) ? @data.key?(name.to_sym) : nil)
25
- end
24
+ # overload key ruby method because it is common hash key name
25
+ # still accessible via to_h.key
26
+ def key
27
+ self[:key]
28
+ end
26
29
 
27
- def delete key
28
- out = []
29
- out.push @data.delete(key)
30
- out.push @data.delete(key.to_s)
31
- out.push @data.delete(key.to_sym) if key.respond_to?(:to_sym)
32
- out.each { |el| return el unless el.nil? }
33
- nil
34
- end
30
+ def key? name
31
+ @data.key?(name) || @data.key?(name.to_s) || (name.respond_to?(:to_sym) ? @data.key?(name.to_sym) : nil)
32
+ end
35
33
 
36
- def to_h
37
- @data
38
- end
34
+ def delete key
35
+ out = []
36
+ out.push @data.delete(key)
37
+ out.push @data.delete(key.to_s)
38
+ out.push @data.delete(key.to_sym) if key.respond_to?(:to_sym)
39
+ out.each { |el| return el unless el.nil? }
40
+ nil
41
+ end
39
42
 
40
- def to_json *args
41
- @data.to_json *args
42
- end
43
+ def to_h
44
+ @data
45
+ end
46
+
47
+ def to_json *args
48
+ @data.to_json *args
49
+ end
43
50
 
44
- def [] key
45
- data = @data[key]
46
- data = @data[key.to_s] if data.nil? && !key.is_a?(String)
47
- data = @data[key.to_sym] if data.nil? && key.respond_to?(:to_sym)
51
+ def [] key
52
+ data = @data[key]
53
+ data = @data[key.to_s] if data.nil? && !key.is_a?(String)
54
+ data = @data[key.to_sym] if data.nil? && key.respond_to?(:to_sym)
48
55
 
49
- if data.is_a?(Hash)
50
- self.class.new data
51
- else
52
- data
53
- end
56
+ if data.is_a?(Hash)
57
+ self.class.new data
58
+ else
59
+ data
54
60
  end
61
+ end
55
62
 
56
- def []= key, value
57
- delete key
63
+ def []= key, value
64
+ delete key
65
+ MUTEX.synchronize do
58
66
  @data[key] = value
59
67
  end
68
+ end
69
+
70
+ def method_missing name, *args, &block
71
+ return @data.send(name, *args, &block) if @data.respond_to?(name)
60
72
 
61
- def method_missing name, *args, &block
62
- return @data.send(name, *args, &block) if @data.respond_to?(name)
63
-
64
- m = name.to_s
65
-
66
- if m.end_with?('=')
67
- m = m.sub('=', '')
68
- self[m] = args.first
69
- elsif m.end_with?('?')
70
- !self[m.sub('?', '')].nil?
71
- elsif block
72
- self[m] = block
73
- else
74
- _method_missing_key m
75
- end
73
+ m = name.to_s
74
+
75
+ if m.end_with?('=')
76
+ m = m.sub('=', '')
77
+ self[m] = args.first
78
+ elsif m.end_with?('?')
79
+ !self[m.sub('?', '')].nil?
80
+ elsif block
81
+ self[m] = block
82
+ else
83
+ _method_missing_key m
76
84
  end
85
+ end
77
86
 
78
- private
87
+ private
79
88
 
80
- def _method_missing_key key
81
- self[key]
89
+ def _method_missing_key key
90
+ self[key].tap do |value|
91
+ raise ArgumentError.new('Key not found: %s' % key) if value.nil?
82
92
  end
83
93
  end
84
94
  end
@@ -1,5 +1,5 @@
1
1
  class CleanHash
2
- class Safe < Indifferent
2
+ class Safe < CleanHash
3
3
  def []= key, value
4
4
  value = value.to_s if value.is_a?(Symbol)
5
5
 
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.5.11
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dino Reic
@@ -32,14 +32,11 @@ extra_rdoc_files: []
32
32
  files:
33
33
  - "./.version"
34
34
  - "./lib/clean-hash.rb"
35
- - "./lib/clean-hash/base.rb"
36
35
  - "./lib/clean-hash/deep_merge.rb"
37
36
  - "./lib/clean-hash/hash_pollute.rb"
38
37
  - "./lib/clean-hash/pollute.rb"
39
38
  - "./lib/clean-hash/types/indifferent_type.rb"
40
- - "./lib/clean-hash/types/mutex_type.rb"
41
39
  - "./lib/clean-hash/types/safe_type.rb"
42
- - "./lib/clean-hash/types/strict_type.rb"
43
40
  - "./lib/clean-hash/types/struct_type.rb"
44
41
  homepage: https://github.com/dux/clean-hash
45
42
  licenses:
@@ -1,18 +0,0 @@
1
- class CleanHash
2
- def self.create type, data={}
3
- case type
4
- when :indifferent
5
- ::CleanHash::Indifferent.new data
6
- when :safe
7
- ::CleanHash::Safe.new data
8
- when :strict
9
- ::CleanHash::Strict.new data
10
- when :stuct
11
- ::CleanHash.create_strut data
12
- when :mutex
13
- ::CleanHash::MutexHash.new data
14
- else
15
- raise ArgumentError, 'Unsupported type: %s' % type
16
- end
17
- end
18
- end
@@ -1,17 +0,0 @@
1
- # Thread safe hash
2
- class CleanHash
3
- class MutexHash < Indifferent
4
- MUTEX = Mutex.new
5
-
6
- def []= name, value
7
- MUTEX.synchronize do
8
- @data[name] =
9
- if value.is_a?(Hash)
10
- self.class.new value
11
- else
12
- value
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,18 +0,0 @@
1
- # Type good for configurations
2
-
3
- class CleanHash
4
- class Strict < Indifferent
5
- private
6
-
7
- # raise error if accessing hash with method and key not found
8
- # stict_hash = { foo: :bar }.to_ch :strict
9
- # stict_hash[:not_found] # nil
10
- # stict_hash.foo # :bar
11
- # stict_hash.not_found # ArgumentError
12
- def _method_missing_key key
13
- self[key].tap do |value|
14
- raise ArgumentError.new('Key not found: %s' % key) if value.nil?
15
- end
16
- end
17
- end
18
- end