hash_wia 0.8.5 → 0.8.7

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: 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