hash_wia 0.7.3 → 0.7.8

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: bb0fdfd83e1409f99637fafa8d673cc64fd61865dfa798306f0422f748cd661b
4
- data.tar.gz: 1c9947999bc89ffd071ce50d8bc3822d7540d438c6570bf33b45c86b58f10cc9
3
+ metadata.gz: 21e40421e8ced866ff9c01722a96aa65ce053e1b390a20d72cb0787675b27a7f
4
+ data.tar.gz: df0fe8a0757afe5f4b1da1532f7be50a6dc74e2b0849e0daf8827364b544461e
5
5
  SHA512:
6
- metadata.gz: d28eada7847195d2ce9cdf0d40030af6b3396d2b71ae99e2f7d0587923768a2a72f3e0b3a4c1f35177e37b5ecff45c43a056f981d919b42568505932c27442a4
7
- data.tar.gz: 061c43be03c32af497fc10ee587ef70840fde3e7c367c443211259d54fd791b37ca65a9ca065491b8508e7c3bad8649ce9e112c855e1e46804fb0e4755ffaff6
6
+ metadata.gz: cec9c611371fb8714af48b9167a26685a142bc6051a82b85d021d49b9fa45a21727094be6db1b2c9f39ebe408e3e1957ccb3cabfc1083d1ee47891791426820b
7
+ data.tar.gz: e0fdc27f40a2bb965194f50ca43d08b784cc0d5e1649a62879cd3deec5af4b4e61c597ba6a24703f3f136cafd091047e73da07b3499693bef2bd912b761ba496
data/.version CHANGED
@@ -1 +1 @@
1
- 0.7.3
1
+ 0.7.8
@@ -1,3 +1,54 @@
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
+ if code.class == Symbol
13
+ code = code.to_s
14
+ end
15
+
16
+ @hash[constant.to_s] = code
17
+ @hash[code] = name.to_s
18
+ end
19
+
20
+ def method_missing code, key_val
21
+ self.set code, key_val.keys.first, key_val.values.first
22
+ end
23
+ end
24
+ end
25
+
26
+ # to create Task::STATUS and Task.status
27
+ # HashWia self, :status do |opt|
28
+ #
29
+ # or just to get a hash
30
+ # HashWia do |opt|
31
+ # opt.DONE d: 'Done'
32
+ # # or
33
+ # opt.set 'DONE', :d, 'Done'
34
+ # end
35
+ def HashWia klass = nil, name = nil, opts = nil
36
+ if block_given?
37
+ hash = HashWia.new
38
+
39
+ if name
40
+ if !opts || opts[:constant] != false
41
+ constant = name.to_s.upcase
42
+ klass.const_set constant, hash
43
+ end
44
+
45
+ klass.define_singleton_method(name) { klass.const_get(constant) }
46
+ end
47
+
48
+ named_opts = HashWia::NamedOptions.new hash
49
+ yield named_opts
50
+ hash
51
+ else
52
+ raise ArgumentError, 'Block not provided'
53
+ end
54
+ 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
@@ -51,6 +64,23 @@ module HashWiaModule
51
64
  end
52
65
  end
53
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
+
54
84
  def method_missing name, *args, &block
55
85
  strname = name.to_s
56
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.3
4
+ version: 0.7.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dino Reic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-09 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