Class: Merb::AcceptType

Inherits:
Object show all
Defined in:
lib/merb-core/controller/mixins/responder.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(entry, index) ⇒ AcceptType

Parameters

entry

The accept type pattern

index

The index used for sorting accept types. A lower value indicates higher priority.



390
391
392
393
394
395
396
397
398
399
# File 'lib/merb-core/controller/mixins/responder.rb', line 390

def initialize(entry,index)
  @index = index
  
  entry =~ /\s*([^;\s]*)\s*(;\s*q=\s*(.*))?/
  @media_range, quality = $1, $3
  
  @type, @sub_type = @media_range.split(%r{/})
  (quality ||= 0.0) if @media_range == "*/*"
  @quality = quality ? (quality.to_f * 100).to_i : 100
end

Instance Attribute Details

#indexObject (readonly)

Returns the value of attribute index.



383
384
385
# File 'lib/merb-core/controller/mixins/responder.rb', line 383

def index
  @index
end

#media_rangeObject (readonly)

Returns the value of attribute media_range.



383
384
385
# File 'lib/merb-core/controller/mixins/responder.rb', line 383

def media_range
  @media_range
end

#qualityObject (readonly)

Returns the value of attribute quality.



383
384
385
# File 'lib/merb-core/controller/mixins/responder.rb', line 383

def quality
  @quality
end

#sub_typeObject (readonly)

Returns the value of attribute sub_type.



383
384
385
# File 'lib/merb-core/controller/mixins/responder.rb', line 383

def sub_type
  @sub_type
end

#typeObject (readonly)

Returns the value of attribute type.



383
384
385
# File 'lib/merb-core/controller/mixins/responder.rb', line 383

def type
  @type
end

Instance Method Details

#<=>(entry) ⇒ Object

Compares two accept types for sorting purposes.

Parameters

entry

The accept type to compare.

Returns

Fixnum

-1, 0 or 1, depending on whether entry has a lower, equal or higher priority than the accept type being compared.



410
411
412
413
414
415
416
# File 'lib/merb-core/controller/mixins/responder.rb', line 410

def <=>(entry)
  if entry.quality == quality
    @index <=> entry.index
  else
    entry.quality <=> @quality
  end
end

#==(entry) ⇒ Object

An alias for eql?.



431
# File 'lib/merb-core/controller/mixins/responder.rb', line 431

def ==(entry); eql?(entry); end

#eql?(entry) ⇒ Boolean

Parameters

entry

The accept type to compare.

Returns

Boolean

True if the accept types are equal, i.e. if the synonyms for this accept type includes the entry media range.

Returns:



426
427
428
# File 'lib/merb-core/controller/mixins/responder.rb', line 426

def eql?(entry)
  synonyms.include?(entry.media_range)
end

#hashObject

Returns

Fixnum

A hash based on the super range.



435
# File 'lib/merb-core/controller/mixins/responder.rb', line 435

def hash; super_range.hash; end

#super_rangeObject

Returns

String

The primary media range for this accept type, i.e. either the first synonym or, if none exist, the media range.



453
454
455
# File 'lib/merb-core/controller/mixins/responder.rb', line 453

def super_range
  synonyms.first || @media_range
end

#synonymsObject

Returns

Array

All Accept header values, such as "text/html", that match this type.



440
441
442
443
444
445
446
447
# File 'lib/merb-core/controller/mixins/responder.rb', line 440

def synonyms
  return @syns if @syns
  if mime = Merb.available_mime_types[Merb::ResponderMixin::MIMES[@media_range]]
    @syns = mime[:accepts]
  else
    @syns = []
  end
end

#to_sObject

Returns

String

The accept type as a string, i.e. the media range.



466
467
468
# File 'lib/merb-core/controller/mixins/responder.rb', line 466

def to_s
  @media_range
end

#to_symObject

Returns

Symbol: The type as a symbol, e.g. :html.



459
460
461
462
# File 'lib/merb-core/controller/mixins/responder.rb', line 459

def to_sym
  Merb.available_mime_types.select{|k,v| 
    v[:accepts] == synonyms || v[:accepts][0] == synonyms[0]}.flatten.first
end