fast_serializer_ruby 0.2.1 → 0.6.3
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/.gitignore +3 -0
- data/.travis.yml +4 -2
- data/CODE_OF_CONDUCT.md +1 -1
- data/Gemfile +18 -1
- data/Gemfile.lock +53 -42
- data/LICENSE.txt +1 -1
- data/README.md +45 -33
- data/fast_serializer.gemspec +6 -13
- data/lib/fast_serializer.rb +2 -1
- data/lib/fast_serializer/configuration.rb +14 -2
- data/lib/fast_serializer/json_model/array.rb +6 -2
- data/lib/fast_serializer/json_model/attribute.rb +109 -15
- data/lib/fast_serializer/json_model/has_many_relationship.rb +5 -3
- data/lib/fast_serializer/json_model/has_one_relationship.rb +4 -1
- data/lib/fast_serializer/json_model/node.rb +11 -3
- data/lib/fast_serializer/json_model/object.rb +16 -6
- data/lib/fast_serializer/json_model/relationship.rb +31 -4
- data/lib/fast_serializer/schema.rb +107 -105
- data/lib/fast_serializer/schema/mixin.rb +71 -0
- data/lib/fast_serializer/utils.rb +17 -0
- data/lib/fast_serializer/version.rb +1 -1
- metadata +11 -134
@@ -0,0 +1,71 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module FastSerializer
|
4
|
+
class Schema
|
5
|
+
module Mixin
|
6
|
+
module ClassMethods
|
7
|
+
attr_accessor :__schema__, :__patched__
|
8
|
+
|
9
|
+
def inherited(subclass)
|
10
|
+
subclass.__schema__ = __schema__.deep_copy
|
11
|
+
end
|
12
|
+
|
13
|
+
def method_missing(method, *args, &block)
|
14
|
+
if __schema__.respond_to?(method)
|
15
|
+
__schema__.public_send(method, *args, &block)
|
16
|
+
else
|
17
|
+
super
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def respond_to_missing?(method_name, include_private = false)
|
22
|
+
__schema__.respond_to?(method_name) || super
|
23
|
+
end
|
24
|
+
|
25
|
+
def __patch_with_attribute_definition
|
26
|
+
injectable_attributes = __schema__.serialization_schema.attributes.select { |_key, attribute| attribute.injectable? }
|
27
|
+
injectable_attributes.each { |_, attribute| attribute.inject(self) }
|
28
|
+
self.__patched__ = true
|
29
|
+
|
30
|
+
__patched__.freeze
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
module InstanceMethods
|
35
|
+
attr_accessor :resource, :params
|
36
|
+
|
37
|
+
def initialize(resource, params = {})
|
38
|
+
self.resource = resource
|
39
|
+
self.params = params || {}
|
40
|
+
end
|
41
|
+
|
42
|
+
alias object resource
|
43
|
+
|
44
|
+
def serializable_hash(opts = {})
|
45
|
+
Utils.ref_merge(params, opts)
|
46
|
+
self.params = params
|
47
|
+
|
48
|
+
unless self.class.__patched__
|
49
|
+
self.class.__patch_with_attribute_definition
|
50
|
+
end
|
51
|
+
|
52
|
+
self.class.__schema__.serialize_resource(resource, params, self)
|
53
|
+
end
|
54
|
+
|
55
|
+
def serialized_json(opts = {})
|
56
|
+
self.params = params.merge(opts)
|
57
|
+
self.class.__schema__.serialize_resource_to_json(resource, params, self)
|
58
|
+
end
|
59
|
+
|
60
|
+
alias as_json serializable_hash
|
61
|
+
alias to_json serialized_json
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.included(base)
|
65
|
+
base.extend ClassMethods
|
66
|
+
base.include InstanceMethods
|
67
|
+
base.__schema__ = FastSerializer::Schema.new
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module FastSerializer
|
4
|
+
module Utils
|
5
|
+
def self.symbolize_keys(hash)
|
6
|
+
res = {}
|
7
|
+
hash.each { |key, value| res[key.to_sym] = value }
|
8
|
+
hash
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.ref_merge(hash_a, hash_b)
|
12
|
+
hash_b.each do |key, value|
|
13
|
+
hash_a[key] = value
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
metadata
CHANGED
@@ -1,142 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fast_serializer_ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Evgeny Stepanov
|
8
8
|
autorequire:
|
9
|
-
bindir:
|
9
|
+
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
13
|
-
|
14
|
-
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 0.10.0
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 0.10.0
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: activesupport
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "<"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '6'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "<"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '6'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: factory_bot
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: faker
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: pry
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ">="
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: rake
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - "~>"
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '10.0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - "~>"
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '10.0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: rspec
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - "~>"
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '3.0'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - "~>"
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '3.0'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: rspec-benchmark
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - ">="
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - ">="
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '0'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: simplecov
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - ">="
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '0'
|
132
|
-
type: :development
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - ">="
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '0'
|
139
|
-
description: fast_serializer is a lightweight ruby objects serializer.
|
11
|
+
date: 2021-02-26 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: This library intends to solve such a typical and on the other hand important
|
14
|
+
problem as efficient ruby object to hash transformation.
|
140
15
|
email:
|
141
16
|
- estepnv@icloud.com
|
142
17
|
executables: []
|
@@ -166,6 +41,8 @@ files:
|
|
166
41
|
- lib/fast_serializer/json_model/object.rb
|
167
42
|
- lib/fast_serializer/json_model/relationship.rb
|
168
43
|
- lib/fast_serializer/schema.rb
|
44
|
+
- lib/fast_serializer/schema/mixin.rb
|
45
|
+
- lib/fast_serializer/utils.rb
|
169
46
|
- lib/fast_serializer/version.rb
|
170
47
|
homepage: https://github.com/estepnv/fast_serializer
|
171
48
|
licenses:
|
@@ -182,15 +59,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
182
59
|
requirements:
|
183
60
|
- - ">="
|
184
61
|
- !ruby/object:Gem::Version
|
185
|
-
version:
|
62
|
+
version: 2.3.0
|
186
63
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
187
64
|
requirements:
|
188
65
|
- - ">="
|
189
66
|
- !ruby/object:Gem::Version
|
190
67
|
version: '0'
|
191
68
|
requirements: []
|
192
|
-
rubygems_version: 3.
|
69
|
+
rubygems_version: 3.1.2
|
193
70
|
signing_key:
|
194
71
|
specification_version: 4
|
195
|
-
summary:
|
72
|
+
summary: fast_serializer is a lightweight ruby objects serializer.
|
196
73
|
test_files: []
|