Class: Webmachine::Decision::Conneg::PriorityList
- Inherits:
-
Object
- Object
- Webmachine::Decision::Conneg::PriorityList
- Includes:
- Enumerable
- Defined in:
- lib/webmachine/decision/conneg.rb
Overview
Content-negotiation priority list that takes into account both assigned priority (“q” value) as well as order, since items that come earlier in an acceptance list have higher priority by fiat.
Direct Known Subclasses
Class Method Summary collapse
-
.build(list) ⇒ Object
Given an acceptance list, create a PriorityList from them.
Instance Method Summary collapse
-
#[](q) ⇒ Array<String>
The list of acceptable items at the given priority.
-
#add(q, choice) ⇒ Object
Adds an acceptable item with the given priority to the list.
-
#add_header_val(c) ⇒ Object
Given a raw acceptable value from an acceptance header, parse and add it to the list.
-
#each {|q, v| ... } ⇒ Object
Iterates over the list in priority order, that is, taking into account the order in which items were added as well as their priorities.
-
#initialize ⇒ PriorityList
constructor
Creates a PriorityList.
-
#priority_of(choice) ⇒ Float
The priority of that value.
Constructor Details
#initialize ⇒ PriorityList
Creates a Webmachine::Decision::Conneg::PriorityList.
166 167 168 169 |
# File 'lib/webmachine/decision/conneg.rb', line 166 def initialize @hash = Hash.new {|h,k| h[k] = [] } @index = {} end |
Class Method Details
.build(list) ⇒ Object
Given an acceptance list, create a PriorityList from them.
156 157 158 159 160 |
# File 'lib/webmachine/decision/conneg.rb', line 156 def self.build(list) new.tap do |plist| list.each {|item| plist.add_header_val(item) } end end |
Instance Method Details
#[](q) ⇒ Array<String>
Returns the list of acceptable items at the given priority.
196 197 198 |
# File 'lib/webmachine/decision/conneg.rb', line 196 def [](q) @hash[q] end |
#add(q, choice) ⇒ Object
Adds an acceptable item with the given priority to the list.
174 175 176 177 |
# File 'lib/webmachine/decision/conneg.rb', line 174 def add(q, choice) @index[choice] = q @hash[q] << choice end |
#add_header_val(c) ⇒ Object
Given a raw acceptable value from an acceptance header, parse and add it to the list.
183 184 185 186 187 188 189 190 191 |
# File 'lib/webmachine/decision/conneg.rb', line 183 def add_header_val(c) if c =~ CONNEG_REGEX choice, q = $1, $2 q = "0" << q if q =~ /^\./ # handle strange FeedBurner Accept add(q.to_f,choice) else add(1.0, c) end end |
#each {|q, v| ... } ⇒ Object
Iterates over the list in priority order, that is, taking into account the order in which items were added as well as their priorities.
212 213 214 215 216 |
# File 'lib/webmachine/decision/conneg.rb', line 212 def each @hash.to_a.sort.reverse_each do |q,l| l.each {|v| yield q, v } end end |
#priority_of(choice) ⇒ Float
Returns the priority of that value.
202 203 204 |
# File 'lib/webmachine/decision/conneg.rb', line 202 def priority_of(choice) @index[choice] end |