Class: LinearToonMcp::Tools::ListStatusUpdates

Inherits:
Base
  • Object
show all
Defined in:
lib/linear_toon_mcp/tools/list_status_updates.rb

Overview

List status updates posted to a Linear project or initiative. Exactly one of project: or initiative: must be provided.

Constant Summary collapse

READ_FIELDS =
<<~GRAPHQL
  id
  body
  health
  isStale
  isDiffHidden
  createdAt
  updatedAt
  editedAt
  archivedAt
  url
  user { id name }
GRAPHQL
PROJECT_QUERY =
<<~GRAPHQL
  query($filter: ProjectUpdateFilter, $first: Int, $after: String, $orderBy: PaginationOrderBy, $includeArchived: Boolean) {
    projectUpdates(filter: $filter, first: $first, after: $after, orderBy: $orderBy, includeArchived: $includeArchived) {
      nodes {
        #{READ_FIELDS.strip}
        project { id name }
      }
      pageInfo { hasNextPage endCursor }
    }
  }
GRAPHQL
INITIATIVE_QUERY =
<<~GRAPHQL
  query($filter: InitiativeUpdateFilter, $first: Int, $after: String, $orderBy: PaginationOrderBy, $includeArchived: Boolean) {
    initiativeUpdates(filter: $filter, first: $first, after: $after, orderBy: $orderBy, includeArchived: $includeArchived) {
      nodes {
        #{READ_FIELDS.strip}
        initiative { id name }
      }
      pageInfo { hasNextPage endCursor }
    }
  }
GRAPHQL

Instance Method Summary collapse

Methods inherited from Base

call, #call, error_response, success_response

Instance Method Details

#perform(project: nil, initiative: nil, cursor: nil, limit: nil, orderBy: nil, includeArchived: false) ⇒ Object

standard:disable Naming/VariableName



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/linear_toon_mcp/tools/list_status_updates.rb', line 67

def perform(project: nil, initiative: nil, cursor: nil, limit: nil,
  orderBy: nil, includeArchived: false)
  parent = exactly_one_parent(project: project, initiative: initiative)
  variables = pagination_variables(cursor: cursor, limit: limit, orderBy: orderBy, includeArchived: includeArchived)

  case parent
  in [:project, value]
    project_id = Resolvers::Project.call(value: value)
    variables[:filter] = {project: {id: {eq: project_id}}}
    data = client.query(PROJECT_QUERY, variables: variables)
    data["projectUpdates"] or raise Error, "Unexpected response: missing projectUpdates field"
  in [:initiative, value]
    initiative_id = Resolvers::Initiative.call(value: value)
    variables[:filter] = {initiative: {id: {eq: initiative_id}}}
    data = client.query(INITIATIVE_QUERY, variables: variables)
    data["initiativeUpdates"] or raise Error, "Unexpected response: missing initiativeUpdates field"
  end
end