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



57
58
59
# File 'lib/jira/auto/tool/ticket.rb', line 57

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

#expected_start_date_fieldObject



88
89
90
# File 'lib/jira/auto/tool/ticket.rb', line 88

def expected_start_date_field
  tool.expected_start_date_field
end

#implementation_teamObject



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/jira/auto/tool/ticket.rb', line 63

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



80
81
82
# File 'lib/jira/auto/tool/ticket.rb', line 80

def implementation_team_attributes
  jira_field_value(implementation_team_field.id)
end

#implementation_team_fieldObject



84
85
86
# File 'lib/jira/auto/tool/ticket.rb', line 84

def implementation_team_field
  tool.implementation_team_field
end

#jira_clientObject



49
50
51
# File 'lib/jira/auto/tool/ticket.rb', line 49

def jira_client
  tool.jira_client
end

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



96
97
98
99
100
101
102
103
104
105
106
# File 'lib/jira/auto/tool/ticket.rb', line 96

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

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

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

  field
end

#jira_sprint_fieldObject



53
54
55
# File 'lib/jira/auto/tool/ticket.rb', line 53

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



45
46
47
# File 'lib/jira/auto/tool/ticket.rb', line 45

def sprint
  jira_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



92
93
94
# File 'lib/jira/auto/tool/ticket.rb', line 92

def summary
  jira_ticket.summary
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