castkit 0.2.0 → 0.3.1
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 +40 -1
- data/README.md +297 -13
- data/castkit.gemspec +3 -0
- data/lib/castkit/attribute.rb +82 -59
- data/lib/castkit/attributes/definition.rb +64 -0
- data/lib/castkit/attributes/options.rb +214 -0
- data/lib/castkit/castkit.rb +18 -5
- data/lib/castkit/cli/generate.rb +112 -0
- data/lib/castkit/cli/list.rb +200 -0
- data/lib/castkit/cli/main.rb +43 -0
- data/lib/castkit/cli.rb +24 -0
- data/lib/castkit/configuration.rb +31 -8
- data/lib/castkit/contract/{generic.rb → base.rb} +5 -17
- data/lib/castkit/contract/result.rb +2 -2
- data/lib/castkit/contract/validator.rb +5 -1
- data/lib/castkit/contract.rb +5 -5
- data/lib/castkit/core/attributes.rb +87 -44
- data/lib/castkit/data_object.rb +11 -30
- data/lib/castkit/{ext → dsl}/attribute/access.rb +1 -1
- data/lib/castkit/{ext → dsl}/attribute/error_handling.rb +1 -1
- data/lib/castkit/{ext → dsl}/attribute/options.rb +1 -1
- data/lib/castkit/{ext → dsl}/attribute/validation.rb +3 -3
- data/lib/castkit/dsl/attribute.rb +47 -0
- data/lib/castkit/{ext → dsl}/data_object/contract.rb +2 -2
- data/lib/castkit/{ext → dsl}/data_object/deserialization.rb +6 -2
- data/lib/castkit/dsl/data_object/plugins.rb +86 -0
- data/lib/castkit/{ext → dsl}/data_object/serialization.rb +1 -1
- data/lib/castkit/dsl/data_object.rb +61 -0
- data/lib/castkit/inflector.rb +1 -1
- data/lib/castkit/plugins.rb +82 -0
- data/lib/castkit/serializers/base.rb +94 -0
- data/lib/castkit/serializers/default_serializer.rb +156 -0
- data/lib/castkit/types/{generic.rb → base.rb} +30 -10
- data/lib/castkit/types/boolean.rb +14 -10
- data/lib/castkit/types/collection.rb +13 -2
- data/lib/castkit/types/date.rb +2 -2
- data/lib/castkit/types/date_time.rb +2 -2
- data/lib/castkit/types/float.rb +5 -5
- data/lib/castkit/types/integer.rb +5 -5
- data/lib/castkit/types/string.rb +2 -2
- data/lib/castkit/types.rb +1 -1
- data/lib/castkit/validators/base.rb +59 -0
- data/lib/castkit/validators/boolean_validator.rb +39 -0
- data/lib/castkit/validators/collection_validator.rb +29 -0
- data/lib/castkit/validators/float_validator.rb +31 -0
- data/lib/castkit/validators/integer_validator.rb +31 -0
- data/lib/castkit/validators/numeric_validator.rb +2 -2
- data/lib/castkit/validators/string_validator.rb +3 -4
- data/lib/castkit/version.rb +1 -1
- data/lib/castkit.rb +1 -4
- data/lib/generators/attribute.rb +39 -0
- data/lib/generators/base.rb +97 -0
- data/lib/generators/contract.rb +68 -0
- data/lib/generators/data_object.rb +48 -0
- data/lib/generators/plugin.rb +25 -0
- data/lib/generators/serializer.rb +28 -0
- data/lib/generators/templates/attribute.rb.tt +21 -0
- data/lib/generators/templates/attribute_spec.rb.tt +41 -0
- data/lib/generators/templates/contract.rb.tt +26 -0
- data/lib/generators/templates/contract_spec.rb.tt +76 -0
- data/lib/generators/templates/data_object.rb.tt +17 -0
- data/lib/generators/templates/data_object_spec.rb.tt +36 -0
- data/lib/generators/templates/plugin.rb.tt +37 -0
- data/lib/generators/templates/plugin_spec.rb.tt +18 -0
- data/lib/generators/templates/serializer.rb.tt +24 -0
- data/lib/generators/templates/serializer_spec.rb.tt +14 -0
- data/lib/generators/templates/type.rb.tt +57 -0
- data/lib/generators/templates/type_spec.rb.tt +42 -0
- data/lib/generators/templates/validator.rb.tt +26 -0
- data/lib/generators/templates/validator_spec.rb.tt +23 -0
- data/lib/generators/type.rb +29 -0
- data/lib/generators/validator.rb +41 -0
- metadata +92 -16
- data/.rspec_status +0 -196
- data/lib/castkit/core/registerable.rb +0 -59
- data/lib/castkit/default_serializer.rb +0 -154
- data/lib/castkit/serializer.rb +0 -92
- data/lib/castkit/validators/base_validator.rb +0 -39
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "thor/group"
|
|
4
|
+
require "castkit/inflector"
|
|
5
|
+
require_relative "base"
|
|
6
|
+
|
|
7
|
+
module Castkit
|
|
8
|
+
module Generators
|
|
9
|
+
# Generator for creating a new Castkit validator.
|
|
10
|
+
#
|
|
11
|
+
# Validators are responsible for asserting that a given value conforms to a rule.
|
|
12
|
+
# They are typically used inside a type’s `#validate!` method or within custom contract logic.
|
|
13
|
+
#
|
|
14
|
+
# Example usage:
|
|
15
|
+
# $ castkit generate validator Money
|
|
16
|
+
#
|
|
17
|
+
# Generates:
|
|
18
|
+
# - lib/castkit/validators/money.rb
|
|
19
|
+
# - spec/castkit/validators/money_spec.rb
|
|
20
|
+
#
|
|
21
|
+
# These files scaffold a `Castkit::Validators::Money` class with a `#call` method
|
|
22
|
+
# and a corresponding RSpec test suite.
|
|
23
|
+
#
|
|
24
|
+
# @see Castkit::Generators::Base
|
|
25
|
+
class Validator < Castkit::Generators::Base
|
|
26
|
+
component :validator
|
|
27
|
+
|
|
28
|
+
private
|
|
29
|
+
|
|
30
|
+
# Provides extra context used within ERB templates for this generator.
|
|
31
|
+
#
|
|
32
|
+
# @return [Hash]
|
|
33
|
+
def config
|
|
34
|
+
super.merge(
|
|
35
|
+
default_value: "example",
|
|
36
|
+
sample_context: "field_name"
|
|
37
|
+
)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
metadata
CHANGED
|
@@ -1,15 +1,29 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: castkit
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Nathan Lucas
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2025-
|
|
11
|
+
date: 2025-12-09 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: thor
|
|
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'
|
|
13
27
|
- !ruby/object:Gem::Dependency
|
|
14
28
|
name: rspec
|
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -38,6 +52,34 @@ dependencies:
|
|
|
38
52
|
- - ">="
|
|
39
53
|
- !ruby/object:Gem::Version
|
|
40
54
|
version: '0'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: simplecov
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - ">="
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '0'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - ">="
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '0'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: simplecov-cobertura
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - ">="
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '0'
|
|
76
|
+
type: :development
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - ">="
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '0'
|
|
41
83
|
- !ruby/object:Gem::Dependency
|
|
42
84
|
name: yard
|
|
43
85
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -62,7 +104,6 @@ extensions: []
|
|
|
62
104
|
extra_rdoc_files: []
|
|
63
105
|
files:
|
|
64
106
|
- ".rspec"
|
|
65
|
-
- ".rspec_status"
|
|
66
107
|
- ".rubocop.yml"
|
|
67
108
|
- CHANGELOG.md
|
|
68
109
|
- CODE_OF_CONDUCT.md
|
|
@@ -72,43 +113,78 @@ files:
|
|
|
72
113
|
- castkit.gemspec
|
|
73
114
|
- lib/castkit.rb
|
|
74
115
|
- lib/castkit/attribute.rb
|
|
116
|
+
- lib/castkit/attributes/definition.rb
|
|
117
|
+
- lib/castkit/attributes/options.rb
|
|
75
118
|
- lib/castkit/castkit.rb
|
|
119
|
+
- lib/castkit/cli.rb
|
|
120
|
+
- lib/castkit/cli/generate.rb
|
|
121
|
+
- lib/castkit/cli/list.rb
|
|
122
|
+
- lib/castkit/cli/main.rb
|
|
76
123
|
- lib/castkit/configuration.rb
|
|
77
124
|
- lib/castkit/contract.rb
|
|
125
|
+
- lib/castkit/contract/base.rb
|
|
78
126
|
- lib/castkit/contract/data_object.rb
|
|
79
|
-
- lib/castkit/contract/generic.rb
|
|
80
127
|
- lib/castkit/contract/result.rb
|
|
81
128
|
- lib/castkit/contract/validator.rb
|
|
82
129
|
- lib/castkit/core/attribute_types.rb
|
|
83
130
|
- lib/castkit/core/attributes.rb
|
|
84
131
|
- lib/castkit/core/config.rb
|
|
85
|
-
- lib/castkit/core/registerable.rb
|
|
86
132
|
- lib/castkit/data_object.rb
|
|
87
|
-
- lib/castkit/
|
|
133
|
+
- lib/castkit/dsl/attribute.rb
|
|
134
|
+
- lib/castkit/dsl/attribute/access.rb
|
|
135
|
+
- lib/castkit/dsl/attribute/error_handling.rb
|
|
136
|
+
- lib/castkit/dsl/attribute/options.rb
|
|
137
|
+
- lib/castkit/dsl/attribute/validation.rb
|
|
138
|
+
- lib/castkit/dsl/data_object.rb
|
|
139
|
+
- lib/castkit/dsl/data_object/contract.rb
|
|
140
|
+
- lib/castkit/dsl/data_object/deserialization.rb
|
|
141
|
+
- lib/castkit/dsl/data_object/plugins.rb
|
|
142
|
+
- lib/castkit/dsl/data_object/serialization.rb
|
|
88
143
|
- lib/castkit/error.rb
|
|
89
|
-
- lib/castkit/ext/attribute/access.rb
|
|
90
|
-
- lib/castkit/ext/attribute/error_handling.rb
|
|
91
|
-
- lib/castkit/ext/attribute/options.rb
|
|
92
|
-
- lib/castkit/ext/attribute/validation.rb
|
|
93
|
-
- lib/castkit/ext/data_object/contract.rb
|
|
94
|
-
- lib/castkit/ext/data_object/deserialization.rb
|
|
95
|
-
- lib/castkit/ext/data_object/serialization.rb
|
|
96
144
|
- lib/castkit/inflector.rb
|
|
97
|
-
- lib/castkit/
|
|
145
|
+
- lib/castkit/plugins.rb
|
|
146
|
+
- lib/castkit/serializers/base.rb
|
|
147
|
+
- lib/castkit/serializers/default_serializer.rb
|
|
98
148
|
- lib/castkit/types.rb
|
|
149
|
+
- lib/castkit/types/base.rb
|
|
99
150
|
- lib/castkit/types/boolean.rb
|
|
100
151
|
- lib/castkit/types/collection.rb
|
|
101
152
|
- lib/castkit/types/date.rb
|
|
102
153
|
- lib/castkit/types/date_time.rb
|
|
103
154
|
- lib/castkit/types/float.rb
|
|
104
|
-
- lib/castkit/types/generic.rb
|
|
105
155
|
- lib/castkit/types/integer.rb
|
|
106
156
|
- lib/castkit/types/string.rb
|
|
107
157
|
- lib/castkit/validator.rb
|
|
108
|
-
- lib/castkit/validators/
|
|
158
|
+
- lib/castkit/validators/base.rb
|
|
159
|
+
- lib/castkit/validators/boolean_validator.rb
|
|
160
|
+
- lib/castkit/validators/collection_validator.rb
|
|
161
|
+
- lib/castkit/validators/float_validator.rb
|
|
162
|
+
- lib/castkit/validators/integer_validator.rb
|
|
109
163
|
- lib/castkit/validators/numeric_validator.rb
|
|
110
164
|
- lib/castkit/validators/string_validator.rb
|
|
111
165
|
- lib/castkit/version.rb
|
|
166
|
+
- lib/generators/attribute.rb
|
|
167
|
+
- lib/generators/base.rb
|
|
168
|
+
- lib/generators/contract.rb
|
|
169
|
+
- lib/generators/data_object.rb
|
|
170
|
+
- lib/generators/plugin.rb
|
|
171
|
+
- lib/generators/serializer.rb
|
|
172
|
+
- lib/generators/templates/attribute.rb.tt
|
|
173
|
+
- lib/generators/templates/attribute_spec.rb.tt
|
|
174
|
+
- lib/generators/templates/contract.rb.tt
|
|
175
|
+
- lib/generators/templates/contract_spec.rb.tt
|
|
176
|
+
- lib/generators/templates/data_object.rb.tt
|
|
177
|
+
- lib/generators/templates/data_object_spec.rb.tt
|
|
178
|
+
- lib/generators/templates/plugin.rb.tt
|
|
179
|
+
- lib/generators/templates/plugin_spec.rb.tt
|
|
180
|
+
- lib/generators/templates/serializer.rb.tt
|
|
181
|
+
- lib/generators/templates/serializer_spec.rb.tt
|
|
182
|
+
- lib/generators/templates/type.rb.tt
|
|
183
|
+
- lib/generators/templates/type_spec.rb.tt
|
|
184
|
+
- lib/generators/templates/validator.rb.tt
|
|
185
|
+
- lib/generators/templates/validator_spec.rb.tt
|
|
186
|
+
- lib/generators/type.rb
|
|
187
|
+
- lib/generators/validator.rb
|
|
112
188
|
- sig/castkit.rbs
|
|
113
189
|
homepage: https://github.com/bnlucas/castkit
|
|
114
190
|
licenses:
|
data/.rspec_status
DELETED
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
example_id | status | run_time |
|
|
2
|
-
------------------------------------------------------------- | ------ | --------------- |
|
|
3
|
-
./spec/castkit/attribute_spec.rb[1:1:1] | passed | 0.00049 seconds |
|
|
4
|
-
./spec/castkit/attribute_spec.rb[1:1:2] | passed | 0.00004 seconds |
|
|
5
|
-
./spec/castkit/attribute_spec.rb[1:1:3] | passed | 0.00004 seconds |
|
|
6
|
-
./spec/castkit/attribute_spec.rb[1:1:4] | passed | 0.00004 seconds |
|
|
7
|
-
./spec/castkit/attribute_spec.rb[1:2:1] | passed | 0.00091 seconds |
|
|
8
|
-
./spec/castkit/attribute_spec.rb[1:3:1] | passed | 0.00004 seconds |
|
|
9
|
-
./spec/castkit/attribute_spec.rb[1:3:2] | passed | 0.00004 seconds |
|
|
10
|
-
./spec/castkit/attribute_spec.rb[1:3:3] | passed | 0.00006 seconds |
|
|
11
|
-
./spec/castkit/attribute_spec.rb[1:3:4] | passed | 0.00051 seconds |
|
|
12
|
-
./spec/castkit/contract/validator_spec.rb[1:1:1:1] | passed | 0.00007 seconds |
|
|
13
|
-
./spec/castkit/contract/validator_spec.rb[1:1:2:1] | passed | 0.00047 seconds |
|
|
14
|
-
./spec/castkit/contract/validator_spec.rb[1:1:3:1] | passed | 0.0001 seconds |
|
|
15
|
-
./spec/castkit/contract/validator_spec.rb[1:1:4:1] | passed | 0.00008 seconds |
|
|
16
|
-
./spec/castkit/contract/validator_spec.rb[1:1:5:1] | passed | 0.00007 seconds |
|
|
17
|
-
./spec/castkit/contract_spec.rb[1:1:1] | passed | 0.0004 seconds |
|
|
18
|
-
./spec/castkit/contract_spec.rb[1:1:2] | passed | 0.00108 seconds |
|
|
19
|
-
./spec/castkit/contract_spec.rb[1:1:3] | passed | 0.00008 seconds |
|
|
20
|
-
./spec/castkit/contract_spec.rb[1:1:4] | passed | 0.00005 seconds |
|
|
21
|
-
./spec/castkit/contract_spec.rb[1:1:5] | passed | 0.00006 seconds |
|
|
22
|
-
./spec/castkit/contract_spec.rb[1:1:6] | passed | 0.00005 seconds |
|
|
23
|
-
./spec/castkit/core/attribute_types_spec.rb[1:1:1] | passed | 0.00004 seconds |
|
|
24
|
-
./spec/castkit/core/attribute_types_spec.rb[1:1:2] | passed | 0.00003 seconds |
|
|
25
|
-
./spec/castkit/core/attribute_types_spec.rb[1:1:3] | passed | 0.00003 seconds |
|
|
26
|
-
./spec/castkit/core/attribute_types_spec.rb[1:1:4] | passed | 0.00007 seconds |
|
|
27
|
-
./spec/castkit/core/attribute_types_spec.rb[1:1:5] | passed | 0.00003 seconds |
|
|
28
|
-
./spec/castkit/core/attribute_types_spec.rb[1:1:6] | passed | 0.00003 seconds |
|
|
29
|
-
./spec/castkit/core/attribute_types_spec.rb[1:1:7] | passed | 0.00003 seconds |
|
|
30
|
-
./spec/castkit/core/attribute_types_spec.rb[1:1:8] | passed | 0.00003 seconds |
|
|
31
|
-
./spec/castkit/core/attribute_types_spec.rb[1:1:9] | passed | 0.00003 seconds |
|
|
32
|
-
./spec/castkit/core/attribute_types_spec.rb[1:1:10] | passed | 0.00004 seconds |
|
|
33
|
-
./spec/castkit/core/attribute_types_spec.rb[1:1:11] | passed | 0.00003 seconds |
|
|
34
|
-
./spec/castkit/core/attribute_types_spec.rb[1:1:12] | passed | 0.00003 seconds |
|
|
35
|
-
./spec/castkit/core/attributes_spec.rb[1:1:1] | passed | 0.00005 seconds |
|
|
36
|
-
./spec/castkit/core/attributes_spec.rb[1:1:2] | passed | 0.00005 seconds |
|
|
37
|
-
./spec/castkit/core/attributes_spec.rb[1:1:3] | passed | 0.00005 seconds |
|
|
38
|
-
./spec/castkit/core/attributes_spec.rb[1:2:1] | passed | 0.00007 seconds |
|
|
39
|
-
./spec/castkit/core/attributes_spec.rb[1:3:1] | passed | 0.00005 seconds |
|
|
40
|
-
./spec/castkit/core/attributes_spec.rb[1:4:1] | passed | 0.00056 seconds |
|
|
41
|
-
./spec/castkit/core/attributes_spec.rb[1:5:1] | passed | 0.00007 seconds |
|
|
42
|
-
./spec/castkit/core/attributes_spec.rb[1:6:1] | passed | 0.00051 seconds |
|
|
43
|
-
./spec/castkit/core/attributes_spec.rb[1:7:1] | passed | 0.00006 seconds |
|
|
44
|
-
./spec/castkit/core/config_spec.rb[1:1:1] | passed | 0.00004 seconds |
|
|
45
|
-
./spec/castkit/core/config_spec.rb[1:1:2] | passed | 0.00003 seconds |
|
|
46
|
-
./spec/castkit/core/config_spec.rb[1:2:1] | passed | 0.00003 seconds |
|
|
47
|
-
./spec/castkit/core/config_spec.rb[1:3:1] | passed | 0.00003 seconds |
|
|
48
|
-
./spec/castkit/core/config_spec.rb[1:3:2] | passed | 0.00003 seconds |
|
|
49
|
-
./spec/castkit/core/config_spec.rb[1:4:1] | passed | 0.00004 seconds |
|
|
50
|
-
./spec/castkit/core/config_spec.rb[1:4:2] | passed | 0.00003 seconds |
|
|
51
|
-
./spec/castkit/core/config_spec.rb[1:5:1] | passed | 0.00004 seconds |
|
|
52
|
-
./spec/castkit/core/config_spec.rb[1:5:2] | passed | 0.00003 seconds |
|
|
53
|
-
./spec/castkit/data_object_spec.rb[1:1:1] | passed | 0.00398 seconds |
|
|
54
|
-
./spec/castkit/data_object_spec.rb[1:1:2] | passed | 0.00021 seconds |
|
|
55
|
-
./spec/castkit/data_object_spec.rb[1:2:1] | passed | 0.00017 seconds |
|
|
56
|
-
./spec/castkit/data_object_spec.rb[1:2:2] | passed | 0.0001 seconds |
|
|
57
|
-
./spec/castkit/data_object_spec.rb[1:2:3] | passed | 0.00008 seconds |
|
|
58
|
-
./spec/castkit/data_object_spec.rb[1:3:1] | passed | 0.00007 seconds |
|
|
59
|
-
./spec/castkit/data_object_spec.rb[1:3:2] | passed | 0.00008 seconds |
|
|
60
|
-
./spec/castkit/data_object_spec.rb[1:4:1] | passed | 0.00017 seconds |
|
|
61
|
-
./spec/castkit/data_object_spec.rb[1:5:1] | passed | 0.0001 seconds |
|
|
62
|
-
./spec/castkit/data_object_spec.rb[1:5:2] | passed | 0.00009 seconds |
|
|
63
|
-
./spec/castkit/data_object_spec.rb[1:5:3] | passed | 0.00009 seconds |
|
|
64
|
-
./spec/castkit/data_object_spec.rb[1:5:4] | passed | 0.00009 seconds |
|
|
65
|
-
./spec/castkit/data_object_spec.rb[1:5:5] | passed | 0.00217 seconds |
|
|
66
|
-
./spec/castkit/data_object_spec.rb[1:5:6] | passed | 0.00018 seconds |
|
|
67
|
-
./spec/castkit/data_object_spec.rb[1:5:7] | passed | 0.00012 seconds |
|
|
68
|
-
./spec/castkit/data_object_spec.rb[1:6:1] | passed | 0.0001 seconds |
|
|
69
|
-
./spec/castkit/data_object_spec.rb[1:7:1] | passed | 0.00011 seconds |
|
|
70
|
-
./spec/castkit/data_object_spec.rb[1:8:1] | passed | 0.00013 seconds |
|
|
71
|
-
./spec/castkit/data_object_spec.rb[1:8:2] | passed | 0.00012 seconds |
|
|
72
|
-
./spec/castkit/data_object_spec.rb[1:9:1] | passed | 0.00011 seconds |
|
|
73
|
-
./spec/castkit/default_serializer_spec.rb[1:1:1] | passed | 0.00012 seconds |
|
|
74
|
-
./spec/castkit/default_serializer_spec.rb[1:2:1] | passed | 0.00015 seconds |
|
|
75
|
-
./spec/castkit/default_serializer_spec.rb[1:2:2] | passed | 0.00008 seconds |
|
|
76
|
-
./spec/castkit/default_serializer_spec.rb[1:2:3] | passed | 0.00022 seconds |
|
|
77
|
-
./spec/castkit/default_serializer_spec.rb[1:3:1] | passed | 0.00009 seconds |
|
|
78
|
-
./spec/castkit/default_serializer_spec.rb[1:3:2] | passed | 0.00013 seconds |
|
|
79
|
-
./spec/castkit/default_serializer_spec.rb[1:3:3] | passed | 0.00022 seconds |
|
|
80
|
-
./spec/castkit/default_serializer_spec.rb[1:3:4] | passed | 0.00011 seconds |
|
|
81
|
-
./spec/castkit/default_serializer_spec.rb[1:4:1] | passed | 0.00008 seconds |
|
|
82
|
-
./spec/castkit/default_serializer_spec.rb[1:5:1] | passed | 0.00007 seconds |
|
|
83
|
-
./spec/castkit/default_serializer_spec.rb[1:5:2] | passed | 0.00007 seconds |
|
|
84
|
-
./spec/castkit/default_serializer_spec.rb[1:5:3] | passed | 0.00007 seconds |
|
|
85
|
-
./spec/castkit/ext/attribute/access_spec.rb[1:1:1] | passed | 0.00004 seconds |
|
|
86
|
-
./spec/castkit/ext/attribute/access_spec.rb[1:1:2:1] | passed | 0.00004 seconds |
|
|
87
|
-
./spec/castkit/ext/attribute/access_spec.rb[1:1:3:1] | passed | 0.00004 seconds |
|
|
88
|
-
./spec/castkit/ext/attribute/access_spec.rb[1:1:4:1] | passed | 0.00008 seconds |
|
|
89
|
-
./spec/castkit/ext/attribute/access_spec.rb[1:2:1:1] | passed | 0.00006 seconds |
|
|
90
|
-
./spec/castkit/ext/attribute/access_spec.rb[1:2:2:1] | passed | 0.00018 seconds |
|
|
91
|
-
./spec/castkit/ext/attribute/access_spec.rb[1:2:3:1] | passed | 0.00013 seconds |
|
|
92
|
-
./spec/castkit/ext/attribute/access_spec.rb[1:3:1] | passed | 0.00004 seconds |
|
|
93
|
-
./spec/castkit/ext/attribute/access_spec.rb[1:3:2] | passed | 0.00003 seconds |
|
|
94
|
-
./spec/castkit/ext/attribute/access_spec.rb[1:3:3] | passed | 0.00003 seconds |
|
|
95
|
-
./spec/castkit/ext/attribute/access_spec.rb[1:3:4] | passed | 0.00003 seconds |
|
|
96
|
-
./spec/castkit/ext/attribute/access_spec.rb[1:3:5] | passed | 0.00003 seconds |
|
|
97
|
-
./spec/castkit/ext/attribute/access_spec.rb[1:4:1:1] | passed | 0.00005 seconds |
|
|
98
|
-
./spec/castkit/ext/attribute/access_spec.rb[1:4:2:1] | passed | 0.00004 seconds |
|
|
99
|
-
./spec/castkit/ext/attribute/access_spec.rb[1:4:3:1] | passed | 0.00004 seconds |
|
|
100
|
-
./spec/castkit/ext/attribute/access_spec.rb[1:5:1] | passed | 0.00004 seconds |
|
|
101
|
-
./spec/castkit/ext/attribute/access_spec.rb[1:5:2] | passed | 0.00014 seconds |
|
|
102
|
-
./spec/castkit/ext/attribute/access_spec.rb[1:5:3] | passed | 0.00003 seconds |
|
|
103
|
-
./spec/castkit/ext/attribute/access_spec.rb[1:6:1:1] | passed | 0.00003 seconds |
|
|
104
|
-
./spec/castkit/ext/attribute/access_spec.rb[1:6:2:1] | passed | 0.00003 seconds |
|
|
105
|
-
./spec/castkit/ext/attribute/access_spec.rb[1:6:3:1] | passed | 0.00004 seconds |
|
|
106
|
-
./spec/castkit/ext/attribute/access_spec.rb[1:7:1:1] | passed | 0.00004 seconds |
|
|
107
|
-
./spec/castkit/ext/attribute/access_spec.rb[1:7:2:1] | passed | 0.00003 seconds |
|
|
108
|
-
./spec/castkit/ext/attribute/options_spec.rb[1:1:1:1] | passed | 0.00006 seconds |
|
|
109
|
-
./spec/castkit/ext/attribute/options_spec.rb[1:1:2:1] | passed | 0.00012 seconds |
|
|
110
|
-
./spec/castkit/ext/attribute/options_spec.rb[1:2:1:1] | passed | 0.00004 seconds |
|
|
111
|
-
./spec/castkit/ext/attribute/options_spec.rb[1:2:2:1] | passed | 0.00004 seconds |
|
|
112
|
-
./spec/castkit/ext/attribute/options_spec.rb[1:3:1:1] | passed | 0.00004 seconds |
|
|
113
|
-
./spec/castkit/ext/attribute/options_spec.rb[1:3:2:1] | passed | 0.00004 seconds |
|
|
114
|
-
./spec/castkit/ext/attribute/options_spec.rb[1:3:3:1] | passed | 0.00004 seconds |
|
|
115
|
-
./spec/castkit/ext/attribute/options_spec.rb[1:4:1] | passed | 0.00016 seconds |
|
|
116
|
-
./spec/castkit/ext/attribute/options_spec.rb[1:5:1] | passed | 0.00004 seconds |
|
|
117
|
-
./spec/castkit/ext/attribute/options_spec.rb[1:5:2:1] | passed | 0.00004 seconds |
|
|
118
|
-
./spec/castkit/ext/attribute/options_spec.rb[1:6:1] | passed | 0.00003 seconds |
|
|
119
|
-
./spec/castkit/ext/attribute/options_spec.rb[1:7:1] | passed | 0.00003 seconds |
|
|
120
|
-
./spec/castkit/ext/attribute/options_spec.rb[1:7:2:1] | passed | 0.00004 seconds |
|
|
121
|
-
./spec/castkit/ext/attribute/options_spec.rb[1:8:1] | passed | 0.00004 seconds |
|
|
122
|
-
./spec/castkit/ext/attribute/options_spec.rb[1:8:2:1] | passed | 0.00012 seconds |
|
|
123
|
-
./spec/castkit/ext/attribute/options_spec.rb[1:9:1:1] | passed | 0.00005 seconds |
|
|
124
|
-
./spec/castkit/ext/attribute/options_spec.rb[1:9:2:1] | passed | 0.00004 seconds |
|
|
125
|
-
./spec/castkit/ext/attribute/options_spec.rb[1:9:3:1] | passed | 0.00004 seconds |
|
|
126
|
-
./spec/castkit/ext/attribute/options_spec.rb[1:10:1:1] | passed | 0.00004 seconds |
|
|
127
|
-
./spec/castkit/ext/attribute/options_spec.rb[1:10:2:1] | passed | 0.00004 seconds |
|
|
128
|
-
./spec/castkit/ext/attribute/options_spec.rb[1:11:1:1] | passed | 0.00004 seconds |
|
|
129
|
-
./spec/castkit/ext/attribute/options_spec.rb[1:11:2:1] | passed | 0.00004 seconds |
|
|
130
|
-
./spec/castkit/ext/attribute/options_spec.rb[1:12:1:1] | passed | 0.00004 seconds |
|
|
131
|
-
./spec/castkit/ext/attribute/options_spec.rb[1:12:2:1] | passed | 0.00004 seconds |
|
|
132
|
-
./spec/castkit/ext/attribute/validation_spec.rb[1:1:1:1] | passed | 0.00019 seconds |
|
|
133
|
-
./spec/castkit/ext/attribute/validation_spec.rb[1:1:2:1:1] | passed | 0.0001 seconds |
|
|
134
|
-
./spec/castkit/ext/attribute/validation_spec.rb[1:1:2:2:1] | passed | 0.00016 seconds |
|
|
135
|
-
./spec/castkit/ext/attribute/validation_spec.rb[1:1:3:1] | passed | 0.00008 seconds |
|
|
136
|
-
./spec/castkit/ext/attribute/validation_spec.rb[1:1:4:1:1] | passed | 0.00009 seconds |
|
|
137
|
-
./spec/castkit/ext/attribute/validation_spec.rb[1:1:4:2:1] | passed | 0.00019 seconds |
|
|
138
|
-
./spec/castkit/ext/attribute/validation_spec.rb[1:1:5:1:1] | passed | 0.00009 seconds |
|
|
139
|
-
./spec/castkit/ext/attribute/validation_spec.rb[1:1:5:2:1] | passed | 0.00011 seconds |
|
|
140
|
-
./spec/castkit/ext/data_object/deserialization_spec.rb[1:1:1] | passed | 0.0001 seconds |
|
|
141
|
-
./spec/castkit/ext/data_object/deserialization_spec.rb[1:2:1] | passed | 0.00005 seconds |
|
|
142
|
-
./spec/castkit/ext/data_object/deserialization_spec.rb[1:2:2] | passed | 0.00005 seconds |
|
|
143
|
-
./spec/castkit/ext/data_object/deserialization_spec.rb[1:3:1] | passed | 0.00016 seconds |
|
|
144
|
-
./spec/castkit/ext/data_object/deserialization_spec.rb[1:4:1] | passed | 0.00007 seconds |
|
|
145
|
-
./spec/castkit/ext/data_object/serialization_spec.rb[1:1:1] | passed | 0.00011 seconds |
|
|
146
|
-
./spec/castkit/ext/data_object/serialization_spec.rb[1:1:2] | passed | 0.00004 seconds |
|
|
147
|
-
./spec/castkit/ext/data_object/serialization_spec.rb[1:2:1] | passed | 0.00003 seconds |
|
|
148
|
-
./spec/castkit/ext/data_object/serialization_spec.rb[1:2:2] | passed | 0.00003 seconds |
|
|
149
|
-
./spec/castkit/ext/data_object/serialization_spec.rb[1:3:1] | passed | 0.00004 seconds |
|
|
150
|
-
./spec/castkit/ext/data_object/serialization_spec.rb[1:4:1] | passed | 0.00003 seconds |
|
|
151
|
-
./spec/castkit/ext/data_object/serialization_spec.rb[1:4:2] | passed | 0.00003 seconds |
|
|
152
|
-
./spec/castkit/serializer_spec.rb[1:1:1] | passed | 0.00004 seconds |
|
|
153
|
-
./spec/castkit/serializer_spec.rb[1:2:1] | passed | 0.00019 seconds |
|
|
154
|
-
./spec/castkit/serializer_spec.rb[1:3:1] | passed | 0.00006 seconds |
|
|
155
|
-
./spec/castkit/serializer_spec.rb[1:3:2] | passed | 0.00005 seconds |
|
|
156
|
-
./spec/castkit/serializer_spec.rb[1:4:1] | passed | 0.00004 seconds |
|
|
157
|
-
./spec/castkit/validators/numeric_validator_spec.rb[1:1:1:1] | passed | 0.00004 seconds |
|
|
158
|
-
./spec/castkit/validators/numeric_validator_spec.rb[1:1:2:1] | passed | 0.00012 seconds |
|
|
159
|
-
./spec/castkit/validators/numeric_validator_spec.rb[1:1:3:1] | passed | 0.00004 seconds |
|
|
160
|
-
./spec/castkit/validators/numeric_validator_spec.rb[1:1:4:1] | passed | 0.00003 seconds |
|
|
161
|
-
./spec/castkit/validators/string_validator_spec.rb[1:1:1:1:1] | passed | 0.00004 seconds |
|
|
162
|
-
./spec/castkit/validators/string_validator_spec.rb[1:1:1:1:2] | passed | 0.00004 seconds |
|
|
163
|
-
./spec/castkit/validators/string_validator_spec.rb[1:1:2:1] | passed | 0.00004 seconds |
|
|
164
|
-
./spec/castkit/validators/string_validator_spec.rb[1:1:2:2] | passed | 0.00003 seconds |
|
|
165
|
-
./spec/castkit/validators/string_validator_spec.rb[1:1:3:1] | passed | 0.00005 seconds |
|
|
166
|
-
./spec/castkit/validators/string_validator_spec.rb[1:1:3:2] | passed | 0.00003 seconds |
|
|
167
|
-
./spec/castkit/validators/string_validator_spec.rb[1:1:4:1] | passed | 0.00004 seconds |
|
|
168
|
-
./spec/castkit/validators/validator_spec.rb[1:1:1] | passed | 0.00004 seconds |
|
|
169
|
-
./spec/castkit/validators/validator_spec.rb[1:2:1] | passed | 0.00004 seconds |
|
|
170
|
-
./spec/castkit_spec.rb[1:1] | passed | 0.00003 seconds |
|
|
171
|
-
./spec/castkit_spec.rb[1:2:1:1] | passed | 0.00016 seconds |
|
|
172
|
-
./spec/castkit_spec.rb[1:2:1:2] | passed | 0.00008 seconds |
|
|
173
|
-
./spec/castkit_spec.rb[1:2:1:3] | passed | 0.00011 seconds |
|
|
174
|
-
./spec/castkit_spec.rb[1:2:1:4] | passed | 0.00011 seconds |
|
|
175
|
-
./spec/castkit_spec.rb[1:2:2:1] | passed | 0.00012 seconds |
|
|
176
|
-
./spec/castkit_spec.rb[1:2:2:2] | passed | 0.00016 seconds |
|
|
177
|
-
./spec/castkit_spec.rb[1:2:2:3] | passed | 0.00007 seconds |
|
|
178
|
-
./spec/castkit_spec.rb[1:2:3:1] | passed | 0.00006 seconds |
|
|
179
|
-
./spec/castkit_spec.rb[1:2:3:2] | passed | 0.00006 seconds |
|
|
180
|
-
./spec/castkit_spec.rb[1:2:3:3] | passed | 0.00005 seconds |
|
|
181
|
-
./spec/castkit_spec.rb[1:2:4:1] | passed | 0.00008 seconds |
|
|
182
|
-
./spec/castkit_spec.rb[1:3:1] | passed | 0.00026 seconds |
|
|
183
|
-
./spec/castkit_spec.rb[1:3:2] | passed | 0.00015 seconds |
|
|
184
|
-
./spec/castkit_spec.rb[1:3:3] | passed | 0.00017 seconds |
|
|
185
|
-
./spec/castkit_spec.rb[1:3:4] | passed | 0.00309 seconds |
|
|
186
|
-
./spec/castkit_spec.rb[1:3:5] | passed | 0.00224 seconds |
|
|
187
|
-
./spec/castkit_spec.rb[1:3:6] | passed | 0.00484 seconds |
|
|
188
|
-
./spec/castkit_spec.rb[1:3:7] | passed | 0.00022 seconds |
|
|
189
|
-
./spec/castkit_spec.rb[1:3:8] | passed | 0.00022 seconds |
|
|
190
|
-
./spec/configuration_spec.rb[1:1:1] | passed | 0.00015 seconds |
|
|
191
|
-
./spec/configuration_spec.rb[1:2:1] | passed | 0.00005 seconds |
|
|
192
|
-
./spec/configuration_spec.rb[1:3:1] | passed | 0.00005 seconds |
|
|
193
|
-
./spec/configuration_spec.rb[1:3:2] | passed | 0.00004 seconds |
|
|
194
|
-
./spec/configuration_spec.rb[1:3:3] | passed | 0.00004 seconds |
|
|
195
|
-
./spec/configuration_spec.rb[1:3:4] | passed | 0.00015 seconds |
|
|
196
|
-
./spec/configuration_spec.rb[1:4:1] | passed | 0.00009 seconds |
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative "../castkit"
|
|
4
|
-
|
|
5
|
-
module Castkit
|
|
6
|
-
module Core
|
|
7
|
-
# Provides methods to register dynamically generated contracts and data objects
|
|
8
|
-
# into the appropriate Castkit namespaces (`Castkit::Contracts`, `Castkit::DataObjects`).
|
|
9
|
-
#
|
|
10
|
-
# This is useful when working with ephemeral classes (e.g., from `Contract.build` or
|
|
11
|
-
# `.to_dataobject`) that should be persisted and referenced as constants.
|
|
12
|
-
#
|
|
13
|
-
# @example Registering a contract class
|
|
14
|
-
# contract = Castkit::Contract.build(:user) { string :id }
|
|
15
|
-
# contract.extend(Castkit::Core::Registerable)
|
|
16
|
-
# contract.register! # => Castkit::Contracts::User
|
|
17
|
-
#
|
|
18
|
-
# @example Registering a DTO
|
|
19
|
-
# dto = contract.to_dataobject
|
|
20
|
-
# dto.extend(Castkit::Core::Registerable)
|
|
21
|
-
# dto.register!(as: :UserDto) # => Castkit::DataObjects::UserDto
|
|
22
|
-
module Registerable
|
|
23
|
-
CASTKIT_NAMESPACES = {
|
|
24
|
-
contracts: Castkit::Contracts,
|
|
25
|
-
dataobjects: Castkit::DataObjects
|
|
26
|
-
}.freeze
|
|
27
|
-
|
|
28
|
-
# Registers the current class in the specified Castkit namespace.
|
|
29
|
-
#
|
|
30
|
-
# @param namespace [Symbol] `:contracts` or `:dataobjects`
|
|
31
|
-
# @param as [String, Symbol, nil] Optional constant name override (PascalCase).
|
|
32
|
-
# If not provided, falls back to the class's name (via `Inflector.pascalize(self.name)`).
|
|
33
|
-
#
|
|
34
|
-
# @raise [Castkit::Error] if class is anonymous or name already exists in the namespace
|
|
35
|
-
# @return [Class] the registered class
|
|
36
|
-
def register!(namespace:, as: nil)
|
|
37
|
-
name = Castkit::Inflector.pascalize(as || self.name)
|
|
38
|
-
raise Castkit::Error, "Unable to register anonymous classes, use as: ClassName" if name.nil?
|
|
39
|
-
|
|
40
|
-
ns = Castkit.const_get(namespace.to_s.capitalize, false)
|
|
41
|
-
raise Castkit::Error, "#{name} is already registered in #{ns}" if defined_in_namespace?(ns, name)
|
|
42
|
-
|
|
43
|
-
ns.const_set(name, self)
|
|
44
|
-
self
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
private
|
|
48
|
-
|
|
49
|
-
# Checks whether a constant is already defined in the given namespace.
|
|
50
|
-
#
|
|
51
|
-
# @param namespace [Module] target module (e.g., `Castkit::Contracts`)
|
|
52
|
-
# @param name [String, Symbol]
|
|
53
|
-
# @return [Boolean]
|
|
54
|
-
def defined_in_namespace?(namespace, name)
|
|
55
|
-
namespace.const_defined?(name.to_s.to_sym, false)
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
end
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative "serializer"
|
|
4
|
-
|
|
5
|
-
module Castkit
|
|
6
|
-
# Default serializer for Castkit::DataObject instances.
|
|
7
|
-
#
|
|
8
|
-
# Serializes attributes into a plain Ruby hash, applying access rules, nil/blank filtering,
|
|
9
|
-
# and nested structure handling. The output format supports JSON-compatible structures
|
|
10
|
-
# and respects the class-level serialization configuration.
|
|
11
|
-
class DefaultSerializer < Castkit::Serializer
|
|
12
|
-
# @return [Hash{Symbol => Castkit::Attribute}] the attributes to serialize
|
|
13
|
-
attr_reader :attributes
|
|
14
|
-
|
|
15
|
-
# @return [Hash{Symbol => Object}] unrecognized attributes captured during deserialization
|
|
16
|
-
attr_reader :unknown_attributes
|
|
17
|
-
|
|
18
|
-
# @return [Hash] serialization config flags like :root, :ignore_nil, :allow_unknown
|
|
19
|
-
attr_reader :options
|
|
20
|
-
|
|
21
|
-
# Serializes the object to a hash.
|
|
22
|
-
#
|
|
23
|
-
# Includes unknown attributes if configured, and wraps in a root key if defined.
|
|
24
|
-
#
|
|
25
|
-
# @return [Hash] the fully serialized result
|
|
26
|
-
def call
|
|
27
|
-
result = serialize_attributes
|
|
28
|
-
result.merge!(unknown_attributes) if options[:allow_unknown]
|
|
29
|
-
|
|
30
|
-
options[:root] ? { options[:root].to_sym => result } : result
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
private
|
|
34
|
-
|
|
35
|
-
# Initializes the serializer.
|
|
36
|
-
#
|
|
37
|
-
# @param obj [Castkit::DataObject] the object to serialize
|
|
38
|
-
# @param visited [Set, nil] tracks circular references
|
|
39
|
-
def initialize(obj, visited: nil)
|
|
40
|
-
super
|
|
41
|
-
|
|
42
|
-
@skip_flag = "__castkit_#{obj.object_id}"
|
|
43
|
-
@attributes = obj.class.attributes.freeze
|
|
44
|
-
@unknown_attributes = obj.unknown_attributes.freeze
|
|
45
|
-
@options = {
|
|
46
|
-
root: obj.class.root,
|
|
47
|
-
ignore_nil: obj.class.ignore_nil || false,
|
|
48
|
-
allow_unknown: obj.class.allow_unknown || false
|
|
49
|
-
}
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
# Serializes all defined attributes.
|
|
53
|
-
#
|
|
54
|
-
# @return [Hash] serialized attribute key-value pairs
|
|
55
|
-
def serialize_attributes
|
|
56
|
-
attributes.values.each_with_object({}) do |attribute, hash|
|
|
57
|
-
next if attribute.skip_serialization?
|
|
58
|
-
|
|
59
|
-
serialized_value = serialize_attribute(attribute)
|
|
60
|
-
next if serialized_value == @skip_flag
|
|
61
|
-
|
|
62
|
-
assign_attribute_key!(attribute, serialized_value, hash)
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
# Serializes a single attribute.
|
|
67
|
-
#
|
|
68
|
-
# @param attribute [Castkit::Attribute]
|
|
69
|
-
# @return [Object] the serialized value or skip flag
|
|
70
|
-
def serialize_attribute(attribute)
|
|
71
|
-
value = obj.public_send(attribute.field)
|
|
72
|
-
return @skip_flag if skip_nil?(attribute, value)
|
|
73
|
-
|
|
74
|
-
serialized_value = process_attribute(attribute, value)
|
|
75
|
-
return @skip_flag if skip_blank?(attribute, serialized_value)
|
|
76
|
-
|
|
77
|
-
serialized_value
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
# Delegates serialization based on type.
|
|
81
|
-
#
|
|
82
|
-
# @param attribute [Castkit::Attribute]
|
|
83
|
-
# @param value [Object]
|
|
84
|
-
# @return [Object]
|
|
85
|
-
def process_attribute(attribute, value)
|
|
86
|
-
if attribute.dataobject?
|
|
87
|
-
serialize_dataobject(attribute, value)
|
|
88
|
-
elsif attribute.dataobject_collection?
|
|
89
|
-
Array(value).map { |v| serialize_dataobject(attribute, v) }
|
|
90
|
-
else
|
|
91
|
-
type = Array(attribute.type).first
|
|
92
|
-
Castkit.type_serializer(type).call(value)
|
|
93
|
-
end
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
# Assigns value into nested hash structure based on key path.
|
|
97
|
-
#
|
|
98
|
-
# @param attribute [Castkit::Attribute]
|
|
99
|
-
# @param value [Object]
|
|
100
|
-
# @param hash [Hash]
|
|
101
|
-
# @return [void]
|
|
102
|
-
def assign_attribute_key!(attribute, value, hash)
|
|
103
|
-
key_path = attribute.key_path
|
|
104
|
-
last = key_path.pop
|
|
105
|
-
current = hash
|
|
106
|
-
|
|
107
|
-
key_path.each do |key|
|
|
108
|
-
current[key] ||= {}
|
|
109
|
-
current = current[key]
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
current[last] = value
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
# Whether to skip serialization for nil values.
|
|
116
|
-
#
|
|
117
|
-
# @param attribute [Castkit::Attribute]
|
|
118
|
-
# @param value [Object]
|
|
119
|
-
# @return [Boolean]
|
|
120
|
-
def skip_nil?(attribute, value)
|
|
121
|
-
value.nil? && (attribute.ignore_nil? || options[:ignore_nil])
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
# Whether to skip serialization for blank values.
|
|
125
|
-
#
|
|
126
|
-
# @param attribute [Castkit::Attribute]
|
|
127
|
-
# @param value [Object]
|
|
128
|
-
# @return [Boolean]
|
|
129
|
-
def skip_blank?(attribute, value)
|
|
130
|
-
blank?(value) && (attribute.ignore_blank? || options[:ignore_blank])
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
# True if value is nil or empty.
|
|
134
|
-
#
|
|
135
|
-
# @param value [Object]
|
|
136
|
-
# @return [Boolean]
|
|
137
|
-
def blank?(value)
|
|
138
|
-
value.nil? || (value.respond_to?(:empty?) && value.empty?)
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
# Serializes a DataObject using the proper serializer.
|
|
142
|
-
#
|
|
143
|
-
# @param attribute [Castkit::Attribute]
|
|
144
|
-
# @param value [Castkit::DataObject]
|
|
145
|
-
# @return [Object]
|
|
146
|
-
def serialize_dataobject(attribute, value)
|
|
147
|
-
serializer = attribute.options[:serializer]
|
|
148
|
-
serializer ||= value.class.serializer
|
|
149
|
-
serializer ||= Castkit::DefaultSerializer
|
|
150
|
-
|
|
151
|
-
serializer.call(value, visited: visited)
|
|
152
|
-
end
|
|
153
|
-
end
|
|
154
|
-
end
|