hash_wia 0.8.6 → 0.9.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: 38006945ea37efb106b9d3b79f504233798c944c0b84e42b995cefcce7226615
4
- data.tar.gz: 2e077dedc656da9dbb644f45336027184566f3bee36866ee185cf44462d0f6ba
3
+ metadata.gz: '0193d39da72201f6f4e995bae56c2e01f51db23a9a4cbd6113b4c014fd5cfef3'
4
+ data.tar.gz: 9e241c6b2ab16bfad6e6665ca34431e19fdc0595169677dd7dd3ad19695602aa
5
5
  SHA512:
6
- metadata.gz: 91e48b8aad3abee0e973fe78d56fd5a6a7d811fe83299b5d6c9fbce8abff00278b14e32f856119a7cf23ff180191855e212aaf8decb39eedbbfb008ef704337c
7
- data.tar.gz: 003357300a329843b5e96a3d71d6ba30db949ee8f387ceb17341827a2228c06d3deb56a9986dbdca88d990fad339816a53f4383ad2edc52618bca1ce634fd00c
6
+ metadata.gz: a2c166a225960e23fb8b3e39ba10512ff9ba7eadf72ed485ecfe2e325ee10c2365825a887dbdb7ce65818700d09cdc5094f59c94dfd36428c994094898c9769f
7
+ data.tar.gz: 3cb2eb4aa569a9eebbc1a0098230e7e3634a381a7fb09a2fae1748ab1d0c920e94b085d7c823702485e6d2a5c8fcfa3b72b1acb32621226a56e771631d31662f
data/.version CHANGED
@@ -1 +1 @@
1
- 0.8.6
1
+ 0.9.0
@@ -3,6 +3,8 @@ class HashWia < Hash
3
3
  end
4
4
 
5
5
  class HashWia
6
+ STRUCTS = {}
7
+
6
8
  class NamedOptions
7
9
  def initialize hash, &block
8
10
  @hash = hash
@@ -1,5 +1,5 @@
1
1
  module HashWiaModule
2
- def initialize hash=nil
2
+ def initialize hash = nil
3
3
  if hash
4
4
  hash.each { |k,v| self[k] = v }
5
5
  end
@@ -13,17 +13,10 @@ module HashWiaModule
13
13
  end
14
14
 
15
15
  def [] key
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
20
-
21
- if data.is_a?(Hash)
22
- data.extend HashWiaModule
23
- data
24
- else
25
- data
26
- end
16
+ key = key.to_s unless key.respond_to?(:to_sym)
17
+ data = super(key.to_s) || super(key.to_sym)
18
+ data.extend HashWiaModule if data.is_a?(Hash)
19
+ data
27
20
  end
28
21
 
29
22
  def []= key, value
@@ -89,6 +82,12 @@ module HashWiaModule
89
82
  root
90
83
  end
91
84
 
85
+ def values
86
+ super.map do |el|
87
+ el.class == Hash ? HashWia.new(el) : el
88
+ end
89
+ end
90
+
92
91
  def method_missing name, *args, &block
93
92
  strname = name.to_s
94
93
 
@@ -113,7 +112,13 @@ module HashWiaModule
113
112
  end
114
113
  end
115
114
  else
116
- value
115
+ case value
116
+ when Array
117
+ # if we return list oh hashes, convert it to hwia
118
+ value.map {|el| el.class == Hash ? HashWia.new(el) : el }
119
+ else
120
+ value
121
+ end
117
122
  end
118
123
  end
119
124
  end
@@ -5,19 +5,10 @@ class Hash
5
5
  if args.first.nil?
6
6
  HashWia.new self
7
7
  else
8
- list = args.map(&:to_s).flatten
9
- extra = keys.map(&:to_s) - list
10
-
11
- if extra.first
12
- raise ArgumentError.new('Unallowed key/s: %s' % extra.map{ |_| ':%s' % _ }.join(', '))
13
- end
14
-
15
- HashWia.new.tap do |o|
16
- list.each do |k|
17
- o[k] = self[k]
18
- o[k] = self[k.to_sym] if o[k].nil?
19
- end
20
- end
8
+ list = args.flatten
9
+ name = 'DynStruct_' + list.join('_')
10
+ HashWia::STRUCTS[name] ||= ::Struct.new(name, *list)
11
+ HashWia::STRUCTS[name].new **self
21
12
  end
22
13
  end
23
14
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hash_wia
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.6
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dino Reic
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-02-17 00:00:00.000000000 Z
10
+ date: 2025-02-21 00:00:00.000000000 Z
12
11
  dependencies: []
13
12
  description: Gem provides simple access to common Ruby hash types bundled in one simple
14
13
  class
@@ -26,7 +25,6 @@ homepage: https://github.com/dux/hash_wia
26
25
  licenses:
27
26
  - MIT
28
27
  metadata: {}
29
- post_install_message:
30
28
  rdoc_options: []
31
29
  require_paths:
32
30
  - lib
@@ -41,8 +39,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
41
39
  - !ruby/object:Gem::Version
42
40
  version: '0'
43
41
  requirements: []
44
- rubygems_version: 3.4.10
45
- signing_key:
42
+ rubygems_version: 3.6.4
46
43
  specification_version: 4
47
44
  summary: Hash with indifferent access + goodies
48
45
  test_files: []