podio 0.6.0 → 0.7.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 (37) hide show
  1. data/.travis.yml +4 -0
  2. data/LICENSE +1 -1
  3. data/lib/podio.rb +7 -3
  4. data/lib/podio/active_podio/base.rb +121 -54
  5. data/lib/podio/client.rb +15 -2
  6. data/lib/podio/error.rb +1 -0
  7. data/lib/podio/middleware/error_response.rb +2 -0
  8. data/lib/podio/models/app_store_share.rb +8 -4
  9. data/lib/podio/models/application.rb +4 -0
  10. data/lib/podio/models/{calendar.rb → calendar_event.rb} +13 -1
  11. data/lib/podio/models/contact.rb +1 -0
  12. data/lib/podio/models/contract.rb +17 -1
  13. data/lib/podio/models/email_subscription_setting.rb +1 -0
  14. data/lib/podio/models/external_file.rb +30 -0
  15. data/lib/podio/models/file_attachment.rb +30 -12
  16. data/lib/podio/models/filter.rb +33 -2
  17. data/lib/podio/models/item.rb +23 -0
  18. data/lib/podio/models/item_field.rb +1 -1
  19. data/lib/podio/models/linked_account.rb +32 -0
  20. data/lib/podio/models/meeting.rb +55 -30
  21. data/lib/podio/models/meeting_participiant.rb +10 -4
  22. data/lib/podio/models/notification_group.rb +3 -4
  23. data/lib/podio/models/organization.rb +11 -9
  24. data/lib/podio/models/organization_member.rb +2 -1
  25. data/lib/podio/models/organization_profile.rb +1 -0
  26. data/lib/podio/models/question_answer.rb +3 -2
  27. data/lib/podio/models/referral.rb +25 -0
  28. data/lib/podio/models/reminder.rb +2 -2
  29. data/lib/podio/models/search.rb +34 -5
  30. data/lib/podio/models/space_invitation.rb +9 -4
  31. data/lib/podio/models/space_member.rb +8 -0
  32. data/lib/podio/models/subscription.rb +7 -3
  33. data/lib/podio/models/user_status.rb +2 -1
  34. data/lib/podio/models/widget.rb +2 -0
  35. data/lib/podio/version.rb +1 -1
  36. data/test/active_podio_test.rb +2 -2
  37. metadata +14 -11
@@ -1,5 +1,11 @@
1
- class Podio::MeetingParticipant < Podio::Profile
2
- alias_method :id, :profile_id
3
-
4
- property :user_id, :integer
1
+ class Podio::MeetingParticipant < ActivePodio::Base
2
+ property :status, :string
3
+
4
+ has_one :profile, :class => 'Contact'
5
+
6
+ delegate :name, :to => :profile
7
+
8
+ def id
9
+ self.profile.try(:profile_id)
10
+ end
5
11
  end
@@ -2,9 +2,8 @@
2
2
  class Podio::NotificationGroup < ActivePodio::Base
3
3
  property :context, :hash
4
4
  property :notifications, :hash
5
- delegate_to_hash :context, :ref, :data, :comment_count
6
- delegate_to_hash :data, :link
7
-
5
+ delegate_to_hash :context, :ref, :data, :comment_count, :link, :space
6
+
8
7
  class << self
9
8
  def find_all(options={})
10
9
  list Podio.connection.get { |req|
@@ -16,7 +15,7 @@ class Podio::NotificationGroup < ActivePodio::Base
16
15
  member Podio.connection.get("/notification/#{id}/v2").body
17
16
  end
18
17
 
19
-
18
+
20
19
  def mark_as_viewed_by_ref(ref_type, ref_id)
21
20
  Podio.connection.post("/notification/#{ref_type}/#{ref_id}/viewed").status
22
21
  end
@@ -18,29 +18,31 @@ class Podio::Organization < ActivePodio::Base
18
18
  property :contact_count, :integer
19
19
  property :billing_interval, :integer
20
20
  property :rights, :array
21
- property :verified_domain, :string
21
+ property :verified_domain, :string # TODO: Remove this, it's deprecated
22
+ property :domains, :array
22
23
  property :rank, :integer
23
24
  property :contract_status, :string
24
25
  property :type, :string
25
26
  property :segment, :string
27
+ property :segment_size, :integer
26
28
 
27
29
  has_one :created_by, :class => 'ByLine'
28
30
 
29
31
  alias_method :id, :org_id
30
32
 
31
33
  def create
32
- attributes = Organization.create(:name => name, :logo => logo)
34
+ attributes = Organization.create(:name => name, :logo => logo, :segment_size => segment_size)
33
35
  self.org_id = attributes['org_id']
34
36
  self.url = attributes['url']
35
37
  self.url_label = attributes['url_label']
36
38
  end
37
39
 
38
40
  def update
39
- Organization.update(id, {:name => name, :logo => logo, :url_label => url_label, :billing_interval => billing_interval})
41
+ Organization.update(id, {:name => name, :logo => logo, :url_label => url_label, :billing_interval => billing_interval, :segment_size => segment_size})
40
42
  end
41
-
42
- handle_api_errors_for :create, :update # Call must be made after the methods to handle have been defined
43
-
43
+
44
+ handle_api_errors_for :create, :update # Call must be made after the methods to handle have been defined
45
+
44
46
  class << self
45
47
  def update(id, attributes)
46
48
  response = Podio.connection.put do |req|
@@ -89,13 +91,13 @@ class Podio::Organization < ActivePodio::Base
89
91
  def get_member_count(id)
90
92
  Podio.connection.get("/org/#{id}/member/count").body
91
93
  end
92
-
94
+
93
95
  def get_login_report(id, options = {})
94
96
  Podio.connection.get { |req|
95
97
  req.url("/org/#{id}/report/login/", options)
96
98
  }.body
97
99
  end
98
-
100
+
99
101
  def update_billing_profile(id, attributes)
100
102
  response = Podio.connection.put do |req|
101
103
  req.url "/org/#{id}/billing"
@@ -107,6 +109,6 @@ class Podio::Organization < ActivePodio::Base
107
109
  def upgrade(id)
108
110
  Podio.connection.post("/org/#{id}/upgrade").body
109
111
  end
110
-
112
+
111
113
  end
112
114
  end
@@ -2,12 +2,13 @@
2
2
  class Podio::OrganizationMember < ActivePodio::Base
3
3
  property :profile, :hash
4
4
  property :admin, :boolean
5
+ property :employee, :boolean
5
6
 
6
7
  has_one :user, :class => 'User'
7
8
  has_one :contact, :class => 'Contact', :property => :profile
8
9
 
9
10
  delegate :user_id, :mail, :to => :user
10
- delegate :name, :avatar, :title, :organization, :title_and_org, :default_title, :avatar_url, :last_seen_on, :to => :contact
11
+ delegate :name, :avatar, :link, :title, :organization, :title_and_org, :default_title, :avatar_url, :last_seen_on, :to => :contact
11
12
 
12
13
  class << self
13
14
  def find_all_for_org(org_id, options = {})
@@ -4,6 +4,7 @@ class Podio::OrganizationProfile < ActivePodio::Base
4
4
 
5
5
  property :org_id, :integer
6
6
  property :avatar, :integer
7
+ property :image, :hash
7
8
  property :name, :string
8
9
  property :mail, :array
9
10
  property :phone, :array
@@ -1,5 +1,6 @@
1
1
  class Podio::QuestionAnswer < ActivePodio::Base
2
2
  property :question_option_id, :integer
3
3
 
4
- has_one :user, :class => 'User'
5
- end
4
+ # the key is called user, but the API actually returns a Profile/Contact
5
+ has_one :user, :class => 'Contact'
6
+ end
@@ -0,0 +1,25 @@
1
+ class Podio::Referral < ActivePodio::Base
2
+ property :code, :string
3
+ property :status, :string
4
+
5
+ alias_method :id, :code
6
+
7
+ class << self
8
+ def find_referral_contact(code)
9
+ Contact.member Podio.connection.get("/referral/info/#{code}").body
10
+ end
11
+
12
+ def find_referred_users
13
+ Contact.list Podio.connection.get("/referral/user/").body
14
+ end
15
+
16
+ def update_teaser_status(status)
17
+ response = Podio.connection.put do |req|
18
+ req.url "/referral/status"
19
+ req.body = { :status => status }
20
+ end
21
+ response.status
22
+ end
23
+ end
24
+
25
+ end
@@ -9,8 +9,8 @@ class Podio::Reminder < ActivePodio::Base
9
9
  Podio.connection.delete("/reminder/#{ref_type}/#{ref_id}").body
10
10
  end
11
11
 
12
- def snooze(id)
13
- Podio.connection.post("/reminder/#{id}/snooze").body
12
+ def snooze(ref_type, ref_id)
13
+ Podio.connection.post("/reminder/#{ref_type}/#{ref_id}/snooze").body
14
14
  end
15
15
 
16
16
  def create(ref_type, ref_id, attributes)
@@ -7,9 +7,13 @@ class Podio::Search < ActivePodio::Base
7
7
  property :space, :hash
8
8
  property :org, :hash
9
9
  property :app, :hash
10
+ property :search_id, :integer
11
+ property :rank, :integer
10
12
 
11
13
  has_one :created_by, :class => 'ByLine'
12
-
14
+ has_one :app, :class => 'Application'
15
+ has_one :org, :class => 'Organization'
16
+ has_one :space, :class => 'Space'
13
17
 
14
18
  class << self
15
19
  def in_org(org_id, words)
@@ -19,16 +23,41 @@ class Podio::Search < ActivePodio::Base
19
23
  end
20
24
 
21
25
  list response.body
22
- end
26
+ end
23
27
 
24
- def in_space(space_id, words)
28
+ def globally(words, attributes={})
29
+ attributes[:query] = words
30
+ response = Podio.connection.post do |req|
31
+ req.url "/search/"
32
+ req.body = attributes
33
+ end
34
+
35
+ list response.body
36
+ end
37
+
38
+ def in_space(space_id, words, attributes={})
39
+ attributes[:query] = words
25
40
  response = Podio.connection.post do |req|
26
41
  req.url "/search/space/#{space_id}/"
27
- req.body = words
42
+ req.body = attributes
28
43
  end
29
44
 
30
45
  list response.body
31
- end
46
+ end
47
+
48
+ def in_app(app_id, words, attributes={})
49
+ attributes[:query] = words
50
+ response = Podio.connection.post do |req|
51
+ req.url "/search/app/#{app_id}/"
52
+ req.body = attributes
53
+ end
54
+
55
+ list response.body
56
+ end
57
+
58
+ def rank(search_id, rank)
59
+ Podio.connection.post("/search/#{search_id}/#{rank}/clicked").status
60
+ end
32
61
  end
33
62
 
34
63
  end
@@ -1,6 +1,6 @@
1
1
  class Podio::SpaceInvitation < ActivePodio::Base
2
2
  include ActivePodio::Updatable
3
-
3
+
4
4
  property :space_id, :integer
5
5
  property :role, :string
6
6
  property :subject, :string
@@ -10,6 +10,11 @@ class Podio::SpaceInvitation < ActivePodio::Base
10
10
  property :mails, :array
11
11
  property :profiles, :array
12
12
  property :activation_code, :integer
13
+ property :context_ref_type, :string # Write
14
+ property :context_ref_id, :integer # Write
15
+ property :context, :hash # Read
16
+
17
+ has_one :user, :class => 'User'
13
18
 
14
19
  def save
15
20
  self.class.create(self.space_id, self.role, self.attributes.except(:contacts))
@@ -22,9 +27,9 @@ class Podio::SpaceInvitation < ActivePodio::Base
22
27
  def accept(invite_code)
23
28
  self.class.accept(invite_code)
24
29
  end
25
-
30
+
26
31
  handle_api_errors_for :save, :save_member, :accept # Call must be made after the methods to handle have been defined
27
-
32
+
28
33
  class << self
29
34
  def create(space_id, role, attributes={})
30
35
  response = Podio.connection.post do |req|
@@ -73,6 +78,6 @@ class Podio::SpaceInvitation < ActivePodio::Base
73
78
  def find_member(invite_code)
74
79
  member Podio.connection.get("/space/membership?invite_code=#{ERB::Util.url_encode(invite_code)}").body
75
80
  end
76
-
81
+
77
82
  end
78
83
  end
@@ -35,5 +35,13 @@ class Podio::SpaceMember < ActivePodio::Base
35
35
  def end_membership(space_id, user_id)
36
36
  Podio.connection.delete("/space/#{space_id}/member/#{user_id}").status
37
37
  end
38
+
39
+ def find_top_contacts(space_id)
40
+ result = Podio.connection.get("/space/#{space_id}/member/top/").body
41
+ %w(employee external).each do |section|
42
+ result[section]['profiles'].map! { |profile| Contact.new(profile) } if result[section].present? && result[section]['profiles'].present?
43
+ end
44
+ result
45
+ end
38
46
  end
39
47
  end
@@ -2,7 +2,7 @@ class Podio::Subscription < ActivePodio::Base
2
2
  property :started_on, :datetime
3
3
  property :notifications, :integer
4
4
  property :ref, :hash
5
-
5
+
6
6
  class << self
7
7
  def find(id)
8
8
  member Podio.connection.get("/subscription/#{id}").body
@@ -22,6 +22,10 @@ class Podio::Subscription < ActivePodio::Base
22
22
 
23
23
  def delete_by_reference(ref_type, ref_id)
24
24
  Podio.connection.delete("/subscription/#{ref_type}/#{ref_id}")
25
- end
25
+ end
26
+
27
+ def find_subscribers_by_reference(ref_type, ref_id)
28
+ User.list Podio.connection.get("/subscription/#{ref_type}/#{ref_id}/").body
29
+ end
26
30
  end
27
- end
31
+ end
@@ -9,7 +9,8 @@ class Podio::UserStatus < ActivePodio::Base
9
9
 
10
10
  has_one :user, :class => 'User'
11
11
  has_one :contact, :class => 'Contact', :property => :profile
12
-
12
+ has_one :referral, :class => 'Referral'
13
+
13
14
  class << self
14
15
  def current
15
16
  member Podio.connection.get("/user/status").body
@@ -6,6 +6,8 @@ class Podio::Widget < ActivePodio::Base
6
6
  property :title, :string
7
7
  property :config, :string
8
8
  property :ref, :hash
9
+ property :rights, :array
10
+ property :data, :hash
9
11
 
10
12
  class << self
11
13
  def create(ref_type, ref_id, attributes)
@@ -1,3 +1,3 @@
1
1
  module Podio
2
- VERSION = '0.6.0'
2
+ VERSION = '0.7.0'
3
3
  end
@@ -284,10 +284,10 @@ class ActivePodioTest < Test::Unit::TestCase
284
284
  @test = TestModel.new(:test_id => 42)
285
285
  assert_equal 42.hash, @test.hash
286
286
  end
287
-
287
+
288
288
  test 'should return attributes for as_json' do
289
289
  @test = TestModel.new(:test_id => 42)
290
- assert_equal({:string=>nil, :test_id=>42, :hash_property=>nil, :prefixed_hash_property=>nil, :hash_property_with_setter=>nil, :prefixed_hash_property_with_setter=>nil, :datetime=>nil, :date=>nil, :integer=>nil, :boolean=>nil, :array=>nil}, @test.as_json)
290
+ assert_equal({:id=> 42, :string=>nil, :test_id=>42, :hash_property=>nil, :prefixed_hash_property=>nil, :hash_property_with_setter=>nil, :prefixed_hash_property_with_setter=>nil, :datetime=>nil, :date=>nil, :integer=>nil, :boolean=>nil, :array=>nil}, @test.as_json)
291
291
  end
292
292
 
293
293
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: podio
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-12-06 00:00:00.000000000Z
13
+ date: 2012-02-22 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: faraday
17
- requirement: &2162021080 !ruby/object:Gem::Requirement
17
+ requirement: &2156588980 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 0.7.0
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *2162021080
25
+ version_requirements: *2156588980
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: activesupport
28
- requirement: &2162019020 !ruby/object:Gem::Requirement
28
+ requirement: &2156588080 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: '3.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *2162019020
36
+ version_requirements: *2156588080
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: activemodel
39
- requirement: &2162017180 !ruby/object:Gem::Requirement
39
+ requirement: &2156586720 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ~>
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: '3.0'
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *2162017180
47
+ version_requirements: *2156586720
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: multi_json
50
- requirement: &2162015780 !ruby/object:Gem::Requirement
50
+ requirement: &2156585920 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,7 +55,7 @@ dependencies:
55
55
  version: '0'
56
56
  type: :runtime
57
57
  prerelease: false
58
- version_requirements: *2162015780
58
+ version_requirements: *2156585920
59
59
  description: ! 'The official Ruby wrapper for the Podio API used and maintained by
60
60
  the Podio team
61
61
 
@@ -93,7 +93,7 @@ files:
93
93
  - lib/podio/models/application_field.rb
94
94
  - lib/podio/models/bulletin.rb
95
95
  - lib/podio/models/by_line.rb
96
- - lib/podio/models/calendar.rb
96
+ - lib/podio/models/calendar_event.rb
97
97
  - lib/podio/models/calendar_mute.rb
98
98
  - lib/podio/models/category.rb
99
99
  - lib/podio/models/comment.rb
@@ -107,6 +107,7 @@ files:
107
107
  - lib/podio/models/conversation_participant.rb
108
108
  - lib/podio/models/email_subscription_setting.rb
109
109
  - lib/podio/models/embed.rb
110
+ - lib/podio/models/external_file.rb
110
111
  - lib/podio/models/file_attachment.rb
111
112
  - lib/podio/models/filter.rb
112
113
  - lib/podio/models/form.rb
@@ -117,6 +118,7 @@ files:
117
118
  - lib/podio/models/item_diff.rb
118
119
  - lib/podio/models/item_field.rb
119
120
  - lib/podio/models/item_revision.rb
121
+ - lib/podio/models/linked_account.rb
120
122
  - lib/podio/models/meeting.rb
121
123
  - lib/podio/models/meeting_participiant.rb
122
124
  - lib/podio/models/news.rb
@@ -134,6 +136,7 @@ files:
134
136
  - lib/podio/models/question_option.rb
135
137
  - lib/podio/models/rating.rb
136
138
  - lib/podio/models/recurrence.rb
139
+ - lib/podio/models/referral.rb
137
140
  - lib/podio/models/reminder.rb
138
141
  - lib/podio/models/search.rb
139
142
  - lib/podio/models/space.rb