todoable_logan 0.0.1

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 (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/todoable_logan.rb +115 -0
  3. metadata +85 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 1c67f92634a59cbd97fe7e3f37c1bd554671dac87398afd07ec805ca37bd2498
4
+ data.tar.gz: e19d6d487f6053a9a76443dedaa42f7b13cf74ecad900cd34b2cc7e4da955b6f
5
+ SHA512:
6
+ metadata.gz: e41ebf2b332e0eed0881e69603a8078de04a19777eef60967b85dbf8b16659137cfd08c9fa7092d36b1a60013ec8efd4027992b9f1ec3cf8d38a17e9284e3612
7
+ data.tar.gz: a18ab198823841fb9ec943bfd22a42e43b1fd3363f3fea916688883b1e99cb320883b51dd65465d7731f36011f5c672c690101acf20881d5cbc979478f92f112
@@ -0,0 +1,115 @@
1
+ require 'rest-client'
2
+ require 'json'
3
+
4
+ class TodoableLogan
5
+ BASE_URL = "http://todoable.teachable.tech/api"
6
+
7
+ def initialize(user, password)
8
+ @user = user
9
+ @password = password
10
+ authenticate()
11
+ end
12
+
13
+ def get_lists
14
+ response = rest("get", "lists")
15
+
16
+ return response["lists"]
17
+ end
18
+
19
+ def create_list(name)
20
+ data = {
21
+ list: {
22
+ name: name
23
+ }
24
+ }
25
+ rest("post", "lists", data)
26
+ end
27
+
28
+ def update_list(list_id, name)
29
+ data = {
30
+ list: {
31
+ name: name
32
+ }
33
+ }
34
+ rest("patch", "lists/#{list_id}", data)
35
+ end
36
+
37
+ def get_list(list_id)
38
+ rest("get", "lists/#{list_id}")
39
+ end
40
+
41
+ def delete_list(list_id)
42
+ rest("delete", "lists/#{list_id}")
43
+
44
+ return true
45
+ end
46
+
47
+ def create_todo_item(name, list_id)
48
+ data = {
49
+ item: {
50
+ name: name
51
+ }
52
+ }
53
+ rest("post", "lists/#{list_id}/items", data)
54
+ end
55
+
56
+ def mark_todo_item_finished(item_id, list_id)
57
+ rest("put", "lists/#{list_id}/items/#{item_id}/finish")
58
+ end
59
+
60
+ def delete_todo_item(item_id, list_id)
61
+ rest("delete", "/lists/#{list_id}/items/#{item_id}")
62
+
63
+ return true
64
+ end
65
+
66
+ private
67
+
68
+ def rest(method, endpoint, data = {})
69
+ if Time.now >= @expires_at
70
+ authenticate()
71
+ end
72
+
73
+ begin
74
+ response = RestClient::Request.execute(
75
+ headers: {
76
+ :authorization => "Token token=\"#{@token}\""
77
+ },
78
+ method: method,
79
+ accept: :json,
80
+ content_type: :json,
81
+ payload: data.to_json,
82
+ url: "#{BASE_URL}/#{endpoint}",
83
+ )
84
+ rescue => e
85
+ return raise "Error making API request. Code: #{e.response.code}. Body: #{e.response.body}"
86
+ end
87
+
88
+ begin
89
+ body = JSON.parse(response.body)
90
+ rescue
91
+ body = response.body
92
+ end
93
+
94
+ return body
95
+ end
96
+
97
+ def authenticate
98
+ begin
99
+ response = RestClient::Request.execute(
100
+ method: :post,
101
+ accept: :json,
102
+ content_type: :json,
103
+ url: "#{BASE_URL}/authenticate",
104
+ user: @user,
105
+ password: @password,
106
+ )
107
+ rescue => e
108
+ return raise "Error authenticating. Code: #{e.response.code}. Body: #{e.response.body}"
109
+ end
110
+ parsed_response = JSON.parse(response)
111
+
112
+ @token = parsed_response['token']
113
+ @expires_at = Time.parse(parsed_response['expires_at'])
114
+ end
115
+ end
metadata ADDED
@@ -0,0 +1,85 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: todoable_logan
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Logan Yu
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-02-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rest-client
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.8.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.8.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: json
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.8.3
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.8.3
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 3.4.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 3.4.0
55
+ description:
56
+ email: yu.logan@gmail.com
57
+ executables: []
58
+ extensions: []
59
+ extra_rdoc_files: []
60
+ files:
61
+ - lib/todoable_logan.rb
62
+ homepage: http://loganyu.com
63
+ licenses:
64
+ - MIT
65
+ metadata: {}
66
+ post_install_message:
67
+ rdoc_options: []
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ required_rubygems_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ requirements: []
81
+ rubygems_version: 3.0.2
82
+ signing_key:
83
+ specification_version: 4
84
+ summary: Wrapper for the Teachable Todoable API
85
+ test_files: []