hash_wia 0.7.12 → 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: 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