podio 0.3.0 → 0.3.2
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.
- data/lib/podio.rb +21 -3
- data/lib/podio/areas/app_store.rb +24 -0
- data/lib/podio/areas/application.rb +16 -2
- data/lib/podio/areas/contact.rb +4 -8
- data/lib/podio/areas/conversation.rb +8 -1
- data/lib/podio/areas/file.rb +52 -6
- data/lib/podio/areas/hook.rb +38 -0
- data/lib/podio/areas/importer.rb +23 -0
- data/lib/podio/areas/integration.rb +4 -0
- data/lib/podio/areas/item.rb +36 -4
- data/lib/podio/areas/notification.rb +39 -0
- data/lib/podio/areas/oauth.rb +89 -0
- data/lib/podio/areas/organization.rb +0 -2
- data/lib/podio/areas/organization_member.rb +0 -2
- data/lib/podio/areas/rating.rb +36 -0
- data/lib/podio/areas/subscription.rb +26 -0
- data/lib/podio/areas/tag.rb +25 -0
- data/lib/podio/areas/task.rb +6 -2
- data/lib/podio/areas/user.rb +8 -0
- data/lib/podio/client.rb +1 -0
- data/lib/podio/error.rb +1 -0
- data/lib/podio/middleware/date_conversion.rb +1 -1
- data/lib/podio/middleware/error_response.rb +7 -0
- data/lib/podio/middleware/json_response.rb +5 -1
- data/lib/podio/version.rb +1 -1
- metadata +9 -2
data/lib/podio.rb
CHANGED
@@ -30,6 +30,13 @@ module Podio
|
|
30
30
|
Thread.current[:podio_client] = new_client
|
31
31
|
end
|
32
32
|
|
33
|
+
def with_client
|
34
|
+
old_client = Podio.client.dup
|
35
|
+
yield
|
36
|
+
ensure
|
37
|
+
Podio.client = old_client
|
38
|
+
end
|
39
|
+
|
33
40
|
def connection
|
34
41
|
client.connection
|
35
42
|
end
|
@@ -50,11 +57,12 @@ module Podio
|
|
50
57
|
end
|
51
58
|
end
|
52
59
|
|
53
|
-
class OAuthToken < Struct.new(:access_token, :refresh_token, :expires_at)
|
60
|
+
class OAuthToken < Struct.new(:access_token, :refresh_token, :expires_at, :reference, :refreshed)
|
54
61
|
def initialize(params = {})
|
55
|
-
self.access_token
|
62
|
+
self.access_token = params['access_token']
|
56
63
|
self.refresh_token = params['refresh_token']
|
57
|
-
self.
|
64
|
+
self.reference = params['ref']
|
65
|
+
self.expires_at = Time.now + params['expires_in'] if params['expires_in']
|
58
66
|
end
|
59
67
|
end
|
60
68
|
|
@@ -65,22 +73,32 @@ module Podio
|
|
65
73
|
autoload :Application, 'podio/areas/application'
|
66
74
|
autoload :Bulletin, 'podio/areas/bulletin'
|
67
75
|
autoload :Category, 'podio/areas/app_store'
|
76
|
+
autoload :AppStoreShare, 'podio/areas/app_store'
|
68
77
|
autoload :Comment, 'podio/areas/comment'
|
69
78
|
autoload :Connection, 'podio/areas/connection'
|
70
79
|
autoload :Contact, 'podio/areas/contact'
|
71
80
|
autoload :Conversation, 'podio/areas/conversation'
|
72
81
|
autoload :File, 'podio/areas/file'
|
73
82
|
autoload :Form, 'podio/areas/form'
|
83
|
+
autoload :Hook, 'podio/areas/hook'
|
74
84
|
autoload :Item, 'podio/areas/item'
|
85
|
+
autoload :Importer, 'podio/areas/importer'
|
75
86
|
autoload :Integration, 'podio/areas/integration'
|
87
|
+
autoload :Notification, 'podio/areas/notification'
|
88
|
+
autoload :NotificationGroup, 'podio/areas/notification'
|
89
|
+
autoload :OAuth, 'podio/areas/oauth'
|
90
|
+
autoload :OAuthClient, 'podio/areas/oauth'
|
76
91
|
autoload :Organization, 'podio/areas/organization'
|
77
92
|
autoload :OrganizationMember, 'podio/areas/organization_member'
|
78
93
|
autoload :OrganizationProfile, 'podio/areas/organization_profile'
|
94
|
+
autoload :Rating, 'podio/areas/rating'
|
79
95
|
autoload :Search, 'podio/areas/search'
|
80
96
|
autoload :Space, 'podio/areas/space'
|
81
97
|
autoload :SpaceInvite, 'podio/areas/space'
|
82
98
|
autoload :SpaceMember, 'podio/areas/space'
|
83
99
|
autoload :Status, 'podio/areas/status'
|
100
|
+
autoload :Subscription, 'podio/areas/subscription'
|
101
|
+
autoload :Tag, 'podio/areas/tag'
|
84
102
|
autoload :Task, 'podio/areas/task'
|
85
103
|
autoload :TaskLabel, 'podio/areas/task'
|
86
104
|
autoload :User, 'podio/areas/user'
|
@@ -42,4 +42,28 @@ module Podio
|
|
42
42
|
Struct.new(:functional, :vertical).new(functionals, verticals)
|
43
43
|
end
|
44
44
|
end
|
45
|
+
|
46
|
+
module AppStoreShare
|
47
|
+
include Podio::ResponseWrapper
|
48
|
+
extend self
|
49
|
+
|
50
|
+
def create(attributes)
|
51
|
+
response = Podio.connection.post do |req|
|
52
|
+
req.url "/app_store/"
|
53
|
+
req.body = attributes
|
54
|
+
end
|
55
|
+
|
56
|
+
response.body['share_id']
|
57
|
+
end
|
58
|
+
|
59
|
+
def find(id)
|
60
|
+
member Podio.connection.get("/app_store/#{id}/v2").body
|
61
|
+
end
|
62
|
+
|
63
|
+
def find_all_private_for_org(org_id)
|
64
|
+
list Podio.connection.get("/app_store/org/#{org_id}/").body['shares']
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
45
69
|
end
|
@@ -8,8 +8,6 @@ module Podio
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def find_all(options={})
|
11
|
-
options.assert_valid_keys(:external_id, :space_ids, :owner_id, :status, :type)
|
12
|
-
|
13
11
|
list Podio.connection.get { |req|
|
14
12
|
req.url("/app/", options)
|
15
13
|
}.body
|
@@ -28,6 +26,22 @@ module Podio
|
|
28
26
|
end
|
29
27
|
|
30
28
|
response.body
|
29
|
+
end
|
30
|
+
|
31
|
+
def create(attributes)
|
32
|
+
response = Podio.connection.post do |req|
|
33
|
+
req.url "/app/"
|
34
|
+
req.body = attributes
|
35
|
+
end
|
36
|
+
response.body['app_id']
|
37
|
+
end
|
38
|
+
|
39
|
+
def deactivate(id)
|
40
|
+
Podio.connection.post("/app/#{id}/deactivate").body
|
41
|
+
end
|
42
|
+
|
43
|
+
def delete(id)
|
44
|
+
Podio.connection.delete("/app/#{id}").body
|
31
45
|
end
|
32
46
|
|
33
47
|
end
|
data/lib/podio/areas/contact.rb
CHANGED
@@ -4,7 +4,6 @@ module Podio
|
|
4
4
|
extend self
|
5
5
|
|
6
6
|
def all(options={})
|
7
|
-
options.assert_valid_keys(:key, :value, :limit, :offset, :type, :order, :name, :email, :required, :contact_type, :exclude_self)
|
8
7
|
options[:exclude_self] = (options[:exclude_self] == false ? "0" : "1" )
|
9
8
|
|
10
9
|
list Podio.connection.get { |req|
|
@@ -13,8 +12,6 @@ module Podio
|
|
13
12
|
end
|
14
13
|
|
15
14
|
def top(options={})
|
16
|
-
options.assert_valid_keys(:limit, :type)
|
17
|
-
|
18
15
|
list Podio.connection.get { |req|
|
19
16
|
req.url("/contact/top/", options)
|
20
17
|
}.body
|
@@ -25,7 +22,6 @@ module Podio
|
|
25
22
|
end
|
26
23
|
|
27
24
|
def find_all_for_org(org_id, options={})
|
28
|
-
options.assert_valid_keys(:key, :value, :limit, :offset, :type, :order, :name, :email, :contact_type, :exclude_self)
|
29
25
|
options[:type] ||= 'full'
|
30
26
|
options[:exclude_self] = (options[:exclude_self] == false ? "0" : "1" )
|
31
27
|
|
@@ -35,7 +31,6 @@ module Podio
|
|
35
31
|
end
|
36
32
|
|
37
33
|
def find_all_for_space(space_id, options={})
|
38
|
-
options.assert_valid_keys(:key, :value, :limit, :offset, :type, :order, :name, :email, :required, :contact_type, :exclude_self)
|
39
34
|
options[:type] ||= 'full'
|
40
35
|
options[:exclude_self] = (options[:exclude_self] == false ? "0" : "1" )
|
41
36
|
|
@@ -45,7 +40,6 @@ module Podio
|
|
45
40
|
end
|
46
41
|
|
47
42
|
def find_all_for_connection(connection_id, options={})
|
48
|
-
options.assert_valid_keys(:key, :value, :limit, :offset, :type, :order, :name, :email)
|
49
43
|
options[:type] ||= 'full'
|
50
44
|
|
51
45
|
list Podio.connection.get { |req|
|
@@ -54,7 +48,6 @@ module Podio
|
|
54
48
|
end
|
55
49
|
|
56
50
|
def find_all_for_connection_type(connection_type, options={})
|
57
|
-
options.assert_valid_keys(:key, :value, :limit, :offset, :type, :order, :name, :email)
|
58
51
|
options[:type] ||= 'full'
|
59
52
|
|
60
53
|
list Podio.connection.get { |req|
|
@@ -70,6 +63,10 @@ module Podio
|
|
70
63
|
member Podio.connection.get("/contact/user/#{user_id}").body
|
71
64
|
end
|
72
65
|
|
66
|
+
def vcard(profile_id)
|
67
|
+
Podio.connection.get("/contact/#{profile_id}/vcard").body
|
68
|
+
end
|
69
|
+
|
73
70
|
def totals_by_org
|
74
71
|
Podio.connection.get("/contact/totals/").body
|
75
72
|
end
|
@@ -79,7 +76,6 @@ module Podio
|
|
79
76
|
end
|
80
77
|
|
81
78
|
def totals_by_space(space_id, options = {})
|
82
|
-
options.assert_valid_keys(:exclude_self)
|
83
79
|
options[:exclude_self] = (options[:exclude_self] == false ? "0" : "1" )
|
84
80
|
|
85
81
|
Podio.connection.get { |req|
|
@@ -24,9 +24,16 @@ module Podio
|
|
24
24
|
req.url "/conversation/#{ref_type}/#{ref_id}/"
|
25
25
|
req.body = attributes
|
26
26
|
end
|
27
|
-
|
28
27
|
response.body
|
29
28
|
end
|
29
|
+
|
30
|
+
def create_reply(conversation_id, text)
|
31
|
+
response = Podio.connection.post do |req|
|
32
|
+
req.url "/conversation/#{conversation_id}/reply"
|
33
|
+
req.body = { :text => text }
|
34
|
+
end
|
35
|
+
response.body['message_id']
|
36
|
+
end
|
30
37
|
|
31
38
|
end
|
32
39
|
end
|
data/lib/podio/areas/file.rb
CHANGED
@@ -15,20 +15,66 @@ module Podio
|
|
15
15
|
end
|
16
16
|
|
17
17
|
# Then, when the file has been moved, it must be marked as available
|
18
|
-
def set_available(
|
19
|
-
Podio.connection.post "/file/#{
|
18
|
+
def set_available(id)
|
19
|
+
Podio.connection.post "/file/#{id}/available"
|
20
20
|
end
|
21
21
|
|
22
22
|
# Attach a file to an existing reference
|
23
|
-
def attach(
|
23
|
+
def attach(id, ref_type, ref_id)
|
24
24
|
Podio.connection.post do |req|
|
25
|
-
req.url "/file/#{
|
25
|
+
req.url "/file/#{id}/attach"
|
26
26
|
req.body = { :ref_type => ref_type, :ref_id => ref_id }
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
def copy(
|
31
|
-
Podio.connection.post("/file/#{
|
30
|
+
def copy(id)
|
31
|
+
Podio.connection.post("/file/#{id}/copy").body['id']
|
32
|
+
end
|
33
|
+
|
34
|
+
def delete(id)
|
35
|
+
Podio.connection.delete("/file/#{id}")
|
36
|
+
end
|
37
|
+
|
38
|
+
def find(id)
|
39
|
+
member Podio.connection.get("/file/#{id}").body
|
40
|
+
end
|
41
|
+
|
42
|
+
def find_for_app(app_id, options={})
|
43
|
+
collection Podio.connection.get { |req|
|
44
|
+
req.url("/file/app/#{app_id}/", options)
|
45
|
+
}.body
|
46
|
+
end
|
47
|
+
|
48
|
+
def find_for_space(space_id, options={})
|
49
|
+
collection Podio.connection.get { |req|
|
50
|
+
req.url("/file/space/#{space_id}/", options)
|
51
|
+
}.body
|
52
|
+
end
|
53
|
+
|
54
|
+
def find_latest_for_app(app_id, options={})
|
55
|
+
collection Podio.connection.get { |req|
|
56
|
+
req.url("/file/app/#{app_id}/latest/", options)
|
57
|
+
}.body
|
58
|
+
end
|
59
|
+
|
60
|
+
def find_latest_for_space(space_id, options={})
|
61
|
+
collection Podio.connection.get { |req|
|
62
|
+
req.url("/file/space/#{space_id}/latest/", options)
|
63
|
+
}.body
|
64
|
+
end
|
65
|
+
|
66
|
+
def replace(old_file_id, new_file_id)
|
67
|
+
Podio.connection.post { |req|
|
68
|
+
req.url "/file/#{new_file_id}/replace"
|
69
|
+
req.body = { :old_file_id => old_file_id }
|
70
|
+
}.body
|
71
|
+
end
|
72
|
+
|
73
|
+
def update(id, description)
|
74
|
+
Podio.connection.put { |req|
|
75
|
+
req.url "/file/#{file_id}"
|
76
|
+
req.body = { :description => description }
|
77
|
+
}.body
|
32
78
|
end
|
33
79
|
|
34
80
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Podio
|
2
|
+
module Hook
|
3
|
+
include Podio::ResponseWrapper
|
4
|
+
extend self
|
5
|
+
|
6
|
+
def create(hookable_type, hookable_id, attributes)
|
7
|
+
response = Podio.connection.post do |req|
|
8
|
+
req.url "/hook/#{hookable_type}/#{hookable_id}/"
|
9
|
+
req.body = {:url => attributes[:url], :type => attributes[:type]}
|
10
|
+
end
|
11
|
+
|
12
|
+
response.body['hook_id']
|
13
|
+
end
|
14
|
+
|
15
|
+
def verify(hook_id)
|
16
|
+
Podio.connection.post do |req|
|
17
|
+
req.url "/hook/#{hook_id}/verify/request"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def validate(hook_id, code)
|
22
|
+
Podio.connection.post do |req|
|
23
|
+
req.url "/hook/#{hook_id}/verify/validate"
|
24
|
+
req.body = {:code => code}
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def delete(hook_id)
|
29
|
+
Podio.connection.delete do |req|
|
30
|
+
req.url "/hook/#{hook_id}"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def find_all_for(hookable_type, hookable_id)
|
35
|
+
list Podio.connection.get("/hook/#{hookable_type}/#{hookable_id}/").body
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Podio
|
2
|
+
module Importer
|
3
|
+
include Podio::ResponseWrapper
|
4
|
+
extend self
|
5
|
+
|
6
|
+
def process_file(file_id, app_id, mappings)
|
7
|
+
response = Podio.connection.post do |req|
|
8
|
+
req.url "/importer/#{file_id}/process"
|
9
|
+
req.body = {
|
10
|
+
:app_id => app_id,
|
11
|
+
:mappings => mappings
|
12
|
+
}
|
13
|
+
end
|
14
|
+
|
15
|
+
response.body
|
16
|
+
end
|
17
|
+
|
18
|
+
def get_columns(file_id)
|
19
|
+
list Podio.connection.get("/importer/#{file_id}/column/").body
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
data/lib/podio/areas/item.rb
CHANGED
@@ -16,14 +16,29 @@ module Podio
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def find_all(app_id, options={})
|
19
|
-
options.assert_valid_keys(:key, :limit, :offset, :sort_by, :sort_desc)
|
20
|
-
|
21
19
|
collection Podio.connection.get { |req|
|
22
20
|
req.url("/item/app/#{app_id}/", options)
|
23
21
|
}.body
|
24
22
|
end
|
25
|
-
|
26
23
|
|
24
|
+
def find_next(current_item_id, time = nil)
|
25
|
+
find_next_or_previous(:next, current_item_id, time)
|
26
|
+
end
|
27
|
+
|
28
|
+
def find_previous(current_item_id, time = nil)
|
29
|
+
find_next_or_previous(:previous, current_item_id, time)
|
30
|
+
end
|
31
|
+
|
32
|
+
def revisions(item_id)
|
33
|
+
collection Podio.connection.get("/item/#{item_id}/revision/").body
|
34
|
+
end
|
35
|
+
|
36
|
+
def revision_difference(item_id, revision_from_id, revision_to_id)
|
37
|
+
list Podio.connection.get{ |req|
|
38
|
+
req.url("/item/#{item_id}/revision/#{revision_from_id}/#{revision_to_id}")
|
39
|
+
}.body
|
40
|
+
end
|
41
|
+
|
27
42
|
def create(app_id, attributes)
|
28
43
|
response = Podio.connection.post do |req|
|
29
44
|
req.url "/item/app/#{app_id}/"
|
@@ -31,6 +46,23 @@ module Podio
|
|
31
46
|
end
|
32
47
|
|
33
48
|
response.body['item_id']
|
34
|
-
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def delete(id)
|
52
|
+
Podio.connection.delete("/item/#{id}").body
|
53
|
+
end
|
54
|
+
|
55
|
+
protected
|
56
|
+
|
57
|
+
def time_options(time)
|
58
|
+
time.present? ? { 'time' => (time.is_a?(String) ? time : time.to_s(:db)) } : {}
|
59
|
+
end
|
60
|
+
|
61
|
+
def find_next_or_previous(operation, current_item_id, time)
|
62
|
+
member Podio.connection.get { |req|
|
63
|
+
req.url("/item/#{current_item_id}/#{operation}", time_options(time))
|
64
|
+
}.body
|
65
|
+
end
|
66
|
+
|
35
67
|
end
|
36
68
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Podio
|
2
|
+
module Notification
|
3
|
+
include Podio::ResponseWrapper
|
4
|
+
extend self
|
5
|
+
|
6
|
+
def find(id)
|
7
|
+
member Podio.connection.get("/notification/#{id}").body
|
8
|
+
end
|
9
|
+
|
10
|
+
def mark_as_viewed(id)
|
11
|
+
Podio.connection.post("/notification/#{id}/viewed").status
|
12
|
+
end
|
13
|
+
|
14
|
+
def mark_all_as_viewed(id)
|
15
|
+
Podio.connection.post("/notification/viewed").status
|
16
|
+
end
|
17
|
+
|
18
|
+
def star(id)
|
19
|
+
Podio.connection.post("/notification/#{id}/star").status
|
20
|
+
end
|
21
|
+
|
22
|
+
def unstar(id)
|
23
|
+
Podio.connection.delete("/notification/#{id}/star").status
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
module NotificationGroup
|
29
|
+
include Podio::ResponseWrapper
|
30
|
+
extend self
|
31
|
+
|
32
|
+
def find_all(options={})
|
33
|
+
list Podio.connection.get { |req|
|
34
|
+
req.url('/notification/', options)
|
35
|
+
}.body
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
@@ -0,0 +1,89 @@
|
|
1
|
+
module Podio
|
2
|
+
module OAuth
|
3
|
+
include Podio::ResponseWrapper
|
4
|
+
extend self
|
5
|
+
|
6
|
+
def authorize(attributes)
|
7
|
+
response = Podio.connection.post do |req|
|
8
|
+
req.url "/oauth/authorize"
|
9
|
+
req.body = attributes
|
10
|
+
end
|
11
|
+
|
12
|
+
response.body
|
13
|
+
end
|
14
|
+
|
15
|
+
def get_info(attributes)
|
16
|
+
response = Podio.connection.post do |req|
|
17
|
+
req.url "/oauth/info"
|
18
|
+
req.body = attributes
|
19
|
+
end
|
20
|
+
|
21
|
+
response.body
|
22
|
+
end
|
23
|
+
|
24
|
+
def get_access_token(attributes)
|
25
|
+
response = Podio.connection.post do |req|
|
26
|
+
req.url "/oauth/token"
|
27
|
+
req.body = attributes
|
28
|
+
end
|
29
|
+
|
30
|
+
response.body
|
31
|
+
end
|
32
|
+
|
33
|
+
module OAuthClient
|
34
|
+
include Podio::ResponseWrapper
|
35
|
+
extend self
|
36
|
+
|
37
|
+
def create_admin(user_id, attributes)
|
38
|
+
response = Podio.connection.post do |req|
|
39
|
+
req.url "/oauth/client/user/#{user_id}/"
|
40
|
+
req.body = attributes
|
41
|
+
end
|
42
|
+
|
43
|
+
response.status
|
44
|
+
end
|
45
|
+
|
46
|
+
def update(id, attributes)
|
47
|
+
response = Podio.connection.put do |req|
|
48
|
+
req.url "/oauth/client/#{id}"
|
49
|
+
req.body = attributes
|
50
|
+
end
|
51
|
+
|
52
|
+
response.status
|
53
|
+
end
|
54
|
+
|
55
|
+
def update_admin(id, attributes)
|
56
|
+
response = Podio.connection.put do |req|
|
57
|
+
req.url "/oauth/client/#{id}/admin"
|
58
|
+
req.body = attributes
|
59
|
+
end
|
60
|
+
|
61
|
+
response.status
|
62
|
+
end
|
63
|
+
|
64
|
+
def delete(id)``
|
65
|
+
response = Podio.connection.delete("/oauth/client/#{id}")
|
66
|
+
|
67
|
+
response.status
|
68
|
+
end
|
69
|
+
|
70
|
+
def delete_grant(id)
|
71
|
+
response = Podio.connection.delete("/oauth/grant/client/#{id}")
|
72
|
+
|
73
|
+
response.status
|
74
|
+
end
|
75
|
+
|
76
|
+
def find_granted_clients()
|
77
|
+
list Podio.connection.get("oauth/grant/client/").body
|
78
|
+
end
|
79
|
+
|
80
|
+
def find_all_for_user(user_id)
|
81
|
+
list Podio.connection.get("oauth/client/user/#{user_id}/").body
|
82
|
+
end
|
83
|
+
|
84
|
+
def find(client_id)
|
85
|
+
member Podio.connection.get("oauth/client/#{client_id}").body
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Podio
|
2
|
+
module Rating
|
3
|
+
include Podio::ResponseWrapper
|
4
|
+
extend self
|
5
|
+
|
6
|
+
def create(ref_type, ref_id, rating_type, value)
|
7
|
+
response = Podio.connection.post do |req|
|
8
|
+
req.url "/rating/#{ref_type}/#{ref_id}/#{rating_type}"
|
9
|
+
req.body = { :value => value }
|
10
|
+
end
|
11
|
+
|
12
|
+
response.body['rating_id']
|
13
|
+
end
|
14
|
+
|
15
|
+
def find_all(ref_type, ref_id)
|
16
|
+
collection Podio.connection.get("/rating/#{ref_type}/#{ref_id}").body
|
17
|
+
end
|
18
|
+
|
19
|
+
def find(ref_type, ref_id, rating_type, user_id)
|
20
|
+
Podio.connection.get("/rating/#{ref_type}/#{ref_id}/#{rating_type}/#{user_id}").body['value']
|
21
|
+
end
|
22
|
+
|
23
|
+
def find_own(ref_type, ref_id, rating_type)
|
24
|
+
Podio.connection.get("/rating/#{ref_type}/#{ref_id}/#{rating_type}/self").body['value']
|
25
|
+
end
|
26
|
+
|
27
|
+
def find_all_by_type(ref_type, ref_id, rating_type)
|
28
|
+
collection Podio.connection.get("/rating/#{ref_type}/#{ref_id}/#{rating_type}").body
|
29
|
+
end
|
30
|
+
|
31
|
+
def delete(ref_type, ref_id, rating_type)
|
32
|
+
Podio.connection.delete("/rating/#{ref_type}/#{ref_id}/#{rating_type}").body
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Podio
|
2
|
+
module Subscription
|
3
|
+
include Podio::ResponseWrapper
|
4
|
+
extend self
|
5
|
+
|
6
|
+
def find(id)
|
7
|
+
member Podio.connection.get("/subscription/#{id}").body
|
8
|
+
end
|
9
|
+
|
10
|
+
def find_by_reference(ref_type, ref_id)
|
11
|
+
member Podio.connection.get("/subscription/#{ref_type}/#{ref_id}").body
|
12
|
+
end
|
13
|
+
|
14
|
+
def create(ref_type, ref_id)
|
15
|
+
Podio.connection.post("/subscription/#{ref_type}/#{ref_id}").body['subscription_id']
|
16
|
+
end
|
17
|
+
|
18
|
+
def delete(id)
|
19
|
+
Podio.connection.delete("/subscription/#{id}}")
|
20
|
+
end
|
21
|
+
|
22
|
+
def delete_by_reference(ref_type, ref_id)
|
23
|
+
Podio.connection.delete("/subscription/#{ref_type}/#{ref_id}")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Podio
|
2
|
+
module Tag
|
3
|
+
include Podio::ResponseWrapper
|
4
|
+
extend self
|
5
|
+
|
6
|
+
def create(tagable_type, tagable_id, attributes)
|
7
|
+
response = Podio.connection.post do |req|
|
8
|
+
req.url "/tag/#{tagable_type}/#{tagable_id}/"
|
9
|
+
req.body = attributes
|
10
|
+
end
|
11
|
+
|
12
|
+
response.body
|
13
|
+
end
|
14
|
+
|
15
|
+
def find_by_app(app_id, limit, text)
|
16
|
+
list Podio.connection.get("/tag/app/#{app_id}/?limit=#{limit}&text=#{text}").body
|
17
|
+
end
|
18
|
+
|
19
|
+
def find_top_by_app(app_id, limit, text)
|
20
|
+
Podio.connection.get("/tag/app/#{app_id}/top/?limit=#{limit}&text=#{text}").body
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
data/lib/podio/areas/task.rb
CHANGED
@@ -41,6 +41,10 @@ module Podio
|
|
41
41
|
Podio.connection.post("/task/#{id}/assign", {:responsible => user_id}).status
|
42
42
|
end
|
43
43
|
|
44
|
+
def update_reference(id, ref_type, ref_id)
|
45
|
+
Podio.connection.put("/task/#{id}/ref", {:ref_type => ref_type, :ref_id => ref_id}).status
|
46
|
+
end
|
47
|
+
|
44
48
|
def update_labels(id, label_ids)
|
45
49
|
Podio.connection.put("/task/#{id}/label/", label_ids).status
|
46
50
|
end
|
@@ -95,8 +99,8 @@ module Podio
|
|
95
99
|
Podio.connection.delete("/task/label/#{label_id}").status
|
96
100
|
end
|
97
101
|
|
98
|
-
def update(label_id,
|
99
|
-
Podio.connection.put("/task/label/#{label_id}",
|
102
|
+
def update(label_id, attributes)
|
103
|
+
Podio.connection.put("/task/label/#{label_id}", attributes).status
|
100
104
|
end
|
101
105
|
|
102
106
|
end
|
data/lib/podio/areas/user.rb
CHANGED
@@ -19,5 +19,13 @@ module Podio
|
|
19
19
|
def find_all_admins_for_org(org_id)
|
20
20
|
list Podio.connection.get("/org/#{org_id}/admin/").body
|
21
21
|
end
|
22
|
+
|
23
|
+
def get_property(name, value)
|
24
|
+
Podio.connection.get("/user/property/#{name}").body['value']
|
25
|
+
end
|
26
|
+
|
27
|
+
def set_property(name, value)
|
28
|
+
Podio.connection.put("/user/property/#{name}", {:value => value}).status
|
29
|
+
end
|
22
30
|
end
|
23
31
|
end
|
data/lib/podio/client.rb
CHANGED
data/lib/podio/error.rb
CHANGED
@@ -5,6 +5,7 @@ module Podio
|
|
5
5
|
class BadRequestError < StandardError; end
|
6
6
|
class ServerError < StandardError; end
|
7
7
|
class NotFoundError < StandardError; end
|
8
|
+
class ConflictError < StandardError; end
|
8
9
|
class GoneError < StandardError; end
|
9
10
|
class Unavailable < StandardError; end
|
10
11
|
end
|
@@ -3,7 +3,7 @@ module Podio
|
|
3
3
|
class DateConversion < Faraday::Response::Middleware
|
4
4
|
def self.register_on_complete(env)
|
5
5
|
env[:response].on_complete do |finished_env|
|
6
|
-
convert_dates(finished_env[:body])
|
6
|
+
convert_dates(finished_env[:body]) if finished_env[:body].is_a?(Hash)
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
@@ -6,6 +6,8 @@ module Podio
|
|
6
6
|
def self.register_on_complete(env)
|
7
7
|
env[:response].on_complete do |finished_env|
|
8
8
|
case finished_env[:status]
|
9
|
+
when 200, 204
|
10
|
+
# pass
|
9
11
|
when 400
|
10
12
|
raise Error::BadRequestError, finished_env[:body]
|
11
13
|
when 401
|
@@ -18,12 +20,17 @@ module Podio
|
|
18
20
|
raise Error::AuthorizationError, finished_env[:body]
|
19
21
|
when 404
|
20
22
|
raise Error::NotFoundError, "#{finished_env[:method].to_s.upcase} #{finished_env[:url]}"
|
23
|
+
when 409
|
24
|
+
raise Error::ConflictError, finished_env[:body]
|
21
25
|
when 410
|
22
26
|
raise Error::GoneError, "#{finished_env[:method].to_s.upcase} #{finished_env[:url]}"
|
23
27
|
when 500
|
24
28
|
raise Error::ServerError, finished_env[:body].inspect
|
25
29
|
when 502, 503
|
26
30
|
raise Error::Unavailable, finished_env[:body].inspect
|
31
|
+
else
|
32
|
+
# anything else is something unexpected, so raise it
|
33
|
+
raise Error::ServerError, finished_env[:body].inspect
|
27
34
|
end
|
28
35
|
end
|
29
36
|
end
|
@@ -8,7 +8,7 @@ module Podio
|
|
8
8
|
|
9
9
|
def self.register_on_complete(env)
|
10
10
|
env[:response].on_complete do |finished_env|
|
11
|
-
if finished_env[:body].is_a?(String) && finished_env[:status] < 500
|
11
|
+
if finished_env[:body].is_a?(String) && is_json?(finished_env) && finished_env[:status] < 500
|
12
12
|
finished_env[:body] = parse(finished_env[:body])
|
13
13
|
end
|
14
14
|
end
|
@@ -19,6 +19,10 @@ module Podio
|
|
19
19
|
@parser = nil
|
20
20
|
end
|
21
21
|
|
22
|
+
def self.is_json?(finished_env)
|
23
|
+
finished_env[:response_headers]['content-type'] =~ /application\/json/
|
24
|
+
end
|
25
|
+
|
22
26
|
def self.parse(body)
|
23
27
|
return nil if body !~ /\S/ # json gem doesn't like decoding blank strings
|
24
28
|
MultiJson.decode(body)
|
data/lib/podio/version.rb
CHANGED
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: podio
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.3.
|
5
|
+
version: 0.3.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Florian Munz
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-04
|
13
|
+
date: 2011-05-04 00:00:00 +02:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -83,14 +83,21 @@ files:
|
|
83
83
|
- lib/podio/areas/conversation.rb
|
84
84
|
- lib/podio/areas/file.rb
|
85
85
|
- lib/podio/areas/form.rb
|
86
|
+
- lib/podio/areas/hook.rb
|
87
|
+
- lib/podio/areas/importer.rb
|
86
88
|
- lib/podio/areas/integration.rb
|
87
89
|
- lib/podio/areas/item.rb
|
90
|
+
- lib/podio/areas/notification.rb
|
91
|
+
- lib/podio/areas/oauth.rb
|
88
92
|
- lib/podio/areas/organization.rb
|
89
93
|
- lib/podio/areas/organization_member.rb
|
90
94
|
- lib/podio/areas/organization_profile.rb
|
95
|
+
- lib/podio/areas/rating.rb
|
91
96
|
- lib/podio/areas/search.rb
|
92
97
|
- lib/podio/areas/space.rb
|
93
98
|
- lib/podio/areas/status.rb
|
99
|
+
- lib/podio/areas/subscription.rb
|
100
|
+
- lib/podio/areas/tag.rb
|
94
101
|
- lib/podio/areas/task.rb
|
95
102
|
- lib/podio/areas/user.rb
|
96
103
|
- lib/podio/areas/user_status.rb
|