hash_wia 0.7.1 → 0.7.6

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: b1ce61a950d68383781591a65180f19193081578fe694130400b7e879704b4c7
4
- data.tar.gz: cffcf6e508ef7ce0a16886405fa7ee404b8c130b1ba0a7b71e882d53e4ad4bdc
3
+ metadata.gz: 3533e491e9ea4ae635d75064e8a75d89532188562ba0788426f3f02d6636cdc2
4
+ data.tar.gz: 1e24d94651e45b89a41ade9f893ebd3f2f8c760ff84ee5eea55c2f0733a62138
5
5
  SHA512:
6
- metadata.gz: e4e6fa1e11187a4cf4cdf026d3e966eed2a8ad424a459ba7dd7e05319d6a2069908455016b536e96eb34a692c97e97105de0072b257f504c7cd603dc0cf3b633
7
- data.tar.gz: ed767c0e1d7376e4c1c99f5a282946c53e60cd77154e008b8858706e9b449552104357c55cf5c82e7b45eceb92d7570d2b9b2877849d5b34c7c799ef31942017
6
+ metadata.gz: dc78b6cfa5c6620a41a8c455aa4c7df057d3c2ae3b70b8279381825a1b9d82da38d2cfa49020b00b13ba43d9b9336737902f66ca33e7b8c58f09936578bee366
7
+ data.tar.gz: f6030a43d761182ea740d35484c5da7574a70a6f8e372638bc0c8cd1ff0e89fef9ea7f83f41d39859efa820d9f14af640621dc2fa433863e617a2923cc34d5f0
data/.version CHANGED
@@ -1 +1 @@
1
- 0.7.1
1
+ 0.7.6
@@ -1,4 +1,3 @@
1
1
  class HashWia < Hash
2
- STRUCTS = {}
3
2
  include HashWiaModule
4
3
  end
@@ -5,18 +5,31 @@ module HashWiaModule
5
5
  end
6
6
  end
7
7
 
8
+ # overload common key names with
9
+ %i(size length zip minmax store cycle chunk sum uniq chain).each do |el|
10
+ define_method el do
11
+ self[el]
12
+ end
13
+ end
14
+
8
15
  def [] key
9
16
  data = super key
10
17
  data = super key.to_s if data.nil?
11
18
  data = super key.to_sym if key.respond_to?(:to_sym) && data.nil?
12
19
 
13
20
  # if we are returning hash as a value, just include with wia methods hash
14
- data.extend HashWiaModule if data.is_a?(Hash)
21
+ if data.is_a?(Hash)
22
+ data.extend HashWiaModule
23
+ end
15
24
 
16
25
  data
17
26
  end
18
27
 
19
28
  def []= key, value
29
+ if @frozen_keys
30
+ raise NoMethodError, "Hash keys are frozen and can't be modified"
31
+ end
32
+
20
33
  delete key
21
34
  super key, value
22
35
  end
@@ -37,7 +50,7 @@ module HashWiaModule
37
50
  # key is common id direct access
38
51
  # allow direct get or fuction the same if name given
39
52
  def key name=nil
40
- name ? self[name] : self[:key]
53
+ name.nil? ? self[:key] : self[name.to_s]
41
54
  end
42
55
 
43
56
  # true clone of the hash with 0 references to the old one
@@ -45,6 +58,29 @@ module HashWiaModule
45
58
  Marshal.load(Marshal.dump(self))
46
59
  end
47
60
 
61
+ def merge hash
62
+ dup.tap do |h|
63
+ hash.each { |k, v| h[k] = v }
64
+ end
65
+ end
66
+
67
+ def freeze_keys!
68
+ @frozen_keys = true
69
+ self
70
+ end
71
+
72
+ def each &block
73
+ to_a.each do |key, data|
74
+ if data.is_a?(Hash)
75
+ data.extend HashWiaModule
76
+ end
77
+
78
+ block.call key, data
79
+ end
80
+
81
+ self
82
+ end
83
+
48
84
  def method_missing name, *args, &block
49
85
  strname = name.to_s
50
86
 
@@ -61,9 +97,11 @@ module HashWiaModule
61
97
  if block
62
98
  # h.foo { rand }
63
99
  self[name] = block
64
- else
100
+ elsif !keys.include?(name.to_sym)
65
101
  # h.foo
66
- raise ArgumentError.new('%s not defined' % strname)
102
+ raise NoMethodError.new('%s not defined' % strname)
103
+ else
104
+ nil
67
105
  end
68
106
  else
69
107
  value
@@ -5,13 +5,16 @@ class Hash
5
5
  unless args.first
6
6
  HashWia.new self
7
7
  else
8
- list = args.flatten
9
- name = 'DynStruct_' + list.join('_')
10
- HashWia::STRUCTS[name] ||= ::Struct.new(name, *list)
8
+ list = args.flatten
9
+ extra = keys - list
11
10
 
12
- HashWia::STRUCTS[name].new.tap do |o|
13
- each do |k, v|
14
- o.send('%s=' % k, v) unless v.nil?
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]
15
18
  end
16
19
  end
17
20
  end
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hash_wia
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.7.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dino Reic
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-04 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: hashie
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
11
+ date: 2022-01-31 00:00:00.000000000 Z
12
+ dependencies: []
27
13
  description: Gem provides simple access to common Ruby hash types bundled in one simple
28
14
  class
29
15
  email: reic.dino@gmail.com
@@ -40,7 +26,7 @@ homepage: https://github.com/dux/hash_wia
40
26
  licenses:
41
27
  - MIT
42
28
  metadata: {}
43
- post_install_message:
29
+ post_install_message:
44
30
  rdoc_options: []
45
31
  require_paths:
46
32
  - lib
@@ -55,8 +41,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
55
41
  - !ruby/object:Gem::Version
56
42
  version: '0'
57
43
  requirements: []
58
- rubygems_version: 3.0.6
59
- signing_key:
44
+ rubygems_version: 3.2.22
45
+ signing_key:
60
46
  specification_version: 4
61
47
  summary: Hash with indifferent access + goodies
62
48
  test_files: []