dry-struct 0.0.1 → 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 +4 -4
- data/.travis.yml +1 -2
- data/CHANGELOG.md +17 -0
- data/Gemfile +1 -1
- data/README.md +15 -1
- data/dry-struct.gemspec +7 -4
- data/lib/dry/struct.rb +2 -0
- data/lib/dry/struct/class_interface.rb +27 -5
- data/lib/dry/struct/value.rb +0 -2
- data/lib/dry/struct/version.rb +1 -1
- metadata +9 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 01b27ade8be3b7f1fcadc7a426f65fc114494396
|
4
|
+
data.tar.gz: 9d21cd9c9e666d761e068153b022ca65ab84c3f5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f099db81c4e68cb0963b2225d5c156a8b417cfe9e7f43721b2e94f2b7ec8f1f72d646f486e7610a1894135efd7ce47e722a26dd96287b3ed226383262f38ff92
|
7
|
+
data.tar.gz: c59d33760418278b7be4155a5f7510f87b962ee1f0ba8defcbad41438a5d609d0d916c238259cf54185b8262e4f2e4ca33cf88759cd4d61a3a190e2b1cd36773
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# v0.1.0 2016-09-21
|
2
|
+
|
3
|
+
## Added
|
4
|
+
|
5
|
+
* `:strict_with_defaults` constructor type (backus)
|
6
|
+
|
7
|
+
## Changed
|
8
|
+
|
9
|
+
* [BREAKING] `:strict` was renamed to `:permissive` as it ignores missing keys (backus)
|
10
|
+
* [BREAKING] `:strict` now raises on unexpected keys (backus)
|
11
|
+
* Structs no longer auto-register themselves in the types container as they implement `Type` interface and we don't have to wrap them in `Type::Definition` (flash-gordon)
|
12
|
+
|
13
|
+
[Compare v0.0.1...v0.1.0](https://github.com/dry-rb/dry-struct/compare/v0.0.1...v0.1.0)
|
14
|
+
|
15
|
+
# v0.0.1 2016-07-17
|
16
|
+
|
17
|
+
Initial release of code imported from dry-types
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,20 @@
|
|
1
|
+
[gem]: https://rubygems.org/gems/dry-struct
|
2
|
+
[travis]: https://travis-ci.org/dry-rb/dry-struct
|
3
|
+
[gemnasium]: https://gemnasium.com/dry-rb/dry-struct
|
4
|
+
[codeclimate]: https://codeclimate.com/github/dry-rb/dry-struct
|
5
|
+
[coveralls]: https://coveralls.io/r/dry-rb/dry-struct
|
6
|
+
[inchpages]: http://inch-ci.org/github/dry-rb/dry-struct
|
7
|
+
|
1
8
|
# dry-struct [](https://gitter.im/dry-rb/chat)
|
2
9
|
|
3
|
-
|
10
|
+
[][gem]
|
11
|
+
[][travis]
|
12
|
+
[][gemnasium]
|
13
|
+
[][codeclimate]
|
14
|
+
[][codeclimate]
|
15
|
+
[][inchpages]
|
16
|
+
|
17
|
+
WIP extraction from dry-struct
|
4
18
|
|
5
19
|
## Development
|
6
20
|
|
data/dry-struct.gemspec
CHANGED
@@ -1,15 +1,19 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
+
lib = File.expand_path('../lib', __FILE__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
require 'dry/struct/version'
|
6
|
+
|
3
7
|
Gem::Specification.new do |spec|
|
4
8
|
spec.name = 'dry-struct'
|
5
|
-
spec.version =
|
9
|
+
spec.version = Dry::Struct::VERSION
|
6
10
|
spec.authors = ['Piotr Solnica']
|
7
11
|
spec.email = ['piotr.solnica@gmail.com']
|
8
12
|
spec.license = 'MIT'
|
9
13
|
|
10
14
|
spec.summary = 'Typed structs and value objects.'
|
11
15
|
spec.description = spec.summary
|
12
|
-
spec.homepage = 'https://github.com/
|
16
|
+
spec.homepage = 'https://github.com/dry-rb/dry-struct'
|
13
17
|
|
14
18
|
# Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
|
15
19
|
# delete this section to allow pushing this gem to any host.
|
@@ -26,8 +30,7 @@ Gem::Specification.new do |spec|
|
|
26
30
|
|
27
31
|
spec.add_runtime_dependency 'dry-equalizer', '~> 0.2'
|
28
32
|
spec.add_runtime_dependency 'dry-configurable', '~> 0.1'
|
29
|
-
spec.add_runtime_dependency 'dry-
|
30
|
-
spec.add_runtime_dependency 'dry-types', '~> 0.8', '>= 0.8.1'
|
33
|
+
spec.add_runtime_dependency 'dry-types', '~> 0.9', '>= 0.9.0'
|
31
34
|
spec.add_runtime_dependency 'ice_nine', '~> 0.11'
|
32
35
|
|
33
36
|
spec.add_development_dependency 'bundler', '~> 1.6'
|
data/lib/dry/struct.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'dry/struct/errors'
|
2
|
+
|
1
3
|
module Dry
|
2
4
|
class Struct
|
3
5
|
module ClassInterface
|
@@ -11,16 +13,20 @@ module Dry
|
|
11
13
|
|
12
14
|
protected :constructor=, :equalizer=, :constructor_type=
|
13
15
|
|
16
|
+
def self.extended(base)
|
17
|
+
base.instance_variable_set(:@schema, {})
|
18
|
+
end
|
19
|
+
|
14
20
|
def inherited(klass)
|
15
21
|
super
|
16
22
|
|
23
|
+
klass.instance_variable_set(:@schema, {})
|
17
24
|
klass.equalizer = Equalizer.new(*schema.keys)
|
18
25
|
klass.constructor_type = constructor_type
|
19
26
|
klass.send(:include, klass.equalizer)
|
20
27
|
|
21
28
|
unless klass == Value
|
22
29
|
klass.constructor = Types['coercible.hash']
|
23
|
-
Types.register(Types.identifier(klass), klass)
|
24
30
|
end
|
25
31
|
|
26
32
|
klass.attributes({}) unless equal?(Struct)
|
@@ -47,7 +53,7 @@ module Dry
|
|
47
53
|
def check_schema_duplication(new_schema)
|
48
54
|
shared_keys = new_schema.keys & schema.keys
|
49
55
|
|
50
|
-
|
56
|
+
raise RepeatedAttributeError, shared_keys.first if shared_keys.any?
|
51
57
|
end
|
52
58
|
private :check_schema_duplication
|
53
59
|
|
@@ -70,7 +76,7 @@ module Dry
|
|
70
76
|
else
|
71
77
|
super(constructor[attributes])
|
72
78
|
end
|
73
|
-
rescue Types::SchemaError, Types::
|
79
|
+
rescue Types::SchemaError, Types::MissingKeyError, Types::UnknownKeysError => error
|
74
80
|
raise Struct::Error, "[#{self}.new] #{error}"
|
75
81
|
end
|
76
82
|
alias_method :call, :new
|
@@ -89,8 +95,16 @@ module Dry
|
|
89
95
|
block_given? ? yield(failure) : failure
|
90
96
|
end
|
91
97
|
|
92
|
-
def
|
93
|
-
|
98
|
+
def success(*args)
|
99
|
+
result(Types::Result::Success, *args)
|
100
|
+
end
|
101
|
+
|
102
|
+
def failure(*args)
|
103
|
+
result(Types::Result::Failure, *args)
|
104
|
+
end
|
105
|
+
|
106
|
+
def result(klass, *args)
|
107
|
+
klass.new(*args)
|
94
108
|
end
|
95
109
|
|
96
110
|
def default?
|
@@ -100,6 +114,14 @@ module Dry
|
|
100
114
|
def valid?(value)
|
101
115
|
self === value
|
102
116
|
end
|
117
|
+
|
118
|
+
def constrained?
|
119
|
+
false
|
120
|
+
end
|
121
|
+
|
122
|
+
def primitive
|
123
|
+
self
|
124
|
+
end
|
103
125
|
end
|
104
126
|
end
|
105
127
|
end
|
data/lib/dry/struct/value.rb
CHANGED
data/lib/dry/struct/version.rb
CHANGED
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: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Solnica
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-09-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-equalizer
|
@@ -38,46 +38,26 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0.1'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: dry-logic
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0.2'
|
48
|
-
- - ">="
|
49
|
-
- !ruby/object:Gem::Version
|
50
|
-
version: 0.2.3
|
51
|
-
type: :runtime
|
52
|
-
prerelease: false
|
53
|
-
version_requirements: !ruby/object:Gem::Requirement
|
54
|
-
requirements:
|
55
|
-
- - "~>"
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
version: '0.2'
|
58
|
-
- - ">="
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: 0.2.3
|
61
41
|
- !ruby/object:Gem::Dependency
|
62
42
|
name: dry-types
|
63
43
|
requirement: !ruby/object:Gem::Requirement
|
64
44
|
requirements:
|
65
45
|
- - "~>"
|
66
46
|
- !ruby/object:Gem::Version
|
67
|
-
version: '0.
|
47
|
+
version: '0.9'
|
68
48
|
- - ">="
|
69
49
|
- !ruby/object:Gem::Version
|
70
|
-
version: 0.
|
50
|
+
version: 0.9.0
|
71
51
|
type: :runtime
|
72
52
|
prerelease: false
|
73
53
|
version_requirements: !ruby/object:Gem::Requirement
|
74
54
|
requirements:
|
75
55
|
- - "~>"
|
76
56
|
- !ruby/object:Gem::Version
|
77
|
-
version: '0.
|
57
|
+
version: '0.9'
|
78
58
|
- - ">="
|
79
59
|
- !ruby/object:Gem::Version
|
80
|
-
version: 0.
|
60
|
+
version: 0.9.0
|
81
61
|
- !ruby/object:Gem::Dependency
|
82
62
|
name: ice_nine
|
83
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -144,6 +124,7 @@ files:
|
|
144
124
|
- ".gitignore"
|
145
125
|
- ".rspec"
|
146
126
|
- ".travis.yml"
|
127
|
+
- CHANGELOG.md
|
147
128
|
- Gemfile
|
148
129
|
- LICENSE
|
149
130
|
- README.md
|
@@ -160,7 +141,7 @@ files:
|
|
160
141
|
- lib/dry/struct/hashify.rb
|
161
142
|
- lib/dry/struct/value.rb
|
162
143
|
- lib/dry/struct/version.rb
|
163
|
-
homepage: https://github.com/
|
144
|
+
homepage: https://github.com/dry-rb/dry-struct
|
164
145
|
licenses:
|
165
146
|
- MIT
|
166
147
|
metadata:
|
@@ -181,7 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
181
162
|
version: '0'
|
182
163
|
requirements: []
|
183
164
|
rubyforge_project:
|
184
|
-
rubygems_version: 2.6.
|
165
|
+
rubygems_version: 2.6.6
|
185
166
|
signing_key:
|
186
167
|
specification_version: 4
|
187
168
|
summary: Typed structs and value objects.
|