Class: Cucumber::Messages::Attachment

Inherits:
Message
  • Object
show all
Defined in:
lib/cucumber/messages/attachment.rb

Overview

Represents the Attachment message in Cucumber’s message protocol.

//// Attachments (parse errors, execution errors, screenshots, links…)

*

An attachment represents any kind of data associated with a line in a
[Source](#io.cucumber.messages.Source) file. It can be used for:

* Syntax errors during parse time
* Screenshots captured and attached during execution
* Logs captured and attached during execution

It is not to be used for runtime errors raised/thrown during execution. This
is captured in `TestResult`.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Message

camelize, from_json, #to_h, #to_json

Constructor Details

#initialize(body: '', content_encoding: AttachmentContentEncoding::IDENTITY, file_name: nil, media_type: '', source: nil, test_case_started_id: nil, test_step_id: nil, url: nil) ⇒ Attachment

Returns a new instance of Attachment.



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/cucumber/messages/attachment.rb', line 82

def initialize(
  body: '',
  content_encoding: AttachmentContentEncoding::IDENTITY,
  file_name: nil,
  media_type: '',
  source: nil,
  test_case_started_id: nil,
  test_step_id: nil,
  url: nil
)
  @body = body
  @content_encoding = content_encoding
  @file_name = file_name
  @media_type = media_type
  @source = source
  @test_case_started_id = test_case_started_id
  @test_step_id = test_step_id
  @url = url
  super()
end

Instance Attribute Details

#bodyObject (readonly)

*

The body of the attachment. If `contentEncoding` is `IDENTITY`, the attachment
is simply the string. If it's `BASE64`, the string should be Base64 decoded to
obtain the attachment.


30
31
32
# File 'lib/cucumber/messages/attachment.rb', line 30

def body
  @body
end

#content_encodingObject (readonly)

*

Whether to interpret `body` "as-is" (IDENTITY) or if it needs to be Base64-decoded (BASE64).

Content encoding is *not* determined by the media type, but rather by the type
of the object being attached:

- string: IDENTITY
- byte array: BASE64
- stream: BASE64


43
44
45
# File 'lib/cucumber/messages/attachment.rb', line 43

def content_encoding
  @content_encoding
end

#file_nameObject (readonly)

*

Suggested file name of the attachment. (Provided by the user as an argument to `attach`)


49
50
51
# File 'lib/cucumber/messages/attachment.rb', line 49

def file_name
  @file_name
end

#media_typeObject (readonly)

*

The media type of the data. This can be any valid
[IANA Media Type](https://www.iana.org/assignments/media-types/media-types.xhtml)
as well as Cucumber-specific media types such as `text/x.cucumber.gherkin+plain`
and `text/x.cucumber.stacktrace+plain`


58
59
60
# File 'lib/cucumber/messages/attachment.rb', line 58

def media_type
  @media_type
end

#sourceObject (readonly)

Returns the value of attribute source.



60
61
62
# File 'lib/cucumber/messages/attachment.rb', line 60

def source
  @source
end

#test_case_started_idObject (readonly)

Returns the value of attribute test_case_started_id.



62
63
64
# File 'lib/cucumber/messages/attachment.rb', line 62

def test_case_started_id
  @test_case_started_id
end

#test_step_idObject (readonly)

Returns the value of attribute test_step_id.



64
65
66
# File 'lib/cucumber/messages/attachment.rb', line 64

def test_step_id
  @test_step_id
end

#urlObject (readonly)

*

A URL where the attachment can be retrieved. This field should not be set by Cucumber.
It should be set by a program that reads a message stream and does the following for
each Attachment message:

- Writes the body (after base64 decoding if necessary) to a new file.
- Sets `body` and `contentEncoding` to `null`
- Writes out the new attachment message

This will result in a smaller message stream, which can improve performance and
reduce bandwidth of message consumers. It also makes it easier to process and download attachments
separately from reports.


80
81
82
# File 'lib/cucumber/messages/attachment.rb', line 80

def url
  @url
end

Class Method Details

.from_h(hash) ⇒ Object

Returns a new Attachment from the given hash. If the hash keys are camelCased, they are properly assigned to the corresponding snake_cased attributes.

Cucumber::Messages::Attachment.from_h(some_hash) # => #<Cucumber::Messages::Attachment:0x... ...>


110
111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/cucumber/messages/attachment.rb', line 110

def self.from_h(hash)
  return nil if hash.nil?

  new(
    body: hash[:body],
    content_encoding: hash[:contentEncoding],
    file_name: hash[:fileName],
    media_type: hash[:mediaType],
    source: Source.from_h(hash[:source]),
    test_case_started_id: hash[:testCaseStartedId],
    test_step_id: hash[:testStepId],
    url: hash[:url]
  )
end