Class: TodoistClient::Item

Inherits:
Object
  • Object
show all
Includes:
ApiClient
Defined in:
lib/todoist_client/item.rb

Defined Under Namespace

Modules: Paths

Constant Summary collapse

VALID_PARAMS =
[
  :due_date,
  :user_id,
  :collapsed,
  :in_history,
  :priority,
  :item_order,
  :content,
  :indent,
  :project_id,
  :id,
  :checked,
  :date_string
].freeze

Constants included from ApiClient

ApiClient::BASE_URI

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ApiClient

included, #set_params, #with_remote_object

Constructor Details

#initialize(params = nil) ⇒ Item

Returns a new instance of Item.



34
35
36
37
38
39
40
41
# File 'lib/todoist_client/item.rb', line 34

def initialize(params = nil)
  case
  when params.is_a?(String)
    @content = params
  when params.is_a?(Hash)
    set_params(params)
  end
end

Class Method Details

.complete_all(ids) ⇒ Object



122
123
124
# File 'lib/todoist_client/item.rb', line 122

def complete_all(ids)
  request *Paths::COMPLETE, {ids: json_ids(ids)}
end

.completed(project) ⇒ Object



95
96
97
98
# File 'lib/todoist_client/item.rb', line 95

def completed(project)
  project_id = project.is_a?(Project) ? project.id : project
  request(*Paths::COMPLETED, {project_id: project_id}).map {|item| self.new(item)}
end

.completed_items(project = nil) ⇒ Object

only premium user



101
102
103
104
105
106
# File 'lib/todoist_client/item.rb', line 101

def completed_items(project = nil)
  project_id = project.is_a?(Project) ? project.id : project
  request(*Paths::ALL_COMPLETED, {project_id: project_id})["items"].map {|item|
    CompletedItem.new(item)
  }
end

.create(params) ⇒ Object



114
115
116
# File 'lib/todoist_client/item.rb', line 114

def create(params)
  self.new(params).save
end

.delete_all(ids) ⇒ Object



118
119
120
# File 'lib/todoist_client/item.rb', line 118

def delete_all(ids)
  request *Paths::DELETE, {ids: json_ids(ids)}
end

.find(ids) ⇒ Object



108
109
110
111
112
# File 'lib/todoist_client/item.rb', line 108

def find(ids)
  items = request(*Paths::FIND, {ids: json_ids(ids)}).map {|item| self.new(item)}
  # return nil or Item object if item does not exist multiple.
  items.size > 1 ? items : items.first
end

.json_ids(ids) ⇒ Object



130
131
132
133
# File 'lib/todoist_client/item.rb', line 130

def json_ids(ids)
  ids = [ids] unless ids.is_a?(Array)
  JSON.generate(ids)
end

.uncomplete_all(ids) ⇒ Object



126
127
128
# File 'lib/todoist_client/item.rb', line 126

def uncomplete_all(ids)
  request *Paths::UNCOMPLETE, {ids: json_ids(ids)}
end

.uncompleted(project) ⇒ Object



90
91
92
93
# File 'lib/todoist_client/item.rb', line 90

def uncompleted(project)
  project_id = project.is_a?(Project) ? project.id : project
  request(*Paths::UNCOMPLETED, {project_id: project_id}).map {|item| self.new(item)}
end

Instance Method Details

#completeObject



73
74
75
76
77
# File 'lib/todoist_client/item.rb', line 73

def complete
  with_remote_object do
    self.class.request *Paths::COMPLETE, {ids: JSON.generate([id])}
  end
end

#deleteObject



67
68
69
70
71
# File 'lib/todoist_client/item.rb', line 67

def delete
  with_remote_object do
    self.class.request *Paths::DELETE, {ids: JSON.generate([id])}
  end
end

#finished?Boolean

Returns:

  • (Boolean)


85
86
87
# File 'lib/todoist_client/item.rb', line 85

def finished?
  checked == 1
end

#saveObject



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/todoist_client/item.rb', line 43

def save
  if id
    json = self.class.request *Paths::UPDATE, {
      id: @id, # required
      content: @content,
      priority: @priority,
      indent: @indent,
      item_order: @item_order,
      collapsed: @collapsed
    }.select {|k,v| !v.nil?}
  else
    json = self.class.request *Paths::ADD, {
      content: @content, # required
      project_id: @project_id,
      date_string: @date_string,
      priority: @priority,
      indent: @indent,
      item_order: @item_order
    }.select {|k,v| !v.nil?}
  end
  set_params(json)
  self
end

#uncompleteObject



79
80
81
82
83
# File 'lib/todoist_client/item.rb', line 79

def uncomplete
  with_remote_object do
    self.class.request *Paths::UNCOMPLETE, {ids: JSON.generate([id])}
  end
end