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
         |