huginn_todoist_agent 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0ca365adb5f28bda8ef577fa8a4017aab9a6172b
4
- data.tar.gz: d28f19d9cfb515f1ce60a0f20f012d4856fbeb3c
3
+ metadata.gz: 8d8c15f6621a564f83f036dee3c3e979df08d0ee
4
+ data.tar.gz: 9f340be304f7ab80ef1aa3ba0b9fa2e41dd5dc49
5
5
  SHA512:
6
- metadata.gz: 7194225fa429faa9934a4708a7c4195f10c33314535bd7b311020c8b8fcafee621e3c51e9e0a23c7fc5b105a21e9fe9111ea62f7baca1b690bc1ff8cd52a711e
7
- data.tar.gz: da84042d9438f59b6b03dbf199b22da6de4b6e185a8f137614e83e5fc877a2840d831b815d09472f0a55f2eee8b79b04440977c8bcd545071b596e69a7c25eb3
6
+ metadata.gz: bbe20813067886e217031d70d5f88d97bd249231cb00e855dd0c7ec43ed988abda84dd9c6d36be8a4f69b8bbf0c463e0615747172d8443a7013f9fb9390401dd
7
+ data.tar.gz: 52703f25afebc3f72ffdcb138a1405e7f72a30dcf71321a2209a39632dff156f6372b2fafec81fd1ab2f8a06907a0d48f4c25962520d66407e6c98f2878d0bc5
@@ -10,4 +10,5 @@ end
10
10
 
11
11
  #HuginnAgent.load 'huginn_todoist_agent/concerns/my_agent_concern'
12
12
  HuginnAgent.register 'huginn_todoist_agent/todoist_agent'
13
+ HuginnAgent.register 'huginn_todoist_agent/todoist_close_item_agent'
13
14
  HuginnAgent.register 'huginn_todoist_agent/todoist_query_agent'
@@ -0,0 +1,66 @@
1
+ module Agents
2
+ class TodoistCloseItemAgent < Agent
3
+ include FormConfigurable
4
+
5
+ cannot_create_events!
6
+
7
+ gem_dependency_check { defined?(Todoist::Client) }
8
+
9
+ description do
10
+ <<-MD
11
+ The Todoist Close Item Agent closes items on your Todoist.
12
+
13
+ To authenticate you need to either set `api_token` or provide a credential named
14
+ `todoist_api_token` to your Todoist API token. You can find it within the
15
+ Todoist web frontend from "Gear Menu" > Todoist Settings > Account tab.
16
+
17
+ Change `id` to whatever the ID of the item you would want to be closed is. You
18
+ can also route query results from "Todoist Query Agent" to this agent and
19
+ interpolate it using `{{ id }}` to close all items included in the search result.
20
+ MD
21
+ end
22
+
23
+ default_schedule "never"
24
+
25
+ def default_options
26
+ {
27
+ "api_token" => "",
28
+ "id" => "",
29
+ }
30
+ end
31
+
32
+ form_configurable :api_token
33
+ form_configurable :id
34
+
35
+ def working?
36
+ !recent_error_logs?
37
+ end
38
+
39
+ def validate_options
40
+ errors.add(:base, "you need to specify your Todoist API token or provide a credential named todoist_api_token") unless options["api_token"].present? || credential("todoist_api_token").present?
41
+ errors.add(:base, "id must not be empty, use `{{ id }}` if you'd like Huginn to use the id from the incoming event") unless options["id"].present?
42
+ end
43
+
44
+ def check
45
+ log "closing item: #{interpolated["id"]}"
46
+ todoist = Todoist::Client.new(interpolated["api_token"].present? ? interpolated["api_token"] : credential("todoist_api_token"))
47
+ todoist.items.close(interpolated["id"])
48
+ todoist.queue.process!
49
+ end
50
+
51
+ def receive(incoming_events)
52
+ incoming_events.each do |event|
53
+ interpolate_with(event) do
54
+
55
+ log "closing item: #{interpolated["id"]}"
56
+ todoist = Todoist::Client.new(interpolated["api_token"].present? ? interpolated["api_token"] : credential("todoist_api_token"))
57
+ todoist.items.close(interpolated["id"])
58
+ todoist.queue.process!
59
+ end
60
+ end
61
+ end
62
+
63
+ end
64
+ end
65
+
66
+
@@ -25,7 +25,7 @@ describe Agents::TodoistAgent do
25
25
 
26
26
  @expected_token = "some_token_here"
27
27
  @sent_requests = Array.new
28
- stub_request(:post, "https://todoist.com/API/v6/sync").
28
+ stub_request(:post, "https://todoist.com/API/v7/sync").
29
29
  to_return { |request|
30
30
  expect(request.headers["Content-Type"]).to eq("application/x-www-form-urlencoded")
31
31
 
@@ -0,0 +1,82 @@
1
+ require "rails_helper"
2
+ require "huginn_agent/spec_helper"
3
+ require "uri"
4
+
5
+ require_relative "./spec_helper"
6
+
7
+ describe Agents::TodoistCloseItemAgent do
8
+ before(:each) do
9
+ @valid_options = {
10
+ "api_token" => "some_token_here",
11
+ "id" => "1234",
12
+ }
13
+ @checker = Agents::TodoistCloseItemAgent.new(:name => "TodoistCloseItemAgent", :options => @valid_options)
14
+ @checker.user = users(:bob)
15
+ @checker.save!
16
+ end
17
+
18
+ describe "#validate_options" do
19
+ before do
20
+ expect(@checker).to be_valid
21
+ end
22
+
23
+ it "should reject an empty api_token" do
24
+ @checker.options["api_token"] = nil
25
+ expect(@checker).not_to be_valid
26
+ end
27
+
28
+ it "should allow a credential (instead of api_token)" do
29
+ @checker.user.user_credentials.create :credential_name => "todoist_api_token", :credential_value => "some_credential_here"
30
+ @checker.options["api_token"] = nil
31
+ expect(@checker).to be_valid
32
+ end
33
+
34
+ it "should reject an empty id field" do
35
+ @checker.options["id"] = nil
36
+ expect(@checker).not_to be_valid
37
+ end
38
+ end
39
+
40
+ def assert_item_close(item_id)
41
+ expect(WebMock).to have_requested(:post, "https://todoist.com/API/v7/sync").
42
+ with { |request|
43
+ expect(request.headers["Content-Type"]).to eq("application/x-www-form-urlencoded")
44
+
45
+ form_data = URI.decode_www_form(request.body)
46
+ expect(form_data.assoc("token").last).to eq("some_token_here")
47
+
48
+ json_data = ActiveSupport::JSON.decode(form_data.assoc("commands").last)
49
+ expect(json_data.length).to eq(1)
50
+
51
+ expect(json_data[0]["type"]).to eq("item_close")
52
+ expect(json_data[0]["args"]["id"]).to eq(item_id)
53
+ }
54
+ end
55
+
56
+ describe "#check" do
57
+ it "should close the referenced item" do
58
+ stub_request(:post, "https://todoist.com/API/v7/sync").to_return(:status => 200, :body => '{}')
59
+
60
+ @checker.check
61
+ assert_item_close "1234"
62
+ end
63
+
64
+ end
65
+
66
+ describe "#receive" do
67
+ it "should close the referenced item via interpolation" do
68
+ stub_request(:post, "https://todoist.com/API/v7/sync").to_return(:status => 200, :body => '{}')
69
+
70
+ event = Event.new
71
+ event.agent = agents(:bob_weather_agent)
72
+ event.payload = {
73
+ "id" => "2345",
74
+ }
75
+
76
+ @checker.options["id"] = "{{ id }}"
77
+
78
+ @checker.receive([event])
79
+ assert_item_close "2345"
80
+ end
81
+ end
82
+ end
@@ -45,7 +45,7 @@ describe Agents::TodoistQueryAgent do
45
45
 
46
46
  describe "#check" do
47
47
  before :each do
48
- stub_request(:post, "https://todoist.com/API/v6/query").
48
+ stub_request(:post, "https://todoist.com/API/v7/query").
49
49
  with(:body => {"queries" => "[\"overdue\"]", "token" => "some_token_here"}).
50
50
  to_return(:status => 200, :body => json_response_raw("query_overdue"), :headers => {})
51
51
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: huginn_todoist_agent
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Siegl
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-04 00:00:00.000000000 Z
11
+ date: 2018-05-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -53,19 +53,19 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: ruby-todoist-api
56
+ name: ruby-todoist-api-v7
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0.3'
61
+ version: '1.0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0.3'
68
+ version: '1.0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: todoist_querynaut
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -80,8 +80,8 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0.1'
83
- description: The Todoist Agent will create one item on your Todoist for every Huginn
84
- event it receives.
83
+ description: The Todoist Agents allow to create new as well as query and close existing
84
+ items on your Todoist.
85
85
  email:
86
86
  - stesie@brokenpipe.de
87
87
  executables: []
@@ -91,10 +91,12 @@ files:
91
91
  - LICENSE.txt
92
92
  - lib/huginn_todoist_agent.rb
93
93
  - lib/huginn_todoist_agent/todoist_agent.rb
94
+ - lib/huginn_todoist_agent/todoist_close_item_agent.rb
94
95
  - lib/huginn_todoist_agent/todoist_query_agent.rb
95
96
  - spec/fixtures/query_overdue.json
96
97
  - spec/spec_helper.rb
97
98
  - spec/todoist_agent_spec.rb
99
+ - spec/todoist_close_item_agent_spec.rb
98
100
  - spec/todoist_query_agent_spec.rb
99
101
  homepage: https://github.com/stesie/huginn_todoist_agent
100
102
  licenses:
@@ -116,12 +118,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
116
118
  version: '0'
117
119
  requirements: []
118
120
  rubyforge_project:
119
- rubygems_version: 2.5.1
121
+ rubygems_version: 2.5.2.1
120
122
  signing_key:
121
123
  specification_version: 4
122
- summary: Huginn agent to add items to your Todoist.
124
+ summary: Huginn agent to add, query and close items on your Todoist.
123
125
  test_files:
124
126
  - spec/fixtures/query_overdue.json
125
- - spec/todoist_agent_spec.rb
126
- - spec/todoist_query_agent_spec.rb
127
127
  - spec/spec_helper.rb
128
+ - spec/todoist_query_agent_spec.rb
129
+ - spec/todoist_close_item_agent_spec.rb
130
+ - spec/todoist_agent_spec.rb