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 |