serega 0.1.4 → 0.3.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/VERSION +1 -1
- data/lib/serega/attribute.rb +17 -4
- data/lib/serega/config.rb +69 -27
- data/lib/serega/convert.rb +7 -7
- data/lib/serega/convert_item.rb +4 -4
- data/lib/serega/errors.rb +12 -0
- data/lib/serega/helpers/serializer_class_helper.rb +1 -1
- data/lib/serega/json/adapter.rb +17 -0
- data/lib/serega/json/json.rb +17 -0
- data/lib/serega/json/oj.rb +17 -0
- data/lib/serega/map.rb +25 -15
- data/lib/serega/plugins/activerecord_preloads/activerecord_preloads.rb +3 -3
- data/lib/serega/plugins/activerecord_preloads/lib/preloader.rb +2 -2
- data/lib/serega/plugins/context_metadata/context_metadata.rb +34 -11
- data/lib/serega/plugins/formatters/formatters.rb +35 -6
- data/lib/serega/plugins/hide_nil/hide_nil.rb +7 -7
- data/lib/serega/plugins/metadata/meta_attribute.rb +5 -5
- data/lib/serega/plugins/metadata/metadata.rb +30 -5
- data/lib/serega/plugins/metadata/validations/check_block.rb +4 -4
- data/lib/serega/plugins/metadata/validations/check_opt_hide_empty.rb +3 -3
- data/lib/serega/plugins/metadata/validations/check_opt_hide_nil.rb +3 -3
- data/lib/serega/plugins/metadata/validations/check_opts.rb +3 -3
- data/lib/serega/plugins/metadata/validations/check_path.rb +3 -3
- data/lib/serega/plugins/preloads/lib/enum_deep_freeze.rb +1 -1
- data/lib/serega/plugins/preloads/lib/format_user_preloads.rb +1 -1
- data/lib/serega/plugins/preloads/lib/main_preload_path.rb +1 -1
- data/lib/serega/plugins/preloads/lib/preloads_constructor.rb +2 -2
- data/lib/serega/plugins/preloads/preloads.rb +63 -5
- data/lib/serega/plugins/preloads/validations/check_opt_preload.rb +17 -0
- data/lib/serega/plugins/preloads/validations/check_opt_preload_path.rb +4 -4
- data/lib/serega/plugins/presenter/presenter.rb +6 -6
- data/lib/serega/plugins/root/root.rb +48 -8
- data/lib/serega/plugins/string_modifiers/parse_string_modifiers.rb +1 -1
- data/lib/serega/plugins/string_modifiers/string_modifiers.rb +7 -7
- data/lib/serega/plugins.rb +7 -7
- data/lib/serega/utils/enum_deep_dup.rb +1 -1
- data/lib/serega/utils/to_hash.rb +2 -2
- data/lib/serega/validations/attribute/check_block.rb +3 -3
- data/lib/serega/validations/attribute/check_name.rb +3 -3
- data/lib/serega/validations/attribute/check_opt_const.rb +5 -5
- data/lib/serega/validations/attribute/check_opt_delegate.rb +57 -0
- data/lib/serega/validations/attribute/check_opt_hide.rb +2 -2
- data/lib/serega/validations/attribute/check_opt_key.rb +5 -5
- data/lib/serega/validations/attribute/check_opt_many.rb +2 -2
- data/lib/serega/validations/attribute/check_opt_serializer.rb +3 -3
- data/lib/serega/validations/attribute/check_opt_value.rb +7 -7
- data/lib/serega/validations/check_attribute_params.rb +4 -3
- data/lib/serega/validations/check_initiate_params.rb +23 -10
- data/lib/serega/validations/check_serialize_params.rb +16 -10
- data/lib/serega/{plugins/validate_modifiers/validate.rb → validations/initiate/check_modifiers.rb} +5 -5
- data/lib/serega/validations/utils/check_allowed_keys.rb +2 -2
- data/lib/serega/validations/utils/check_opt_is_bool.rb +2 -2
- data/lib/serega/validations/utils/check_opt_is_hash.rb +2 -2
- data/lib/serega/validations/utils/check_opt_is_string_or_symbol.rb +2 -2
- data/lib/serega.rb +52 -72
- metadata +9 -6
- data/lib/serega/plugins/validate_modifiers/validate_modifiers.rb +0 -44
- data/lib/serega/utils/as_json.rb +0 -35
- data/lib/serega/utils/to_json.rb +0 -22
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Serega
|
4
|
-
module
|
4
|
+
module SeregaValidations
|
5
5
|
module Attribute
|
6
6
|
class CheckBlock
|
7
7
|
class << self
|
@@ -22,7 +22,7 @@ class Serega
|
|
22
22
|
# @param opts [Proc] Attribute opts, we will check :value option
|
23
23
|
# @param block [Proc] Block that returns serialized attribute value
|
24
24
|
#
|
25
|
-
# @raise [
|
25
|
+
# @raise [SeregaError] SeregaError that block has invalid arguments
|
26
26
|
#
|
27
27
|
# @return [void]
|
28
28
|
#
|
@@ -38,7 +38,7 @@ class Serega
|
|
38
38
|
params = block.parameters
|
39
39
|
return if (params.count <= 2) && params.all? { |par| par[0] == :opt }
|
40
40
|
|
41
|
-
raise
|
41
|
+
raise SeregaError, block_error
|
42
42
|
end
|
43
43
|
|
44
44
|
def block_error
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Serega
|
4
|
-
module
|
4
|
+
module SeregaValidations
|
5
5
|
module Attribute
|
6
6
|
class CheckName
|
7
7
|
FORMAT_ONE_CHAR = /\A[a-zA-Z0-9]\z/
|
@@ -17,7 +17,7 @@ class Serega
|
|
17
17
|
#
|
18
18
|
# @param name [String, Symbol] Attribute name
|
19
19
|
#
|
20
|
-
# @raise [
|
20
|
+
# @raise [SeregaError] when name has invalid format
|
21
21
|
# @return [void]
|
22
22
|
#
|
23
23
|
def call(name)
|
@@ -32,7 +32,7 @@ class Serega
|
|
32
32
|
|
33
33
|
return if valid
|
34
34
|
|
35
|
-
raise
|
35
|
+
raise SeregaError, message(name)
|
36
36
|
end
|
37
37
|
|
38
38
|
private
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Serega
|
4
|
-
module
|
4
|
+
module SeregaValidations
|
5
5
|
module Attribute
|
6
6
|
class CheckOptConst
|
7
7
|
#
|
@@ -9,7 +9,7 @@ class Serega
|
|
9
9
|
#
|
10
10
|
# @param opts [Hash] Attribute options
|
11
11
|
#
|
12
|
-
# @raise [
|
12
|
+
# @raise [SeregaError] Attribute validation error
|
13
13
|
#
|
14
14
|
# @return [void]
|
15
15
|
#
|
@@ -23,9 +23,9 @@ class Serega
|
|
23
23
|
private
|
24
24
|
|
25
25
|
def check_usage_with_other_params(opts, block)
|
26
|
-
raise
|
27
|
-
raise
|
28
|
-
raise
|
26
|
+
raise SeregaError, "Option :const can not be used together with option :key" if opts.key?(:key)
|
27
|
+
raise SeregaError, "Option :const can not be used together with option :value" if opts.key?(:value)
|
28
|
+
raise SeregaError, "Option :const can not be used together with block" if block
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Serega
|
4
|
+
module SeregaValidations
|
5
|
+
module Attribute
|
6
|
+
class CheckOptDelegate
|
7
|
+
#
|
8
|
+
# Checks attribute :delegate option
|
9
|
+
# It must have :to option and can have :optional allow_nil option
|
10
|
+
#
|
11
|
+
# @param opts [Hash] Attribute options
|
12
|
+
#
|
13
|
+
# @raise [SeregaError] Attribute validation error
|
14
|
+
#
|
15
|
+
# @return [void]
|
16
|
+
#
|
17
|
+
class << self
|
18
|
+
def call(opts, block = nil)
|
19
|
+
return unless opts.key?(:delegate)
|
20
|
+
|
21
|
+
check_opt_delegate(opts)
|
22
|
+
check_usage_with_other_params(opts, block)
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def check_opt_delegate(opts)
|
28
|
+
Utils::CheckOptIsHash.call(opts, :delegate)
|
29
|
+
|
30
|
+
delegate_opts = opts[:delegate]
|
31
|
+
check_opt_delegate_to(delegate_opts)
|
32
|
+
check_opt_delegate_allow_nil(delegate_opts)
|
33
|
+
end
|
34
|
+
|
35
|
+
def check_opt_delegate_to(delegate_opts)
|
36
|
+
to_exist = delegate_opts.key?(:to)
|
37
|
+
raise SeregaError, "Option :delegate must have a :to option" unless to_exist
|
38
|
+
|
39
|
+
Utils::CheckOptIsStringOrSymbol.call(delegate_opts, :to)
|
40
|
+
end
|
41
|
+
|
42
|
+
def check_opt_delegate_allow_nil(delegate_opts)
|
43
|
+
return unless delegate_opts.key?(:allow_nil)
|
44
|
+
|
45
|
+
Utils::CheckOptIsBool.call(delegate_opts, :allow_nil)
|
46
|
+
end
|
47
|
+
|
48
|
+
def check_usage_with_other_params(opts, block)
|
49
|
+
raise SeregaError, "Option :delegate can not be used together with option :const" if opts.key?(:const)
|
50
|
+
raise SeregaError, "Option :delegate can not be used together with option :value" if opts.key?(:value)
|
51
|
+
raise SeregaError, "Option :delegate can not be used together with block" if block
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Serega
|
4
|
-
module
|
4
|
+
module SeregaValidations
|
5
5
|
module Attribute
|
6
6
|
class CheckOptHide
|
7
7
|
#
|
@@ -9,7 +9,7 @@ class Serega
|
|
9
9
|
#
|
10
10
|
# @param opts [Hash] Attribute options
|
11
11
|
#
|
12
|
-
# @raise [
|
12
|
+
# @raise [SeregaError] SeregaError that option has invalid value
|
13
13
|
#
|
14
14
|
# @return [void]
|
15
15
|
#
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Serega
|
4
|
-
module
|
4
|
+
module SeregaValidations
|
5
5
|
module Attribute
|
6
6
|
class CheckOptKey
|
7
7
|
#
|
@@ -9,7 +9,7 @@ class Serega
|
|
9
9
|
#
|
10
10
|
# @param opts [Hash] Attribute options
|
11
11
|
#
|
12
|
-
# @raise [
|
12
|
+
# @raise [SeregaError] SeregaError that option has invalid value
|
13
13
|
#
|
14
14
|
# @return [void]
|
15
15
|
#
|
@@ -24,9 +24,9 @@ class Serega
|
|
24
24
|
private
|
25
25
|
|
26
26
|
def check_usage_with_other_params(opts, block)
|
27
|
-
raise
|
28
|
-
raise
|
29
|
-
raise
|
27
|
+
raise SeregaError, "Option :key can not be used together with option :const" if opts.key?(:const)
|
28
|
+
raise SeregaError, "Option :key can not be used together with option :value" if opts.key?(:value)
|
29
|
+
raise SeregaError, "Option :key can not be used together with block" if block
|
30
30
|
end
|
31
31
|
end
|
32
32
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Serega
|
4
|
-
module
|
4
|
+
module SeregaValidations
|
5
5
|
module Attribute
|
6
6
|
class CheckOptMany
|
7
7
|
#
|
@@ -9,7 +9,7 @@ class Serega
|
|
9
9
|
#
|
10
10
|
# @param opts [Hash] Attribute options
|
11
11
|
#
|
12
|
-
# @raise [
|
12
|
+
# @raise [SeregaError] SeregaError that option has invalid value
|
13
13
|
#
|
14
14
|
# @return [void]
|
15
15
|
#
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Serega
|
4
|
-
module
|
4
|
+
module SeregaValidations
|
5
5
|
module Attribute
|
6
6
|
class CheckOptSerializer
|
7
7
|
class << self
|
@@ -10,7 +10,7 @@ class Serega
|
|
10
10
|
#
|
11
11
|
# @param opts [Hash] Attribute options
|
12
12
|
#
|
13
|
-
# @raise [
|
13
|
+
# @raise [SeregaError] SeregaError that option has invalid value
|
14
14
|
#
|
15
15
|
# @return [void]
|
16
16
|
#
|
@@ -20,7 +20,7 @@ class Serega
|
|
20
20
|
value = opts[:serializer]
|
21
21
|
return if valid_serializer?(value)
|
22
22
|
|
23
|
-
raise
|
23
|
+
raise SeregaError, "Invalid option :serializer => #{value.inspect}." \
|
24
24
|
" Can be a Serega subclass, a String or a Proc without arguments"
|
25
25
|
end
|
26
26
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Serega
|
4
|
-
module
|
4
|
+
module SeregaValidations
|
5
5
|
module Attribute
|
6
6
|
class CheckOptValue
|
7
7
|
#
|
@@ -9,7 +9,7 @@ class Serega
|
|
9
9
|
#
|
10
10
|
# @param opts [Hash] Attribute options
|
11
11
|
#
|
12
|
-
# @raise [
|
12
|
+
# @raise [SeregaError] SeregaError that option has invalid value
|
13
13
|
#
|
14
14
|
# @return [void]
|
15
15
|
#
|
@@ -24,13 +24,13 @@ class Serega
|
|
24
24
|
private
|
25
25
|
|
26
26
|
def check_usage_with_other_params(opts, block)
|
27
|
-
raise
|
28
|
-
raise
|
29
|
-
raise
|
27
|
+
raise SeregaError, "Option :value can not be used together with option :key" if opts.key?(:key)
|
28
|
+
raise SeregaError, "Option :value can not be used together with option :const" if opts.key?(:const)
|
29
|
+
raise SeregaError, "Option :value can not be used together with block" if block
|
30
30
|
end
|
31
31
|
|
32
32
|
def check_proc(value)
|
33
|
-
raise
|
33
|
+
raise SeregaError, value_error unless value.is_a?(Proc)
|
34
34
|
|
35
35
|
params = value.parameters
|
36
36
|
|
@@ -40,7 +40,7 @@ class Serega
|
|
40
40
|
return
|
41
41
|
end
|
42
42
|
|
43
|
-
raise
|
43
|
+
raise SeregaError, value_error
|
44
44
|
end
|
45
45
|
|
46
46
|
def value_error
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Serega
|
4
|
-
module
|
4
|
+
module SeregaValidations
|
5
5
|
class CheckAttributeParams
|
6
6
|
module InstanceMethods
|
7
7
|
attr_reader :name, :opts, :block
|
@@ -28,6 +28,7 @@ class Serega
|
|
28
28
|
Utils::CheckAllowedKeys.call(opts, allowed_opts_keys)
|
29
29
|
|
30
30
|
Attribute::CheckOptConst.call(opts, block)
|
31
|
+
Attribute::CheckOptDelegate.call(opts, block)
|
31
32
|
Attribute::CheckOptHide.call(opts)
|
32
33
|
Attribute::CheckOptKey.call(opts, block)
|
33
34
|
Attribute::CheckOptMany.call(opts)
|
@@ -40,12 +41,12 @@ class Serega
|
|
40
41
|
end
|
41
42
|
|
42
43
|
def allowed_opts_keys
|
43
|
-
self.class.serializer_class.config
|
44
|
+
self.class.serializer_class.config.attribute_keys
|
44
45
|
end
|
45
46
|
end
|
46
47
|
|
47
48
|
include InstanceMethods
|
48
|
-
extend Serega::
|
49
|
+
extend Serega::SeregaHelpers::SerializerClassHelper
|
49
50
|
end
|
50
51
|
end
|
51
52
|
end
|
@@ -1,26 +1,39 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Serega
|
4
|
-
module
|
4
|
+
module SeregaValidations
|
5
5
|
class CheckInitiateParams
|
6
|
-
module
|
7
|
-
|
8
|
-
|
6
|
+
module InstanceMethods
|
7
|
+
attr_reader :opts
|
8
|
+
|
9
|
+
def initialize(opts)
|
10
|
+
@opts = opts
|
11
|
+
end
|
12
|
+
|
13
|
+
def validate
|
14
|
+
check_allowed_keys
|
15
|
+
check_modifiers
|
9
16
|
end
|
10
17
|
|
11
18
|
private
|
12
19
|
|
13
|
-
def
|
14
|
-
Utils::CheckAllowedKeys.call(opts,
|
20
|
+
def check_allowed_keys
|
21
|
+
Utils::CheckAllowedKeys.call(opts, serializer_class.config.initiate_keys)
|
22
|
+
end
|
23
|
+
|
24
|
+
def check_modifiers
|
25
|
+
Initiate::CheckModifiers.call(serializer_class, opts[:only])
|
26
|
+
Initiate::CheckModifiers.call(serializer_class, opts[:except])
|
27
|
+
Initiate::CheckModifiers.call(serializer_class, opts[:with])
|
15
28
|
end
|
16
29
|
|
17
|
-
def
|
18
|
-
serializer_class
|
30
|
+
def serializer_class
|
31
|
+
self.class.serializer_class
|
19
32
|
end
|
20
33
|
end
|
21
34
|
|
22
|
-
|
23
|
-
extend Serega::
|
35
|
+
include InstanceMethods
|
36
|
+
extend Serega::SeregaHelpers::SerializerClassHelper
|
24
37
|
end
|
25
38
|
end
|
26
39
|
end
|
@@ -1,29 +1,35 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Serega
|
4
|
-
module
|
4
|
+
module SeregaValidations
|
5
5
|
class CheckSerializeParams
|
6
|
-
module
|
7
|
-
|
8
|
-
|
6
|
+
module InstanceMethods
|
7
|
+
attr_reader :opts
|
8
|
+
|
9
|
+
def initialize(opts)
|
10
|
+
@opts = opts
|
11
|
+
end
|
12
|
+
|
13
|
+
def validate
|
14
|
+
check_opts
|
9
15
|
end
|
10
16
|
|
11
17
|
private
|
12
18
|
|
13
|
-
def check_opts
|
14
|
-
Utils::CheckAllowedKeys.call(opts,
|
19
|
+
def check_opts
|
20
|
+
Utils::CheckAllowedKeys.call(opts, serializer_class.config.serialize_keys)
|
15
21
|
|
16
22
|
Utils::CheckOptIsHash.call(opts, :context)
|
17
23
|
Utils::CheckOptIsBool.call(opts, :many)
|
18
24
|
end
|
19
25
|
|
20
|
-
def
|
21
|
-
serializer_class
|
26
|
+
def serializer_class
|
27
|
+
self.class.serializer_class
|
22
28
|
end
|
23
29
|
end
|
24
30
|
|
25
|
-
|
26
|
-
extend Serega::
|
31
|
+
include InstanceMethods
|
32
|
+
extend Serega::SeregaHelpers::SerializerClassHelper
|
27
33
|
end
|
28
34
|
end
|
29
35
|
end
|
data/lib/serega/{plugins/validate_modifiers/validate.rb → validations/initiate/check_modifiers.rb}
RENAMED
@@ -1,9 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Serega
|
4
|
-
module
|
5
|
-
module
|
6
|
-
class
|
4
|
+
module SeregaValidations
|
5
|
+
module Initiate
|
6
|
+
class CheckModifiers
|
7
7
|
class << self
|
8
8
|
def call(serializer_class, fields)
|
9
9
|
return unless fields
|
@@ -29,14 +29,14 @@ class Serega
|
|
29
29
|
def raise_error(name, prev_names)
|
30
30
|
field_name = field_name(name, prev_names)
|
31
31
|
|
32
|
-
raise Serega::
|
32
|
+
raise Serega::AttributeNotExist, "Attribute #{field_name} not exists"
|
33
33
|
end
|
34
34
|
|
35
35
|
def raise_nested_error(name, prev_names, nested_fields)
|
36
36
|
field_name = field_name(name, prev_names)
|
37
37
|
first_nested = nested_fields.keys.first
|
38
38
|
|
39
|
-
raise Serega::
|
39
|
+
raise Serega::AttributeNotExist, "Attribute #{field_name} has no :serializer option specified to add nested '#{first_nested}' attribute"
|
40
40
|
end
|
41
41
|
|
42
42
|
def field_name(name, prev_names)
|
@@ -1,14 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Serega
|
4
|
-
module
|
4
|
+
module SeregaValidations
|
5
5
|
module Utils
|
6
6
|
class CheckAllowedKeys
|
7
7
|
def self.call(opts, allowed_keys)
|
8
8
|
opts.each_key do |key|
|
9
9
|
next if allowed_keys.include?(key)
|
10
10
|
|
11
|
-
raise
|
11
|
+
raise SeregaError, "Invalid option #{key.inspect}. Allowed options are: #{allowed_keys.map(&:inspect).join(", ")}"
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Serega
|
4
|
-
module
|
4
|
+
module SeregaValidations
|
5
5
|
module Utils
|
6
6
|
class CheckOptIsBool
|
7
7
|
def self.call(opts, key)
|
@@ -10,7 +10,7 @@ class Serega
|
|
10
10
|
value = opts[key]
|
11
11
|
return if value.equal?(true) || value.equal?(false)
|
12
12
|
|
13
|
-
raise
|
13
|
+
raise SeregaError, "Invalid option #{key.inspect} => #{value.inspect}. Must have a boolean value"
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Serega
|
4
|
-
module
|
4
|
+
module SeregaValidations
|
5
5
|
module Utils
|
6
6
|
class CheckOptIsHash
|
7
7
|
def self.call(opts, key)
|
@@ -10,7 +10,7 @@ class Serega
|
|
10
10
|
value = opts[key]
|
11
11
|
return if value.is_a?(Hash)
|
12
12
|
|
13
|
-
raise
|
13
|
+
raise SeregaError, "Invalid option #{key.inspect} => #{value.inspect}. Must have a Hash value"
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Serega
|
4
|
-
module
|
4
|
+
module SeregaValidations
|
5
5
|
module Utils
|
6
6
|
class CheckOptIsStringOrSymbol
|
7
7
|
def self.call(opts, key)
|
@@ -10,7 +10,7 @@ class Serega
|
|
10
10
|
value = opts[key]
|
11
11
|
return if value.is_a?(String) || value.is_a?(Symbol)
|
12
12
|
|
13
|
-
raise
|
13
|
+
raise SeregaError, "Invalid option #{key.inspect} => #{value.inspect}. Must be a String or a Symbol"
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|