Class: Board
Instance Attribute Summary collapse
-
#board_type ⇒ Object
readonly
Returns the value of attribute board_type.
-
#cycletime ⇒ Object
Returns the value of attribute cycletime.
-
#possible_statuses ⇒ Object
readonly
Returns the value of attribute possible_statuses.
-
#project_config ⇒ Object
Returns the value of attribute project_config.
-
#raw ⇒ Object
readonly
Returns the value of attribute raw.
-
#sprints ⇒ Object
readonly
Returns the value of attribute sprints.
-
#visible_columns ⇒ Object
readonly
Returns the value of attribute visible_columns.
Instance Method Summary collapse
- #backlog_statuses ⇒ Object
- #id ⇒ Object
-
#initialize(raw:, possible_statuses: StatusCollection.new) ⇒ Board
constructor
A new instance of Board.
- #kanban? ⇒ Boolean
- #name ⇒ Object
- #project_id ⇒ Object
- #scrum? ⇒ Boolean
- #server_url_prefix ⇒ Object
- #status_ids_from_column(column) ⇒ Object
- #status_ids_in_or_right_of_column(column_name) ⇒ Object
- #url ⇒ Object
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_type ⇒ Object (readonly)
Returns the value of attribute board_type.
4 5 6 |
# File 'lib/jirametrics/board.rb', line 4 def board_type @board_type end |
#cycletime ⇒ Object
Returns the value of attribute cycletime.
5 6 7 |
# File 'lib/jirametrics/board.rb', line 5 def cycletime @cycletime end |
#possible_statuses ⇒ Object (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_config ⇒ Object
Returns the value of attribute project_config.
5 6 7 |
# File 'lib/jirametrics/board.rb', line 5 def project_config @project_config end |
#raw ⇒ Object (readonly)
Returns the value of attribute raw.
4 5 6 |
# File 'lib/jirametrics/board.rb', line 4 def raw @raw end |
#sprints ⇒ Object (readonly)
Returns the value of attribute sprints.
4 5 6 |
# File 'lib/jirametrics/board.rb', line 4 def sprints @sprints end |
#visible_columns ⇒ Object (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_statuses ⇒ Object
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.(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 |
#id ⇒ Object
78 79 80 |
# File 'lib/jirametrics/board.rb', line 78 def id @raw['id'].to_i end |
#kanban? ⇒ Boolean
70 71 72 |
# File 'lib/jirametrics/board.rb', line 70 def kanban? @board_type == 'kanban' end |
#name ⇒ Object
89 90 91 |
# File 'lib/jirametrics/board.rb', line 89 def name @raw['name'] end |
#project_id ⇒ Object
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
74 75 76 |
# File 'lib/jirametrics/board.rb', line 74 def scrum? @board_type == 'scrum' end |
#server_url_prefix ⇒ Object
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 |
#url ⇒ Object
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 |