clean-hash 0.5.11 → 0.6.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: 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