Class: PlanMyStuff::IssueMetadata

Inherits:
BaseMetadata show all
Defined in:
lib/plan_my_stuff/issue_metadata.rb

Constant Summary

Constants inherited from BaseMetadata

BaseMetadata::SCHEMA_VERSION

Instance Attribute Summary collapse

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

Instance Method Summary collapse

Methods inherited from BaseMetadata

#internal?, #public?, #to_json

Constructor Details

#initializeIssueMetadata

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_urlString?

Returns user-facing URL in the consuming app.

Returns:

  • (String, nil)

    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_listBoolean

Returns whether this issue appears on the priority dashboard.

Returns:

  • (Boolean)

    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_priorityInteger

Returns sort order on priority dashboard (-1 = unranked).

Returns:

  • (Integer)

    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_atTime?

Returns first support action timestamp, nil until set.

Returns:

  • (Time, nil)

    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_allowlistArray<Integer>

Returns user IDs of non-support users allowed to view internal comments.

Returns:

  • (Array<Integer>)

    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

Parameters:

  • user (Object, Integer)

    user object or user_id

  • custom_fields (Hash) (defaults to: {})

    app-defined field values

Returns:



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)

Parameters:

  • hash (Hash)

Returns:



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

Returns:

  • (Boolean)


74
75
76
# File 'lib/plan_my_stuff/issue_metadata.rb', line 74

def priority_list?
  !!priority_list
end

#responded?Boolean

Returns:

  • (Boolean)


79
80
81
# File 'lib/plan_my_stuff/issue_metadata.rb', line 79

def responded?
  !responded_at.nil?
end

#to_hHash

Returns:

  • (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.

Parameters:

  • user (Object, Integer)

    user object or user_id

Returns:

  • (Boolean)


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