Class: Jira::Auto::Tool::Ticket

Inherits:
Object
  • Object
show all
Includes:
Helpers::EnvironmentBasedValue
Defined in:
lib/jira/auto/tool/ticket.rb

Constant Summary collapse

IMPLEMENTATION_TEAM_VALUE_ATTRIBUTES =
%w[value name].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Helpers::EnvironmentBasedValue

#corresponding_environment_variable_defined?, #define_environment_variable_name_constant, #define_holds_a_secret_predicate, #define_overridable_environment_based_value, #define_predicate, #define_reader, #define_reader_accepting_default_value, #define_writer, #fetch_corresponding_environment_variable, #instance_variable_name

Constructor Details

#initialize(tool, jira_ticket, implementation_team = nil, expected_start_date = nil) ⇒ Ticket

Returns a new instance of Ticket.



14
15
16
17
18
19
# File 'lib/jira/auto/tool/ticket.rb', line 14

def initialize(tool, jira_ticket, implementation_team = nil, expected_start_date = nil)
  @tool = tool
  @jira_ticket = jira_ticket
  @implementation_team = implementation_team
  @expected_start_date = expected_start_date
end

Instance Attribute Details

#jira_ticketObject (readonly)

Returns the value of attribute jira_ticket.



12
13
14
# File 'lib/jira/auto/tool/ticket.rb', line 12

def jira_ticket
  @jira_ticket
end

#toolObject (readonly)

Returns the value of attribute tool.



12
13
14
# File 'lib/jira/auto/tool/ticket.rb', line 12

def tool
  @tool
end

Instance Method Details

#expected_start_dateObject



72
73
74
# File 'lib/jira/auto/tool/ticket.rb', line 72

def expected_start_date
  @expected_start_date || jira_field_value(expected_start_date_field.id)
end

#expected_start_date_fieldObject



103
104
105
# File 'lib/jira/auto/tool/ticket.rb', line 103

def expected_start_date_field
  tool.expected_start_date_field
end

#implementation_teamObject



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/jira/auto/tool/ticket.rb', line 78

def implementation_team
  @implementation_team ||=
    begin
      attributes = implementation_team_attributes

      if attributes.nil?
        nil
      else
        IMPLEMENTATION_TEAM_VALUE_ATTRIBUTES.any? { |attr| attributes.key?(attr) } or
          raise "Implementation team #{IMPLEMENTATION_TEAM_VALUE_ATTRIBUTES.join(" and ")} " \
                "attributes not found in #{attributes}!"

        attributes.values_at(*IMPLEMENTATION_TEAM_VALUE_ATTRIBUTES).compact.first
      end
    end
end

#implementation_team_attributesObject



95
96
97
# File 'lib/jira/auto/tool/ticket.rb', line 95

def implementation_team_attributes
  jira_field_value(implementation_team_field.id)
end

#implementation_team_fieldObject



99
100
101
# File 'lib/jira/auto/tool/ticket.rb', line 99

def implementation_team_field
  tool.implementation_team_field
end

#jira_clientObject



64
65
66
# File 'lib/jira/auto/tool/ticket.rb', line 64

def jira_client
  tool.jira_client
end

#jira_field_value(field_id = caller_locations(1, 1).first.base_label) ⇒ Object



111
112
113
114
115
116
117
118
119
120
121
# File 'lib/jira/auto/tool/ticket.rb', line 111

def jira_field_value(field_id = caller_locations(1, 1).first.base_label)
  log.debug { "jira_field_value(#{field_id})" }

  field = ticket_fields.fetch(field_id) do |id|
    raise "#{id}: value not found in #{ticket_fields}"
  end

  log.debug { "jira_field_value(#{field_id}), field: #{field}" }

  field
end

#jira_sprint_fieldObject



68
69
70
# File 'lib/jira/auto/tool/ticket.rb', line 68

def jira_sprint_field
  tool.jira_sprint_field
end

#keyObject



21
22
23
# File 'lib/jira/auto/tool/ticket.rb', line 21

def key
  jira_ticket.key
end

#sprintObject



60
61
62
# File 'lib/jira/auto/tool/ticket.rb', line 60

def sprint
  ticket_fields.fetch(tool.jira_sprint_field.id)
end

#sprint=(sprint) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
# File 'lib/jira/auto/tool/ticket.rb', line 25

def sprint=(sprint)
  @sprint = sprint

  jira_ticket.save!({ "fields" => { tool.jira_sprint_field.id => sprint.id } })
rescue StandardError => e
  message = "Failed to set sprint for ticket #{key} to #{sprint.id}! #{self}"

  log.error { message }

  raise e.class, message
end

#summaryObject



107
108
109
# File 'lib/jira/auto/tool/ticket.rb', line 107

def summary
  jira_ticket.summary
end

#ticket_fieldsObject

Compatibility helper to access Issue fields across Jira API versions

  • jira-ruby v2: JIRA::Resource::Issue responds to #fields

  • jira-ruby v3: fields are nested under #attrs



48
49
50
51
52
53
54
55
56
57
58
# File 'lib/jira/auto/tool/ticket.rb', line 48

def ticket_fields
  if jira_ticket.respond_to?(:fields)
    jira_ticket.fields
  else
    raise "attrs not found in #{jira_ticket}!" unless jira_ticket.respond_to?(:attrs)

    attrs = jira_ticket.attrs
    attrs["fields"] || attrs[:fields] ||
      raise("fields not found in #{attrs} from #{jira_ticket}!")
  end
end

#to_sObject



37
38
39
# File 'lib/jira/auto/tool/ticket.rb', line 37

def to_s
  "Ticket(#{to_s_fields.collect { |field| "#{field}: #{send(field)}" }.join(", ")})"
end

#to_s_fieldsObject



41
42
43
# File 'lib/jira/auto/tool/ticket.rb', line 41

def to_s_fields
  %i[key summary sprint implementation_team expected_start_date]
end