Class: Resourceful::Header::FieldDesc
- Includes:
- Comparable
- Defined in:
- lib/resourceful/header.rb
Overview
Class to handle the details of each type of field.
Instance Attribute Summary collapse
-
#name ⇒ Object
(also: #to_s)
readonly
Returns the value of attribute name.
Instance Method Summary collapse
- #<=>(another) ⇒ Object
- #==(another) ⇒ Object (also: #eql?)
- #===(another) ⇒ Object
- #accessor_module ⇒ Object
- #constantized_name ⇒ Object
- #exists_in?(raw_fields_hash) ⇒ Boolean
- #get_from(raw_fields_hash) ⇒ Object
- #hash ⇒ Object
- #hop_by_hop? ⇒ Boolean
-
#initialize(name, options = {}) ⇒ FieldDesc
constructor
Create a new header field descriptor.
-
#lookup_keys {|name| ... } ⇒ Object
Yields each commonly used lookup key for this header field.
- #methodized_name ⇒ Object
- #modifiable? ⇒ Boolean
- #name_pattern ⇒ Object
- #repeatable? ⇒ Boolean (also: #multivalued?)
- #set_to(value, raw_fields_hash) ⇒ Object
Constructor Details
#initialize(name, options = {}) ⇒ FieldDesc
Create a new header field descriptor.
122 123 124 125 126 127 128 129 |
# File 'lib/resourceful/header.rb', line 122 def initialize(name, = {}) @name = name = Options.for().validate(:repeatable, :hop_by_hop, :modifiable) @repeatable = .getopt([:repeatable, :multivalue, :multivalued]) || false @hop_by_hop = .getopt(:hop_by_hop) || false @modifiable = .getopt(:modifiable, true) end |
Instance Attribute Details
#name ⇒ Object (readonly) Also known as: to_s
Returns the value of attribute name.
101 102 103 |
# File 'lib/resourceful/header.rb', line 101 def name @name end |
Instance Method Details
#<=>(another) ⇒ Object
163 164 165 |
# File 'lib/resourceful/header.rb', line 163 def <=>(another) name <=> another.name end |
#==(another) ⇒ Object Also known as: eql?
167 168 169 |
# File 'lib/resourceful/header.rb', line 167 def ==(another) name_pattern === another.to_s end |
#===(another) ⇒ Object
172 173 174 175 176 177 178 |
# File 'lib/resourceful/header.rb', line 172 def ===(another) if another.kind_of?(FieldDesc) self == another else name_pattern === another end end |
#accessor_module ⇒ Object
194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 |
# File 'lib/resourceful/header.rb', line 194 def accessor_module @accessor_module ||= begin Module.new.tap{|m| m.module_eval(<<-RUBY)} #{constantized_name} = '#{name}' def #{methodized_name} # def accept self[#{constantized_name}] # self[ACCEPT] end # end def #{methodized_name}=(val) # def accept=(val) self[#{constantized_name}] = val # self[ACCEPT] = val end # end RUBY end end |
#constantized_name ⇒ Object
188 189 190 |
# File 'lib/resourceful/header.rb', line 188 def constantized_name @constantized_name ||= name.upcase.gsub('-', '_') end |
#exists_in?(raw_fields_hash) ⇒ Boolean
159 160 161 |
# File 'lib/resourceful/header.rb', line 159 def exists_in?(raw_fields_hash) raw_fields_hash.has_key?(name) end |
#get_from(raw_fields_hash) ⇒ Object
144 145 146 |
# File 'lib/resourceful/header.rb', line 144 def get_from(raw_fields_hash) raw_fields_hash[name] end |
#hash ⇒ Object
210 211 212 |
# File 'lib/resourceful/header.rb', line 210 def hash @name.hash end |
#hop_by_hop? ⇒ Boolean
136 137 138 |
# File 'lib/resourceful/header.rb', line 136 def hop_by_hop? @hop_by_hop end |
#lookup_keys {|name| ... } ⇒ Object
Yields each commonly used lookup key for this header field.
215 216 217 218 219 220 221 222 223 |
# File 'lib/resourceful/header.rb', line 215 def lookup_keys(&blk) yield name yield name.upcase yield name.downcase yield methodized_name yield methodized_name.to_sym yield constantized_name yield constantized_name.to_sym end |
#methodized_name ⇒ Object
184 185 186 |
# File 'lib/resourceful/header.rb', line 184 def methodized_name @methodized_name ||= name.downcase.gsub('-', '_') end |
#modifiable? ⇒ Boolean
140 141 142 |
# File 'lib/resourceful/header.rb', line 140 def modifiable? @modifiable end |
#name_pattern ⇒ Object
180 181 182 |
# File 'lib/resourceful/header.rb', line 180 def name_pattern @name_pattern ||= Regexp.new('^' + name.gsub('-', '[_-]') + '$', Regexp::IGNORECASE) end |
#repeatable? ⇒ Boolean Also known as: multivalued?
131 132 133 |
# File 'lib/resourceful/header.rb', line 131 def repeatable? @repeatable end |
#set_to(value, raw_fields_hash) ⇒ Object
148 149 150 151 152 153 154 155 156 157 |
# File 'lib/resourceful/header.rb', line 148 def set_to(value, raw_fields_hash) raw_fields_hash[name] = if multivalued? Array(value).map{|v| v.split(/,\s*/)}.flatten elsif value.kind_of?(Array) raise ArgumentError, "#{name} field may only have one value" if value.size > 1 value.first else value end end |