class Wip::Todo

Constants

ATTRIBUTES

Attributes

client[R]
deleted[RW]

Public Class Methods

collection_query(**args) click to toggle source
# File lib/wip/todo.rb, line 13
def self.collection_query(**args)
  conditions = Wip::GraphqlHelper.query_conditions(**args)
  %{ todos#{conditions} { #{default_selection} } }
end
complete(id) click to toggle source
# File lib/wip/todo.rb, line 44
def self.complete(id)
  todo = find id
  todo.complete
  todo
end
create(body:, completed_at: nil) click to toggle source
# File lib/wip/todo.rb, line 33
def self.create(body:, completed_at: nil)
  new(body: body, completed_at: completed_at).tap &:save
end
default_selection() click to toggle source
# File lib/wip/todo.rb, line 18
def self.default_selection
  ATTRIBUTES.join("\n ")
end
delete(id) click to toggle source
# File lib/wip/todo.rb, line 56
def self.delete(id)
  todo = find id
  todo.delete
  todo
end
find(id) click to toggle source
# File lib/wip/todo.rb, line 22
def self.find(id)
  client = Wip::Client.new
  find_query = %{
    {
      todo(id: \"#{id}\") {#{default_selection}}
    }
  }
  client.request find_query
  parse client.data("todo")
end
new(id: nil, body: nil, completed_at: nil, created_at: nil) click to toggle source
# File lib/wip/todo.rb, line 63
def initialize(id: nil, body: nil, completed_at: nil, created_at: nil)
  @id = id
  @body = body
  @completed_at = completed_at
  @created_at = created_at
end
parse(data) click to toggle source
# File lib/wip/todo.rb, line 37
def self.parse(data)
  todo_id = data["id"].to_i
  completed_at = DateTime.parse(data["completed_at"]) unless data["completed_at"].nil?
  created_at = DateTime.parse(data["created_at"]) unless data["created_at"].nil?
  new id: todo_id, body: data["body"], completed_at: completed_at, created_at: created_at
end
uncomplete(id) click to toggle source
# File lib/wip/todo.rb, line 50
def self.uncomplete(id)
  todo = find id
  todo.uncomplete
  todo
end

Public Instance Methods

complete() click to toggle source
# File lib/wip/todo.rb, line 87
def complete
  client.request complete_query
  client.data("completeTodo").tap do |params|
    @completed_at = DateTime.parse params["completed_at"]
  end
end
delete() click to toggle source
# File lib/wip/todo.rb, line 112
def delete
  client.request delete_query
  @deleted = !client.data("deleteTodo").nil?
end
description() click to toggle source
# File lib/wip/todo.rb, line 75
def description
  [icon, body, "- #{id}"].join " "
end
done?() click to toggle source
# File lib/wip/todo.rb, line 79
def done?
  !completed_at.nil?
end
icon() click to toggle source
# File lib/wip/todo.rb, line 83
def icon
  deleted ? "🗑" : (done? ? "✅" : "🚧")
end
save() click to toggle source
# File lib/wip/todo.rb, line 105
def save
  client.request create_query
  client.data("createTodo").tap do |params|
    @id = params["id"]&.to_i
  end
end
toggle() click to toggle source
# File lib/wip/todo.rb, line 101
def toggle
  done? ? uncomplete : complete
end
uncomplete() click to toggle source
# File lib/wip/todo.rb, line 94
def uncomplete
  client.request uncomplete_query
  client.data("uncompleteTodo").tap do |params|
    @completed_at = nil
  end
end

Private Instance Methods

complete_query() click to toggle source
# File lib/wip/todo.rb, line 139
def complete_query
  %{
    mutation completeTodo {
      completeTodo(id: #{id}) {
        id
        body
        completed_at
        created_at
      }
    }
  }
end
create_query() click to toggle source
# File lib/wip/todo.rb, line 118
def create_query
  %{
    mutation createTodo {
      createTodo(input: {#{to_params}}) {
        id
        body
        completed_at
        created_at
      }
    }
  }
end
delete_query() click to toggle source
# File lib/wip/todo.rb, line 131
def delete_query
  %{
    mutation deleteTodo {
      deleteTodo(id: #{id})
    }
  }
end
to_params() click to toggle source
# File lib/wip/todo.rb, line 165
def to_params
  [:body, :completed_at].collect do |key|
    value = send(key).nil? ? "null" : "\"#{send(key)}\""
    [key, value].join(": ")
  end.join(", ")
end
uncomplete_query() click to toggle source
# File lib/wip/todo.rb, line 152
def uncomplete_query
  %{
    mutation uncompleteTodo {
      uncompleteTodo(id: #{id}) {
        id
        body
        completed_at
        created_at
      }
    }
  }
end