Class: Todoist::Service::BaseService

Inherits:
Object
  • Object
show all
Defined in:
lib/todoist/service/base_service.rb

Direct Known Subclasses

Filter, Item, Label, Note, Project, Reminder

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client) ⇒ BaseService

Returns a new instance of BaseService.



8
9
10
# File 'lib/todoist/service/base_service.rb', line 8

def initialize(client)
  @client = client
end

Instance Attribute Details

#clientObject (readonly)

Returns the value of attribute client.



5
6
7
# File 'lib/todoist/service/base_service.rb', line 5

def client
  @client
end

#command_classObject



20
21
22
# File 'lib/todoist/service/base_service.rb', line 20

def command_class
  @command_class ||= Command
end

#dataObject

Returns the value of attribute data.



6
7
8
# File 'lib/todoist/service/base_service.rb', line 6

def data
  @data
end

Instance Method Details

#allObject



50
51
52
53
# File 'lib/todoist/service/base_service.rb', line 50

def all
  response = retrieve([resource_type_plural])
  self.data = response[resource_type_plural.capitalize].map { |resource| collection_class.new(resource) }
end

#build(params, temp_id = nil) ⇒ Object



60
61
62
63
64
# File 'lib/todoist/service/base_service.rb', line 60

def build(params, temp_id = nil)
  instance = collection_class.new(params)
  instance.temp_id ||= temp_id
  instance
end

#create(params, temp_id = nil) ⇒ Object



55
56
57
58
# File 'lib/todoist/service/base_service.rb', line 55

def create(params, temp_id = nil)
  instance = build(params, temp_id)
  save(instance)
end

#create_command(name, arguments, tmp_id = nil) ⇒ Object



16
17
18
# File 'lib/todoist/service/base_service.rb', line 16

def create_command(name, arguments, tmp_id = nil)
  command_class.new(name, arguments, tmp_id)
end

#pathObject



32
33
34
# File 'lib/todoist/service/base_service.rb', line 32

def path
  '/API/v6/sync'
end

#processObject



12
13
14
# File 'lib/todoist/service/base_service.rb', line 12

def process
  @client.queue.process
end

#resource_typeObject



24
25
26
# File 'lib/todoist/service/base_service.rb', line 24

def resource_type
  self.class.name.split('::').last.downcase
end

#resource_type_pluralObject



28
29
30
# File 'lib/todoist/service/base_service.rb', line 28

def resource_type_plural
  "#{resource_type}s"
end

#retrieve(types = ["all"]) ⇒ Object



44
45
46
47
48
# File 'lib/todoist/service/base_service.rb', line 44

def retrieve(types = ["all"])
  response = client.post(path, { seq_no: seq_no, seq_no_global: seq_no_global, resource_types: types.to_json })
  @seq_no = response['seq_no'] if response['seq_no']
  response
end

#save(instance) ⇒ Object



66
67
68
69
70
71
72
73
74
# File 'lib/todoist/service/base_service.rb', line 66

def save(instance)
  if instance.persisted?
    @client.queue.add(create_command("#{resource_type}_update", instance))
  else
    instance.temp_id ||= SecureRandom.uuid
    @client.queue.add(create_command("#{resource_type}_add", instance))
  end
  instance
end

#seq_noObject



36
37
38
# File 'lib/todoist/service/base_service.rb', line 36

def seq_no
  data.nil? ? (@seq_no || 0) : client.seq_no
end

#seq_no_globalObject



40
41
42
# File 'lib/todoist/service/base_service.rb', line 40

def seq_no_global
  data.nil? ? 0 : client.seq_no_global
end