dry-struct 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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 [![Join the chat at https://gitter.im/dry-rb/chat](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/dry-rb/chat)
|
2
9
|
|
3
|
-
|
10
|
+
[![Gem Version](https://badge.fury.io/rb/dry-struct.svg)][gem]
|
11
|
+
[![Build Status](https://travis-ci.org/dry-rb/dry-struct.svg?branch=master)][travis]
|
12
|
+
[![Dependency Status](https://gemnasium.com/dry-rb/dry-struct.svg)][gemnasium]
|
13
|
+
[![Code Climate](https://codeclimate.com/github/dry-rb/dry-struct/badges/gpa.svg)][codeclimate]
|
14
|
+
[![Test Coverage](https://codeclimate.com/github/dry-rb/dry-struct/badges/coverage.svg)][codeclimate]
|
15
|
+
[![Inline docs](http://inch-ci.org/github/dry-rb/dry-struct.svg?branch=master)][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.
|