Sha256: 9c868849bf876b6245f42b3bace54fe91006c9f65faa0c3cd51ba8e7111587f5

Contents?: true

Size: 1.6 KB

Versions: 24

Compression:

Stored size: 1.6 KB

Contents

# frozen_string_literal: true

module Avromatic
  module Model

    # Instances of this class contains the configuration for custom handling of
    # a named type (record, enum, fixed).
    class CustomTypeConfiguration

      attr_accessor :to_avro, :from_avro, :value_class

      def initialize(value_class)
        @value_class = value_class
      end

      # A deserializer method is used when assigning to the model. It is used both when
      # deserializing a model instance from Avro and when directly instantiating
      # an instance. The deserializer method must accept a single argument and return
      # the value to store in the model for the attribute.
      def deserializer
        proc = from_avro_proc
        wrap_proc(proc) if proc
      end

      # A serializer method is used when preparing attributes to be serialized using
      # Avro. The serializer method must accept a single argument of the model value
      # for the attribute and return a value in a form that Avro can serialize
      # for the attribute.
      def serializer
        proc = to_avro_proc
        wrap_proc(proc) if proc
      end

      private

      def to_avro_proc
        to_avro || value_class_method(:to_avro)
      end

      def from_avro_proc
        from_avro || value_class_method(:from_avro)
      end

      def value_class_method(method_name)
        value_class && value_class.respond_to?(method_name) &&
          value_class.method(method_name).to_proc
      end

      # Wrap the supplied Proc to handle nil.
      def wrap_proc(proc)
        ->(value) { proc.call(value) if value }
      end
    end
  end
end

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
avromatic-5.2.0 lib/avromatic/model/custom_type_configuration.rb
avromatic-5.1.1 lib/avromatic/model/custom_type_configuration.rb
avromatic-5.1.0 lib/avromatic/model/custom_type_configuration.rb
avromatic-5.0.0 lib/avromatic/model/custom_type_configuration.rb
avromatic-4.3.0 lib/avromatic/model/custom_type_configuration.rb
avromatic-4.2.0 lib/avromatic/model/custom_type_configuration.rb
avromatic-4.1.1 lib/avromatic/model/custom_type_configuration.rb
avromatic-4.1.0 lib/avromatic/model/custom_type_configuration.rb
avromatic-4.0.0 lib/avromatic/model/custom_type_configuration.rb
avromatic-3.0.2 lib/avromatic/model/custom_type_configuration.rb
avromatic-3.0.1 lib/avromatic/model/custom_type_configuration.rb
avromatic-3.0.0 lib/avromatic/model/custom_type_configuration.rb
avromatic-2.4.0 lib/avromatic/model/custom_type_configuration.rb
avromatic-2.3.0 lib/avromatic/model/custom_type_configuration.rb
avromatic-2.2.6 lib/avromatic/model/custom_type_configuration.rb
avromatic-2.2.5 lib/avromatic/model/custom_type_configuration.rb
avromatic-2.2.4 lib/avromatic/model/custom_type_configuration.rb
avromatic-2.2.3 lib/avromatic/model/custom_type_configuration.rb
avromatic-2.2.2 lib/avromatic/model/custom_type_configuration.rb
avromatic-2.2.1 lib/avromatic/model/custom_type_configuration.rb