Class: Mail::Parsers::ContentDispositionParser
- Includes:
- Utilities
- Defined in:
- lib/mail/parsers/content_disposition_parser.rb
Constant Summary
Constants included from Mail::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::FIELD_PREFIX, Mail::Patterns::FIELD_SPLIT, Mail::Patterns::FWS, Mail::Patterns::HEADER_LINE, Mail::Patterns::HEADER_SPLIT, 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
Instance Method Details
#parse(s) ⇒ Object
5 6 7 8 9 10 11 12 13 14 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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/mail/parsers/content_disposition_parser.rb', line 5 def parse(s) content_disposition = ContentDispositionStruct.new("", nil) if s.blank? return content_disposition end actions, error = Ragel.parse(:content_disposition, s) if error raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, s, error) end content_disposition.parameters = [] disp_type_s = param_attr_s = param_attr = qstr_s = qstr = param_val_s = nil actions.each_slice(2) do |action_id, p| action = Mail::Parsers::Ragel::ACTIONS[action_id] case action # Disposition Type when :disp_type_s then disp_type_s = p when :disp_type_e content_disposition.disposition_type = s[disp_type_s..(p-1)].downcase # Parameter Attribute when :param_attr_s then param_attr_s = p when :param_attr_e then param_attr = s[param_attr_s..(p-1)] # Quoted String. when :qstr_s then qstr_s = p when :qstr_e then qstr = s[qstr_s..(p-1)] # Parameter Value when :param_val_s then param_val_s = p when :param_val_e if param_attr.nil? raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, s, "no attribute for value") end # Use quoted string value if one exists, otherwise use parameter value if qstr value = qstr else value = s[param_val_s..(p-1)] end content_disposition.parameters << { param_attr => value } param_attr = nil qstr = nil else raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, s, "Failed to process unknown action: #{action}") end end content_disposition end |