podio 1.0.0 → 2.0.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +1 -4
- data/README.md +82 -67
- data/lib/podio.rb +15 -2
- data/lib/podio/client.rb +11 -7
- data/lib/podio/middleware/error_response.rb +3 -1
- data/lib/podio/middleware/json_response.rb +6 -1
- data/lib/podio/middleware/logger.rb +4 -3
- data/lib/podio/middleware/oauth2.rb +5 -5
- data/lib/podio/models/answer.rb +8 -0
- data/lib/podio/models/app_store_category.rb +2 -2
- data/lib/podio/models/app_store_share.rb +1 -0
- data/lib/podio/models/application.rb +12 -4
- data/lib/podio/models/application_field.rb +10 -0
- data/lib/podio/models/batch.rb +1 -0
- data/lib/podio/models/calendar_event.rb +6 -5
- data/lib/podio/models/campaign.rb +88 -0
- data/lib/podio/models/category.rb +1 -1
- data/lib/podio/models/contract.rb +18 -20
- data/lib/podio/models/contract_attribution.rb +24 -0
- data/lib/podio/models/contract_period.rb +22 -0
- data/lib/podio/models/contract_price.rb +37 -26
- data/lib/podio/models/device.rb +22 -0
- data/lib/podio/models/email_subscription_setting.rb +8 -0
- data/lib/podio/models/embed.rb +5 -2
- data/lib/podio/models/experiment.rb +26 -3
- data/lib/podio/models/extension.rb +90 -0
- data/lib/podio/models/external_file.rb +3 -3
- data/lib/podio/models/file_attachment.rb +25 -2
- data/lib/podio/models/form.rb +2 -1
- data/lib/podio/models/grant.rb +1 -0
- data/lib/podio/models/invoice.rb +13 -0
- data/lib/podio/models/item.rb +24 -11
- data/lib/podio/models/item_field.rb +6 -0
- data/lib/podio/models/item_transaction.rb +34 -0
- data/lib/podio/models/live.rb +1 -17
- data/lib/podio/models/notification.rb +5 -0
- data/lib/podio/models/o_auth.rb +9 -2
- data/lib/podio/models/o_auth_client.rb +5 -3
- data/lib/podio/models/o_auth_scope.rb +11 -0
- data/lib/podio/models/organization.rb +26 -8
- data/lib/podio/models/organization_member.rb +6 -0
- data/lib/podio/models/organization_membership.rb +15 -0
- data/lib/podio/models/profile.rb +2 -0
- data/lib/podio/models/promotion.rb +6 -8
- data/lib/podio/models/promotion_group.rb +51 -0
- data/lib/podio/models/promotion_group_member.rb +32 -0
- data/lib/podio/models/rating.rb +4 -2
- data/lib/podio/models/reference.rb +2 -1
- data/lib/podio/models/space.rb +11 -5
- data/lib/podio/models/tag.rb +36 -0
- data/lib/podio/models/view.rb +5 -0
- data/lib/podio/models/vote.rb +8 -0
- data/lib/podio/models/voting.rb +9 -0
- data/lib/podio/models/voucher.rb +68 -0
- data/lib/podio/version.rb +1 -1
- data/podio.gemspec +10 -3
- data/test/client_test.rb +14 -0
- metadata +31 -13
- data/lib/podio/models/contract_price_v2.rb +0 -31
- data/lib/podio/models/date_election.rb +0 -35
data/lib/podio/models/live.rb
CHANGED
@@ -2,6 +2,7 @@ class Podio::Live < ActivePodio::Base
|
|
2
2
|
property :status, :string
|
3
3
|
property :presence, :hash
|
4
4
|
property :provider, :string
|
5
|
+
property :provider_id, :string
|
5
6
|
property :push, :hash
|
6
7
|
property :live_id, :integer
|
7
8
|
property :settings, :hash
|
@@ -39,23 +40,6 @@ class Podio::Live < ActivePodio::Base
|
|
39
40
|
Podio.connection.post("/live/#{id}/decline").status
|
40
41
|
end
|
41
42
|
|
42
|
-
def authorize(attributes)
|
43
|
-
response = Podio.connection.post do |req|
|
44
|
-
req.url "/live/omega/authorize"
|
45
|
-
req.body = attributes
|
46
|
-
end
|
47
|
-
|
48
|
-
response.body
|
49
|
-
end
|
50
|
-
|
51
|
-
def authorize_all
|
52
|
-
Podio.connection.post("/live/omega/authorize/all").body
|
53
|
-
end
|
54
|
-
|
55
|
-
def get_servers
|
56
|
-
Podio.connection.get("/live/servers").body
|
57
|
-
end
|
58
|
-
|
59
43
|
end
|
60
44
|
|
61
45
|
end
|
@@ -34,6 +34,11 @@ class Podio::Notification < ActivePodio::Base
|
|
34
34
|
Podio.connection.post("/notification/#{id}/viewed").status
|
35
35
|
end
|
36
36
|
|
37
|
+
# @see https://developers.podio.com/doc/notifications/mark-notifications-as-viewed-by-ref-553653
|
38
|
+
def mark_as_viewed_by_ref(type, id)
|
39
|
+
Podio.connection.post("/notification/#{type}/#{id}/viewed").status
|
40
|
+
end
|
41
|
+
|
37
42
|
# @see https://developers.podio.com/doc/notifications/mark-all-notifications-as-viewed-58099
|
38
43
|
def mark_all_as_viewed
|
39
44
|
Podio.connection.post("/notification/viewed").status
|
data/lib/podio/models/o_auth.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
# @see https://developers.podio.com/doc/oauth-authorization
|
2
2
|
class Podio::OAuth < ActivePodio::Base
|
3
|
-
|
4
3
|
class << self
|
5
4
|
def authorize(attributes)
|
6
5
|
response = Podio.connection.post do |req|
|
@@ -29,6 +28,14 @@ class Podio::OAuth < ActivePodio::Base
|
|
29
28
|
|
30
29
|
response.body
|
31
30
|
end
|
32
|
-
end
|
33
31
|
|
32
|
+
# @see https://developers.podio.com/doc/oauth-authorization/invalidate-grant-7997965
|
33
|
+
def invalidate_grant
|
34
|
+
response = Podio.connection.post do |req|
|
35
|
+
req.url '/oauth/grant/invalidate'
|
36
|
+
end
|
37
|
+
|
38
|
+
response.status
|
39
|
+
end
|
40
|
+
end
|
34
41
|
end
|
@@ -9,6 +9,8 @@ class Podio::OAuthClient < ActivePodio::Base
|
|
9
9
|
property :url, :string
|
10
10
|
property :domain, :string
|
11
11
|
|
12
|
+
has_many :scope, :class => 'OAuthScope'
|
13
|
+
|
12
14
|
alias_method :id, :auth_client_id
|
13
15
|
|
14
16
|
def create
|
@@ -69,9 +71,9 @@ class Podio::OAuthClient < ActivePodio::Base
|
|
69
71
|
end
|
70
72
|
|
71
73
|
def reset(id)
|
72
|
-
|
73
|
-
|
74
|
-
|
74
|
+
response = Podio.connection.post("/oauth/client/#{id}/reset")
|
75
|
+
response.status
|
76
|
+
end
|
75
77
|
|
76
78
|
def find_granted_clients()
|
77
79
|
list Podio.connection.get("oauth/grant/client/").body
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# @see https://developers.podio.com/doc/oauth-authorization
|
2
|
+
class Podio::OAuthScope < ActivePodio::Base
|
3
|
+
include ActivePodio::Updatable
|
4
|
+
|
5
|
+
property :ref_type, :string
|
6
|
+
property :ref_id, :integer
|
7
|
+
property :ref_link, :string
|
8
|
+
property :ref_name, :string
|
9
|
+
property :permission, :string
|
10
|
+
|
11
|
+
end
|
@@ -22,12 +22,18 @@ class Podio::Organization < ActivePodio::Base
|
|
22
22
|
property :verified_domain, :string # TODO: Remove this, it's deprecated
|
23
23
|
property :domains, :array
|
24
24
|
property :rank, :integer
|
25
|
+
property :tier, :string
|
25
26
|
property :contract_status, :string
|
26
27
|
property :type, :string
|
27
28
|
property :segment, :string
|
28
29
|
property :segment_size, :integer
|
29
30
|
property :grants_count, :integer
|
30
31
|
property :allow_add_space, :boolean
|
32
|
+
property :item_limit, :integer
|
33
|
+
property :item_usage, :integer
|
34
|
+
property :price_plans, :hash
|
35
|
+
property :current_price_plan, :hash
|
36
|
+
property :price_plans_variation, :string
|
31
37
|
|
32
38
|
has_one :created_by, :class => 'ByLine'
|
33
39
|
|
@@ -71,8 +77,10 @@ class Podio::Organization < ActivePodio::Base
|
|
71
77
|
end
|
72
78
|
|
73
79
|
# @see https://developers.podio.com/doc/organizations/get-organization-22383
|
74
|
-
def find(id)
|
75
|
-
member Podio.connection.get
|
80
|
+
def find(id, options={})
|
81
|
+
member Podio.connection.get { |req|
|
82
|
+
req.url("/org/#{id}", options)
|
83
|
+
}.body
|
76
84
|
end
|
77
85
|
|
78
86
|
# @see https://developers.podio.com/doc/organizations/get-organization-by-url-22384
|
@@ -80,8 +88,12 @@ class Podio::Organization < ActivePodio::Base
|
|
80
88
|
member Podio.connection.get("/org/url?url=#{url}").body
|
81
89
|
end
|
82
90
|
|
83
|
-
def find_by_url_slug(org_slug)
|
84
|
-
|
91
|
+
def find_by_url_slug(org_slug, options={})
|
92
|
+
options['org_slug'] = org_slug
|
93
|
+
|
94
|
+
member Podio.connection.get { |req|
|
95
|
+
req.url('/org/url', options)
|
96
|
+
}.body
|
85
97
|
end
|
86
98
|
|
87
99
|
def validate_url_label(url_label)
|
@@ -92,8 +104,10 @@ class Podio::Organization < ActivePodio::Base
|
|
92
104
|
end
|
93
105
|
|
94
106
|
# @see https://developers.podio.com/doc/organizations/get-organizations-22344
|
95
|
-
def find_all
|
96
|
-
list Podio.connection.get
|
107
|
+
def find_all(options={})
|
108
|
+
list Podio.connection.get { |req|
|
109
|
+
req.url("/org/", options)
|
110
|
+
}.body
|
97
111
|
end
|
98
112
|
|
99
113
|
def get_login_report(id, options = {})
|
@@ -121,10 +135,14 @@ class Podio::Organization < ActivePodio::Base
|
|
121
135
|
def get_statistics(id)
|
122
136
|
Podio.connection.get("/org/#{id}/statistics/v2").body
|
123
137
|
end
|
124
|
-
|
138
|
+
|
125
139
|
def find_for_user(user_id)
|
126
140
|
list Podio.connection.get("/org/user/#{user_id}/").body
|
127
141
|
end
|
128
|
-
|
142
|
+
|
143
|
+
def change_to_user_model(id)
|
144
|
+
Podio.connection.post("/org/#{id}/change_to_user_model").body
|
145
|
+
end
|
146
|
+
|
129
147
|
end
|
130
148
|
end
|
@@ -27,6 +27,12 @@ class Podio::OrganizationMember < ActivePodio::Base
|
|
27
27
|
}.body
|
28
28
|
end
|
29
29
|
|
30
|
+
def export(org_id, options = {})
|
31
|
+
Podio.connection.get { |req|
|
32
|
+
req.url("/org/#{org_id}/member/export", options)
|
33
|
+
}.body
|
34
|
+
end
|
35
|
+
|
30
36
|
# @see https://developers.podio.com/doc/organizations/get-organization-member-50908
|
31
37
|
def find(org_id, user_id)
|
32
38
|
member Podio.connection.get("/org/#{org_id}/member/#{user_id}").body
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class Podio::OrganizationMembership < ActivePodio::Base
|
2
|
+
property :employee, :boolean
|
3
|
+
property :tier, :string
|
4
|
+
property :space_memberships, :integer
|
5
|
+
|
6
|
+
has_one :org, :class => 'Organization'
|
7
|
+
|
8
|
+
class << self
|
9
|
+
def find_all_for_user(user_id, options = {})
|
10
|
+
list Podio.connection.get { |req|
|
11
|
+
req.url("/org/user/#{user_id}/membership/", options)
|
12
|
+
}.body
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/podio/models/profile.rb
CHANGED
@@ -5,14 +5,15 @@ class Podio::Promotion < ActivePodio::Base
|
|
5
5
|
property :display_type, :string
|
6
6
|
property :display_data, :hash
|
7
7
|
property :context, :string
|
8
|
-
property :contextual, :boolean
|
9
8
|
property :priority, :integer
|
10
9
|
property :max_views, :integer
|
11
|
-
property :
|
12
|
-
property :
|
10
|
+
property :max_duration, :boolean
|
11
|
+
property :end_on_use, :boolean
|
13
12
|
property :sleep, :integer
|
14
13
|
property :condition_set_ids, :array
|
15
14
|
|
15
|
+
has_many :condition_sets, :class => 'ConditionSet'
|
16
|
+
|
16
17
|
alias_method :id, :promotion_id
|
17
18
|
|
18
19
|
class << self
|
@@ -56,11 +57,8 @@ class Podio::Promotion < ActivePodio::Base
|
|
56
57
|
Podio.connection.get("/promotion/#{promotion_id}/stats").body
|
57
58
|
end
|
58
59
|
|
59
|
-
def assign(promotion_id, user_id
|
60
|
-
Podio.connection.post
|
61
|
-
req.url("/promotion/#{promotion_id}/assign/#{user_id}")
|
62
|
-
req.body = body
|
63
|
-
}
|
60
|
+
def assign(promotion_id, user_id)
|
61
|
+
Podio.connection.post("/promotion/#{promotion_id}/assign/#{user_id}")
|
64
62
|
end
|
65
63
|
|
66
64
|
def find_for_context(context_name, options = {})
|
@@ -0,0 +1,51 @@
|
|
1
|
+
class Podio::PromotionGroup < ActivePodio::Base
|
2
|
+
|
3
|
+
property :promotion_group_id, :integer
|
4
|
+
property :name, :string
|
5
|
+
property :description, :string
|
6
|
+
property :status, :string
|
7
|
+
|
8
|
+
alias_method :id, :promotion_group_id
|
9
|
+
|
10
|
+
class << self
|
11
|
+
|
12
|
+
def find_all(options={})
|
13
|
+
list Podio.connection.get { |req|
|
14
|
+
req.url("/promotion_group/", options)
|
15
|
+
}.body
|
16
|
+
end
|
17
|
+
|
18
|
+
def find(promotion_group_id)
|
19
|
+
member Podio.connection.get("/promotion_group/#{promotion_group_id}").body
|
20
|
+
end
|
21
|
+
|
22
|
+
def create(attributes)
|
23
|
+
member Podio.connection.post { |req|
|
24
|
+
req.url("/promotion_group/")
|
25
|
+
req.body = attributes
|
26
|
+
}.body
|
27
|
+
end
|
28
|
+
|
29
|
+
def update(promotion_group_id, attributes)
|
30
|
+
puts promotion_group_id, attributes
|
31
|
+
member Podio.connection.put { |req|
|
32
|
+
req.url("/promotion_group/#{promotion_group_id}")
|
33
|
+
req.body = attributes
|
34
|
+
}.body
|
35
|
+
end
|
36
|
+
|
37
|
+
def enable(promotion_group_id)
|
38
|
+
member Podio.connection.post("/promotion_group/#{promotion_group_id}/enable").body
|
39
|
+
end
|
40
|
+
|
41
|
+
def disable(promotion_group_id)
|
42
|
+
member Podio.connection.post("/promotion_group/#{promotion_group_id}/disable").body
|
43
|
+
end
|
44
|
+
|
45
|
+
def delete(promotion_group_id)
|
46
|
+
Podio.connection.delete("/promotion_group/#{promotion_group_id}")
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class Podio::PromotionGroupMember < ActivePodio::Base
|
2
|
+
|
3
|
+
property :promotion_group_id, :integer
|
4
|
+
property :member_id, :integer
|
5
|
+
|
6
|
+
alias_method :id, :promotion_group_id
|
7
|
+
|
8
|
+
class << self
|
9
|
+
|
10
|
+
def create(attributes)
|
11
|
+
member Podio.connection.post { |req|
|
12
|
+
req.url("/promotion_group/#{attributes[:promotion_group_id]}/add")
|
13
|
+
req.body = attributes
|
14
|
+
}.body
|
15
|
+
end
|
16
|
+
|
17
|
+
def find_all(promotion_group_id, options = {})
|
18
|
+
Podio.connection.get { |req|
|
19
|
+
req.url("/promotion_group/#{promotion_group_id}/members", options)
|
20
|
+
}.body
|
21
|
+
end
|
22
|
+
|
23
|
+
def add_members(promotion_group_id, attributes)
|
24
|
+
Podio.connection.post { |req|
|
25
|
+
req.url "/promotion_group/#{promotion_group_id}/members/add"
|
26
|
+
req.body = attributes
|
27
|
+
}.status
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
data/lib/podio/models/rating.rb
CHANGED
@@ -44,8 +44,10 @@ class Podio::Rating < ActivePodio::Base
|
|
44
44
|
end
|
45
45
|
|
46
46
|
# @see https://developers.podio.com/doc/comments/get-who-liked-a-comment-29007011
|
47
|
-
def liked_by(ref_type, ref_id)
|
48
|
-
Podio.connection.get
|
47
|
+
def liked_by(ref_type, ref_id, options={})
|
48
|
+
Podio.connection.get { |req|
|
49
|
+
req.url("/rating/#{ref_type}/#{ref_id}/liked_by/", options)
|
50
|
+
}.body.map{|values| Podio::Contact.new(values)}
|
49
51
|
end
|
50
52
|
|
51
53
|
# @see https://developers.podio.com/doc/ratings/get-like-count-32161225
|
@@ -21,7 +21,7 @@ class Podio::Reference < ActivePodio::Base
|
|
21
21
|
end
|
22
22
|
|
23
23
|
# @see https://developers.podio.com/doc/reference/search-references-13312595
|
24
|
-
def search(target, query, limit, target_params = nil)
|
24
|
+
def search(target, query, limit, target_params = nil, subfield = nil)
|
25
25
|
response = Podio.connection.post do |req|
|
26
26
|
req.url "/reference/search"
|
27
27
|
req.body = {
|
@@ -30,6 +30,7 @@ class Podio::Reference < ActivePodio::Base
|
|
30
30
|
:limit => limit
|
31
31
|
}
|
32
32
|
req.body[:target_params] = target_params if target_params.present?
|
33
|
+
req.body[:subfield] = subfield if subfield.present?
|
33
34
|
end
|
34
35
|
response.body
|
35
36
|
end
|
data/lib/podio/models/space.rb
CHANGED
@@ -18,6 +18,7 @@ class Podio::Space < ActivePodio::Base
|
|
18
18
|
property :subscribed, :boolean
|
19
19
|
property :privacy, :string
|
20
20
|
property :auto_join, :boolean
|
21
|
+
property :archived, :boolean
|
21
22
|
property :type, :string
|
22
23
|
property :premium, :boolean
|
23
24
|
property :last_activity_on, :datetime
|
@@ -75,8 +76,8 @@ class Podio::Space < ActivePodio::Base
|
|
75
76
|
end
|
76
77
|
|
77
78
|
# @see https://developers.podio.com/doc/spaces/get-space-22389
|
78
|
-
def find(id)
|
79
|
-
member Podio.connection.get("/space/#{id}").body
|
79
|
+
def find(id, params={})
|
80
|
+
member Podio.connection.get("/space/#{id}", params).body
|
80
81
|
end
|
81
82
|
|
82
83
|
# @see https://developers.podio.com/doc/space-members/join-space-1927286
|
@@ -94,8 +95,9 @@ class Podio::Space < ActivePodio::Base
|
|
94
95
|
member Podio.connection.get("/space/url?url=#{ERB::Util.url_encode(url)}").body
|
95
96
|
end
|
96
97
|
|
97
|
-
def find_by_url_slug(org_slug, space_slug)
|
98
|
-
|
98
|
+
def find_by_url_slug(org_slug, space_slug, params={})
|
99
|
+
params = params.merge(:org_slug => org_slug, :space_slug => space_slug)
|
100
|
+
member Podio.connection.get("/space/url", params).body
|
99
101
|
end
|
100
102
|
|
101
103
|
def find_all_for_org(org_id)
|
@@ -123,7 +125,11 @@ class Podio::Space < ActivePodio::Base
|
|
123
125
|
end
|
124
126
|
|
125
127
|
def get_count(org_id)
|
126
|
-
Podio.connection.get("/space/org/#{org_id}").body['count']
|
128
|
+
Podio.connection.get("/space/org/#{org_id}/count").body['count']
|
129
|
+
end
|
130
|
+
|
131
|
+
def get_available_seats(space_id)
|
132
|
+
Podio.connection.get("/space/#{space_id}/available").body
|
127
133
|
end
|
128
134
|
|
129
135
|
end
|
data/lib/podio/models/tag.rb
CHANGED
@@ -35,5 +35,41 @@ class Podio::Tag < ActivePodio::Base
|
|
35
35
|
text = CGI.escape(text) if text
|
36
36
|
Podio.connection.get("/tag/app/#{app_id}/top/?limit=#{limit}&text=#{text}").body
|
37
37
|
end
|
38
|
+
|
39
|
+
# @see https://developers.podio.com/doc/tags/get-tags-on-space-22466
|
40
|
+
def find_by_space(space_id, limit, text)
|
41
|
+
text = CGI.escape(text) if text
|
42
|
+
list Podio.connection.get("/tag/space/#{space_id}/?limit=#{limit}&text=#{text}").body
|
43
|
+
end
|
44
|
+
|
45
|
+
# @see https://developers.podio.com/doc/tags/get-tags-on-organization-48473
|
46
|
+
def find_by_org(org_id, limit, text)
|
47
|
+
text = CGI.escape(text) if text
|
48
|
+
list Podio.connection.get("/tag/org/#{org_id}/?limit=#{limit}&text=#{text}").body
|
49
|
+
end
|
50
|
+
|
51
|
+
# @see https://developers.podio.com/doc/tags/get-objects-on-app-with-tag-22469
|
52
|
+
def find_tagged_objects_on_app(app_id, attributes)
|
53
|
+
Podio.connection.get("/tag/app/#{app_id}/search/", attributes).body
|
54
|
+
end
|
55
|
+
|
56
|
+
# @see https://developers.podio.com/doc/tags/get-objects-on-space-with-tag-22468
|
57
|
+
def find_tagged_objects_on_space(space_id, attributes)
|
58
|
+
Podio.connection.get("/tag/space/#{space_id}/search/", attributes).body
|
59
|
+
end
|
60
|
+
|
61
|
+
# @see https://developers.podio.com/doc/tags/get-objects-on-organization-with-tag-48478
|
62
|
+
def find_tagged_objects_on_org(org_id, attributes)
|
63
|
+
Podio.connection.get("/tag/org/#{org_id}/search/", attributes).body
|
64
|
+
end
|
65
|
+
|
66
|
+
# @see https://developers.podio.com/doc/tags/remove-tag-22465
|
67
|
+
def delete(tagable_type, tagable_id, attributes)
|
68
|
+
response = Podio.connection.delete do |req|
|
69
|
+
req.url("/tag/#{tagable_type}/#{tagable_id}/", attributes)
|
70
|
+
end
|
71
|
+
|
72
|
+
response.status
|
73
|
+
end
|
38
74
|
end
|
39
75
|
end
|