Class: Puppet::Pops::Issues::Issue

Inherits:
Object
  • Object
show all
Defined in:
lib/puppet/pops/issues.rb

Overview

Describes an issue, and can produce a message for an occurrence of the issue.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(issue_code, *args, &block) ⇒ Issue

Configures the Issue with required arguments (bound by occurrence), and a block producing a message.


26
27
28
29
30
31
# File 'lib/puppet/pops/issues.rb', line 26

def initialize issue_code, *args, &block
  @issue_code = issue_code
  @message_block = block
  @arg_names = args
  @demotable = true
end

Instance Attribute Details

#arg_namesObject (readonly)

Names that must be bound in an occurrence of the issue to be able to produce a message. These are the names in addition to requirements stipulated by the Issue formatter contract; i.e. :label`, and `:semantic`.


21
22
23
# File 'lib/puppet/pops/issues.rb', line 21

def arg_names
  @arg_names
end

#demotable=(value) ⇒ Object (writeonly)

If this issue can have its severity lowered to :warning, :deprecation, or :ignored


24
25
26
# File 'lib/puppet/pops/issues.rb', line 24

def demotable=(value)
  @demotable = value
end

#issue_codeSymbol (readonly)

The issue code


11
12
13
# File 'lib/puppet/pops/issues.rb', line 11

def issue_code
  @issue_code
end

#message_blockProc (readonly)

A block producing the message


15
16
17
# File 'lib/puppet/pops/issues.rb', line 15

def message_block
  @message_block
end

Instance Method Details

#demotable?Boolean

Returns true if it is allowed to demote this issue


34
35
36
# File 'lib/puppet/pops/issues.rb', line 34

def demotable?
  @demotable
end

#format(hash = {}) ⇒ Object

Formats a message for an occurrence of the issue with argument bindings passed in a hash. The hash must contain a LabelProvider bound to the key `label` and the semantic model element bound to the key `semantic`. All required arguments as specified by `arg_names` must be bound in the given `hash`.


44
45
46
47
48
49
50
51
52
53
54
# File 'lib/puppet/pops/issues.rb', line 44

def format(hash ={})
  # Create a Message Data where all hash keys become methods for convenient interpolation
  # in issue text.
  msgdata = MessageData.new(*arg_names)
  begin
    # Evaluate the message block in the msg data's binding
    msgdata.format(hash, &message_block)
  rescue StandardError => e
    raise RuntimeError, _("Error while reporting issue: %{code}. %{message}") % { code: issue_code, message: e.message }, caller
  end
end