podio 0.5.0 → 0.5.1

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.
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
1
  pkg/*
2
2
  *.gem
3
3
  .bundle
4
+ .DS_Store
data/lib/podio.rb CHANGED
@@ -100,6 +100,9 @@ module Podio
100
100
  autoload :OrganizationMember, 'podio/models/organization_member'
101
101
  autoload :OrganizationProfile, 'podio/models/organization_profile'
102
102
  autoload :Profile, 'podio/models/profile'
103
+ autoload :Question, 'podio/models/question'
104
+ autoload :QuestionAnswer, 'podio/models/question_answer'
105
+ autoload :QuestionOption, 'podio/models/question_option'
103
106
  autoload :Rating, 'podio/models/rating'
104
107
  autoload :Search, 'podio/models/search'
105
108
  autoload :Space, 'podio/models/space'
@@ -159,11 +159,19 @@ module ActivePodio
159
159
  end
160
160
 
161
161
  def delegate_to_hash(hash_name, *attribute_names)
162
+ options = attribute_names.extract_options! || { :prefix => false, :setter => false }
163
+ options.assert_valid_keys(:prefix, :setter)
162
164
  attribute_names.each do |attribute_name|
163
165
  hash_index = attribute_name.to_s.gsub(/[\?!]/, '')
164
- self.send(:define_method, attribute_name) do
166
+ method_name = "#{options[:prefix] ? "#{hash_name}_" : ''}#{attribute_name}"
167
+ self.send(:define_method, method_name) do
165
168
  self.send(hash_name)[hash_index]
166
169
  end
170
+ if options[:setter]
171
+ self.send(:define_method, "#{method_name}=") do |value|
172
+ self.send(hash_name)[hash_index] = value
173
+ end
174
+ end
167
175
  end
168
176
  end
169
177
 
data/lib/podio/client.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module Podio
2
2
  class Client
3
- attr_reader :api_url, :api_key, :api_secret, :connection, :raw_connection
4
- attr_accessor :oauth_token, :stubs, :current_http_client
3
+ attr_reader :api_url, :api_key, :api_secret, :oauth_token, :connection, :raw_connection
4
+ attr_accessor :stubs, :current_http_client
5
5
 
6
6
  def initialize(options = {})
7
7
  @api_url = options[:api_url] || 'https://api.podio.com'
@@ -72,6 +72,11 @@ module Podio
72
72
  @oauth_token
73
73
  end
74
74
 
75
+ def oauth_token=(new_oauth_token)
76
+ @oauth_token = new_oauth_token.is_a?(Hash) ? OAuthToken.new(new_oauth_token) : new_oauth_token
77
+ configure_oauth
78
+ end
79
+
75
80
  def refresh_access_token
76
81
  response = @oauth_connection.post do |req|
77
82
  req.url '/oauth/token', :grant_type => 'refresh_token', :refresh_token => oauth_token.refresh_token, :client_id => api_key, :client_secret => api_secret
@@ -36,6 +36,12 @@ class Podio::Application < ActivePodio::Base
36
36
  }.body
37
37
  end
38
38
 
39
+ def get_calculations(app_id)
40
+ list Podio.connection.get { |req|
41
+ req.url("/app/#{app_id}/calculation/", {})
42
+ }.body
43
+ end
44
+
39
45
  def update_order(space_id, app_ids = [])
40
46
  response = Podio.connection.put do |req|
41
47
  req.url "/app/space/#{space_id}/order"
@@ -52,6 +58,18 @@ class Podio::Application < ActivePodio::Base
52
58
  end
53
59
  response.body['app_id']
54
60
  end
61
+
62
+ def update(app_id, attributes)
63
+ response = Podio.connection.put do |req|
64
+ req.url "/app/#{app_id}"
65
+ req.body = attributes
66
+ end
67
+ response.status
68
+ end
69
+
70
+ def delete_field(app_id, field_id)
71
+ Podio.connection.delete("/app/#{app_id}/field/#{field_id}").status
72
+ end
55
73
 
56
74
  def deactivate(id)
57
75
  Podio.connection.post("/app/#{id}/deactivate").body
@@ -6,7 +6,7 @@ class Podio::ApplicationField < ActivePodio::Base
6
6
 
7
7
  alias_method :id, :field_id
8
8
  delegate_to_hash :config, :label, :description, :delta, :settings, :required?, :visible?
9
- delegate_to_hash :settings, :allowed_values, :referenceable_types, :allowed_currencies, :valid_types
9
+ delegate_to_hash :settings, :allowed_values, :referenceable_types, :allowed_currencies, :valid_types, :options, :multiple
10
10
 
11
11
  class << self
12
12
  def find(app_id, field_id)
@@ -15,6 +15,7 @@ class Podio::Comment < ActivePodio::Base
15
15
  has_one :created_by, :class => 'ByLine'
16
16
  has_one :created_via, :class => 'Via'
17
17
  has_many :files, :class => 'FileAttachment'
18
+ has_many :questions, :class => 'Question'
18
19
 
19
20
  alias_method :id, :comment_id
20
21
  attr_accessor :commentable_type, :commentable_id
@@ -11,10 +11,13 @@ class Podio::Conversation < ActivePodio::Base
11
11
 
12
12
  # When outputting conversation(s)
13
13
  property :created_on, :datetime
14
+ has_one :embed, :class => 'Embed'
15
+ has_one :embed_file, :class => 'FileAttachment'
14
16
  has_one :created_by, :class => 'ByLine'
15
17
  has_many :files, :class => 'FileAttachment'
16
18
  has_many :messages, :class => 'ConversationMessage'
17
19
  has_many :participants_full, :class => 'ConversationParticipant'
20
+
18
21
 
19
22
  alias_method :id, :conversation_id
20
23
  alias_method :name, :subject # So tasks can refer to ref.name on all types of references
@@ -52,10 +55,10 @@ class Podio::Conversation < ActivePodio::Base
52
55
  response.body
53
56
  end
54
57
 
55
- def create_reply(conversation_id, text, file_ids = [])
58
+ def create_reply(conversation_id, text, file_ids=[], embed_id=nil, embed_file_id=nil)
56
59
  response = Podio.connection.post do |req|
57
60
  req.url "/conversation/#{conversation_id}/reply"
58
- req.body = { :text => text, :file_ids => file_ids }
61
+ req.body = {:text => text, :file_ids => file_ids, :embed_id => embed_id, :embed_file_id => embed_file_id}
59
62
  end
60
63
  response.body['message_id']
61
64
  end
@@ -5,6 +5,8 @@ class Podio::ConversationMessage < ActivePodio::Base
5
5
  property :text, :string
6
6
  property :created_on, :datetime
7
7
 
8
+ has_one :embed, :class => 'Embed'
9
+ has_one :embed_file, :class => 'FileAttachment'
8
10
  has_one :created_by, :class => 'ByLine'
9
11
  has_many :files, :class => 'FileAttachment'
10
12
 
@@ -18,37 +18,23 @@ class Podio::FileAttachment < ActivePodio::Base
18
18
  end
19
19
 
20
20
  class << self
21
-
22
- # Accepts an open file stream along with a content type and a file name and uploads the file to Podio
23
- # Returns an instantiated FileAttachment model with id, link, name and mimetype set
24
- # If you use Ruby on Rails 3 or higher you can also pass the file in params directly to +upload_from_rails_param+
25
- def upload(file_stream, content_type, file_name)
21
+ # Accepts an open file stream along with a file name and uploads the file to Podio
22
+ def upload(file_stream, file_name)
26
23
  response = Podio.client.raw_connection.post do |req|
24
+ req.options[:timeout] = 1200
27
25
  req.url "/file/v2/"
28
- req.body = {:source => Faraday::UploadIO.new(file_stream, content_type, file_name), :filename => file_name}
26
+ req.body = {:source => Faraday::UploadIO.new(file_stream, nil, nil), :filename => file_name}
29
27
  end
30
- file_attributes = ActiveSupport::JSON.decode(response.body) # Using raw_connection means response is not automatically decoded to json
31
- file_attributes.merge!(:name => file_name, :mimetype => content_type)
32
- member file_attributes
33
- end
34
-
35
- # Accepts a ActionDispatch::Http::UploadedFile or similar and uploads the file to Podio
36
- # Optionally attaches the file to the given ref type and ref id
37
- # Returns an instantiated FileAttachment model with id, link, name and mimetype set
38
- def upload_from_rails_param(uploaded_file, ref_type = nil, ref_id = nil)
39
- p uploaded_file
40
- file_attachment = self.upload(uploaded_file.tempfile, uploaded_file.content_type, uploaded_file.original_filename)
41
- if ref_type.present? && ref_id.present?
42
- self.attach(file_attachment.id, ref_type, ref_id)
43
- end
44
- file_attachment
28
+
29
+ # Using raw_connection means response is not automatically decoded to json
30
+ member MultiJson.decode(response.body)
45
31
  end
46
-
32
+
47
33
  # Attach a file to an existing reference
48
34
  def attach(id, ref_type, ref_id)
49
35
  Podio.connection.post do |req|
50
36
  req.url "/file/#{id}/attach"
51
- req.body = { :ref_type => ref_type, :ref_id => ref_id }
37
+ req.body = {:ref_type => ref_type, :ref_id => ref_id}
52
38
  end
53
39
  end
54
40
 
@@ -64,6 +50,10 @@ class Podio::FileAttachment < ActivePodio::Base
64
50
  member Podio.connection.get("/file/#{id}").body
65
51
  end
66
52
 
53
+ def find_raw(id)
54
+ Podio.client.raw_connection.get("/file/#{id}/raw").body
55
+ end
56
+
67
57
  def find_for_app(app_id, options={})
68
58
  collection Podio.connection.get { |req|
69
59
  req.url("/file/app/#{app_id}/", options)
@@ -18,6 +18,12 @@ class Podio::Form < ActivePodio::Base
18
18
  response.body['form_id']
19
19
  end
20
20
 
21
+ def find_all_for_app(app_id)
22
+ list Podio.connection.get { |req|
23
+ req.url("/form/app/#{app_id}/")
24
+ }.body
25
+ end
26
+
21
27
  def find(form_id)
22
28
  member Podio.connection.get("/form/#{form_id}").body
23
29
  end
@@ -1,12 +1,13 @@
1
1
  class Podio::Importer < ActivePodio::Base
2
2
 
3
3
  class << self
4
- def process_file(file_id, app_id, mappings)
4
+ def process_file(file_id, app_id, mappings, tags_column_id)
5
5
  response = Podio.connection.post do |req|
6
6
  req.url "/importer/#{file_id}/process"
7
7
  req.body = {
8
8
  :app_id => app_id,
9
- :mappings => mappings
9
+ :mappings => mappings,
10
+ :tags_column_id => tags_column_id
10
11
  }
11
12
  end
12
13
 
@@ -16,9 +16,11 @@ class Podio::Item < ActivePodio::Base
16
16
  property :conversations, :array
17
17
  property :tasks, :array
18
18
  property :references, :array
19
+ property :refs, :array
19
20
  property :tags, :array
20
21
  property :subscribed, :boolean
21
22
  property :user_ratings, :hash
23
+ property :link, :string
22
24
 
23
25
  has_many :revisions, :class => 'ItemRevision'
24
26
  has_many :files, :class => 'FileAttachment'
@@ -0,0 +1,32 @@
1
+ class Podio::Question < ActivePodio::Base
2
+
3
+ property :question_id, :integer
4
+ property :text, :string
5
+ property :ref, :hash
6
+
7
+ has_many :answers, :class => 'QuestionAnswer'
8
+ has_many :options, :class => 'QuestionOption'
9
+
10
+ alias_method :id, :question_id
11
+
12
+ class << self
13
+
14
+ def create(ref_type, ref_id, text, options)
15
+ response = Podio.connection.post do |req|
16
+ req.url "/question/#{ref_type}/#{ref_id}/"
17
+ req.body = {:text => text, :options => options }
18
+ end
19
+ member response.body
20
+ end
21
+
22
+ def answer(question_id, ref_type, ref_id, question_option_id)
23
+ response = Podio.connection.post do |req|
24
+ req.url "/question/#{question_id}/#{ref_type}/#{ref_id}/"
25
+ req.body = {:question_option_id => question_option_id }
26
+ end
27
+
28
+ response.status
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,5 @@
1
+ class Podio::QuestionAnswer < ActivePodio::Base
2
+ property :question_option_id, :integer
3
+
4
+ has_one :user, :class => 'User'
5
+ end
@@ -0,0 +1,6 @@
1
+ class Podio::QuestionOption < ActivePodio::Base
2
+
3
+ property :question_option_id, :integer
4
+ property :text, :string
5
+
6
+ end
@@ -8,6 +8,8 @@ class Podio::Space < ActivePodio::Base
8
8
  property :members, :integer
9
9
  property :role, :string
10
10
  property :rights, :array
11
+ property :post_on_new_app, :bool
12
+ property :post_on_new_member, :bool
11
13
 
12
14
  has_one :created_by, :class => 'ByLine'
13
15
 
@@ -19,6 +21,10 @@ class Podio::Space < ActivePodio::Base
19
21
  self.space_id = response['space_id']
20
22
  end
21
23
 
24
+ def update
25
+ self.class.update(self.space_id, :name => self.name, :post_on_new_app => self.post_on_new_app, :post_on_new_member => self.post_on_new_member, :url_label => self.url_label)
26
+ end
27
+
22
28
  class << self
23
29
  def create(attributes)
24
30
  response = Podio.connection.post do |req|
@@ -29,6 +35,14 @@ class Podio::Space < ActivePodio::Base
29
35
  response.body
30
36
  end
31
37
 
38
+ def update(space_id, attributes)
39
+ Podio.connection.put("/space/#{space_id}", attributes).status
40
+ end
41
+
42
+ def delete(id)
43
+ Podio.connection.delete("/space/#{id}").status
44
+ end
45
+
32
46
  def find(id)
33
47
  member Podio.connection.get("/space/#{id}").body
34
48
  end
@@ -40,6 +54,14 @@ class Podio::Space < ActivePodio::Base
40
54
  def find_all_for_org(org_id)
41
55
  list Podio.connection.get("/org/#{org_id}/space/").body
42
56
  end
57
+
58
+ def validate_url_label(org_id, url_label)
59
+ Podio.connection.post { |req|
60
+ req.url "/space/org/#{org_id}/url/validate"
61
+ req.body = {:url_label => url_label}
62
+ }.body
63
+ end
64
+
43
65
  end
44
66
  end
45
67
 
@@ -15,11 +15,15 @@ class Podio::SpaceInvite < ActivePodio::Base
15
15
  self.class.create(self.space_id, self.role, self.attributes.except(:contacts))
16
16
  end
17
17
 
18
+ def save_member
19
+ self.class.create_member(self.space_id, self.role, self.attributes.except(:contacts))
20
+ end
21
+
18
22
  def accept(invite_code)
19
23
  self.class.accept(invite_code)
20
24
  end
21
25
 
22
- handle_api_errors_for :save, :accept # Call must be made after the methods to handle have been defined
26
+ handle_api_errors_for :save, :save_member, :accept # Call must be made after the methods to handle have been defined
23
27
 
24
28
  class << self
25
29
  def create(space_id, role, attributes={})
@@ -31,6 +35,15 @@ class Podio::SpaceInvite < ActivePodio::Base
31
35
  response.body
32
36
  end
33
37
 
38
+ def create_member(space_id, role, attributes={})
39
+ response = Podio.connection.post do |req|
40
+ req.url "/space/#{space_id}/member/"
41
+ req.body = attributes.merge(:role => role)
42
+ end
43
+
44
+ response.body
45
+ end
46
+
34
47
  def accept(invite_code)
35
48
  response = Podio.connection.post do |req|
36
49
  req.url '/space/invite/accept'
@@ -49,9 +62,19 @@ class Podio::SpaceInvite < ActivePodio::Base
49
62
  response.body
50
63
  end
51
64
 
65
+ def decline_member(invite_code)
66
+ Podio.connection.delete("/space/membership?invite_code=#{invite_code}").status
67
+
68
+ response.body
69
+ end
70
+
52
71
  def find(invite_code)
53
72
  member Podio.connection.get("/space/invite/status?invite_code=#{ERB::Util.url_encode(invite_code)}").body
54
73
  end
74
+
75
+ def find_member(invite_code)
76
+ member Podio.connection.get("/space/membership?invite_code=#{ERB::Util.url_encode(invite_code)}").body
77
+ end
55
78
 
56
79
  end
57
80
  end
@@ -10,6 +10,8 @@ class Podio::Status < ActivePodio::Base
10
10
 
11
11
  has_one :created_by, :class => 'Contact'
12
12
  has_one :created_via, :class => 'Via'
13
+ has_one :embed, :class => 'Embed'
14
+ has_one :embed_file, :class => 'FileAttachment'
13
15
  has_many :comments, :class => 'Comment'
14
16
  has_many :conversations, :class => 'Conversation'
15
17
  has_many :tasks, :class => 'Task'
data/lib/podio/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Podio
2
- VERSION = '0.5.0'
2
+ VERSION = '0.5.1'
3
3
  end
data/podio.gemspec CHANGED
@@ -15,11 +15,11 @@ Gem::Specification.new do |s|
15
15
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
16
  s.require_paths = ['lib']
17
17
 
18
- s.add_runtime_dependency 'faraday', '~> 0.7.0'
19
- s.add_runtime_dependency 'activesupport', '~> 3.0.0'
20
- s.add_runtime_dependency 'activemodel', '~> 3.0.0'
21
- s.add_runtime_dependency 'i18n', '>= 0.4.2'
22
- s.add_runtime_dependency 'multi_json', '~> 0.0.5'
18
+ s.add_dependency('faraday', '~> 0.7.0')
19
+ s.add_dependency('activesupport', '~> 3.0.0')
20
+ s.add_dependency('activemodel', '~> 3.0.0')
21
+ s.add_dependency('i18n', '~> 0.5.0')
22
+ s.add_dependency('multi_json', '~> 0.0.5')
23
23
 
24
24
  s.description = <<desc
25
25
  The official Ruby wrapper for the Podio API used and maintained by the Podio team
@@ -10,6 +10,7 @@ class ActivePodioTest < Test::Unit::TestCase
10
10
  property :test_id, :integer
11
11
  property :string, :string
12
12
  property :hash_property, :hash
13
+ property :other_hash_property, :hash
13
14
  property :datetime, :datetime
14
15
  property :date, :date
15
16
  property :integer, :integer
@@ -24,6 +25,8 @@ class ActivePodioTest < Test::Unit::TestCase
24
25
  alias_method :id, :test_id
25
26
 
26
27
  delegate_to_hash :hash_property, :key1, :key2, :really?
28
+ delegate_to_hash :other_hash_property, :key3, :prefix => true, :setter => true
29
+
27
30
 
28
31
  def save(exception_class = nil)
29
32
  if exception_class
@@ -156,11 +159,18 @@ class ActivePodioTest < Test::Unit::TestCase
156
159
  assert_equal 'other association 2', @test.different_associations[1].string
157
160
  end
158
161
 
159
- test 'should expose methods defined by delegate to hash' do
162
+ test 'should expose getter methods defined by delegate to hash' do
160
163
  @test = TestModel.new(:hash_property => {'key1' => 'value1', 'key2' => 'value2', 'really' => true})
161
164
  assert_equal 'value1', @test.key1
162
165
  assert @test.really?
163
166
  end
167
+
168
+ test 'should expose prefixed getter and setter methods defined by delegate to hash' do
169
+ @test = TestModel.new(:other_hash_property => {'key3' => 'value3'})
170
+ assert_equal 'value3', @test.other_hash_property_key3
171
+ @test.other_hash_property_key3 = 'new'
172
+ assert_equal 'new', @test.other_hash_property_key3
173
+ end
164
174
 
165
175
  test 'should handle non failing api requests' do
166
176
  @test = TestModel.new
@@ -229,12 +239,12 @@ class ActivePodioTest < Test::Unit::TestCase
229
239
 
230
240
  test 'should initialize nil attributes when constructed without given attributes' do
231
241
  @test = TestModel.new
232
- assert_equal({:string=>nil, :test_id=>nil, :hash_property=>nil, :datetime=>nil, :date=>nil, :integer=>nil, :boolean=>nil, :array=>nil}, @test.attributes)
242
+ assert_equal({:string=>nil, :test_id=>nil, :hash_property=>nil, :other_hash_property=>nil, :datetime=>nil, :date=>nil, :integer=>nil, :boolean=>nil, :array=>nil}, @test.attributes)
233
243
  end
234
244
 
235
245
  test 'should accept unknown properties when constructed' do
236
246
  @test = TestModel.new(:unknown => 'attribute')
237
- assert_equal({:string=>nil, :test_id=>nil, :hash_property=>nil, :datetime=>nil, :date=>nil, :integer=>nil, :boolean=>nil, :array=>nil, :unknown => 'attribute'}, @test.attributes)
247
+ assert_equal({:string=>nil, :test_id=>nil, :hash_property=>nil, :other_hash_property=>nil, :datetime=>nil, :date=>nil, :integer=>nil, :boolean=>nil, :array=>nil, :unknown => 'attribute'}, @test.attributes)
238
248
  end
239
249
 
240
250
  test 'should use id for ==' do
@@ -250,7 +260,7 @@ class ActivePodioTest < Test::Unit::TestCase
250
260
 
251
261
  test 'should return attributes for as_json' do
252
262
  @test = TestModel.new(:test_id => 42)
253
- assert_equal({:string=>nil, :test_id=>42, :hash_property=>nil, :datetime=>nil, :date=>nil, :integer=>nil, :boolean=>nil, :array=>nil}, @test.as_json)
263
+ assert_equal({:string=>nil, :test_id=>42, :hash_property=>nil, :other_hash_property=>nil, :datetime=>nil, :date=>nil, :integer=>nil, :boolean=>nil, :array=>nil}, @test.as_json)
254
264
  end
255
265
 
256
266
  end
data/test/client_test.rb CHANGED
@@ -52,16 +52,32 @@ class ClientTest < Test::Unit::TestCase
52
52
  test 'should automatically refresh an expired token' do
53
53
  # this token is already expired in the test database
54
54
  # Podio.client.oauth_token = Podio::OAuthToken.new('access_token' => '30da4594eef93528c11df7fb5deb989cd629ea7060a1ce1ced628d19398214c942bcfe0334cf953ef70a80ea1afdfd80183d5c75d19c1f5526ca4c6f6f3471ef', 'refresh_token' => '82e7a11ae187f28a25261599aa6229cd89f8faee48cba18a75d70efae88ba665ced11d43143b7f5bebb31a4103662b851dd2db1879a3947b843259479fccfad3', 'expires_in' => -10)
55
-
55
+
56
56
  login_as(:professor)
57
57
  Podio.client.reset
58
-
58
+
59
59
  assert_nothing_raised do
60
60
  response = Podio.connection.get("/org/")
61
61
  assert_equal 200, response.status
62
62
  end
63
63
  end
64
-
64
+
65
+ test 'setting the oauth_token should reconfigure the connection' do
66
+ podio = Podio::Client.new
67
+ assert_nil podio.connection.headers['authorization']
68
+
69
+ podio.oauth_token = Podio::OAuthToken.new('access_token' => 'access', 'refresh_token' => 'refresh')
70
+ assert_equal 'OAuth2 access', podio.connection.headers['authorization']
71
+ end
72
+
73
+ test 'setting the oauth_token as a hash should reconfigure the connection' do
74
+ podio = Podio::Client.new
75
+ assert_nil podio.connection.headers['authorization']
76
+
77
+ podio.oauth_token = {'access_token' => 'access', 'refresh_token' => 'refresh'}
78
+ assert_equal 'OAuth2 access', podio.connection.headers['authorization']
79
+ end
80
+
65
81
  test 'should be able to make arbitrary requests' do
66
82
  login_as(:professor)
67
83
  response = Podio.connection.get("/org/")
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: podio
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.5.0
5
+ version: 0.5.1
6
6
  platform: ruby
7
7
  authors:
8
8
  - Florian Munz
@@ -11,7 +11,7 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2011-06-24 00:00:00 Z
14
+ date: 2011-07-18 00:00:00 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: faraday
@@ -52,9 +52,9 @@ dependencies:
52
52
  requirement: &id004 !ruby/object:Gem::Requirement
53
53
  none: false
54
54
  requirements:
55
- - - ">="
55
+ - - ~>
56
56
  - !ruby/object:Gem::Version
57
- version: 0.4.2
57
+ version: 0.5.0
58
58
  type: :runtime
59
59
  version_requirements: *id004
60
60
  - !ruby/object:Gem::Dependency
@@ -131,6 +131,9 @@ files:
131
131
  - lib/podio/models/organization_member.rb
132
132
  - lib/podio/models/organization_profile.rb
133
133
  - lib/podio/models/profile.rb
134
+ - lib/podio/models/question.rb
135
+ - lib/podio/models/question_answer.rb
136
+ - lib/podio/models/question_option.rb
134
137
  - lib/podio/models/rating.rb
135
138
  - lib/podio/models/search.rb
136
139
  - lib/podio/models/space.rb