store_model 0.7.0 → 0.8.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 +1 -0
- data/lib/active_model/validations/store_model_validator.rb +2 -2
- data/lib/store_model.rb +5 -0
- data/lib/store_model/nested_attributes.rb +2 -2
- data/lib/store_model/type_builders.rb +6 -6
- data/lib/store_model/types.rb +13 -2
- data/lib/store_model/types/many.rb +48 -0
- data/lib/store_model/types/{array_type.rb → many_base.rb} +17 -27
- data/lib/store_model/types/many_polymorphic.rb +53 -0
- data/lib/store_model/types/{json_type.rb → one.rb} +5 -29
- data/lib/store_model/types/one_base.rb +66 -0
- data/lib/store_model/types/one_of.rb +23 -0
- data/lib/store_model/types/one_polymorphic.rb +89 -0
- data/lib/store_model/types/polymorphic_helper.rb +13 -0
- data/lib/store_model/version.rb +1 -1
- metadata +10 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 637fbd26ab60269ee1f0e8c9d091c1c145af797edfb5924f2741b4175f63e550
|
4
|
+
data.tar.gz: fa6ccf49426de71facd6324f4d13da525b48f4136c6d21a6dc48bc1530cfcacc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ece230a89c62e1a5089ab15c184a1cc9fd7b18b3eb5652a3e21df6ae74a40e172fd8fbb8cd92df0e5b64586e4fe5f77f5f681a7092110ad7a11d458c6f3075cb
|
7
|
+
data.tar.gz: 21f9ba16ad9f8b361d02d7a0794c89af1ca3365ea31495dd5f8f1d9e059d9c91112c7d31beb3ae5e6b5371448f65784854cf18ec617cb275472dc2a2539b13ca
|
data/README.md
CHANGED
@@ -88,6 +88,7 @@ product.save
|
|
88
88
|
* [Nested models](./docs/nested_models.md)
|
89
89
|
* [Unknown attributes](./docs/unknown_attributes.md)
|
90
90
|
3. [Array of stored models](./docs/array_of_stored_models.md)
|
91
|
+
4. [One of](./docs/one_of.md)
|
91
92
|
4. [Alternatives](./docs/alternatives.md)
|
92
93
|
5. [Defining custom types](./docs/defining_custom_types.md)
|
93
94
|
|
@@ -21,9 +21,9 @@ module ActiveModel
|
|
21
21
|
end
|
22
22
|
|
23
23
|
case record.type_for_attribute(attribute).type
|
24
|
-
when :json
|
24
|
+
when :json, :polymorphic
|
25
25
|
call_json_strategy(attribute, record.errors, value)
|
26
|
-
when :array
|
26
|
+
when :array, :polymorphic_array
|
27
27
|
call_array_strategy(attribute, record.errors, value)
|
28
28
|
end
|
29
29
|
end
|
data/lib/store_model.rb
CHANGED
@@ -14,9 +14,9 @@ module StoreModel
|
|
14
14
|
def accepts_nested_attributes_for(*associations)
|
15
15
|
associations.each do |association|
|
16
16
|
case attribute_types[association.to_s]
|
17
|
-
when Types::
|
17
|
+
when Types::One
|
18
18
|
alias_method "#{association}_attributes=", "#{association}="
|
19
|
-
when Types::
|
19
|
+
when Types::Many
|
20
20
|
define_method "#{association}_attributes=" do |attributes|
|
21
21
|
assign_nested_attributes_for_collection_association(association, attributes)
|
22
22
|
end
|
@@ -3,16 +3,16 @@
|
|
3
3
|
module StoreModel
|
4
4
|
# Contains methods for converting StoreModel::Model to ActiveModel::Type::Value.
|
5
5
|
module TypeBuilders
|
6
|
-
# Converts StoreModel::Model to Types::
|
7
|
-
# @return [Types::
|
6
|
+
# Converts StoreModel::Model to Types::One
|
7
|
+
# @return [Types::One]
|
8
8
|
def to_type
|
9
|
-
Types::
|
9
|
+
Types::One.new(self)
|
10
10
|
end
|
11
11
|
|
12
|
-
# Converts StoreModel::Model to Types::
|
13
|
-
# @return [Types::
|
12
|
+
# Converts StoreModel::Model to Types::Many
|
13
|
+
# @return [Types::Many]
|
14
14
|
def to_array_type
|
15
|
-
Types::
|
15
|
+
Types::Many.new(self)
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
data/lib/store_model/types.rb
CHANGED
@@ -1,12 +1,23 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "store_model/types/
|
4
|
-
|
3
|
+
require "store_model/types/polymorphic_helper"
|
4
|
+
|
5
|
+
require "store_model/types/one_base"
|
6
|
+
require "store_model/types/one"
|
7
|
+
require "store_model/types/one_polymorphic"
|
8
|
+
|
9
|
+
require "store_model/types/many_base"
|
10
|
+
require "store_model/types/many"
|
11
|
+
require "store_model/types/many_polymorphic"
|
12
|
+
|
5
13
|
require "store_model/types/enum_type"
|
6
14
|
|
15
|
+
require "store_model/types/one_of"
|
16
|
+
|
7
17
|
module StoreModel
|
8
18
|
# Contains all custom types.
|
9
19
|
module Types
|
10
20
|
class CastError < StandardError; end
|
21
|
+
class ExpandWrapperError < StandardError; end
|
11
22
|
end
|
12
23
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "active_model"
|
4
|
+
|
5
|
+
module StoreModel
|
6
|
+
module Types
|
7
|
+
# Implements ActiveModel::Type::Value type for handling an array of
|
8
|
+
# StoreModel::Model
|
9
|
+
class Many < ManyBase
|
10
|
+
# Initializes type for model class
|
11
|
+
#
|
12
|
+
# @param model_klass [StoreModel::Model] model class to handle
|
13
|
+
#
|
14
|
+
# @return [StoreModel::Types::Many]
|
15
|
+
def initialize(model_klass)
|
16
|
+
@model_klass = model_klass
|
17
|
+
end
|
18
|
+
|
19
|
+
# Returns type
|
20
|
+
#
|
21
|
+
# @return [Symbol]
|
22
|
+
def type
|
23
|
+
:array
|
24
|
+
end
|
25
|
+
|
26
|
+
protected
|
27
|
+
|
28
|
+
def ensure_model_class(array)
|
29
|
+
array.map do |object|
|
30
|
+
object.is_a?(@model_klass) ? object : cast_model_type_value(object)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def cast_model_type_value(value)
|
35
|
+
model_klass_type.cast_value(value)
|
36
|
+
end
|
37
|
+
|
38
|
+
def model_klass_type
|
39
|
+
@model_klass_type ||= @model_klass.to_type
|
40
|
+
end
|
41
|
+
|
42
|
+
def raise_cast_error(value)
|
43
|
+
raise StoreModel::Types::CastError,
|
44
|
+
"failed casting #{value.inspect}, only String or Array instances are allowed"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -6,21 +6,12 @@ module StoreModel
|
|
6
6
|
module Types
|
7
7
|
# Implements ActiveModel::Type::Value type for handling an array of
|
8
8
|
# StoreModel::Model
|
9
|
-
class
|
10
|
-
# Initializes type for model class
|
11
|
-
#
|
12
|
-
# @param model_klass [StoreModel::Model] model class to handle
|
13
|
-
#
|
14
|
-
# @return [StoreModel::Types::ArrayType]
|
15
|
-
def initialize(model_klass)
|
16
|
-
@model_klass = model_klass
|
17
|
-
end
|
18
|
-
|
9
|
+
class ManyBase < ActiveModel::Type::Value
|
19
10
|
# Returns type
|
20
11
|
#
|
21
12
|
# @return [Symbol]
|
22
13
|
def type
|
23
|
-
|
14
|
+
raise NotImplementedError
|
24
15
|
end
|
25
16
|
|
26
17
|
# Casts +value+ from DB or user to StoreModel::Model instance
|
@@ -34,8 +25,7 @@ module StoreModel
|
|
34
25
|
when Array then ensure_model_class(value)
|
35
26
|
when nil then value
|
36
27
|
else
|
37
|
-
|
38
|
-
"failed casting #{value.inspect}, only String or Array instances are allowed"
|
28
|
+
raise_cast_error(value)
|
39
29
|
end
|
40
30
|
end
|
41
31
|
|
@@ -64,28 +54,28 @@ module StoreModel
|
|
64
54
|
cast_value(raw_old_value) != new_value
|
65
55
|
end
|
66
56
|
|
67
|
-
|
57
|
+
protected
|
68
58
|
|
69
|
-
|
70
|
-
|
71
|
-
decoded = ActiveSupport::JSON.decode(array_value) rescue []
|
72
|
-
decoded.map { |attributes| cast_model_type_value(attributes) }
|
59
|
+
def ensure_model_class(_array)
|
60
|
+
raise NotImplementedError
|
73
61
|
end
|
74
|
-
# rubocop:enable Style/RescueModifier
|
75
62
|
|
76
|
-
def
|
77
|
-
|
78
|
-
object.is_a?(@model_klass) ? object : cast_model_type_value(object)
|
79
|
-
end
|
63
|
+
def cast_model_type_value(_value)
|
64
|
+
raise NotImplementedError
|
80
65
|
end
|
81
66
|
|
82
|
-
def
|
83
|
-
|
67
|
+
def raise_cast_error(_value)
|
68
|
+
raise NotImplementedError
|
84
69
|
end
|
85
70
|
|
86
|
-
|
87
|
-
|
71
|
+
private
|
72
|
+
|
73
|
+
# rubocop:disable Style/RescueModifier
|
74
|
+
def decode_and_initialize(array_value)
|
75
|
+
decoded = ActiveSupport::JSON.decode(array_value) rescue []
|
76
|
+
decoded.map { |attributes| cast_model_type_value(attributes) }
|
88
77
|
end
|
78
|
+
# rubocop:enable Style/RescueModifier
|
89
79
|
end
|
90
80
|
end
|
91
81
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "active_model"
|
4
|
+
|
5
|
+
module StoreModel
|
6
|
+
module Types
|
7
|
+
# Implements ActiveModel::Type::Value type for handling an array of
|
8
|
+
# StoreModel::Model
|
9
|
+
class ManyPolymorphic < ManyBase
|
10
|
+
include PolymorphicHelper
|
11
|
+
|
12
|
+
# Initializes type for model class
|
13
|
+
#
|
14
|
+
# @param model_wrapper [Proc] class to handle
|
15
|
+
#
|
16
|
+
# @return [StoreModel::Types::PolymorphicArrayType ]
|
17
|
+
def initialize(model_wrapper)
|
18
|
+
@model_wrapper = model_wrapper
|
19
|
+
end
|
20
|
+
|
21
|
+
# Returns type
|
22
|
+
#
|
23
|
+
# @return [Symbol]
|
24
|
+
def type
|
25
|
+
:polymorphic_array
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def ensure_model_class(array)
|
31
|
+
array.map do |object|
|
32
|
+
next object if implements_model?(object.class)
|
33
|
+
|
34
|
+
cast_model_type_value(object)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def cast_model_type_value(value)
|
39
|
+
model_klass = @model_wrapper.call(value)
|
40
|
+
|
41
|
+
raise_extract_wrapper_error(model_klass) unless implements_model?(model_klass)
|
42
|
+
|
43
|
+
model_klass.to_type.cast_value(value)
|
44
|
+
end
|
45
|
+
|
46
|
+
def raise_cast_error(value)
|
47
|
+
raise StoreModel::Types::CastError,
|
48
|
+
"failed casting #{value.inspect}, only String, " \
|
49
|
+
"Hash or instances which implement StoreModel::Model are allowed"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -5,12 +5,12 @@ require "active_model"
|
|
5
5
|
module StoreModel
|
6
6
|
module Types
|
7
7
|
# Implements ActiveModel::Type::Value type for handling an instance of StoreModel::Model
|
8
|
-
class
|
8
|
+
class One < OneBase
|
9
9
|
# Initializes type for model class
|
10
10
|
#
|
11
11
|
# @param model_klass [StoreModel::Model] model class to handle
|
12
12
|
#
|
13
|
-
# @return [StoreModel::Types::
|
13
|
+
# @return [StoreModel::Types::One]
|
14
14
|
def initialize(model_klass)
|
15
15
|
@model_klass = model_klass
|
16
16
|
end
|
@@ -30,7 +30,7 @@ module StoreModel
|
|
30
30
|
def cast_value(value)
|
31
31
|
case value
|
32
32
|
when String then decode_and_initialize(value)
|
33
|
-
when Hash then
|
33
|
+
when Hash then model_instance(value)
|
34
34
|
when @model_klass, nil then value
|
35
35
|
else raise_cast_error(value)
|
36
36
|
end
|
@@ -53,40 +53,16 @@ module StoreModel
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
# Determines whether the mutable value has been modified since it was read
|
57
|
-
#
|
58
|
-
# @param raw_old_value [Object] old value
|
59
|
-
# @param new_value [Object] new value
|
60
|
-
#
|
61
|
-
# @return [Boolean]
|
62
|
-
def changed_in_place?(raw_old_value, new_value)
|
63
|
-
cast_value(raw_old_value) != new_value
|
64
|
-
end
|
65
|
-
|
66
56
|
private
|
67
57
|
|
68
|
-
# rubocop:disable Style/RescueModifier
|
69
|
-
def decode_and_initialize(value)
|
70
|
-
decoded = ActiveSupport::JSON.decode(value) rescue nil
|
71
|
-
@model_klass.new(decoded) unless decoded.nil?
|
72
|
-
rescue ActiveModel::UnknownAttributeError => e
|
73
|
-
handle_unknown_attribute(decoded, e)
|
74
|
-
end
|
75
|
-
# rubocop:enable Style/RescueModifier
|
76
|
-
|
77
58
|
def raise_cast_error(value)
|
78
59
|
raise StoreModel::Types::CastError,
|
79
60
|
"failed casting #{value.inspect}, only String, " \
|
80
61
|
"Hash or #{@model_klass.name} instances are allowed"
|
81
62
|
end
|
82
63
|
|
83
|
-
def
|
84
|
-
|
85
|
-
value_symbolized = value.symbolize_keys
|
86
|
-
|
87
|
-
cast_value(value_symbolized.except(attribute)).tap do |configuration|
|
88
|
-
configuration.unknown_attributes[attribute.to_s] = value_symbolized[attribute]
|
89
|
-
end
|
64
|
+
def model_instance(value)
|
65
|
+
@model_klass.new(value)
|
90
66
|
end
|
91
67
|
end
|
92
68
|
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "active_model"
|
4
|
+
|
5
|
+
module StoreModel
|
6
|
+
module Types
|
7
|
+
# Implements ActiveModel::Type::Value type for handling an instance of StoreModel::Model
|
8
|
+
class OneBase < ActiveModel::Type::Value
|
9
|
+
# Returns type
|
10
|
+
#
|
11
|
+
# @return [Symbol]
|
12
|
+
def type
|
13
|
+
raise NotImplementedError
|
14
|
+
end
|
15
|
+
|
16
|
+
# Casts +value+ from DB or user to StoreModel::Model instance
|
17
|
+
#
|
18
|
+
# @param value [Object] a value to cast
|
19
|
+
#
|
20
|
+
# @return StoreModel::Model
|
21
|
+
def cast_value(_value)
|
22
|
+
raise NotImplementedError
|
23
|
+
end
|
24
|
+
|
25
|
+
# Determines whether the mutable value has been modified since it was read
|
26
|
+
#
|
27
|
+
# @param raw_old_value [Object] old value
|
28
|
+
# @param new_value [Object] new value
|
29
|
+
#
|
30
|
+
# @return [Boolean]
|
31
|
+
def changed_in_place?(raw_old_value, new_value)
|
32
|
+
cast_value(raw_old_value) != new_value
|
33
|
+
end
|
34
|
+
|
35
|
+
protected
|
36
|
+
|
37
|
+
def raise_cast_error(_value)
|
38
|
+
raise NotImplementedError
|
39
|
+
end
|
40
|
+
|
41
|
+
def model_instance(_value)
|
42
|
+
raise NotImplementedError
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
# rubocop:disable Style/RescueModifier
|
48
|
+
def decode_and_initialize(value)
|
49
|
+
decoded = ActiveSupport::JSON.decode(value) rescue nil
|
50
|
+
model_instance(decoded) unless decoded.nil?
|
51
|
+
rescue ActiveModel::UnknownAttributeError => e
|
52
|
+
handle_unknown_attribute(decoded, e)
|
53
|
+
end
|
54
|
+
# rubocop:enable Style/RescueModifier
|
55
|
+
|
56
|
+
def handle_unknown_attribute(value, exception)
|
57
|
+
attribute = exception.attribute.to_sym
|
58
|
+
value_symbolized = value.symbolize_keys
|
59
|
+
|
60
|
+
cast_value(value_symbolized.except(attribute)).tap do |configuration|
|
61
|
+
configuration.unknown_attributes[attribute.to_s] = value_symbolized[attribute]
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "active_model"
|
4
|
+
|
5
|
+
module StoreModel
|
6
|
+
module Types
|
7
|
+
# Implements ActiveModel::Type::Value type for handling an array of
|
8
|
+
# StoreModel::Model
|
9
|
+
class OneOf
|
10
|
+
def initialize(&block)
|
11
|
+
@block = block
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_type
|
15
|
+
Types::OnePolymorphic.new(@block)
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_array_type
|
19
|
+
Types::ManyPolymorphic.new(@block)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "active_model"
|
4
|
+
|
5
|
+
module StoreModel
|
6
|
+
module Types
|
7
|
+
# Implements ActiveModel::Type::Value type for handling an instance of StoreModel::Model
|
8
|
+
class OnePolymorphic < OneBase
|
9
|
+
include PolymorphicHelper
|
10
|
+
|
11
|
+
# Initializes type for model class
|
12
|
+
#
|
13
|
+
# @param model_wrapper [Proc] class to handle
|
14
|
+
#
|
15
|
+
# @return [StoreModel::Types::OnePolymorphic ]
|
16
|
+
def initialize(model_wrapper)
|
17
|
+
@model_wrapper = model_wrapper
|
18
|
+
end
|
19
|
+
|
20
|
+
# Returns type
|
21
|
+
#
|
22
|
+
# @return [Symbol]
|
23
|
+
def type
|
24
|
+
:polymorphic
|
25
|
+
end
|
26
|
+
|
27
|
+
# Casts +value+ from DB or user to StoreModel::Model instance
|
28
|
+
#
|
29
|
+
# @param value [Object] a value to cast
|
30
|
+
#
|
31
|
+
# @return StoreModel::Model
|
32
|
+
def cast_value(value)
|
33
|
+
case value
|
34
|
+
when String then decode_and_initialize(value)
|
35
|
+
when Hash then extract_model_klass(value).new(value)
|
36
|
+
when nil then value
|
37
|
+
else
|
38
|
+
raise_cast_error(value) unless value.class.ancestors.include?(StoreModel::Model)
|
39
|
+
|
40
|
+
value
|
41
|
+
end
|
42
|
+
rescue ActiveModel::UnknownAttributeError => e
|
43
|
+
handle_unknown_attribute(value, e)
|
44
|
+
end
|
45
|
+
|
46
|
+
# Casts a value from the ruby type to a type that the database knows how
|
47
|
+
# to understand.
|
48
|
+
#
|
49
|
+
# @param value [Object] value to serialize
|
50
|
+
#
|
51
|
+
# @return [String] serialized value
|
52
|
+
def serialize(value)
|
53
|
+
case value
|
54
|
+
when Hash
|
55
|
+
ActiveSupport::JSON.encode(value)
|
56
|
+
else
|
57
|
+
return ActiveSupport::JSON.encode(value) if implements_model?(value.class)
|
58
|
+
|
59
|
+
super
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
protected
|
64
|
+
|
65
|
+
# Check if block returns an appropriate class and raise cast error if not
|
66
|
+
#
|
67
|
+
# @param value [Object] raw data
|
68
|
+
#
|
69
|
+
# @return [Class] which implements StoreModel::Model
|
70
|
+
def extract_model_klass(value)
|
71
|
+
model_klass = @model_wrapper.call(value)
|
72
|
+
|
73
|
+
raise_extract_wrapper_error(model_klass) unless implements_model?(model_klass)
|
74
|
+
|
75
|
+
model_klass
|
76
|
+
end
|
77
|
+
|
78
|
+
def raise_cast_error(value)
|
79
|
+
raise StoreModel::Types::CastError,
|
80
|
+
"failed casting #{value.inspect}, only String, " \
|
81
|
+
"Hash or instances which implement StoreModel::Model are allowed"
|
82
|
+
end
|
83
|
+
|
84
|
+
def model_instance(value)
|
85
|
+
extract_model_klass(value).new(value)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Shared methods for polymorphic classes
|
4
|
+
module PolymorphicHelper
|
5
|
+
def raise_extract_wrapper_error(invalid_klass)
|
6
|
+
raise StoreModel::Types::ExpandWrapperError,
|
7
|
+
"#{invalid_klass.inspect} is an invalid model klass"
|
8
|
+
end
|
9
|
+
|
10
|
+
def implements_model?(klass)
|
11
|
+
klass&.ancestors&.include?(StoreModel::Model)
|
12
|
+
end
|
13
|
+
end
|
data/lib/store_model/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: store_model
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- DmitryTsepelev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-06-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -106,9 +106,15 @@ files:
|
|
106
106
|
- lib/store_model/railtie.rb
|
107
107
|
- lib/store_model/type_builders.rb
|
108
108
|
- lib/store_model/types.rb
|
109
|
-
- lib/store_model/types/array_type.rb
|
110
109
|
- lib/store_model/types/enum_type.rb
|
111
|
-
- lib/store_model/types/
|
110
|
+
- lib/store_model/types/many.rb
|
111
|
+
- lib/store_model/types/many_base.rb
|
112
|
+
- lib/store_model/types/many_polymorphic.rb
|
113
|
+
- lib/store_model/types/one.rb
|
114
|
+
- lib/store_model/types/one_base.rb
|
115
|
+
- lib/store_model/types/one_of.rb
|
116
|
+
- lib/store_model/types/one_polymorphic.rb
|
117
|
+
- lib/store_model/types/polymorphic_helper.rb
|
112
118
|
- lib/store_model/version.rb
|
113
119
|
homepage: https://github.com/DmitryTsepelev/store_model
|
114
120
|
licenses:
|