hash_wia 0.7.4 → 0.7.9

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: 63da890a65aa2e2452e416f4c204ece7b81713c52641732c1583411936c00e24
4
- data.tar.gz: 5b753036a7eaa42dcb4a3869aa812798cccca9248c477f122d94515e3990e8f7
3
+ metadata.gz: fa2a2ed3249abb84825df2511879f1c22623dd8f9ec05fb4fa6f37936a9cf081
4
+ data.tar.gz: 204b0273b5e6ffd7f79f2d7191949da08afe1308fcad30636199b26616efc265
5
5
  SHA512:
6
- metadata.gz: 1fb9171287b410471f758b4cc1a34588baf206c07816d8381cd703aa8c17de5c137cb95c80e929b95a1b2a7df6d1c0eb42d6b99e520e5ec5616015dd0aa7e1c6
7
- data.tar.gz: 5a0ef5d395884b24aefb0baca8daa5f9cdd0fab8fad4028488c183a0ed2a1a844f49fe33e9d8d11c22e93ddeb47a7245850d3bc9fff4d51254e5986a7c6454cf
6
+ metadata.gz: 498de3720f21412cde5b33db25f84c5c82b24fa6888030c16b86d694a31d9496f2f8437dea87026c23befa741527a2baf769708f01ffb08c0ee3444b2755f5fb
7
+ data.tar.gz: 2f6df1a68b560de8d3e011da5661a860de31e19486a79d90bb8876d04f27e32058e144c34dcd662f763d2c001d269ee00232978bf388fa5c1af53275a3ea563c
data/.version CHANGED
@@ -1 +1,2 @@
1
- 0.7.4
1
+ 0.7.9
2
+
@@ -1,3 +1,50 @@
1
1
  class HashWia < Hash
2
2
  include HashWiaModule
3
3
  end
4
+
5
+ class HashWia
6
+ class NamedOptions
7
+ def initialize hash
8
+ @hash = hash
9
+ end
10
+
11
+ def set constant, code, name
12
+ @hash[constant.to_s] = code
13
+ @hash[code] = name.to_s
14
+ end
15
+
16
+ def method_missing code, key_val
17
+ self.set code, key_val.keys.first, key_val.values.first
18
+ end
19
+ end
20
+ end
21
+
22
+ # to create Task::STATUS and Task.status
23
+ # HashWia self, :status do |opt|
24
+ #
25
+ # or just to get a hash
26
+ # HashWia do |opt|
27
+ # opt.DONE d: 'Done'
28
+ # # or
29
+ # opt.set 'DONE', :d, 'Done'
30
+ # end
31
+ def HashWia klass = nil, name = nil, opts = nil
32
+ if block_given?
33
+ hash = HashWia.new
34
+
35
+ if name
36
+ if !opts || opts[:constant] != false
37
+ constant = name.to_s.upcase
38
+ klass.const_set constant, hash
39
+ end
40
+
41
+ klass.define_singleton_method(name) { klass.const_get(constant) }
42
+ end
43
+
44
+ named_opts = HashWia::NamedOptions.new hash
45
+ yield named_opts
46
+ hash
47
+ else
48
+ raise ArgumentError, 'Block not provided'
49
+ end
50
+ end
@@ -18,12 +18,18 @@ module HashWiaModule
18
18
  data = super key.to_sym if key.respond_to?(:to_sym) && data.nil?
19
19
 
20
20
  # if we are returning hash as a value, just include with wia methods hash
21
- data.extend HashWiaModule if data.is_a?(Hash)
21
+ if data.is_a?(Hash)
22
+ data.extend HashWiaModule
23
+ end
22
24
 
23
25
  data
24
26
  end
25
27
 
26
28
  def []= key, value
29
+ if @frozen_keys
30
+ raise NoMethodError, "Hash keys are frozen and can't be modified"
31
+ end
32
+
27
33
  delete key
28
34
  super key, value
29
35
  end
@@ -58,6 +64,23 @@ module HashWiaModule
58
64
  end
59
65
  end
60
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
+
61
84
  def method_missing name, *args, &block
62
85
  strname = name.to_s
63
86
 
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.7.4
4
+ version: 0.7.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dino Reic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-19 00:00:00.000000000 Z
11
+ date: 2022-02-05 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
@@ -41,7 +41,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
41
41
  - !ruby/object:Gem::Version
42
42
  version: '0'
43
43
  requirements: []
44
- rubygems_version: 3.0.6
44
+ rubygems_version: 3.2.22
45
45
  signing_key:
46
46
  specification_version: 4
47
47
  summary: Hash with indifferent access + goodies