ruby-todoist-api 0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/.kick +18 -0
  4. data/.rspec +3 -0
  5. data/.travis.yml +6 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +22 -0
  8. data/README.md +45 -0
  9. data/Rakefile +2 -0
  10. data/lib/todoist.rb +27 -0
  11. data/lib/todoist/client.rb +94 -0
  12. data/lib/todoist/command.rb +24 -0
  13. data/lib/todoist/error.rb +0 -0
  14. data/lib/todoist/filter.rb +16 -0
  15. data/lib/todoist/item.rb +54 -0
  16. data/lib/todoist/label.rb +15 -0
  17. data/lib/todoist/note.rb +19 -0
  18. data/lib/todoist/project.rb +32 -0
  19. data/lib/todoist/query.rb +47 -0
  20. data/lib/todoist/queue.rb +39 -0
  21. data/lib/todoist/reminder.rb +16 -0
  22. data/lib/todoist/request.rb +37 -0
  23. data/lib/todoist/resource.rb +73 -0
  24. data/lib/todoist/service/base_service.rb +77 -0
  25. data/lib/todoist/service/filter.rb +9 -0
  26. data/lib/todoist/service/item.rb +24 -0
  27. data/lib/todoist/service/label.rb +9 -0
  28. data/lib/todoist/service/note.rb +9 -0
  29. data/lib/todoist/service/project.rb +9 -0
  30. data/lib/todoist/service/reminder.rb +9 -0
  31. data/lib/todoist/user.rb +10 -0
  32. data/lib/todoist/version.rb +3 -0
  33. data/ruby-todoist-api.gemspec +22 -0
  34. data/spec/lib/todoist/client_spec.rb +58 -0
  35. data/spec/lib/todoist/filter_spec.rb +19 -0
  36. data/spec/lib/todoist/item_spec.rb +39 -0
  37. data/spec/lib/todoist/label_spec.rb +12 -0
  38. data/spec/lib/todoist/note_spec.rb +12 -0
  39. data/spec/lib/todoist/project_spec.rb +12 -0
  40. data/spec/lib/todoist/query_spec.rb +26 -0
  41. data/spec/lib/todoist/reminder_spec.rb +12 -0
  42. data/spec/lib/todoist/service/filter_spec.rb +33 -0
  43. data/spec/lib/todoist/service/item_spec.rb +46 -0
  44. data/spec/lib/todoist/service/label_spec.rb +33 -0
  45. data/spec/lib/todoist/service/note_spec.rb +33 -0
  46. data/spec/lib/todoist/service/project_spec.rb +33 -0
  47. data/spec/lib/todoist/service/reminder_spec.rb +33 -0
  48. data/spec/lib/todoist_spec.rb +7 -0
  49. data/spec/spec_helper.rb +8 -0
  50. data/spec/support/json_response_helper.rb +17 -0
  51. data/spec/support/responses/filter.json +9 -0
  52. data/spec/support/responses/item.json +25 -0
  53. data/spec/support/responses/label.json +8 -0
  54. data/spec/support/responses/note.json +18 -0
  55. data/spec/support/responses/project.json +14 -0
  56. data/spec/support/responses/query.json +88 -0
  57. data/spec/support/responses/reminder.json +9 -0
  58. metadata +153 -0
@@ -0,0 +1,39 @@
1
+ require "spec_helper"
2
+
3
+ describe Todoist::Item do
4
+ let(:instance) { described_class.new(json_response('item'))}
5
+
6
+ it "can be built from json" do
7
+ expect(instance.attributes).to eq({
8
+ "id"=>33511505,
9
+ "user_id"=>1855589,
10
+ "project_id"=>128501470,
11
+ "content"=>"Task1",
12
+ "date_added" => "Fri 26 Sep 2014 08:25:05 +0000",
13
+ "date_string"=>"",
14
+ "date_lang"=>"en",
15
+ "priority"=>1,
16
+ "indent"=>1,
17
+ "item_order"=>1,
18
+ "labels" => [],
19
+ "day_order"=>-1,
20
+ "collapsed" => 0,
21
+ "assigned_by_uid"=>1855589,
22
+ "checked"=>0,
23
+ "in_history"=>0,
24
+ "is_deleted"=>0,
25
+ "is_archived"=>0
26
+ }
27
+ )
28
+ end
29
+
30
+ it "can be assigned a project" do
31
+ instance.project = Todoist::Project.new({'id' => 1})
32
+ expect(instance.project_id).to eq 1
33
+ end
34
+
35
+ it "can be assigned a user" do
36
+ instance.user = Todoist::User.new({'id' => 1})
37
+ expect(instance.user_id).to eq 1
38
+ end
39
+ end
@@ -0,0 +1,12 @@
1
+ require "spec_helper"
2
+
3
+ describe Todoist::Label do
4
+
5
+
6
+ it "can be built from json" do
7
+ instance = described_class.new(json_response('label'))
8
+
9
+ expect(instance.attributes).to eq({"id"=>790748, "uid"=>1855589, "name"=>"Label1", "color"=>7, "item_order"=>0, "is_deleted"=>0}
10
+ )
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ require "spec_helper"
2
+
3
+ describe Todoist::Note do
4
+
5
+
6
+ it "can be built from json" do
7
+ instance = described_class.new(json_response('note'))
8
+
9
+ expect(instance.attributes).to eq({"id"=>17299568, "item_id"=>33548400, "posted_uid"=>1855589, "project_id"=>128501470, "content"=>"Note", "is_deleted"=>0, "is_archived"=>0, "file_attachment"=>{"file_type"=>"text/plain", "file_name"=>"File1.txt", "file_size"=>1234, "file_url"=>"https://example.com/File1.txt", "upload_state"=>"completed"}, "posted"=>"Wed 01 Oct 2014 14:54:55 +0000"}
10
+ )
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ require "spec_helper"
2
+
3
+ describe Todoist::Project do
4
+
5
+
6
+ it "can be built from json" do
7
+ instance = described_class.new(json_response('project'))
8
+
9
+ expect(instance.attributes).to eq({"id"=>128501470, "user_id"=>1855589, "name"=>"Project1", "color"=>1, "indent"=>1, "item_order"=>36, "collapsed"=>0, "shared"=>false, "is_deleted"=>0, "is_archived"=>0, "archived_timestamp"=>0}
10
+ )
11
+ end
12
+ end
@@ -0,0 +1,26 @@
1
+ require "spec_helper"
2
+
3
+ describe Todoist::Query do
4
+
5
+ let(:client) { Todoist::Client.new("api_token") }
6
+ let(:query) { described_class.new(client) }
7
+
8
+ describe "creating a query" do
9
+ let(:arguments) { resource_without_id('filter') }
10
+
11
+ before do
12
+ stub_request(:post, "https://todoist.com/API/v6/query").
13
+ with(:body => {"queries"=>"[\"tomorrow\",\"p1\"]", "token"=>"api_token"}).
14
+ to_return(:status => 200, :body => json_response_raw('query'), :headers => {})
15
+ end
16
+
17
+ it "can create searches" do
18
+
19
+ result = query.search(['tomorrow', 'p1'])
20
+
21
+ expect(result.keys).to eq ['tomorrow','p1']
22
+ expect(result['tomorrow'].size).to eq 2
23
+ expect(result['tomorrow'].first.id).to eq 35825425
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,12 @@
1
+ require "spec_helper"
2
+
3
+ describe Todoist::Reminder do
4
+
5
+
6
+ it "can be built from json" do
7
+ instance = described_class.new(json_response('reminder'))
8
+
9
+ expect(instance.attributes).to eq({"id"=>4638878, "user_id"=>1855589, "name"=>"Priority 1", "query"=>"priority 1", "color"=>6, "item_order"=>3, "is_deleted"=>0}
10
+ )
11
+ end
12
+ end
@@ -0,0 +1,33 @@
1
+ require "spec_helper"
2
+
3
+ describe Todoist::Service::Filter do
4
+
5
+ let(:client) { Todoist::Client.new("api_token") }
6
+ let(:filter_service) { described_class.new(client) }
7
+
8
+ describe "creating a filter" do
9
+ let(:arguments) { resource_without_id('filter') }
10
+
11
+ it "can create a filter" do
12
+ expect{
13
+ filter_service.create(arguments)
14
+ }.to change{ client.queue.length}.by(+1)
15
+
16
+ expect(client.queue.last.type).to eq 'filter_add'
17
+ expect(client.queue.last.arguments).to eq arguments
18
+ end
19
+
20
+ it "create a filter with custom tmp id" do
21
+ expect{
22
+ filter_service.create(arguments, 'temporary id')
23
+ }.to change{ client.queue.length}.by(+1)
24
+
25
+ expect(client.queue.last.temp_id).to eq 'temporary id'
26
+ end
27
+
28
+ it "returns an filter" do
29
+ filter = filter_service.create(arguments, 'temporary id')
30
+ expect(filter.to_submittable_hash).to eq(arguments)
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,46 @@
1
+ require "spec_helper"
2
+
3
+ describe Todoist::Service::Item do
4
+
5
+ let(:client) { Todoist::Client.new("api_token") }
6
+ let(:item_service) { described_class.new(client) }
7
+
8
+ describe "creating an item" do
9
+ let(:arguments) { resource_without_id('item') }
10
+
11
+ it "can create an item" do
12
+ expect{
13
+ item = item_service.create(arguments)
14
+ }.to change{ client.queue.length}.by(+1)
15
+
16
+ expect(client.queue.last.type).to eq 'item_add'
17
+ expect(client.queue.last.arguments).to eq arguments
18
+ end
19
+
20
+ it "create an item with custom tmp id" do
21
+ expect{
22
+ item_service.create(arguments, 'temporary id')
23
+ }.to change{ client.queue.length}.by(+1)
24
+
25
+ expect(client.queue.last.temp_id).to eq 'temporary id'
26
+ end
27
+
28
+ it "returns an item" do
29
+ item = item_service.create(arguments, 'temporary id')
30
+ expect(item.to_submittable_hash).to eq(arguments)
31
+ end
32
+ end
33
+
34
+ describe "updating an item" do
35
+ let(:arguments) { json_response('item') }
36
+
37
+ it "can update an item" do
38
+ expect{
39
+ item = item_service.create(arguments)
40
+ }.to change{ client.queue.length}.by(+1)
41
+
42
+ expect(client.queue.last.type).to eq 'item_update'
43
+ expect(client.queue.last.arguments).to eq arguments
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,33 @@
1
+ require "spec_helper"
2
+
3
+ describe Todoist::Service::Label do
4
+
5
+ let(:client) { Todoist::Client.new("api_token") }
6
+ let(:label_service) { described_class.new(client) }
7
+
8
+ describe "creating an item" do
9
+ let(:arguments) { resource_without_id('label') }
10
+
11
+ it "can create an item" do
12
+ expect{
13
+ label_service.create(arguments)
14
+ }.to change{ client.queue.length}.by(+1)
15
+
16
+ expect(client.queue.last.type).to eq 'label_add'
17
+ expect(client.queue.last.arguments).to eq arguments
18
+ end
19
+
20
+ it "create an item with custom tmp id" do
21
+ expect{
22
+ label_service.create(arguments, 'temporary id')
23
+ }.to change{ client.queue.length}.by(+1)
24
+
25
+ expect(client.queue.last.temp_id).to eq 'temporary id'
26
+ end
27
+
28
+ it "returns an label" do
29
+ label = label_service.create(arguments, 'temporary id')
30
+ expect(label.to_submittable_hash).to eq(arguments)
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,33 @@
1
+ require "spec_helper"
2
+
3
+ describe Todoist::Service::Note do
4
+
5
+ let(:client) { Todoist::Client.new("api_token") }
6
+ let(:note_service) { described_class.new(client) }
7
+
8
+ describe "creating a note" do
9
+ let(:arguments) { resource_without_id('note')}
10
+
11
+ it "can create a note" do
12
+ expect{
13
+ note_service.create(arguments)
14
+ }.to change{ client.queue.length}.by(+1)
15
+
16
+ expect(client.queue.last.type).to eq 'note_add'
17
+ expect(client.queue.last.arguments).to eq arguments
18
+ end
19
+
20
+ it "create a note with custom tmp id" do
21
+ expect{
22
+ note_service.create(arguments, 'temporary id')
23
+ }.to change{ client.queue.length}.by(+1)
24
+
25
+ expect(client.queue.last.temp_id).to eq 'temporary id'
26
+ end
27
+
28
+ it "returns an note" do
29
+ note = note_service.create(arguments, 'temporary id')
30
+ expect(note.to_submittable_hash).to eq(arguments)
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,33 @@
1
+ require "spec_helper"
2
+
3
+ describe Todoist::Service::Project do
4
+
5
+ let(:client) { Todoist::Client.new("api_token") }
6
+ let(:project_service) { described_class.new(client) }
7
+
8
+ describe "creating a project" do
9
+ let(:arguments) { resource_without_id('project') }
10
+
11
+ it "can create an project" do
12
+ expect{
13
+ project_service.create(arguments)
14
+ }.to change{ client.queue.length}.by(+1)
15
+
16
+ expect(client.queue.last.type).to eq 'project_add'
17
+ expect(client.queue.last.arguments).to eq arguments
18
+ end
19
+
20
+ it "can create an project with custom tmp id" do
21
+ expect{
22
+ project_service.create(arguments, 'temporary id')
23
+ }.to change{ client.queue.length}.by(+1)
24
+
25
+ expect(client.queue.last.temp_id).to eq 'temporary id'
26
+ end
27
+
28
+ it "returns an project" do
29
+ project = project_service.create(arguments, 'temporary id')
30
+ expect(project.to_submittable_hash).to eq(arguments)
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,33 @@
1
+ require "spec_helper"
2
+
3
+ describe Todoist::Service::Reminder do
4
+
5
+ let(:client) { Todoist::Client.new("api_token") }
6
+ let(:reminder_service) { described_class.new(client) }
7
+
8
+ describe "creating a reminder" do
9
+ let(:arguments) { resource_without_id('reminder') }
10
+
11
+ it "can create a reminder" do
12
+ expect{
13
+ reminder_service.create(arguments)
14
+ }.to change{ client.queue.length}.by(+1)
15
+
16
+ expect(client.queue.last.type).to eq 'reminder_add'
17
+ expect(client.queue.last.arguments).to eq arguments
18
+ end
19
+
20
+ it "create a reminder with custom tmp id" do
21
+ expect{
22
+ reminder_service.create(arguments, 'temporary id')
23
+ }.to change{ client.queue.length}.by(+1)
24
+
25
+ expect(client.queue.last.temp_id).to eq 'temporary id'
26
+ end
27
+
28
+ it "returns an reminder" do
29
+ reminder = reminder_service.create(arguments, 'temporary id')
30
+ expect(reminder.to_submittable_hash).to eq(arguments)
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,7 @@
1
+ require "spec_helper"
2
+
3
+ describe Todoist do
4
+ it "has a version number" do
5
+ expect(Todoist::VERSION).to_not be_nil
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ require 'webmock/rspec'
2
+ require 'todoist'
3
+
4
+ require_relative "support/json_response_helper"
5
+
6
+ RSpec.configure do |config|
7
+ config.include JsonResponseHelper
8
+ end
@@ -0,0 +1,17 @@
1
+ module JsonResponseHelper
2
+ def json_filename(name)
3
+ File.join('spec/support/responses/', "#{name}.json")
4
+ end
5
+
6
+ def json_response_raw(name)
7
+ File.read(json_filename(name))
8
+ end
9
+
10
+ def json_response(name)
11
+ JSON.parse(json_response_raw(name)).delete_if { |k, v| v.nil? }
12
+ end
13
+
14
+ def resource_without_id(name)
15
+ json_response(name).delete_if { |k, v| k == 'id' }
16
+ end
17
+ end
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 4638878,
3
+ "user_id": 1855589,
4
+ "name": "Priority 1",
5
+ "query": "priority 1",
6
+ "color": 6,
7
+ "item_order": 3,
8
+ "is_deleted": 0
9
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "id": 33511505,
3
+ "user_id": 1855589,
4
+ "project_id": 128501470,
5
+ "content": "Task1",
6
+ "date_string": "",
7
+ "date_lang": "en",
8
+ "due_date_utc": null,
9
+ "due_date": null,
10
+ "indent": 1,
11
+ "priority": 1,
12
+ "item_order": 1,
13
+ "day_order": -1,
14
+ "collapsed": 0,
15
+ "children": null,
16
+ "labels": [],
17
+ "assigned_by_uid": 1855589,
18
+ "responsible_uid": null,
19
+ "checked": 0,
20
+ "in_history": 0,
21
+ "is_deleted": 0,
22
+ "is_archived": 0,
23
+ "sync_id": null,
24
+ "date_added": "Fri 26 Sep 2014 08:25:05 +0000"
25
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": 790748,
3
+ "uid": 1855589,
4
+ "name": "Label1",
5
+ "color": 7,
6
+ "item_order": 0,
7
+ "is_deleted": 0
8
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "id": 17299568,
3
+ "posted_uid": 1855589,
4
+ "project_id": 128501470,
5
+ "item_id": 33548400,
6
+ "content": "Note",
7
+ "file_attachment": {
8
+ "file_type": "text/plain",
9
+ "file_name": "File1.txt",
10
+ "file_size": 1234,
11
+ "file_url": "https://example.com/File1.txt",
12
+ "upload_state": "completed"
13
+ },
14
+ "uids_to_notify": null,
15
+ "is_deleted": 0,
16
+ "is_archived": 0,
17
+ "posted": "Wed 01 Oct 2014 14:54:55 +0000"
18
+ }