hash_wia 0.8.5 → 0.8.7

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: 9940f7179d7a0bd3fca3d3e316245a3a95aab1f5d0dbf7fdb8151f0e53f6f09f
4
- data.tar.gz: 47d54c37abc1ce7a0cfcdaf03568c9259b3494cae37a08622a492cbefa24949a
3
+ metadata.gz: c4ab36dc996cbf145ed0952ed9e868362d7f33f81b56db07948b262bd68a5862
4
+ data.tar.gz: b97294a77516cafdfaac335444146c1711486093e21445854b3dd04604d5efef
5
5
  SHA512:
6
- metadata.gz: 107b7669b62a6b949b7bcaea724657031b449d5aa1f6ba7feb9535978d5cab8b7680c1455947446780d10d47b55310ae06cdc3cf632a65f2c2023acd3e4cf68e
7
- data.tar.gz: 81932ca9a8ec3a9fa6ebd4ba41a58fa0fb407a9e36520a97959776c2bc9a0f1e8b26a5c70a3299f972dc8e3aae7d2a4400e83b75604caa069ec9f5ae1c155a40
6
+ metadata.gz: cb414e0b445a2aba50089eeede332280025684c7bd13eae14a400c0bf774435616afd5195a92ad65a7f767213cc000339d6a414c76c070cd8588a7b5b3a455c3
7
+ data.tar.gz: 43a5d3d2a62d63d56a1f9484bd24d05929edd36fc883e85b9b86d65f03a268f572a39ba679756d8546d36aeb5186f94a3b1b5a5e4414acd6712feb3b6cb9bcad
data/.version CHANGED
@@ -1 +1 @@
1
- 0.8.5
1
+ 0.8.7
@@ -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,4 +1,10 @@
1
1
  module HashWiaModule
2
+ def initialize hash=nil
3
+ if hash
4
+ hash.each { |k,v| self[k] = v }
5
+ end
6
+ end
7
+
2
8
  # overload common key names with
3
9
  %i(size length zip minmax store cycle chunk sum uniq chain).each do |el|
4
10
  define_method el do
@@ -7,17 +13,10 @@ module HashWiaModule
7
13
  end
8
14
 
9
15
  def [] key
10
- data = super(key)
11
- skey = key.to_s
12
- data = super(skey) if data.nil?
13
- data = super(skey.to_sym) if data.nil? && key.class != Symbol
14
-
15
- if data.is_a?(Hash)
16
- data.extend HashWiaModule
17
- data
18
- else
19
- data
20
- 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
21
20
  end
22
21
 
23
22
  def []= key, value
@@ -51,9 +50,7 @@ module HashWiaModule
51
50
  end
52
51
 
53
52
  def merge hash
54
- dup
55
- .extend(HashWiaModule)
56
- .tap do |h|
53
+ dup.tap do |h|
57
54
  hash.each { |k, v| h[k.to_s] = v }
58
55
  end
59
56
  end
@@ -3,21 +3,12 @@ class Hash
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
- self.extend HashWiaModule
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,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hash_wia
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.5
4
+ version: 0.8.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dino Reic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-02-17 00:00:00.000000000 Z
11
+ date: 2024-02-25 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