datory 1.0.0.rc11 → 1.0.0.rc12
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/README.md +122 -1
- data/lib/datory/attributes/attribute.rb +36 -4
- data/lib/datory/attributes/collection.rb +15 -1
- data/lib/datory/attributes/descriptor.rb +5 -1
- data/lib/datory/attributes/deserialization/service_factory.rb +2 -18
- data/lib/datory/attributes/dsl.rb +28 -0
- data/lib/datory/attributes/serialization/service_factory.rb +2 -18
- data/lib/datory/base.rb +1 -0
- data/lib/datory/context/callable.rb +2 -2
- data/lib/datory/info/dsl.rb +32 -0
- data/lib/datory/info/result.rb +13 -0
- data/lib/datory/service/base.rb +6 -2
- data/lib/datory/service/builder.rb +66 -0
- data/lib/datory/version.rb +1 -1
- metadata +7 -6
- data/lib/datory/utils.rb +0 -41
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 198bd72a333d4fa2fe2ee18935d586ab10f6185c7b51c6cb94f2627f5698fb52
|
4
|
+
data.tar.gz: 6aa7c4bf85587d02a38e79de2135c83bed01be5153a644c0892433887dd1b982
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ed216465c59651df53b3170a9381a058a26b5dcaa48058b20300eae6111f9ef582b198391f3813f49e886759c18844a621c4b1a77d9d4a131080fda9ed2e5608
|
7
|
+
data.tar.gz: df02fd6e1eabc40683e506052d448aa9f563f857a52fc48972482b30e962a6571801f9c816ca805bbe1fed8b1acf4c8310d6784374281ecfeb075c1d182480ab
|
data/README.md
CHANGED
@@ -67,11 +67,132 @@ class UserLoginDto < Datory::Base
|
|
67
67
|
end
|
68
68
|
```
|
69
69
|
|
70
|
+
## Attribute declaration
|
71
|
+
|
72
|
+
### Basic
|
73
|
+
|
74
|
+
#### attribute
|
75
|
+
|
76
|
+
```ruby
|
77
|
+
attribute :firstname, from: String, to: :first_name, as: String
|
78
|
+
```
|
79
|
+
|
80
|
+
#### string
|
81
|
+
|
82
|
+
```ruby
|
83
|
+
string :first_name
|
84
|
+
```
|
85
|
+
|
86
|
+
#### integer
|
87
|
+
|
88
|
+
```ruby
|
89
|
+
integer :attempts, min: 1, max: 10
|
90
|
+
```
|
91
|
+
|
92
|
+
#### float
|
93
|
+
|
94
|
+
```ruby
|
95
|
+
float :interest_rate
|
96
|
+
```
|
97
|
+
|
98
|
+
### Helpers
|
99
|
+
|
100
|
+
#### uuid
|
101
|
+
|
102
|
+
It will also check that the value matches the UUID format.
|
103
|
+
|
104
|
+
```ruby
|
105
|
+
uuid :id
|
106
|
+
```
|
107
|
+
|
108
|
+
#### money
|
109
|
+
|
110
|
+
It will prepare two attributes `*_cents` and `*_currency`.
|
111
|
+
|
112
|
+
```ruby
|
113
|
+
money :price
|
114
|
+
```
|
115
|
+
|
116
|
+
#### duration
|
117
|
+
|
118
|
+
```ruby
|
119
|
+
duration :lifetime
|
120
|
+
```
|
121
|
+
|
122
|
+
#### date
|
123
|
+
|
124
|
+
```ruby
|
125
|
+
date :birth_date
|
126
|
+
```
|
127
|
+
|
128
|
+
#### time
|
129
|
+
|
130
|
+
```ruby
|
131
|
+
time :registered_at
|
132
|
+
```
|
133
|
+
|
134
|
+
#### datetime
|
135
|
+
|
136
|
+
```ruby
|
137
|
+
datetime :registered_at
|
138
|
+
```
|
139
|
+
|
140
|
+
### Nesting
|
141
|
+
|
142
|
+
#### one
|
143
|
+
|
144
|
+
```ruby
|
145
|
+
one :company, include: UserCompanyDto
|
146
|
+
```
|
147
|
+
|
148
|
+
#### many
|
149
|
+
|
150
|
+
```ruby
|
151
|
+
many :addresses, include: UserAddressDto
|
152
|
+
```
|
153
|
+
|
154
|
+
## Object information
|
155
|
+
|
156
|
+
### Info
|
157
|
+
|
158
|
+
```ruby
|
159
|
+
UserDto.info
|
160
|
+
```
|
161
|
+
|
162
|
+
```
|
163
|
+
#<Datory::Info::Result:0x00000001069c45d0 @attributes={:id=>{:from=>String, :to=>:id, :as=>String, :include=>nil}, :firstname=>{:from=>String, :to=>:first_name, :as=>String, :include=>nil}, :lastname=>{:from=>String, :to=>:last_name, :as=>String, :include=>nil}, :email=>{:from=>String, :to=>:email, :as=>String, :include=>nil}, :phone=>{:from=>String, :to=>:phone, :as=>String, :include=>nil}, :website=>{:from=>String, :to=>:website, :as=>String, :include=>nil}, :birthDate=>{:from=>String, :to=>:birth_date, :as=>Date, :include=>nil}, :login=>{:from=>Hash, :to=>:login, :as=>[Datory::Result, Hash], :include=>Usual::Example1::UserLogin}, :company=>{:from=>Hash, :to=>:company, :as=>[Datory::Result, Hash], :include=>Usual::Example1::UserCompany}, :addresses=>{:from=>Array, :to=>:addresses, :as=>Array, :include=>Usual::Example1::UserAddress}}>
|
164
|
+
```
|
165
|
+
|
166
|
+
### Describe
|
167
|
+
|
168
|
+
```ruby
|
169
|
+
UserDto.describe
|
170
|
+
```
|
171
|
+
|
172
|
+
```
|
173
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
174
|
+
| UserDto |
|
175
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
176
|
+
| Attribute | From | To | As | Include |
|
177
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
178
|
+
| id | String | id | String | |
|
179
|
+
| firstname | String | first_name | String | |
|
180
|
+
| lastname | String | last_name | String | |
|
181
|
+
| email | String | email | String | |
|
182
|
+
| phone | String | phone | String | |
|
183
|
+
| website | String | website | String | |
|
184
|
+
| birthDate | String | birth_date | Date | |
|
185
|
+
| login | Hash | login | [Datory::Result, Hash] | Usual::Example1::UserLogin |
|
186
|
+
| company | Hash | company | [Datory::Result, Hash] | Usual::Example1::UserCompany |
|
187
|
+
| addresses | Array | addresses | Array | Usual::Example1::UserAddress |
|
188
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
189
|
+
```
|
190
|
+
|
70
191
|
## Contributing
|
71
192
|
|
72
193
|
This project is intended to be a safe, welcoming space for collaboration.
|
73
194
|
Contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
74
|
-
We recommend reading the [contributing guide](./
|
195
|
+
We recommend reading the [contributing guide](./CONTRIBUTING.md) as well.
|
75
196
|
|
76
197
|
## License
|
77
198
|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
module Datory
|
4
4
|
module Attributes
|
5
|
-
class Attribute
|
5
|
+
class Attribute # rubocop:disable Metrics/ClassLength
|
6
6
|
attr_reader :name, :options
|
7
7
|
|
8
8
|
def initialize(name, **options)
|
@@ -10,7 +10,7 @@ module Datory
|
|
10
10
|
@options = options
|
11
11
|
end
|
12
12
|
|
13
|
-
def input_serialization_options
|
13
|
+
def input_serialization_options # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
14
14
|
hash = {
|
15
15
|
as: options.fetch(:to, name),
|
16
16
|
type: options.fetch(:as, options.fetch(:from)),
|
@@ -18,6 +18,14 @@ module Datory
|
|
18
18
|
consists_of: options.fetch(:consists_of, false)
|
19
19
|
}
|
20
20
|
|
21
|
+
if (min = options.fetch(:min, nil)).present?
|
22
|
+
hash[:min] = min
|
23
|
+
end
|
24
|
+
|
25
|
+
if (max = options.fetch(:max, nil)).present?
|
26
|
+
hash[:max] = max
|
27
|
+
end
|
28
|
+
|
21
29
|
if (format = options.fetch(:format, nil)).present?
|
22
30
|
hash[:format] = format
|
23
31
|
end
|
@@ -45,6 +53,14 @@ module Datory
|
|
45
53
|
end)
|
46
54
|
}
|
47
55
|
|
56
|
+
if (min = options.fetch(:min, nil)).present?
|
57
|
+
hash[:min] = min
|
58
|
+
end
|
59
|
+
|
60
|
+
if (max = options.fetch(:max, nil)).present?
|
61
|
+
hash[:max] = max
|
62
|
+
end
|
63
|
+
|
48
64
|
if (format = options.fetch(:format, nil)).present?
|
49
65
|
hash[:format] = format
|
50
66
|
end
|
@@ -52,7 +68,7 @@ module Datory
|
|
52
68
|
hash
|
53
69
|
end
|
54
70
|
|
55
|
-
def output_serialization_options # rubocop:disable Metrics/MethodLength
|
71
|
+
def output_serialization_options # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/PerceivedComplexity
|
56
72
|
hash = {
|
57
73
|
consists_of: if (consists_of_type = options.fetch(:consists_of, false)) == Hash
|
58
74
|
Datory::Result
|
@@ -68,6 +84,14 @@ module Datory
|
|
68
84
|
end
|
69
85
|
}
|
70
86
|
|
87
|
+
if (min = options.fetch(:min, nil)).present?
|
88
|
+
hash[:min] = min
|
89
|
+
end
|
90
|
+
|
91
|
+
if (max = options.fetch(:max, nil)).present?
|
92
|
+
hash[:max] = max
|
93
|
+
end
|
94
|
+
|
71
95
|
if (format = options.fetch(:format, nil)).present?
|
72
96
|
hash[:format] = format
|
73
97
|
end
|
@@ -75,7 +99,7 @@ module Datory
|
|
75
99
|
hash
|
76
100
|
end
|
77
101
|
|
78
|
-
def output_deserialization_options # rubocop:disable Metrics/MethodLength
|
102
|
+
def output_deserialization_options # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/PerceivedComplexity
|
79
103
|
hash = {
|
80
104
|
consists_of: if (consists_of_type = options.fetch(:consists_of, false)) == Hash
|
81
105
|
Datory::Result
|
@@ -91,6 +115,14 @@ module Datory
|
|
91
115
|
end
|
92
116
|
}
|
93
117
|
|
118
|
+
if (min = options.fetch(:min, nil)).present?
|
119
|
+
hash[:min] = min
|
120
|
+
end
|
121
|
+
|
122
|
+
if (max = options.fetch(:max, nil)).present?
|
123
|
+
hash[:max] = max
|
124
|
+
end
|
125
|
+
|
94
126
|
if (format = options.fetch(:format, nil)).present?
|
95
127
|
hash[:format] = format
|
96
128
|
end
|
@@ -4,7 +4,7 @@ module Datory
|
|
4
4
|
module Attributes
|
5
5
|
class Collection
|
6
6
|
extend Forwardable
|
7
|
-
def_delegators :@collection, :<<, :each, :map, :to_h, :merge
|
7
|
+
def_delegators :@collection, :<<, :each, :map, :filter, :to_h, :merge
|
8
8
|
|
9
9
|
def initialize(collection = Set.new)
|
10
10
|
@collection = collection
|
@@ -17,6 +17,20 @@ module Datory
|
|
17
17
|
def internal_names
|
18
18
|
map { |attribute| attribute.options.fetch(:to, attribute.name) }
|
19
19
|
end
|
20
|
+
|
21
|
+
def include_exist?
|
22
|
+
@include_exist ||= filter do |attribute| # rubocop:disable Performance/Count
|
23
|
+
include_class = attribute.options.fetch(:include, nil)
|
24
|
+
|
25
|
+
next false if include_class.nil?
|
26
|
+
|
27
|
+
if [Set, Array].include?(include_class)
|
28
|
+
include_class.any? { |item| item <= Datory::Base }
|
29
|
+
else
|
30
|
+
include_class <= Datory::Base
|
31
|
+
end
|
32
|
+
end.size.positive?
|
33
|
+
end
|
20
34
|
end
|
21
35
|
end
|
22
36
|
end
|
@@ -15,6 +15,7 @@ module Datory
|
|
15
15
|
headings << "From"
|
16
16
|
headings << "To"
|
17
17
|
headings << "As"
|
18
|
+
headings << "Include" if collection_of_attributes.include_exist?
|
18
19
|
|
19
20
|
collection_of_attributes.each do |attribute|
|
20
21
|
row = []
|
@@ -22,10 +23,13 @@ module Datory
|
|
22
23
|
row << attribute.name
|
23
24
|
|
24
25
|
from_type = attribute.options.fetch(:from)
|
26
|
+
include = attribute.options.fetch(:include, from_type)
|
25
27
|
|
26
28
|
row << from_type
|
27
29
|
row << attribute.options.fetch(:to, attribute.name)
|
28
|
-
row << attribute.options.fetch(:as,
|
30
|
+
row << attribute.options.fetch(:as, include)
|
31
|
+
|
32
|
+
row << (include if include <= Datory::Base) if collection_of_attributes.include_exist?
|
29
33
|
|
30
34
|
rows << row
|
31
35
|
end
|
@@ -21,28 +21,12 @@ module Datory
|
|
21
21
|
@model_class.const_set(ServiceBuilder::SERVICE_CLASS_NAME, class_sample)
|
22
22
|
end
|
23
23
|
|
24
|
-
def create_service_class
|
24
|
+
def create_service_class
|
25
25
|
collection_of_attributes = @collection_of_attributes
|
26
26
|
|
27
27
|
Class.new(Datory::Service::Builder) do
|
28
28
|
collection_of_attributes.each do |attribute|
|
29
|
-
|
30
|
-
|
31
|
-
input attribute.name, **attribute.input_deserialization_options
|
32
|
-
|
33
|
-
output input_internal_name, **attribute.output_deserialization_options
|
34
|
-
|
35
|
-
make :"assign_#{input_internal_name}_output"
|
36
|
-
|
37
|
-
define_method(:"assign_#{input_internal_name}_output") do
|
38
|
-
value = inputs.public_send(input_internal_name)
|
39
|
-
|
40
|
-
type_as = attribute.options.fetch(:as, nil)
|
41
|
-
|
42
|
-
value = Datory::Utils.transform_value_with(:d, value, type_as)
|
43
|
-
|
44
|
-
outputs.public_send(:"#{input_internal_name}=", value)
|
45
|
-
end
|
29
|
+
prepare_deserialization_data_for(attribute)
|
46
30
|
end
|
47
31
|
end
|
48
32
|
end
|
@@ -51,6 +51,34 @@ module Datory
|
|
51
51
|
string(name, **options)
|
52
52
|
end
|
53
53
|
|
54
|
+
def money(name, **options)
|
55
|
+
options_for_cents = options.merge(from: Integer)
|
56
|
+
options_for_currency = options.merge(from: [Symbol, String])
|
57
|
+
|
58
|
+
attribute(:"#{name}_cents", **options_for_cents)
|
59
|
+
attribute(:"#{name}_currency", **options_for_currency)
|
60
|
+
end
|
61
|
+
|
62
|
+
def duration(name, **options)
|
63
|
+
options = options.merge(from: String, as: ActiveSupport::Duration) # TODO: Add `format: :duration`
|
64
|
+
string(name, **options)
|
65
|
+
end
|
66
|
+
|
67
|
+
def date(name, **options)
|
68
|
+
options = options.merge(from: String, as: Date) # TODO: Add `format: :date`
|
69
|
+
string(name, **options)
|
70
|
+
end
|
71
|
+
|
72
|
+
def time(name, **options)
|
73
|
+
options = options.merge(from: String, as: Time) # TODO: Add `format: :time`
|
74
|
+
string(name, **options)
|
75
|
+
end
|
76
|
+
|
77
|
+
def datetime(name, **options)
|
78
|
+
options = options.merge(from: String, as: DateTime) # TODO: Add `format: :datetime`
|
79
|
+
string(name, **options)
|
80
|
+
end
|
81
|
+
|
54
82
|
########################################################################
|
55
83
|
|
56
84
|
def string(name, **options)
|
@@ -21,28 +21,12 @@ module Datory
|
|
21
21
|
@model_class.const_set(ServiceBuilder::SERVICE_CLASS_NAME, class_sample)
|
22
22
|
end
|
23
23
|
|
24
|
-
def create_service_class
|
24
|
+
def create_service_class
|
25
25
|
collection_of_attributes = @collection_of_attributes
|
26
26
|
|
27
27
|
Class.new(Datory::Service::Builder) do
|
28
28
|
collection_of_attributes.each do |attribute|
|
29
|
-
|
30
|
-
|
31
|
-
input input_internal_name, **attribute.input_serialization_options
|
32
|
-
|
33
|
-
output attribute.name, **attribute.output_serialization_options
|
34
|
-
|
35
|
-
make :"assign_#{attribute.name}_output"
|
36
|
-
|
37
|
-
define_method(:"assign_#{attribute.name}_output") do
|
38
|
-
value = inputs.public_send(input_internal_name)
|
39
|
-
|
40
|
-
from_type = attribute.options.fetch(:from)
|
41
|
-
|
42
|
-
value = Datory::Utils.transform_value_with(:s, value, from_type)
|
43
|
-
|
44
|
-
outputs.public_send(:"#{attribute.name}=", value)
|
45
|
-
end
|
29
|
+
prepare_serialization_data_for(attribute)
|
46
30
|
end
|
47
31
|
end
|
48
32
|
end
|
data/lib/datory/base.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
module Datory
|
4
4
|
module Context
|
5
5
|
module Callable
|
6
|
-
def serialize(model)
|
6
|
+
def serialize(model) # rubocop:disable Metrics/MethodLength
|
7
7
|
if [Set, Array].include?(model.class)
|
8
8
|
model.map do |model_item|
|
9
9
|
serialize(model_item)
|
@@ -19,7 +19,7 @@ module Datory
|
|
19
19
|
raise Datory::Exceptions::SerializationError.new(message: e.message)
|
20
20
|
end
|
21
21
|
|
22
|
-
def deserialize(json)
|
22
|
+
def deserialize(json) # rubocop:disable Metrics/MethodLength
|
23
23
|
if [Set, Array].include?(json.class)
|
24
24
|
json.map do |json_item|
|
25
25
|
deserialize(json_item)
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datory
|
4
|
+
module Info
|
5
|
+
module DSL
|
6
|
+
def self.included(base)
|
7
|
+
base.extend(ClassMethods)
|
8
|
+
end
|
9
|
+
|
10
|
+
module ClassMethods
|
11
|
+
def info # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
12
|
+
Datory::Info::Result.new(
|
13
|
+
attributes: collection_of_attributes.to_h do |attribute|
|
14
|
+
type_from = attribute.options.fetch(:from)
|
15
|
+
|
16
|
+
options = {
|
17
|
+
from: type_from,
|
18
|
+
to: attribute.options.fetch(:to, attribute.name),
|
19
|
+
as: attribute.options.fetch(:as, type_from),
|
20
|
+
min: attribute.options.fetch(:min, nil),
|
21
|
+
max: attribute.options.fetch(:max, nil),
|
22
|
+
include: attribute.options.fetch(:include, nil)
|
23
|
+
}
|
24
|
+
|
25
|
+
[attribute.name, options]
|
26
|
+
end
|
27
|
+
)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/datory/service/base.rb
CHANGED
@@ -15,11 +15,15 @@ module Datory
|
|
15
15
|
result_class Datory::Result
|
16
16
|
|
17
17
|
input_option_helpers [
|
18
|
-
Servactory::ToolKit::DynamicOptions::Format.use
|
18
|
+
Servactory::ToolKit::DynamicOptions::Format.use,
|
19
|
+
Servactory::ToolKit::DynamicOptions::Min.use,
|
20
|
+
Servactory::ToolKit::DynamicOptions::Max.use
|
19
21
|
]
|
20
22
|
|
21
23
|
output_option_helpers [
|
22
|
-
Servactory::ToolKit::DynamicOptions::Format.use
|
24
|
+
Servactory::ToolKit::DynamicOptions::Format.use,
|
25
|
+
Servactory::ToolKit::DynamicOptions::Min.use,
|
26
|
+
Servactory::ToolKit::DynamicOptions::Max.use
|
23
27
|
]
|
24
28
|
|
25
29
|
predicate_methods_enabled false
|
@@ -3,6 +3,72 @@
|
|
3
3
|
module Datory
|
4
4
|
module Service
|
5
5
|
class Builder < Base
|
6
|
+
TRANSFORMATIONS = {
|
7
|
+
SERIALIZATION: {
|
8
|
+
Symbol => ->(value) { value.to_sym },
|
9
|
+
String => ->(value) { value.to_s },
|
10
|
+
Integer => ->(value) { value.to_i },
|
11
|
+
Float => ->(value) { value.to_f },
|
12
|
+
Date => ->(value) { value.to_s },
|
13
|
+
Time => ->(value) { value.to_s },
|
14
|
+
DateTime => ->(value) { value.to_s },
|
15
|
+
ActiveSupport::Duration => ->(value) { value.iso8601 }
|
16
|
+
},
|
17
|
+
DESERIALIZATION: {
|
18
|
+
Symbol => ->(value) { value.to_sym },
|
19
|
+
String => ->(value) { value.to_s },
|
20
|
+
Integer => ->(value) { value.to_i },
|
21
|
+
Float => ->(value) { value.to_f },
|
22
|
+
Date => ->(value) { Date.parse(value) },
|
23
|
+
Time => ->(value) { Time.parse(value) },
|
24
|
+
DateTime => ->(value) { DateTime.parse(value) },
|
25
|
+
ActiveSupport::Duration => ->(value) { ActiveSupport::Duration.parse(value) }
|
26
|
+
}
|
27
|
+
}.freeze
|
28
|
+
|
29
|
+
private_constant :TRANSFORMATIONS
|
30
|
+
|
31
|
+
def self.prepare_serialization_data_for(attribute) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
32
|
+
serialized_name = attribute.name
|
33
|
+
deserialized_name = attribute.options.fetch(:to, serialized_name)
|
34
|
+
method_name = :"assign_#{serialized_name}_output"
|
35
|
+
|
36
|
+
input deserialized_name, **attribute.input_serialization_options
|
37
|
+
|
38
|
+
output serialized_name, **attribute.output_serialization_options
|
39
|
+
|
40
|
+
make method_name
|
41
|
+
|
42
|
+
define_method(method_name) do
|
43
|
+
value = inputs.public_send(deserialized_name)
|
44
|
+
|
45
|
+
value = TRANSFORMATIONS.fetch(:SERIALIZATION).fetch(value.class, ->(v) { v }).call(value)
|
46
|
+
|
47
|
+
outputs.public_send(:"#{serialized_name}=", value)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.prepare_deserialization_data_for(attribute) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
52
|
+
serialized_name = attribute.name
|
53
|
+
deserialized_name = attribute.options.fetch(:to, serialized_name)
|
54
|
+
method_name = :"assign_#{deserialized_name}_output"
|
55
|
+
|
56
|
+
input serialized_name, **attribute.input_deserialization_options
|
57
|
+
|
58
|
+
output deserialized_name, **attribute.output_deserialization_options
|
59
|
+
|
60
|
+
make method_name
|
61
|
+
|
62
|
+
define_method(method_name) do
|
63
|
+
value = inputs.public_send(deserialized_name)
|
64
|
+
|
65
|
+
type_as = attribute.options.fetch(:as, nil)
|
66
|
+
|
67
|
+
value = TRANSFORMATIONS.fetch(:DESERIALIZATION).fetch(type_as, ->(v) { v }).call(value)
|
68
|
+
|
69
|
+
outputs.public_send(:"#{deserialized_name}=", value)
|
70
|
+
end
|
71
|
+
end
|
6
72
|
end
|
7
73
|
end
|
8
74
|
end
|
data/lib/datory/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: datory
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
4
|
+
version: 1.0.0.rc12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anton Sokolov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-04-
|
11
|
+
date: 2024-04-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -50,14 +50,14 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - '='
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: 2.5.0.
|
53
|
+
version: 2.5.0.rc7
|
54
54
|
type: :runtime
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
58
|
- - '='
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: 2.5.0.
|
60
|
+
version: 2.5.0.rc7
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: terminal-table
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -228,11 +228,12 @@ files:
|
|
228
228
|
- lib/datory/context/workspace.rb
|
229
229
|
- lib/datory/engine.rb
|
230
230
|
- lib/datory/exceptions.rb
|
231
|
+
- lib/datory/info/dsl.rb
|
232
|
+
- lib/datory/info/result.rb
|
231
233
|
- lib/datory/result.rb
|
232
234
|
- lib/datory/service/base.rb
|
233
235
|
- lib/datory/service/builder.rb
|
234
236
|
- lib/datory/service/exceptions.rb
|
235
|
-
- lib/datory/utils.rb
|
236
237
|
- lib/datory/version.rb
|
237
238
|
homepage: https://github.com/servactory/datory
|
238
239
|
licenses:
|
@@ -259,7 +260,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
259
260
|
- !ruby/object:Gem::Version
|
260
261
|
version: '0'
|
261
262
|
requirements: []
|
262
|
-
rubygems_version: 3.5.
|
263
|
+
rubygems_version: 3.5.9
|
263
264
|
signing_key:
|
264
265
|
specification_version: 4
|
265
266
|
summary: A set of tools for building reliable services of any complexity
|
data/lib/datory/utils.rb
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Datory
|
4
|
-
module Utils
|
5
|
-
module_function
|
6
|
-
|
7
|
-
D_TRANSFORMATIONS = {
|
8
|
-
Symbol => ->(value) { value.to_sym },
|
9
|
-
String => ->(value) { value.to_s },
|
10
|
-
Integer => ->(value) { value.to_i },
|
11
|
-
Float => ->(value) { value.to_f },
|
12
|
-
Date => ->(value) { Date.parse(value) },
|
13
|
-
Time => ->(value) { Time.parse(value) },
|
14
|
-
DateTime => ->(value) { DateTime.parse(value) },
|
15
|
-
ActiveSupport::Duration => ->(value) { ActiveSupport::Duration.parse(value) }
|
16
|
-
}.freeze
|
17
|
-
|
18
|
-
private_constant :D_TRANSFORMATIONS
|
19
|
-
|
20
|
-
S_TRANSFORMATIONS = {
|
21
|
-
Symbol => ->(value, _type) { value.to_sym },
|
22
|
-
String => ->(value, _type) { value.to_s },
|
23
|
-
Integer => ->(value, _type) { value.to_i },
|
24
|
-
Float => ->(value, _type) { value.to_f },
|
25
|
-
Date => ->(value, _type) { value.to_s },
|
26
|
-
Time => ->(value, _type) { value.to_s },
|
27
|
-
DateTime => ->(value, _type) { value.to_s },
|
28
|
-
ActiveSupport::Duration => ->(value, _type) { value.iso8601 }
|
29
|
-
}.freeze
|
30
|
-
|
31
|
-
private_constant :S_TRANSFORMATIONS
|
32
|
-
|
33
|
-
def transform_value_with(format, value, type)
|
34
|
-
if format == :d
|
35
|
-
D_TRANSFORMATIONS.fetch(type, ->(v) { v }).call(value)
|
36
|
-
else
|
37
|
-
S_TRANSFORMATIONS.fetch(value.class, ->(v, _type) { v }).call(value, type)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|