podio 0.2.1 → 0.3.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.
data/Rakefile CHANGED
@@ -6,7 +6,7 @@ Bundler::GemHelper.install_tasks
6
6
 
7
7
  desc 'Run tests'
8
8
  Rake::TestTask.new(:test) do |t|
9
- #ENV['ENABLE_STUBS'] = 'true'
9
+ ENV['ENABLE_STUBS'] = 'true'
10
10
  t.ruby_opts = ["-rubygems"] if defined? Gem
11
11
  t.libs << "lib" << "test"
12
12
  t.pattern = 'test/**/*_test.rb'
data/lib/podio.rb CHANGED
@@ -35,6 +35,21 @@ module Podio
35
35
  end
36
36
  end
37
37
 
38
+ class StdoutLogger
39
+ def initialize(debug)
40
+ @debug = debug
41
+ end
42
+
43
+ def log(env)
44
+ begin
45
+ puts "\n==> #{env[:method].to_s.upcase} #{env[:url]} \n\n" if @debug
46
+ yield
47
+ ensure
48
+ puts "\n== (#{env[:status]}) ==> #{env[:body]}\n\n" if @debug
49
+ end
50
+ end
51
+ end
52
+
38
53
  class OAuthToken < Struct.new(:access_token, :refresh_token, :expires_at)
39
54
  def initialize(params = {})
40
55
  self.access_token = params['access_token']
@@ -43,22 +58,31 @@ module Podio
43
58
  end
44
59
  end
45
60
 
46
- autoload :Client, 'podio/client'
47
- autoload :Error, 'podio/error'
48
- autoload :ResponseWrapper, 'podio/response_wrapper'
61
+ autoload :Client, 'podio/client'
62
+ autoload :Error, 'podio/error'
63
+ autoload :ResponseWrapper, 'podio/response_wrapper'
49
64
 
50
65
  autoload :Application, 'podio/areas/application'
66
+ autoload :Bulletin, 'podio/areas/bulletin'
51
67
  autoload :Category, 'podio/areas/app_store'
68
+ autoload :Comment, 'podio/areas/comment'
52
69
  autoload :Connection, 'podio/areas/connection'
53
70
  autoload :Contact, 'podio/areas/contact'
71
+ autoload :Conversation, 'podio/areas/conversation'
54
72
  autoload :File, 'podio/areas/file'
55
73
  autoload :Form, 'podio/areas/form'
56
74
  autoload :Item, 'podio/areas/item'
75
+ autoload :Integration, 'podio/areas/integration'
57
76
  autoload :Organization, 'podio/areas/organization'
58
77
  autoload :OrganizationMember, 'podio/areas/organization_member'
78
+ autoload :OrganizationProfile, 'podio/areas/organization_profile'
59
79
  autoload :Search, 'podio/areas/search'
60
80
  autoload :Space, 'podio/areas/space'
61
81
  autoload :SpaceInvite, 'podio/areas/space'
82
+ autoload :SpaceMember, 'podio/areas/space'
83
+ autoload :Status, 'podio/areas/status'
84
+ autoload :Task, 'podio/areas/task'
85
+ autoload :TaskLabel, 'podio/areas/task'
62
86
  autoload :User, 'podio/areas/user'
63
87
  autoload :UserStatus, 'podio/areas/user_status'
64
88
  autoload :Widget, 'podio/areas/widget'
@@ -14,6 +14,21 @@ module Podio
14
14
  req.url("/app/", options)
15
15
  }.body
16
16
  end
17
+
18
+ def find_all_for_space(space_id, options = {})
19
+ list Podio.connection.get { |req|
20
+ req.url("/app/space/#{space_id}/", options)
21
+ }.body
22
+ end
23
+
24
+ def update_order(space_id, app_ids = [])
25
+ response = Podio.connection.put do |req|
26
+ req.url "/app/space/#{space_id}/order"
27
+ req.body = app_ids
28
+ end
29
+
30
+ response.body
31
+ end
17
32
 
18
33
  end
19
34
  end
@@ -0,0 +1,48 @@
1
+ module Podio
2
+ module Bulletin
3
+ include Podio::ResponseWrapper
4
+ extend self
5
+
6
+ def create(attributes)
7
+ response = Podio.connection.post do |req|
8
+ req.url "/bulletin/"
9
+ req.body = attributes
10
+ end
11
+
12
+ response.body['bulletin_id']
13
+ end
14
+
15
+ def update(id, attributes)
16
+ response = Podio.connection.put do |req|
17
+ req.url "/bulletin/#{id}"
18
+ req.body = attributes
19
+ end
20
+
21
+ response.status
22
+ end
23
+
24
+ def find(id, options={})
25
+ member Podio.connection.get("/bulletin/#{id}").body
26
+ end
27
+
28
+ def find_visible
29
+ list Podio.connection.get("/bulletin/").body
30
+ end
31
+
32
+ def find_all
33
+ list Podio.connection.get("/bulletin/?show_drafts=1").body
34
+ end
35
+
36
+ def find_all_by_locale(locale)
37
+ list Podio.connection.get("/bulletin/?locale=locale").body
38
+ end
39
+
40
+ def preview!(id)
41
+ Podio.connection.post("/bulletin/#{id}/preview").body
42
+ end
43
+
44
+ def send!(id)
45
+ Podio.connection.post("/bulletin/#{id}/send").body
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,36 @@
1
+ module Podio
2
+ module Comment
3
+ include Podio::ResponseWrapper
4
+ extend self
5
+
6
+ def create(commentable_type, commentable_id, attributes)
7
+ response = Podio.connection.post do |req|
8
+ req.url "/comment/#{commentable_type}/#{commentable_id}"
9
+ req.body = attributes
10
+ end
11
+
12
+ response.body['comment_id']
13
+ end
14
+
15
+ def update(id, attributes)
16
+ response = Podio.connection.put do |req|
17
+ req.url "/comment/#{id}"
18
+ req.body = attributes
19
+ end
20
+
21
+ response.status
22
+ end
23
+
24
+ def delete(id)
25
+ Podio.connection.delete("/comment/#{id}").status
26
+ end
27
+
28
+ def find(id)
29
+ member Podio.connection.get("/comment/#{id}").body
30
+ end
31
+
32
+ def find_all_for(commentable_type, commentable_id)
33
+ list Podio.connection.get("/comment/#{commentable_type}/#{commentable_id}").body
34
+ end
35
+ end
36
+ end
@@ -4,20 +4,30 @@ module Podio
4
4
  extend self
5
5
 
6
6
  def all(options={})
7
- options.assert_valid_keys(:key, :value, :limit, :offset, :type, :order)
7
+ options.assert_valid_keys(:key, :value, :limit, :offset, :type, :order, :name, :email, :required, :contact_type, :exclude_self)
8
+ options[:exclude_self] = (options[:exclude_self] == false ? "0" : "1" )
8
9
 
9
10
  list Podio.connection.get { |req|
10
11
  req.url("/contact/", options)
11
12
  }.body
12
13
  end
13
14
 
15
+ def top(options={})
16
+ options.assert_valid_keys(:limit, :type)
17
+
18
+ list Podio.connection.get { |req|
19
+ req.url("/contact/top/", options)
20
+ }.body
21
+ end
22
+
14
23
  def find(profile_id)
15
24
  member Podio.connection.get("/contact/#{profile_id}/v2").body
16
25
  end
17
26
 
18
27
  def find_all_for_org(org_id, options={})
19
- options.assert_valid_keys(:key, :value, :limit, :offset, :type, :order)
28
+ options.assert_valid_keys(:key, :value, :limit, :offset, :type, :order, :name, :email, :contact_type, :exclude_self)
20
29
  options[:type] ||= 'full'
30
+ options[:exclude_self] = (options[:exclude_self] == false ? "0" : "1" )
21
31
 
22
32
  list Podio.connection.get { |req|
23
33
  req.url("/contact/org/#{org_id}", options)
@@ -25,26 +35,41 @@ module Podio
25
35
  end
26
36
 
27
37
  def find_all_for_space(space_id, options={})
28
- options.assert_valid_keys(:key, :value, :limit, :offset, :type, :order)
38
+ options.assert_valid_keys(:key, :value, :limit, :offset, :type, :order, :name, :email, :required, :contact_type, :exclude_self)
29
39
  options[:type] ||= 'full'
40
+ options[:exclude_self] = (options[:exclude_self] == false ? "0" : "1" )
30
41
 
31
42
  list Podio.connection.get { |req|
32
43
  req.url("/contact/space/#{space_id}", options)
33
44
  }.body
34
45
  end
35
46
 
36
- def find_all_for_connection(connection_id)
37
- list Podio.connection.get("/contact/connection/#{connection_id}").body
38
- end
47
+ def find_all_for_connection(connection_id, options={})
48
+ options.assert_valid_keys(:key, :value, :limit, :offset, :type, :order, :name, :email)
49
+ options[:type] ||= 'full'
39
50
 
40
- def find_all_for_connection_type(connection_type)
41
- list Podio.connection.get("/contact/connection/#{connection_type}").body
51
+ list Podio.connection.get { |req|
52
+ req.url("/contact/connection/#{connection_id}", options)
53
+ }.body
42
54
  end
43
55
 
44
- def find_for_org(org_id)
45
- member Podio.connection.get("/org/#{org_id}/profile").body
56
+ def find_all_for_connection_type(connection_type, options={})
57
+ options.assert_valid_keys(:key, :value, :limit, :offset, :type, :order, :name, :email)
58
+ options[:type] ||= 'full'
59
+
60
+ list Podio.connection.get { |req|
61
+ req.url("/contact/connection/#{connection_type}", options)
62
+ }.body
46
63
  end
47
64
 
65
+ def find_for_org(org_id)
66
+ member Podio.connection.get("/org/#{org_id}/billing").body
67
+ end
68
+
69
+ def find_for_user(user_id)
70
+ member Podio.connection.get("/contact/user/#{user_id}").body
71
+ end
72
+
48
73
  def totals_by_org
49
74
  Podio.connection.get("/contact/totals/").body
50
75
  end
@@ -52,6 +77,38 @@ module Podio
52
77
  def totals_by_org_and_space
53
78
  Podio.connection.get("/contact/totals/v2/").body
54
79
  end
80
+
81
+ def totals_by_space(space_id, options = {})
82
+ options.assert_valid_keys(:exclude_self)
83
+ options[:exclude_self] = (options[:exclude_self] == false ? "0" : "1" )
84
+
85
+ Podio.connection.get { |req|
86
+ req.url("/contact/space/#{space_id}/totals/", options)
87
+ }.body
88
+ end
89
+
90
+ def create_space_contact(space_id, attributes)
91
+ response = Podio.connection.post do |req|
92
+ req.url "/contact/space/#{space_id}/"
93
+ req.body = attributes
94
+ end
95
+
96
+ response.body
97
+ end
98
+
99
+ def delete_contact(profile_id)
100
+ Podio.connection.delete("/contact/#{profile_id}").body
101
+ end
102
+
103
+ def update_contact(profile_id, attributes)
104
+ response = Podio.connection.put do |req|
105
+ req.url "/contact/#{profile_id}"
106
+ req.body = attributes
107
+ end
108
+
109
+ response.body
110
+ end
55
111
 
56
112
  end
113
+
57
114
  end
@@ -0,0 +1,32 @@
1
+ module Podio
2
+ module Conversation
3
+ include Podio::ResponseWrapper
4
+ extend self
5
+
6
+ def find(conversation_id)
7
+ member Podio.connection.get("/conversation/#{conversation_id}").body
8
+ end
9
+
10
+ def find_all_for_reference(ref_type, ref_id)
11
+ list Podio.connection.get("/conversation/#{ref_type}/#{ref_id}/").body
12
+ end
13
+
14
+ def create(attributes)
15
+ response = Podio.connection.post do |req|
16
+ req.url '/conversation/'
17
+ req.body = attributes
18
+ end
19
+ response.body
20
+ end
21
+
22
+ def create_for_reference(ref_type, ref_id, attributes)
23
+ response = Podio.connection.post do |req|
24
+ req.url "/conversation/#{ref_type}/#{ref_id}/"
25
+ req.body = attributes
26
+ end
27
+
28
+ response.body
29
+ end
30
+
31
+ end
32
+ end
@@ -19,5 +19,17 @@ module Podio
19
19
  Podio.connection.post "/file/#{file_id}/available"
20
20
  end
21
21
 
22
+ # Attach a file to an existing reference
23
+ def attach(file_id, ref_type, ref_id)
24
+ Podio.connection.post do |req|
25
+ req.url "/file/#{file_id}/attach"
26
+ req.body = { :ref_type => ref_type, :ref_id => ref_id }
27
+ end
28
+ end
29
+
30
+ def copy(file_id)
31
+ Podio.connection.post("/file/#{file_id}/copy").body['file_id']
32
+ end
33
+
22
34
  end
23
35
  end
@@ -0,0 +1,43 @@
1
+ module Podio
2
+ module Integration
3
+ include Podio::ResponseWrapper
4
+ extend self
5
+
6
+ def create(app_id, attributes)
7
+ response = Podio.connection.post do |req|
8
+ req.url "/integration/#{app_id}"
9
+ req.body = {:type => attributes[:type], :silent => attributes[:silent], :config => attributes[:config]}
10
+ end
11
+
12
+ response.body['integration_id']
13
+ end
14
+
15
+ def update(app_id, attributes)
16
+ response = Podio.connection.put do |req|
17
+ req.url "/integration/#{app_id}"
18
+ req.body = {:silent => attributes[:silent], :config => attributes[:config]}
19
+ end
20
+
21
+ response.body
22
+ end
23
+
24
+ def update_mapping(app_id, attributes)
25
+ response = Podio.connection.put do |req|
26
+ req.url "/integration/#{app_id}/mapping"
27
+ req.body = attributes[:mapping]
28
+ end
29
+ end
30
+
31
+ def find(app_id)
32
+ member Podio.connection.get("/integration/#{app_id}").body
33
+ end
34
+
35
+ def find_available_fields_for(app_id)
36
+ list Podio.connection.get("/integration/#{app_id}/field/").body
37
+ end
38
+
39
+ def delete(app_id)
40
+ Podio.connection.delete("/integration/#{app_id}").status
41
+ end
42
+ end
43
+ end
@@ -7,6 +7,10 @@ module Podio
7
7
  member Podio.connection.get("/item/#{id}").body
8
8
  end
9
9
 
10
+ def find_basic(id)
11
+ member Podio.connection.get("/item/#{id}/basic").body
12
+ end
13
+
10
14
  def find_all_by_external_id(app_id, external_id)
11
15
  collection Podio.connection.get("/item/app/#{app_id}/v2/?external_id=#{external_id}").body
12
16
  end
@@ -55,13 +55,17 @@ module Podio
55
55
  }.body
56
56
  end
57
57
 
58
- def update_profile(id, attributes)
58
+ def update_billing_profile(id, attributes)
59
59
  response = Podio.connection.put do |req|
60
- req.url "/org/#{id}/profile"
60
+ req.url "/org/#{id}/billing"
61
61
  req.body = attributes
62
62
  end
63
63
  response.status
64
64
  end
65
-
65
+
66
+ def upgrade(id)
67
+ Podio.connection.post("/org/#{id}/upgrade").body
68
+ end
69
+
66
70
  end
67
71
  end
@@ -0,0 +1,32 @@
1
+ module Podio
2
+ module OrganizationProfile
3
+ include Podio::ResponseWrapper
4
+ extend self
5
+
6
+ def find(org_id)
7
+ member Podio.connection.get("/org/#{org_id}/appstore").body
8
+ end
9
+
10
+ def create(org_id, attributes)
11
+ response = Podio.connection.post do |req|
12
+ req.url "/org/#{org_id}/appstore"
13
+ req.body = attributes
14
+ end
15
+
16
+ response.body
17
+ end
18
+
19
+ def update(org_id, attributes)
20
+ response = Podio.connection.put do |req|
21
+ req.url "/org/#{org_id}/appstore"
22
+ req.body = attributes
23
+ end
24
+ response.status
25
+ end
26
+
27
+ def delete(org_id)
28
+ Podio.connection.delete("/org/#{org_id}/appstore").status
29
+ end
30
+
31
+ end
32
+ end
@@ -1,3 +1,5 @@
1
+ require "erb"
2
+
1
3
  module Podio
2
4
  module Space
3
5
  include Podio::ResponseWrapper
@@ -16,9 +18,14 @@ module Podio
16
18
  member Podio.connection.get("/space/#{id}").body
17
19
  end
18
20
 
21
+ def find_by_url(url)
22
+ member Podio.connection.get("/space/url?url=#{ERB::Util.url_encode(url)}").body
23
+ end
24
+
19
25
  def find_all_for_org(org_id)
20
26
  list Podio.connection.get("/org/#{org_id}/space/").body
21
27
  end
28
+
22
29
  end
23
30
 
24
31
  module SpaceInvite
@@ -43,4 +50,28 @@ module Podio
43
50
  response.body
44
51
  end
45
52
  end
53
+
54
+ module SpaceMember
55
+ include Podio::ResponseWrapper
56
+ extend self
57
+
58
+ def find_all_for_role(space_id, role)
59
+ list Podio.connection.get { |req|
60
+ req.url("/space/#{space_id}/member/#{role}/")
61
+ }.body
62
+ end
63
+
64
+ def update_role(space_id, user_id, role)
65
+ response = Podio.connection.put do |req|
66
+ req.url "/space/#{space_id}/member/#{user_id}"
67
+ req.body = { :role => role.to_s }
68
+ end
69
+ response.status
70
+ end
71
+
72
+ def end_membership(space_id, user_id)
73
+ Podio.connection.delete("/space/#{space_id}/member/#{user_id}").status
74
+ end
75
+
76
+ end
46
77
  end
@@ -0,0 +1,10 @@
1
+ module Podio
2
+ module Status
3
+ include Podio::ResponseWrapper
4
+ extend self
5
+
6
+ def find(id)
7
+ member Podio.connection.get("/status/#{id}").body
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,104 @@
1
+ module Podio
2
+ module Task
3
+ include Podio::ResponseWrapper
4
+ extend self
5
+
6
+ def create(attributes)
7
+ response = Podio.connection.post do |req|
8
+ req.url "/task/"
9
+ req.body = attributes
10
+ end
11
+
12
+ response.body['task_id']
13
+ end
14
+
15
+ def create_with_ref(ref_type, ref_id, attributes)
16
+ response = Podio.connection.post do |req|
17
+ req.url "/task/#{ref_type}/#{ref_id}/"
18
+ req.body = attributes
19
+ end
20
+
21
+ response.body['task_id']
22
+ end
23
+
24
+ def update_description(id, description)
25
+ Podio.connection.put("/task/#{id}/description", {:description => description}).status
26
+ end
27
+
28
+ def update_text(id, text)
29
+ Podio.connection.put("/task/#{id}/text", {:text => text}).status
30
+ end
31
+
32
+ def update_private(id, private_flag)
33
+ Podio.connection.put("/task/#{id}/private", {:private => private_flag}).status
34
+ end
35
+
36
+ def update_due_date(id, due_date)
37
+ Podio.connection.put("/task/#{id}/due_date", {:due_date => due_date}).status
38
+ end
39
+
40
+ def update_assignee(id, user_id)
41
+ Podio.connection.post("/task/#{id}/assign", {:responsible => user_id}).status
42
+ end
43
+
44
+ def update_labels(id, label_ids)
45
+ Podio.connection.put("/task/#{id}/label/", label_ids).status
46
+ end
47
+
48
+ def delete(id)
49
+ Podio.connection.delete("/task/#{id}").status
50
+ end
51
+
52
+ def complete(id)
53
+ Podio.connection.post("/task/#{id}/complete").body
54
+ end
55
+
56
+ def incomplete(id)
57
+ Podio.connection.post("/task/#{id}/incomplete").body
58
+ end
59
+
60
+ def rank(id, before_task_id, after_task_id)
61
+ Podio.connection.post("/task/#{id}/rank", {:before => before_task_id, :after => after_task_id}).body
62
+ end
63
+
64
+ def find(id)
65
+ member Podio.connection.get("/task/#{id}").body
66
+ end
67
+
68
+ def find_all(options={})
69
+ list Podio.connection.get { |req|
70
+ req.url('/task/', options)
71
+ }.body
72
+ end
73
+ end
74
+
75
+ module TaskLabel
76
+ include Podio::ResponseWrapper
77
+ extend self
78
+
79
+ def find_all_labels
80
+ list Podio.connection.get { |req|
81
+ req.url("/task/label/")
82
+ }.body
83
+ end
84
+
85
+ def create(attributes)
86
+ response = Podio.connection.post do |req|
87
+ req.url "/task/label/"
88
+ req.body = attributes
89
+ end
90
+
91
+ response.body['label_id']
92
+ end
93
+
94
+ def delete(label_id)
95
+ Podio.connection.delete("/task/label/#{label_id}").status
96
+ end
97
+
98
+ def update(label_id, text, color)
99
+ Podio.connection.put("/task/label/#{label_id}", {:text => text, :color => color}).status
100
+ end
101
+
102
+ end
103
+ end
104
+
@@ -7,13 +7,17 @@ module Podio
7
7
  member Podio.connection.get("/user/").body
8
8
  end
9
9
 
10
- def create(token, attributes)
10
+ def create(attributes)
11
11
  response = Podio.connection.post do |req|
12
12
  req.url '/user/'
13
- req.body = attributes.merge(:token => token)
13
+ req.body = attributes
14
14
  end
15
15
 
16
16
  response.body['user_id']
17
17
  end
18
+
19
+ def find_all_admins_for_org(org_id)
20
+ list Podio.connection.get("/org/#{org_id}/admin/").body
21
+ end
18
22
  end
19
23
  end
data/lib/podio/client.rb CHANGED
@@ -1,14 +1,16 @@
1
1
  module Podio
2
2
  class Client
3
- attr_reader :api_url, :api_key, :api_secret, :debug, :connection
4
- attr_accessor :oauth_token, :stubs
3
+ attr_reader :api_url, :api_key, :api_secret, :connection
4
+ attr_accessor :oauth_token, :stubs, :current_http_client
5
5
 
6
6
  def initialize(options = {})
7
7
  @api_url = options[:api_url] || Podio.api_url || 'https://api.podio.com'
8
8
  @api_key = options[:api_key] || Podio.api_key
9
9
  @api_secret = options[:api_secret] || Podio.api_secret
10
- @debug = options[:debug] || Podio.debug
10
+ @logger = options[:logger] || Podio::StdoutLogger.new(options[:debug] || Podio.debug)
11
11
  @oauth_token = options[:oauth_token]
12
+ @headers = options[:custom_headers] || {}
13
+ @adapter = options[:adapter] || Faraday.default_adapter
12
14
 
13
15
  if options[:enable_stubs]
14
16
  @enable_stubs = true
@@ -20,6 +22,10 @@ module Podio
20
22
  setup_connections
21
23
  end
22
24
 
25
+ def log(env, &block)
26
+ @logger.log(env, &block)
27
+ end
28
+
23
29
  def reset
24
30
  setup_connections
25
31
  end
@@ -56,7 +62,7 @@ module Podio
56
62
  end
57
63
 
58
64
  def configured_headers
59
- headers = {}
65
+ headers = @headers.dup
60
66
  headers['User-Agent'] = 'Podio Ruby Library'
61
67
  headers['authorization'] = "OAuth2 #{oauth_token.access_token}" if oauth_token
62
68
  headers['X-Podio-Dry-Run'] = '1' if @test_mode
@@ -86,7 +92,7 @@ module Podio
86
92
  end
87
93
 
88
94
  def default_adapter
89
- @enable_stubs ? [:test, @stubs] : Faraday.default_adapter
95
+ @enable_stubs ? [:test, @stubs] : @adapter
90
96
  end
91
97
 
92
98
  def configure_oauth_connection
@@ -12,10 +12,10 @@ module Podio
12
12
  if finished_env[:body]['error_description'] =~ /expired_token/
13
13
  raise Error::TokenExpired, finished_env[:body].inspect
14
14
  else
15
- raise Error::AuthorizationError, finished_env[:body].inspect
15
+ raise Error::AuthorizationError, finished_env[:body]
16
16
  end
17
17
  when 403
18
- raise Error::AuthorizationError, finished_env[:body].inspect
18
+ raise Error::AuthorizationError, finished_env[:body]
19
19
  when 404
20
20
  raise Error::NotFoundError, "#{finished_env[:method].to_s.upcase} #{finished_env[:url]}"
21
21
  when 410
@@ -1,12 +1,7 @@
1
1
  module Podio
2
2
  module Middleware
3
3
  class JsonRequest < Faraday::Middleware
4
- begin
5
- require 'multi_json'
6
-
7
- rescue LoadError, NameError => e
8
- self.load_error = e
9
- end
4
+ require 'multi_json'
10
5
 
11
6
  def call(env)
12
7
  env[:request_headers]['Content-Type'] = 'application/json'
@@ -4,18 +4,14 @@
4
4
  module Podio
5
5
  module Middleware
6
6
  class JsonResponse < Faraday::Response::Middleware
7
- begin
8
- require 'multi_json'
7
+ require 'multi_json'
9
8
 
10
- def self.register_on_complete(env)
11
- env[:response].on_complete do |finished_env|
12
- if finished_env[:body].is_a?(String) && finished_env[:status] < 500
13
- finished_env[:body] = parse(finished_env[:body])
14
- end
9
+ def self.register_on_complete(env)
10
+ env[:response].on_complete do |finished_env|
11
+ if finished_env[:body].is_a?(String) && finished_env[:status] < 500
12
+ finished_env[:body] = parse(finished_env[:body])
15
13
  end
16
14
  end
17
- rescue LoadError, NameError => e
18
- self.load_error = e
19
15
  end
20
16
 
21
17
  def initialize(app)
@@ -24,6 +20,7 @@ module Podio
24
20
  end
25
21
 
26
22
  def self.parse(body)
23
+ return nil if body !~ /\S/ # json gem doesn't like decoding blank strings
27
24
  MultiJson.decode(body)
28
25
  rescue Object => err
29
26
  raise Faraday::Error::ParsingError.new(err)
@@ -4,16 +4,8 @@ module Podio
4
4
  module Middleware
5
5
  class Logger < Faraday::Middleware
6
6
  def call(env)
7
- if env[:request][:client].debug
8
- puts "\n==> #{env[:method].to_s.upcase} #{env[:url]} \n\n"
9
- end
10
-
11
- begin
7
+ env[:request][:client].log(env) do
12
8
  @app.call(env)
13
- ensure
14
- if env[:request][:client].debug
15
- puts "\n== (#{env[:status]}) ==> #{env[:body]}\n\n"
16
- end
17
9
  end
18
10
  end
19
11
 
data/lib/podio/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Podio
2
- VERSION = '0.2.1'
2
+ VERSION = '0.3.0'
3
3
  end
data/podio.gemspec CHANGED
@@ -17,6 +17,7 @@ Gem::Specification.new do |s|
17
17
 
18
18
  s.add_runtime_dependency 'faraday', '~> 0.5.1'
19
19
  s.add_runtime_dependency 'activesupport', '~> 3.0'
20
+ s.add_runtime_dependency 'i18n', '>= 0.4.2'
20
21
  s.add_runtime_dependency 'multi_json', '~> 0.0.5'
21
22
 
22
23
  s.description = <<desc
metadata CHANGED
@@ -1,12 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: podio
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 2
8
- - 1
9
- version: 0.2.1
4
+ prerelease:
5
+ version: 0.3.0
10
6
  platform: ruby
11
7
  authors:
12
8
  - Florian Munz
@@ -14,7 +10,7 @@ autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2011-01-28 00:00:00 +01:00
13
+ date: 2011-04-05 00:00:00 +02:00
18
14
  default_executable:
19
15
  dependencies:
20
16
  - !ruby/object:Gem::Dependency
@@ -25,10 +21,6 @@ dependencies:
25
21
  requirements:
26
22
  - - ~>
27
23
  - !ruby/object:Gem::Version
28
- segments:
29
- - 0
30
- - 5
31
- - 1
32
24
  version: 0.5.1
33
25
  type: :runtime
34
26
  version_requirements: *id001
@@ -40,27 +32,31 @@ dependencies:
40
32
  requirements:
41
33
  - - ~>
42
34
  - !ruby/object:Gem::Version
43
- segments:
44
- - 3
45
- - 0
46
35
  version: "3.0"
47
36
  type: :runtime
48
37
  version_requirements: *id002
49
38
  - !ruby/object:Gem::Dependency
50
- name: multi_json
39
+ name: i18n
51
40
  prerelease: false
52
41
  requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 0.4.2
47
+ type: :runtime
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
+ name: multi_json
51
+ prerelease: false
52
+ requirement: &id004 !ruby/object:Gem::Requirement
53
53
  none: false
54
54
  requirements:
55
55
  - - ~>
56
56
  - !ruby/object:Gem::Version
57
- segments:
58
- - 0
59
- - 0
60
- - 5
61
57
  version: 0.0.5
62
58
  type: :runtime
63
- version_requirements: *id003
59
+ version_requirements: *id004
64
60
  description: |
65
61
  The humble beginnings of the Ruby wrapper for the Podio API.
66
62
 
@@ -80,15 +76,22 @@ files:
80
76
  - lib/podio.rb
81
77
  - lib/podio/areas/app_store.rb
82
78
  - lib/podio/areas/application.rb
79
+ - lib/podio/areas/bulletin.rb
80
+ - lib/podio/areas/comment.rb
83
81
  - lib/podio/areas/connection.rb
84
82
  - lib/podio/areas/contact.rb
83
+ - lib/podio/areas/conversation.rb
85
84
  - lib/podio/areas/file.rb
86
85
  - lib/podio/areas/form.rb
86
+ - lib/podio/areas/integration.rb
87
87
  - lib/podio/areas/item.rb
88
88
  - lib/podio/areas/organization.rb
89
89
  - lib/podio/areas/organization_member.rb
90
+ - lib/podio/areas/organization_profile.rb
90
91
  - lib/podio/areas/search.rb
91
92
  - lib/podio/areas/space.rb
93
+ - lib/podio/areas/status.rb
94
+ - lib/podio/areas/task.rb
92
95
  - lib/podio/areas/user.rb
93
96
  - lib/podio/areas/user_status.rb
94
97
  - lib/podio/areas/widget.rb
@@ -127,21 +130,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
127
130
  requirements:
128
131
  - - ">="
129
132
  - !ruby/object:Gem::Version
130
- segments:
131
- - 0
132
133
  version: "0"
133
134
  required_rubygems_version: !ruby/object:Gem::Requirement
134
135
  none: false
135
136
  requirements:
136
137
  - - ">="
137
138
  - !ruby/object:Gem::Version
138
- segments:
139
- - 0
140
139
  version: "0"
141
140
  requirements: []
142
141
 
143
142
  rubyforge_project:
144
- rubygems_version: 1.3.7
143
+ rubygems_version: 1.5.0
145
144
  signing_key:
146
145
  specification_version: 3
147
146
  summary: Ruby wrapper for the Podio API