manatoo 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.
- checksums.yaml +7 -0
- data/lib/manatoo.rb +55 -0
- data/lib/manatoo/task.rb +167 -0
- metadata +88 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 6ffdb7e9993e05645fa9ecef214cca0c6d592bf3
|
4
|
+
data.tar.gz: 322c2bb82014d524d2ab2665152e6c9cafbc7615
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b4da24fd572a88f2cd633a044b8023b394dd1004612555af630a6538b62522276b84f0cfbd9b877a7ffd9c0d5066609c60509baa682265219c1dbe57b2887a96
|
7
|
+
data.tar.gz: cc7235a035633911b20a82e0419fddc6d144cbe47e3e0b8a3c622575b07ccad9e3ffc0e584ef16b6d294291b5b0f121a28b259ec47a3a9b215010b006b58daad
|
data/lib/manatoo.rb
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'base64'
|
2
|
+
require 'faraday'
|
3
|
+
|
4
|
+
require 'manatoo/task'
|
5
|
+
|
6
|
+
module Manatoo
|
7
|
+
@api_base = 'https://manatoo.io/api'
|
8
|
+
@api_key = nil
|
9
|
+
|
10
|
+
class ApiKeyError < StandardError
|
11
|
+
def initialize
|
12
|
+
super('Missing Manatoo API KEY')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class << self
|
17
|
+
attr_accessor :api_key, :api_base
|
18
|
+
attr_reader :last_response_json
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.conn
|
22
|
+
raise ApiKeyError.new if self.api_key.nil?
|
23
|
+
|
24
|
+
Faraday.new(self.api_base) do |conn|
|
25
|
+
conn.basic_auth(self.api_key, '')
|
26
|
+
conn.adapter(Faraday.default_adapter)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.get(url)
|
31
|
+
self.conn.get do |req|
|
32
|
+
req.url(url)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.request_with_payload(action, url, payload)
|
37
|
+
self.conn.send(action) do |req|
|
38
|
+
req.url(url)
|
39
|
+
req.headers['Content-Type'] = 'application/json'
|
40
|
+
req.body = payload.to_json
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.post(url, payload)
|
45
|
+
self.request_with_payload(:post, url, payload)
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.put(url, payload)
|
49
|
+
self.request_with_payload(:put, url, payload)
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.delete(url, payload)
|
53
|
+
self.request_with_payload(:delete, url, payload)
|
54
|
+
end
|
55
|
+
end
|
data/lib/manatoo/task.rb
ADDED
@@ -0,0 +1,167 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
require 'json'
|
3
|
+
require 'plissken'
|
4
|
+
|
5
|
+
module Manatoo
|
6
|
+
class Task
|
7
|
+
extend Forwardable
|
8
|
+
|
9
|
+
TASK_KEYS = [
|
10
|
+
:id,
|
11
|
+
:title,
|
12
|
+
:data,
|
13
|
+
:description,
|
14
|
+
:slug,
|
15
|
+
:status,
|
16
|
+
:weight,
|
17
|
+
:duration,
|
18
|
+
:labels,
|
19
|
+
:finished_at,
|
20
|
+
:created_at,
|
21
|
+
:due_at,
|
22
|
+
:started_at,
|
23
|
+
:list_id,
|
24
|
+
:users,
|
25
|
+
]
|
26
|
+
|
27
|
+
ATTRIBUTES_STRUCT = Struct.new(*TASK_KEYS)
|
28
|
+
|
29
|
+
attr_reader :attributes, :last_json_response
|
30
|
+
delegate TASK_KEYS => :attributes
|
31
|
+
|
32
|
+
def handle_snake_cased_json(snake_cased_json)
|
33
|
+
# if a user wanted the last_response_json, I assume they would want it
|
34
|
+
# in a snake_cased ruby usable fashion
|
35
|
+
@last_json_response = snake_cased_json
|
36
|
+
task_attrs = @last_json_response['data']
|
37
|
+
set_attributes_from_hash(task_attrs)
|
38
|
+
self
|
39
|
+
end
|
40
|
+
|
41
|
+
def set_attributes_from_hash(hash)
|
42
|
+
hash.each do |k, v|
|
43
|
+
attributes[k] = v
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# list_id, title REQUIRED
|
48
|
+
def self.create(attrs, return_task=false)
|
49
|
+
raise ArgumentError.new('Task attributes must be passed in as a Hash') unless attrs.is_a?(Hash)
|
50
|
+
|
51
|
+
list_id = attrs[:list_id]
|
52
|
+
title = attrs[:title]
|
53
|
+
raise ArgumentError.new(
|
54
|
+
'Both list_id and title must be passed in and not blank'
|
55
|
+
) if list_id.nil? or list_id.empty? or title.nil? or title.empty?
|
56
|
+
|
57
|
+
url = "tasks"
|
58
|
+
resp = Manatoo.post(url, attrs.merge({
|
59
|
+
title: title,
|
60
|
+
list_id: list_id,
|
61
|
+
}))
|
62
|
+
snake_cased_json = JSON.parse(resp.body).to_snake_keys
|
63
|
+
attrs = snake_cased_json['data']
|
64
|
+
return Task.new(attrs, snake_cased_json) if return_task
|
65
|
+
return snake_cased_json
|
66
|
+
end
|
67
|
+
|
68
|
+
# task_id REQUIRED
|
69
|
+
def self.find(task_id, return_task=false)
|
70
|
+
url = "tasks/#{task_id}"
|
71
|
+
resp = Manatoo.get(url)
|
72
|
+
snake_cased_json = JSON.parse(resp.body).to_snake_keys
|
73
|
+
attrs = snake_cased_json['data']
|
74
|
+
return Task.new(attrs, snake_cased_json) if return_task
|
75
|
+
return snake_cased_json
|
76
|
+
end
|
77
|
+
|
78
|
+
def initialize(data, snake_cased_json)
|
79
|
+
@attributes = ATTRIBUTES_STRUCT.new
|
80
|
+
set_attributes_from_hash(data)
|
81
|
+
@last_json_response = snake_cased_json
|
82
|
+
self
|
83
|
+
end
|
84
|
+
|
85
|
+
# task_id REQUIRED
|
86
|
+
def self.update(task_id, attrs)
|
87
|
+
url = "tasks/#{task_id}"
|
88
|
+
resp = Manatoo.put(url, attrs)
|
89
|
+
JSON.parse(resp.body).to_snake_keys
|
90
|
+
end
|
91
|
+
|
92
|
+
def update(attrs)
|
93
|
+
snake_cased_json = Task.update(id, attrs)
|
94
|
+
handle_snake_cased_json(snake_cased_json)
|
95
|
+
end
|
96
|
+
|
97
|
+
# task_id, status REQUIRED
|
98
|
+
def self.update_status(task_id, status)
|
99
|
+
url = "tasks/#{task_id}/status"
|
100
|
+
resp = Manatoo.put(url, {
|
101
|
+
status: status
|
102
|
+
})
|
103
|
+
JSON.parse(resp.body).to_snake_keys
|
104
|
+
end
|
105
|
+
|
106
|
+
def update_status(status)
|
107
|
+
snake_cased_json = Task.update_status(id, status)
|
108
|
+
handle_snake_cased_json(snake_cased_json)
|
109
|
+
end
|
110
|
+
|
111
|
+
# labels should not be empty, should be array
|
112
|
+
def self.add_labels(task_id, labels)
|
113
|
+
url = "tasks/#{task_id}/labels"
|
114
|
+
resp = Manatoo.post(url, {
|
115
|
+
labels: labels
|
116
|
+
})
|
117
|
+
JSON.parse(resp.body).to_snake_keys
|
118
|
+
end
|
119
|
+
|
120
|
+
def add_labels(labels)
|
121
|
+
snake_cased_json = Task.add_labels(id, labels)
|
122
|
+
handle_snake_cased_json(snake_cased_json)
|
123
|
+
end
|
124
|
+
|
125
|
+
# weight REQUIRED, should be integer
|
126
|
+
def self.add_weight(task_id, weight)
|
127
|
+
url = "tasks/#{task_id}/weight"
|
128
|
+
resp = Manatoo.post(url, {
|
129
|
+
weight: weight
|
130
|
+
})
|
131
|
+
JSON.parse(resp.body).to_snake_keys
|
132
|
+
end
|
133
|
+
|
134
|
+
def add_weight(weight)
|
135
|
+
snake_cased_json = Task.add_weight(id, weight)
|
136
|
+
handle_snake_cased_json(snake_cased_json)
|
137
|
+
end
|
138
|
+
|
139
|
+
# users should not be empty, should be array
|
140
|
+
def self.add_users(task_id, users)
|
141
|
+
url = "tasks/#{task_id}/users"
|
142
|
+
resp = Manatoo.post(url, {
|
143
|
+
users: users
|
144
|
+
})
|
145
|
+
JSON.parse(resp.body).to_snake_keys
|
146
|
+
end
|
147
|
+
|
148
|
+
def add_users(users)
|
149
|
+
snake_cased_json = Task.add_users(id, weight)
|
150
|
+
handle_snake_cased_json(snake_cased_json)
|
151
|
+
end
|
152
|
+
|
153
|
+
# users should not be empty, should be array
|
154
|
+
def self.remove_users(task_id, users)
|
155
|
+
url = "tasks/#{task_id}/users"
|
156
|
+
resp = Manatoo.delete(url, {
|
157
|
+
users: users
|
158
|
+
})
|
159
|
+
JSON.parse(resp.body).to_snake_keys
|
160
|
+
end
|
161
|
+
|
162
|
+
def remove_members(users)
|
163
|
+
snake_cased_json = Task.remove_users(id, weight)
|
164
|
+
handle_snake_cased_json(snake_cased_json)
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
metadata
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: manatoo
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Derek Zhou
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-02-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: faraday
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.10'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.10'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: plissken
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: Manatoo is an api first todo list that allows your products to tell you
|
56
|
+
what to do
|
57
|
+
email: developer@manatoo.io
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- lib/manatoo.rb
|
63
|
+
- lib/manatoo/task.rb
|
64
|
+
homepage: http://rubygems.org/gems/manatoo
|
65
|
+
licenses:
|
66
|
+
- MIT
|
67
|
+
metadata: {}
|
68
|
+
post_install_message:
|
69
|
+
rdoc_options: []
|
70
|
+
require_paths:
|
71
|
+
- lib
|
72
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 2.0.0
|
77
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
requirements: []
|
83
|
+
rubyforge_project:
|
84
|
+
rubygems_version: 2.5.1
|
85
|
+
signing_key:
|
86
|
+
specification_version: 4
|
87
|
+
summary: Manatoo api ruby bindings
|
88
|
+
test_files: []
|