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
# 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 = []

  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.
  columns = columns[1..] if kanban?

  @backlog_statuses = []
  @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

#board_typeObject (readonly)

Returns the value of attribute board_type.



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

def board_type
  @board_type
end

#cycletimeObject

Returns the value of attribute cycletime.



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

def cycletime
  @cycletime
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

#backlog_statusesObject



27
28
29
30
31
32
33
34
35
36
# File 'lib/jirametrics/board.rb', line 27

def backlog_statuses
  if @backlog_statuses.empty? && kanban?
    status_ids = status_ids_from_column raw['columnConfig']['columns'].first
    @backlog_statuses = @possible_statuses.expand_statuses(status_ids) do |unknown_status|
      # If a status is returned here that is no longer in the system then there's nothing useful
      # we can do about it. Ignore it.
    end
  end
  @backlog_statuses
end

#idObject



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

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

#kanban?Boolean

Returns:

  • (Boolean)


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

def kanban?
  @board_type == 'kanban'
end

#nameObject



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

def name
  @raw['name']
end

#project_idObject



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

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

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

#scrum?Boolean

Returns:

  • (Boolean)


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

def scrum?
  @board_type == 'scrum'
end

#server_url_prefixObject



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

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

  $1
end

#status_ids_from_column(column) ⇒ Object



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

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



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

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



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

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