Sha256: 80bd370221aa34b411613f4056f670e1f4f3c63c8be02a7f6f4e21cd41d9af7f

Contents?: true

Size: 1.38 KB

Versions: 6

Compression:

Stored size: 1.38 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 Solrizer::InvalidIndexDescriptor, "Invalid index type passed to Sorizer.solr_name.  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) if @converter
        end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
active-fedora-12.0.3 lib/active_fedora/indexing/descriptor.rb
active-fedora-12.1.1 lib/active_fedora/indexing/descriptor.rb
active-fedora-12.1.0 lib/active_fedora/indexing/descriptor.rb
active-fedora-12.0.2 lib/active_fedora/indexing/descriptor.rb
active-fedora-12.0.1 lib/active_fedora/indexing/descriptor.rb
active-fedora-12.0.0 lib/active_fedora/indexing/descriptor.rb