Class: Capybara::Node::Email

Inherits:
Document
  • Object
show all
Defined in:
lib/capybara/node/email.rb

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(meth, *args, &block) ⇒ Object (private)

Tries to send to base first. If an NotImplementedError is hit because some finders/matchers/etc. aren't implemented, fall back to treating the message body as a Capybara::Node::Simple


67
68
69
70
71
72
73
# File 'lib/capybara/node/email.rb', line 67

def method_missing(meth, *args, &block)
  begin
    base.send(meth, *args)
  rescue NotImplementedError
    body_as_simple_node.send(meth, *args)
  end
end

Instance Method Details

#bodyMail::Message#body

Delegate to the email body

Returns:

  • (Mail::Message#body)

6
7
8
# File 'lib/capybara/node/email.rb', line 6

def body
  base.raw
end

#body_as_simple_nodeObject

Treat the message's body as a Capybara::Node::Simple so that selectors actually work instead of raising NotImplementedErrors


12
13
14
# File 'lib/capybara/node/email.rb', line 12

def body_as_simple_node
  @body_as_simple_node ||= Capybara.string base.raw
end

#header(key) ⇒ Object

Returns the value of the passed in header key.

Returns:

  • String


19
20
21
# File 'lib/capybara/node/email.rb', line 19

def header(key)
  base.email.header[key].value
end

#headersString

Returns the header keys as an array of strings.

Returns:

  • (String)

26
27
28
# File 'lib/capybara/node/email.rb', line 26

def headers
  base.email.header.fields.map(&:name)
end

#inspectString

Corrects the inspect string

Returns:

  • (String)

33
34
35
# File 'lib/capybara/node/email.rb', line 33

def inspect
  "<#{self.class.to_s}>"
end

#save_and_open(file_name = nil) ⇒ Object

Save a snapshot of the page and open it in a browser for inspection

Parameters:

  • path (String)

    The path to where it should be saved [optional]


55
56
57
58
59
60
# File 'lib/capybara/node/email.rb', line 55

def save_and_open(file_name = nil)
  require 'launchy'
  Launchy.open(save_page(file_name))
rescue LoadError
  warn 'Please install the launchy gem to open page with save_and_open_page'
end

#save_page(path = nil) ⇒ Object

Save a snapshot of the page.

Parameters:

  • path (String) (defaults to: nil)

    The path to where it should be saved [optional]


41
42
43
44
45
46
47
48
49
# File 'lib/capybara/node/email.rb', line 41

def save_page(path = nil)
  path ||= "capybara-email-#{Time.new.strftime("%Y%m%d%H%M%S")}#{rand(10**10)}.html"
  path = File.expand_path(path, Capybara.save_and_open_page_path) if Capybara.save_and_open_page_path

  FileUtils.mkdir_p(File.dirname(path))

  File.open(path,'w') { |f| f.write(body) }
  path
end