podio 0.4.1 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +36 -5
- data/Rakefile +3 -1
- data/lib/podio/active_podio/base.rb +311 -0
- data/lib/podio/active_podio/updatable.rb +22 -0
- data/lib/podio/client.rb +7 -4
- data/lib/podio/error.rb +1 -0
- data/lib/podio/middleware/error_response.rb +5 -1
- data/lib/podio/middleware/response_recorder.rb +1 -1
- data/lib/podio/models/app_store_share.rb +67 -0
- data/lib/podio/{areas → models}/application.rb +23 -7
- data/lib/podio/models/application_email.rb +22 -0
- data/lib/podio/models/application_field.rb +17 -0
- data/lib/podio/{areas → models}/bulletin.rb +16 -5
- data/lib/podio/models/by_line.rb +11 -0
- data/lib/podio/models/category.rb +49 -0
- data/lib/podio/models/comment.rb +63 -0
- data/lib/podio/{areas → models}/connection.rb +20 -4
- data/lib/podio/models/contact.rb +10 -0
- data/lib/podio/models/conversation.rb +72 -0
- data/lib/podio/models/conversation_message.rb +12 -0
- data/lib/podio/models/conversation_participant.rb +9 -0
- data/lib/podio/models/email_subscription_setting.rb +39 -0
- data/lib/podio/models/embed.rb +34 -0
- data/lib/podio/models/file_attachment.rb +127 -0
- data/lib/podio/models/form.rb +25 -0
- data/lib/podio/{areas → models}/hook.rb +15 -5
- data/lib/podio/{areas → models}/importer.rb +4 -6
- data/lib/podio/{areas → models}/integration.rb +40 -4
- data/lib/podio/models/item.rb +122 -0
- data/lib/podio/models/item_diff.rb +16 -0
- data/lib/podio/models/item_field.rb +19 -0
- data/lib/podio/models/item_revision.rb +18 -0
- data/lib/podio/models/news.rb +83 -0
- data/lib/podio/models/notification.rb +47 -0
- data/lib/podio/models/notification_group.rb +19 -0
- data/lib/podio/models/o_auth.rb +32 -0
- data/lib/podio/models/o_auth_client.rb +93 -0
- data/lib/podio/{areas → models}/organization.rb +39 -6
- data/lib/podio/models/organization_contact.rb +14 -0
- data/lib/podio/{areas → models}/organization_member.rb +13 -5
- data/lib/podio/models/organization_profile.rb +61 -0
- data/lib/podio/{areas/contact.rb → models/profile.rb} +23 -6
- data/lib/podio/{areas → models}/rating.rb +5 -7
- data/lib/podio/{areas → models}/search.rb +6 -7
- data/lib/podio/models/space.rb +45 -0
- data/lib/podio/models/space_contact.rb +23 -0
- data/lib/podio/models/space_invite.rb +57 -0
- data/lib/podio/models/space_member.rb +32 -0
- data/lib/podio/models/status.rb +35 -0
- data/lib/podio/{areas → models}/subscription.rb +8 -7
- data/lib/podio/{areas → models}/tag.rb +14 -7
- data/lib/podio/models/task.rb +153 -0
- data/lib/podio/models/task_label.rb +50 -0
- data/lib/podio/models/user.rb +66 -0
- data/lib/podio/models/user_status.rb +18 -0
- data/lib/podio/models/via.rb +7 -0
- data/lib/podio/{areas → models}/widget.rb +9 -5
- data/lib/podio/version.rb +1 -1
- data/lib/podio.rb +97 -39
- data/podio.gemspec +4 -3
- data/test/active_podio_test.rb +256 -0
- data/test/client_test.rb +20 -15
- data/test/fixtures/client/18a224aaf83ac57a7b8159cecdbb1263.rack +1 -0
- data/test/fixtures/client/a87c69a0624af0413a670094c6615651.rack +1 -0
- data/test/fixtures/client/ac493997db62308972c208afa76f8479.rack +1 -0
- data/test/fixtures/client/d7fbf422c77af768552423633d0389e8.rack +1 -0
- data/test/fixtures/client/e2d68afe39f5531195273ea259b63916.rack +1 -0
- data/test/fixtures/fixtures.yaml +34 -0
- data/test/models_sanity_test.rb +19 -0
- data/test/test_helper.rb +22 -28
- metadata +89 -64
- data/lib/podio/areas/app_store.rb +0 -69
- data/lib/podio/areas/comment.rb +0 -36
- data/lib/podio/areas/conversation.rb +0 -39
- data/lib/podio/areas/email.rb +0 -24
- data/lib/podio/areas/file.rb +0 -81
- data/lib/podio/areas/form.rb +0 -11
- data/lib/podio/areas/item.rb +0 -68
- data/lib/podio/areas/notification.rb +0 -39
- data/lib/podio/areas/oauth.rb +0 -107
- data/lib/podio/areas/organization_profile.rb +0 -32
- data/lib/podio/areas/space.rb +0 -77
- data/lib/podio/areas/status.rb +0 -19
- data/lib/podio/areas/task.rb +0 -108
- data/lib/podio/areas/user.rb +0 -31
- data/lib/podio/areas/user_status.rb +0 -11
@@ -0,0 +1,11 @@
|
|
1
|
+
# Wraps common byline hashes. See https://hoist.podio.com/api/item/56084
|
2
|
+
class Podio::ByLine < ActivePodio::Base
|
3
|
+
property :type, :string
|
4
|
+
property :id, :integer
|
5
|
+
property :avatar_type, :string
|
6
|
+
property :avatar_id, :integer
|
7
|
+
property :image, :hash
|
8
|
+
property :name, :string
|
9
|
+
property :url, :string
|
10
|
+
property :avatar, :integer # Sometimes used by older operations
|
11
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
class Podio::Category < ActivePodio::Base
|
2
|
+
property :category_id, :integer
|
3
|
+
property :type, :string
|
4
|
+
property :name, :string
|
5
|
+
|
6
|
+
alias_method :id, :category_id
|
7
|
+
|
8
|
+
class << self
|
9
|
+
def create(attributes)
|
10
|
+
response = Podio.connection.post do |req|
|
11
|
+
req.url "/app_store/category/"
|
12
|
+
req.body = attributes
|
13
|
+
end
|
14
|
+
|
15
|
+
response.status
|
16
|
+
end
|
17
|
+
|
18
|
+
def update(id, attributes)
|
19
|
+
response = Podio.connection.put do |req|
|
20
|
+
req.url "/app_store/category/#{id}"
|
21
|
+
req.body = attributes
|
22
|
+
end
|
23
|
+
|
24
|
+
response.status
|
25
|
+
end
|
26
|
+
|
27
|
+
def delete(id)
|
28
|
+
Podio.connection.delete("/app_store/category/#{id}").status
|
29
|
+
end
|
30
|
+
|
31
|
+
def find(id)
|
32
|
+
member Podio.connection.get("/app_store/category/#{id}").body
|
33
|
+
end
|
34
|
+
|
35
|
+
def find_all
|
36
|
+
collection Podio.connection.get("/app_store/category/").body
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def collection(response)
|
42
|
+
return Struct.new(:functional, :vertical).new([], []) if response.blank?
|
43
|
+
functionals = response['functional'].map! { |cat| member(cat) }
|
44
|
+
verticals = response['vertical'].map! { |cat| member(cat) }
|
45
|
+
Struct.new(:functional, :vertical).new(functionals, verticals)
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
class Podio::Comment < ActivePodio::Base
|
2
|
+
property :comment_id, :integer
|
3
|
+
property :value, :string
|
4
|
+
property :external_id, :integer
|
5
|
+
property :space_id, :integer
|
6
|
+
property :created_on, :datetime
|
7
|
+
property :files, :array # when outputting comments
|
8
|
+
property :file_ids, :array # when inputting comments
|
9
|
+
property :embed_id, :integer #optional, when inputting comments
|
10
|
+
property :embed_file_id, :integer #optional, when inputting comments
|
11
|
+
|
12
|
+
has_one :embed, :class => 'Embed'
|
13
|
+
has_one :embed_file, :class => 'FileAttachment'
|
14
|
+
|
15
|
+
has_one :created_by, :class => 'ByLine'
|
16
|
+
has_one :created_via, :class => 'Via'
|
17
|
+
has_many :files, :class => 'FileAttachment'
|
18
|
+
|
19
|
+
alias_method :id, :comment_id
|
20
|
+
attr_accessor :commentable_type, :commentable_id
|
21
|
+
|
22
|
+
def create
|
23
|
+
self.comment_id = Comment.create(commentable_type, commentable_id, attributes)
|
24
|
+
end
|
25
|
+
|
26
|
+
class << self
|
27
|
+
def create(commentable_type, commentable_id, attributes)
|
28
|
+
response = Podio.connection.post do |req|
|
29
|
+
req.url "/comment/#{commentable_type}/#{commentable_id}"
|
30
|
+
req.body = attributes
|
31
|
+
end
|
32
|
+
|
33
|
+
response.body['comment_id']
|
34
|
+
end
|
35
|
+
|
36
|
+
def update(id, attributes)
|
37
|
+
response = Podio.connection.put do |req|
|
38
|
+
req.url "/comment/#{id}"
|
39
|
+
req.body = attributes
|
40
|
+
end
|
41
|
+
|
42
|
+
response.status
|
43
|
+
end
|
44
|
+
|
45
|
+
def delete(id)
|
46
|
+
Podio.connection.delete("/comment/#{id}").status
|
47
|
+
end
|
48
|
+
|
49
|
+
def find(id)
|
50
|
+
member Podio.connection.get("/comment/#{id}").body
|
51
|
+
end
|
52
|
+
|
53
|
+
def find_all_for(commentable_type, commentable_id)
|
54
|
+
list Podio.connection.get("/comment/#{commentable_type}/#{commentable_id}").body
|
55
|
+
end
|
56
|
+
|
57
|
+
def find_recent_for_share
|
58
|
+
#Internal
|
59
|
+
list Podio.connection.get("/comment/share/").body
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
@@ -1,8 +1,23 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
class Podio::Connection < ActivePodio::Base
|
2
|
+
property :connection_id, :integer
|
3
|
+
property :type, :string
|
4
|
+
property :name, :string
|
5
|
+
property :last_load_on, :datetime
|
6
|
+
property :created_on, :datetime
|
5
7
|
|
8
|
+
property :contact_count, :integer
|
9
|
+
|
10
|
+
alias_method :id, :connection_id
|
11
|
+
|
12
|
+
def reload
|
13
|
+
Connection.reload(id)
|
14
|
+
end
|
15
|
+
|
16
|
+
def destroy
|
17
|
+
Connection.delete(id)
|
18
|
+
end
|
19
|
+
|
20
|
+
class << self
|
6
21
|
def create(attributes)
|
7
22
|
response = Podio.connection.post do |req|
|
8
23
|
req.url '/connection/'
|
@@ -27,5 +42,6 @@ module Podio
|
|
27
42
|
def all(options={})
|
28
43
|
list Podio.connection.get('/connection/').body
|
29
44
|
end
|
45
|
+
|
30
46
|
end
|
31
47
|
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class Podio::Contact < Podio::Profile
|
2
|
+
property :is_selected, :bool
|
3
|
+
property :user_id, :integer
|
4
|
+
property :organization, :string
|
5
|
+
property :role, :string # Only available when getting contacts for a space
|
6
|
+
property :type, :string # user, space, connection - blank probably means it's a real user / Podio member
|
7
|
+
property :link, :string
|
8
|
+
|
9
|
+
alias_method :id, :user_id
|
10
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
class Podio::Conversation < ActivePodio::Base
|
2
|
+
property :conversation_id, :integer
|
3
|
+
property :subject, :string
|
4
|
+
|
5
|
+
# When inputting conversation
|
6
|
+
property :text, :string
|
7
|
+
property :participants, :array
|
8
|
+
property :file_ids, :array
|
9
|
+
property :embed_id, :integer
|
10
|
+
property :embed_file_id, :integer
|
11
|
+
|
12
|
+
# When outputting conversation(s)
|
13
|
+
property :created_on, :datetime
|
14
|
+
has_one :created_by, :class => 'ByLine'
|
15
|
+
has_many :files, :class => 'FileAttachment'
|
16
|
+
has_many :messages, :class => 'ConversationMessage'
|
17
|
+
has_many :participants_full, :class => 'ConversationParticipant'
|
18
|
+
|
19
|
+
alias_method :id, :conversation_id
|
20
|
+
alias_method :name, :subject # So tasks can refer to ref.name on all types of references
|
21
|
+
|
22
|
+
def save
|
23
|
+
self[:file_ids] ||= []
|
24
|
+
response = Conversation.create(self.attributes)
|
25
|
+
self.conversation_id = response['conversation_id']
|
26
|
+
end
|
27
|
+
|
28
|
+
handle_api_errors_for :save # Call must be made after the methods to handle have been defined
|
29
|
+
|
30
|
+
class << self
|
31
|
+
def find(conversation_id)
|
32
|
+
member Podio.connection.get("/conversation/#{conversation_id}").body
|
33
|
+
end
|
34
|
+
|
35
|
+
def find_all_for_reference(ref_type, ref_id)
|
36
|
+
list Podio.connection.get("/conversation/#{ref_type}/#{ref_id}/").body
|
37
|
+
end
|
38
|
+
|
39
|
+
def create(attributes)
|
40
|
+
response = Podio.connection.post do |req|
|
41
|
+
req.url '/conversation/'
|
42
|
+
req.body = attributes
|
43
|
+
end
|
44
|
+
response.body
|
45
|
+
end
|
46
|
+
|
47
|
+
def create_for_reference(ref_type, ref_id, attributes)
|
48
|
+
response = Podio.connection.post do |req|
|
49
|
+
req.url "/conversation/#{ref_type}/#{ref_id}/"
|
50
|
+
req.body = attributes
|
51
|
+
end
|
52
|
+
response.body
|
53
|
+
end
|
54
|
+
|
55
|
+
def create_reply(conversation_id, text, file_ids = [])
|
56
|
+
response = Podio.connection.post do |req|
|
57
|
+
req.url "/conversation/#{conversation_id}/reply"
|
58
|
+
req.body = { :text => text, :file_ids => file_ids }
|
59
|
+
end
|
60
|
+
response.body['message_id']
|
61
|
+
end
|
62
|
+
|
63
|
+
def add_participant(conversation_id, user_id)
|
64
|
+
response = Podio.connection.post do |req|
|
65
|
+
req.url "/conversation/#{conversation_id}/participant/"
|
66
|
+
req.body = { :user_id => user_id }
|
67
|
+
end
|
68
|
+
response.body
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class Podio::ConversationMessage < ActivePodio::Base
|
2
|
+
property :message_id, :integer
|
3
|
+
property :embed_id, :integer
|
4
|
+
property :embed_file_id, :integer
|
5
|
+
property :text, :string
|
6
|
+
property :created_on, :datetime
|
7
|
+
|
8
|
+
has_one :created_by, :class => 'ByLine'
|
9
|
+
has_many :files, :class => 'FileAttachment'
|
10
|
+
|
11
|
+
alias_method :id, :message_id
|
12
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
class Podio::ConversationParticipant < ActivePodio::Base
|
2
|
+
property :created_on, :datetime
|
3
|
+
|
4
|
+
has_one :user, :class => 'User'
|
5
|
+
has_one :created_by, :class => 'ByLine'
|
6
|
+
has_one :created_via, :class => 'Via'
|
7
|
+
|
8
|
+
delegate :id, :name, :avatar, :link, :to => :user, :prefix => false
|
9
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class Podio::EmailSubscriptionSetting < ActivePodio::Base
|
2
|
+
include ActivePodio::Updatable
|
3
|
+
|
4
|
+
property :digest, :boolean
|
5
|
+
property :bulletin, :boolean
|
6
|
+
property :reference, :boolean
|
7
|
+
property :message, :boolean
|
8
|
+
property :space, :boolean
|
9
|
+
property :subscription, :boolean
|
10
|
+
|
11
|
+
def self.find_for_current_user
|
12
|
+
self.get_groups
|
13
|
+
end
|
14
|
+
|
15
|
+
def update
|
16
|
+
self.class.update_groups(self.attributes)
|
17
|
+
end
|
18
|
+
|
19
|
+
class << self
|
20
|
+
def get_groups()
|
21
|
+
member Podio.connection.get { |req|
|
22
|
+
req.url("/email/group/", {})
|
23
|
+
}.body
|
24
|
+
end
|
25
|
+
|
26
|
+
def update_groups(options)
|
27
|
+
Podio.connection.put { |req|
|
28
|
+
req.url "/email/group/"
|
29
|
+
req.body = options
|
30
|
+
}.body
|
31
|
+
end
|
32
|
+
|
33
|
+
def unsubscribe(username)
|
34
|
+
Podio.connection.post("/email/unsubscribe/#{username}").status
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class Podio::Embed < ActivePodio::Base
|
2
|
+
|
3
|
+
property :embed_id, :integer
|
4
|
+
property :original_url, :string
|
5
|
+
property :resolved_url, :string
|
6
|
+
property :type, :string
|
7
|
+
property :title, :string
|
8
|
+
property :description, :string
|
9
|
+
property :created_on, :datetime
|
10
|
+
property :provider_name, :string
|
11
|
+
property :embed_html, :string
|
12
|
+
property :embed_height, :boolean
|
13
|
+
property :embed_width, :integer
|
14
|
+
|
15
|
+
has_many :files, :class => 'FileAttachment'
|
16
|
+
|
17
|
+
alias_method :id, :embed_id
|
18
|
+
|
19
|
+
class << self
|
20
|
+
|
21
|
+
def create(url)
|
22
|
+
response = Podio.connection.post do |req|
|
23
|
+
req.url '/embed/'
|
24
|
+
req.body = {:url => url }
|
25
|
+
end
|
26
|
+
member response.body
|
27
|
+
end
|
28
|
+
|
29
|
+
def find(id)
|
30
|
+
member Podio.connection.get("/embed/#{id}").body
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,127 @@
|
|
1
|
+
class Podio::FileAttachment < ActivePodio::Base
|
2
|
+
property :file_id, :integer
|
3
|
+
property :link, :string
|
4
|
+
property :name, :string
|
5
|
+
property :description, :string
|
6
|
+
property :mimetype, :string
|
7
|
+
property :size, :integer
|
8
|
+
property :created_on, :datetime
|
9
|
+
|
10
|
+
has_one :created_by, :class => 'ByLine'
|
11
|
+
has_one :created_via, :class => 'Via'
|
12
|
+
has_many :replaces, :class => 'FileAttachment'
|
13
|
+
|
14
|
+
alias_method :id, :file_id
|
15
|
+
|
16
|
+
def image?
|
17
|
+
['image/png', 'image/jpeg', 'image/gif', 'image/tiff', 'image/bmp'].include?(self.mimetype)
|
18
|
+
end
|
19
|
+
|
20
|
+
class << self
|
21
|
+
|
22
|
+
# Accepts an open file stream along with a content type and a file name and uploads the file to Podio
|
23
|
+
# Returns an instantiated FileAttachment model with id, link, name and mimetype set
|
24
|
+
# If you use Ruby on Rails 3 or higher you can also pass the file in params directly to +upload_from_rails_param+
|
25
|
+
def upload(file_stream, content_type, file_name)
|
26
|
+
response = Podio.client.raw_connection.post do |req|
|
27
|
+
req.url "/file/v2/"
|
28
|
+
req.body = {:source => Faraday::UploadIO.new(file_stream, content_type, file_name), :filename => file_name}
|
29
|
+
end
|
30
|
+
file_attributes = ActiveSupport::JSON.decode(response.body) # Using raw_connection means response is not automatically decoded to json
|
31
|
+
file_attributes.merge!(:name => file_name, :mimetype => content_type)
|
32
|
+
member file_attributes
|
33
|
+
end
|
34
|
+
|
35
|
+
# Accepts a ActionDispatch::Http::UploadedFile or similar and uploads the file to Podio
|
36
|
+
# Optionally attaches the file to the given ref type and ref id
|
37
|
+
# Returns an instantiated FileAttachment model with id, link, name and mimetype set
|
38
|
+
def upload_from_rails_param(uploaded_file, ref_type = nil, ref_id = nil)
|
39
|
+
p uploaded_file
|
40
|
+
file_attachment = self.upload(uploaded_file.tempfile, uploaded_file.content_type, uploaded_file.original_filename)
|
41
|
+
if ref_type.present? && ref_id.present?
|
42
|
+
self.attach(file_attachment.id, ref_type, ref_id)
|
43
|
+
end
|
44
|
+
file_attachment
|
45
|
+
end
|
46
|
+
|
47
|
+
# Attach a file to an existing reference
|
48
|
+
def attach(id, ref_type, ref_id)
|
49
|
+
Podio.connection.post do |req|
|
50
|
+
req.url "/file/#{id}/attach"
|
51
|
+
req.body = { :ref_type => ref_type, :ref_id => ref_id }
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def copy(id)
|
56
|
+
Podio.connection.post("/file/#{id}/copy").body['file_id']
|
57
|
+
end
|
58
|
+
|
59
|
+
def delete(id)
|
60
|
+
Podio.connection.delete("/file/#{id}")
|
61
|
+
end
|
62
|
+
|
63
|
+
def find(id)
|
64
|
+
member Podio.connection.get("/file/#{id}").body
|
65
|
+
end
|
66
|
+
|
67
|
+
def find_for_app(app_id, options={})
|
68
|
+
collection Podio.connection.get { |req|
|
69
|
+
req.url("/file/app/#{app_id}/", options)
|
70
|
+
}.body
|
71
|
+
end
|
72
|
+
|
73
|
+
def find_for_space(space_id, options={})
|
74
|
+
collection Podio.connection.get { |req|
|
75
|
+
req.url("/file/space/#{space_id}/", options)
|
76
|
+
}.body
|
77
|
+
end
|
78
|
+
|
79
|
+
def find_latest_for_app(app_id, options={})
|
80
|
+
collection Podio.connection.get { |req|
|
81
|
+
req.url("/file/app/#{app_id}/latest/", options)
|
82
|
+
}.body
|
83
|
+
end
|
84
|
+
|
85
|
+
def find_latest_for_space(space_id, options={})
|
86
|
+
collection Podio.connection.get { |req|
|
87
|
+
req.url("/file/space/#{space_id}/latest/", options)
|
88
|
+
}.body
|
89
|
+
end
|
90
|
+
|
91
|
+
def replace(old_file_id, new_file_id)
|
92
|
+
Podio.connection.post { |req|
|
93
|
+
req.url "/file/#{new_file_id}/replace"
|
94
|
+
req.body = { :old_file_id => old_file_id }
|
95
|
+
}.body
|
96
|
+
end
|
97
|
+
|
98
|
+
def update(id, description)
|
99
|
+
Podio.connection.put { |req|
|
100
|
+
req.url "/file/#{file_id}"
|
101
|
+
req.body = { :description => description }
|
102
|
+
}.body
|
103
|
+
end
|
104
|
+
|
105
|
+
|
106
|
+
#
|
107
|
+
# Obsolete way of uploading files, use upload method instead
|
108
|
+
#
|
109
|
+
|
110
|
+
# Uploading a file is a two-step operation
|
111
|
+
# First, the file must be created to get a file id and the path to move it to
|
112
|
+
def create(name, content_type)
|
113
|
+
response = Podio.connection.post do |req|
|
114
|
+
req.url "/file/"
|
115
|
+
req.body = { :name => name, :mimetype => content_type }
|
116
|
+
end
|
117
|
+
|
118
|
+
response.body
|
119
|
+
end
|
120
|
+
|
121
|
+
# Then, when the file has been moved, it must be marked as available
|
122
|
+
def set_available(id)
|
123
|
+
Podio.connection.post "/file/#{id}/available"
|
124
|
+
end
|
125
|
+
|
126
|
+
end
|
127
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class Podio::Form < ActivePodio::Base
|
2
|
+
property :form_id, :integer
|
3
|
+
property :app_id, :integer
|
4
|
+
property :settings, :hash
|
5
|
+
property :domains, :array
|
6
|
+
property :field_ids, :array
|
7
|
+
property :attachments, :boolean
|
8
|
+
|
9
|
+
alias_method :id, :form_id
|
10
|
+
|
11
|
+
class << self
|
12
|
+
def create(app_id, attributes)
|
13
|
+
response = Podio.connection.post do |req|
|
14
|
+
req.url "/form/app/#{app_id}/"
|
15
|
+
req.body = attributes
|
16
|
+
end
|
17
|
+
|
18
|
+
response.body['form_id']
|
19
|
+
end
|
20
|
+
|
21
|
+
def find(form_id)
|
22
|
+
member Podio.connection.get("/form/#{form_id}").body
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -1,8 +1,18 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
class Podio::Hook < ActivePodio::Base
|
2
|
+
property :hook_id, :integer
|
3
|
+
property :status, :string
|
4
|
+
property :type, :string
|
5
|
+
property :url, :string
|
6
|
+
|
7
|
+
alias_method :id, :hook_id
|
8
|
+
|
9
|
+
attr_accessor :hookable_type, :hookable_id
|
10
|
+
|
11
|
+
def create
|
12
|
+
self.hook_id = self.class.create(self.hookable_type, self.hookable_id, attributes)
|
13
|
+
end
|
14
|
+
|
15
|
+
class << self
|
6
16
|
def create(hookable_type, hookable_id, attributes)
|
7
17
|
response = Podio.connection.post do |req|
|
8
18
|
req.url "/hook/#{hookable_type}/#{hookable_id}/"
|
@@ -1,8 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
extend self
|
5
|
-
|
1
|
+
class Podio::Importer < ActivePodio::Base
|
2
|
+
|
3
|
+
class << self
|
6
4
|
def process_file(file_id, app_id, mappings)
|
7
5
|
response = Podio.connection.post do |req|
|
8
6
|
req.url "/importer/#{file_id}/process"
|
@@ -20,4 +18,4 @@ module Podio
|
|
20
18
|
end
|
21
19
|
|
22
20
|
end
|
23
|
-
end
|
21
|
+
end
|
@@ -1,8 +1,44 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
include Podio::ResponseWrapper
|
4
|
-
extend self
|
1
|
+
class Podio::Integration < ActivePodio::Base
|
2
|
+
include ActivePodio::Updatable
|
5
3
|
|
4
|
+
property :integration_id, :integer
|
5
|
+
property :app_id, :integer
|
6
|
+
property :status, :string
|
7
|
+
property :type, :string
|
8
|
+
property :silent, :boolean
|
9
|
+
property :config, :hash
|
10
|
+
property :mapping, :hash
|
11
|
+
property :updating, :boolean
|
12
|
+
property :last_updated_on, :datetime
|
13
|
+
property :created_on, :datetime
|
14
|
+
|
15
|
+
has_one :created_by, :class => 'ByLine'
|
16
|
+
|
17
|
+
alias_method :id, :integration_id
|
18
|
+
|
19
|
+
def create
|
20
|
+
self.integration_id = Integration.create(self.app_id, attributes)
|
21
|
+
end
|
22
|
+
|
23
|
+
def update
|
24
|
+
Integration.update(self.app_id, attributes)
|
25
|
+
end
|
26
|
+
|
27
|
+
def update_mapping
|
28
|
+
Integration.update_mapping(self.app_id, attributes)
|
29
|
+
end
|
30
|
+
|
31
|
+
def destroy
|
32
|
+
Integration.delete(self.app_id)
|
33
|
+
end
|
34
|
+
|
35
|
+
def refresh
|
36
|
+
Integration.refresh(self.app_id)
|
37
|
+
end
|
38
|
+
|
39
|
+
handle_api_errors_for :create, :update, :update_mapping
|
40
|
+
|
41
|
+
class << self
|
6
42
|
def create(app_id, attributes)
|
7
43
|
response = Podio.connection.post do |req|
|
8
44
|
req.url "/integration/#{app_id}"
|