Skip to content
This repository was archived by the owner on Oct 21, 2021. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
151 changes: 146 additions & 5 deletions lib/wunderlist/api.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
require "wunderlist/folder"
require "wunderlist/list"
require "wunderlist/task"
require "wunderlist/user"
require "wunderlist/membership"
require "wunderlist/webhook"
require "wunderlist/version"
require 'faraday'
Expand Down Expand Up @@ -28,20 +30,102 @@ def conn
end
end

def new_task(list_name, attrs = {})
attrs.stringify_keys
list_name = [list_name]
list_id = get_list_ids(list_name)[0]
attrs['list_id'] = list_id
task = Wunderlist::Task.new(attrs)
task.api = self

task

end

def new_folder(folder_name, list_names = [])
list_ids = get_list_ids(list_names)
attrs = {'title' => folder_name, 'list_ids' => list_ids}
folder = Wunderlist::Folder.new(attrs)
folder.api = self

folder
end

def new_list(list_name)
list = Wunderlist::List.new('title' => list_name)
list.api = self
list
end

def new_membership(membership_attrs = {})
membership = Wunderlist::Membership.new(membership_attrs)
membership.api = self
membership
end

def members(list_id, status=["accepted"])
res_memberships = self.request :get, "api/v1/memberships"
user_ids = []
res_memberships.each do |f|
if status.include? f["state"]
user_ids << f["user_id"]
end
end
p user_ids
users(user_ids)
end

def accept_membership(membership_id, membership_attrs = {})
self.request :patch, "/api/v1/memberships/#{membership_id}", membership_attrs
end

def folder(folder_name)
folder_name = [folder_name]
folder_ids = get_folder_ids(folder_name)
get_folders_by_ids(folder_ids)[0]

end

def list(list_name)
list_name = [list_name]
list_id = get_list_ids(list_name)[0]
res_list = self.request :get, "api/v1/lists/#{list_id}"
list = Wunderlist::List.new(res_list)
list.api = self
list_ids = get_list_ids(list_name)
get_lists_by_id(list_ids)[0]
end

list
def get_lists_by_ids(list_ids)
lists = []
list_ids.each do |list_id|
res_list = self.request :get, "api/v1/lists/#{list_id}"
list = Wunderlist::List.new(res_list)
list.api = self

lists << list
end
lists
end

def get_folders_by_ids(folder_ids)
folders = []
folder_ids.each do |folder_id|
res_folder = self.request :get, "api/v1/folders/#{folder_id}"
folder = Wunderlist::Folder.new(res_folder)
folder.api = self

folders << folder
end
folders
end

def folders
res_folders = self.request :get, 'api/v1/folders'
folders = []
res_folders.each do |f|
folder = Wunderlist::Folder.new(f)
folder.api = self
folders << folder
end

folders

end

Expand Down Expand Up @@ -87,6 +171,29 @@ def tasks(list_names = [], completed = false)

end

def all_users
res_users = self.request :get, "api/v1/users"
users = []
res_users.each do |u|
user = Wunderlist::User.new(u)
user.api = self
users << user
end
users
end

def users(user_ids)
res_users = self.request :get, "api/v1/users"
users = []
res_users.each do |u|
if user_ids.include? u["id"]
user = Wunderlist::User.new(u)
user.api = self
users << user
end
end
users
end

def user()
res_user = self.request :get, 'api/v1/user'
Expand All @@ -108,6 +215,15 @@ def new_task(list_name, attrs = {})

end

def new_sub_task(attrs = {})
attrs.stringify_keys
sub_task = Wunderlist::Subtask.new(attrs)
sub_task.api = self

sub_task

end

def new_webhook(list_name, attrs = {})
attrs.stringify_keys
list_name = [list_name]
Expand All @@ -125,6 +241,7 @@ def request(method, url, options = {})
when :get then self.get(url, options)
when :post then self.post(url, options)
when :put then self.put(url, options)
when :patch then self.patch(url, options)
when :delete then self.delete(url, options)
end
end
Expand Down Expand Up @@ -180,6 +297,22 @@ def put(url, options = {})
JSON.parse(response.body)
end

def patch(url, options = {})

response = conn.patch do |req|
req.url url
req.body = options.to_json
req.headers = {
'X-Access-Token' => self.access_token,
'X-Client-ID' => self.client_id,
'Content-Type' => 'application/json',
'Content-Encoding' => 'UTF-8'
}
end

JSON.parse(response.body)
end

def delete(url, options = {})

response = conn.delete do |req|
Expand All @@ -206,5 +339,13 @@ def get_list_ids(list_names = [])
lists.map{|list| list.id}
end

def get_folder_ids(folder_names = [])
folders = self.folders
if !folder_names.empty?
folders = folders.select{|elm| folder_names.include?(elm.title)}
end
folders.map{|folder| folder.id}
end

end
end
39 changes: 39 additions & 0 deletions lib/wunderlist/folder.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
require 'wunderlist/helper'

module Wunderlist
class Folder

include Wunderlist::Helper

attr_accessor :id, :title, :api, :created_at, :revision, :list_ids

def initialize(attrs = {})
@api = attrs['api']
@id = attrs['id']
@title = attrs['title']
@created_at = attrs['created_at']
@revision = attrs['revision']
@list_ids = attrs['list_ids']
end

def lists
self.api.get_lists_by_ids(self.list_ids)
end

def webhooks
self.api.webhooks(self.title)
end

private

def set_attrs(attrs = {})
self.api = attrs['api']
self.id = attrs['id']
self.title= attrs['title']
self.created_at = attrs['created_at']
self.revision = attrs['revision']
self.list_ids = attrs['list_ids']
end

end
end
12 changes: 10 additions & 2 deletions lib/wunderlist/list.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,23 @@ def tasks(completed: false)
self.api.tasks([self.title], completed)
end

def members(status=["accepted"])
self.api.members(self.id, status)
end

def new_member(attrs)
attrs["list_id"] = self.id
self.api.new_membership(attrs)
end

def webhooks
self.api.webhooks(self.title)
end
private

def set_attrs(attrs = {})
self.api = attrs['api']
self.id = attrs['id']
self.title= attrs['content']
self.title= attrs['title']
self.created_at = attrs['created_at']
self.revision = attrs['revision']
end
Expand Down
43 changes: 43 additions & 0 deletions lib/wunderlist/membership.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
require 'wunderlist/helper'

module Wunderlist
class Membership

include Wunderlist::Helper

attr_accessor :id, :list_id, :user_id, :state, :muted, :api, :revision, :email

def initialize(attrs = {})
@api = attrs['api']
@id = attrs['id']
@list_id = attrs['list_id']
@user_id = attrs['user_id']
@state = attrs['state']
@muted = attrs['muted']
@revision = attrs['revision']
@email = attrs['email']
end

def webhooks
self.api.webhooks(self.title)
end

def accept
self.state = "accepted"
accept_membership_attrs = {"state" => self.state, "revision" => self.revision}
self.api.accept_membership(self.id, accept_membership_attrs)
end

private

def set_attrs(attrs = {})
self.id = attrs['id']
self.list_id = attrs['list_id']
self.user_id = attrs['user_id']
self.state = attrs['state']
self.muted = attrs['muted']
self.revision = attrs['revision']
end

end
end