hash_wia 0.7.1 → 0.7.6

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