Sha256: 21fd4ee5fe46e56e0f500f744a2f782872b25e04bfa0530b85c803ffbcf8d7df

Contents?: true

Size: 1.34 KB

Versions: 4

Compression:

Stored size: 1.34 KB

Contents

module ActiveFedora
  module Indexing
    class Descriptor
      attr_reader :index_type
      def initialize(*args)
        if args.last.is_a? Hash
          opts = args.pop
          @converter = opts[:converter]
          @type_required = opts[:requires_type]
        end
        @index_type = args
        raise InvalidIndexDescriptor, "Invalid index type passed.  It should be an array like [:string, :indexed, :stored, :multivalued]. You provided: `#{@index_type}'" unless index_type.is_a? Array
      end

      def name_and_converter(field_name, args = nil)
        args ||= {}
        field_type = args[:type]
        if type_required?
          raise ArgumentError, "Must provide a :type argument when index_type is `#{self}' for #{field_name}" unless field_type
        end
        [field_name.to_s + suffix(field_type), converter(field_type)]
      end

      def type_required?
        @type_required
      end

      def evaluate_suffix(field_type)
        Suffix.new(index_type.first.is_a?(Proc) ? index_type.first.call(field_type) : index_type.dup)
      end

      protected

        # Suffix can be overridden if you want a different method of grabbing the suffix
        def suffix(field_type)
          evaluate_suffix(field_type).to_s
        end

        def converter(field_type)
          @converter&.call(field_type)
        end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
active-fedora-15.0.1 lib/active_fedora/indexing/descriptor.rb
active-fedora-15.0.0 lib/active_fedora/indexing/descriptor.rb
active-fedora-14.0.1 lib/active_fedora/indexing/descriptor.rb
active-fedora-14.0.0 lib/active_fedora/indexing/descriptor.rb