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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 21df027abd49f7b71a57b22e4b33eae7a9446132b7afb300368de7d0d4b7f365
4
- data.tar.gz: 529fe29a3eec11e03a54e99770ea8706bae0a9c24e6797e9cca2ad1e47223668
3
+ metadata.gz: bf1316795c66debebb5c2e3f2252a6f5e10a3ff43159d1f0cec03c5d978a50aa
4
+ data.tar.gz: 6ba10b0913e09ae31a97e49792c43aaf715281a8da72bc5e25a6a8068fed9dd8
5
5
  SHA512:
6
- metadata.gz: 853abb6448ccc27730dba7880edd91f70e54d1a865537397ede4706c1b10fbfa207236090353da19ef7bfadb3fb20673b4c198e56746cd40201ba77056cbb163
7
- data.tar.gz: fa564c45e2b991fce99ef8c6f0dbdc786c92a2d1de55533b9bd4d0e9da2448eb12a3b8aa9ae3c28441a423da084a108bf6f1e7e584354b070e5ee368644e0d10
6
+ metadata.gz: 97de64c3717994fc15700c60b54b45a8a288ac0c82e09e1c9f1d6464ab190c2e78c238f32d3d33326627fe7e4faf3c78897102a8d4e5aa1f72e33289b7896f97
7
+ data.tar.gz: 0e8949fc406b0d2959bf97321825071cc619a9031fdc5df489eabd2d847094cb82dbd32f9bc3089f5a3eff2e4eb7cc66390025d49593d8bdbc62b1e565a9ef05
data/.version CHANGED
@@ -1 +1 @@
1
- 0.7.12
1
+ 0.8.2
@@ -4,13 +4,15 @@ end
4
4
 
5
5
  class HashWia
6
6
  class NamedOptions
7
- def initialize hash
8
- @hash = hash
7
+ def initialize hash, &block
8
+ @hash = hash
9
+ @block = block
9
10
  end
10
11
 
11
- def set constant, code, name
12
+ def set constant, code, value
13
+ @block.call constant.to_s, code, value
12
14
  @hash[constant.to_s] = code
13
- @hash[code] = name.to_s
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, name = nil, opts = 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
- if name
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
- klass.define_singleton_method(name) { klass.const_get(constant) }
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 !opts || opts[:freeze] != false
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
 
@@ -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.7.12
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-06 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