Sha256: 2096180a855ca9ce7eaea375947443824be2865816e64c974e59f418474fcbb8

Contents?: true

Size: 1.92 KB

Versions: 7

Compression:

Stored size: 1.92 KB

Contents

# frozen_string_literal: true

module Avro
  module Builder
    module Types

      # This concern is used by types that can be defined at the top-level,
      # i.e. outside a field.
      module TopLevel

        def self.included(base)
          base.add_option_name :_name
        end

        # Provide a way to set the name internally for a top-level type.
        def _name=(value)
          @name = value
        end
        private :_name=

        # Namespace is settable as a top-level option
        attr_writer :namespace

        module TopLevelErrorHandling

          # Options disallowed for top-level types.

          def type_name=(_value)
            name_attribute_error!
          end

          def type_namespace=(_value)
            namespace_instead_of_type_namespace_error!
          end

          private

          def type_aliases=(_value)
            raise AttributeError
              .new("'aliases' must be used instead of 'type_aliases'")
          end
          alias_method :type_aliases, :type_aliases=

          def name_attribute_error!
            raise AttributeError
                    .new("name must be specified as the first argument for #{avro_type_name}")
          end
          alias_method :type_name_instead_of_name_error!, :name_attribute_error!
          private :type_name_instead_of_name_error!

          def namespace_attribute_error!
            raise AttributeError
                    .new("'namespace' must be specified as an option, not via a block")
          end
          alias_method :type_namespace_instead_of_namespace_error!, :namespace_attribute_error!
          private :type_namespace_instead_of_namespace_error!

          def namespace_instead_of_type_namespace_error!
            raise AttributeError
              .new("'namespace' must be specified as an option instead of 'type_namespace'")
          end
        end
        include TopLevelErrorHandling
      end

    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
avro-builder-2.1.0 lib/avro/builder/types/top_level.rb
avro-builder-2.0.0 lib/avro/builder/types/top_level.rb
avro-builder-1.1.0 lib/avro/builder/types/top_level.rb
avro-builder-1.0.1 lib/avro/builder/types/top_level.rb
avro-builder-1.0.0 lib/avro/builder/types/top_level.rb
avro-builder-0.17.0 lib/avro/builder/types/top_level.rb
avro-builder-0.16.2 lib/avro/builder/types/top_level.rb