Class: Mhtml::Document

Inherits:
Object
  • Object
show all
Defined in:
lib/mhtml/document.rb

Direct Known Subclasses

RootDocument

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(str = nil) ⇒ Document

Returns a new instance of Document.



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
# File 'lib/mhtml/document.rb', line 14

def initialize(str = nil)
  @chunked = !str.is_a?(String)
  @header_key = nil
  @header_value_lines = nil
  @is_quoted_printable = false
  @encoding = nil

  @request = HttpParser::Parser.new_instance { |inst| inst.type = :response }

  @parser = HttpParser::Parser.new do |parser|
    parser.on_header_field { |inst, data| handle_header_field(inst, data) }
    parser.on_header_value { |inst, data| handle_header_value(inst, data) }
    parser.on_body { |inst, data| handle_body(inst, data) }
    parser.on_message_begin { |inst| handle_message_begin(inst) }
    parser.on_message_complete { |inst| handle_message_complete(inst) }
  end

  @parser.parse(@request, Mhtml::STATUS_LINE)

  unless @chunked
    @headers = []
    @body = ''
    @parser.parse(@request, str)
  end
end

Instance Attribute Details

#bodyObject

Returns the value of attribute body.



7
8
9
# File 'lib/mhtml/document.rb', line 7

def body
  @body
end

#chunkedObject (readonly)

Returns the value of attribute chunked.



5
6
7
# File 'lib/mhtml/document.rb', line 5

def chunked
  @chunked
end

#encodingObject

Returns the value of attribute encoding.



7
8
9
# File 'lib/mhtml/document.rb', line 7

def encoding
  @encoding
end

#file_pathObject

Returns the value of attribute file_path.



7
8
9
# File 'lib/mhtml/document.rb', line 7

def file_path
  @file_path
end

#headersObject

Returns the value of attribute headers.



7
8
9
# File 'lib/mhtml/document.rb', line 7

def headers
  @headers
end

#is_quoted_printableObject

Returns the value of attribute is_quoted_printable.



7
8
9
# File 'lib/mhtml/document.rb', line 7

def is_quoted_printable
  @is_quoted_printable
end

#parserObject (readonly)

Returns the value of attribute parser.



5
6
7
# File 'lib/mhtml/document.rb', line 5

def parser
  @parser
end

#root_docObject

Returns the value of attribute root_doc.



7
8
9
# File 'lib/mhtml/document.rb', line 7

def root_doc
  @root_doc
end

Instance Method Details

#<<(chunk) ⇒ Object



40
41
42
# File 'lib/mhtml/document.rb', line 40

def <<(chunk)
  @parser.parse(@request, chunk)
end

#==(other) ⇒ Object



44
45
46
47
# File 'lib/mhtml/document.rb', line 44

def ==(other)
  @headers == other.headers &&
    @body.gsub(/\r\n/, "\n").strip == other.body.gsub(/\r\n/, "\n").strip
end

#header(key) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/mhtml/document.rb', line 57

def header(key)
  header = nil

  @headers.each do |h|
    if h.key == key
      header = h
      break
    end
  end

  header
end

#on_bodyObject



53
54
55
# File 'lib/mhtml/document.rb', line 53

def on_body
  @body_proc = Proc.new
end

#on_headerObject



49
50
51
# File 'lib/mhtml/document.rb', line 49

def on_header
  @headers_proc = Proc.new
end

#relative_file_pathObject



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/mhtml/document.rb', line 70

def relative_file_path
  return nil if @file_path.nil?
  return '.' if @file_path == @root_doc.file_path

  str = nil

  if !@root_doc.file_path.nil? && @file_path.start_with?(@root_doc.file_path)
    start = @root_doc.file_path.length
    str = @file_path[start..(@file_path.length - 1)]

  elsif @file_path.include?(':')
    start = @file_path.rindex(':') + 1
    str = @file_path[start..(@file_path.length - 1)]

  else
    str = @file_path
  end

  str = str[1..(str.length - 1)] if str[0] == '/'

  str
end

#to_sObject

for testing only = no spec implemented



94
95
96
# File 'lib/mhtml/document.rb', line 94

def to_s
  @headers.join(LINE_BREAK) + Mhtml::DOUBLE_LINE_BREAK + @body
end