wunderlist-api 0.7.1 → 1.0.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cec87e89349284cb7aaf0030cb03698244151e02
4
- data.tar.gz: 92f8e75f79f54437d2c6b41497e98a422bec73a4
3
+ metadata.gz: 00ba2e358c15f7a1358da190aca1a8703ee8c561
4
+ data.tar.gz: 28c243c448adb4996edf3b76b01664096a23abf1
5
5
  SHA512:
6
- metadata.gz: b3c1cf1b7a9e3d65c290bd150efebfc5e0c953de42060e803a9271d132236cc58792c0c9a64cef8f3d9be9f7380f585d955e7cc9f17bfaebe4164033d1a2996d
7
- data.tar.gz: fdb140305b6a8f5a380af6205bb17520f0cd4a32081d04d7cb6f07c4ebff1e5c353305eca8d2d9348dfbec0e25ae050bcd084d7a3d9bbffb284994c5b6ad8b0b
6
+ metadata.gz: b5d2231a4d1165ed84d510ac81e92e1b94530c82ca4038784355071af5459d2b32fab6e6be61dd5083e74d1aa160883058983924c9c9d5d23bfecf5f22d9e1dc
7
+ data.tar.gz: ac6d830580990d4e703ca862805fa810c448861e9186892d0a850dfaf13d9958b700d14103904acba2d51749ba5fa4079b03f4997dd97fdccb2dcb546509faeb
data/Gemfile CHANGED
@@ -2,6 +2,3 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in wunderlist-api.gemspec
4
4
  gemspec
5
-
6
- gem 'faraday', '~> 0.9.1'
7
- gem 'activesupport', '~> 4.0.0'
@@ -1,6 +1,8 @@
1
- require "wunderlist/version"
2
- require "wunderlist/task"
3
1
  require "wunderlist/list"
2
+ require "wunderlist/task"
3
+ require "wunderlist/user"
4
+ require "wunderlist/webhook"
5
+ require "wunderlist/version"
4
6
  require 'faraday'
5
7
  require 'json'
6
8
 
@@ -10,23 +12,26 @@ module Wunderlist
10
12
  attr_reader :access_token
11
13
  attr_reader :client_id
12
14
 
15
+ attr_accessor :conn
16
+
13
17
  API_URL = "https://a.wunderlist.com"
14
18
 
15
19
  def initialize(options = {})
16
- @conn = Faraday::Connection.new(:url => API_URL) do |builder|
20
+ @access_token = options[:access_token]
21
+ @client_id = options[:client_id]
22
+ end
23
+
24
+ def conn
25
+ @conn ||= Faraday::Connection.new(:url => API_URL) do |builder|
17
26
  builder.use Faraday::Request::UrlEncoded
18
27
  builder.use Faraday::Adapter::NetHttp
19
28
  end
20
- @access_token = options[:access_token]
21
- @client_id = options[:client_id]
22
29
  end
23
30
 
24
31
  def new_list(list_name)
25
32
  list = Wunderlist::List.new('title' => list_name)
26
33
  list.api = self
27
-
28
34
  list
29
-
30
35
  end
31
36
 
32
37
  def list(list_name)
@@ -53,6 +58,17 @@ module Wunderlist
53
58
 
54
59
  end
55
60
 
61
+ def webhooks(list_name)
62
+ list_id = get_list_ids([list_name]).first
63
+
64
+ res_webhooks = self.request :get, 'api/v1/webhooks', { :list_id => list_id }
65
+ res_webhooks.reduce([]) do |webhooks, webhook|
66
+ webhook = Wunderlist::Webhook.new(webhook)
67
+ webhook.api = self
68
+ webhooks << webhook
69
+ end
70
+ end
71
+
56
72
  def tasks(list_names = [], completed = false)
57
73
  list_ids = get_list_ids(list_names)
58
74
  tasks = []
@@ -71,6 +87,15 @@ module Wunderlist
71
87
 
72
88
  end
73
89
 
90
+
91
+ def user()
92
+ res_user = self.request :get, 'api/v1/user'
93
+ user = Wunderlist::User.new(res_user)
94
+ user.api = self
95
+
96
+ user
97
+ end
98
+
74
99
  def new_task(list_name, attrs = {})
75
100
  attrs.stringify_keys
76
101
  list_name = [list_name]
@@ -83,6 +108,18 @@ module Wunderlist
83
108
 
84
109
  end
85
110
 
111
+ def new_webhook(list_name, attrs = {})
112
+ attrs.stringify_keys
113
+ list_name = [list_name]
114
+ list_id = get_list_ids(list_name)[0]
115
+ attrs['list_id'] = list_id
116
+ task = Wunderlist::Webhook.new(attrs)
117
+ task.api = self
118
+
119
+ task
120
+
121
+ end
122
+
86
123
  def request(method, url, options = {})
87
124
  case method
88
125
  when :get then self.get(url, options)
@@ -94,7 +131,7 @@ module Wunderlist
94
131
 
95
132
  def get(url, options = {})
96
133
 
97
- response = @conn.get do |req|
134
+ response = conn.get do |req|
98
135
  req.url url
99
136
  if options
100
137
  options.each do |k, v|
@@ -113,13 +150,13 @@ module Wunderlist
113
150
 
114
151
  def post(url, options = {})
115
152
 
116
- response = @conn.post do |req|
153
+ response = conn.post do |req|
117
154
  req.url url
118
155
  req.body = options.to_json
119
156
  req.headers = {
120
157
  'X-Access-Token' => self.access_token,
121
158
  'X-Client-ID' => self.client_id,
122
- 'Content-Type' => 'text/json',
159
+ 'Content-Type' => 'application/json',
123
160
  'Content-Encoding' => 'UTF-8'
124
161
  }
125
162
  end
@@ -129,13 +166,13 @@ module Wunderlist
129
166
 
130
167
  def put(url, options = {})
131
168
 
132
- response = @conn.put do |req|
169
+ response = conn.put do |req|
133
170
  req.url url
134
171
  req.body = options.to_json
135
172
  req.headers = {
136
173
  'X-Access-Token' => self.access_token,
137
174
  'X-Client-ID' => self.client_id,
138
- 'Content-Type' => 'text/json',
175
+ 'Content-Type' => 'application/json',
139
176
  'Content-Encoding' => 'UTF-8'
140
177
  }
141
178
  end
@@ -145,7 +182,7 @@ module Wunderlist
145
182
 
146
183
  def delete(url, options = {})
147
184
 
148
- response = @conn.delete do |req|
185
+ response = conn.delete do |req|
149
186
  req.url url
150
187
  req.params[:revision] = options[:revision]
151
188
  req.headers = {
@@ -1,27 +1,27 @@
1
1
  module Wunderlist
2
2
  module Helper
3
3
 
4
- require 'active_support/inflector'
5
-
6
4
  def to_hash
7
5
  i_vs = self.instance_variables
8
6
  i_vs.delete_if {|i_v| i_v.to_s == '@api'}
9
7
  hash = {}
10
- i_vs.each {|var| hash[var.to_s.delete("@")] = self.instance_variable_get(var) }
8
+ i_vs.each {|var| hash[var.to_s.delete("@")] = self.instance_variable_get(var) }
11
9
 
12
10
  hash
13
11
 
14
12
  end
15
13
 
16
14
  def update
17
- model_name = get_plural_model_name
18
- self.api.request :put, "api/v1/#{model_name}/#{self.id}", self.to_hash
15
+ self.api.request :put, resource_path, self.to_hash
16
+ end
17
+
18
+ def create
19
+ self.api.request :post, path, self.to_hash
19
20
  end
20
-
21
+
21
22
  def save
22
- model_name = get_plural_model_name
23
23
  if self.id.nil?
24
- res = self.api.request :post, "api/v1/#{model_name}", self.to_hash
24
+ res = self.create
25
25
  else
26
26
  res = self.update
27
27
  end
@@ -29,20 +29,30 @@ module Wunderlist
29
29
  end
30
30
 
31
31
  def destroy
32
- model_name = get_plural_model_name
33
- self.api.request :delete, "api/v1/#{model_name}/#{self.id}", {:revision => self.revision}
32
+ self.api.request :delete, resource_path, {:revision => self.revision}
34
33
  self.id = nil
35
34
 
36
35
  self
36
+ end
37
37
 
38
+ def resource_path
39
+ "api/v1/#{plural_model_name}/#{self.id}"
38
40
  end
39
41
 
40
- private
42
+ def path
43
+ "api/v1/#{plural_model_name}"
44
+ end
41
45
 
42
- def get_plural_model_name
43
- self.class.to_s.gsub('Wunderlist::','').tableize
46
+ def model_name
47
+ self.class.to_s.gsub('Wunderlist::','').
48
+ gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
49
+ gsub(/([a-z])([A-Z])/, '\1_\2').
50
+ downcase
44
51
  end
45
52
 
53
+ def plural_model_name
54
+ "#{model_name}s"
55
+ end
46
56
  end
47
57
  end
48
58
 
@@ -23,6 +23,9 @@ module Wunderlist
23
23
  self.api.tasks([self.title], completed)
24
24
  end
25
25
 
26
+ def webhooks
27
+ self.api.webhooks(self.title)
28
+ end
26
29
  private
27
30
 
28
31
  def set_attrs(attrs = {})
@@ -9,7 +9,7 @@ module Wunderlist
9
9
 
10
10
  include Wunderlist::Helper
11
11
 
12
- attr_accessor :api, :title, :assignee_id, :completed, :revision, :recurrence_type, :recurrence_count, :due_date, :starred, :id, :list_id, :created_at
12
+ attr_accessor :api, :title, :assignee_id, :completed, :revision, :recurrence_type, :recurrence_count, :due_date, :starred, :id, :list_id, :created_at, :completed_at, :completed_by_id
13
13
 
14
14
  def initialize(attrs = {})
15
15
  @api = attrs['api']
@@ -19,6 +19,8 @@ module Wunderlist
19
19
  @revision = attrs['revision']
20
20
  @assignee_id = attrs['assignee_id']
21
21
  @completed = attrs['completed']
22
+ @completed_at = attrs['completed_at']
23
+ @completed_by_id = attrs['completed_by_id']
22
24
  @recurrence_type = attrs['recurrence_type']
23
25
  @recurrence_count = attrs['recurrence_count']
24
26
  @due_date = attrs['due_date']
@@ -0,0 +1,16 @@
1
+ module Wunderlist
2
+ class User
3
+
4
+ include Wunderlist::Helper
5
+
6
+ attr_accessor :api, :id, :name, :email, :created_at
7
+
8
+ def initialize(attrs = {})
9
+ @id = attrs['id']
10
+ @name = attrs['name']
11
+ @email = attrs['email']
12
+ @created_at = attrs['created_at']
13
+ end
14
+
15
+ end
16
+ end
@@ -1,3 +1,3 @@
1
1
  module Wunderlist
2
- VERSION = "0.7.1"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -0,0 +1,26 @@
1
+ module Wunderlist
2
+ class Webhook
3
+
4
+ include Wunderlist::Helper
5
+
6
+ attr_accessor :api, :id, :list_id, :created_by_id, :processor_type, :url, :configuration, :created_at
7
+
8
+ def initialize(attrs = {})
9
+ @id = attrs['id']
10
+ @list_id = attrs['list_id']
11
+ @created_by_id = attrs['created_by_id']
12
+ @processor_type = attrs['processor_type']
13
+ @url = attrs['url']
14
+ @created_at = attrs['created_at']
15
+ @configuration = attrs['configuration']
16
+ end
17
+
18
+ def destroy
19
+ # Seems no revision id is needed, contrary to documentation
20
+ self.api.request :delete, resource_path
21
+ self.id = nil
22
+
23
+ self
24
+ end
25
+ end
26
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,2 +1,2 @@
1
1
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
- require 'wunderlist/api'
2
+ require 'wunderlist'
@@ -1,11 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Wunderlist::Api do
3
+ describe Wunderlist::API do
4
4
  it 'should have a version number' do
5
- Wunderlist::Api::VERSION.should_not be_nil
6
- end
7
-
8
- it 'should do something useful' do
9
- false.should eq(true)
5
+ expect(Wunderlist::VERSION).to_not be_nil
10
6
  end
11
7
  end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe Wunderlist::List do
4
+ let(:list) { described_class.new }
5
+
6
+ describe "a list" do
7
+ it "has a model name" do
8
+ expect(list.model_name).to eq 'list'
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe Wunderlist::Note do
4
+ let(:note) { described_class.new }
5
+
6
+ describe "a note" do
7
+ it "has a model name" do
8
+ expect(note.model_name).to eq 'note'
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe Wunderlist::Reminder do
4
+ let(:reminder) { described_class.new }
5
+
6
+ describe "a reminder" do
7
+ it "has a model name" do
8
+ expect(reminder.model_name).to eq 'reminder'
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe Wunderlist::Subtask do
4
+ let(:subtask) { described_class.new }
5
+
6
+ describe "a subtask" do
7
+ it "has a model name" do
8
+ expect(subtask.model_name).to eq 'subtask'
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe Wunderlist::TaskComment do
4
+ let(:task_comment) { described_class.new }
5
+
6
+ describe "a task_comment" do
7
+ it "has a model name" do
8
+ expect(task_comment.model_name).to eq 'task_comment'
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe Wunderlist::Task do
4
+ let(:api) { Wunderlist::API.new }
5
+ let(:task) { described_class.new }
6
+
7
+ describe "a task" do
8
+ it 'has a hash representation' do
9
+ expect(task.to_hash.keys).to include(*%w(
10
+ id
11
+ list_id
12
+ title
13
+ revision
14
+ assignee_id
15
+ completed
16
+ completed_at
17
+ completed_by_id
18
+ recurrence_type
19
+ recurrence_count
20
+ due_date
21
+ starred
22
+ )
23
+ )
24
+ end
25
+
26
+ it "has a model name" do
27
+ expect(task.model_name).to eq 'task'
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe Wunderlist::Webhook do
4
+ let(:api) { Wunderlist::API.new }
5
+ let(:webhook) { described_class.new }
6
+
7
+ describe "a webhook" do
8
+ it 'has a hash representation' do
9
+ expect(webhook.to_hash.keys).to include(*%w(
10
+ id
11
+ list_id
12
+ created_by_id
13
+ processor_type
14
+ url
15
+ created_at
16
+ configuration
17
+ )
18
+ )
19
+ end
20
+
21
+ it "has a model name" do
22
+ expect(webhook.model_name).to eq 'webhook'
23
+ end
24
+ end
25
+ end
@@ -21,6 +21,5 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "bundler", "~> 1.5"
22
22
  spec.add_development_dependency "rake"
23
23
  spec.add_development_dependency "rspec"
24
- spec.add_dependency "activesupport", "~> 4.0.0"
25
24
  spec.add_dependency 'faraday', '~> 0.9.1'
26
25
  end
metadata CHANGED
@@ -1,83 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wunderlist-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - shun3475
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-22 00:00:00.000000000 Z
11
+ date: 2016-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.5'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.5'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: activesupport
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ~>
60
- - !ruby/object:Gem::Version
61
- version: 4.0.0
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ~>
67
- - !ruby/object:Gem::Version
68
- version: 4.0.0
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: faraday
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
- - - ~>
59
+ - - "~>"
74
60
  - !ruby/object:Gem::Version
75
61
  version: 0.9.1
76
62
  type: :runtime
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
- - - ~>
66
+ - - "~>"
81
67
  - !ruby/object:Gem::Version
82
68
  version: 0.9.1
83
69
  description: You can manage Your Wunderlist Data with Ruby
@@ -87,8 +73,8 @@ executables: []
87
73
  extensions: []
88
74
  extra_rdoc_files: []
89
75
  files:
90
- - .gitignore
91
- - .rspec
76
+ - ".gitignore"
77
+ - ".rspec"
92
78
  - Gemfile
93
79
  - LICENSE.txt
94
80
  - README.md
@@ -102,9 +88,18 @@ files:
102
88
  - lib/wunderlist/subtask.rb
103
89
  - lib/wunderlist/task.rb
104
90
  - lib/wunderlist/task_comment.rb
91
+ - lib/wunderlist/user.rb
105
92
  - lib/wunderlist/version.rb
93
+ - lib/wunderlist/webhook.rb
106
94
  - spec/spec_helper.rb
107
95
  - spec/wunderlist/api_spec.rb
96
+ - spec/wunderlist/list_spec.rb
97
+ - spec/wunderlist/note_spec.rb
98
+ - spec/wunderlist/reminder_spec.rb
99
+ - spec/wunderlist/subtask_spec.rb
100
+ - spec/wunderlist/task_comment_spec.rb
101
+ - spec/wunderlist/task_spec.rb
102
+ - spec/wunderlist/webhook_spec.rb
108
103
  - wunderlist-api.gemspec
109
104
  homepage: https://github.com/shun3475/wunderlist-api
110
105
  licenses:
@@ -116,20 +111,27 @@ require_paths:
116
111
  - lib
117
112
  required_ruby_version: !ruby/object:Gem::Requirement
118
113
  requirements:
119
- - - '>='
114
+ - - ">="
120
115
  - !ruby/object:Gem::Version
121
116
  version: '0'
122
117
  required_rubygems_version: !ruby/object:Gem::Requirement
123
118
  requirements:
124
- - - '>='
119
+ - - ">="
125
120
  - !ruby/object:Gem::Version
126
121
  version: '0'
127
122
  requirements: []
128
123
  rubyforge_project:
129
- rubygems_version: 2.0.14
124
+ rubygems_version: 2.4.5
130
125
  signing_key:
131
126
  specification_version: 4
132
127
  summary: WunderList Ruby API Client.
133
128
  test_files:
134
129
  - spec/spec_helper.rb
135
130
  - spec/wunderlist/api_spec.rb
131
+ - spec/wunderlist/list_spec.rb
132
+ - spec/wunderlist/note_spec.rb
133
+ - spec/wunderlist/reminder_spec.rb
134
+ - spec/wunderlist/subtask_spec.rb
135
+ - spec/wunderlist/task_comment_spec.rb
136
+ - spec/wunderlist/task_spec.rb
137
+ - spec/wunderlist/webhook_spec.rb