l42_map 0.1.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.
- checksums.yaml +7 -0
- data/lib/l42/map/api.rb +36 -0
- data/lib/l42/map/enumerable_api.rb +13 -0
- data/lib/l42/map/global.rb +6 -0
- data/lib/l42/map/version.rb +8 -0
- data/lib/l42/map.rb +59 -0
- metadata +61 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: acc7207216b8e97faa4c219a2764e600331075c49fc7d53ba58f4386b724d2ed
|
4
|
+
data.tar.gz: 57e668a4b1ce4a9d8087aa92d4149f4fea3968da6b60b9b9079781060a0b3d04
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: aeb1ebc407ba571c7e49dcf9a342e044e0590d540c071746c3e7dbdb53a518cf0eeced26dc8e2bc06d0fd5a20f24138d00df98a3d7079462cd04277614c95984
|
7
|
+
data.tar.gz: a89558d011a888343736f301afb13f7b15b12e385a2945413302bb1004364d9db46e6207be3cb785e3d93e3021120c4b8bfa4abaf1140cad0fbaebcfb447c4af
|
data/lib/l42/map/api.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module L42
|
4
|
+
class Map
|
5
|
+
module Api
|
6
|
+
def [](key)
|
7
|
+
hash[key]
|
8
|
+
end
|
9
|
+
|
10
|
+
def empty?
|
11
|
+
hash.empty?
|
12
|
+
end
|
13
|
+
|
14
|
+
def fetch(*args, &blk)
|
15
|
+
hash.fetch(*args, &blk)
|
16
|
+
end
|
17
|
+
|
18
|
+
def merge(*args, &blk)
|
19
|
+
hash1 = hash.merge(*args, &blk)
|
20
|
+
_clone(hash1)
|
21
|
+
end
|
22
|
+
|
23
|
+
def slice(*keys)
|
24
|
+
hash1 = hash.slice(*keys)
|
25
|
+
_clone(hash1)
|
26
|
+
end
|
27
|
+
|
28
|
+
def to_h; hash end
|
29
|
+
|
30
|
+
def without(*keys)
|
31
|
+
slice(*(hash.keys - keys))
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
# SPDX-License-Identifier: Apache-2.0
|
data/lib/l42/map.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'map/api'
|
4
|
+
require_relative 'map/enumerable_api'
|
5
|
+
module L42
|
6
|
+
class Map
|
7
|
+
RestrictedNames = %i[
|
8
|
+
empty? fetch merge slice to_h with_default without
|
9
|
+
].freeze
|
10
|
+
|
11
|
+
include Api
|
12
|
+
include EnumerableApi
|
13
|
+
|
14
|
+
def ==(other)
|
15
|
+
self.class == other.class && hash == other.to_h
|
16
|
+
end
|
17
|
+
|
18
|
+
def with_default(default)
|
19
|
+
@default = default
|
20
|
+
_define_method_missing
|
21
|
+
self
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
attr_accessor :default, :hash
|
26
|
+
|
27
|
+
def initialize(**kwds)
|
28
|
+
@default = nil
|
29
|
+
@hash = kwds
|
30
|
+
(kwds.keys - RestrictedNames).each(&_define_accessor_method)
|
31
|
+
end
|
32
|
+
|
33
|
+
def _clone(with_hash)
|
34
|
+
self.class.new(**with_hash).tap do |new_instance|
|
35
|
+
new_instance.with_default(default) if default
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def _define_accessor_method
|
40
|
+
->key do
|
41
|
+
class << self; self end.module_eval do
|
42
|
+
define_method key do
|
43
|
+
hash[key]
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def _define_method_missing
|
50
|
+
class << self; self end.module_eval do
|
51
|
+
define_method :method_missing do |_name|
|
52
|
+
default
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
59
|
+
# SPDX-License-Identifier: Apache-2.0
|
metadata
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: l42_map
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Robert Dober
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-09-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: speculate_about
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.0.2
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.0.2
|
27
|
+
description: Immutable OpenStruct On Steroids
|
28
|
+
email: robert.dober@gmail.com
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- lib/l42/map.rb
|
34
|
+
- lib/l42/map/api.rb
|
35
|
+
- lib/l42/map/enumerable_api.rb
|
36
|
+
- lib/l42/map/global.rb
|
37
|
+
- lib/l42/map/version.rb
|
38
|
+
homepage: https://github.com/robertdober/l42_map
|
39
|
+
licenses:
|
40
|
+
- Apache-2.0
|
41
|
+
metadata: {}
|
42
|
+
post_install_message:
|
43
|
+
rdoc_options: []
|
44
|
+
require_paths:
|
45
|
+
- lib
|
46
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
47
|
+
requirements:
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: 3.1.0
|
51
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
requirements: []
|
57
|
+
rubygems_version: 3.3.7
|
58
|
+
signing_key:
|
59
|
+
specification_version: 4
|
60
|
+
summary: Immutable OpenStruct On Steroids
|
61
|
+
test_files: []
|