hash_wia 0.7.0

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: aeccc594bd04c928359e6e4edfedce07ec39795512f934ed2cb244d0df5d1e1e
4
+ data.tar.gz: dd3726a0d81b2f0bd61815cc587ced21dbe3fd5c575aa343fe80e79da282b9a7
5
+ SHA512:
6
+ metadata.gz: b8f552a63fad26766191bdf60baed5a9f75628b55f85af832ba795e9ff51f326c6e960bc4e6a9f654aa6152dcea912e43f2a421a7dd61aaabfb9a62f64df65fd
7
+ data.tar.gz: c7744391d5fb655c553959de259e93af354af855a9d62a3276a2dd323a00150c1a1c62908b840cb3d49d391490c5f5de0655ad087dfa51d5305156d338131dc1
@@ -0,0 +1 @@
1
+ 0.7.0
@@ -0,0 +1,3 @@
1
+ require_relative './hash_wia/module'
2
+ require_relative './hash_wia/class'
3
+ require_relative './hash_wia/pollute'
@@ -0,0 +1,4 @@
1
+ class HashWia < Hash
2
+ STRUCTS = {}
3
+ include HashWiaModule
4
+ end
@@ -0,0 +1,68 @@
1
+ module HashWiaModule
2
+ def initialize hash=nil
3
+ if hash
4
+ hash.each { |k,v| self[k] = v }
5
+ end
6
+ end
7
+
8
+ def [] key
9
+ data = super key
10
+ data = super key.to_s if data.nil?
11
+ data = super key.to_sym if key.respond_to?(:to_sym) && data.nil?
12
+
13
+ # if we are returning hash as a value, just include with wia methods hash
14
+ data.extend HashWiaModule if data.is_a?(Hash)
15
+
16
+ data
17
+ end
18
+
19
+ def []= key, value
20
+ delete key
21
+ delete key.to_s
22
+ delete key.to_sym if key.respond_to?(:to_sym)
23
+
24
+ super key, value
25
+ end
26
+
27
+ # we never return array from hash, ruby internals
28
+ def to_ary
29
+ nil
30
+ end
31
+
32
+ # key is common id direct access
33
+ # allow direct get or fuction the same if name given
34
+ def key name=nil
35
+ name ? self[name] : self[:key]
36
+ end
37
+
38
+ # true clone of the hash with 0 references to the old one
39
+ def clone
40
+ Marshal.load(Marshal.dump(self))
41
+ end
42
+
43
+ def method_missing name, *args, &block
44
+ strname = name.to_s
45
+
46
+ if strname.sub!(/\?$/, '')
47
+ # h.foo?
48
+ !!self[strname]
49
+ elsif strname.sub!(/=$/, '')
50
+ # h.foo = :bar
51
+ self[strname.to_sym] = args.first
52
+ else
53
+ value = self[strname]
54
+
55
+ if value.nil?
56
+ if block
57
+ # h.foo { rand }
58
+ self[name] = block
59
+ else
60
+ # h.foo
61
+ raise ArgumentError.new('%s not defined' % strname)
62
+ end
63
+ else
64
+ value
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,19 @@
1
+ class Hash
2
+ # { foo: :bar }.to_hwia #
3
+ # { foo: :bar }.to_hwia :foo, :bar # create struct and fill
4
+ def to_hwia *args
5
+ unless args.first
6
+ HashWia.new self
7
+ else
8
+ list = args.flatten
9
+ name = 'DynStruct_' + list.join('_')
10
+ HashWia::STRUCTS[name] ||= ::Struct.new(name, *list)
11
+
12
+ HashWia::STRUCTS[name].new.tap do |o|
13
+ each do |k, v|
14
+ o.send('%s=' % k, v) unless v.nil?
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
metadata ADDED
@@ -0,0 +1,62 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hash_wia
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.7.0
5
+ platform: ruby
6
+ authors:
7
+ - Dino Reic
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-05-28 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'
27
+ description: Gem provides simple access to common Ruby hash types bundled in one simple
28
+ class
29
+ email: reic.dino@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - "./.version"
35
+ - "./lib/hash_wia.rb"
36
+ - "./lib/hash_wia/class.rb"
37
+ - "./lib/hash_wia/module.rb"
38
+ - "./lib/hash_wia/pollute.rb"
39
+ homepage: https://github.com/dux/hash_wia
40
+ licenses:
41
+ - MIT
42
+ metadata: {}
43
+ post_install_message:
44
+ rdoc_options: []
45
+ require_paths:
46
+ - lib
47
+ required_ruby_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ requirements: []
58
+ rubygems_version: 3.0.6
59
+ signing_key:
60
+ specification_version: 4
61
+ summary: Hash with indifferent access + goodies
62
+ test_files: []