hash_wia 0.8.0 → 0.8.2

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: 47e5d1296ecbfb525c7f42577fc5b4206384c6a39a28d7ad85b277f208e6f779
4
- data.tar.gz: 224acde315b8df0b2d04a606ee866261f5af52f066c74b39119ee2af8e901ea9
3
+ metadata.gz: bf1316795c66debebb5c2e3f2252a6f5e10a3ff43159d1f0cec03c5d978a50aa
4
+ data.tar.gz: 6ba10b0913e09ae31a97e49792c43aaf715281a8da72bc5e25a6a8068fed9dd8
5
5
  SHA512:
6
- metadata.gz: cbafc17a9cfdcc4425388ee8c7cb8314c2e1fa1d379ab06a15b210e007dc8a8cb9185479a5bc9ddb3b158090e31d2eed3b1ccf7fed32fca14bf54be6f75ca2dc
7
- data.tar.gz: 3ce638343e78ea595620113d1c632cfaf5b6bcb962a9c95d4c42a3728c10457a286d04243be5aca208356a8bc1fc964ca2528ef78964624511d75fc978d850eb
6
+ metadata.gz: 97de64c3717994fc15700c60b54b45a8a288ac0c82e09e1c9f1d6464ab190c2e78c238f32d3d33326627fe7e4faf3c78897102a8d4e5aa1f72e33289b7896f97
7
+ data.tar.gz: 0e8949fc406b0d2959bf97321825071cc619a9031fdc5df489eabd2d847094cb82dbd32f9bc3089f5a3eff2e4eb7cc66390025d49593d8bdbc62b1e565a9ef05
data/.version CHANGED
@@ -1 +1 @@
1
- 0.8.0
1
+ 0.8.2
@@ -13,33 +13,37 @@ module HashWiaModule
13
13
  end
14
14
 
15
15
  def [] key
16
- data = super key
17
- data = super key.to_s if data.nil?
18
- data = super key.to_sym if key.respond_to?(:to_sym) && data.nil?
16
+ data = super(key)
17
+ skey = key.to_s
18
+ data = super(skey) if data.nil?
19
+ data = super(skey.to_sym) if data.nil? && key.class != Symbol
19
20
 
20
- # if we are returning hash as a value, just include with wia methods hash
21
21
  if data.is_a?(Hash)
22
22
  data.extend HashWiaModule
23
+ data
24
+ else
25
+ data
23
26
  end
24
-
25
- data
26
27
  end
27
28
 
28
29
  def []= key, value
29
- if @frozen_keys && !keys.include?(key)
30
- raise FrozenError, "HashWia keys are frozen and can't be modified (key: #{key})"
31
- end
32
-
33
- delete key
30
+ key = key.to_s unless key.class == Symbol
31
+
34
32
  super key, value
35
33
  end
36
34
 
35
+ def __val key
36
+ data = self[key.to_s]
37
+ data = self[to_s] if data.nil?
38
+ data
39
+ end
40
+
37
41
  def delete key
38
- self[key].tap do
39
- super key
40
- super key.to_s
41
- super key.to_sym if key.respond_to?(:to_sym)
42
- end
42
+ data = super(key)
43
+ skey = key.to_s
44
+ data = super(skey) if data.nil?
45
+ data = super(skey.to_sym) if data.nil? && key.class != Symbol
46
+ data
43
47
  end
44
48
 
45
49
  # we never return array from hash, ruby internals
@@ -49,7 +53,7 @@ module HashWiaModule
49
53
 
50
54
  # key is common id direct access
51
55
  # allow direct get or fuction the same if name given
52
- def key name=nil
56
+ def key name = nil
53
57
  name.nil? ? self[:key] : self[name.to_s]
54
58
  end
55
59
 
@@ -60,13 +64,12 @@ module HashWiaModule
60
64
 
61
65
  def merge hash
62
66
  dup.tap do |h|
63
- hash.each { |k, v| h[k] = v }
67
+ hash.each { |k, v| h[k.to_s] = v }
64
68
  end
65
69
  end
66
70
 
67
- def freeze_keys!
68
- @frozen_keys = true
69
- self
71
+ def merge! hash
72
+ hash.each { |k, v| self[k.to_s] = v }
70
73
  end
71
74
 
72
75
  def each &block
@@ -81,6 +84,17 @@ module HashWiaModule
81
84
  self
82
85
  end
83
86
 
87
+ def dig *args
88
+ root = self
89
+ while args[0]
90
+ key = args.shift
91
+ root = root[key] || root[key.to_s]
92
+ return if root.nil?
93
+ root = HashWia.new root if root.class == Hash
94
+ end
95
+ root
96
+ end
97
+
84
98
  def method_missing name, *args, &block
85
99
  strname = name.to_s
86
100
 
@@ -89,19 +103,20 @@ module HashWiaModule
89
103
  !!self[strname]
90
104
  elsif strname.sub!(/=$/, '')
91
105
  # h.foo = :bar
92
- self[strname.to_sym] = args.first
106
+ self[strname] = args.first
93
107
  else
94
108
  value = self[strname]
109
+ value = self[strname.to_sym] if value.nil?
95
110
 
96
111
  if value.nil?
97
112
  if block
98
- # h.foo { rand }
99
- self[name] = block
100
- elsif !keys.include?(name.to_sym)
101
- # h.foo
102
- raise NoMethodError.new('%s not defined' % strname)
113
+ self[strname.to_s] = block
103
114
  else
104
- nil
115
+ if key?(strname) || key(strname.to_sym)
116
+ nil
117
+ else
118
+ raise NoMethodError.new('%s not defined in HashWia' % strname)
119
+ end
105
120
  end
106
121
  else
107
122
  value
@@ -2,11 +2,11 @@ class Hash
2
2
  # { foo: :bar }.to_hwia #
3
3
  # { foo: :bar }.to_hwia :foo, :bar # create struct and fill
4
4
  def to_hwia *args
5
- unless args.first
5
+ if args.first.nil?
6
6
  HashWia.new self
7
7
  else
8
- list = args.flatten
9
- extra = keys - list
8
+ list = args.map(&:to_s).flatten
9
+ extra = keys.map(&:to_s) - list
10
10
 
11
11
  if extra.first
12
12
  raise ArgumentError.new('Unallowed key/s: %s' % extra.map{ |_| ':%s' % _ }.join(', '))
@@ -15,9 +15,8 @@ class Hash
15
15
  HashWia.new.tap do |o|
16
16
  list.each do |k|
17
17
  o[k] = self[k]
18
+ o[k] = self[k.to_sym] if o[k].nil?
18
19
  end
19
-
20
- o.freeze_keys!
21
20
  end
22
21
  end
23
22
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hash_wia
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dino Reic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-07 00:00:00.000000000 Z
11
+ date: 2024-01-03 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Gem provides simple access to common Ruby hash types bundled in one simple
14
14
  class
@@ -41,7 +41,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
41
41
  - !ruby/object:Gem::Version
42
42
  version: '0'
43
43
  requirements: []
44
- rubygems_version: 3.2.22
44
+ rubygems_version: 3.5.3
45
45
  signing_key:
46
46
  specification_version: 4
47
47
  summary: Hash with indifferent access + goodies