hash_wia 0.7.12 → 0.8.2
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 +4 -4
- data/.version +1 -1
- data/lib/hash_wia/class.rb +21 -13
- data/lib/hash_wia/module.rb +43 -28
- data/lib/hash_wia/pollute.rb +4 -5
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bf1316795c66debebb5c2e3f2252a6f5e10a3ff43159d1f0cec03c5d978a50aa
|
4
|
+
data.tar.gz: 6ba10b0913e09ae31a97e49792c43aaf715281a8da72bc5e25a6a8068fed9dd8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 97de64c3717994fc15700c60b54b45a8a288ac0c82e09e1c9f1d6464ab190c2e78c238f32d3d33326627fe7e4faf3c78897102a8d4e5aa1f72e33289b7896f97
|
7
|
+
data.tar.gz: 0e8949fc406b0d2959bf97321825071cc619a9031fdc5df489eabd2d847094cb82dbd32f9bc3089f5a3eff2e4eb7cc66390025d49593d8bdbc62b1e565a9ef05
|
data/.version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.8.2
|
data/lib/hash_wia/class.rb
CHANGED
@@ -4,13 +4,15 @@ end
|
|
4
4
|
|
5
5
|
class HashWia
|
6
6
|
class NamedOptions
|
7
|
-
def initialize hash
|
8
|
-
@hash
|
7
|
+
def initialize hash, &block
|
8
|
+
@hash = hash
|
9
|
+
@block = block
|
9
10
|
end
|
10
11
|
|
11
|
-
def set constant, code,
|
12
|
+
def set constant, code, value
|
13
|
+
@block.call constant.to_s, code, value
|
12
14
|
@hash[constant.to_s] = code
|
13
|
-
@hash[code] =
|
15
|
+
@hash[code] = value
|
14
16
|
end
|
15
17
|
|
16
18
|
def method_missing code, key_val
|
@@ -28,7 +30,7 @@ end
|
|
28
30
|
# # or
|
29
31
|
# opt.set 'DONE', :d, 'Done'
|
30
32
|
# end
|
31
|
-
def HashWia klass = nil,
|
33
|
+
def HashWia klass = nil, opts = nil
|
32
34
|
if block_given?
|
33
35
|
hash = HashWia.new
|
34
36
|
|
@@ -37,19 +39,25 @@ def HashWia klass = nil, name = nil, opts = nil
|
|
37
39
|
klass = nil
|
38
40
|
end
|
39
41
|
|
40
|
-
|
41
|
-
if !opts || opts[:constant] != false
|
42
|
-
constant = name.to_s.upcase
|
43
|
-
klass.const_set constant, hash
|
44
|
-
end
|
42
|
+
opts ||= {}
|
45
43
|
|
46
|
-
|
44
|
+
named_opts = HashWia::NamedOptions.new hash do |constant, code, value|
|
45
|
+
if opts[:constants]
|
46
|
+
if klass
|
47
|
+
klass.const_set "#{opts[:constants]}_#{constant}".upcase, code
|
48
|
+
else
|
49
|
+
raise "Host class not given (call as HashWia self, constants: ...)"
|
50
|
+
end
|
51
|
+
end
|
47
52
|
end
|
48
53
|
|
49
|
-
named_opts = HashWia::NamedOptions.new hash
|
50
54
|
yield named_opts
|
51
55
|
|
52
|
-
if
|
56
|
+
if opts[:method]
|
57
|
+
klass.define_singleton_method(opts[:method]) { hash }
|
58
|
+
end
|
59
|
+
|
60
|
+
unless opts[:freeze] == false
|
53
61
|
hash.freeze
|
54
62
|
end
|
55
63
|
|
data/lib/hash_wia/module.rb
CHANGED
@@ -13,33 +13,37 @@ module HashWiaModule
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def [] key
|
16
|
-
data = super
|
17
|
-
|
18
|
-
data = super
|
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
|
-
|
30
|
-
|
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
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
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
|
68
|
-
|
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
|
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
|
-
|
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
|
-
|
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
|
data/lib/hash_wia/pollute.rb
CHANGED
@@ -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
|
-
|
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.
|
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:
|
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.
|
44
|
+
rubygems_version: 3.5.3
|
45
45
|
signing_key:
|
46
46
|
specification_version: 4
|
47
47
|
summary: Hash with indifferent access + goodies
|