podio 0.2.0 → 0.2.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/Rakefile +4 -0
- data/lib/podio.rb +3 -1
- data/lib/podio/areas/connection.rb +31 -0
- data/lib/podio/areas/contact.rb +24 -3
- data/lib/podio/client.rb +2 -2
- data/lib/podio/error.rb +1 -0
- data/lib/podio/middleware/error_response.rb +2 -0
- data/lib/podio/middleware/json_request.rb +20 -0
- data/lib/podio/middleware/{yajl_response.rb → json_response.rb} +7 -5
- data/lib/podio/version.rb +1 -1
- data/podio.gemspec +1 -1
- data/test/app_store_test.rb +2 -2
- data/test/client_test.rb +2 -2
- data/test/contact_test.rb +4 -4
- data/test/item_test.rb +4 -4
- data/test/organization_test.rb +2 -2
- data/test/space_test.rb +4 -4
- data/test/test_helper.rb +22 -4
- data/test/widget_test.rb +2 -2
- metadata +10 -7
data/Rakefile
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'rake'
|
1
2
|
require 'rake/testtask'
|
2
3
|
require 'bundler'
|
3
4
|
|
@@ -5,6 +6,9 @@ Bundler::GemHelper.install_tasks
|
|
5
6
|
|
6
7
|
desc 'Run tests'
|
7
8
|
Rake::TestTask.new(:test) do |t|
|
9
|
+
#ENV['ENABLE_STUBS'] = 'true'
|
10
|
+
t.ruby_opts = ["-rubygems"] if defined? Gem
|
11
|
+
t.libs << "lib" << "test"
|
8
12
|
t.pattern = 'test/**/*_test.rb'
|
9
13
|
t.verbose = true
|
10
14
|
end
|
data/lib/podio.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
require 'faraday'
|
2
2
|
require 'active_support/core_ext'
|
3
3
|
|
4
|
+
require 'podio/middleware/json_request'
|
4
5
|
require 'podio/middleware/date_conversion'
|
5
6
|
require 'podio/middleware/logger'
|
6
7
|
require 'podio/middleware/oauth2'
|
7
8
|
require 'podio/middleware/podio_api'
|
8
|
-
require 'podio/middleware/
|
9
|
+
require 'podio/middleware/json_response'
|
9
10
|
require 'podio/middleware/error_response'
|
10
11
|
require 'podio/middleware/response_recorder'
|
11
12
|
|
@@ -48,6 +49,7 @@ module Podio
|
|
48
49
|
|
49
50
|
autoload :Application, 'podio/areas/application'
|
50
51
|
autoload :Category, 'podio/areas/app_store'
|
52
|
+
autoload :Connection, 'podio/areas/connection'
|
51
53
|
autoload :Contact, 'podio/areas/contact'
|
52
54
|
autoload :File, 'podio/areas/file'
|
53
55
|
autoload :Form, 'podio/areas/form'
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Podio
|
2
|
+
module Connection
|
3
|
+
include Podio::ResponseWrapper
|
4
|
+
extend self
|
5
|
+
|
6
|
+
def create(attributes)
|
7
|
+
response = Podio.connection.post do |req|
|
8
|
+
req.url '/connection/'
|
9
|
+
req.body = attributes
|
10
|
+
end
|
11
|
+
|
12
|
+
response.body['connection_id']
|
13
|
+
end
|
14
|
+
|
15
|
+
def reload(id)
|
16
|
+
Podio.connection.post("/connection/#{id}/load").body
|
17
|
+
end
|
18
|
+
|
19
|
+
def find(id)
|
20
|
+
member Podio.connection.get("/connection/#{id}").body
|
21
|
+
end
|
22
|
+
|
23
|
+
def delete(id)
|
24
|
+
Podio.connection.delete("/connection/#{id}").status
|
25
|
+
end
|
26
|
+
|
27
|
+
def all(options={})
|
28
|
+
list Podio.connection.get('/connection/').body
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/podio/areas/contact.rb
CHANGED
@@ -11,8 +11,8 @@ module Podio
|
|
11
11
|
}.body
|
12
12
|
end
|
13
13
|
|
14
|
-
def find(
|
15
|
-
member Podio.connection.get("/contact/#{
|
14
|
+
def find(profile_id)
|
15
|
+
member Podio.connection.get("/contact/#{profile_id}/v2").body
|
16
16
|
end
|
17
17
|
|
18
18
|
def find_all_for_org(org_id, options={})
|
@@ -23,7 +23,24 @@ module Podio
|
|
23
23
|
req.url("/contact/org/#{org_id}", options)
|
24
24
|
}.body
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
|
+
def find_all_for_space(space_id, options={})
|
28
|
+
options.assert_valid_keys(:key, :value, :limit, :offset, :type, :order)
|
29
|
+
options[:type] ||= 'full'
|
30
|
+
|
31
|
+
list Podio.connection.get { |req|
|
32
|
+
req.url("/contact/space/#{space_id}", options)
|
33
|
+
}.body
|
34
|
+
end
|
35
|
+
|
36
|
+
def find_all_for_connection(connection_id)
|
37
|
+
list Podio.connection.get("/contact/connection/#{connection_id}").body
|
38
|
+
end
|
39
|
+
|
40
|
+
def find_all_for_connection_type(connection_type)
|
41
|
+
list Podio.connection.get("/contact/connection/#{connection_type}").body
|
42
|
+
end
|
43
|
+
|
27
44
|
def find_for_org(org_id)
|
28
45
|
member Podio.connection.get("/org/#{org_id}/profile").body
|
29
46
|
end
|
@@ -31,6 +48,10 @@ module Podio
|
|
31
48
|
def totals_by_org
|
32
49
|
Podio.connection.get("/contact/totals/").body
|
33
50
|
end
|
51
|
+
|
52
|
+
def totals_by_org_and_space
|
53
|
+
Podio.connection.get("/contact/totals/v2/").body
|
54
|
+
end
|
34
55
|
|
35
56
|
end
|
36
57
|
end
|
data/lib/podio/client.rb
CHANGED
@@ -73,13 +73,13 @@ module Podio
|
|
73
73
|
|
74
74
|
def configure_connection
|
75
75
|
Faraday::Connection.new(:url => api_url, :headers => configured_headers, :request => {:client => self}) do |builder|
|
76
|
-
builder.use
|
76
|
+
builder.use Middleware::JsonRequest
|
77
77
|
builder.use Middleware::PodioApi
|
78
78
|
builder.use Middleware::OAuth2
|
79
79
|
builder.use Middleware::Logger
|
80
80
|
builder.adapter(*default_adapter)
|
81
81
|
builder.use Middleware::ResponseRecorder if @record_mode
|
82
|
-
builder.use Middleware::
|
82
|
+
builder.use Middleware::JsonResponse
|
83
83
|
builder.use Middleware::ErrorResponse
|
84
84
|
builder.use Middleware::DateConversion
|
85
85
|
end
|
data/lib/podio/error.rb
CHANGED
@@ -22,6 +22,8 @@ module Podio
|
|
22
22
|
raise Error::GoneError, "#{finished_env[:method].to_s.upcase} #{finished_env[:url]}"
|
23
23
|
when 500
|
24
24
|
raise Error::ServerError, finished_env[:body].inspect
|
25
|
+
when 502, 503
|
26
|
+
raise Error::Unavailable, finished_env[:body].inspect
|
25
27
|
end
|
26
28
|
end
|
27
29
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Podio
|
2
|
+
module Middleware
|
3
|
+
class JsonRequest < Faraday::Middleware
|
4
|
+
begin
|
5
|
+
require 'multi_json'
|
6
|
+
|
7
|
+
rescue LoadError, NameError => e
|
8
|
+
self.load_error = e
|
9
|
+
end
|
10
|
+
|
11
|
+
def call(env)
|
12
|
+
env[:request_headers]['Content-Type'] = 'application/json'
|
13
|
+
if env[:body] && !env[:body].respond_to?(:to_str)
|
14
|
+
env[:body] = MultiJson.encode(env[:body])
|
15
|
+
end
|
16
|
+
@app.call env
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -1,15 +1,17 @@
|
|
1
|
-
# Custom
|
1
|
+
# Custom Json response until I find a way to only parse the body once in
|
2
2
|
# the OAuth2 retry case
|
3
3
|
#
|
4
4
|
module Podio
|
5
5
|
module Middleware
|
6
|
-
class
|
6
|
+
class JsonResponse < Faraday::Response::Middleware
|
7
7
|
begin
|
8
|
-
require '
|
8
|
+
require 'multi_json'
|
9
9
|
|
10
10
|
def self.register_on_complete(env)
|
11
11
|
env[:response].on_complete do |finished_env|
|
12
|
-
finished_env[:body]
|
12
|
+
if finished_env[:body].is_a?(String) && finished_env[:status] < 500
|
13
|
+
finished_env[:body] = parse(finished_env[:body])
|
14
|
+
end
|
13
15
|
end
|
14
16
|
end
|
15
17
|
rescue LoadError, NameError => e
|
@@ -22,7 +24,7 @@ module Podio
|
|
22
24
|
end
|
23
25
|
|
24
26
|
def self.parse(body)
|
25
|
-
|
27
|
+
MultiJson.decode(body)
|
26
28
|
rescue Object => err
|
27
29
|
raise Faraday::Error::ParsingError.new(err)
|
28
30
|
end
|
data/lib/podio/version.rb
CHANGED
data/podio.gemspec
CHANGED
@@ -17,7 +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 '
|
20
|
+
s.add_runtime_dependency 'multi_json', '~> 0.0.5'
|
21
21
|
|
22
22
|
s.description = <<desc
|
23
23
|
The humble beginnings of the Ruby wrapper for the Podio API.
|
data/test/app_store_test.rb
CHANGED
data/test/client_test.rb
CHANGED
data/test/contact_test.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
|
1
|
+
require 'test_helper'
|
2
2
|
|
3
|
-
class ContactTest <
|
3
|
+
class ContactTest < Test::Unit::TestCase
|
4
4
|
test 'should find single contact' do
|
5
5
|
contact = Podio::Contact.find(1)
|
6
6
|
|
@@ -16,11 +16,11 @@ class ContactTest < ActiveSupport::TestCase
|
|
16
16
|
end
|
17
17
|
|
18
18
|
test 'should find all for org filtered by key' do
|
19
|
-
contacts = Podio::Contact.find_all_for_org(1, :key => 'organization', :value => '
|
19
|
+
contacts = Podio::Contact.find_all_for_org(1, :key => 'organization', :value => 'Hoist')
|
20
20
|
|
21
21
|
assert contacts.size > 0
|
22
22
|
contacts.each do |contact|
|
23
|
-
assert_equal '
|
23
|
+
assert_equal 'Hoist', contact['organization']
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
data/test/item_test.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
|
1
|
+
require 'test_helper'
|
2
2
|
|
3
|
-
class ItemTest <
|
3
|
+
class ItemTest < Test::Unit::TestCase
|
4
4
|
test 'should find single item' do
|
5
5
|
item = Podio::Item.find(1)
|
6
6
|
|
@@ -17,14 +17,14 @@ class ItemTest < ActiveSupport::TestCase
|
|
17
17
|
end
|
18
18
|
|
19
19
|
test 'should find items by external id' do
|
20
|
-
items = Podio::Item.find_all_by_external_id(1, '
|
20
|
+
items = Podio::Item.find_all_by_external_id(1, 'Bar generator')
|
21
21
|
|
22
22
|
assert items['count'] > 0
|
23
23
|
assert items['total_count'] > 0
|
24
24
|
|
25
25
|
assert items['all'].is_a?(Array)
|
26
26
|
items['all'].each do |item|
|
27
|
-
assert_equal '
|
27
|
+
assert_equal 'Bar generator', item['external_id']
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
data/test/organization_test.rb
CHANGED
data/test/space_test.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
|
-
|
1
|
+
require 'test_helper'
|
2
2
|
|
3
|
-
class SpaceTest <
|
4
|
-
|
3
|
+
class SpaceTest < Test::Unit::TestCase
|
4
|
+
def test_should_find_single_space
|
5
5
|
space = Podio::Space.find(1)
|
6
6
|
|
7
7
|
assert_equal 1, space['space_id']
|
8
8
|
assert_equal 'API', space['name']
|
9
9
|
end
|
10
10
|
|
11
|
-
|
11
|
+
def test_should_find_all_for_org
|
12
12
|
spaces = Podio::Space.find_all_for_org(1)
|
13
13
|
|
14
14
|
assert spaces.is_a?(Array)
|
data/test/test_helper.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'test/unit'
|
2
2
|
require 'yajl'
|
3
|
-
require 'active_support'
|
4
3
|
|
5
4
|
require 'podio'
|
6
5
|
|
@@ -8,9 +7,28 @@ require 'podio'
|
|
8
7
|
ENABLE_STUBS = ENV['ENABLE_STUBS'] == 'true'
|
9
8
|
ENABLE_RECORD = ENV['ENABLE_RECORD'] == 'true'
|
10
9
|
|
11
|
-
class
|
12
|
-
|
13
|
-
setup
|
10
|
+
class Test::Unit::TestCase
|
11
|
+
|
12
|
+
def setup
|
13
|
+
set_podio_client
|
14
|
+
stub_responses if ENABLE_STUBS
|
15
|
+
end
|
16
|
+
|
17
|
+
# test "verify something" do
|
18
|
+
# ...
|
19
|
+
# end
|
20
|
+
def self.test(name, &block)
|
21
|
+
test_name = "test_#{name.gsub(/\s+/,'_')}".to_sym
|
22
|
+
defined = instance_method(test_name) rescue false
|
23
|
+
raise "#{test_name} is already defined in #{self}" if defined
|
24
|
+
if block_given?
|
25
|
+
define_method(test_name, &block)
|
26
|
+
else
|
27
|
+
define_method(test_name) do
|
28
|
+
flunk "No implementation provided for #{name}"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
14
32
|
|
15
33
|
def set_podio_client(user_id = 1)
|
16
34
|
Podio.client = Podio::Client.new(
|
data/test/widget_test.rb
CHANGED
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
version: 0.2.
|
8
|
+
- 1
|
9
|
+
version: 0.2.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Florian Munz
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-01-
|
17
|
+
date: 2011-01-28 00:00:00 +01:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -47,7 +47,7 @@ dependencies:
|
|
47
47
|
type: :runtime
|
48
48
|
version_requirements: *id002
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
|
-
name:
|
50
|
+
name: multi_json
|
51
51
|
prerelease: false
|
52
52
|
requirement: &id003 !ruby/object:Gem::Requirement
|
53
53
|
none: false
|
@@ -56,8 +56,9 @@ dependencies:
|
|
56
56
|
- !ruby/object:Gem::Version
|
57
57
|
segments:
|
58
58
|
- 0
|
59
|
-
-
|
60
|
-
|
59
|
+
- 0
|
60
|
+
- 5
|
61
|
+
version: 0.0.5
|
61
62
|
type: :runtime
|
62
63
|
version_requirements: *id003
|
63
64
|
description: |
|
@@ -79,6 +80,7 @@ files:
|
|
79
80
|
- lib/podio.rb
|
80
81
|
- lib/podio/areas/app_store.rb
|
81
82
|
- lib/podio/areas/application.rb
|
83
|
+
- lib/podio/areas/connection.rb
|
82
84
|
- lib/podio/areas/contact.rb
|
83
85
|
- lib/podio/areas/file.rb
|
84
86
|
- lib/podio/areas/form.rb
|
@@ -94,11 +96,12 @@ files:
|
|
94
96
|
- lib/podio/error.rb
|
95
97
|
- lib/podio/middleware/date_conversion.rb
|
96
98
|
- lib/podio/middleware/error_response.rb
|
99
|
+
- lib/podio/middleware/json_request.rb
|
100
|
+
- lib/podio/middleware/json_response.rb
|
97
101
|
- lib/podio/middleware/logger.rb
|
98
102
|
- lib/podio/middleware/oauth2.rb
|
99
103
|
- lib/podio/middleware/podio_api.rb
|
100
104
|
- lib/podio/middleware/response_recorder.rb
|
101
|
-
- lib/podio/middleware/yajl_response.rb
|
102
105
|
- lib/podio/response_wrapper.rb
|
103
106
|
- lib/podio/version.rb
|
104
107
|
- podio.gemspec
|