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<String>

The accept type pattern

index<Fixnum>

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<AcceptType>

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<AcceptType>

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:

  • (Boolean)


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