podio 0.8.0 → 1.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 +7 -0
- data/.gitignore +3 -0
- data/Gemfile +9 -2
- data/README.md +1 -4
- data/examples/oauth_web_flow/Gemfile +4 -0
- data/examples/{sinatra.rb → oauth_web_flow/sinatra.rb} +7 -6
- data/lib/podio.rb +18 -3
- data/lib/podio/active_podio/base.rb +107 -62
- data/lib/podio/client.rb +30 -5
- data/lib/podio/error.rb +22 -10
- data/lib/podio/middleware/error_response.rb +23 -16
- data/lib/podio/middleware/json_response.rb +1 -1
- data/lib/podio/middleware/logger.rb +3 -0
- data/lib/podio/middleware/oauth2.rb +3 -0
- data/lib/podio/models/account_provider.rb +1 -0
- data/lib/podio/models/action.rb +19 -2
- data/lib/podio/models/activation_status.rb +8 -2
- data/lib/podio/models/app_store_category.rb +4 -1
- data/lib/podio/models/app_store_share.rb +29 -16
- data/lib/podio/models/application.rb +57 -2
- data/lib/podio/models/application_email.rb +5 -2
- data/lib/podio/models/application_field.rb +5 -2
- data/lib/podio/models/batch.rb +8 -0
- data/lib/podio/models/by_line.rb +2 -1
- data/lib/podio/models/calendar_event.rb +63 -3
- data/lib/podio/models/calendar_mute.rb +6 -1
- data/lib/podio/models/category.rb +1 -0
- data/lib/podio/models/comment.rb +29 -8
- data/lib/podio/models/condition.rb +8 -0
- data/lib/podio/models/condition_set.rb +40 -0
- data/lib/podio/models/contact.rb +13 -2
- data/lib/podio/models/contract.rb +85 -1
- data/lib/podio/models/contract_event.rb +17 -0
- data/lib/podio/models/contract_price.rb +3 -7
- data/lib/podio/models/contract_price_v2.rb +31 -0
- data/lib/podio/models/contract_user.rb +4 -0
- data/lib/podio/models/conversation.rb +114 -13
- data/lib/podio/models/conversation_event.rb +51 -0
- data/lib/podio/models/conversation_message.rb +2 -1
- data/lib/podio/models/conversation_participant.rb +3 -2
- data/lib/podio/models/date_election.rb +35 -0
- data/lib/podio/models/email_contact.rb +46 -0
- data/lib/podio/models/email_subscription_setting.rb +4 -23
- data/lib/podio/models/embed.rb +4 -4
- data/lib/podio/models/experiment.rb +71 -0
- data/lib/podio/models/external_file.rb +7 -2
- data/lib/podio/models/file_attachment.rb +23 -0
- data/lib/podio/models/form.rb +7 -0
- data/lib/podio/models/friend.rb +12 -0
- data/lib/podio/models/grant.rb +73 -0
- data/lib/podio/models/hook.rb +13 -6
- data/lib/podio/models/importer.rb +3 -0
- data/lib/podio/models/integration.rb +17 -6
- data/lib/podio/models/invoice.rb +30 -0
- data/lib/podio/models/item.rb +81 -14
- data/lib/podio/models/item_diff.rb +9 -5
- data/lib/podio/models/item_field.rb +11 -2
- data/lib/podio/models/item_revision.rb +5 -2
- data/lib/podio/models/linked_account.rb +1 -0
- data/lib/podio/models/live.rb +61 -0
- data/lib/podio/models/net_promoter_score.rb +28 -0
- data/lib/podio/models/notification.rb +9 -4
- data/lib/podio/models/notification_group.rb +5 -2
- data/lib/podio/models/o_auth.rb +4 -2
- data/lib/podio/models/o_auth_client.rb +1 -2
- data/lib/podio/models/organization.rb +22 -10
- data/lib/podio/models/organization_contact.rb +2 -1
- data/lib/podio/models/organization_member.rb +17 -3
- data/lib/podio/models/organization_profile.rb +8 -2
- data/lib/podio/models/pin.rb +27 -0
- data/lib/podio/models/profile.rb +19 -50
- data/lib/podio/models/promotion.rb +91 -0
- data/lib/podio/models/rating.rb +23 -5
- data/lib/podio/models/recurrence.rb +6 -3
- data/lib/podio/models/reference.rb +17 -1
- data/lib/podio/models/reminder.rb +8 -3
- data/lib/podio/models/search.rb +7 -1
- data/lib/podio/models/space.rb +41 -2
- data/lib/podio/models/space_contact.rb +1 -2
- data/lib/podio/models/space_invitation.rb +4 -5
- data/lib/podio/models/space_member.rb +37 -4
- data/lib/podio/models/status.rb +20 -8
- data/lib/podio/models/stream_activity_group.rb +40 -0
- data/lib/podio/models/stream_mute.rb +7 -8
- data/lib/podio/models/stream_object.rb +19 -11
- data/lib/podio/models/subscription.rb +7 -1
- data/lib/podio/models/tag.rb +6 -1
- data/lib/podio/models/tag_search.rb +2 -1
- data/lib/podio/models/task.rb +74 -18
- data/lib/podio/models/task_label.rb +10 -2
- data/lib/podio/models/user.rb +50 -6
- data/lib/podio/models/user_mail.rb +4 -0
- data/lib/podio/models/user_status.rb +7 -0
- data/lib/podio/models/view.rb +27 -7
- data/lib/podio/models/widget.rb +25 -3
- data/lib/podio/version.rb +1 -1
- data/podio.gemspec +13 -10
- data/script/config.example.rb +6 -0
- data/script/referenceGenerator.rb +87 -0
- data/test/active_podio_test.rb +44 -34
- data/test/client_test.rb +13 -2
- metadata +89 -36
- data/lib/podio/middleware/date_conversion.rb +0 -37
- data/lib/podio/models/bulletin.rb +0 -60
- data/lib/podio/models/connection.rb +0 -53
- data/lib/podio/models/news.rb +0 -85
|
@@ -1,22 +1,25 @@
|
|
|
1
|
+
# @see https://developers.podio.com/doc/email
|
|
1
2
|
class Podio::ApplicationEmail < ActivePodio::Base
|
|
2
3
|
include ActivePodio::Updatable
|
|
3
4
|
|
|
4
5
|
property :attachments, :boolean
|
|
5
|
-
property :mappings, :hash
|
|
6
|
+
property :mappings, :hash
|
|
6
7
|
|
|
7
8
|
class << self
|
|
9
|
+
# @see https://developers.podio.com/doc/email/get-app-email-configuration-622338
|
|
8
10
|
def get_app_configuration(app_id)
|
|
9
11
|
member Podio.connection.get { |req|
|
|
10
12
|
req.url("/email/app/#{app_id}", {})
|
|
11
13
|
}.body
|
|
12
14
|
end
|
|
13
15
|
|
|
16
|
+
# @see https://developers.podio.com/doc/email/update-app-email-configuration-622851
|
|
14
17
|
def update_app_configuration(app_id, options)
|
|
15
18
|
Podio.connection.put { |req|
|
|
16
19
|
req.url "/email/app/#{app_id}"
|
|
17
20
|
req.body = options
|
|
18
21
|
}.body
|
|
19
22
|
end
|
|
20
|
-
|
|
23
|
+
|
|
21
24
|
end
|
|
22
25
|
end
|
|
@@ -1,15 +1,18 @@
|
|
|
1
|
+
# @see https://developers.podio.com/doc/applications
|
|
1
2
|
class Podio::ApplicationField < ActivePodio::Base
|
|
2
3
|
property :field_id, :integer
|
|
3
4
|
property :type, :string
|
|
4
5
|
property :external_id, :string
|
|
5
6
|
property :config, :hash
|
|
6
7
|
property :status, :string
|
|
8
|
+
property :label, :string
|
|
7
9
|
|
|
8
10
|
alias_method :id, :field_id
|
|
9
|
-
delegate_to_hash :config, :
|
|
10
|
-
delegate_to_hash :settings, :allowed_values, :referenceable_types, :allowed_currencies, :allowed_mimetypes, :
|
|
11
|
+
delegate_to_hash :config, :description, :delta, :settings, :required?, :visible?
|
|
12
|
+
delegate_to_hash :settings, :allowed_values, :referenceable_types, :allowed_currencies, :allowed_mimetypes, :options, :multiple
|
|
11
13
|
|
|
12
14
|
class << self
|
|
15
|
+
# @see https://developers.podio.com/doc/applications/get-app-field-22353
|
|
13
16
|
def find(app_id, field_id)
|
|
14
17
|
member Podio.connection.get("/app/#{app_id}/field/#{field_id}").body
|
|
15
18
|
end
|
data/lib/podio/models/batch.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# @see https://developers.podio.com/doc/batch
|
|
1
2
|
class Podio::Batch < ActivePodio::Base
|
|
2
3
|
property :batch_id, :integer
|
|
3
4
|
property :name, :string
|
|
@@ -17,15 +18,22 @@ class Podio::Batch < ActivePodio::Base
|
|
|
17
18
|
alias_method :id, :batch_id
|
|
18
19
|
|
|
19
20
|
class << self
|
|
21
|
+
# @see https://developers.podio.com/doc/batch/get-batch-6144225
|
|
20
22
|
def find(id)
|
|
21
23
|
member Podio.connection.get("/batch/#{id}").body
|
|
22
24
|
end
|
|
23
25
|
|
|
26
|
+
# @see https://developers.podio.com/doc/batch/get-batches-6078877
|
|
24
27
|
def find_all(options={})
|
|
25
28
|
list Podio.connection.get { |req|
|
|
26
29
|
req.url("/batch/", options)
|
|
27
30
|
}.body
|
|
28
31
|
end
|
|
32
|
+
|
|
33
|
+
# @see https://developers.podio.com/doc/batch/get-running-batches-15856178
|
|
34
|
+
def find_running(ref_type, ref_id, plugin)
|
|
35
|
+
list Podio.connection.get("/batch/#{ref_type}/#{ref_id}/#{plugin}/running/").body
|
|
36
|
+
end
|
|
29
37
|
end
|
|
30
38
|
|
|
31
39
|
end
|
data/lib/podio/models/by_line.rb
CHANGED
|
@@ -1,45 +1,98 @@
|
|
|
1
|
+
# @see https://developers.podio.com/doc/calendar
|
|
1
2
|
class Podio::CalendarEvent < ActivePodio::Base
|
|
2
|
-
property :
|
|
3
|
-
property :
|
|
4
|
-
property :
|
|
3
|
+
property :uid, :string
|
|
4
|
+
property :ref_type, :string
|
|
5
|
+
property :ref_id, :integer
|
|
5
6
|
property :title, :string
|
|
6
7
|
property :description, :string
|
|
7
8
|
property :location, :string
|
|
8
9
|
property :status, :string
|
|
9
10
|
property :start, :datetime, :convert_timezone => false
|
|
11
|
+
property :start_utc, :datetime, :convert_timezone => false
|
|
10
12
|
property :start_date, :date
|
|
11
13
|
property :start_time, :string
|
|
12
14
|
property :end, :datetime, :convert_timezone => false
|
|
15
|
+
property :end_utc, :datetime, :convert_timezone => false
|
|
13
16
|
property :end_date, :date
|
|
14
17
|
property :end_time, :string
|
|
15
18
|
property :link, :string
|
|
19
|
+
property :app, :hash
|
|
20
|
+
property :source, :string
|
|
21
|
+
|
|
22
|
+
alias_method :id, :uid
|
|
16
23
|
|
|
17
24
|
class << self
|
|
18
25
|
|
|
26
|
+
# @see https://developers.podio.com/doc/calendar/get-global-calendar-22458
|
|
19
27
|
def find_all(options = {})
|
|
20
28
|
list Podio.connection.get { |req|
|
|
21
29
|
req.url('/calendar/', options)
|
|
22
30
|
}.body
|
|
23
31
|
end
|
|
24
32
|
|
|
33
|
+
def find_all_for_linked_account(linked_account_id, options = {})
|
|
34
|
+
list Podio.connection.get { |req|
|
|
35
|
+
req.url("/calendar/linked_account/#{linked_account_id}/", options)
|
|
36
|
+
}.body
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# @see https://developers.podio.com/doc/calendar/get-space-calendar-22459
|
|
25
40
|
def find_all_for_space(space_id, options={})
|
|
26
41
|
list Podio.connection.get { |req|
|
|
27
42
|
req.url("/calendar/space/#{space_id}/", options)
|
|
28
43
|
}.body
|
|
29
44
|
end
|
|
30
45
|
|
|
46
|
+
# @see https://developers.podio.com/doc/calendar/get-app-calendar-22460
|
|
31
47
|
def find_all_for_app(app_id, options={})
|
|
32
48
|
list Podio.connection.get { |req|
|
|
33
49
|
req.url("/calendar/app/#{app_id}/", options)
|
|
34
50
|
}.body
|
|
35
51
|
end
|
|
36
52
|
|
|
53
|
+
# @see
|
|
54
|
+
def move_event(uid, attributes={})
|
|
55
|
+
response = Podio.connection.post do |req|
|
|
56
|
+
req.url "/calendar/event/#{uid}/move"
|
|
57
|
+
req.body = attributes
|
|
58
|
+
end
|
|
59
|
+
member response.body
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# @see
|
|
63
|
+
def move_event_external(linked_account_id, uid, attributes={})
|
|
64
|
+
response = Podio.connection.post do |req|
|
|
65
|
+
req.url "/calendar/linked_account/#{linked_account_id}/event/#{CGI.escape(uid)}/move"
|
|
66
|
+
req.body = attributes
|
|
67
|
+
end
|
|
68
|
+
member response.body
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# @see
|
|
72
|
+
def update_event_duration(uid, attributes={})
|
|
73
|
+
response = Podio.connection.put do |req|
|
|
74
|
+
req.url "/calendar/event/#{uid}/duration"
|
|
75
|
+
req.body = attributes
|
|
76
|
+
end
|
|
77
|
+
member response.body
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# @see
|
|
81
|
+
def update_event_duration_external(linked_account_id, uid, attributes={})
|
|
82
|
+
response = Podio.connection.put do |req|
|
|
83
|
+
req.url "/calendar/linked_account/#{linked_account_id}/event/#{CGI.escape(uid)}/duration"
|
|
84
|
+
req.body = attributes
|
|
85
|
+
end
|
|
86
|
+
member response.body
|
|
87
|
+
end
|
|
88
|
+
|
|
37
89
|
def get_calendars_for_linked_acc(acc_id, options={})
|
|
38
90
|
list Podio.connection.get { |req|
|
|
39
91
|
req.url("/calendar/export/linked_account/#{acc_id}/available", options)
|
|
40
92
|
}.body
|
|
41
93
|
end
|
|
42
94
|
|
|
95
|
+
# @see https://developers.podio.com/doc/calendar/get-calendar-summary-1609256
|
|
43
96
|
def find_summary(options = {})
|
|
44
97
|
response = Podio.connection.get do |req|
|
|
45
98
|
req.url("/calendar/summary", options)
|
|
@@ -49,6 +102,7 @@ class Podio::CalendarEvent < ActivePodio::Base
|
|
|
49
102
|
response
|
|
50
103
|
end
|
|
51
104
|
|
|
105
|
+
# @see https://developers.podio.com/doc/calendar/get-calendar-summary-for-space-1609328
|
|
52
106
|
def find_summary_for_space(space_id)
|
|
53
107
|
response = Podio.connection.get("/calendar/space/#{space_id}/summary").body
|
|
54
108
|
response['today']['events'] = list(response['today']['events'])
|
|
@@ -63,6 +117,7 @@ class Podio::CalendarEvent < ActivePodio::Base
|
|
|
63
117
|
response
|
|
64
118
|
end
|
|
65
119
|
|
|
120
|
+
# @see https://developers.podio.com/doc/calendar/get-calendar-summary-for-personal-1657903
|
|
66
121
|
def find_personal_summary
|
|
67
122
|
response = Podio.connection.get("/calendar/personal/summary").body
|
|
68
123
|
response['today']['events'] = list(response['today']['events'])
|
|
@@ -70,6 +125,7 @@ class Podio::CalendarEvent < ActivePodio::Base
|
|
|
70
125
|
response
|
|
71
126
|
end
|
|
72
127
|
|
|
128
|
+
# @see https://developers.podio.com/doc/calendar/set-reference-export-9183515
|
|
73
129
|
def set_reference_export(linked_account_id, ref_type, ref_id, attributes={})
|
|
74
130
|
response = Podio.connection.put do |req|
|
|
75
131
|
req.url "/calendar/export/linked_account/#{linked_account_id}/#{ref_type}/#{ref_id}"
|
|
@@ -78,16 +134,19 @@ class Podio::CalendarEvent < ActivePodio::Base
|
|
|
78
134
|
response.status
|
|
79
135
|
end
|
|
80
136
|
|
|
137
|
+
# @see https://developers.podio.com/doc/calendar/get-exports-by-reference-7554180
|
|
81
138
|
def get_reference_exports(ref_type, ref_id)
|
|
82
139
|
list Podio.connection.get { |req|
|
|
83
140
|
req.url("/calendar/export/#{ref_type}/#{ref_id}/")
|
|
84
141
|
}.body
|
|
85
142
|
end
|
|
86
143
|
|
|
144
|
+
# @see https://developers.podio.com/doc/calendar/stop-reference-export-9183590
|
|
87
145
|
def stop_reference_export(linked_account_id, ref_type, ref_id)
|
|
88
146
|
Podio.connection.delete("/calendar/export/linked_account/#{linked_account_id}/#{ref_type}/#{ref_id}").status
|
|
89
147
|
end
|
|
90
148
|
|
|
149
|
+
# @see https://developers.podio.com/doc/calendar/get-global-export-9381099
|
|
91
150
|
def set_global_export(linked_account_id, attributes={})
|
|
92
151
|
response = Podio.connection.put do |req|
|
|
93
152
|
req.url "/calendar/export/linked_account/#{linked_account_id}"
|
|
@@ -96,6 +155,7 @@ class Podio::CalendarEvent < ActivePodio::Base
|
|
|
96
155
|
response.status
|
|
97
156
|
end
|
|
98
157
|
|
|
158
|
+
# @see https://developers.podio.com/doc/calendar/get-global-exports-7554169
|
|
99
159
|
def get_global_exports()
|
|
100
160
|
list Podio.connection.get { |req|
|
|
101
161
|
req.url("/calendar/export/")
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# @see https://developers.podio.com/doc/calendar
|
|
1
2
|
class Podio::CalendarMute < ActivePodio::Base
|
|
2
3
|
property :id, :integer
|
|
3
4
|
property :type, :string
|
|
@@ -8,16 +9,20 @@ class Podio::CalendarMute < ActivePodio::Base
|
|
|
8
9
|
property :task, :boolean
|
|
9
10
|
|
|
10
11
|
class << self
|
|
12
|
+
|
|
13
|
+
# @see https://developers.podio.com/doc/calendar/get-mutes-in-global-calendar-62730
|
|
11
14
|
def find_all
|
|
12
15
|
list Podio.connection.get('/calendar/mute/').body
|
|
13
16
|
end
|
|
14
17
|
|
|
18
|
+
# @see https://developers.podio.com/doc/calendar/mute-objects-from-global-calendar-79418
|
|
15
19
|
def create(scope_type, scope_id, object_type = nil)
|
|
16
20
|
path = "/calendar/mute/#{scope_type}/#{scope_id}/"
|
|
17
21
|
path += "#{object_type}/" unless object_type.nil?
|
|
18
|
-
Podio.connection.post(path).status
|
|
22
|
+
Podio.connection.post(path).status
|
|
19
23
|
end
|
|
20
24
|
|
|
25
|
+
# @see https://developers.podio.com/doc/calendar/unmute-objects-from-the-global-calendar-79420
|
|
21
26
|
def delete(scope_type, scope_id, object_type = nil)
|
|
22
27
|
path = "/calendar/mute/#{scope_type}/#{scope_id}/"
|
|
23
28
|
path += "#{object_type}/" unless object_type.nil?
|
data/lib/podio/models/comment.rb
CHANGED
|
@@ -1,15 +1,20 @@
|
|
|
1
|
+
# @see https://developers.podio.com/doc/comments
|
|
1
2
|
class Podio::Comment < ActivePodio::Base
|
|
2
3
|
property :comment_id, :integer
|
|
3
4
|
property :value, :string
|
|
4
5
|
property :rich_value, :string
|
|
5
|
-
property :external_id, :
|
|
6
|
+
property :external_id, :string
|
|
6
7
|
property :space_id, :integer
|
|
7
8
|
property :created_on, :datetime
|
|
9
|
+
property :like_count, :integer
|
|
10
|
+
property :is_liked, :boolean
|
|
8
11
|
property :files, :array # when outputting comments
|
|
9
12
|
property :file_ids, :array # when inputting comments
|
|
10
13
|
property :embed_id, :integer #optional, when inputting comments
|
|
11
14
|
property :embed_file_id, :integer #optional, when inputting comments
|
|
12
15
|
|
|
16
|
+
has_one :ref, :class => 'Reference'
|
|
17
|
+
|
|
13
18
|
has_one :embed, :class => 'Embed'
|
|
14
19
|
has_one :embed_file, :class => 'FileAttachment'
|
|
15
20
|
|
|
@@ -18,23 +23,31 @@ class Podio::Comment < ActivePodio::Base
|
|
|
18
23
|
has_many :files, :class => 'FileAttachment'
|
|
19
24
|
has_many :questions, :class => 'Question'
|
|
20
25
|
|
|
26
|
+
has_many :granted_users, :class => 'Contact' # Only set when creating new comment
|
|
27
|
+
has_many :invited_users, :class => 'Contact' # Only set when creating new comment
|
|
28
|
+
|
|
21
29
|
alias_method :id, :comment_id
|
|
22
30
|
attr_accessor :commentable_type, :commentable_id
|
|
23
31
|
|
|
24
|
-
|
|
25
|
-
|
|
32
|
+
# @see https://developers.podio.com/doc/comments/add-comment-to-object-22340
|
|
33
|
+
def create(options={})
|
|
34
|
+
updated_attributes = Comment.create(self.commentable_type, self.commentable_id, self.attributes, options)
|
|
35
|
+
self.attributes = updated_attributes.symbolize_keys
|
|
36
|
+
self.initialize_attributes(self.attributes)
|
|
26
37
|
end
|
|
27
|
-
|
|
38
|
+
|
|
28
39
|
class << self
|
|
29
|
-
|
|
40
|
+
# @see https://developers.podio.com/doc/comments/add-comment-to-object-22340
|
|
41
|
+
def create(commentable_type, commentable_id, attributes, options={})
|
|
30
42
|
response = Podio.connection.post do |req|
|
|
31
|
-
req.url
|
|
43
|
+
req.url("/comment/#{commentable_type}/#{commentable_id}", options)
|
|
32
44
|
req.body = attributes
|
|
33
45
|
end
|
|
34
46
|
|
|
35
|
-
response.body
|
|
47
|
+
response.body
|
|
36
48
|
end
|
|
37
49
|
|
|
50
|
+
# @see https://developers.podio.com/doc/comments/update-a-comment-22346
|
|
38
51
|
def update(id, attributes)
|
|
39
52
|
response = Podio.connection.put do |req|
|
|
40
53
|
req.url "/comment/#{id}"
|
|
@@ -44,14 +57,17 @@ class Podio::Comment < ActivePodio::Base
|
|
|
44
57
|
response.status
|
|
45
58
|
end
|
|
46
59
|
|
|
60
|
+
# @see https://developers.podio.com/doc/comments/delete-a-comment-22347
|
|
47
61
|
def delete(id)
|
|
48
62
|
Podio.connection.delete("/comment/#{id}").status
|
|
49
63
|
end
|
|
50
64
|
|
|
65
|
+
# @see https://developers.podio.com/doc/comments/get-a-comment-22345
|
|
51
66
|
def find(id)
|
|
52
67
|
member Podio.connection.get("/comment/#{id}").body
|
|
53
68
|
end
|
|
54
69
|
|
|
70
|
+
# @see https://developers.podio.com/doc/comments/get-comments-on-object-22371
|
|
55
71
|
def find_all_for(commentable_type, commentable_id)
|
|
56
72
|
list Podio.connection.get("/comment/#{commentable_type}/#{commentable_id}").body
|
|
57
73
|
end
|
|
@@ -60,6 +76,11 @@ class Podio::Comment < ActivePodio::Base
|
|
|
60
76
|
#Internal
|
|
61
77
|
list Podio.connection.get("/comment/share/").body
|
|
62
78
|
end
|
|
63
|
-
|
|
79
|
+
|
|
80
|
+
# @see https://developers.podio.com/doc/comments/get-who-liked-a-comment-29007011
|
|
81
|
+
def liked_by(id)
|
|
82
|
+
Podio.connection.get("/comment/#{id}/liked_by/").body.map{|values| Podio::Contact.new(values)}
|
|
83
|
+
end
|
|
84
|
+
|
|
64
85
|
end
|
|
65
86
|
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
class Podio::ConditionSet < ActivePodio::Base
|
|
2
|
+
property :condition_set_id, :integer
|
|
3
|
+
property :name, :string
|
|
4
|
+
property :description, :string
|
|
5
|
+
|
|
6
|
+
has_many :conditions, :class => 'Condition'
|
|
7
|
+
|
|
8
|
+
alias_method :id, :condition_set_id
|
|
9
|
+
|
|
10
|
+
class << self
|
|
11
|
+
def find_all(options={})
|
|
12
|
+
list Podio.connection.get { |req|
|
|
13
|
+
req.url("/condition_set/", options)
|
|
14
|
+
}.body
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def find(condition_set_id)
|
|
18
|
+
member Podio.connection.get("/condition_set/#{condition_set_id}").body
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def create(attributes)
|
|
22
|
+
member Podio.connection.post { |req|
|
|
23
|
+
req.url("/condition_set/")
|
|
24
|
+
req.body = attributes
|
|
25
|
+
}.body
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def update(condition_set_id, attributes)
|
|
29
|
+
member Podio.connection.put { |req|
|
|
30
|
+
req.url("/condition_set/#{condition_set_id}")
|
|
31
|
+
req.body = attributes
|
|
32
|
+
}.body
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def delete(condition_set_id)
|
|
36
|
+
Podio.connection.delete("/condition_set/#{condition_set_id}")
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
data/lib/podio/models/contact.rb
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
|
+
# @see https://developers.podio.com/doc/contacts
|
|
1
2
|
class Podio::Contact < Podio::Profile
|
|
2
3
|
include ActivePodio::Updatable
|
|
3
4
|
|
|
4
5
|
property :user_id, :integer
|
|
5
6
|
property :organization, :string
|
|
6
|
-
property :role, :string # Only available when getting contacts for a space
|
|
7
|
-
property :removable, :boolean # Only available when getting contacts for a space
|
|
8
7
|
property :type, :string # user, space, connection - blank probably means it's a real user / Podio member
|
|
9
8
|
property :space_id, :integer
|
|
10
9
|
property :link, :string
|
|
11
10
|
property :last_seen_on, :datetime
|
|
12
11
|
property :rights, :array
|
|
12
|
+
|
|
13
|
+
# Only available for external contacts
|
|
13
14
|
property :external_id, :string
|
|
15
|
+
property :external_picture, :string
|
|
14
16
|
|
|
15
17
|
alias_method :id, :user_id
|
|
16
18
|
|
|
@@ -18,4 +20,13 @@ class Podio::Contact < Podio::Profile
|
|
|
18
20
|
self.class.update_contact(self.profile_id, self.attributes)
|
|
19
21
|
end
|
|
20
22
|
|
|
23
|
+
class << self
|
|
24
|
+
def find_external(linked_acc_id, external_contact_id)
|
|
25
|
+
member Podio.connection.post { |req|
|
|
26
|
+
req.url "/contact/linked_account/#{linked_acc_id}"
|
|
27
|
+
req.body = { :external_contact_id => external_contact_id }
|
|
28
|
+
}.body
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
21
32
|
end
|
|
@@ -4,14 +4,18 @@ class Podio::Contract < ActivePodio::Base
|
|
|
4
4
|
property :contract_id, :integer
|
|
5
5
|
property :org_id, :integer
|
|
6
6
|
property :status, :string
|
|
7
|
+
property :blocked, :boolean
|
|
7
8
|
property :created_on, :datetime
|
|
8
9
|
property :started_on, :datetime
|
|
10
|
+
property :created_via, :string
|
|
9
11
|
property :ended_on, :datetime
|
|
10
12
|
property :item_prices, :hash
|
|
11
13
|
property :item_limits, :hash
|
|
12
14
|
property :payment_id, :string
|
|
13
15
|
property :payment_status, :string
|
|
16
|
+
property :payment_provider, :string
|
|
14
17
|
property :accounting_id, :string
|
|
18
|
+
property :accounting_provider, :string
|
|
15
19
|
property :full, :boolean
|
|
16
20
|
property :premium_emp_network, :boolean
|
|
17
21
|
property :premium_spaces, :array
|
|
@@ -24,14 +28,27 @@ class Podio::Contract < ActivePodio::Base
|
|
|
24
28
|
property :ended_comment, :string
|
|
25
29
|
property :billing_mail, :string
|
|
26
30
|
property :model, :string
|
|
31
|
+
property :unpaid_due_date, :datetime
|
|
32
|
+
property :count_employee, :integer
|
|
33
|
+
property :count_external, :integer
|
|
34
|
+
property :yearly_rebate_factor, :decimal
|
|
35
|
+
property :mrr, :decimal
|
|
36
|
+
property :days_overdue, :integer
|
|
37
|
+
property :overdue_status, :string
|
|
27
38
|
|
|
28
39
|
has_one :org, :class => 'Organization'
|
|
29
40
|
has_one :user, :class => 'User'
|
|
41
|
+
has_one :sold_by, :class => 'User'
|
|
30
42
|
has_one :price, :class => 'ContractPrice'
|
|
43
|
+
has_one :price_v2, :class => 'ContractPriceV2'
|
|
31
44
|
has_many :premium_spaces, :class => 'Space'
|
|
32
45
|
|
|
33
46
|
alias_method :id, :contract_id
|
|
34
47
|
|
|
48
|
+
def price_v2=(attributes)
|
|
49
|
+
self[:price_v2] = attributes
|
|
50
|
+
end
|
|
51
|
+
|
|
35
52
|
def premium_space_ids=(values)
|
|
36
53
|
self[:premium_space_ids] = (values || []).map(&:to_i)
|
|
37
54
|
end
|
|
@@ -46,6 +63,12 @@ class Podio::Contract < ActivePodio::Base
|
|
|
46
63
|
self["price"] = pricing
|
|
47
64
|
end
|
|
48
65
|
|
|
66
|
+
def calculate_price_v2
|
|
67
|
+
pricing = self.class.calculate_price_v2(self.contract_id, self.attributes.slice(:full, :premium_emp_network, :premium_space_ids))
|
|
68
|
+
self.clear_price_v2
|
|
69
|
+
self["price_v2"] = pricing
|
|
70
|
+
end
|
|
71
|
+
|
|
49
72
|
def create_payment(query_string)
|
|
50
73
|
self.class.create_payment(self.contract_id, query_string)
|
|
51
74
|
end
|
|
@@ -58,7 +81,27 @@ class Podio::Contract < ActivePodio::Base
|
|
|
58
81
|
self.class.end(self.id, attributes)
|
|
59
82
|
end
|
|
60
83
|
|
|
61
|
-
|
|
84
|
+
def change_to_fixed
|
|
85
|
+
self.class.change_to_fixed(self.contract_id,
|
|
86
|
+
:item_limits => {
|
|
87
|
+
:employee => self.item_limits['employee'],
|
|
88
|
+
:external => self.item_limits['external']
|
|
89
|
+
},
|
|
90
|
+
:invoice_interval => self.invoice_interval
|
|
91
|
+
)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def change_to_variable
|
|
95
|
+
self.class.change_to_variable(self.contract_id)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def block
|
|
99
|
+
self.class.block(self.contract_id)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def unblock
|
|
103
|
+
self.class.unblock(self.contract_id)
|
|
104
|
+
end
|
|
62
105
|
|
|
63
106
|
class << self
|
|
64
107
|
def find(contract_id)
|
|
@@ -69,6 +112,10 @@ class Podio::Contract < ActivePodio::Base
|
|
|
69
112
|
list Podio.connection.get("/contract/").body
|
|
70
113
|
end
|
|
71
114
|
|
|
115
|
+
def find_all_my_offers
|
|
116
|
+
list Podio.connection.get("/contract/offered/").body
|
|
117
|
+
end
|
|
118
|
+
|
|
72
119
|
def find_for_org(org_id)
|
|
73
120
|
list Podio.connection.get("/contract/org/#{org_id}/").body
|
|
74
121
|
end
|
|
@@ -77,6 +124,10 @@ class Podio::Contract < ActivePodio::Base
|
|
|
77
124
|
member Podio.connection.get("/contract/org/#{org_id}/user").body
|
|
78
125
|
end
|
|
79
126
|
|
|
127
|
+
def find_all_unpaid
|
|
128
|
+
list Podio.connection.get("/contract/unpaid/").body
|
|
129
|
+
end
|
|
130
|
+
|
|
80
131
|
def create(attributes)
|
|
81
132
|
response = Podio.connection.post do |req|
|
|
82
133
|
req.url "/contract/"
|
|
@@ -116,7 +167,16 @@ class Podio::Contract < ActivePodio::Base
|
|
|
116
167
|
req.url "/contract/#{contract_id}/price"
|
|
117
168
|
req.body = attributes
|
|
118
169
|
end
|
|
170
|
+
|
|
171
|
+
response.body
|
|
172
|
+
end
|
|
119
173
|
|
|
174
|
+
def calculate_price_v2(contract_id, attributes)
|
|
175
|
+
response = Podio.connection.post do |req|
|
|
176
|
+
req.url "/contract/#{contract_id}/price/v2"
|
|
177
|
+
req.body = attributes
|
|
178
|
+
end
|
|
179
|
+
|
|
120
180
|
response.body
|
|
121
181
|
end
|
|
122
182
|
|
|
@@ -128,5 +188,29 @@ class Podio::Contract < ActivePodio::Base
|
|
|
128
188
|
|
|
129
189
|
response.body
|
|
130
190
|
end
|
|
191
|
+
|
|
192
|
+
def change_to_fixed(contract_id, attributes)
|
|
193
|
+
response = Podio.connection.post do |req|
|
|
194
|
+
req.url "/contract/#{contract_id}/change_to/fixed"
|
|
195
|
+
req.body = attributes
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
response.status
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
def change_to_variable(contract_id)
|
|
202
|
+
response = Podio.connection.post("/contract/#{contract_id}/change_to/variable")
|
|
203
|
+
response.status
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
def block(contract_id)
|
|
207
|
+
response = Podio.connection.post("/contract/#{contract_id}/block")
|
|
208
|
+
response.status
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
def unblock(contract_id)
|
|
212
|
+
response = Podio.connection.post("/contract/#{contract_id}/unblock")
|
|
213
|
+
response.status
|
|
214
|
+
end
|
|
131
215
|
end
|
|
132
216
|
end
|