Sha256: e9be6452e152fb9da8c946668b74e6240f8284a51cab03298b5228b89bc0b329

Contents?: true

Size: 1.14 KB

Versions: 2

Compression:

Stored size: 1.14 KB

Contents

# frozen_string_literal: true

require_relative 'entity/base'

module BrightSerializer
  class Attribute
    attr_reader :key, :block, :condition, :entity
    attr_accessor :transformed_key

    def initialize(key, condition, entity, &block)
      @key = key
      @condition = condition
      @block = block
      @entity = entity ? Entity::Base.new(entity) : nil
    end

    def serialize(serializer_instance, object, params)
      return unless object

      value = attribute_value(serializer_instance, object, params)

      value.respond_to?(:serializable_hash) ? value.serializable_hash : value
    end

    def condition?(object, params)
      return true unless @condition

      @condition.call(object, params)
    end

    private

    def attribute_value(serializer_instance, object, params)
      if @block
        if @block.arity.abs == 1
          serializer_instance.instance_exec(object, &@block)
        else
          serializer_instance.instance_exec(object, params, &@block)
        end
      elsif object.is_a?(Hash)
        object.key?(key) ? object[key] : object[key.to_s]
      else
        object.public_send(key)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
bright_serializer-0.4.1 lib/bright_serializer/attribute.rb
bright_serializer-0.4.0 lib/bright_serializer/attribute.rb