Class: PlanMyStuff::IssueMetadata
- Inherits:
-
BaseMetadata
- Object
- BaseMetadata
- PlanMyStuff::IssueMetadata
- Defined in:
- lib/plan_my_stuff/issue_metadata.rb
Constant Summary collapse
- PRIORITY_LIST_METADATA_DEPRECATION =
'PlanMyStuff: IssueMetadata#priority_list / #priority_list_priority are deprecated. priority_list moved to ' \ "GitHub Issue Fields ('Priority List' single_select, 'Priority List Priority' number) in 0.20.0. Reads " \ 'now come from Issue#priority_list? / #priority_list_priority; for writes, use ' \ 'Issue#add_to_priority_list!(priority: N) and Issue#remove_from_priority_list!. The metadata accessors ' \ 'will be removed in 1.0.0.'
Constants inherited from BaseMetadata
Instance Attribute Summary collapse
-
#approvals ⇒ Array<PlanMyStuff::Approval>
Manager approvals required on this issue.
-
#archived_at ⇒ Time?
When the archive sweep tagged this issue as archived.
-
#auto_complete ⇒ Boolean
Whether to auto-complete on deployment (default: true).
-
#closed_by_inactivity ⇒ Boolean
Whether this issue was auto-closed by the inactivity sweep.
-
#commit_sha ⇒ String?
Merged PR commit SHA for release tracking.
-
#issues_url ⇒ String?
User-facing URL in the consuming app.
-
#links ⇒ Array<PlanMyStuff::Link>
Metadata-backed issue relationships.
-
#next_reminder_at ⇒ Time?
When the next reminder event should fire for this issue.
-
#reminder_days ⇒ Array<Integer>?
Per-issue override of
config.reminder_days; applies to both waiting kinds. -
#responded_at ⇒ Time?
First support action timestamp, nil until set.
-
#visibility_allowlist ⇒ Array<Integer>
User IDs of non-support users allowed to view internal comments.
-
#waiting_on_approval_at ⇒ Time?
When the issue entered “waiting on approval” state.
-
#waiting_on_user_at ⇒ Time?
When the issue entered “waiting on user reply” state.
Attributes inherited from BaseMetadata
#app_name, #created_by, #custom_fields, #gem_version, #rails_env, #schema_version, #visibility
Class Method Summary collapse
-
.build(user:, visibility: 'public', custom_fields: {}) ⇒ IssueMetadata
Builds a new IssueMetadata for issue creation, auto-filling gem defaults.
-
.from_hash(hash) ⇒ IssueMetadata
Builds an IssueMetadata from a parsed hash (e.g. from MetadataParser).
Instance Method Summary collapse
- #auto_complete? ⇒ Boolean
-
#initialize ⇒ IssueMetadata
constructor
A new instance of IssueMetadata.
-
#priority_list ⇒ Object?
deprecated
Deprecated.
Use Issue#priority_list?. Removed in 1.0.0.
-
#priority_list=(value) ⇒ Object
deprecated
Deprecated.
Use Issue#add_to_priority_list!(priority: N) / Issue#remove_from_priority_list!. Removed in 1.0.0.
-
#priority_list? ⇒ Boolean
deprecated
Deprecated.
Use Issue#priority_list?. Removed in 1.0.0.
-
#priority_list_priority ⇒ Object?
deprecated
Deprecated.
Use Issue#priority_list_priority. Removed in 1.0.0.
-
#priority_list_priority=(value) ⇒ Object
deprecated
Deprecated.
Use Issue#add_to_priority_list!(priority: N) / Issue#remove_from_priority_list!. Removed in 1.0.0.
- #responded? ⇒ Boolean
- #to_h ⇒ Hash
-
#visible_to?(user) ⇒ Boolean
Checks whether a user can see this issue’s internal content.
Methods inherited from BaseMetadata
#internal?, #public?, #to_json, #validate_custom_fields!
Constructor Details
#initialize ⇒ IssueMetadata
Returns a new instance of IssueMetadata.
177 178 179 180 181 182 183 184 185 186 187 188 189 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 177 def initialize super @visibility_allowlist = [] @auto_complete = true @links = [] @approvals = [] @waiting_on_user_at = nil @waiting_on_approval_at = nil @next_reminder_at = nil @reminder_days = nil @closed_by_inactivity = false @archived_at = nil end |
Instance Attribute Details
#approvals ⇒ Array<PlanMyStuff::Approval>
Returns manager approvals required on this issue. See Issue.request_approvals! and Issue#fully_approved?.
28 29 30 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 28 def approvals @approvals end |
#archived_at ⇒ Time?
Returns when the archive sweep tagged this issue as archived.
41 42 43 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 41 def archived_at @archived_at end |
#auto_complete ⇒ Boolean
Returns whether to auto-complete on deployment (default: true).
21 22 23 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 21 def auto_complete @auto_complete end |
#closed_by_inactivity ⇒ Boolean
Returns whether this issue was auto-closed by the inactivity sweep.
39 40 41 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 39 def closed_by_inactivity @closed_by_inactivity end |
#commit_sha ⇒ String?
Returns merged PR commit SHA for release tracking.
19 20 21 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 19 def commit_sha @commit_sha end |
#issues_url ⇒ String?
Returns user-facing URL in the consuming app.
15 16 17 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 15 def issues_url @issues_url end |
#links ⇒ Array<PlanMyStuff::Link>
Returns metadata-backed issue relationships. Only :related links live here; native relationships (blocking, parent, sub_ticket, duplicate_of) live on GitHub.
25 26 27 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 25 def links @links end |
#next_reminder_at ⇒ Time?
Returns when the next reminder event should fire for this issue.
34 35 36 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 34 def next_reminder_at @next_reminder_at end |
#reminder_days ⇒ Array<Integer>?
Returns per-issue override of config.reminder_days; applies to both waiting kinds.
37 38 39 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 37 def reminder_days @reminder_days end |
#responded_at ⇒ Time?
Returns first support action timestamp, nil until set.
13 14 15 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 13 def responded_at @responded_at end |
#visibility_allowlist ⇒ Array<Integer>
Returns user IDs of non-support users allowed to view internal comments.
17 18 19 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 17 def visibility_allowlist @visibility_allowlist end |
#waiting_on_approval_at ⇒ Time?
Returns when the issue entered “waiting on approval” state.
32 33 34 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 32 def waiting_on_approval_at @waiting_on_approval_at end |
#waiting_on_user_at ⇒ Time?
Returns when the issue entered “waiting on user reply” state.
30 31 32 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 30 def waiting_on_user_at @waiting_on_user_at end |
Class Method Details
.build(user:, visibility: 'public', custom_fields: {}) ⇒ IssueMetadata
Builds a new IssueMetadata for issue creation, auto-filling gem defaults
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 86 def build(user:, visibility: 'public', custom_fields: {}) = new apply_common_build( , user: user, visibility: visibility, custom_fields_data: custom_fields, custom_fields_schema: PlanMyStuff.configuration.custom_fields_for(:issue), ) .responded_at = nil .issues_url = build_issues_url(PlanMyStuff.configuration) .visibility_allowlist = [] .commit_sha = nil .auto_complete = true .links = [] .approvals = [] .waiting_on_user_at = nil .waiting_on_approval_at = nil .next_reminder_at = nil .reminder_days = nil .closed_by_inactivity = false .archived_at = nil end |
.from_hash(hash) ⇒ IssueMetadata
Builds an IssueMetadata from a parsed hash (e.g. from MetadataParser)
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 50 def from_hash(hash) = new apply_common_from_hash(, hash, PlanMyStuff.configuration.custom_fields_for(:issue)) .responded_at = parse_time(hash[:responded_at]) .issues_url = hash[:issues_url] if hash.key?(:priority_list) || hash.key?(:priority_list_priority) PlanMyStuff.deprecator.warn(PRIORITY_LIST_METADATA_DEPRECATION) .instance_variable_set(:@priority_list, hash[:priority_list]) if hash.key?(:priority_list) if hash.key?(:priority_list_priority) .instance_variable_set(:@priority_list_priority, hash[:priority_list_priority]) end .instance_variable_set(:@legacy_priority_list_pending, true) end .visibility_allowlist = Array.wrap(hash[:visibility_allowlist]) .commit_sha = hash[:commit_sha] .auto_complete = hash.fetch(:auto_complete, true) .links = normalize_links(hash[:links]) .approvals = normalize_approvals(hash[:approvals]) .waiting_on_user_at = parse_time(hash[:waiting_on_user_at]) .waiting_on_approval_at = parse_time(hash[:waiting_on_approval_at]) .next_reminder_at = parse_time(hash[:next_reminder_at]) .reminder_days = normalize_reminder_days(hash[:reminder_days]) .closed_by_inactivity = hash.fetch(:closed_by_inactivity, false) .archived_at = parse_time(hash[:archived_at]) end |
Instance Method Details
#auto_complete? ⇒ Boolean
192 193 194 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 192 def auto_complete? !!auto_complete end |
#priority_list ⇒ Object?
Use Issue#priority_list?. Removed in 1.0.0.
200 201 202 203 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 200 def priority_list PlanMyStuff.deprecator.warn(PRIORITY_LIST_METADATA_DEPRECATION) @priority_list end |
#priority_list=(value) ⇒ Object
Use Issue#add_to_priority_list!(priority: N) / Issue#remove_from_priority_list!. Removed in 1.0.0.
211 212 213 214 215 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 211 def priority_list=(value) PlanMyStuff.deprecator.warn(PRIORITY_LIST_METADATA_DEPRECATION) @legacy_priority_list_pending = true @priority_list = value end |
#priority_list? ⇒ Boolean
Use Issue#priority_list?. Removed in 1.0.0.
221 222 223 224 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 221 def priority_list? PlanMyStuff.deprecator.warn(PRIORITY_LIST_METADATA_DEPRECATION) !!@priority_list end |
#priority_list_priority ⇒ Object?
Use Issue#priority_list_priority. Removed in 1.0.0.
230 231 232 233 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 230 def priority_list_priority PlanMyStuff.deprecator.warn(PRIORITY_LIST_METADATA_DEPRECATION) @priority_list_priority end |
#priority_list_priority=(value) ⇒ Object
Use Issue#add_to_priority_list!(priority: N) / Issue#remove_from_priority_list!. Removed in 1.0.0.
241 242 243 244 245 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 241 def priority_list_priority=(value) PlanMyStuff.deprecator.warn(PRIORITY_LIST_METADATA_DEPRECATION) @legacy_priority_list_pending = true @priority_list_priority = value end |
#responded? ⇒ Boolean
248 249 250 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 248 def responded? !responded_at.nil? end |
#to_h ⇒ Hash
270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 270 def to_h super.merge( responded_at: PlanMyStuff.format_time(responded_at), issues_url: issues_url, visibility_allowlist: visibility_allowlist, commit_sha: commit_sha, auto_complete: auto_complete, links: links.map(&:to_h), approvals: approvals.map(&:to_h), waiting_on_user_at: PlanMyStuff.format_time(waiting_on_user_at), waiting_on_approval_at: PlanMyStuff.format_time(waiting_on_approval_at), next_reminder_at: PlanMyStuff.format_time(next_reminder_at), reminder_days: reminder_days, closed_by_inactivity: closed_by_inactivity, archived_at: PlanMyStuff.format_time(archived_at), ) end |
#visible_to?(user) ⇒ Boolean
Checks whether a user can see this issue’s internal content. Public issues are always visible. Internal issues are visible if the user is support staff or their ID is in the visibility_allowlist.
260 261 262 263 264 265 266 267 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 260 def visible_to?(user) return true if public? resolved = PlanMyStuff::UserResolver.resolve(user) return true if PlanMyStuff::UserResolver.support?(resolved) visibility_allowlist.include?(PlanMyStuff::UserResolver.user_id(resolved)) end |