From 77c1557db8cad549aea19e654a885236372fb73c Mon Sep 17 00:00:00 2001 From: "Tj (bougyman) Vanderpoel" Date: Sat, 27 Jan 2024 11:58:15 -0600 Subject: [PATCH] Base model abstracting the all query --- Gemfile.lock | 2 +- exe/lcls | 6 ++++-- exe/lcls.sh | 2 ++ lib/linear/models/base_model.rb | 32 ++++++++++++++++++++++---------- lib/linear/models/issue.rb | 2 +- 5 files changed, 30 insertions(+), 14 deletions(-) create mode 100755 exe/lcls.sh diff --git a/Gemfile.lock b/Gemfile.lock index f401a57..4dd533b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - linear-cli (0.1.8) + linear-cli (0.1.9) base64 dry-cli (~> 1.0) dry-cli-completion (~> 1.0) diff --git a/exe/lcls b/exe/lcls index a4dc666..a06435d 100755 --- a/exe/lcls +++ b/exe/lcls @@ -1,2 +1,4 @@ -#!/usr/bin/env bash -exec lc i ls "$@" +#!/usr/bin/env ruby +# frozen_string_literal: true + +exec File.join(__dir__, 'lcls.sh'), *ARGV diff --git a/exe/lcls.sh b/exe/lcls.sh new file mode 100755 index 0000000..a4dc666 --- /dev/null +++ b/exe/lcls.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +exec lc i ls "$@" diff --git a/lib/linear/models/base_model.rb b/lib/linear/models/base_model.rb index 0f027c6..6db0e78 100644 --- a/lib/linear/models/base_model.rb +++ b/lib/linear/models/base_model.rb @@ -11,20 +11,20 @@ class BaseModel include GQLi::DSL include SemanticLogger::Loggable - def self.included(klass) - klass.extend ClassMethods - end - # Class methods for Linear models. - module ClassMethods - def allq(filter: nil, limit: 50, after: nil) # rubocop:disable Metrics/MethodLength + class << self + def allq(filter: nil, limit: 50, after: nil) args = { first: limit } - args[:filter] = filter ? BASIC_FILTER.merge(filter) : BASIC_FILTER + args[:filter] = filter ? basic_filter.merge(filter) : basic_filter args[:after] = after if after + all_query args, plural.to_s, base_fragment + end + + def all_query(args, subject, base_fragment) query do - subject(args) do + __node(subject, args) do edges do - node { ___ Base } + node { ___ base_fragment } cursor end ___ Fragments::PageInfo @@ -32,6 +32,18 @@ def allq(filter: nil, limit: 50, after: nil) # rubocop:disable Metrics/MethodLen end end + def base_fragment + const_get(:Base) + end + + def basic_filter + const_get(:BASIC_FILTER) + end + + def plural + const_get(:PLURAL) + end + def gql_query(filter: nil, after: nil) Api.query(allq(filter:, after:)) end @@ -39,7 +51,7 @@ def gql_query(filter: nil, after: nil) def all(edges: [], moar: true, after: nil, filter: nil, max: 100) while moar data = gql_query(filter:, after:) - subjects = data[PLURAL] + subjects = data[plural] edges += subjects[:edges] moar = false if edges.size >= max || !subjects[:pageInfo][:hasNextPage] after = subjects[:pageInfo][:endCursor] diff --git a/lib/linear/models/issue.rb b/lib/linear/models/issue.rb index 0c9e0ac..7b19b98 100644 --- a/lib/linear/models/issue.rb +++ b/lib/linear/models/issue.rb @@ -28,7 +28,7 @@ class Issue def display format = "%-10s %s (%s)\n" - printf format, data[:identifier], data[:title], data[:assignee][:name] + printf format, data[:identifier], data[:title], data.dig(:assignee, :name) end end end