Module: PlanMyStuff::IssueFieldTranslation

Defined in:
lib/plan_my_stuff/issue_field_translation.rb

Overview

Translates between the canonical Issue Field names / values the gem refers to internally (e.g. “Issue Status”, “Waiting on Reply”) and the names / values a consuming org actually uses on GitHub. Driven by config.issue_field_names (canonical field name => consumer field name) and config.issue_field_values (canonical field name => { canonical value => consumer value }).

Outbound (canonical -> consumer) translation happens on writes and filters; inbound (consumer -> canonical) on reads, so internal comparisons like issue_fields[‘Issue Status’] == ‘Waiting on Reply’ keep working regardless of how the org named the field or option. Unconfigured names / values pass through unchanged (identity fallback, mirroring config.pipeline_statuses).

Class Method Summary collapse

Class Method Details

.canonical_field_name(consumer) ⇒ String

Returns the canonical field name, or the consumer name when unmapped.

Parameters:

  • consumer (String)

    the consumer’s field name (as GitHub returns it)

Returns:

  • (String)

    the canonical field name, or the consumer name when unmapped



28
29
30
# File 'lib/plan_my_stuff/issue_field_translation.rb', line 28

def canonical_field_name(consumer)
  PlanMyStuff.configuration.issue_field_names.invert.fetch(consumer, consumer)
end

.canonical_value(canonical_field, value) ⇒ Object?

Translates a consumer value back to the canonical value for the given canonical field.

Parameters:

  • canonical_field (String, Symbol)

    canonical field name

  • value (Object, nil)

    consumer value

Returns:

  • (Object, nil)

    the canonical value, or the input when unmapped / non-String



53
54
55
56
57
# File 'lib/plan_my_stuff/issue_field_translation.rb', line 53

def canonical_value(canonical_field, value)
  return value unless value.is_a?(String)

  value_map(canonical_field).invert.fetch(value, value)
end

.consumer_field_name(canonical) ⇒ String

Returns the consumer’s field name, or the canonical name when unmapped.

Parameters:

  • canonical (String, Symbol)

    canonical field name

Returns:

  • (String)

    the consumer’s field name, or the canonical name when unmapped



20
21
22
# File 'lib/plan_my_stuff/issue_field_translation.rb', line 20

def consumer_field_name(canonical)
  PlanMyStuff.configuration.issue_field_names.fetch(canonical.to_s, canonical.to_s)
end

.consumer_value(canonical_field, value) ⇒ Object?

Translates a canonical value to the consumer’s value for the given canonical field. Non-String values (numbers, dates, nil) pass through untouched – only single-select / text labels are translatable.

Parameters:

  • canonical_field (String, Symbol)

    canonical field name

  • value (Object, nil)

    canonical value

Returns:

  • (Object, nil)

    the consumer’s value, or the input when unmapped / non-String



40
41
42
43
44
# File 'lib/plan_my_stuff/issue_field_translation.rb', line 40

def consumer_value(canonical_field, value)
  return value unless value.is_a?(String)

  value_map(canonical_field).fetch(value, value)
end

.value_map(canonical_field) ⇒ Hash{String => String}

Returns canonical-value => consumer-value map for the field (empty when unconfigured).

Parameters:

  • canonical_field (String, Symbol)

Returns:

  • (Hash{String => String})

    canonical-value => consumer-value map for the field (empty when unconfigured)



63
64
65
# File 'lib/plan_my_stuff/issue_field_translation.rb', line 63

def value_map(canonical_field)
  PlanMyStuff.configuration.issue_field_values.fetch(canonical_field.to_s, {})
end