serega 0.42.0 → 0.50.0
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 +124 -1207
- data/VERSION +1 -1
- data/lib/serega/attribute.rb +186 -131
- data/lib/serega/attribute_normalizer.rb +164 -345
- data/lib/serega/attribute_normalizers/batch.rb +45 -0
- data/lib/serega/attribute_normalizers/block.rb +81 -0
- data/lib/serega/attribute_normalizers/delegate.rb +34 -0
- data/lib/serega/attribute_normalizers/hash_access.rb +37 -0
- data/lib/serega/attribute_normalizers/preloads.rb +46 -0
- data/lib/serega/attribute_value_resolvers/batch.rb +5 -54
- data/lib/serega/attribute_value_resolvers/const.rb +2 -24
- data/lib/serega/attribute_value_resolvers/delegate.rb +17 -28
- data/lib/serega/attribute_value_resolvers/hash_access.rb +34 -52
- data/lib/serega/attribute_value_resolvers/keyword.rb +10 -25
- data/lib/serega/attribute_values.rb +46 -0
- data/lib/serega/batch_loader.rb +37 -0
- data/lib/serega/conditions.rb +56 -0
- data/lib/serega/config.rb +105 -144
- data/lib/serega/engine/pulls.rb +64 -0
- data/lib/serega/engine/run.rb +106 -0
- data/lib/serega/errors.rb +36 -8
- data/lib/serega/formatter.rb +98 -0
- data/lib/serega/plan/cache.rb +96 -0
- data/lib/serega/plan/per_ractor_cache.rb +23 -0
- data/lib/serega/plan.rb +101 -128
- data/lib/serega/plan_point.rb +44 -151
- data/lib/serega/plugins/activerecord_preloads/activerecord_preloads.rb +13 -80
- data/lib/serega/plugins/activerecord_preloads/lib/preloader.rb +8 -75
- data/lib/serega/plugins/context_metadata/context_metadata.rb +40 -123
- data/lib/serega/plugins/metadata/check_params.rb +80 -0
- data/lib/serega/plugins/metadata/meta_attribute.rb +40 -79
- data/lib/serega/plugins/metadata/metadata.rb +40 -168
- data/lib/serega/plugins/root/root.rb +91 -235
- data/lib/serega/plugins.rb +16 -49
- data/lib/serega/presenter.rb +61 -19
- data/lib/serega/result_builder.rb +68 -0
- data/lib/serega/result_code.rb +203 -0
- data/lib/serega/shareable.rb +52 -0
- data/lib/serega/source_group.rb +187 -0
- data/lib/serega/utils/collection_detector.rb +19 -13
- data/lib/serega/utils/deep_merge.rb +26 -0
- data/lib/serega/utils/enum_deep_dup.rb +10 -16
- data/lib/serega/utils/enum_deep_freeze.rb +8 -14
- data/lib/serega/utils/method_signature.rb +6 -15
- data/lib/serega/utils/parse_string_modifiers.rb +63 -0
- data/lib/serega/utils/ractor_local.rb +36 -0
- data/lib/serega/utils/serialized_attribute_error.rb +60 -20
- data/lib/serega/utils/to_hash.rb +5 -26
- data/lib/serega/validations/attribute/check_block.rb +3 -15
- data/lib/serega/validations/attribute/check_name.rb +4 -15
- data/lib/serega/validations/attribute/check_opt_base_serializer.rb +3 -15
- data/lib/serega/validations/attribute/check_opt_batch.rb +26 -56
- data/lib/serega/validations/attribute/check_opt_condition.rb +55 -0
- data/lib/serega/validations/attribute/check_opt_delegate.rb +10 -63
- data/lib/serega/validations/attribute/check_opt_format.rb +36 -0
- data/lib/serega/validations/attribute/check_opt_hash_access.rb +11 -59
- data/lib/serega/validations/attribute/check_opt_hide.rb +3 -14
- data/lib/serega/validations/attribute/check_opt_many.rb +18 -20
- data/lib/serega/validations/attribute/check_opt_method.rb +3 -25
- data/lib/serega/validations/attribute/check_opt_preload.rb +3 -26
- data/lib/serega/validations/attribute/check_opt_serializer.rb +4 -18
- data/lib/serega/validations/attribute/check_opt_value.rb +3 -21
- data/lib/serega/validations/check_attribute_params.rb +92 -71
- data/lib/serega/validations/check_batch_loader_params.rb +43 -62
- data/lib/serega/validations/check_formatter.rb +80 -0
- data/lib/serega/validations/check_serialize_keywords.rb +23 -0
- data/lib/serega/validations/initiate/check_modifiers.rb +14 -20
- data/lib/serega/validations/utils/check_allowed_keys.rb +3 -13
- data/lib/serega/validations/utils/check_hash_access_value.rb +44 -0
- data/lib/serega/validations/utils/check_opt_is_bool.rb +3 -13
- data/lib/serega/validations/utils/check_opt_is_hash.rb +3 -13
- data/lib/serega/validations/utils/check_opt_is_string_or_symbol.rb +3 -13
- data/lib/serega/version.rb +1 -4
- data/lib/serega.rb +459 -388
- data/sig/serega/plugins.rbs +49 -0
- data/sig/serega.rbs +142 -0
- metadata +42 -38
- data/lib/serega/data_builder.rb +0 -54
- data/lib/serega/engine/level.rb +0 -59
- data/lib/serega/engine/level_queue.rb +0 -56
- data/lib/serega/engine/loader.rb +0 -70
- data/lib/serega/helpers/serializer_class_helper.rb +0 -19
- data/lib/serega/object_serializer.rb +0 -125
- data/lib/serega/plugins/camel_case/camel_case.rb +0 -213
- data/lib/serega/plugins/depth_limit/depth_limit.rb +0 -206
- data/lib/serega/plugins/explicit_many_option/explicit_many_option.rb +0 -69
- data/lib/serega/plugins/explicit_many_option/validations/check_opt_many.rb +0 -38
- data/lib/serega/plugins/formatters/formatters.rb +0 -322
- data/lib/serega/plugins/if/if.rb +0 -287
- data/lib/serega/plugins/if/validations/check_opt_if.rb +0 -72
- data/lib/serega/plugins/if/validations/check_opt_if_value.rb +0 -77
- data/lib/serega/plugins/if/validations/check_opt_unless.rb +0 -72
- data/lib/serega/plugins/if/validations/check_opt_unless_value.rb +0 -77
- data/lib/serega/plugins/metadata/validations/check_block.rb +0 -47
- data/lib/serega/plugins/metadata/validations/check_opt_const.rb +0 -39
- data/lib/serega/plugins/metadata/validations/check_opt_hide_empty.rb +0 -35
- data/lib/serega/plugins/metadata/validations/check_opt_hide_nil.rb +0 -35
- data/lib/serega/plugins/metadata/validations/check_opt_value.rb +0 -61
- data/lib/serega/plugins/metadata/validations/check_opts.rb +0 -59
- data/lib/serega/plugins/metadata/validations/check_path.rb +0 -50
- data/lib/serega/plugins/string_modifiers/parse_string_modifiers.rb +0 -111
- data/lib/serega/plugins/string_modifiers/string_modifiers.rb +0 -63
- data/lib/serega/utils/symbol_name.rb +0 -39
- data/lib/serega/validations/attribute/check_opt_const.rb +0 -40
- data/lib/serega/validations/check_initiate_params.rb +0 -57
- data/lib/serega/validations/check_serialize_params.rb +0 -54
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
class Serega
|
|
4
|
-
module SeregaPlugins
|
|
5
|
-
#
|
|
6
|
-
# Plugin :string_modifiers
|
|
7
|
-
#
|
|
8
|
-
# Allows `:only`, `:except` and `:with` to be given as a single comma-separated
|
|
9
|
-
# string, with nested attributes in parentheses. Useful for accepting a field
|
|
10
|
-
# list straight from a query parameter.
|
|
11
|
-
#
|
|
12
|
-
# @example
|
|
13
|
-
# class UserSerializer < Serega
|
|
14
|
-
# plugin :string_modifiers
|
|
15
|
-
#
|
|
16
|
-
# attribute :username
|
|
17
|
-
# attribute :first_name
|
|
18
|
-
# attribute :addresses, serializer: AddressSerializer, hide: true
|
|
19
|
-
# end
|
|
20
|
-
#
|
|
21
|
-
# UserSerializer.to_h(user, only: "username,addresses(line1,line2)")
|
|
22
|
-
#
|
|
23
|
-
module StringModifiers
|
|
24
|
-
# @return [Symbol] Plugin name
|
|
25
|
-
# @private
|
|
26
|
-
def self.plugin_name
|
|
27
|
-
:string_modifiers
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
#
|
|
31
|
-
# Applies plugin code to specific serializer
|
|
32
|
-
#
|
|
33
|
-
# @param serializer_class [Class<Serega>] Current serializer class
|
|
34
|
-
# @param _opts [Hash] Plugin options
|
|
35
|
-
#
|
|
36
|
-
# @return [void]
|
|
37
|
-
#
|
|
38
|
-
# @private
|
|
39
|
-
def self.load_plugin(serializer_class, **_opts)
|
|
40
|
-
serializer_class.include(InstanceMethods)
|
|
41
|
-
require_relative "parse_string_modifiers"
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
#
|
|
45
|
-
# Serega additional/patched instance methods
|
|
46
|
-
#
|
|
47
|
-
# @see Serega
|
|
48
|
-
#
|
|
49
|
-
# @private
|
|
50
|
-
module InstanceMethods
|
|
51
|
-
private
|
|
52
|
-
|
|
53
|
-
def parse_modifier(value)
|
|
54
|
-
return ParseStringModifiers.parse(value) if value.is_a?(String)
|
|
55
|
-
|
|
56
|
-
super
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
register_plugin(StringModifiers.plugin_name, StringModifiers)
|
|
62
|
-
end
|
|
63
|
-
end
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
class Serega
|
|
4
|
-
# @private
|
|
5
|
-
module SeregaUtils
|
|
6
|
-
#
|
|
7
|
-
# Utility to get frozen string from symbol in any ruby version
|
|
8
|
-
#
|
|
9
|
-
# @private
|
|
10
|
-
class SymbolName
|
|
11
|
-
class << self
|
|
12
|
-
#
|
|
13
|
-
# Returns frozen string corresponding to provided symbol
|
|
14
|
-
#
|
|
15
|
-
# @param key [Symbol]
|
|
16
|
-
#
|
|
17
|
-
# @return [String] frozen string corresponding to provided symbol
|
|
18
|
-
#
|
|
19
|
-
def call(key)
|
|
20
|
-
key.is_a?(String) ? key : to_frozen_string(key)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
private
|
|
24
|
-
|
|
25
|
-
# :nocov:
|
|
26
|
-
if RUBY_VERSION < "3"
|
|
27
|
-
def to_frozen_string(key)
|
|
28
|
-
key.to_s.freeze
|
|
29
|
-
end
|
|
30
|
-
else
|
|
31
|
-
def to_frozen_string(key)
|
|
32
|
-
key.name
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
# :nocov:
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
class Serega
|
|
4
|
-
# @private
|
|
5
|
-
module SeregaValidations
|
|
6
|
-
# @private
|
|
7
|
-
module Attribute
|
|
8
|
-
#
|
|
9
|
-
# Attribute `:const` option validator
|
|
10
|
-
#
|
|
11
|
-
# @private
|
|
12
|
-
class CheckOptConst
|
|
13
|
-
class << self
|
|
14
|
-
#
|
|
15
|
-
# Checks attribute :const option
|
|
16
|
-
#
|
|
17
|
-
# @param opts [Hash] Attribute options
|
|
18
|
-
#
|
|
19
|
-
# @raise [SeregaError] Attribute validation error
|
|
20
|
-
#
|
|
21
|
-
# @return [void]
|
|
22
|
-
#
|
|
23
|
-
def call(opts)
|
|
24
|
-
return unless opts.key?(:const)
|
|
25
|
-
|
|
26
|
-
check_usage_with_other_params(opts)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
private
|
|
30
|
-
|
|
31
|
-
def check_usage_with_other_params(opts)
|
|
32
|
-
raise SeregaError, "Option :const can not be used together with option :method" if opts.key?(:method)
|
|
33
|
-
raise SeregaError, "Option :const can not be used together with option :value" if opts.key?(:value)
|
|
34
|
-
raise SeregaError, "Option :const can not be used together with option :batch" if opts.key?(:batch)
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
class Serega
|
|
4
|
-
# @private
|
|
5
|
-
module SeregaValidations
|
|
6
|
-
#
|
|
7
|
-
# Validations of serializer initialization options
|
|
8
|
-
#
|
|
9
|
-
# @private
|
|
10
|
-
class CheckInitiateParams
|
|
11
|
-
#
|
|
12
|
-
# Validations of serializer initialization options instance methods
|
|
13
|
-
#
|
|
14
|
-
# @private
|
|
15
|
-
module InstanceMethods
|
|
16
|
-
# @return [Hash] validated initialization options
|
|
17
|
-
attr_reader :opts
|
|
18
|
-
|
|
19
|
-
#
|
|
20
|
-
# Initializes validator for initialization options
|
|
21
|
-
#
|
|
22
|
-
# @param opts [Hash] initialization options
|
|
23
|
-
#
|
|
24
|
-
# @return [void]
|
|
25
|
-
#
|
|
26
|
-
def initialize(opts)
|
|
27
|
-
@opts = opts
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
#
|
|
31
|
-
# Validates initiating params
|
|
32
|
-
#
|
|
33
|
-
def validate
|
|
34
|
-
check_allowed_keys
|
|
35
|
-
check_modifiers
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
private
|
|
39
|
-
|
|
40
|
-
def check_allowed_keys
|
|
41
|
-
Utils::CheckAllowedKeys.call(opts, serializer_class.config.initiate_keys, :initiate)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def check_modifiers
|
|
45
|
-
Initiate::CheckModifiers.new.call(serializer_class, opts[:only], opts[:with], opts[:except])
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def serializer_class
|
|
49
|
-
self.class.serializer_class
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
include InstanceMethods
|
|
54
|
-
extend Serega::SeregaHelpers::SerializerClassHelper
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
end
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
class Serega
|
|
4
|
-
# @private
|
|
5
|
-
module SeregaValidations
|
|
6
|
-
#
|
|
7
|
-
# Validations of serialization options
|
|
8
|
-
#
|
|
9
|
-
# @private
|
|
10
|
-
class CheckSerializeParams
|
|
11
|
-
#
|
|
12
|
-
# Validations of serialization options instance methods
|
|
13
|
-
#
|
|
14
|
-
# @private
|
|
15
|
-
module InstanceMethods
|
|
16
|
-
attr_reader :opts
|
|
17
|
-
|
|
18
|
-
#
|
|
19
|
-
# Initializes validator for serialization options
|
|
20
|
-
#
|
|
21
|
-
# @param opts [Hash] serialization options
|
|
22
|
-
#
|
|
23
|
-
# @return [void]
|
|
24
|
-
#
|
|
25
|
-
def initialize(opts)
|
|
26
|
-
@opts = opts
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
#
|
|
30
|
-
# Validates serialization options
|
|
31
|
-
#
|
|
32
|
-
def validate
|
|
33
|
-
check_opts
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
private
|
|
37
|
-
|
|
38
|
-
def check_opts
|
|
39
|
-
Utils::CheckAllowedKeys.call(opts, serializer_class.config.serialize_keys, :serialize)
|
|
40
|
-
|
|
41
|
-
Utils::CheckOptIsHash.call(opts, :context)
|
|
42
|
-
Utils::CheckOptIsBool.call(opts, :many)
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def serializer_class
|
|
46
|
-
self.class.serializer_class
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
include InstanceMethods
|
|
51
|
-
extend Serega::SeregaHelpers::SerializerClassHelper
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
end
|