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.
Files changed (106) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -0
  3. data/Gemfile +9 -2
  4. data/README.md +1 -4
  5. data/examples/oauth_web_flow/Gemfile +4 -0
  6. data/examples/{sinatra.rb → oauth_web_flow/sinatra.rb} +7 -6
  7. data/lib/podio.rb +18 -3
  8. data/lib/podio/active_podio/base.rb +107 -62
  9. data/lib/podio/client.rb +30 -5
  10. data/lib/podio/error.rb +22 -10
  11. data/lib/podio/middleware/error_response.rb +23 -16
  12. data/lib/podio/middleware/json_response.rb +1 -1
  13. data/lib/podio/middleware/logger.rb +3 -0
  14. data/lib/podio/middleware/oauth2.rb +3 -0
  15. data/lib/podio/models/account_provider.rb +1 -0
  16. data/lib/podio/models/action.rb +19 -2
  17. data/lib/podio/models/activation_status.rb +8 -2
  18. data/lib/podio/models/app_store_category.rb +4 -1
  19. data/lib/podio/models/app_store_share.rb +29 -16
  20. data/lib/podio/models/application.rb +57 -2
  21. data/lib/podio/models/application_email.rb +5 -2
  22. data/lib/podio/models/application_field.rb +5 -2
  23. data/lib/podio/models/batch.rb +8 -0
  24. data/lib/podio/models/by_line.rb +2 -1
  25. data/lib/podio/models/calendar_event.rb +63 -3
  26. data/lib/podio/models/calendar_mute.rb +6 -1
  27. data/lib/podio/models/category.rb +1 -0
  28. data/lib/podio/models/comment.rb +29 -8
  29. data/lib/podio/models/condition.rb +8 -0
  30. data/lib/podio/models/condition_set.rb +40 -0
  31. data/lib/podio/models/contact.rb +13 -2
  32. data/lib/podio/models/contract.rb +85 -1
  33. data/lib/podio/models/contract_event.rb +17 -0
  34. data/lib/podio/models/contract_price.rb +3 -7
  35. data/lib/podio/models/contract_price_v2.rb +31 -0
  36. data/lib/podio/models/contract_user.rb +4 -0
  37. data/lib/podio/models/conversation.rb +114 -13
  38. data/lib/podio/models/conversation_event.rb +51 -0
  39. data/lib/podio/models/conversation_message.rb +2 -1
  40. data/lib/podio/models/conversation_participant.rb +3 -2
  41. data/lib/podio/models/date_election.rb +35 -0
  42. data/lib/podio/models/email_contact.rb +46 -0
  43. data/lib/podio/models/email_subscription_setting.rb +4 -23
  44. data/lib/podio/models/embed.rb +4 -4
  45. data/lib/podio/models/experiment.rb +71 -0
  46. data/lib/podio/models/external_file.rb +7 -2
  47. data/lib/podio/models/file_attachment.rb +23 -0
  48. data/lib/podio/models/form.rb +7 -0
  49. data/lib/podio/models/friend.rb +12 -0
  50. data/lib/podio/models/grant.rb +73 -0
  51. data/lib/podio/models/hook.rb +13 -6
  52. data/lib/podio/models/importer.rb +3 -0
  53. data/lib/podio/models/integration.rb +17 -6
  54. data/lib/podio/models/invoice.rb +30 -0
  55. data/lib/podio/models/item.rb +81 -14
  56. data/lib/podio/models/item_diff.rb +9 -5
  57. data/lib/podio/models/item_field.rb +11 -2
  58. data/lib/podio/models/item_revision.rb +5 -2
  59. data/lib/podio/models/linked_account.rb +1 -0
  60. data/lib/podio/models/live.rb +61 -0
  61. data/lib/podio/models/net_promoter_score.rb +28 -0
  62. data/lib/podio/models/notification.rb +9 -4
  63. data/lib/podio/models/notification_group.rb +5 -2
  64. data/lib/podio/models/o_auth.rb +4 -2
  65. data/lib/podio/models/o_auth_client.rb +1 -2
  66. data/lib/podio/models/organization.rb +22 -10
  67. data/lib/podio/models/organization_contact.rb +2 -1
  68. data/lib/podio/models/organization_member.rb +17 -3
  69. data/lib/podio/models/organization_profile.rb +8 -2
  70. data/lib/podio/models/pin.rb +27 -0
  71. data/lib/podio/models/profile.rb +19 -50
  72. data/lib/podio/models/promotion.rb +91 -0
  73. data/lib/podio/models/rating.rb +23 -5
  74. data/lib/podio/models/recurrence.rb +6 -3
  75. data/lib/podio/models/reference.rb +17 -1
  76. data/lib/podio/models/reminder.rb +8 -3
  77. data/lib/podio/models/search.rb +7 -1
  78. data/lib/podio/models/space.rb +41 -2
  79. data/lib/podio/models/space_contact.rb +1 -2
  80. data/lib/podio/models/space_invitation.rb +4 -5
  81. data/lib/podio/models/space_member.rb +37 -4
  82. data/lib/podio/models/status.rb +20 -8
  83. data/lib/podio/models/stream_activity_group.rb +40 -0
  84. data/lib/podio/models/stream_mute.rb +7 -8
  85. data/lib/podio/models/stream_object.rb +19 -11
  86. data/lib/podio/models/subscription.rb +7 -1
  87. data/lib/podio/models/tag.rb +6 -1
  88. data/lib/podio/models/tag_search.rb +2 -1
  89. data/lib/podio/models/task.rb +74 -18
  90. data/lib/podio/models/task_label.rb +10 -2
  91. data/lib/podio/models/user.rb +50 -6
  92. data/lib/podio/models/user_mail.rb +4 -0
  93. data/lib/podio/models/user_status.rb +7 -0
  94. data/lib/podio/models/view.rb +27 -7
  95. data/lib/podio/models/widget.rb +25 -3
  96. data/lib/podio/version.rb +1 -1
  97. data/podio.gemspec +13 -10
  98. data/script/config.example.rb +6 -0
  99. data/script/referenceGenerator.rb +87 -0
  100. data/test/active_podio_test.rb +44 -34
  101. data/test/client_test.rb +13 -2
  102. metadata +89 -36
  103. data/lib/podio/middleware/date_conversion.rb +0 -37
  104. data/lib/podio/models/bulletin.rb +0 -60
  105. data/lib/podio/models/connection.rb +0 -53
  106. data/lib/podio/models/news.rb +0 -85
@@ -1,9 +1,12 @@
1
1
  # Encapsulates a user's membership of a space.
2
+ # @see https://developers.podio.com/doc/space-members
2
3
  class Podio::SpaceMember < ActivePodio::Base
4
+ property :employee, :boolean
3
5
  property :role, :string
4
6
  property :invited_on, :datetime
5
7
  property :started_on, :datetime
6
8
  property :ended_on, :datetime
9
+ property :grants, :integer
7
10
 
8
11
  has_one :user, :class => 'User'
9
12
  has_one :contact, :class => 'Contact', :property => :profile
@@ -12,19 +15,29 @@ class Podio::SpaceMember < ActivePodio::Base
12
15
  delegate :user_id, :name, :to => :contact
13
16
 
14
17
  alias_method :id, :user_id
18
+
19
+ def employee?
20
+ employee
21
+ end
22
+
23
+ def external?
24
+ !employee
25
+ end
15
26
 
16
27
  class << self
28
+ # @see https://developers.podio.com/doc/space-members/get-space-members-by-role-68043
17
29
  def find_all_for_role(space_id, role)
18
30
  list Podio.connection.get { |req|
19
31
  req.url("/space/#{space_id}/member/#{role}/")
20
32
  }.body
21
33
  end
22
34
 
35
+ # @see https://developers.podio.com/doc/space-members/get-space-membership-22397
23
36
  def find_membership(space_id, user_id)
24
37
  response = Podio.connection.get { |req|
25
- req.url("/space/#{space_id}/member/#{user_id}")
38
+ req.url("/space/#{space_id}/member/#{user_id}/v2")
26
39
  }
27
- response.body
40
+ member response.body
28
41
  end
29
42
 
30
43
  def find_all_ended(space_id)
@@ -33,10 +46,17 @@ class Podio::SpaceMember < ActivePodio::Base
33
46
  }.body
34
47
  end
35
48
 
49
+ # @see https://developers.podio.com/doc/space-members/get-active-members-of-space-22395
36
50
  def find_all(space_id, options = {})
37
51
  list Podio.connection.get("/space/#{space_id}/member/", options).body
38
52
  end
39
53
 
54
+ # @see https://developers.podio.com/doc/space-members/get-space-members-v2-19350328
55
+ def find_all_for_space(space_id, options = {})
56
+ list Podio.connection.get("/space/#{space_id}/member/v2/", options).body
57
+ end
58
+
59
+ # @see https://developers.podio.com/doc/space-members/update-space-memberships-22398
40
60
  def update_role(space_id, user_id, role)
41
61
  response = Podio.connection.put do |req|
42
62
  req.url "/space/#{space_id}/member/#{user_id}"
@@ -45,28 +65,41 @@ class Podio::SpaceMember < ActivePodio::Base
45
65
  response.status
46
66
  end
47
67
 
68
+ # @see https://developers.podio.com/doc/space-members/end-space-memberships-22399
48
69
  def end_membership(space_id, user_id)
49
70
  Podio.connection.delete("/space/#{space_id}/member/#{user_id}").status
50
71
  end
51
72
 
52
- def find_top_contacts(space_id)
53
- result = Podio.connection.get("/space/#{space_id}/member/top/").body
73
+ # @see https://developers.podio.com/doc/space-members/get-top-users-on-space-22461
74
+ def find_top_contacts(space_id, options = {})
75
+ result = Podio.connection.get("/space/#{space_id}/member/top/", options).body
54
76
  %w(employee external).each do |section|
55
77
  result[section]['profiles'].map! { |profile| Contact.new(profile) } if result[section].present? && result[section]['profiles'].present?
56
78
  end
57
79
  result
58
80
  end
59
81
 
82
+ def find_top_active(space_id, options = {})
83
+ response = Podio.connection.get("/space/#{space_id}/member/top_active/", options)
84
+ response.body.map { |profile| Contact.new(profile) }
85
+ end
86
+
60
87
  def find_memberships_for_user_in_org(org_id, user_id)
61
88
  list Podio.connection.get("/org/#{org_id}/member/#{user_id}/space_member/").body
62
89
  end
63
90
 
91
+ # @see https://developers.podio.com/doc/space-members/request-space-membership-6146231
64
92
  def request_membership(space_id)
65
93
  Podio.connection.post("/space/#{space_id}/member_request/").status
66
94
  end
67
95
 
96
+ # @see https://developers.podio.com/doc/space-members/accept-space-membership-request-6146271
68
97
  def accept_membership_request(space_id, space_member_request_id)
69
98
  Podio.connection.post("/space/#{space_id}/member_request/#{space_member_request_id}/accept").status
70
99
  end
100
+
101
+ def get_members_count(space_id)
102
+ Podio.connection.get("/space/#{space_id}/member/total").body
103
+ end
71
104
  end
72
105
  end
@@ -1,3 +1,4 @@
1
+ # @see https://developers.podio.com/doc/status
1
2
  class Podio::Status < ActivePodio::Base
2
3
  property :status_id, :integer
3
4
  property :value, :string
@@ -7,14 +8,21 @@ class Podio::Status < ActivePodio::Base
7
8
  property :alerts, :array
8
9
  property :ratings, :hash
9
10
  property :subscribed, :boolean
11
+ property :pinned, :boolean
10
12
  property :user_ratings, :hash
13
+ property :rights, :array
14
+ property :is_liked, :boolean
15
+ property :like_count, :integer
16
+ property :subscribed_count, :integer
17
+ property :push, :hash
18
+ property :presence, :hash
11
19
 
12
20
  # Properties for create
13
21
  property :file_ids, :array
14
22
  property :embed_id, :integer
15
23
  property :embed_file_id, :integer
16
24
 
17
- has_one :created_by, :class => 'Contact'
25
+ has_one :created_by, :class => 'ByLine'
18
26
  has_one :created_via, :class => 'Via'
19
27
  has_one :embed, :class => 'Embed'
20
28
  has_one :embed_file, :class => 'FileAttachment'
@@ -24,30 +32,34 @@ class Podio::Status < ActivePodio::Base
24
32
  has_many :shares, :class => 'AppStoreShare'
25
33
  has_many :files, :class => 'FileAttachment'
26
34
  has_many :questions, :class => 'Question'
27
-
35
+
28
36
  alias_method :id, :status_id
29
37
 
38
+ # @see https://developers.podio.com/doc/status/delete-a-status-message-22339
30
39
  def destroy
31
40
  Status.delete(self.id)
32
41
  end
33
-
42
+
34
43
  class << self
44
+ # @see https://developers.podio.com/doc/status/get-status-message-22337
35
45
  def find(id)
36
46
  member Podio.connection.get("/status/#{id}").body
37
47
  end
38
48
 
39
- def create(space_id, attributes)
49
+ # @see https://developers.podio.com/doc/status/add-new-status-message-22336
50
+ def create(space_id, attributes=[], options={})
40
51
  response = Podio.connection.post do |req|
41
- req.url "/status/space/#{space_id}/"
52
+ req.url("/status/space/#{space_id}/", options)
42
53
  req.body = attributes
43
54
  end
44
55
 
45
56
  response.body['status_id']
46
57
  end
47
-
58
+
59
+ # @see https://developers.podio.com/doc/status/delete-a-status-message-22339
48
60
  def delete(id)
49
61
  Podio.connection.delete("/status/#{id}").body
50
62
  end
51
63
  end
52
-
53
- end
64
+
65
+ end
@@ -0,0 +1,40 @@
1
+ # @see https://developers.podio.com/doc/stream
2
+ class Podio::StreamActivityGroup < ActivePodio::Base
3
+
4
+ property :group_id, :integer
5
+ property :kind, :string
6
+ property :type, :string
7
+ property :created_on, :datetime
8
+ property :activities, :array
9
+
10
+ has_one :data_ref, :class => 'Reference'
11
+ has_one :created_by, :class => 'ByLine'
12
+ has_one :created_via, :class => 'Via'
13
+
14
+ has_many :authors, :class => 'ByLine'
15
+
16
+ alias_method :id, :group_id
17
+
18
+ class << self
19
+
20
+ def find_by_ref(ref_type, ref_id, options = {})
21
+ list Podio.connection.get { |req|
22
+ req.url("/stream/#{ref_type}/#{ref_id}/activity_group", options)
23
+ }.body
24
+ end
25
+
26
+ def find_by_event_id(ref_type, ref_id, event_id, options={})
27
+ member Podio.connection.get { |req|
28
+ req.url("/stream/#{ref_type}/#{ref_id}/group/#{event_id}", options)
29
+ }.body
30
+ end
31
+
32
+ def find_for_data_ref(ref_type, ref_id, data_ref_type, data_ref_id, options={})
33
+ member Podio.connection.get { |req|
34
+ req.url("/stream/#{ref_type}/#{ref_id}/activity_group/#{data_ref_type}/#{data_ref_id}", options)
35
+ }.body
36
+ end
37
+
38
+ end
39
+
40
+ end
@@ -1,26 +1,25 @@
1
+ # @see https://developers.podio.com/doc/stream
1
2
  class Podio::StreamMute < ActivePodio::Base
2
3
  property :id, :integer
3
4
  property :type, :string
4
5
  property :title, :string
5
6
  property :data, :hash
6
- property :item, :boolean
7
- property :status, :boolean
8
- property :task, :boolean
9
7
 
10
8
  class << self
9
+ # @see https://developers.podio.com/doc/stream/get-mutes-in-global-stream-62742
11
10
  def find_all
12
- list Podio.connection.get('/stream/mute/v2/').body
11
+ list Podio.connection.get('/stream/mute/v2/').body
13
12
  end
14
13
 
15
- def create(scope_type, scope_id, object_type = nil)
14
+ # @see https://developers.podio.com/doc/stream/mute-object-from-global-stream-79424
15
+ def create(scope_type, scope_id)
16
16
  path = "/stream/mute/#{scope_type}/#{scope_id}"
17
- path += "/#{object_type}" unless object_type.nil?
18
17
  Podio.connection.post(path).status
19
18
  end
20
19
 
21
- def delete(scope_type, scope_id, object_type = nil)
20
+ # @see https://developers.podio.com/doc/stream/unmute-objects-from-the-global-stream-79426
21
+ def delete(scope_type, scope_id)
22
22
  path = "/stream/mute/#{scope_type}/#{scope_id}"
23
- path += "/#{object_type}" unless object_type.nil?
24
23
  Podio.connection.delete(path).status
25
24
  end
26
25
  end
@@ -1,3 +1,4 @@
1
+ # @see https://developers.podio.com/doc/stream
1
2
  class Podio::StreamObject < ActivePodio::Base
2
3
  property :id, :integer
3
4
  property :type, :string
@@ -15,7 +16,7 @@ class Podio::StreamObject < ActivePodio::Base
15
16
  has_one :app, :class => 'Application'
16
17
  has_one :space, :class => 'Space'
17
18
  has_one :org, :class => 'Organization'
18
-
19
+
19
20
  has_many :comments, :class => 'Comment'
20
21
  has_many :files, :class => 'FileAttachment'
21
22
  has_many :activity, :class => 'Activity'
@@ -23,44 +24,51 @@ class Podio::StreamObject < ActivePodio::Base
23
24
  alias_method :activities, :activity
24
25
 
25
26
  class << self
27
+ # @see https://developers.podio.com/doc/stream/get-global-stream-80012
26
28
  def find_all(options={})
27
29
  list Podio.connection.get { |req|
28
- req.url("/stream/v2/", options)
29
- }.body
30
+ req.url("/stream/", options)
31
+ }.body
30
32
  end
31
33
 
34
+ # @see https://developers.podio.com/doc/stream/get-space-stream-80039
32
35
  def find_all_by_space_id(space_id, options={})
33
36
  list Podio.connection.get { |req|
34
37
  req.url("/stream/space/#{space_id}/v2/", options)
35
- }.body
38
+ }.body
36
39
  end
37
40
 
41
+ # @see https://developers.podio.com/doc/stream/get-organization-stream-80038
38
42
  def find_all_by_org_id(org_id, options={})
39
43
  list Podio.connection.get { |req|
40
44
  req.url("/stream/org/#{org_id}/v2/", options)
41
- }.body
45
+ }.body
42
46
  end
43
47
 
48
+ # @see https://developers.podio.com/doc/stream/get-app-stream-264673
44
49
  def find_all_by_app_id(app_id, options={})
45
50
  list Podio.connection.get { |req|
46
51
  req.url("/stream/app/#{app_id}/", options)
47
- }.body
52
+ }.body
48
53
  end
49
54
 
55
+ # @see https://developers.podio.com/doc/stream/get-user-stream-1289318
50
56
  def find_all_by_user_id(user_id, options={})
51
57
  list Podio.connection.get { |req|
52
58
  req.url("/stream/user/#{user_id}/", options)
53
- }.body
59
+ }.body
54
60
  end
55
-
61
+
62
+ # @see https://developers.podio.com/doc/stream/get-stream-object-80054
56
63
  def find_by_ref(ref_type, ref_id)
57
64
  member Podio.connection.get("/stream/#{ref_type}/#{ref_id}/v2").body
58
65
  end
59
-
66
+
67
+ # @see https://developers.podio.com/doc/stream/get-personal-stream-1656647
60
68
  def find_all_personal(options={})
61
69
  list Podio.connection.get { |req|
62
70
  req.url("/stream/personal/", options)
63
- }.body
64
- end
71
+ }.body
72
+ end
65
73
  end
66
74
  end
@@ -1,31 +1,37 @@
1
+ # @see https://developers.podio.com/doc/subscriptions
1
2
  class Podio::Subscription < ActivePodio::Base
2
3
  property :started_on, :datetime
3
4
  property :notifications, :integer
4
5
  property :ref, :hash
5
6
 
6
7
  class << self
8
+ # @see https://developers.podio.com/doc/subscriptions/get-subscription-by-id-22446
7
9
  def find(id)
8
10
  member Podio.connection.get("/subscription/#{id}").body
9
11
  end
10
12
 
13
+ # @see https://developers.podio.com/doc/subscriptions/get-subscription-by-reference-22408
11
14
  def find_by_reference(ref_type, ref_id)
12
15
  member Podio.connection.get("/subscription/#{ref_type}/#{ref_id}").body
13
16
  end
14
17
 
18
+ # @see https://developers.podio.com/doc/subscriptions/subscribe-22409
15
19
  def create(ref_type, ref_id)
16
20
  Podio.connection.post("/subscription/#{ref_type}/#{ref_id}").body['subscription_id']
17
21
  end
18
22
 
23
+ # @see https://developers.podio.com/doc/subscriptions/unsubscribe-by-id-22445
19
24
  def delete(id)
20
25
  Podio.connection.delete("/subscription/#{id}")
21
26
  end
22
27
 
28
+ # @see https://developers.podio.com/doc/subscriptions/unsubscribe-by-reference-22410
23
29
  def delete_by_reference(ref_type, ref_id)
24
30
  Podio.connection.delete("/subscription/#{ref_type}/#{ref_id}")
25
31
  end
26
32
 
27
33
  def find_subscribers_by_reference(ref_type, ref_id)
28
- User.list Podio.connection.get("/subscription/#{ref_type}/#{ref_id}/").body
34
+ User.list Podio.connection.get("/subscription/#{ref_type}/#{ref_id}/user").body
29
35
  end
30
36
  end
31
37
  end
@@ -1,8 +1,10 @@
1
+ # @see https://developers.podio.com/doc/tags
1
2
  class Podio::Tag < ActivePodio::Base
2
3
  property :count, :integer
3
4
  property :text, :string
4
-
5
+
5
6
  class << self
7
+ # @see https://developers.podio.com/doc/tags/create-tags-22464
6
8
  def create(tagable_type, tagable_id, attributes)
7
9
  response = Podio.connection.post do |req|
8
10
  req.url "/tag/#{tagable_type}/#{tagable_id}/"
@@ -12,6 +14,7 @@ class Podio::Tag < ActivePodio::Base
12
14
  response.body
13
15
  end
14
16
 
17
+ # @see https://developers.podio.com/doc/tags/update-tags-39859
15
18
  def update(tagable_type, tagable_id, attributes)
16
19
  response = Podio.connection.put do |req|
17
20
  req.url "/tag/#{tagable_type}/#{tagable_id}/"
@@ -21,11 +24,13 @@ class Podio::Tag < ActivePodio::Base
21
24
  response.body
22
25
  end
23
26
 
27
+ # @see https://developers.podio.com/doc/tags/get-tags-on-app-22467
24
28
  def find_by_app(app_id, limit, text)
25
29
  text = CGI.escape(text) if text
26
30
  list Podio.connection.get("/tag/app/#{app_id}/?limit=#{limit}&text=#{text}").body
27
31
  end
28
32
 
33
+ # @see https://developers.podio.com/doc/tags/get-tags-on-app-top-68485
29
34
  def find_top_by_app(app_id, limit, text)
30
35
  text = CGI.escape(text) if text
31
36
  Podio.connection.get("/tag/app/#{app_id}/top/?limit=#{limit}&text=#{text}").body
@@ -1,10 +1,11 @@
1
+ # @see https://developers.podio.com/doc/tags
1
2
  class Podio::TagSearch < ActivePodio::Base
2
3
  property :id, :integer
3
4
  property :type, :string
4
5
  property :title, :string
5
6
  property :link, :string
6
7
  property :created_on, :datetime
7
-
8
+
8
9
  class << self
9
10
  def search_by_space(space_id, text)
10
11
  text = CGI.escape(text) if text
@@ -1,3 +1,4 @@
1
+ # @see https://developers.podio.com/doc/tasks
1
2
  class Podio::Task < ActivePodio::Base
2
3
  include ActivePodio::Updatable
3
4
 
@@ -6,10 +7,11 @@ class Podio::Task < ActivePodio::Base
6
7
  property :group, :string
7
8
  property :text, :string
8
9
  property :description, :string
10
+ property :rights, :array
9
11
  property :private, :boolean
10
12
  property :due_date, :date
11
13
  property :due_time, :time
12
- property :due_on, :datetime, :convert_incoming_local_datetime_to_utc => true
14
+ property :due_on, :datetime
13
15
  property :responsible, :hash
14
16
  property :space_id, :integer
15
17
  property :link, :string
@@ -19,6 +21,11 @@ class Podio::Task < ActivePodio::Base
19
21
  property :label_ids, :array # when inputting tasks
20
22
  property :labels, :array # when outputting tasks
21
23
  property :external_id, :string
24
+ property :subscribed, :boolean
25
+ property :subscribed_count, :integer
26
+ property :pinned, :boolean
27
+ property :push, :hash
28
+ property :presence, :hash
22
29
 
23
30
  # old references
24
31
  property :ref_type, :string
@@ -43,6 +50,7 @@ class Podio::Task < ActivePodio::Base
43
50
 
44
51
  alias_method :id, :task_id
45
52
 
53
+ # @see https://developers.podio.com/doc/tasks/create-task-22419
46
54
  def create
47
55
  result = self.create_multiple # Could return false if API call failed
48
56
  self.task_id = result.first.id if result
@@ -58,63 +66,83 @@ class Podio::Task < ActivePodio::Base
58
66
  end
59
67
  end
60
68
 
69
+ # @see https://developers.podio.com/doc/tasks/delete-task-77179
61
70
  def destroy
62
71
  self.class.delete(self.id)
63
72
  end
64
73
 
74
+ # @see https://developers.podio.com/doc/tasks/update-task-reference-170733
65
75
  def update_reference(ref_type, ref_id)
66
76
  self.class.update_reference(self.id, ref_type, ref_id)
67
77
  end
68
78
 
79
+ # @see https://developers.podio.com/doc/tasks/remove-task-reference-6146114
69
80
  def delete_reference
70
81
  self.class.delete_reference(self.id)
71
82
  end
72
83
 
84
+ # @see https://developers.podio.com/doc/tasks/update-task-labels-151769
73
85
  def update_labels(label_ids)
74
86
  self.class.update_labels(self.id, label_ids)
75
87
  end
76
88
 
89
+ # @see https://developers.podio.com/doc/tasks/complete-task-22432
77
90
  def complete
78
91
  self.class.complete(self.id)
79
92
  end
80
93
 
94
+ # @see https://developers.podio.com/doc/tasks/incomplete-task-22433
81
95
  def uncomplete
82
96
  self.class.incomplete(self.id)
83
97
  end
84
98
 
99
+ # @see https://developers.podio.com/doc/tasks/rank-task-81015
85
100
  def rank(previous_task, next_task)
86
101
  self.class.rank(self.id, previous_task && previous_task.to_i, next_task && next_task.to_i)
87
102
  end
88
103
 
89
- handle_api_errors_for :create_multiple, :destroy, :complete, :uncomplete, :update_reference # Call must be made after the methods to handle have been defined
90
-
91
104
  class << self
92
- def create(attributes)
105
+ # @see https://developers.podio.com/doc/tasks/create-task-22419
106
+ def create(attributes, options = {})
93
107
  response = Podio.connection.post do |req|
94
- req.url "/task/"
108
+ req.url("/task/", options)
95
109
  req.body = attributes
96
110
  end
97
111
 
98
112
  list [response.body].flatten
99
113
  end
100
114
 
101
- def create_with_ref(ref_type, ref_id, attributes)
115
+ # @see https://developers.podio.com/doc/tasks/create-task-with-reference-22420
116
+ def create_with_ref(ref_type, ref_id, attributes, options = {})
102
117
  response = Podio.connection.post do |req|
103
- req.url "/task/#{ref_type}/#{ref_id}/"
118
+ req.url("/task/#{ref_type}/#{ref_id}/", options)
104
119
  req.body = attributes
105
120
  end
106
121
 
107
122
  list [response.body].flatten
108
123
  end
109
124
 
125
+ # @see https://developers.podio.com/doc/tasks/update-task-10583674
126
+ def update(id, attributes, options = {})
127
+ response = Podio.connection.put do |req|
128
+ req.url("/task/#{id}", options)
129
+ req.body = attributes
130
+ end
131
+
132
+ member response.body
133
+ end
134
+
135
+ # @see https://developers.podio.com/doc/tasks/update-task-description-76982
110
136
  def update_description(id, description)
111
137
  Podio.connection.put("/task/#{id}/description", {:description => description}).status
112
138
  end
113
139
 
140
+ # @see https://developers.podio.com/doc/tasks/update-task-text-22428
114
141
  def update_text(id, text)
115
142
  Podio.connection.put("/task/#{id}/text", {:text => text}).status
116
143
  end
117
144
 
145
+ # @see https://developers.podio.com/doc/tasks/update-task-private-22434
118
146
  def update_private(id, private_flag)
119
147
  Podio.connection.put("/task/#{id}/private", {:private => private_flag}).status
120
148
  end
@@ -123,88 +151,116 @@ class Podio::Task < ActivePodio::Base
123
151
  Podio.connection.put("/task/#{id}/due_date", {:due_date => due_date}).status
124
152
  end
125
153
 
154
+ # @see https://developers.podio.com/doc/tasks/update-task-due-on-3442633
126
155
  def update_due_on(id, options)
127
156
  Podio.connection.put("/task/#{id}/due_on", options).status
128
157
  end
129
158
 
159
+ # @see https://developers.podio.com/doc/tasks/assign-task-22412
130
160
  def update_assignee(id, user_id)
131
161
  Podio.connection.post("/task/#{id}/assign", {:responsible => user_id}).status
132
162
  end
133
163
 
164
+ # @see https://developers.podio.com/doc/tasks/update-task-reference-170733
134
165
  def update_reference(id, ref_type, ref_id)
135
166
  Podio.connection.put("/task/#{id}/ref", {:ref_type => ref_type, :ref_id => ref_id}).status
136
167
  end
137
168
 
169
+ # @see https://developers.podio.com/doc/tasks/remove-task-reference-6146114
138
170
  def delete_reference(task_id)
139
171
  Podio.connection.delete("/task/#{task_id}/ref").status
140
172
  end
141
173
 
174
+ # @see https://developers.podio.com/doc/tasks/update-task-labels-151769
142
175
  def update_labels(id, label_ids)
143
176
  Podio.connection.put("/task/#{id}/label/", label_ids).status
144
177
  end
145
178
 
179
+ # @see https://developers.podio.com/doc/tasks/delete-task-77179
146
180
  def delete(id)
147
181
  Podio.connection.delete("/task/#{id}").status
148
182
  end
149
183
 
184
+ # @see https://developers.podio.com/doc/tasks/complete-task-22432
150
185
  def complete(id)
151
186
  Podio.connection.post("/task/#{id}/complete").body
152
187
  end
153
188
 
189
+ # @see https://developers.podio.com/doc/tasks/incomplete-task-22433
154
190
  def incomplete(id)
155
191
  Podio.connection.post("/task/#{id}/incomplete").body
156
192
  end
157
193
 
194
+ # @see https://developers.podio.com/doc/tasks/rank-task-81015
158
195
  def rank(id, before_task_id, after_task_id)
159
196
  Podio.connection.post("/task/#{id}/rank", {:before => before_task_id, :after => after_task_id}).body
160
197
  end
161
198
 
162
- def find(id)
163
- member Podio.connection.get("/task/#{id}").body
199
+ # @see https://developers.podio.com/doc/tasks/get-task-22413
200
+ def find(id, options = {})
201
+ member Podio.connection.get("/task/#{id}", options).body
164
202
  end
165
203
 
204
+ # @see https://developers.podio.com/doc/tasks/get-tasks-with-reference-22426
166
205
  def find_for_reference(ref_type, ref_id)
167
206
  list Podio.connection.get("/task/#{ref_type}/#{ref_id}/").body
168
207
  end
169
208
 
209
+ # @see https://developers.podio.com/doc/tasks/get-tasks-77949
170
210
  def find_all(options={})
171
211
  list Podio.connection.get { |req|
172
212
  req.url('/task/', options)
173
213
  }.body
174
214
  end
175
215
 
176
- def find_summary
177
- response = Podio.connection.get("/task/summary").body
216
+ # @see https://developers.podio.com/doc/tasks/get-task-summary-1612017
217
+ def find_summary(options={})
218
+ response = Podio.connection.get { |req|
219
+ req.url("/task/summary", options)
220
+ }.body
178
221
  response['overdue']['tasks'] = list(response['overdue']['tasks'])
179
222
  response['today']['tasks'] = list(response['today']['tasks'])
180
223
  response['other']['tasks'] = list(response['other']['tasks'])
181
224
  response
182
225
  end
183
226
 
184
- def find_summary_for_org(org_id, limit=nil)
185
- response = Podio.connection.get("/task/org/#{org_id}/summary" +
186
- ((limit != nil) ? "?limit=#{limit}" : "")).body
227
+ # @see https://developers.podio.com/doc/tasks/get-task-summary-for-organization-1612063
228
+ def find_summary_for_org(org_id, options={})
229
+ response = Podio.connection.get { |req|
230
+ req.url("/task/org/#{org_id}/summary", options)
231
+ }.body
187
232
  response['overdue']['tasks'] = list(response['overdue']['tasks'])
188
233
  response['today']['tasks'] = list(response['today']['tasks'])
189
234
  response['other']['tasks'] = list(response['other']['tasks'])
190
235
  response
191
236
  end
192
237
 
193
- def find_summary_for_reference(ref_type, ref_id)
194
- response = Podio.connection.get("/task/#{ref_type}/#{ref_id}/summary").body
238
+ # @see https://developers.podio.com/doc/tasks/get-task-summary-for-reference-1657980
239
+ def find_summary_for_reference(ref_type, ref_id, options={})
240
+ response = Podio.connection.get { |req|
241
+ req.url("/task/#{ref_type}/#{ref_id}/summary", options)
242
+ }.body
195
243
  response['overdue']['tasks'] = list(response['overdue']['tasks'])
196
244
  response['today']['tasks'] = list(response['today']['tasks'])
197
245
  response['other']['tasks'] = list(response['other']['tasks'])
198
246
  response
199
247
  end
200
248
 
201
- def find_personal_summary
202
- response = Podio.connection.get("/task/personal/summary").body
249
+ # @see https://developers.podio.com/doc/tasks/get-task-summary-for-personal-1657217
250
+ def find_personal_summary(options={})
251
+ response = Podio.connection.get { |req|
252
+ req.url("/task/personal/summary", options)
253
+ }.body
203
254
  response['overdue']['tasks'] = list(response['overdue']['tasks'])
204
255
  response['today']['tasks'] = list(response['today']['tasks'])
205
256
  response['other']['tasks'] = list(response['other']['tasks'])
206
257
  response
207
258
  end
208
259
 
260
+ # @see https://developers.podio.com/doc/tasks/get-task-count-38316458
261
+ def count_by_ref(ref_type, ref_id)
262
+ Podio.connection.get("/task/#{ref_type}/#{ref_id}/count").body['count']
263
+ end
264
+
209
265
  end
210
266
  end