Class: Mail::ParameterHash
- Inherits:
-
IndifferentHash
- Object
- Hash
- IndifferentHash
- Mail::ParameterHash
- Includes:
- Utilities
- Defined in:
- lib/mail/fields/common/parameter_hash.rb
Overview
ParameterHash is an intelligent Hash that allows you to add parameter values including the MIME extension paramaters that have the name*0=“blah”, name*1=“bleh” keys, and will just return a single key called name=“blahbleh” and do any required un-encoding to make that happen Parameters are defined in RFC2045, split keys are in RFC2231
Constant Summary
Constants included from Patterns
Mail::Patterns::ATOM_UNSAFE, Mail::Patterns::CONTROL_CHAR, Mail::Patterns::CRLF, Mail::Patterns::FIELD_BODY, Mail::Patterns::FIELD_LINE, Mail::Patterns::FIELD_NAME, Mail::Patterns::FWS, Mail::Patterns::HEADER_LINE, Mail::Patterns::PHRASE_UNSAFE, Mail::Patterns::QP_SAFE, Mail::Patterns::QP_UNSAFE, Mail::Patterns::TEXT, Mail::Patterns::TOKEN_UNSAFE, Mail::Patterns::WSP
Instance Method Summary collapse
Methods included from Utilities
#atom_safe?, #bracket, #capitalize_field, #constantize, #dasherize, #dquote, #escape_paren, #map_lines, #map_with_index, #match_to_s, #paren, #quote_atom, #quote_phrase, #quote_token, #token_safe?, #unbracket, #underscoreize, #unparen, #unquote, #uri_escape, #uri_parser, #uri_unescape
Methods inherited from IndifferentHash
#[]=, #default, #delete, #dup, #fetch, #initialize, #key?, #merge, new_from_hash_copying_default, #regular_update, #regular_writer, #reverse_merge, #reverse_merge!, #stringify_keys, #stringify_keys!, #symbolize_keys, #to_hash, #to_options!, #update, #values_at
Constructor Details
This class inherits a constructor from Mail::IndifferentHash
Instance Method Details
#[](key_name) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/mail/fields/common/parameter_hash.rb', line 15 def [](key_name) key_pattern = Regexp.escape(key_name.to_s) pairs = [] exact = nil each do |k,v| if k =~ /^#{key_pattern}(\*|$)/i if $1 == '*' pairs << [k, v] else exact = k end end end if pairs.empty? # Just dealing with a single value pair super(exact || key_name) else # Dealing with a multiple value pair or a single encoded value pair string = pairs.sort { |a,b| a.first.to_s <=> b.first.to_s }.map { |v| v.last }.join('') if mt = string.match(/([\w\-]+)'(\w\w)'(.*)/) string = mt[3] encoding = mt[1] else encoding = nil end Mail::Encodings.param_decode(string, encoding) end end |
#decoded ⇒ Object
52 53 54 55 56 |
# File 'lib/mail/fields/common/parameter_hash.rb', line 52 def decoded map.sort { |a,b| a.first.to_s <=> b.first.to_s }.map do |key_name, value| %Q{#{key_name}=#{quote_token(value)}} end.join("; ") end |
#encoded ⇒ Object
42 43 44 45 46 47 48 49 50 |
# File 'lib/mail/fields/common/parameter_hash.rb', line 42 def encoded map.sort { |a,b| a.first.to_s <=> b.first.to_s }.map do |key_name, value| unless value.ascii_only? value = Mail::Encodings.param_encode(value) key_name = "#{key_name}*" end %Q{#{key_name}=#{quote_token(value)}} end.join(";\r\n\s") end |