Module: GroupableIssueChart
- Included in:
- AgingWorkInProgressChart, FlowEfficiencyScatterplot, ThroughputChart, TimeBasedHistogram, TimeBasedScatterplot
- Defined in:
- lib/jirametrics/groupable_issue_chart.rb
Instance Attribute Summary collapse
-
#group_by_block ⇒ Object
readonly
Returns the value of attribute group_by_block.
-
#issue_hints ⇒ Object
Returns the value of attribute issue_hints.
-
#issue_periods ⇒ Object
Returns the value of attribute issue_periods.
Instance Method Summary collapse
-
#accumulate_issue_for_group(result, rules, issue) ⇒ Object
Ruby's Hash keeps whichever key object it saw first, so a later issue whose rules object has different percentiles needs to be reconciled against that retained key rather than just appended under its own (discarded) key.
- #group_issues(completed_issues) ⇒ Object
- #grouping_rules(&block) ⇒ Object
- #init_configuration_block(user_provided_block, &default_block) ⇒ Object
-
#reconcile_percentiles(existing_key, rules) ⇒ Object
The retained hash key is whichever rules object arrived first, so a later issue setting a different list would silently lose.
Instance Attribute Details
#group_by_block ⇒ Object (readonly)
Returns the value of attribute group_by_block.
8 9 10 |
# File 'lib/jirametrics/groupable_issue_chart.rb', line 8 def group_by_block @group_by_block end |
#issue_hints ⇒ Object
Returns the value of attribute issue_hints.
7 8 9 |
# File 'lib/jirametrics/groupable_issue_chart.rb', line 7 def issue_hints @issue_hints end |
#issue_periods ⇒ Object
Returns the value of attribute issue_periods.
7 8 9 |
# File 'lib/jirametrics/groupable_issue_chart.rb', line 7 def issue_periods @issue_periods end |
Instance Method Details
#accumulate_issue_for_group(result, rules, issue) ⇒ Object
Ruby's Hash keeps whichever key object it saw first, so a later issue whose rules object has different percentiles needs to be reconciled against that retained key rather than just appended under its own (discarded) key.
48 49 50 51 52 |
# File 'lib/jirametrics/groupable_issue_chart.rb', line 48 def accumulate_issue_for_group result, rules, issue existing_key = result.keys.find { |key| key.eql? rules } reconcile_percentiles existing_key, rules if existing_key (result[existing_key || rules] ||= []) << issue end |
#group_issues(completed_issues) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/jirametrics/groupable_issue_chart.rb', line 19 def group_issues completed_issues result = {} ignored_issues = [] @issue_hints = {} @issue_periods = {} completed_issues.each do |issue| rules = GroupingRules.new @group_by_block.call(issue, rules) if rules.ignored? ignored_issues << issue next end @issue_hints[issue] = rules.issue_hint @issue_periods[issue] = rules.last_day_of_period accumulate_issue_for_group result, rules, issue end completed_issues.reject! { |issue| ignored_issues.include? issue } result.each_key do |rules| rules.color = next_palette_color if rules.color.nil? end result end |
#grouping_rules(&block) ⇒ Object
15 16 17 |
# File 'lib/jirametrics/groupable_issue_chart.rb', line 15 def grouping_rules &block @group_by_block = block end |
#init_configuration_block(user_provided_block, &default_block) ⇒ Object
10 11 12 13 |
# File 'lib/jirametrics/groupable_issue_chart.rb', line 10 def init_configuration_block user_provided_block, &default_block instance_eval(&user_provided_block) instance_eval(&default_block) unless @group_by_block end |
#reconcile_percentiles(existing_key, rules) ⇒ Object
The retained hash key is whichever rules object arrived first, so a later issue setting a different list would silently lose. That can only be a config error, so say so.
56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/jirametrics/groupable_issue_chart.rb', line 56 def reconcile_percentiles existing_key, rules incoming = rules.percentiles return if incoming.nil? existing = existing_key.percentiles if existing.nil? existing_key.percentiles = incoming elsif existing != incoming raise ArgumentError, "group #{existing_key.label.inspect} was given conflicting percentiles: " \ "#{existing.inspect} and #{incoming.inspect}" end end |