class HTTP::Accept::MediaTypes::Map

Map a set of mime types to objects.

Constants

WILDCARD

Public Class Methods

new() click to toggle source
# File lib/http/accept/media_types/map.rb, line 30
def initialize
        @media_types = {}
end

Public Instance Methods

<<(object) click to toggle source

Add a converter to the collection. A converter can be anything that responds to content_type. Objects will be considered in the order they are added, subsequent objects cannot override previously defined media types. `object` must respond to split('/', 2) which should give the type and subtype.

# File lib/http/accept/media_types/map.rb, line 68
def << object
        type, subtype = object.split('/', 2)
        
        # We set the default if not specified already:
        @media_types[WILDCARD] = object if @media_types.empty?
        
        if type != '*'
                @media_types["#{type}/*"] ||= object
                
                if subtype != '*'
                        @media_types["#{type}/#{subtype}"] ||= object
                end
        end
        
        return self
end
[](media_range) click to toggle source
# File lib/http/accept/media_types/map.rb, line 63
def [] media_range
        @media_types[media_range]
end
[]=(media_range, object) click to toggle source
# File lib/http/accept/media_types/map.rb, line 59
def []= media_range, object
        @media_types[media_range] = object
end
for(media_types) click to toggle source

Given a list of content types (e.g. from browser_preferred_content_types), return the best converter. Media types can be an array of MediaRange or String values.

# File lib/http/accept/media_types/map.rb, line 44
def for(media_types)
        media_types.each do |media_range|
                mime_type = case media_range
                        when String then media_range
                        else media_range.mime_type
                end
                
                if object = @media_types[mime_type]
                        return object, media_range
                end
        end
        
        return nil
end
freeze() click to toggle source
Calls superclass method
# File lib/http/accept/media_types/map.rb, line 34
def freeze
        unless frozen?
                @media_types.freeze
                @media_types.each{|key,value| value.freeze}
                
                super
        end
end