Class: Board
- Inherits:
-
Object
- Object
- Board
- Defined in:
- lib/jirametrics/board.rb
Instance Attribute Summary collapse
-
#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
- #accumulated_status_ids_per_column ⇒ Object
- #backlog_statuses ⇒ Object
- #board_type ⇒ Object
- #ensure_uniqueness_of_column_names!(json) ⇒ Object
- #estimation_configuration ⇒ Object
- #id ⇒ Object
-
#initialize(raw:, possible_statuses:) ⇒ 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:) ⇒ 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: @raw = raw @possible_statuses = possible_statuses @sprints = [] columns = raw['columnConfig']['columns'] ensure_uniqueness_of_column_names! 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.drop(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
#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
#accumulated_status_ids_per_column ⇒ Object
88 89 90 91 92 93 94 95 96 |
# File 'lib/jirametrics/board.rb', line 88 def accumulated_status_ids_per_column accumulated_status_ids = [] visible_columns.reverse.filter_map do |column| next if column == @fake_column accumulated_status_ids += column.status_ids [column.name, accumulated_status_ids.dup] end.reverse end |
#backlog_statuses ⇒ Object
27 28 29 30 31 32 33 34 35 |
# 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 = status_ids.filter_map do |id| @possible_statuses.find_by_id id end end @backlog_statuses end |
#board_type ⇒ Object
69 |
# File 'lib/jirametrics/board.rb', line 69 def board_type = raw['type'] |
#ensure_uniqueness_of_column_names!(json) ⇒ Object
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/jirametrics/board.rb', line 98 def ensure_uniqueness_of_column_names! json all_names = [] json.each do |column_json| name = column_json['name'] if all_names.include? name (2..).each do |i| new_name = "#{name}-#{i}" next if all_names.include?(new_name) name = new_name column_json['name'] = new_name break end end all_names << name end end |
#estimation_configuration ⇒ Object
116 117 118 |
# File 'lib/jirametrics/board.rb', line 116 def estimation_configuration EstimationConfiguration.new raw: raw['estimation'] end |
#id ⇒ Object
73 74 75 |
# File 'lib/jirametrics/board.rb', line 73 def id @raw['id'].to_i end |
#kanban? ⇒ Boolean
70 |
# File 'lib/jirametrics/board.rb', line 70 def kanban? = (board_type == 'kanban') |
#name ⇒ Object
84 85 86 |
# File 'lib/jirametrics/board.rb', line 84 def name @raw['name'] end |
#project_id ⇒ Object
77 78 79 80 81 82 |
# File 'lib/jirametrics/board.rb', line 77 def project_id location = @raw['location'] return nil unless location location['id'] if location['type'] == 'project' end |
#scrum? ⇒ Boolean
71 |
# File 'lib/jirametrics/board.rb', line 71 def scrum? = (board_type == 'scrum') |
#server_url_prefix ⇒ Object
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 |
#url ⇒ Object
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 |