hash_wia 0.7.4 → 0.7.9

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