Class: Dependabot::PullRequestCreator::MessageBuilder

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/dependabot/pull_request_creator/message_builder.rb,
lib/dependabot/pull_request_creator/message_builder/issue_linker.rb,
lib/dependabot/pull_request_creator/message_builder/metadata_presenter.rb,
lib/dependabot/pull_request_creator/message_builder/link_and_mention_sanitizer.rb

Overview

MessageBuilder builds PR message for a dependency update

Defined Under Namespace

Classes: IssueLinker, LinkAndMentionSanitizer, MetadataPresenter

Constant Summary collapse

TRUNCATED_MSG =
"...\n\n_Description has been truncated_"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(source:, dependencies:, files:, credentials:, pr_message_header: nil, pr_message_footer: nil, commit_message_options: {}, vulnerabilities_fixed: {}, github_redirection_service: DEFAULT_GITHUB_REDIRECTION_SERVICE, dependency_group: nil, pr_message_max_length: nil, pr_message_encoding: nil, ignore_conditions: []) ⇒ MessageBuilder

Returns a new instance of MessageBuilder.



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/dependabot/pull_request_creator/message_builder.rb', line 87

def initialize(source:, dependencies:, files:, credentials:,
               pr_message_header: nil, pr_message_footer: nil,
               commit_message_options: {}, vulnerabilities_fixed: {},
               github_redirection_service: DEFAULT_GITHUB_REDIRECTION_SERVICE,
               dependency_group: nil, pr_message_max_length: nil, pr_message_encoding: nil, ignore_conditions: [])
  @dependencies               = dependencies
  @files                      = files
  @source                     = source
  @credentials                = credentials
  @pr_message_header          = pr_message_header
  @pr_message_footer          = pr_message_footer
  @commit_message_options     = commit_message_options
  @vulnerabilities_fixed      = vulnerabilities_fixed
  @github_redirection_service = github_redirection_service
  @dependency_group           = dependency_group
  @pr_message_max_length      = pr_message_max_length
  @pr_message_encoding        = pr_message_encoding
  @ignore_conditions          = ignore_conditions
end

Instance Attribute Details

#commit_message_optionsObject (readonly)

Returns the value of attribute commit_message_options.



47
48
49
# File 'lib/dependabot/pull_request_creator/message_builder.rb', line 47

def commit_message_options
  @commit_message_options
end

#credentialsObject (readonly)

Returns the value of attribute credentials.



38
39
40
# File 'lib/dependabot/pull_request_creator/message_builder.rb', line 38

def credentials
  @credentials
end

#dependenciesObject (readonly)

Returns the value of attribute dependencies.



32
33
34
# File 'lib/dependabot/pull_request_creator/message_builder.rb', line 32

def dependencies
  @dependencies
end

#dependency_groupObject (readonly)

Returns the value of attribute dependency_group.



56
57
58
# File 'lib/dependabot/pull_request_creator/message_builder.rb', line 56

def dependency_group
  @dependency_group
end

#filesObject (readonly)

Returns the value of attribute files.



35
36
37
# File 'lib/dependabot/pull_request_creator/message_builder.rb', line 35

def files
  @files
end

#github_redirection_serviceObject (readonly)

Returns the value of attribute github_redirection_service.



53
54
55
# File 'lib/dependabot/pull_request_creator/message_builder.rb', line 53

def github_redirection_service
  @github_redirection_service
end

#ignore_conditionsObject (readonly)

Returns the value of attribute ignore_conditions.



65
66
67
# File 'lib/dependabot/pull_request_creator/message_builder.rb', line 65

def ignore_conditions
  @ignore_conditions
end

#pr_message_encodingObject

Returns the value of attribute pr_message_encoding.



62
63
64
# File 'lib/dependabot/pull_request_creator/message_builder.rb', line 62

def pr_message_encoding
  @pr_message_encoding
end

Returns the value of attribute pr_message_footer.



44
45
46
# File 'lib/dependabot/pull_request_creator/message_builder.rb', line 44

def pr_message_footer
  @pr_message_footer
end

#pr_message_headerObject (readonly)

Returns the value of attribute pr_message_header.



41
42
43
# File 'lib/dependabot/pull_request_creator/message_builder.rb', line 41

def pr_message_header
  @pr_message_header
end

#pr_message_max_lengthObject

Returns the value of attribute pr_message_max_length.



59
60
61
# File 'lib/dependabot/pull_request_creator/message_builder.rb', line 59

def pr_message_max_length
  @pr_message_max_length
end

#sourceObject (readonly)

Returns the value of attribute source.



29
30
31
# File 'lib/dependabot/pull_request_creator/message_builder.rb', line 29

def source
  @source
end

#vulnerabilities_fixedObject (readonly)

Returns the value of attribute vulnerabilities_fixed.



50
51
52
# File 'lib/dependabot/pull_request_creator/message_builder.rb', line 50

def vulnerabilities_fixed
  @vulnerabilities_fixed
end

Instance Method Details

#commit_messageObject



158
159
160
161
162
163
164
165
166
167
168
169
# File 'lib/dependabot/pull_request_creator/message_builder.rb', line 158

def commit_message
  message = commit_subject + "\n\n"
  message += commit_message_intro
  message += 
  message += "\n\n" + T.must(message_trailers) if message_trailers
  message
rescue StandardError => e
  suppress_error("commit message", e)
  message = commit_subject
  message += "\n\n" + T.must(message_trailers) if message_trailers
  message
end

#messageObject



172
173
174
175
176
177
178
# File 'lib/dependabot/pull_request_creator/message_builder.rb', line 172

def message
  Dependabot::PullRequestCreator::Message.new(
    pr_name: pr_name,
    pr_message: pr_message,
    commit_message: commit_message
  )
end

#pr_messageObject



121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/dependabot/pull_request_creator/message_builder.rb', line 121

def pr_message
  msg = "#{suffixed_pr_message_header}" \
        "#{commit_message_intro}" \
        "#{}" \
        "#{ignore_conditions_table}" \
        "#{prefixed_pr_message_footer}"

  truncate_pr_message(msg)
rescue StandardError => e
  suppress_error("PR message", e)
  suffixed_pr_message_header + prefixed_pr_message_footer
end

#pr_nameObject



114
115
116
117
118
# File 'lib/dependabot/pull_request_creator/message_builder.rb', line 114

def pr_name
  name = dependency_group ? group_pr_name : solo_pr_name
  name[0] = T.must(name[0]).capitalize if pr_name_prefixer.capitalize_first_word?
  "#{pr_name_prefix}#{name}"
end

#truncate_pr_message(msg) ⇒ Object



137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# File 'lib/dependabot/pull_request_creator/message_builder.rb', line 137

def truncate_pr_message(msg)
  return msg if pr_message_max_length.nil?

  msg = msg.dup
  msg = msg.force_encoding(T.must(pr_message_encoding)) unless pr_message_encoding.nil?

  if msg.length > T.must(pr_message_max_length)
    tr_msg = if pr_message_encoding.nil?
               TRUNCATED_MSG
             else
               (+TRUNCATED_MSG).dup.force_encoding(T.must(pr_message_encoding))
             end
    trunc_length = T.must(pr_message_max_length) - tr_msg.length
    msg = (T.must(msg[0..trunc_length]) + tr_msg)
  end
  # if we used a custom encoding for calculating length, then we need to force back to UTF-8
  msg = msg.encode("utf-8", "binary", invalid: :replace, undef: :replace) unless pr_message_encoding.nil?
  msg
end