bright_serializer 0.3.1 → 0.5.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 +54 -11
- data/lib/bright_serializer/attribute.rb +17 -12
- data/lib/bright_serializer/attribute_relation.rb +40 -0
- data/lib/bright_serializer/entity/base.rb +1 -1
- data/lib/bright_serializer/extensions/instrumentation.rb +26 -0
- data/lib/bright_serializer/extensions.rb +16 -0
- data/lib/bright_serializer/inflector.rb +0 -31
- data/lib/bright_serializer/serializer.rb +39 -12
- data/lib/bright_serializer/version.rb +1 -1
- data/lib/bright_serializer.rb +2 -0
- metadata +20 -64
- data/.gitignore +0 -14
- data/.rspec +0 -3
- data/.rubocop.yml +0 -39
- data/.ruby-version +0 -1
- data/CHANGELOG.md +0 -52
- data/Gemfile +0 -18
- data/Gemfile.lock +0 -92
- data/Rakefile +0 -8
- data/bright_serializer.gemspec +0 -44
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ccd3ca73a3a175ff41e1b661b1d4287e330e51fac24cc4483e88f231d711006c
|
4
|
+
data.tar.gz: 2d326508db9454e2ff3923731572710caa07f11584f3cf06bf9634e851e5bbcc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2c025a5b514015a760587254fb18e5a8eaf3d58e522031300f6d4a5a3049ba7af0462371cb951ec3637f471ffd015981a74affd8fc1d4d20b9fe87874d598082
|
7
|
+
data.tar.gz: 4a6182583ccb22ee99360852c3dc0ca6d8b097cba21dba8608062325f7958bc1a90f774b87e19e389785e042a90c7aab4da30f548efda101085e0f7af08bdc5e
|
data/README.md
CHANGED
@@ -74,7 +74,7 @@ class AccountSerializer
|
|
74
74
|
include BrightSerializer::Serializer
|
75
75
|
attributes :id, :first_name, :last_name
|
76
76
|
|
77
|
-
attribute :email, if:
|
77
|
+
attribute :email, if: proc { |object, params| params[:current_user].is_admin? }
|
78
78
|
end
|
79
79
|
```
|
80
80
|
|
@@ -108,7 +108,18 @@ AccountSerializer.new(Account.first, fields: [:first_name, :last_name]).to_json
|
|
108
108
|
|
109
109
|
### Relations
|
110
110
|
|
111
|
-
|
111
|
+
`has_one`, `has_many` and `belongs_to` helper methods can be use to use an other
|
112
|
+
serializer for nested attributes and relations.
|
113
|
+
|
114
|
+
* The `serializer` option must be provided.
|
115
|
+
|
116
|
+
When using theses methods you can pass options that will be apply like any other attributes.
|
117
|
+
|
118
|
+
* The option `if` can be pass to show or hide the relation.
|
119
|
+
* The option `entity` to generate API documentation.
|
120
|
+
* The option `fields` to only serializer some attributes of the nested object.
|
121
|
+
* The option `params` can be passed, it will be merged with the parent params.
|
122
|
+
* A block can be passed and the return value will be serialized with the `serializer` passed.
|
112
123
|
|
113
124
|
```ruby
|
114
125
|
class FriendSerializer
|
@@ -120,10 +131,27 @@ class AccountSerializer
|
|
120
131
|
include BrightSerializer::Serializer
|
121
132
|
attributes :id, :first_name, :last_name
|
122
133
|
|
123
|
-
|
124
|
-
|
125
|
-
|
134
|
+
has_many :friends, serializer: 'FriendSerializer'
|
135
|
+
end
|
136
|
+
```
|
137
|
+
|
138
|
+
```ruby
|
139
|
+
# Block
|
140
|
+
has_one :best_friend, serializer: 'FriendSerializer' do |object, params|
|
141
|
+
# ...
|
126
142
|
end
|
143
|
+
|
144
|
+
# If
|
145
|
+
belongs_to :best_friend_of, serializer: 'FriendSerializer', if: proc { |object, params| '...' }
|
146
|
+
|
147
|
+
# Fields
|
148
|
+
has_one :best_friend, serializer: 'FriendSerializer', fields: [:first_name, :last_name]
|
149
|
+
|
150
|
+
# Params
|
151
|
+
has_one :best_friend, serializer: 'FriendSerializer', params: { static_param: true }
|
152
|
+
|
153
|
+
# Entity
|
154
|
+
has_one :best_friend, serializer: 'FriendSerializer', entity: { description: '...' }
|
127
155
|
```
|
128
156
|
|
129
157
|
### Entity
|
@@ -138,21 +166,26 @@ class AccountSerializer
|
|
138
166
|
attribute :id, entity: { type: :string, description: 'The id of the account' }
|
139
167
|
attribute :name
|
140
168
|
|
141
|
-
|
169
|
+
has_many :friends, serializer: 'FriendSerializer',
|
142
170
|
entity: {
|
143
|
-
type: :array,
|
144
|
-
}
|
145
|
-
FriendSerializer.new(object.friends)
|
146
|
-
end
|
171
|
+
type: :array, description: 'The list the account friends.'
|
172
|
+
}
|
147
173
|
end
|
148
|
-
|
149
174
|
```
|
175
|
+
|
150
176
|
Callable values are supported.
|
151
177
|
|
152
178
|
```ruby
|
153
179
|
{ entity: { type: :string, enum: -> { SomeModel::ENUMVALUES } } }
|
154
180
|
```
|
155
181
|
|
182
|
+
For relations only `type` need to be defined, `ref` will use the same class has `serializer`.
|
183
|
+
|
184
|
+
```ruby
|
185
|
+
has_many :friends, serializer: 'FriendSerializer', entity: { type: :array }
|
186
|
+
has_one :best_friend, serializer: 'FriendSerializer', entity: { type: :object }
|
187
|
+
```
|
188
|
+
|
156
189
|
### Instance
|
157
190
|
|
158
191
|
If you have defined instance methods inside your serializer you can access them inside block attribute.
|
@@ -172,6 +205,16 @@ class AccountSerializer
|
|
172
205
|
end
|
173
206
|
```
|
174
207
|
|
208
|
+
## Benchmark
|
209
|
+
|
210
|
+
Event if the main goal is not performance, it has very good result.
|
211
|
+
|
212
|
+
```sh
|
213
|
+
ruby benchmarks/collection.rb
|
214
|
+
```
|
215
|
+
|
216
|
+
<img src="benchmarks/ips.png" width="400px">
|
217
|
+
|
175
218
|
## Development
|
176
219
|
|
177
220
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
@@ -17,18 +17,7 @@ module BrightSerializer
|
|
17
17
|
def serialize(serializer_instance, object, params)
|
18
18
|
return unless object
|
19
19
|
|
20
|
-
value =
|
21
|
-
if @block
|
22
|
-
if @block.arity.abs == 1
|
23
|
-
serializer_instance.instance_exec(object, &@block)
|
24
|
-
else
|
25
|
-
serializer_instance.instance_exec(object, params, &@block)
|
26
|
-
end
|
27
|
-
elsif object.is_a?(Hash)
|
28
|
-
object.key?(key) ? object[key] : object[key.to_s]
|
29
|
-
else
|
30
|
-
object.send(key)
|
31
|
-
end
|
20
|
+
value = attribute_value(serializer_instance, object, params)
|
32
21
|
|
33
22
|
value.respond_to?(:serializable_hash) ? value.serializable_hash : value
|
34
23
|
end
|
@@ -38,5 +27,21 @@ module BrightSerializer
|
|
38
27
|
|
39
28
|
@condition.call(object, params)
|
40
29
|
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def attribute_value(serializer_instance, object, params)
|
34
|
+
if @block
|
35
|
+
if @block.arity.negative?
|
36
|
+
serializer_instance.instance_exec(object, &@block)
|
37
|
+
else
|
38
|
+
serializer_instance.instance_exec(object, params, &@block)
|
39
|
+
end
|
40
|
+
elsif object.is_a?(Hash)
|
41
|
+
object.key?(key) ? object[key] : object[key.to_s]
|
42
|
+
else
|
43
|
+
object.public_send(key)
|
44
|
+
end
|
45
|
+
end
|
41
46
|
end
|
42
47
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BrightSerializer
|
4
|
+
class AttributeRelation < Attribute
|
5
|
+
def initialize(key, serializer, condition, entity, options, &block)
|
6
|
+
@serializer = serializer
|
7
|
+
@options = options || {}
|
8
|
+
|
9
|
+
add_entity_ref!(entity)
|
10
|
+
super(key, condition, entity, &block)
|
11
|
+
end
|
12
|
+
|
13
|
+
def serialize(serializer_instance, object, params)
|
14
|
+
return unless object
|
15
|
+
|
16
|
+
merged_params = nil
|
17
|
+
merged_params = (params || {}).merge(@options[:params] || {}) if params || @options[:params]
|
18
|
+
value = attribute_value(serializer_instance, object, merged_params)
|
19
|
+
|
20
|
+
class_serializer.new(value, params: merged_params, **@options).serializable_hash
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def class_serializer
|
26
|
+
@class_serializer ||= @serializer.is_a?(String) ? @serializer.constantize : @serializer
|
27
|
+
end
|
28
|
+
|
29
|
+
def add_entity_ref!(entity)
|
30
|
+
return unless entity
|
31
|
+
|
32
|
+
if entity[:type].to_sym == :object && entity[:ref].nil?
|
33
|
+
entity[:ref] = @serializer
|
34
|
+
elsif entity[:type].to_sym == :array && entity.dig(:items, :ref).nil?
|
35
|
+
entity[:items] ||= {}
|
36
|
+
entity[:items][:ref] = @serializer
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -24,7 +24,7 @@ module BrightSerializer
|
|
24
24
|
object = nested_hash(@definition, 'ref')
|
25
25
|
return unless object
|
26
26
|
|
27
|
-
ref_entity_name =
|
27
|
+
ref_entity_name = object.delete('ref').constantize.entity_name
|
28
28
|
relation = "#/definitions/#{ref_entity_name}"
|
29
29
|
object['$ref'] = relation
|
30
30
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BrightSerializer
|
4
|
+
module Extensions
|
5
|
+
module Instrumentation
|
6
|
+
SERIALIZABLE_HASH_NOTIFICATION = 'render.bright_serializer.serializable_hash'
|
7
|
+
SERIALIZED_JSON_NOTIFICATION = 'render.bright_serializer.serializable_json'
|
8
|
+
|
9
|
+
def serializable_hash
|
10
|
+
ActiveSupport::Notifications.instrument(SERIALIZABLE_HASH_NOTIFICATION, serializer: self.class.name) do
|
11
|
+
super
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
alias to_hash serializable_hash
|
16
|
+
|
17
|
+
def serializable_json(*_args)
|
18
|
+
ActiveSupport::Notifications.instrument(SERIALIZED_JSON_NOTIFICATION, serializer: self.class.name) do
|
19
|
+
super
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
alias to_json serializable_json
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BrightSerializer
|
4
|
+
module Extensions
|
5
|
+
def self.included(base)
|
6
|
+
instrumentation_extension(base)
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.instrumentation_extension(base)
|
10
|
+
return unless defined? ActiveSupport
|
11
|
+
|
12
|
+
require_relative 'extensions/instrumentation'
|
13
|
+
base.prepend Instrumentation
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -29,37 +29,6 @@ class Inflector
|
|
29
29
|
underscored_word
|
30
30
|
end
|
31
31
|
|
32
|
-
# File activesupport/lib/active_support/inflector/methods.rb, line 271
|
33
|
-
def constantize(camel_cased_word)
|
34
|
-
names = camel_cased_word.split('::')
|
35
|
-
|
36
|
-
# Trigger a built-in NameError exception including the ill-formed constant in the message.
|
37
|
-
Object.const_get(camel_cased_word) if names.empty?
|
38
|
-
|
39
|
-
# Remove the first blank element in case of '::ClassName' notation.
|
40
|
-
names.shift if names.size > 1 && names.first.empty?
|
41
|
-
|
42
|
-
names.inject(Object) do |constant, name|
|
43
|
-
if constant == Object
|
44
|
-
constant.const_get(name)
|
45
|
-
else
|
46
|
-
candidate = constant.const_get(name)
|
47
|
-
next candidate if constant.const_defined?(name, false)
|
48
|
-
next candidate unless Object.const_defined?(name)
|
49
|
-
|
50
|
-
# Go down the ancestors to check if it is owned directly. The check
|
51
|
-
# stops when we reach Object or the end of ancestors tree.
|
52
|
-
constant = constant.ancestors.each_with_object(constant) do |ancestor, const|
|
53
|
-
break const if ancestor == Object
|
54
|
-
break ancestor if ancestor.const_defined?(name, false)
|
55
|
-
end
|
56
|
-
|
57
|
-
# owner is in Object, so raise
|
58
|
-
constant.const_get(name, false)
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
32
|
# File active_support/core_ext/hash/keys.rb, line 116
|
64
33
|
def deep_transform_keys_in_object(object, &block)
|
65
34
|
case object
|
@@ -1,13 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'oj'
|
4
|
-
require 'set'
|
5
4
|
require_relative 'attribute'
|
5
|
+
require_relative 'attribute_relation'
|
6
6
|
require_relative 'inflector'
|
7
7
|
require_relative 'entity/base'
|
8
|
+
require_relative 'extensions'
|
8
9
|
|
9
10
|
module BrightSerializer
|
10
11
|
module Serializer
|
12
|
+
include Extensions
|
13
|
+
|
11
14
|
SUPPORTED_TRANSFORMATION = %i[camel camel_lower dash underscore].freeze
|
12
15
|
DEFAULT_OJ_OPTIONS = { mode: :compat, time_format: :ruby, use_to_json: true }.freeze
|
13
16
|
|
@@ -20,14 +23,13 @@ module BrightSerializer
|
|
20
23
|
def initialize(object, **options)
|
21
24
|
@object = object
|
22
25
|
@params = options.delete(:params)
|
23
|
-
|
24
|
-
fields = options.delete(:fields)
|
25
|
-
@fields = fields ? Set.new(fields) : nil
|
26
|
+
@fields = options.delete(:fields)
|
26
27
|
end
|
27
28
|
|
28
|
-
def serialize(object)
|
29
|
-
|
30
|
-
|
29
|
+
def serialize(object, attributes_to_serialize)
|
30
|
+
return nil if @object.nil?
|
31
|
+
|
32
|
+
attributes_to_serialize.each_with_object({}) do |attribute, result|
|
31
33
|
next unless attribute.condition?(object, @params)
|
32
34
|
|
33
35
|
result[attribute.transformed_key] = attribute.serialize(self, object, @params)
|
@@ -36,9 +38,9 @@ module BrightSerializer
|
|
36
38
|
|
37
39
|
def serializable_hash
|
38
40
|
if @object.respond_to?(:each) && !@object.respond_to?(:each_pair)
|
39
|
-
@object.map { |o| serialize
|
41
|
+
@object.map { |o| serialize(o, instance_attributes_to_serialize) }
|
40
42
|
else
|
41
|
-
serialize(@object)
|
43
|
+
serialize(@object, instance_attributes_to_serialize)
|
42
44
|
end
|
43
45
|
end
|
44
46
|
|
@@ -60,8 +62,9 @@ module BrightSerializer
|
|
60
62
|
subclass.instance_variable_set(:@transform_method, @transform_method) unless subclass.transform_method
|
61
63
|
end
|
62
64
|
|
63
|
-
def attributes(*
|
64
|
-
|
65
|
+
def attributes(*args, &block)
|
66
|
+
options = args.extract_options!
|
67
|
+
args.each do |key|
|
65
68
|
attribute = Attribute.new(key, options[:if], options[:entity], &block)
|
66
69
|
attribute.transformed_key = run_transform_key(key)
|
67
70
|
@attributes_to_serialize << attribute
|
@@ -70,9 +73,20 @@ module BrightSerializer
|
|
70
73
|
|
71
74
|
alias attribute attributes
|
72
75
|
|
76
|
+
def has_one(key, serializer:, **options, &block) # rubocop:disable Naming/PredicateName
|
77
|
+
attribute = AttributeRelation.new(
|
78
|
+
key, serializer, options.delete(:if), options.delete(:entity), options, &block
|
79
|
+
)
|
80
|
+
attribute.transformed_key = run_transform_key(key)
|
81
|
+
@attributes_to_serialize << attribute
|
82
|
+
end
|
83
|
+
|
84
|
+
alias has_many has_one
|
85
|
+
alias belongs_to has_one
|
86
|
+
|
73
87
|
def set_key_transform(transform_name) # rubocop:disable Naming/AccessorMethodName
|
74
88
|
unless SUPPORTED_TRANSFORMATION.include?(transform_name)
|
75
|
-
raise ArgumentError "Invalid transformation: #{SUPPORTED_TRANSFORMATION}"
|
89
|
+
raise ArgumentError, "Invalid transformation: #{SUPPORTED_TRANSFORMATION}"
|
76
90
|
end
|
77
91
|
|
78
92
|
@transform_method = transform_name
|
@@ -100,5 +114,18 @@ module BrightSerializer
|
|
100
114
|
name.split('::').last.downcase
|
101
115
|
end
|
102
116
|
end
|
117
|
+
|
118
|
+
private
|
119
|
+
|
120
|
+
def instance_attributes_to_serialize
|
121
|
+
@instance_attributes_to_serialize ||=
|
122
|
+
if @fields.nil?
|
123
|
+
self.class.attributes_to_serialize
|
124
|
+
else
|
125
|
+
self.class.attributes_to_serialize.select do |field|
|
126
|
+
@fields.include?(field.key)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
103
130
|
end
|
104
131
|
end
|
data/lib/bright_serializer.rb
CHANGED
metadata
CHANGED
@@ -1,79 +1,37 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bright_serializer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jean-Francis Bastien
|
8
8
|
autorequire:
|
9
|
-
bindir:
|
9
|
+
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-03-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: activesupport
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '5.2'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '3'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: bundler
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '2'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
24
|
+
- - ">="
|
39
25
|
- !ruby/object:Gem::Version
|
40
|
-
version: '2'
|
26
|
+
version: '5.2'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '2'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '2'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: rake
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '13.0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '13.0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: rspec
|
28
|
+
name: oj
|
71
29
|
requirement: !ruby/object:Gem::Requirement
|
72
30
|
requirements:
|
73
31
|
- - "~>"
|
74
32
|
- !ruby/object:Gem::Version
|
75
33
|
version: '3.0'
|
76
|
-
type: :
|
34
|
+
type: :runtime
|
77
35
|
prerelease: false
|
78
36
|
version_requirements: !ruby/object:Gem::Requirement
|
79
37
|
requirements:
|
@@ -85,23 +43,19 @@ email:
|
|
85
43
|
- jfbastien@petalmd.com
|
86
44
|
executables: []
|
87
45
|
extensions: []
|
88
|
-
extra_rdoc_files:
|
46
|
+
extra_rdoc_files:
|
47
|
+
- LICENSE.txt
|
48
|
+
- README.md
|
89
49
|
files:
|
90
|
-
- ".gitignore"
|
91
|
-
- ".rspec"
|
92
|
-
- ".rubocop.yml"
|
93
|
-
- ".ruby-version"
|
94
|
-
- CHANGELOG.md
|
95
|
-
- Gemfile
|
96
|
-
- Gemfile.lock
|
97
50
|
- LICENSE.txt
|
98
51
|
- README.md
|
99
|
-
- Rakefile
|
100
|
-
- bright_serializer.gemspec
|
101
52
|
- lib/bright_serializer.rb
|
102
53
|
- lib/bright_serializer/attribute.rb
|
54
|
+
- lib/bright_serializer/attribute_relation.rb
|
103
55
|
- lib/bright_serializer/entity/base.rb
|
104
56
|
- lib/bright_serializer/entity/parser.rb
|
57
|
+
- lib/bright_serializer/extensions.rb
|
58
|
+
- lib/bright_serializer/extensions/instrumentation.rb
|
105
59
|
- lib/bright_serializer/inflector.rb
|
106
60
|
- lib/bright_serializer/serializer.rb
|
107
61
|
- lib/bright_serializer/version.rb
|
@@ -110,8 +64,10 @@ licenses:
|
|
110
64
|
- MIT
|
111
65
|
metadata:
|
112
66
|
homepage_uri: https://github.com/petalmd/bright_serializer
|
113
|
-
source_code_uri: https://github.com/petalmd/bright_serializer
|
114
67
|
changelog_uri: https://github.com/petalmd/bright_serializer/blob/master/CHANGELOG.md
|
68
|
+
source_code_uri: https://github.com/petalmd/bright_serializer
|
69
|
+
bug_tracker_uri: https://github.com/petalmd/bright_serializer/issues
|
70
|
+
rubygems_mfa_required: 'true'
|
115
71
|
post_install_message:
|
116
72
|
rdoc_options: []
|
117
73
|
require_paths:
|
@@ -120,7 +76,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
120
76
|
requirements:
|
121
77
|
- - ">="
|
122
78
|
- !ruby/object:Gem::Version
|
123
|
-
version: '2.
|
79
|
+
version: '2.6'
|
124
80
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
125
81
|
requirements:
|
126
82
|
- - ">="
|
data/.gitignore
DELETED
data/.rspec
DELETED
data/.rubocop.yml
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
require:
|
2
|
-
- rubocop-performance
|
3
|
-
- rubocop-rspec
|
4
|
-
|
5
|
-
AllCops:
|
6
|
-
NewCops: enable
|
7
|
-
|
8
|
-
Metrics/BlockLength:
|
9
|
-
Enabled: false
|
10
|
-
|
11
|
-
Layout/LineLength:
|
12
|
-
Max: 120
|
13
|
-
|
14
|
-
Style/Documentation:
|
15
|
-
Enabled: false
|
16
|
-
|
17
|
-
RSpec/ExampleLength:
|
18
|
-
Enabled: false
|
19
|
-
|
20
|
-
RSpec/NamedSubject:
|
21
|
-
Enabled: false
|
22
|
-
|
23
|
-
Gemspec/RequiredRubyVersion:
|
24
|
-
Enabled: false
|
25
|
-
|
26
|
-
Metrics/PerceivedComplexity:
|
27
|
-
Enabled: false
|
28
|
-
|
29
|
-
Metrics/MethodLength:
|
30
|
-
Enabled: false
|
31
|
-
|
32
|
-
Metrics/CyclomaticComplexity:
|
33
|
-
Enabled: false
|
34
|
-
|
35
|
-
Metrics/AbcSize:
|
36
|
-
Enabled: false
|
37
|
-
|
38
|
-
RSpec/NestedGroups:
|
39
|
-
Enabled: false
|
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
2.7.1
|
data/CHANGELOG.md
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
# Change log
|
2
|
-
|
3
|
-
## master (unreleased)
|
4
|
-
|
5
|
-
## 0.3.1 (2022-09-28)
|
6
|
-
|
7
|
-
* Performance improvements, use nil instead of empty set. ([#97](https://github.com/petalmd/bright_serializer/pull/97))
|
8
|
-
* Move specs out of lib. ([#96](https://github.com/petalmd/bright_serializer/pull/96))
|
9
|
-
|
10
|
-
## 0.3.0 (2022-05-26)
|
11
|
-
|
12
|
-
* Allow to evaluate entity values with a callable lambda. ([#88](https://github.com/petalmd/bright_serializer/pull/88))
|
13
|
-
* Fix `FrozenError (can't modify frozen Array)` when parsing entity. ([#83](https://github.com/petalmd/bright_serializer/pull/83))
|
14
|
-
* Added the support to use instance methods from a serializer class in the library ([#85](https://github.com/petalmd/bright_serializer/pull/85))
|
15
|
-
* Use real coveralls_reborn gem
|
16
|
-
|
17
|
-
## 0.2.5 (2021-03-08)
|
18
|
-
|
19
|
-
* When serializing an Hash, check present of the key before trying string ([#57](https://github.com/petalmd/bright_serializer/pull/57))
|
20
|
-
|
21
|
-
## 0.2.4 (2021-02-19)
|
22
|
-
|
23
|
-
* Try symbol and string keys when the object to serialize is an Hash ([#54](https://github.com/petalmd/bright_serializer/pull/54))
|
24
|
-
|
25
|
-
## 0.2.3 (2021-01-04)
|
26
|
-
|
27
|
-
* Update dependencies ([v0.2.2...v0.2.3](https://github.com/petalmd/bright_serializer/compare/v0.2.2...v0.2.3))
|
28
|
-
|
29
|
-
## 0.2.2 (2020-07-22)
|
30
|
-
|
31
|
-
* Run CI build on all supported Ruby versions ([#11](https://github.com/petalmd/bright_serializer/pull/11))
|
32
|
-
* Update Rubocop 0.78.0 => 0.88.0 and run auto-correction
|
33
|
-
* Deep transform entity keys ([#12](https://github.com/petalmd/bright_serializer/pull/12))
|
34
|
-
|
35
|
-
## 0.2.1 (2020-07-21)
|
36
|
-
|
37
|
-
* Handle set_key_transform inherited from a parent serializer ([#10](https://github.com/petalmd/bright_serializer/pull/10))
|
38
|
-
|
39
|
-
## 0.2.0 (2020-07-17)
|
40
|
-
|
41
|
-
* Add RubyGems version badge
|
42
|
-
* Handle inherit from a parent serializer
|
43
|
-
* Define entity in serializer for grape_swagger ([#9](https://github.com/petalmd/bright_serializer/pull/9))
|
44
|
-
|
45
|
-
## 0.1.1 (2020-07-13)
|
46
|
-
|
47
|
-
* Add description in gemspec file
|
48
|
-
* Add content in CHANGELOG.md
|
49
|
-
|
50
|
-
## 0.1.0 (2020-07-13)
|
51
|
-
|
52
|
-
* First release
|
data/Gemfile
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
source 'https://rubygems.org'
|
4
|
-
|
5
|
-
git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
|
6
|
-
|
7
|
-
# Specify your gem's dependencies in bright_serializer.gemspec
|
8
|
-
gemspec
|
9
|
-
|
10
|
-
gem 'oj', require: false
|
11
|
-
|
12
|
-
group :test do
|
13
|
-
gem 'coveralls_reborn', require: false
|
14
|
-
gem 'faker'
|
15
|
-
gem 'rubocop'
|
16
|
-
gem 'rubocop-performance'
|
17
|
-
gem 'rubocop-rspec'
|
18
|
-
end
|
data/Gemfile.lock
DELETED
@@ -1,92 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
bright_serializer (0.3.1)
|
5
|
-
oj (~> 3)
|
6
|
-
|
7
|
-
GEM
|
8
|
-
remote: https://rubygems.org/
|
9
|
-
specs:
|
10
|
-
ast (2.4.1)
|
11
|
-
concurrent-ruby (1.1.7)
|
12
|
-
coveralls_reborn (0.22.0)
|
13
|
-
simplecov (>= 0.18.1, < 0.22.0)
|
14
|
-
term-ansicolor (~> 1.6)
|
15
|
-
thor (>= 0.20.3, < 2.0)
|
16
|
-
tins (~> 1.16)
|
17
|
-
diff-lcs (1.4.4)
|
18
|
-
docile (1.4.0)
|
19
|
-
faker (2.15.1)
|
20
|
-
i18n (>= 1.6, < 2)
|
21
|
-
i18n (1.8.5)
|
22
|
-
concurrent-ruby (~> 1.0)
|
23
|
-
oj (3.11.1)
|
24
|
-
parallel (1.20.1)
|
25
|
-
parser (3.0.0.0)
|
26
|
-
ast (~> 2.4.1)
|
27
|
-
rainbow (3.0.0)
|
28
|
-
rake (13.0.3)
|
29
|
-
regexp_parser (2.0.3)
|
30
|
-
rexml (3.2.4)
|
31
|
-
rspec (3.10.0)
|
32
|
-
rspec-core (~> 3.10.0)
|
33
|
-
rspec-expectations (~> 3.10.0)
|
34
|
-
rspec-mocks (~> 3.10.0)
|
35
|
-
rspec-core (3.10.0)
|
36
|
-
rspec-support (~> 3.10.0)
|
37
|
-
rspec-expectations (3.10.0)
|
38
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
39
|
-
rspec-support (~> 3.10.0)
|
40
|
-
rspec-mocks (3.10.0)
|
41
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
42
|
-
rspec-support (~> 3.10.0)
|
43
|
-
rspec-support (3.10.0)
|
44
|
-
rubocop (0.93.1)
|
45
|
-
parallel (~> 1.10)
|
46
|
-
parser (>= 2.7.1.5)
|
47
|
-
rainbow (>= 2.2.2, < 4.0)
|
48
|
-
regexp_parser (>= 1.8)
|
49
|
-
rexml
|
50
|
-
rubocop-ast (>= 0.6.0)
|
51
|
-
ruby-progressbar (~> 1.7)
|
52
|
-
unicode-display_width (>= 1.4.0, < 2.0)
|
53
|
-
rubocop-ast (1.4.0)
|
54
|
-
parser (>= 2.7.1.5)
|
55
|
-
rubocop-performance (1.9.2)
|
56
|
-
rubocop (>= 0.90.0, < 2.0)
|
57
|
-
rubocop-ast (>= 0.4.0)
|
58
|
-
rubocop-rspec (1.44.1)
|
59
|
-
rubocop (~> 0.87)
|
60
|
-
rubocop-ast (>= 0.7.1)
|
61
|
-
ruby-progressbar (1.11.0)
|
62
|
-
simplecov (0.21.2)
|
63
|
-
docile (~> 1.1)
|
64
|
-
simplecov-html (~> 0.11)
|
65
|
-
simplecov_json_formatter (~> 0.1)
|
66
|
-
simplecov-html (0.12.3)
|
67
|
-
simplecov_json_formatter (0.1.3)
|
68
|
-
sync (0.5.0)
|
69
|
-
term-ansicolor (1.7.1)
|
70
|
-
tins (~> 1.0)
|
71
|
-
thor (1.1.0)
|
72
|
-
tins (1.29.1)
|
73
|
-
sync
|
74
|
-
unicode-display_width (1.7.0)
|
75
|
-
|
76
|
-
PLATFORMS
|
77
|
-
ruby
|
78
|
-
|
79
|
-
DEPENDENCIES
|
80
|
-
bright_serializer!
|
81
|
-
bundler (~> 2)
|
82
|
-
coveralls_reborn
|
83
|
-
faker
|
84
|
-
oj
|
85
|
-
rake (~> 13.0)
|
86
|
-
rspec (~> 3.0)
|
87
|
-
rubocop
|
88
|
-
rubocop-performance
|
89
|
-
rubocop-rspec
|
90
|
-
|
91
|
-
BUNDLED WITH
|
92
|
-
2.2.3
|
data/Rakefile
DELETED
data/bright_serializer.gemspec
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
lib = File.expand_path('lib', __dir__)
|
4
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
-
require 'bright_serializer/version'
|
6
|
-
|
7
|
-
Gem::Specification.new do |spec|
|
8
|
-
spec.name = 'bright_serializer'
|
9
|
-
spec.version = BrightSerializer::VERSION
|
10
|
-
spec.authors = ['Jean-Francis Bastien']
|
11
|
-
spec.email = ['jfbastien@petalmd.com']
|
12
|
-
|
13
|
-
spec.summary = 'Light and fast Ruby serializer'
|
14
|
-
spec.description = 'BrightSerializer is a minimalist implementation serializer for Ruby objects.'
|
15
|
-
spec.homepage = 'https://github.com/petalmd/bright_serializer'
|
16
|
-
spec.license = 'MIT'
|
17
|
-
spec.required_ruby_version = '>= 2.5'
|
18
|
-
|
19
|
-
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
20
|
-
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
21
|
-
if spec.respond_to?(:metadata)
|
22
|
-
spec.metadata['homepage_uri'] = spec.homepage
|
23
|
-
spec.metadata['source_code_uri'] = 'https://github.com/petalmd/bright_serializer'
|
24
|
-
spec.metadata['changelog_uri'] = 'https://github.com/petalmd/bright_serializer/blob/master/CHANGELOG.md'
|
25
|
-
else
|
26
|
-
raise 'RubyGems 2.0 or newer is required to protect against ' \
|
27
|
-
'public gem pushes.'
|
28
|
-
end
|
29
|
-
|
30
|
-
# Specify which files should be added to the gem when it is released.
|
31
|
-
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
32
|
-
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
33
|
-
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|.github)/}) }
|
34
|
-
end
|
35
|
-
spec.bindir = 'exe'
|
36
|
-
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
37
|
-
spec.require_paths = ['lib']
|
38
|
-
|
39
|
-
spec.add_runtime_dependency 'oj', '~> 3'
|
40
|
-
spec.add_development_dependency 'bundler', '~> 2'
|
41
|
-
spec.add_development_dependency 'faker', '~> 2'
|
42
|
-
spec.add_development_dependency 'rake', '~> 13.0'
|
43
|
-
spec.add_development_dependency 'rspec', '~> 3.0'
|
44
|
-
end
|