podio 0.4.1 → 0.5.0
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/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,122 @@
|
|
1
|
+
class Podio::Item < ActivePodio::Base
|
2
|
+
|
3
|
+
# Included Get Item basic
|
4
|
+
property :item_id, :integer
|
5
|
+
property :app, :hash
|
6
|
+
property :external_id, :string
|
7
|
+
property :title, :string
|
8
|
+
property :fields, :array
|
9
|
+
property :rights, :array
|
10
|
+
|
11
|
+
has_one :initial_revision, :class => 'ItemRevision'
|
12
|
+
has_one :current_revision, :class => 'ItemRevision'
|
13
|
+
|
14
|
+
# Also included in the full Get item
|
15
|
+
property :ratings, :hash
|
16
|
+
property :conversations, :array
|
17
|
+
property :tasks, :array
|
18
|
+
property :references, :array
|
19
|
+
property :tags, :array
|
20
|
+
property :subscribed, :boolean
|
21
|
+
property :user_ratings, :hash
|
22
|
+
|
23
|
+
has_many :revisions, :class => 'ItemRevision'
|
24
|
+
has_many :files, :class => 'FileAttachment'
|
25
|
+
has_many :comments, :class => 'Comment'
|
26
|
+
has_many :shares, :class => 'AppStoreShare'
|
27
|
+
|
28
|
+
# For inserting/updating
|
29
|
+
property :file_ids, :array
|
30
|
+
|
31
|
+
alias_method :id, :item_id
|
32
|
+
delegate_to_hash :app, :app_id, :app_name, :item_name
|
33
|
+
|
34
|
+
def destroy
|
35
|
+
Item.delete(self.id)
|
36
|
+
end
|
37
|
+
|
38
|
+
class << self
|
39
|
+
def find(id)
|
40
|
+
member Podio.connection.get("/item/#{id}").body
|
41
|
+
end
|
42
|
+
|
43
|
+
def find_basic(id)
|
44
|
+
member Podio.connection.get("/item/#{id}/basic").body
|
45
|
+
end
|
46
|
+
|
47
|
+
def find_all_by_external_id(app_id, external_id)
|
48
|
+
collection Podio.connection.get("/item/app/#{app_id}/v2/?external_id=#{external_id}").body
|
49
|
+
end
|
50
|
+
|
51
|
+
def find_all(app_id, options={})
|
52
|
+
collection Podio.connection.get { |req|
|
53
|
+
req.url("/item/app/#{app_id}/", options)
|
54
|
+
}.body
|
55
|
+
end
|
56
|
+
|
57
|
+
def find_next(current_item_id, time = nil)
|
58
|
+
find_next_or_previous(:next, current_item_id, time)
|
59
|
+
end
|
60
|
+
|
61
|
+
def find_previous(current_item_id, time = nil)
|
62
|
+
find_next_or_previous(:previous, current_item_id, time)
|
63
|
+
end
|
64
|
+
|
65
|
+
def find_field_top(field_id, options={:limit => 8})
|
66
|
+
list Podio.connection.get { |req|
|
67
|
+
req.url("/item/field/#{field_id}/top/", options)
|
68
|
+
}.body
|
69
|
+
end
|
70
|
+
|
71
|
+
def search_field(field_id, options={})
|
72
|
+
list Podio.connection.get { |req|
|
73
|
+
req.url("/item/field/#{field_id}/find", options)
|
74
|
+
}.body
|
75
|
+
end
|
76
|
+
|
77
|
+
# Deprecated. Use method in ItemRevision instead.
|
78
|
+
# def revisions(item_id)
|
79
|
+
# collection Podio.connection.get("/item/#{item_id}/revision/").body
|
80
|
+
# end
|
81
|
+
|
82
|
+
# Deprecated. Use method in ItemDiff instead.
|
83
|
+
# def revision_difference(item_id, revision_from_id, revision_to_id)
|
84
|
+
# list Podio.connection.get{ |req|
|
85
|
+
# req.url("/item/#{item_id}/revision/#{revision_from_id}/#{revision_to_id}")
|
86
|
+
# }.body
|
87
|
+
# end
|
88
|
+
|
89
|
+
def create(app_id, attributes)
|
90
|
+
response = Podio.connection.post do |req|
|
91
|
+
req.url "/item/app/#{app_id}/"
|
92
|
+
req.body = attributes
|
93
|
+
end
|
94
|
+
|
95
|
+
response.body['item_id']
|
96
|
+
end
|
97
|
+
|
98
|
+
def update(id, attributes)
|
99
|
+
response = Podio.connection.put do |req|
|
100
|
+
req.url "/item/#{id}"
|
101
|
+
req.body = attributes
|
102
|
+
end
|
103
|
+
response.status
|
104
|
+
end
|
105
|
+
|
106
|
+
def delete(id)
|
107
|
+
Podio.connection.delete("/item/#{id}").body
|
108
|
+
end
|
109
|
+
|
110
|
+
protected
|
111
|
+
|
112
|
+
def time_options(time)
|
113
|
+
time.present? ? { 'time' => (time.is_a?(String) ? time : time.to_s(:db)) } : {}
|
114
|
+
end
|
115
|
+
|
116
|
+
def find_next_or_previous(operation, current_item_id, time)
|
117
|
+
member Podio.connection.get { |req|
|
118
|
+
req.url("/item/#{current_item_id}/#{operation}", time_options(time))
|
119
|
+
}.body
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class Podio::ItemDiff < ActivePodio::Base
|
2
|
+
property :field_id, :integer
|
3
|
+
property :type, :string
|
4
|
+
property :external_id, :integer
|
5
|
+
property :label, :string
|
6
|
+
property :from, :array
|
7
|
+
property :to, :array
|
8
|
+
|
9
|
+
alias_method :id, :field_id
|
10
|
+
|
11
|
+
class << self
|
12
|
+
def find_by_item_and_revisions(item_id, revision_from_id, revision_to_id)
|
13
|
+
list Podio.connection.get("/item/#{item_id}/revision/#{revision_from_id}/#{revision_to_id}").body
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class Podio::ItemField < ActivePodio::Base
|
2
|
+
property :field_id, :integer
|
3
|
+
property :type, :string
|
4
|
+
property :external_id, :integer
|
5
|
+
property :label, :string
|
6
|
+
property :values, :array
|
7
|
+
|
8
|
+
alias_method :id, :field_id
|
9
|
+
|
10
|
+
class << self
|
11
|
+
def update(item_id, field_id, values)
|
12
|
+
response = Podio.connection.put do |req|
|
13
|
+
req.url "/item/#{item_id}/value/#{field_id}"
|
14
|
+
req.body = values
|
15
|
+
end
|
16
|
+
response.status
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class Podio::ItemRevision < ActivePodio::Base
|
2
|
+
property :revision, :integer
|
3
|
+
property :app_revision, :integer
|
4
|
+
property :created_on, :datetime
|
5
|
+
|
6
|
+
has_one :created_by, :class => 'ByLine'
|
7
|
+
has_one :created_via, :class => 'Via'
|
8
|
+
|
9
|
+
class << self
|
10
|
+
def find(item_id, revision_id)
|
11
|
+
member Podio.connection.get("/item/#{item_id}/revision/#{revision_id}").body
|
12
|
+
end
|
13
|
+
|
14
|
+
def find_all_by_item_id(item_id)
|
15
|
+
list Podio.connection.get("/item/#{item_id}/revision/").body
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
class Podio::News < ActivePodio::Base
|
2
|
+
property :news_id, :integer
|
3
|
+
property :title, :string
|
4
|
+
property :content, :string
|
5
|
+
property :link, :string
|
6
|
+
property :priority, :integer
|
7
|
+
property :target_group, :string
|
8
|
+
property :locale, :string
|
9
|
+
property :run_from, :datetime
|
10
|
+
property :run_to, :datetime
|
11
|
+
property :stream_display, :boolean
|
12
|
+
property :email_display, :boolean
|
13
|
+
property :email_views, :integer
|
14
|
+
property :stream_views, :integer
|
15
|
+
property :email_clicks, :integer
|
16
|
+
property :stream_clicks, :integer
|
17
|
+
|
18
|
+
alias_method :id, :news_id
|
19
|
+
|
20
|
+
class << self
|
21
|
+
def find_stream()
|
22
|
+
Podio.connection.get("/news/stream").body
|
23
|
+
end
|
24
|
+
|
25
|
+
def get_news_redirect(news_id, type=nil)
|
26
|
+
type = type.presence || 'stream'
|
27
|
+
response = Podio.connection.get("/news/#{news_id}/redirect?type=#{type}")
|
28
|
+
response.body['link']
|
29
|
+
end
|
30
|
+
|
31
|
+
def delete(news_id)
|
32
|
+
Podio.connection.delete("/news/#{news_id}")
|
33
|
+
end
|
34
|
+
|
35
|
+
def unsubscribe_entry(news_id)
|
36
|
+
Podio.connection.post do |req|
|
37
|
+
req.url "/news/#{news_id}/unsubscribe"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def create(attributes)
|
42
|
+
response = Podio.connection.post do |req|
|
43
|
+
req.url '/news/'
|
44
|
+
req.body = attributes
|
45
|
+
end
|
46
|
+
response.body['news_id']
|
47
|
+
end
|
48
|
+
|
49
|
+
def update(id, attributes)
|
50
|
+
response = Podio.connection.put do |req|
|
51
|
+
req.url "/news/#{id}"
|
52
|
+
req.body = attributes
|
53
|
+
end
|
54
|
+
|
55
|
+
response.status
|
56
|
+
end
|
57
|
+
|
58
|
+
def find(id, options={})
|
59
|
+
member Podio.connection.get("/news/#{id}").body
|
60
|
+
end
|
61
|
+
|
62
|
+
def find_visible
|
63
|
+
list Podio.connection.get("/news/").body
|
64
|
+
end
|
65
|
+
|
66
|
+
def find_all
|
67
|
+
list Podio.connection.get("/news/").body
|
68
|
+
end
|
69
|
+
|
70
|
+
def find_all_by_locale(locale)
|
71
|
+
list Podio.connection.get('/news/?locale=#{locale}').body
|
72
|
+
end
|
73
|
+
|
74
|
+
def find_all_by_target_group(target_group)
|
75
|
+
list Podio.connection.get('/news/?target_group=#{target_group}').body
|
76
|
+
end
|
77
|
+
|
78
|
+
def find_all_by_locale_and_group(locale, group)
|
79
|
+
list Podio.connection.get('/news/?locale=#{locale}?target_group=#{group}').body
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
class Podio::Notification < ActivePodio::Base
|
2
|
+
property :notification_id, :integer
|
3
|
+
property :user, :hash
|
4
|
+
property :type, :string
|
5
|
+
property :viewed_on, :datetime
|
6
|
+
property :subscription_id, :integer
|
7
|
+
property :created_on, :datetime
|
8
|
+
property :data, :hash
|
9
|
+
property :starred, :boolean
|
10
|
+
|
11
|
+
# Only available when getting a single notification
|
12
|
+
property :space, :hash
|
13
|
+
property :org, :hash
|
14
|
+
property :data_link, :string
|
15
|
+
property :context_type, :string
|
16
|
+
property :context_link, :string
|
17
|
+
property :context, :hash
|
18
|
+
|
19
|
+
has_one :created_by, :class => 'ByLine'
|
20
|
+
has_one :created_via, :class => 'Via'
|
21
|
+
has_one :user, :class => 'User'
|
22
|
+
|
23
|
+
alias_method :id, :notification_id
|
24
|
+
delegate_to_hash :data, :field, :value, :role, :message
|
25
|
+
|
26
|
+
class << self
|
27
|
+
def find(id)
|
28
|
+
member Podio.connection.get("/notification/#{id}").body
|
29
|
+
end
|
30
|
+
|
31
|
+
def mark_as_viewed(id)
|
32
|
+
Podio.connection.post("/notification/#{id}/viewed").status
|
33
|
+
end
|
34
|
+
|
35
|
+
def mark_all_as_viewed
|
36
|
+
Podio.connection.post("/notification/viewed").status
|
37
|
+
end
|
38
|
+
|
39
|
+
def star(id)
|
40
|
+
Podio.connection.post("/notification/#{id}/star").status
|
41
|
+
end
|
42
|
+
|
43
|
+
def unstar(id)
|
44
|
+
Podio.connection.delete("/notification/#{id}/star").status
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# This class wraps the response from the Get Notifications API call
|
2
|
+
class Podio::NotificationGroup < ActivePodio::Base
|
3
|
+
property :context, :hash
|
4
|
+
property :notifications, :hash
|
5
|
+
delegate_to_hash :context, :ref, :data
|
6
|
+
delegate_to_hash :data, :link
|
7
|
+
|
8
|
+
class << self
|
9
|
+
def find_all(options={})
|
10
|
+
list Podio.connection.get { |req|
|
11
|
+
req.url('/notification/', options)
|
12
|
+
}.body
|
13
|
+
end
|
14
|
+
|
15
|
+
def mark_as_viewed_by_ref(ref_type, ref_id)
|
16
|
+
Podio.connection.post("/notification/#{ref_type}/#{ref_id}/viewed").status
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class Podio::OAuth < ActivePodio::Base
|
2
|
+
|
3
|
+
class << self
|
4
|
+
def authorize(attributes)
|
5
|
+
response = Podio.connection.post do |req|
|
6
|
+
req.url "/oauth/authorize"
|
7
|
+
req.body = attributes
|
8
|
+
end
|
9
|
+
|
10
|
+
response.body
|
11
|
+
end
|
12
|
+
|
13
|
+
def get_info(attributes)
|
14
|
+
response = Podio.connection.post do |req|
|
15
|
+
req.url "/oauth/info"
|
16
|
+
req.body = attributes
|
17
|
+
end
|
18
|
+
|
19
|
+
response.body
|
20
|
+
end
|
21
|
+
|
22
|
+
def get_access_token(attributes)
|
23
|
+
response = Podio.connection.post do |req|
|
24
|
+
req.url "/oauth/token"
|
25
|
+
req.body = attributes
|
26
|
+
end
|
27
|
+
|
28
|
+
response.body
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
class Podio::OAuthClient < ActivePodio::Base
|
2
|
+
include ActivePodio::Updatable
|
3
|
+
|
4
|
+
property :auth_client_id, :integer
|
5
|
+
property :name, :string
|
6
|
+
property :key, :string
|
7
|
+
property :secret, :string
|
8
|
+
property :url, :string
|
9
|
+
property :domain, :string
|
10
|
+
|
11
|
+
alias_method :id, :auth_client_id
|
12
|
+
|
13
|
+
def create
|
14
|
+
self.auth_client_id = self.class.create(attributes)
|
15
|
+
end
|
16
|
+
|
17
|
+
def update
|
18
|
+
self.class.update(self.auth_client_id, attributes)
|
19
|
+
end
|
20
|
+
|
21
|
+
handle_api_errors_for :create, :update # Call must be made after the methods to handle have been defined
|
22
|
+
|
23
|
+
class << self
|
24
|
+
def create(attributes)
|
25
|
+
response = Podio.connection.post do |req|
|
26
|
+
req.url "/oauth/client/"
|
27
|
+
req.body = attributes
|
28
|
+
end
|
29
|
+
|
30
|
+
response.body['auth_client_id']
|
31
|
+
end
|
32
|
+
|
33
|
+
def create_admin(user_id, attributes)
|
34
|
+
response = Podio.connection.post do |req|
|
35
|
+
req.url "/oauth/client/user/#{user_id}/"
|
36
|
+
req.body = attributes
|
37
|
+
end
|
38
|
+
|
39
|
+
response.status
|
40
|
+
end
|
41
|
+
|
42
|
+
def update(id, attributes)
|
43
|
+
response = Podio.connection.put do |req|
|
44
|
+
req.url "/oauth/client/#{id}"
|
45
|
+
req.body = attributes
|
46
|
+
end
|
47
|
+
|
48
|
+
response.status
|
49
|
+
end
|
50
|
+
|
51
|
+
def update_admin(id, attributes)
|
52
|
+
response = Podio.connection.put do |req|
|
53
|
+
req.url "/oauth/client/#{id}/admin"
|
54
|
+
req.body = attributes
|
55
|
+
end
|
56
|
+
|
57
|
+
response.status
|
58
|
+
end
|
59
|
+
|
60
|
+
def delete(id)``
|
61
|
+
response = Podio.connection.delete("/oauth/client/#{id}")
|
62
|
+
|
63
|
+
response.status
|
64
|
+
end
|
65
|
+
|
66
|
+
def delete_grant(id)
|
67
|
+
response = Podio.connection.delete("/oauth/grant/client/#{id}")
|
68
|
+
|
69
|
+
response.status
|
70
|
+
end
|
71
|
+
|
72
|
+
def reset(id)
|
73
|
+
response = Podio.connection.post("/oauth/client/#{id}/reset")
|
74
|
+
response.status
|
75
|
+
end
|
76
|
+
|
77
|
+
def find_granted_clients()
|
78
|
+
list Podio.connection.get("oauth/grant/client/").body
|
79
|
+
end
|
80
|
+
|
81
|
+
def find_all_for_current_user()
|
82
|
+
list Podio.connection.get("oauth/client/").body
|
83
|
+
end
|
84
|
+
|
85
|
+
def find_all_for_user(user_id)
|
86
|
+
list Podio.connection.get("oauth/client/user/#{user_id}/").body
|
87
|
+
end
|
88
|
+
|
89
|
+
def find(client_id)
|
90
|
+
member Podio.connection.get("oauth/client/#{client_id}").body
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -1,8 +1,41 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
class Podio::Organization < ActivePodio::Base
|
2
|
+
include ActivePodio::Updatable
|
3
|
+
|
4
|
+
property :org_id, :integer
|
5
|
+
property :name, :string
|
6
|
+
property :logo, :integer
|
7
|
+
property :image, :hash
|
8
|
+
property :spaces, :hash
|
9
|
+
property :url, :string
|
10
|
+
property :url_label, :string
|
11
|
+
property :premium, :boolean
|
12
|
+
property :role, :string
|
13
|
+
property :status, :string
|
14
|
+
property :sales_agent_id, :integer
|
15
|
+
property :created_on, :datetime
|
16
|
+
property :user_limit, :integer
|
17
|
+
property :member_count, :integer
|
18
|
+
property :contact_count, :integer
|
19
|
+
property :billing_interval, :integer
|
20
|
+
|
21
|
+
has_one :created_by, :class => 'ByLine'
|
22
|
+
|
23
|
+
alias_method :id, :org_id
|
24
|
+
|
25
|
+
def create
|
26
|
+
attributes = Organization.create(:name => name)
|
27
|
+
self.org_id = attributes['org_id']
|
28
|
+
self.url = attributes['url']
|
29
|
+
self.url_label = attributes['url_label']
|
30
|
+
end
|
31
|
+
|
32
|
+
def update
|
33
|
+
Organization.update(id, {:name => name, :logo => logo, :url_label => url_label, :billing_interval => billing_interval})
|
34
|
+
end
|
35
|
+
|
36
|
+
handle_api_errors_for :create, :update # Call must be made after the methods to handle have been defined
|
37
|
+
|
38
|
+
class << self
|
6
39
|
def update(id, attributes)
|
7
40
|
response = Podio.connection.put do |req|
|
8
41
|
req.url "/org/#{id}"
|
@@ -64,6 +97,6 @@ module Podio
|
|
64
97
|
def upgrade(id)
|
65
98
|
Podio.connection.post("/org/#{id}/upgrade").body
|
66
99
|
end
|
67
|
-
|
100
|
+
|
68
101
|
end
|
69
102
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# Encapsulates a primary contact for an organization, primarily used for billing purposes
|
2
|
+
class Podio::OrganizationContact < Podio::Profile
|
3
|
+
include ActivePodio::Updatable
|
4
|
+
|
5
|
+
property :org_id, :integer
|
6
|
+
property :attention, :string # The name of the primary organization contact
|
7
|
+
|
8
|
+
alias_method :id, :org_id
|
9
|
+
|
10
|
+
def save
|
11
|
+
Organization.update_billing_profile(id, self.attributes)
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -1,8 +1,16 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
# Encapsulates a user's indirect membership (through spaces) of an organization.
|
2
|
+
class Podio::OrganizationMember < ActivePodio::Base
|
3
|
+
property :spaces, :hash
|
4
|
+
property :profile, :hash
|
5
|
+
property :admin, :boolean
|
5
6
|
|
7
|
+
has_one :user, :class => 'User'
|
8
|
+
has_one :contact, :class => 'Contact', :property => :profile
|
9
|
+
|
10
|
+
delegate :user_id, :mail, :last_active_on, :to => :user
|
11
|
+
delegate :name, :avatar, :title, :organization, :title_and_org, :avatar_url, :to => :contact
|
12
|
+
|
13
|
+
class << self
|
6
14
|
def find_all_for_org(org_id, options = {})
|
7
15
|
list Podio.connection.get { |req|
|
8
16
|
req.url("/org/#{org_id}/member/", options)
|
@@ -30,4 +38,4 @@ module Podio
|
|
30
38
|
end
|
31
39
|
|
32
40
|
end
|
33
|
-
end
|
41
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# Encapsulates an organization profile, primarily used for in app store
|
2
|
+
class Podio::OrganizationProfile < ActivePodio::Base
|
3
|
+
include ActivePodio::Updatable
|
4
|
+
|
5
|
+
property :org_id, :integer
|
6
|
+
property :avatar, :integer
|
7
|
+
property :name, :string
|
8
|
+
property :mail, :array
|
9
|
+
property :phone, :array
|
10
|
+
property :url, :array
|
11
|
+
property :address, :array
|
12
|
+
property :city, :string
|
13
|
+
property :country, :string
|
14
|
+
property :about, :string
|
15
|
+
|
16
|
+
alias_method :id, :org_id
|
17
|
+
alias_method :logo, :avatar
|
18
|
+
alias_method :logo=, :avatar=
|
19
|
+
|
20
|
+
def create
|
21
|
+
self.class.create(self.org_id, self.attributes)
|
22
|
+
end
|
23
|
+
|
24
|
+
def update
|
25
|
+
self.class.update(self.org_id, self.attributes)
|
26
|
+
end
|
27
|
+
|
28
|
+
def destroy
|
29
|
+
self.class.delete(self.org_id)
|
30
|
+
end
|
31
|
+
|
32
|
+
handle_api_errors_for :create, :update # Call must be made after the methods to handle have been defined
|
33
|
+
|
34
|
+
class << self
|
35
|
+
def find(org_id)
|
36
|
+
member Podio.connection.get("/org/#{org_id}/appstore").body
|
37
|
+
end
|
38
|
+
|
39
|
+
def create(org_id, attributes)
|
40
|
+
response = Podio.connection.post do |req|
|
41
|
+
req.url "/org/#{org_id}/appstore"
|
42
|
+
req.body = attributes
|
43
|
+
end
|
44
|
+
|
45
|
+
response.body
|
46
|
+
end
|
47
|
+
|
48
|
+
def update(org_id, attributes)
|
49
|
+
response = Podio.connection.put do |req|
|
50
|
+
req.url "/org/#{org_id}/appstore"
|
51
|
+
req.body = attributes
|
52
|
+
end
|
53
|
+
response.status
|
54
|
+
end
|
55
|
+
|
56
|
+
def delete(org_id)
|
57
|
+
Podio.connection.delete("/org/#{org_id}/appstore").status
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
@@ -1,8 +1,26 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
# Serves as the base for Contacts and Organization Contacts
|
2
|
+
class Podio::Profile < ActivePodio::Base
|
3
|
+
property :profile_id, :integer
|
4
|
+
property :name, :string
|
5
|
+
property :avatar, :integer
|
6
|
+
property :image, :hash
|
7
|
+
property :birthdate, :date
|
8
|
+
property :department, :string
|
9
|
+
property :vatin, :string
|
10
|
+
property :skype, :string
|
11
|
+
property :about, :string
|
12
|
+
property :address, :array
|
13
|
+
property :zip, :string
|
14
|
+
property :city, :string
|
15
|
+
property :country, :string
|
16
|
+
property :im, :array
|
17
|
+
property :location, :array
|
18
|
+
property :mail, :array
|
19
|
+
property :phone, :array
|
20
|
+
property :title, :array
|
21
|
+
property :url, :array
|
22
|
+
|
23
|
+
class << self
|
6
24
|
def all(options={})
|
7
25
|
options[:exclude_self] = (options[:exclude_self] == false ? "0" : "1" )
|
8
26
|
|
@@ -106,5 +124,4 @@ module Podio
|
|
106
124
|
end
|
107
125
|
|
108
126
|
end
|
109
|
-
|
110
127
|
end
|
@@ -1,8 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
extend self
|
5
|
-
|
1
|
+
class Podio::Rating < ActivePodio::Base
|
2
|
+
|
3
|
+
class << self
|
6
4
|
def create(ref_type, ref_id, rating_type, value)
|
7
5
|
response = Podio.connection.post do |req|
|
8
6
|
req.url "/rating/#{ref_type}/#{ref_id}/#{rating_type}"
|
@@ -31,6 +29,6 @@ module Podio
|
|
31
29
|
def delete(ref_type, ref_id, rating_type)
|
32
30
|
Podio.connection.delete("/rating/#{ref_type}/#{ref_id}/#{rating_type}").body
|
33
31
|
end
|
34
|
-
|
35
32
|
end
|
36
|
-
|
33
|
+
|
34
|
+
end
|
@@ -1,8 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
extend self
|
5
|
-
|
1
|
+
class Podio::Search < ActivePodio::Base
|
2
|
+
|
3
|
+
class << self
|
6
4
|
def in_org(org_id, words)
|
7
5
|
response = Podio.connection.post do |req|
|
8
6
|
req.url "/search/org/#{org_id}/"
|
@@ -10,6 +8,7 @@ module Podio
|
|
10
8
|
end
|
11
9
|
|
12
10
|
list response.body
|
13
|
-
end
|
11
|
+
end
|
14
12
|
end
|
15
|
-
|
13
|
+
|
14
|
+
end
|