Class: Board

Inherits:
Object show all
Defined in:
lib/jirametrics/board.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(raw:, possible_statuses: StatusCollection.new) ⇒ Board

Returns a new instance of Board.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/jirametrics/board.rb', line 7

def initialize raw:, possible_statuses: StatusCollection.new
  @raw = raw
  @board_type = raw['type']
  @possible_statuses = possible_statuses
  @sprints = []
  @expedited_priority_names = []

  columns = raw['columnConfig']['columns']

  # For a Kanban board, the first column here will always be called 'Backlog' and will NOT be
  # visible on the board. If the board is configured to have a kanban backlog then it will have
  # statuses matched to it and otherwise, there will be no statuses.
  if kanban?
    @backlog_statuses = @possible_statuses.expand_statuses(status_ids_from_column columns[0]) do |unknown_status|
      # There is a status defined as being 'backlog' that is no longer being returned in statuses.
      # We used to display a warning for this but honestly, there is nothing that anyone can do about it
      # so now we just quietly ignore it.
    end
    columns = columns[1..]
  else
    # We currently don't know how to get the backlog status for a Scrum board
    @backlog_statuses = []
  end

  @visible_columns = columns.filter_map do |column|
    # It's possible for a column to be defined without any statuses and in this case, it won't be visible.
    BoardColumn.new column unless status_ids_from_column(column).empty?
  end
end

Instance Attribute Details

#backlog_statusesObject (readonly)

Returns the value of attribute backlog_statuses.



4
5
6
# File 'lib/jirametrics/board.rb', line 4

def backlog_statuses
  @backlog_statuses
end

#cycletimeObject

Returns the value of attribute cycletime.



5
6
7
# File 'lib/jirametrics/board.rb', line 5

def cycletime
  @cycletime
end

#expedited_priority_namesObject

Returns the value of attribute expedited_priority_names.



5
6
7
# File 'lib/jirametrics/board.rb', line 5

def expedited_priority_names
  @expedited_priority_names
end

#possible_statusesObject (readonly)

Returns the value of attribute possible_statuses.



4
5
6
# File 'lib/jirametrics/board.rb', line 4

def possible_statuses
  @possible_statuses
end

#project_configObject

Returns the value of attribute project_config.



5
6
7
# File 'lib/jirametrics/board.rb', line 5

def project_config
  @project_config
end

#rawObject (readonly)

Returns the value of attribute raw.



4
5
6
# File 'lib/jirametrics/board.rb', line 4

def raw
  @raw
end

#sprintsObject (readonly)

Returns the value of attribute sprints.



4
5
6
# File 'lib/jirametrics/board.rb', line 4

def sprints
  @sprints
end

#visible_columnsObject (readonly)

Returns the value of attribute visible_columns.



4
5
6
# File 'lib/jirametrics/board.rb', line 4

def visible_columns
  @visible_columns
end

Instance Method Details

#idObject



77
78
79
# File 'lib/jirametrics/board.rb', line 77

def id
  @raw['id'].to_i
end

#kanban?Boolean

Returns:

  • (Boolean)


69
70
71
# File 'lib/jirametrics/board.rb', line 69

def kanban?
  @board_type == 'kanban'
end

#nameObject



88
89
90
# File 'lib/jirametrics/board.rb', line 88

def name
  @raw['name']
end

#project_idObject



81
82
83
84
85
86
# File 'lib/jirametrics/board.rb', line 81

def project_id
  location = @raw['location']
  return nil unless location

  location['id'] if location['type'] == 'project'
end

#scrum?Boolean

Returns:

  • (Boolean)


73
74
75
# File 'lib/jirametrics/board.rb', line 73

def scrum?
  @board_type == 'scrum'
end

#server_url_prefixObject



37
38
39
40
41
# File 'lib/jirametrics/board.rb', line 37

def server_url_prefix
  raise "Cannot parse self: #{@raw['self'].inspect}" unless @raw['self'] =~ /^(https?:\/\/.+)\/rest\//

  $1
end

#status_ids_from_column(column) ⇒ Object



48
49
50
# File 'lib/jirametrics/board.rb', line 48

def status_ids_from_column column
  column['statuses']&.collect { |status| status['id'].to_i } || []
end

#status_ids_in_or_right_of_column(column_name) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/jirametrics/board.rb', line 52

def status_ids_in_or_right_of_column column_name
  status_ids = []
  found_it = false

  @visible_columns.each do |column|
    # Check both the current name and also the original raw name in case anonymization has happened.
    found_it = true if column.name == column_name || column.raw['name'] == column_name
    status_ids += column.status_ids if found_it
  end

  unless found_it
    column_names = @visible_columns.collect { |c| c.name.inspect }.join(', ')
    raise "No visible column with name: #{column_name.inspect} Possible options are: #{column_names}"
  end
  status_ids
end

#urlObject



43
44
45
46
# File 'lib/jirametrics/board.rb', line 43

def url
  # Strangely, the URL isn't anywhere in the returned data so we have to fabricate it.
  "#{server_url_prefix}/secure/RapidBoard.jspa?rapidView=#{id}"
end