Class: LinearToonMcp::Client
- Inherits:
-
Object
- Object
- LinearToonMcp::Client
- Defined in:
- lib/linear_toon_mcp/client.rb
Overview
Minimal HTTP client for Linear’s GraphQL API.
Constant Summary collapse
- ENDPOINT =
URI("https://api.linear.app/graphql").freeze
Instance Method Summary collapse
-
#initialize(api_key: ENV["LINEAR_API_KEY"]) ⇒ Client
constructor
A new instance of Client.
-
#query(query_string, variables: {}) ⇒ Hash
Execute a GraphQL query against Linear API.
Constructor Details
#initialize(api_key: ENV["LINEAR_API_KEY"]) ⇒ Client
Returns a new instance of Client.
14 15 16 17 18 |
# File 'lib/linear_toon_mcp/client.rb', line 14 def initialize(api_key: ENV["LINEAR_API_KEY"]) raise ArgumentError, "LINEAR_API_KEY is required" if api_key.nil? || api_key.empty? @api_key = api_key end |
Instance Method Details
#query(query_string, variables: {}) ⇒ Hash
Execute a GraphQL query against Linear API.
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/linear_toon_mcp/client.rb', line 25 def query(query_string, variables: {}) response = post(query_string, variables) body = begin JSON.parse(response.body) rescue JSON::ParserError nil end unless response.is_a?(Net::HTTPSuccess) = body&.dig("errors")&.map { |e| e["message"] }&.join("; ") raise Error, "HTTP #{response.code}: #{ || response.body}" end raise Error, "Empty response from Linear API" unless body if body["errors"]&.any? = body["errors"].map { |e| e["message"] }.join("; ") raise Error, "GraphQL error: #{}" end body["data"] end |