Class: PlanMyStuff::IssueMetadata
- Inherits:
-
BaseMetadata
- Object
- BaseMetadata
- PlanMyStuff::IssueMetadata
- Defined in:
- lib/plan_my_stuff/issue_metadata.rb
Constant Summary
Constants inherited from BaseMetadata
Instance Attribute Summary collapse
-
#issues_url ⇒ String?
User-facing URL in the consuming app.
-
#priority_list ⇒ Boolean
Whether this issue appears on the priority dashboard.
-
#priority_list_priority ⇒ Integer
Sort order on priority dashboard (-1 = unranked).
-
#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.
Attributes inherited from BaseMetadata
#app_name, #created_at, #created_by, #custom_fields, #gem_version, #rails_env, #schema_version, #updated_at, #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
-
#initialize ⇒ IssueMetadata
constructor
A new instance of IssueMetadata.
- #priority_list? ⇒ Boolean
- #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
Constructor Details
#initialize ⇒ IssueMetadata
Returns a new instance of IssueMetadata.
66 67 68 69 70 71 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 66 def initialize super @priority_list = false @priority_list_priority = -1 @visibility_allowlist = [] end |
Instance Attribute Details
#issues_url ⇒ String?
Returns user-facing URL in the consuming app.
8 9 10 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 8 def issues_url @issues_url end |
#priority_list ⇒ Boolean
Returns whether this issue appears on the priority dashboard.
10 11 12 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 10 def priority_list @priority_list end |
#priority_list_priority ⇒ Integer
Returns sort order on priority dashboard (-1 = unranked).
12 13 14 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 12 def priority_list_priority @priority_list_priority end |
#responded_at ⇒ Time?
Returns first support action timestamp, nil until set.
6 7 8 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 6 def responded_at @responded_at end |
#visibility_allowlist ⇒ Array<Integer>
Returns user IDs of non-support users allowed to view internal comments.
14 15 16 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 14 def visibility_allowlist @visibility_allowlist end |
Class Method Details
.build(user:, visibility: 'public', custom_fields: {}) ⇒ IssueMetadata
Builds a new IssueMetadata for issue creation, auto-filling gem defaults
43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 43 def build(user:, visibility: 'public', custom_fields: {}) = new apply_common_build(, user: user, visibility: visibility, custom_fields_data: custom_fields) .responded_at = nil .issues_url = build_issues_url(PlanMyStuff.configuration) .priority_list = false .priority_list_priority = -1 .visibility_allowlist = [] end |
.from_hash(hash) ⇒ IssueMetadata
Builds an IssueMetadata from a parsed hash (e.g. from MetadataParser)
23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 23 def from_hash(hash) = new apply_common_from_hash(, hash) .responded_at = parse_time(hash[:responded_at]) .issues_url = hash[:issues_url] .priority_list = hash.fetch(:priority_list, false) .priority_list_priority = hash.fetch(:priority_list_priority, -1) .visibility_allowlist = Array.wrap(hash[:visibility_allowlist]) end |
Instance Method Details
#priority_list? ⇒ Boolean
74 75 76 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 74 def priority_list? !!priority_list end |
#responded? ⇒ Boolean
79 80 81 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 79 def responded? !responded_at.nil? end |
#to_h ⇒ Hash
101 102 103 104 105 106 107 108 109 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 101 def to_h super.merge( responded_at: format_time(responded_at), issues_url: issues_url, priority_list: priority_list, priority_list_priority: priority_list_priority, visibility_allowlist: visibility_allowlist, ) 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.
91 92 93 94 95 96 97 98 |
# File 'lib/plan_my_stuff/issue_metadata.rb', line 91 def visible_to?(user) return true if public? resolved = UserResolver.resolve(user) return true if UserResolver.support?(resolved) visibility_allowlist.include?(UserResolver.user_id(resolved)) end |