dry-struct 1.4.0 → 1.5.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 +4 -4
- data/CHANGELOG.md +9 -0
- data/LICENSE +1 -1
- data/README.md +5 -4
- data/dry-struct.gemspec +17 -15
- data/lib/dry/struct/class_interface.rb +17 -18
- data/lib/dry/struct/compiler.rb +0 -3
- data/lib/dry/struct/extensions/pretty_print.rb +1 -1
- data/lib/dry/struct/struct_builder.rb +2 -3
- data/lib/dry/struct/sum.rb +2 -5
- data/lib/dry/struct/value.rb +1 -2
- data/lib/dry/struct/version.rb +1 -1
- data/lib/dry/struct.rb +32 -19
- metadata +25 -11
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b4e5c0ce0e83f1e4c7308d2d6ee56ac5397d3960a455e2c0818036a67fe5d63a
|
|
4
|
+
data.tar.gz: 77add215b7f8f7f84b9a4e70a76cdfa03fa0ddf63f51ae549652398bb8ec0b84
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 00b42458408d8bd72847b19a0564ae1909ff9d88235d2a8a1769638bda63f088429464983fd108b532af09d61583e6500566f6ea9391eda84b6c937d0844cff9
|
|
7
|
+
data.tar.gz: ed436e9e01d782dd717d0a67ae98813c0398631d10a81e367355eaae9e870c7580f2c840644577ee2ad8fa651264dd0c5d437a896a2d906b038d2659de54195e
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
<!--- DO NOT EDIT THIS FILE - IT'S AUTOMATICALLY GENERATED VIA DEVTOOLS --->
|
|
2
2
|
|
|
3
|
+
## 1.5.0 2022-10-15
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Changed
|
|
7
|
+
|
|
8
|
+
- Use zeitwerk for auto-loading (@flash-gordon)
|
|
9
|
+
|
|
10
|
+
[Compare v1.4.0...v1.5.0](https://github.com/dry-rb/dry-struct/compare/v1.4.0...v1.5.0)
|
|
11
|
+
|
|
3
12
|
## 1.4.0 2021-01-21
|
|
4
13
|
|
|
5
14
|
|
data/LICENSE
CHANGED
data/README.md
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
<!--- this file is synced from dry-rb/template-gem project -->
|
|
1
2
|
[gem]: https://rubygems.org/gems/dry-struct
|
|
2
3
|
[actions]: https://github.com/dry-rb/dry-struct/actions
|
|
3
4
|
[codacy]: https://www.codacy.com/gh/dry-rb/dry-struct
|
|
@@ -10,19 +11,19 @@
|
|
|
10
11
|
[][actions]
|
|
11
12
|
[][codacy]
|
|
12
13
|
[][codacy]
|
|
13
|
-
[][inchpages]
|
|
14
15
|
|
|
15
16
|
## Links
|
|
16
17
|
|
|
17
|
-
* [User documentation](
|
|
18
|
+
* [User documentation](https://dry-rb.org/gems/dry-struct)
|
|
18
19
|
* [API documentation](http://rubydoc.info/gems/dry-struct)
|
|
19
20
|
|
|
20
21
|
## Supported Ruby versions
|
|
21
22
|
|
|
22
23
|
This library officially supports the following Ruby versions:
|
|
23
24
|
|
|
24
|
-
* MRI
|
|
25
|
-
* jruby
|
|
25
|
+
* MRI `>= 2.7.0`
|
|
26
|
+
* jruby `>= 9.3` (postponed until 2.7 is supported)
|
|
26
27
|
|
|
27
28
|
## License
|
|
28
29
|
|
data/dry-struct.gemspec
CHANGED
|
@@ -1,36 +1,38 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# this file is managed by dry-rb/devtools project
|
|
3
2
|
|
|
4
|
-
|
|
3
|
+
# this file is synced from dry-rb/template-gem project
|
|
4
|
+
|
|
5
|
+
lib = File.expand_path("lib", __dir__)
|
|
5
6
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
6
|
-
require
|
|
7
|
+
require "dry/struct/version"
|
|
7
8
|
|
|
8
9
|
Gem::Specification.new do |spec|
|
|
9
|
-
spec.name =
|
|
10
|
+
spec.name = "dry-struct"
|
|
10
11
|
spec.authors = ["Piotr Solnica"]
|
|
11
12
|
spec.email = ["piotr.solnica@gmail.com"]
|
|
12
|
-
spec.license =
|
|
13
|
+
spec.license = "MIT"
|
|
13
14
|
spec.version = Dry::Struct::VERSION.dup
|
|
14
15
|
|
|
15
16
|
spec.summary = "Typed structs and value objects"
|
|
16
17
|
spec.description = spec.summary
|
|
17
|
-
spec.homepage =
|
|
18
|
+
spec.homepage = "https://dry-rb.org/gems/dry-struct"
|
|
18
19
|
spec.files = Dir["CHANGELOG.md", "LICENSE", "README.md", "dry-struct.gemspec", "lib/**/*"]
|
|
19
|
-
spec.bindir =
|
|
20
|
+
spec.bindir = "bin"
|
|
20
21
|
spec.executables = []
|
|
21
|
-
spec.require_paths = [
|
|
22
|
+
spec.require_paths = ["lib"]
|
|
22
23
|
|
|
23
|
-
spec.metadata[
|
|
24
|
-
spec.metadata[
|
|
25
|
-
spec.metadata[
|
|
26
|
-
spec.metadata[
|
|
24
|
+
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
|
25
|
+
spec.metadata["changelog_uri"] = "https://github.com/dry-rb/dry-struct/blob/main/CHANGELOG.md"
|
|
26
|
+
spec.metadata["source_code_uri"] = "https://github.com/dry-rb/dry-struct"
|
|
27
|
+
spec.metadata["bug_tracker_uri"] = "https://github.com/dry-rb/dry-struct/issues"
|
|
27
28
|
|
|
28
|
-
spec.required_ruby_version = ">= 2.
|
|
29
|
+
spec.required_ruby_version = ">= 2.7.0"
|
|
29
30
|
|
|
30
31
|
# to update dependencies edit project.yml
|
|
31
|
-
spec.add_runtime_dependency "dry-core", "~> 0.
|
|
32
|
-
spec.add_runtime_dependency "dry-types", "~> 1.
|
|
32
|
+
spec.add_runtime_dependency "dry-core", "~> 0.9", ">= 0.9"
|
|
33
|
+
spec.add_runtime_dependency "dry-types", "~> 1.6"
|
|
33
34
|
spec.add_runtime_dependency "ice_nine", "~> 0.11"
|
|
35
|
+
spec.add_runtime_dependency "zeitwerk", "~> 2.6"
|
|
34
36
|
|
|
35
37
|
spec.add_development_dependency "bundler"
|
|
36
38
|
spec.add_development_dependency "rake"
|
|
@@ -1,18 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require "weakref"
|
|
4
|
-
require "dry/core/class_attributes"
|
|
5
|
-
require "dry/core/inflector"
|
|
6
|
-
require "dry/core/descendants_tracker"
|
|
7
|
-
|
|
8
|
-
require "dry/struct/errors"
|
|
9
|
-
require "dry/struct/constructor"
|
|
10
|
-
require "dry/struct/sum"
|
|
11
4
|
|
|
12
5
|
module Dry
|
|
13
6
|
class Struct
|
|
14
7
|
# Class-level interface of {Struct} and {Value}
|
|
15
|
-
module ClassInterface
|
|
8
|
+
module ClassInterface # rubocop:disable Metrics/ModuleLength
|
|
16
9
|
include Core::ClassAttributes
|
|
17
10
|
|
|
18
11
|
include Types::Type
|
|
@@ -49,8 +42,12 @@ module Dry
|
|
|
49
42
|
# end
|
|
50
43
|
# end
|
|
51
44
|
#
|
|
52
|
-
# Language.schema
|
|
53
|
-
# # => #<Dry::Types[
|
|
45
|
+
# Language.schema # new lines for readability
|
|
46
|
+
# # => #<Dry::Types[
|
|
47
|
+
# Constructor<Schema<keys={
|
|
48
|
+
# name: Constrained<Nominal<String> rule=[type?(String)]>
|
|
49
|
+
# details: Language::Details
|
|
50
|
+
# }> fn=Kernel.Hash>]>
|
|
54
51
|
#
|
|
55
52
|
# ruby = Language.new(name: 'Ruby', details: { type: 'OO' })
|
|
56
53
|
# ruby.name #=> 'Ruby'
|
|
@@ -67,10 +64,12 @@ module Dry
|
|
|
67
64
|
# end
|
|
68
65
|
# end
|
|
69
66
|
#
|
|
70
|
-
# Language.schema
|
|
67
|
+
# Language.schema # new lines for readability
|
|
71
68
|
# => #<Dry::Types[Constructor<Schema<keys={
|
|
72
69
|
# name: Constrained<Nominal<String> rule=[type?(String)]>
|
|
73
|
-
# versions: Constrained<
|
|
70
|
+
# versions: Constrained<
|
|
71
|
+
# Array<Constrained<Nominal<String> rule=[type?(String)]>
|
|
72
|
+
# > rule=[type?(Array)]>
|
|
74
73
|
# celebrities: Constrained<Array<Language::Celebrity> rule=[type?(Array)]>
|
|
75
74
|
# }> fn=Kernel.Hash>]>
|
|
76
75
|
#
|
|
@@ -151,7 +150,7 @@ module Dry
|
|
|
151
150
|
Core::Deprecations.warn(
|
|
152
151
|
"Dry::Struct.attribute? is deprecated for checking attribute presence, "\
|
|
153
152
|
"use has_attribute? instead",
|
|
154
|
-
tag: :
|
|
153
|
+
tag: :"dry-struct"
|
|
155
154
|
)
|
|
156
155
|
|
|
157
156
|
has_attribute?(args[0])
|
|
@@ -247,7 +246,7 @@ module Dry
|
|
|
247
246
|
|
|
248
247
|
# @param [Hash{Symbol => Object},Dry::Struct] attributes
|
|
249
248
|
# @raise [Struct::Error] if the given attributes don't conform {#schema}
|
|
250
|
-
def new(attributes = default_attributes, safe = false, &block)
|
|
249
|
+
def new(attributes = default_attributes, safe = false, &block) # rubocop:disable Style/OptionalBooleanParameter
|
|
251
250
|
if attributes.is_a?(Struct)
|
|
252
251
|
if equal?(attributes.class)
|
|
253
252
|
attributes
|
|
@@ -481,10 +480,10 @@ module Dry
|
|
|
481
480
|
keys.each do |key|
|
|
482
481
|
next if instance_methods.include?(key)
|
|
483
482
|
|
|
484
|
-
class_eval(<<-RUBY)
|
|
485
|
-
def #{key}
|
|
486
|
-
@attributes[#{key.inspect}]
|
|
487
|
-
end
|
|
483
|
+
class_eval(<<-RUBY, __FILE__, __LINE__ + 1)
|
|
484
|
+
def #{key} # def email
|
|
485
|
+
@attributes[#{key.inspect}] # @attributes[:email]
|
|
486
|
+
end # end
|
|
488
487
|
RUBY
|
|
489
488
|
end
|
|
490
489
|
end
|
data/lib/dry/struct/compiler.rb
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require "dry/struct/compiler"
|
|
4
|
-
|
|
5
3
|
module Dry
|
|
6
4
|
class Struct
|
|
7
5
|
# @private
|
|
@@ -14,7 +12,8 @@ module Dry
|
|
|
14
12
|
end
|
|
15
13
|
|
|
16
14
|
# @param [Symbol|String] attr_name the name of the nested type
|
|
17
|
-
# @param [Dry::Struct,Dry::Types::Type::Array,Undefined] type the superclass
|
|
15
|
+
# @param [Dry::Struct,Dry::Types::Type::Array,Undefined] type the superclass
|
|
16
|
+
# of the nested struct
|
|
18
17
|
# @yield the body of the nested struct
|
|
19
18
|
def call(attr_name, type, &block)
|
|
20
19
|
const_name = const_name(type, attr_name)
|
data/lib/dry/struct/sum.rb
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require "dry/types/sum"
|
|
4
|
-
require "dry/types/printer"
|
|
5
|
-
|
|
6
3
|
module Dry
|
|
7
4
|
class Struct
|
|
8
5
|
# A sum type of two or more structs
|
|
@@ -46,9 +43,9 @@ module Dry
|
|
|
46
43
|
protected
|
|
47
44
|
|
|
48
45
|
# @private
|
|
49
|
-
def try_struct(input)
|
|
46
|
+
def try_struct(input, &block)
|
|
50
47
|
left.try_struct(input) do
|
|
51
|
-
right.try_struct(input)
|
|
48
|
+
right.try_struct(input, &block)
|
|
52
49
|
end
|
|
53
50
|
end
|
|
54
51
|
end
|
data/lib/dry/struct/value.rb
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require "ice_nine"
|
|
4
|
-
require "dry/core/deprecations"
|
|
5
4
|
|
|
6
5
|
module Dry
|
|
7
6
|
class Struct
|
|
8
|
-
extend Core::Deprecations[:
|
|
7
|
+
extend Core::Deprecations[:"dry-struct"]
|
|
9
8
|
|
|
10
9
|
# {Value} objects behave like {Struct}s but *deeply frozen*
|
|
11
10
|
# using [`ice_nine`](https://github.com/dkubb/ice_nine)
|
data/lib/dry/struct/version.rb
CHANGED
data/lib/dry/struct.rb
CHANGED
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "weakref"
|
|
4
|
+
|
|
5
|
+
require "dry/core"
|
|
3
6
|
require "dry/types"
|
|
4
|
-
require "dry/core/equalizer"
|
|
5
|
-
require "dry/core/extensions"
|
|
6
|
-
require "dry/core/constants"
|
|
7
|
-
require "dry/core/deprecations"
|
|
8
7
|
|
|
9
|
-
require "dry/struct/version"
|
|
10
|
-
require "dry/struct/errors"
|
|
11
8
|
require "dry/struct/class_interface"
|
|
12
|
-
require "dry/struct/
|
|
13
|
-
require "dry/struct/
|
|
9
|
+
require "dry/struct/errors"
|
|
10
|
+
require "dry/struct/version"
|
|
14
11
|
|
|
15
12
|
module Dry
|
|
16
13
|
# Constructor method for easily creating a {Dry::Struct}.
|
|
@@ -88,14 +85,27 @@ module Dry
|
|
|
88
85
|
extend Core::Extensions
|
|
89
86
|
include Core::Constants
|
|
90
87
|
extend ClassInterface
|
|
91
|
-
extend Core::Deprecations[:
|
|
88
|
+
extend Core::Deprecations[:"dry-struct"]
|
|
92
89
|
|
|
93
90
|
class << self
|
|
94
91
|
# override `Dry::Types::Builder#prepend`
|
|
95
92
|
define_method(:prepend, ::Module.method(:prepend))
|
|
93
|
+
|
|
94
|
+
def loader
|
|
95
|
+
@loader ||= ::Zeitwerk::Loader.new.tap do |loader|
|
|
96
|
+
root = ::File.expand_path("..", __dir__)
|
|
97
|
+
loader.tag = "dry-struct"
|
|
98
|
+
loader.inflector = ::Zeitwerk::GemInflector.new("#{root}/dry-struct.rb")
|
|
99
|
+
loader.push_dir(root)
|
|
100
|
+
loader.ignore(
|
|
101
|
+
"#{root}/dry-struct.rb",
|
|
102
|
+
"#{root}/dry/struct/{class_interface,errors,extensions,printer,value,version}.rb"
|
|
103
|
+
)
|
|
104
|
+
end
|
|
105
|
+
end
|
|
96
106
|
end
|
|
97
107
|
|
|
98
|
-
|
|
108
|
+
loader.setup
|
|
99
109
|
|
|
100
110
|
include ::Dry::Equalizer(:__attributes__, inspect: false, immutable: true)
|
|
101
111
|
|
|
@@ -159,8 +169,8 @@ module Dry
|
|
|
159
169
|
result[key.name] = Hashify[self[key.name]] if attributes.key?(key.name)
|
|
160
170
|
end
|
|
161
171
|
end
|
|
172
|
+
# TODO: remove in 2.0
|
|
162
173
|
alias_method :to_hash, :to_h
|
|
163
|
-
# deprecate :to_hash, :to_h, message: "Implicit convertion structs to hashes is deprecated. Use .to_h"
|
|
164
174
|
|
|
165
175
|
# Create a copy of {Dry::Struct} with overriden attributes
|
|
166
176
|
#
|
|
@@ -183,7 +193,11 @@ module Dry
|
|
|
183
193
|
# rom_n_roda.new(subtitle: '3rd edition')
|
|
184
194
|
# #=> #<Book title="Web Development with ROM and Roda" subtitle="3rd edition">
|
|
185
195
|
def new(changeset)
|
|
186
|
-
new_attributes = self.class.schema.apply(
|
|
196
|
+
new_attributes = self.class.schema.apply(
|
|
197
|
+
changeset,
|
|
198
|
+
skip_missing: true,
|
|
199
|
+
resolve_defaults: false
|
|
200
|
+
)
|
|
187
201
|
self.class.load(__attributes__.merge(new_attributes))
|
|
188
202
|
rescue Types::SchemaError, Types::MissingKeyError, Types::UnknownKeysError => e
|
|
189
203
|
raise Error, "[#{self}.new] #{e}"
|
|
@@ -197,16 +211,15 @@ module Dry
|
|
|
197
211
|
"#<#{klass.name || klass.inspect}#{attrs}>"
|
|
198
212
|
end
|
|
199
213
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
attributes
|
|
206
|
-
end
|
|
214
|
+
# Pattern matching support
|
|
215
|
+
#
|
|
216
|
+
# @api private
|
|
217
|
+
def deconstruct_keys(_keys)
|
|
218
|
+
attributes
|
|
207
219
|
end
|
|
208
220
|
end
|
|
209
221
|
end
|
|
210
222
|
|
|
211
223
|
require "dry/struct/extensions"
|
|
212
224
|
require "dry/struct/printer"
|
|
225
|
+
require "dry/struct/value"
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dry-struct
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Piotr Solnica
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2022-10-15 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: dry-core
|
|
@@ -16,34 +16,34 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '0.
|
|
19
|
+
version: '0.9'
|
|
20
20
|
- - ">="
|
|
21
21
|
- !ruby/object:Gem::Version
|
|
22
|
-
version: '0.
|
|
22
|
+
version: '0.9'
|
|
23
23
|
type: :runtime
|
|
24
24
|
prerelease: false
|
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
|
26
26
|
requirements:
|
|
27
27
|
- - "~>"
|
|
28
28
|
- !ruby/object:Gem::Version
|
|
29
|
-
version: '0.
|
|
29
|
+
version: '0.9'
|
|
30
30
|
- - ">="
|
|
31
31
|
- !ruby/object:Gem::Version
|
|
32
|
-
version: '0.
|
|
32
|
+
version: '0.9'
|
|
33
33
|
- !ruby/object:Gem::Dependency
|
|
34
34
|
name: dry-types
|
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
|
36
36
|
requirements:
|
|
37
37
|
- - "~>"
|
|
38
38
|
- !ruby/object:Gem::Version
|
|
39
|
-
version: '1.
|
|
39
|
+
version: '1.6'
|
|
40
40
|
type: :runtime
|
|
41
41
|
prerelease: false
|
|
42
42
|
version_requirements: !ruby/object:Gem::Requirement
|
|
43
43
|
requirements:
|
|
44
44
|
- - "~>"
|
|
45
45
|
- !ruby/object:Gem::Version
|
|
46
|
-
version: '1.
|
|
46
|
+
version: '1.6'
|
|
47
47
|
- !ruby/object:Gem::Dependency
|
|
48
48
|
name: ice_nine
|
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -58,6 +58,20 @@ dependencies:
|
|
|
58
58
|
- - "~>"
|
|
59
59
|
- !ruby/object:Gem::Version
|
|
60
60
|
version: '0.11'
|
|
61
|
+
- !ruby/object:Gem::Dependency
|
|
62
|
+
name: zeitwerk
|
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - "~>"
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '2.6'
|
|
68
|
+
type: :runtime
|
|
69
|
+
prerelease: false
|
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - "~>"
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: '2.6'
|
|
61
75
|
- !ruby/object:Gem::Dependency
|
|
62
76
|
name: bundler
|
|
63
77
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -144,7 +158,7 @@ licenses:
|
|
|
144
158
|
- MIT
|
|
145
159
|
metadata:
|
|
146
160
|
allowed_push_host: https://rubygems.org
|
|
147
|
-
changelog_uri: https://github.com/dry-rb/dry-struct/blob/
|
|
161
|
+
changelog_uri: https://github.com/dry-rb/dry-struct/blob/main/CHANGELOG.md
|
|
148
162
|
source_code_uri: https://github.com/dry-rb/dry-struct
|
|
149
163
|
bug_tracker_uri: https://github.com/dry-rb/dry-struct/issues
|
|
150
164
|
post_install_message:
|
|
@@ -155,14 +169,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
155
169
|
requirements:
|
|
156
170
|
- - ">="
|
|
157
171
|
- !ruby/object:Gem::Version
|
|
158
|
-
version: 2.
|
|
172
|
+
version: 2.7.0
|
|
159
173
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
160
174
|
requirements:
|
|
161
175
|
- - ">="
|
|
162
176
|
- !ruby/object:Gem::Version
|
|
163
177
|
version: '0'
|
|
164
178
|
requirements: []
|
|
165
|
-
rubygems_version: 3.1.
|
|
179
|
+
rubygems_version: 3.1.6
|
|
166
180
|
signing_key:
|
|
167
181
|
specification_version: 4
|
|
168
182
|
summary: Typed structs and value objects
|