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,3 +1,4 @@
1
+ # @see https://developers.podio.com/doc/embeds
1
2
  class Podio::Embed < ActivePodio::Base
2
3
 
3
4
  property :embed_id, :integer
@@ -6,10 +7,8 @@ class Podio::Embed < ActivePodio::Base
6
7
  property :type, :string
7
8
  property :title, :string
8
9
  property :description, :string
9
- property :created_on, :datetime
10
- property :provider_name, :string
11
10
  property :embed_html, :string
12
- property :embed_height, :boolean
11
+ property :embed_height, :integer
13
12
  property :embed_width, :integer
14
13
 
15
14
  has_many :files, :class => 'FileAttachment'
@@ -18,6 +17,7 @@ class Podio::Embed < ActivePodio::Base
18
17
 
19
18
  class << self
20
19
 
20
+ # @see https://developers.podio.com/doc/embeds/add-an-embed-726483
21
21
  def create(url)
22
22
  response = Podio.connection.post do |req|
23
23
  req.url '/embed/'
@@ -31,4 +31,4 @@ class Podio::Embed < ActivePodio::Base
31
31
  end
32
32
 
33
33
  end
34
- end
34
+ end
@@ -0,0 +1,71 @@
1
+ class Podio::Experiment < ActivePodio::Base
2
+
3
+ class << self
4
+
5
+ def create_subject(attributes)
6
+ response = Podio.client.trusted_connection.post do |req|
7
+ req.url '/experiment/subject/'
8
+ req.body = attributes
9
+ end
10
+ response.body['identifier']
11
+ end
12
+
13
+ def associate_subject(identifier)
14
+ Podio.connection.post("/experiment/subject/#{identifier}/associate")
15
+ end
16
+
17
+ def find_variation_for_subject(identifier, experiment, supported_variations)
18
+ response = Podio.client.trusted_connection.post do |req|
19
+ req.url "/experiment/#{experiment}/subject/#{identifier}"
20
+ req.body = supported_variations
21
+ end
22
+ response.body['variation']
23
+ end
24
+
25
+ def find_variation_for_user(experiment, supported_variations)
26
+ response = Podio.connection.post do |req|
27
+ req.url "/experiment/#{experiment}/user"
28
+ req.body = supported_variations
29
+ end
30
+ response.body['variation']
31
+ end
32
+
33
+ def find_all
34
+ Podio.connection.get('/experiment/').body
35
+ end
36
+
37
+ def create_variation(experiment, variation)
38
+ Podio.connection.post("/experiment/#{experiment}/variation/#{variation}")
39
+ end
40
+
41
+ def activate_variation(experiment, variation)
42
+ Podio.connection.post("/experiment/#{experiment}/variation/#{variation}/activate")
43
+ end
44
+
45
+ def deactivate_variation(experiment, variation)
46
+ Podio.connection.post("/experiment/#{experiment}/variation/#{variation}/deactivate")
47
+ end
48
+
49
+ def assign_variation(experiment, variation, attributes)
50
+ Podio.connection.post do |req|
51
+ req.url "/experiment/#{experiment}/variation/#{variation}/assign"
52
+ req.body = attributes
53
+ end
54
+ end
55
+
56
+ def combined(supported_variations_map, identifier=nil, attributes={})
57
+ connection = Podio.client.oauth_token ? Podio.client.connection : Podio.client.trusted_connection
58
+
59
+ body = {
60
+ "experiments" => supported_variations_map
61
+ }
62
+
63
+ body["identifier"] = identifier if identifier.present?
64
+
65
+ connection.post do |req|
66
+ req.url "/experiment/combined"
67
+ req.body = body
68
+ end.body
69
+ end
70
+ end
71
+ end
@@ -1,3 +1,4 @@
1
+ # @see https://developers.podio.com/doc/files
1
2
  class Podio::ExternalFile < ActivePodio::Base
2
3
  property :external_file_id, :string
3
4
  property :name, :string
@@ -17,10 +18,14 @@ class Podio::ExternalFile < ActivePodio::Base
17
18
  }.body
18
19
  end
19
20
 
20
- def create_from_external_file_id(linked_account_id, external_file_id)
21
+
22
+ def create_from_external_file_id(linked_account_id, external_file_id, preserve_permissions=false)
21
23
  response = Podio.client.connection.post do |req|
22
24
  req.url "/file/linked_account/#{linked_account_id}/"
23
- req.body = { :external_file_id => external_file_id }
25
+ req.body = {
26
+ :external_file_id => external_file_id,
27
+ :preserve_permissions => preserve_permissions
28
+ }
24
29
  end
25
30
 
26
31
  member response.body
@@ -1,6 +1,8 @@
1
+ # @see https://developers.podio.com/doc/files
1
2
  class Podio::FileAttachment < ActivePodio::Base
2
3
  property :file_id, :integer
3
4
  property :link, :string
5
+ property :link_target, :string
4
6
  property :perma_link, :string
5
7
  property :thumbnail_link, :string
6
8
  property :hosted_by, :string
@@ -11,10 +13,15 @@ class Podio::FileAttachment < ActivePodio::Base
11
13
  property :context, :hash
12
14
  property :created_on, :datetime
13
15
  property :rights, :array
16
+ property :subscribed, :boolean
17
+ property :subscribed_count, :integer
18
+ property :push, :hash
19
+ property :presence, :hash
14
20
 
15
21
  has_one :created_by, :class => 'ByLine'
16
22
  has_one :created_via, :class => 'Via'
17
23
  has_many :replaces, :class => 'FileAttachment'
24
+ has_many :comments, :class => 'Comment'
18
25
 
19
26
  alias_method :id, :file_id
20
27
 
@@ -30,8 +37,13 @@ class Podio::FileAttachment < ActivePodio::Base
30
37
  'file'
31
38
  end
32
39
 
40
+ def raw_data
41
+ Podio.connection.get(self.link).body
42
+ end
43
+
33
44
  class << self
34
45
  # Accepts an open file stream along with a file name and uploads the file to Podio
46
+ # @see https://developers.podio.com/doc/files/upload-file-1004361
35
47
  def upload(file_stream, file_name)
36
48
  response = Podio.client.connection.post do |req|
37
49
  req.options[:timeout] = 1200
@@ -53,6 +65,7 @@ class Podio::FileAttachment < ActivePodio::Base
53
65
  end
54
66
 
55
67
  # Attach a file to an existing reference
68
+ # @see https://developers.podio.com/doc/files/attach-file-22518
56
69
  def attach(id, ref_type, ref_id)
57
70
  Podio.connection.post do |req|
58
71
  req.url "/file/#{id}/attach"
@@ -60,40 +73,48 @@ class Podio::FileAttachment < ActivePodio::Base
60
73
  end
61
74
  end
62
75
 
76
+ # @see https://developers.podio.com/doc/files/copy-file-89977
63
77
  def copy(id)
64
78
  Podio.connection.post("/file/#{id}/copy").body['file_id']
65
79
  end
66
80
 
81
+ # @see https://developers.podio.com/doc/files/delete-file-22453
67
82
  def delete(id)
68
83
  Podio.connection.delete("/file/#{id}")
69
84
  end
70
85
 
86
+ # @see https://developers.podio.com/doc/files/get-file-22451
71
87
  def find(id)
72
88
  member Podio.connection.get("/file/#{id}").body
73
89
  end
74
90
 
91
+ # @see https://developers.podio.com/doc/files/download-file-1004147
75
92
  def find_raw(id)
76
93
  Podio.client.connection.get("/file/#{id}/raw").body
77
94
  end
78
95
 
96
+ # @see https://developers.podio.com/doc/files/get-files-on-app-22472
79
97
  def find_for_app(app_id, options={})
80
98
  list Podio.connection.get { |req|
81
99
  req.url("/file/app/#{app_id}/", options)
82
100
  }.body
83
101
  end
84
102
 
103
+ # @see https://developers.podio.com/doc/files/get-files-on-space-22471
85
104
  def find_for_space(space_id, options={})
86
105
  list Podio.connection.get { |req|
87
106
  req.url("/file/space/#{space_id}/", options)
88
107
  }.body
89
108
  end
90
109
 
110
+ # @see https://developers.podio.com/doc/files/get-latest-files-on-app-22473
91
111
  def find_latest_for_app(app_id, options={})
92
112
  list Podio.connection.get { |req|
93
113
  req.url("/file/app/#{app_id}/latest/", options)
94
114
  }.body
95
115
  end
96
116
 
117
+ # @see https://developers.podio.com/doc/files/get-latest-files-on-space-22470
97
118
  def find_latest_for_space(space_id, options={})
98
119
  list Podio.connection.get { |req|
99
120
  req.url("/file/space/#{space_id}/latest/", options)
@@ -106,6 +127,7 @@ class Podio::FileAttachment < ActivePodio::Base
106
127
  }.body
107
128
  end
108
129
 
130
+ # @see https://developers.podio.com/doc/files/replace-file-22450
109
131
  def replace(old_file_id, new_file_id)
110
132
  Podio.connection.post { |req|
111
133
  req.url "/file/#{new_file_id}/replace"
@@ -113,6 +135,7 @@ class Podio::FileAttachment < ActivePodio::Base
113
135
  }.body
114
136
  end
115
137
 
138
+ # @see https://developers.podio.com/doc/files/update-file-22454
116
139
  def update(id, description)
117
140
  Podio.connection.put { |req|
118
141
  req.url "/file/#{file_id}"
@@ -1,3 +1,4 @@
1
+ # @see https://developers.podio.com/doc/forms
1
2
  class Podio::Form < ActivePodio::Base
2
3
  property :form_id, :integer
3
4
  property :app_id, :integer
@@ -16,6 +17,7 @@ class Podio::Form < ActivePodio::Base
16
17
  delegate_to_hash :text, :submit, :success, :heading, :description, :setter => true
17
18
 
18
19
  class << self
20
+ # @see https://developers.podio.com/doc/forms/create-form-53803
19
21
  def create(app_id, attributes)
20
22
  response = Podio.connection.post do |req|
21
23
  req.url "/form/app/#{app_id}/"
@@ -25,6 +27,7 @@ class Podio::Form < ActivePodio::Base
25
27
  response.body['form_id']
26
28
  end
27
29
 
30
+ # @see https://developers.podio.com/doc/forms/update-form-53808
28
31
  def update(form_id, attributes)
29
32
  response = Podio.connection.put do |req|
30
33
  req.url "/form/#{form_id}"
@@ -34,20 +37,24 @@ class Podio::Form < ActivePodio::Base
34
37
  response.status
35
38
  end
36
39
 
40
+ # @see https://developers.podio.com/doc/forms/get-forms-53771
37
41
  def find_all_for_app(app_id)
38
42
  list Podio.connection.get { |req|
39
43
  req.url("/form/app/#{app_id}/")
40
44
  }.body
41
45
  end
42
46
 
47
+ # @see https://developers.podio.com/doc/forms/get-form-53754
43
48
  def find(form_id)
44
49
  member Podio.connection.get("/form/#{form_id}").body
45
50
  end
46
51
 
52
+ # @see https://developers.podio.com/doc/forms/deactivate-form-1107378
47
53
  def disable(form_id)
48
54
  Podio.connection.post("/form/#{form_id}/deactivate").body
49
55
  end
50
56
 
57
+ # @see https://developers.podio.com/doc/forms/activate-form-1107439
51
58
  def enable(form_id)
52
59
  Podio.connection.post("/form/#{form_id}/activate").body
53
60
  end
@@ -0,0 +1,12 @@
1
+
2
+ class Podio::Friend < ActivePodio::Base
3
+
4
+ class << self
5
+
6
+ def delete(user_ids)
7
+ Podio.connection.delete("/friend/#{user_ids}").status
8
+ end
9
+
10
+ end
11
+
12
+ end
@@ -0,0 +1,73 @@
1
+ class Podio::Grant < ActivePodio::Base
2
+
3
+ property :ref_type, :string
4
+ property :ref_id, :integer
5
+ property :people, :hash
6
+ property :action, :string
7
+ property :message, :string
8
+ property :ref, :hash
9
+ property :created_on, :datetime
10
+
11
+ has_one :created_by, :class => 'ByLine'
12
+ has_one :user, :class => 'Contact'
13
+
14
+ def save
15
+ self.class.create(self.ref_type, self.ref_id, self.attributes)
16
+ end
17
+
18
+ class << self
19
+ # https://hoist.podio.com/api/item/16168841
20
+ def create(ref_type, ref_id, attributes={})
21
+ response = Podio.connection.post do |req|
22
+ req.url "/grant/#{ref_type}/#{ref_id}"
23
+ req.body = attributes
24
+ end
25
+
26
+ response.body
27
+ end
28
+
29
+ # https://hoist.podio.com/api/item/16490748
30
+ def find_own(ref_type, ref_id, options = {})
31
+ response = Podio.connection.get { |req|
32
+ req.url("/grant/#{ref_type}/#{ref_id}/own", options)
33
+ }
34
+ if response.status == 200
35
+ member response.body
36
+ else
37
+ nil
38
+ end
39
+ end
40
+
41
+ # https://hoist.podio.com/api/item/16491464
42
+ def find_all(ref_type, ref_id, options = {})
43
+ list Podio.connection.get { |req|
44
+ req.url("grant/#{ref_type}/#{ref_id}/", options)
45
+ }.body
46
+ end
47
+
48
+ # https://hoist.podio.com/api/item/16496711
49
+ def delete(ref_type, ref_id, user_id)
50
+ Podio.connection.delete("grant/#{ref_type}/#{ref_id}/#{user_id}").body
51
+ end
52
+
53
+ # https://hoist.podio.com/api/item/19275931
54
+ def count_by_reference(ref_type, ref_id)
55
+ Podio.connection.get("/grant/#{ref_type}/#{ref_id}/count").body['count']
56
+ end
57
+
58
+ # https://hoist.podio.com/api/item/19389786
59
+ def find_for_user_on_space(space_id, user_id, options = {})
60
+ list Podio.connection.get { |req|
61
+ req.url("/grant/space/#{space_id}/user/#{user_id}/", options)
62
+ }.body
63
+ end
64
+
65
+ # https://hoist.podio.com/api/item/22330891
66
+ def find_own_on_org(org_id, options = {})
67
+ list Podio.connection.get { |req|
68
+ req.url("/grant/org/#{org_id}/own/", options)
69
+ }.body
70
+ end
71
+
72
+ end
73
+ end
@@ -1,3 +1,4 @@
1
+ # @see https://developers.podio.com/doc/hooks
1
2
  class Podio::Hook < ActivePodio::Base
2
3
  property :hook_id, :integer
3
4
  property :status, :string
@@ -8,11 +9,13 @@ class Podio::Hook < ActivePodio::Base
8
9
 
9
10
  attr_accessor :hookable_type, :hookable_id
10
11
 
12
+ # @see https://developers.podio.com/doc/hooks/create-hook-215056
11
13
  def create
12
14
  self.hook_id = self.class.create(self.hookable_type, self.hookable_id, attributes)
13
15
  end
14
-
16
+
15
17
  class << self
18
+ # @see https://developers.podio.com/doc/hooks/create-hook-215056
16
19
  def create(hookable_type, hookable_id, attributes)
17
20
  response = Podio.connection.post do |req|
18
21
  req.url "/hook/#{hookable_type}/#{hookable_id}/"
@@ -21,28 +24,32 @@ class Podio::Hook < ActivePodio::Base
21
24
 
22
25
  response.body['hook_id']
23
26
  end
24
-
27
+
28
+ # @see https://developers.podio.com/doc/hooks/request-hook-verification-215232
25
29
  def verify(hook_id)
26
30
  Podio.connection.post do |req|
27
31
  req.url "/hook/#{hook_id}/verify/request"
28
32
  end
29
33
  end
30
34
 
35
+ # @see https://developers.podio.com/doc/hooks/validate-hook-verification-215241
31
36
  def validate(hook_id, code)
32
37
  Podio.connection.post do |req|
33
38
  req.url "/hook/#{hook_id}/verify/validate"
34
39
  req.body = {:code => code}
35
40
  end
36
41
  end
37
-
42
+
43
+ # @see https://developers.podio.com/doc/hooks/delete-hook-215291
38
44
  def delete(hook_id)
39
45
  Podio.connection.delete do |req|
40
46
  req.url "/hook/#{hook_id}"
41
- end
47
+ end
42
48
  end
43
-
49
+
50
+ # @see https://developers.podio.com/doc/hooks/get-hooks-215285
44
51
  def find_all_for(hookable_type, hookable_id)
45
52
  list Podio.connection.get("/hook/#{hookable_type}/#{hookable_id}/").body
46
53
  end
47
54
  end
48
- end
55
+ end
@@ -1,3 +1,4 @@
1
+ # @see https://developers.podio.com/doc/importer
1
2
  class Podio::Importer < ActivePodio::Base
2
3
 
3
4
  class << self
@@ -14,10 +15,12 @@ class Podio::Importer < ActivePodio::Base
14
15
  list Podio.connection.get("/importer/#{file_id}/column/").body
15
16
  end
16
17
 
18
+ # @see https://developers.podio.com/doc/importer/get-info-5929504
17
19
  def get_info(file_id)
18
20
  Podio.connection.get("/importer/#{file_id}/info").body
19
21
  end
20
22
 
23
+ # @see https://developers.podio.com/doc/importer/get-preview-5936702
21
24
  def preview(file_id, row, options)
22
25
  response = Podio.connection.post do |req|
23
26
  req.url "/importer/#{file_id}/preview/#{row}"
@@ -1,3 +1,4 @@
1
+ # @see https://developers.podio.com/doc/integrations
1
2
  class Podio::Integration < ActivePodio::Base
2
3
  include ActivePodio::Updatable
3
4
 
@@ -11,34 +12,38 @@ class Podio::Integration < ActivePodio::Base
11
12
  property :updating, :boolean
12
13
  property :last_updated_on, :datetime
13
14
  property :created_on, :datetime
14
-
15
+
15
16
  has_one :created_by, :class => 'ByLine'
16
17
 
17
18
  alias_method :id, :integration_id
18
19
 
20
+ # @see https://developers.podio.com/doc/integrations/create-integration-86839
19
21
  def create
20
22
  self.integration_id = Integration.create(self.app_id, attributes)
21
23
  end
22
24
 
25
+ # @see https://developers.podio.com/doc/integrations/update-integration-86843
23
26
  def update
24
27
  Integration.update(self.app_id, attributes)
25
28
  end
26
29
 
30
+ # @see https://developers.podio.com/doc/integrations/update-integration-mapping-86865
27
31
  def update_mapping
28
32
  Integration.update_mapping(self.app_id, attributes)
29
33
  end
30
-
34
+
35
+ # @see https://developers.podio.com/doc/integrations/delete-integration-86876
31
36
  def destroy
32
37
  Integration.delete(self.app_id)
33
38
  end
34
39
 
40
+ # @see https://developers.podio.com/doc/integrations/refresh-integration-86987
35
41
  def refresh
36
42
  Integration.refresh(self.app_id)
37
43
  end
38
-
39
- handle_api_errors_for :create, :update, :update_mapping
40
-
44
+
41
45
  class << self
46
+ # @see https://developers.podio.com/doc/integrations/create-integration-86839
42
47
  def create(app_id, attributes)
43
48
  response = Podio.connection.post do |req|
44
49
  req.url "/integration/#{app_id}"
@@ -48,6 +53,7 @@ class Podio::Integration < ActivePodio::Base
48
53
  response.body['integration_id']
49
54
  end
50
55
 
56
+ # @see https://developers.podio.com/doc/integrations/update-integration-86843
51
57
  def update(app_id, attributes)
52
58
  response = Podio.connection.put do |req|
53
59
  req.url "/integration/#{app_id}"
@@ -57,6 +63,7 @@ class Podio::Integration < ActivePodio::Base
57
63
  response.body
58
64
  end
59
65
 
66
+ # @see https://developers.podio.com/doc/integrations/update-integration-mapping-86865
60
67
  def update_mapping(app_id, attributes)
61
68
  response = Podio.connection.put do |req|
62
69
  req.url "/integration/#{app_id}/mapping"
@@ -64,18 +71,22 @@ class Podio::Integration < ActivePodio::Base
64
71
  end
65
72
  end
66
73
 
74
+ # @see https://developers.podio.com/doc/integrations/get-integration-86821
67
75
  def find(app_id)
68
76
  member Podio.connection.get("/integration/#{app_id}").body
69
77
  end
70
78
 
79
+ # @see https://developers.podio.com/doc/integrations/get-available-fields-86890
71
80
  def find_available_fields_for(app_id)
72
81
  list Podio.connection.get("/integration/#{app_id}/field/").body
73
82
  end
74
-
83
+
84
+ # @see https://developers.podio.com/doc/integrations/delete-integration-86876
75
85
  def delete(app_id)
76
86
  Podio.connection.delete("/integration/#{app_id}").status
77
87
  end
78
88
 
89
+ # @see https://developers.podio.com/doc/integrations/refresh-integration-86987
79
90
  def refresh(app_id)
80
91
  Podio.connection.post("/integration/#{app_id}/refresh").status
81
92
  end