Class: Mechanize::PluggableParser

### Home Classes Methods

### In Files

- lib/mechanize/pluggable_parsers.rb

### Parent

Object

### Methods

- ::new
- #[]
- #[]=
- #csv=
- #html=
- #parser
- #pdf=
- #xhtml=
- #xml=

### Files

- EXAMPLES.rdoc
- GUIDE.rdoc
- LICENSE.rdoc
- Manifest.txt
- README.rdoc

### Class/Module Index

Quicksearch

- Mechanize
- Mechanize::ChunkedTerminationError
- Mechanize::ContentTypeError
- Mechanize::Cookie
- Mechanize::CookieCMethods
- Mechanize::CookieDeprecated
- Mechanize::CookieIMethods
- Mechanize::CookieJar
- Mechanize::CookieJarIMethods
- Mechanize::DirectorySaver
- Mechanize::Download
- Mechanize::ElementMatcher
- Mechanize::Error
- Mechanize::File
- Mechanize::FileConnection
- Mechanize::FileRequest
- Mechanize::FileResponse
- Mechanize::FileSaver
- Mechanize::Form
- Mechanize::Form::Button
- Mechanize::Form::CheckBox
- Mechanize::Form::Field
- Mechanize::Form::FileUpload
- Mechanize::Form::Hidden
- Mechanize::Form::ImageButton
- Mechanize::Form::Keygen
- Mechanize::Form::MultiSelectList
- Mechanize::Form::Option
- Mechanize::Form::RadioButton
- Mechanize::Form::Reset
- Mechanize::Form::SelectList
- Mechanize::Form::Submit
- Mechanize::Form::Text
- Mechanize::Form::Textarea
- Mechanize::HTTP
- Mechanize::HTTP::Agent
- Mechanize::HTTP::AuthChallenge
- Mechanize::HTTP::AuthRealm
- Mechanize::HTTP::AuthStore
- Mechanize::HTTP::ContentDispositionParser
- Mechanize::HTTP::WWWAuthenticateParser
- Mechanize::Headers
- Mechanize::History
- Mechanize::Image
- Mechanize::Page
- Mechanize::Page::Base
- Mechanize::Page::Frame
- Mechanize::Page::Image
- Mechanize::Page::Label
- Mechanize::Page::Link
- Mechanize::Page::MetaRefresh
- Mechanize::Parser
- Mechanize::PluggableParser
- Mechanize::Prependable
- Mechanize::RedirectLimitReachedError
- Mechanize::RedirectNotGetOrHeadError
- Mechanize::ResponseCodeError
- Mechanize::ResponseReadError
- Mechanize::RobotsDisallowedError
- Mechanize::TestCase
- Mechanize::UnauthorizedError
- Mechanize::UnsupportedSchemeError
- Mechanize::Util
- Mechanize::XmlFile
- HTTP
- HTTP::CookieJar

No matching classes.

# Mechanize::PluggableParser

Mechanize allows different parsers for different content types. Mechanize uses PluggableParser to determine which parser to use for any content type. To use your own parser or to change the default parsers, register them with this class through Mechanize#pluggable_parser.

The default parser for unregistered content types is Mechanize::File.

The module Mechanize::Parser provides basic functionality for any content type, so you may use it in custom parsers you write. For small files you wish to perform in-memory operations on, you should subclass Mechanize::File. For large files you should subclass Mechanize::Download as the content is only loaded into memory in small chunks.

When writing your own pluggable parser, be sure to provide a method body that returns a String containing the response body for compatibility with Mechanize#get_file.

## Example

To create your own parser, just create a class that takes four parameters in the constructor. Here is an example of registering a parser that handles CSV files:

    require 'csv'

    class CSVParser < Mechanize::File
      attr_reader :csv

      def initialize uri = nil, response = nil, body = nil, code = nil
        super uri, response, body, code
        @csv = CSV.parse body
      end
    end

    agent = Mechanize.new
    agent.pluggable_parser.csv = CSVParser
    agent.get('http://example.com/test.csv')  # => CSVParser

Now any response with a content type of 'text/csv' will initialize a CSVParser and return that object to the caller.

To register a parser for a content type that Mechanize does not know about, use the hash syntax:

    agent.pluggable_parser['text/something'] = SomeClass

To set the default parser, use default:

    agent.pluggable_parser.default = Mechanize::Download

Now all unknown content types will be saved to disk and not loaded into memory.

### Constants

CONTENT_TYPES

### Attributes

default[RW]

### Public Class Methods

new() click to toggle source

    # File lib/mechanize/pluggable_parsers.rb, line 73
    def initialize
      @parsers = {
        CONTENT_TYPES[:html]  => Mechanize::Page,
        CONTENT_TYPES[:xhtml] => Mechanize::Page,
        CONTENT_TYPES[:wap]   => Mechanize::Page,
        'image'               => Mechanize::Image,
        'text/xml'            => Mechanize::XmlFile,
        'application/xml'     => Mechanize::XmlFile,
      }

      @default = Mechanize::File
    end

### Public Instance Methods

[](content_type) click to toggle source

Retrieves the parser for `content_type` content

    # File lib/mechanize/pluggable_parsers.rb, line 152
    def [](content_type)
      @parsers[content_type]
    end

[]=(content_type, klass) click to toggle source

Sets the parser for `content_type` content to `klass`

The `content_type` may either be a full MIME type a simplified MIME type ('text/x-csv' simplifies to 'text/csv') or a media type like 'image'.

    # File lib/mechanize/pluggable_parsers.rb, line 162
    def []= content_type, klass
      register_parser content_type, klass
    end

csv=(klass) click to toggle source

Registers `klass` as the parser for text/csv content

    # File lib/mechanize/pluggable_parsers.rb, line 136
    def csv=(klass)
      register_parser(CONTENT_TYPES[:csv], klass)
    end

html=(klass) click to toggle source

Registers `klass` as the parser for text/html and application/xhtml+xml content

    # File lib/mechanize/pluggable_parsers.rb, line 114
    def html=(klass)
      register_parser(CONTENT_TYPES[:html], klass)
      register_parser(CONTENT_TYPES[:xhtml], klass)
    end

parser(content_type) click to toggle source

Returns the parser registered for the given `content_type`

    # File lib/mechanize/pluggable_parsers.rb, line 89
    def parser content_type
      return default unless content_type

      parser = @parsers[content_type]

      return parser if parser

      mime_type = MIME::Type.new content_type

      parser = @parsers[mime_type.to_s] ||
               @parsers[mime_type.simplified] ||
               @parsers[mime_type.media_type] ||
               default
    rescue MIME::InvalidContentType
      default
    end

pdf=(klass) click to toggle source

Registers `klass` as the parser for application/pdf content

    # File lib/mechanize/pluggable_parsers.rb, line 129
    def pdf=(klass)
      register_parser(CONTENT_TYPES[:pdf], klass)
    end

xhtml=(klass) click to toggle source

Registers `klass` as the parser for application/xhtml+xml content

    # File lib/mechanize/pluggable_parsers.rb, line 122
    def xhtml=(klass)
      register_parser(CONTENT_TYPES[:xhtml], klass)
    end

xml=(klass) click to toggle source

Registers `klass` as the parser for text/xml content

    # File lib/mechanize/pluggable_parsers.rb, line 143
    def xml=(klass)
      CONTENT_TYPES[:xml].each do |content_type|
        register_parser content_type, klass
      end
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.