datory 1.0.0.rc13 → 1.0.0.rc15

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ad1cc00d4916767ce4e99d5cd52cde2f9640c4ea536f602e0ade8e5008b61820
4
- data.tar.gz: 012e57a2c905b6de960fb1cd32e1719f1f876c630cc77b37ea7e8ee31427dae8
3
+ metadata.gz: 7cf1723be06fbf81937c9e8e9b20cf1e37f3d70765dbfde943fc0e3640ab3c13
4
+ data.tar.gz: 90f48cba076d54721d8c03858016326a87c4b6c3dea2bcbabdff17ac7c69677e
5
5
  SHA512:
6
- metadata.gz: 271166881cb4e4e5b673d05ed180b2a09e0523aab2739d9c8127894981b34d5d37486a74aaa029524f13dbb03206dbf924c96f7983f28a985738e41ae96b64f2
7
- data.tar.gz: 0b5a6b6cbbf3db6f505ebf629ff33e2bd57f72d7840295cc35660fcba5f8ee497db538fb699b75a8db2676f6064bc67aa0533c78049dd958cb1a1e0573b6e559
6
+ metadata.gz: '0794e8bf0e3bbf898c595199207ecb6f833ab84b43450a493339c7a27f87577c3a4fdb43d48e2ab21f8a93c7cf49fdd55ca0e4182d18c89ad0a66bb613a2d0a5'
7
+ data.tar.gz: 8571cd2fbff8d5afb5b81fc68a8ae37c5d8ecb3f387037afdaddd61b0bad8974d0198d3c85750f028b9fd7a57e7b66d9a92bc3e0fd19849fc7bd6ab547c45237
data/README.md CHANGED
@@ -22,13 +22,25 @@ gem "datory"
22
22
  ```ruby
23
23
  user = User.find(...)
24
24
 
25
- UserDto.serialize(user)
25
+ UserDto.serialize(user) # => { ... }
26
+ ```
27
+
28
+ For serialization, the `form` method is also available.
29
+ This prepares a `Form` object, which has a set of additional methods such as `valid?` and `invalid?`.
30
+
31
+ ```ruby
32
+ form = UserDto.form(user)
33
+
34
+ form.valid? # => true
35
+ form.invalid? # => false
36
+
37
+ form.serialize # => { ... }
26
38
  ```
27
39
 
28
40
  #### Deserialize
29
41
 
30
42
  ```ruby
31
- UserDto.deserialize(json)
43
+ UserDto.deserialize(json) # => Datory::Result
32
44
  ```
33
45
 
34
46
  #### Examples
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Datory
4
+ module Attributes
5
+ class Form
6
+ attr_reader :model
7
+
8
+ def initialize(context, model)
9
+ @context = context
10
+ @model = model
11
+ end
12
+
13
+ def target
14
+ @context
15
+ end
16
+
17
+ def update(**attributes)
18
+ if model_collection?
19
+ raise_misuse "The `update` method cannot be used with a collection. Instead, use the `update_by` method."
20
+ end
21
+
22
+ found_keys = model.keys & attributes.keys
23
+
24
+ reset!
25
+
26
+ model.merge!(attributes.slice(*found_keys))
27
+ end
28
+
29
+ def update_by(index, **attributes) # rubocop:disable Metrics/MethodLength
30
+ unless model_collection?
31
+ raise_misuse "The `update_by` method cannot be used without a collection. Instead, use the `update` method."
32
+ end
33
+
34
+ reset!
35
+
36
+ model.map!.with_index do |model_item, model_index|
37
+ if model_index == index
38
+ found_keys = model_item.keys & attributes.keys
39
+
40
+ model_item.merge(attributes.slice(*found_keys))
41
+ else
42
+ model_item
43
+ end
44
+ end
45
+ end
46
+
47
+ def serialize
48
+ @serialize ||= @context.serialize(model)
49
+ end
50
+
51
+ def valid?
52
+ serialize
53
+
54
+ true
55
+ rescue Datory::Exceptions::SerializationError
56
+ false
57
+ end
58
+
59
+ def invalid?
60
+ !valid?
61
+ end
62
+
63
+ private
64
+
65
+ def raise_misuse(message)
66
+ raise Datory::Exceptions::MisuseError, message
67
+ end
68
+
69
+ def model_collection?
70
+ [Set, Array].include?(model.class)
71
+ end
72
+
73
+ def reset!
74
+ @serialize = nil
75
+ end
76
+ end
77
+ end
78
+ end
@@ -3,6 +3,10 @@
3
3
  module Datory
4
4
  module Context
5
5
  module Callable
6
+ def form(model)
7
+ Datory::Attributes::Form.new(self, model)
8
+ end
9
+
6
10
  def serialize(model) # rubocop:disable Metrics/MethodLength
7
11
  if [Set, Array].include?(model.class)
8
12
  model.map do |model_item|
@@ -2,7 +2,9 @@
2
2
 
3
3
  module Datory
4
4
  module Exceptions
5
+ class Base < StandardError; end
5
6
  class SerializationError < Datory::Service::Exceptions::Input; end
6
7
  class DeserializationError < Datory::Service::Exceptions::Input; end
8
+ class MisuseError < Base; end
7
9
  end
8
10
  end
@@ -5,7 +5,7 @@ module Datory
5
5
  MAJOR = 1
6
6
  MINOR = 0
7
7
  PATCH = 0
8
- PRE = "rc13"
8
+ PRE = "rc15"
9
9
 
10
10
  STRING = [MAJOR, MINOR, PATCH, PRE].compact.join(".")
11
11
  end
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.rc13
4
+ version: 1.0.0.rc15
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-29 00:00:00.000000000 Z
11
+ date: 2024-04-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -216,6 +216,7 @@ files:
216
216
  - lib/datory/attributes/deserialization/service_builder.rb
217
217
  - lib/datory/attributes/deserialization/service_factory.rb
218
218
  - lib/datory/attributes/dsl.rb
219
+ - lib/datory/attributes/form.rb
219
220
  - lib/datory/attributes/options/base.rb
220
221
  - lib/datory/attributes/options/from.rb
221
222
  - lib/datory/attributes/options/to.rb