datory 1.0.0.rc9 → 1.0.0.rc10
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/lib/datory/attributes/descriptor.rb +37 -0
- data/lib/datory/attributes/serialization/model.rb +48 -0
- data/lib/datory/attributes/serialization/serializator.rb +1 -1
- data/lib/datory/console.rb +25 -0
- data/lib/datory/context/callable.rb +18 -0
- data/lib/datory/version.rb +1 -1
- metadata +19 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1e6931d46c3dd6929ceb0e0954c116eda8a1af5e8e04126adbec8a12a9505afd
|
4
|
+
data.tar.gz: cc93ae958f1d03eac21840ef6219bead651fbf78d00bb8a09f9f3adbf431fe69
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f93c7d0bfb210d5b7f71fe0334f9e5d92aaa4d2d915ea7b1c9e116734ac46e863cb59405a95c8ba30c355dd712b830d03db6901bd9a740cc179bf4722c25cc3
|
7
|
+
data.tar.gz: d94430f29e119f6e64601c4f3c9258a4b9e8f4e9168edf416e7f6c12628d510158a639ecd1e101e38e79eb7c7439ad84422c2a0f5ae22b977b8eee6e4109c1bc
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datory
|
4
|
+
module Attributes
|
5
|
+
class Descriptor
|
6
|
+
def self.describe(...)
|
7
|
+
new.describe(...)
|
8
|
+
end
|
9
|
+
|
10
|
+
def describe(collection_of_attributes:) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
11
|
+
headings = []
|
12
|
+
rows = []
|
13
|
+
|
14
|
+
headings << "Attribute"
|
15
|
+
headings << "From"
|
16
|
+
headings << "To"
|
17
|
+
headings << "As"
|
18
|
+
|
19
|
+
collection_of_attributes.each do |attribute|
|
20
|
+
row = []
|
21
|
+
|
22
|
+
row << attribute.name
|
23
|
+
|
24
|
+
from_type = attribute.options.fetch(:from)
|
25
|
+
|
26
|
+
row << from_type
|
27
|
+
row << attribute.options.fetch(:to, attribute.name)
|
28
|
+
row << attribute.options.fetch(:as, attribute.options.fetch(:include, from_type))
|
29
|
+
|
30
|
+
rows << row
|
31
|
+
end
|
32
|
+
|
33
|
+
Datory::Console.print_table(headings.uniq, rows)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datory
|
4
|
+
module Attributes
|
5
|
+
module Serialization
|
6
|
+
class Model
|
7
|
+
def self.prepare(...)
|
8
|
+
new.prepare(...)
|
9
|
+
end
|
10
|
+
|
11
|
+
def prepare(data) # rubocop:disable Metrics/MethodLength
|
12
|
+
if data.is_a?(Array)
|
13
|
+
data.map do |item|
|
14
|
+
if item.is_a?(Hash)
|
15
|
+
build(item)
|
16
|
+
else
|
17
|
+
item
|
18
|
+
end
|
19
|
+
end
|
20
|
+
elsif data.is_a?(Hash)
|
21
|
+
build(data)
|
22
|
+
else
|
23
|
+
data
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def build(attributes = {}) # rubocop:disable Metrics/MethodLength
|
28
|
+
attributes.each do |key, value|
|
29
|
+
self.class.send(:attr_accessor, key)
|
30
|
+
|
31
|
+
instance_variable_set(:"@#{key}", value)
|
32
|
+
|
33
|
+
if value.is_a?(Array)
|
34
|
+
value.map! { |item| Datory::Attributes::Serialization::Model.prepare(item) }
|
35
|
+
instance_variable_set(:"@#{key}", value)
|
36
|
+
elsif value.is_a?(Hash)
|
37
|
+
instance_variable_set(:"@#{key}", Datory::Attributes::Serialization::Model.prepare(value))
|
38
|
+
else
|
39
|
+
instance_variable_set(:"@#{key}", value)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
self
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "terminal-table"
|
4
|
+
|
5
|
+
module Datory
|
6
|
+
class Console
|
7
|
+
def self.print_table(headings, rows)
|
8
|
+
table = Terminal::Table.new(
|
9
|
+
headings: headings,
|
10
|
+
rows: rows,
|
11
|
+
style: { border_x: "~", border_i: "~" }
|
12
|
+
)
|
13
|
+
|
14
|
+
new(table.to_s).print
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize(text)
|
18
|
+
@text = text
|
19
|
+
end
|
20
|
+
|
21
|
+
def print
|
22
|
+
puts @text
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -4,6 +4,8 @@ module Datory
|
|
4
4
|
module Context
|
5
5
|
module Callable
|
6
6
|
def serialize(model)
|
7
|
+
model = Datory::Attributes::Serialization::Model.prepare(model)
|
8
|
+
|
7
9
|
Datory::Attributes::Serialization::Serializator.serialize(
|
8
10
|
model: model,
|
9
11
|
collection_of_attributes: collection_of_attributes
|
@@ -21,6 +23,16 @@ module Datory
|
|
21
23
|
end
|
22
24
|
end
|
23
25
|
|
26
|
+
def to_model(**attributes)
|
27
|
+
context = send(:new)
|
28
|
+
|
29
|
+
attributes.each do |attribute_name, attribute_value|
|
30
|
+
context.define_singleton_method(attribute_name) { attribute_value }
|
31
|
+
end
|
32
|
+
|
33
|
+
context
|
34
|
+
end
|
35
|
+
|
24
36
|
# def build!(attributes = {})
|
25
37
|
# context = send(:new)
|
26
38
|
#
|
@@ -33,6 +45,12 @@ module Datory
|
|
33
45
|
_build!(context, **attributes)
|
34
46
|
end
|
35
47
|
|
48
|
+
def describe
|
49
|
+
Datory::Attributes::Descriptor.describe(
|
50
|
+
collection_of_attributes: collection_of_attributes
|
51
|
+
)
|
52
|
+
end
|
53
|
+
|
36
54
|
private
|
37
55
|
|
38
56
|
def _build!(context, **attributes)
|
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.rc10
|
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-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -58,6 +58,20 @@ dependencies:
|
|
58
58
|
- - '='
|
59
59
|
- !ruby/object:Gem::Version
|
60
60
|
version: 2.5.0.rc6
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: terminal-table
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '3.0'
|
68
|
+
type: :runtime
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '3.0'
|
61
75
|
- !ruby/object:Gem::Dependency
|
62
76
|
name: zeitwerk
|
63
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -198,12 +212,15 @@ files:
|
|
198
212
|
- lib/datory.rb
|
199
213
|
- lib/datory/attributes/attribute.rb
|
200
214
|
- lib/datory/attributes/collection.rb
|
215
|
+
- lib/datory/attributes/descriptor.rb
|
201
216
|
- lib/datory/attributes/dsl.rb
|
217
|
+
- lib/datory/attributes/serialization/model.rb
|
202
218
|
- lib/datory/attributes/serialization/serializator.rb
|
203
219
|
- lib/datory/attributes/tools/service_builder.rb
|
204
220
|
- lib/datory/attributes/tools/service_factory.rb
|
205
221
|
- lib/datory/attributes/workspace.rb
|
206
222
|
- lib/datory/base.rb
|
223
|
+
- lib/datory/console.rb
|
207
224
|
- lib/datory/context/callable.rb
|
208
225
|
- lib/datory/context/dsl.rb
|
209
226
|
- lib/datory/context/workspace.rb
|