xing_api_client 0.0.3 → 0.0.4

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.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- N2E4ZTQ2ZTc0YmVjOGQxNWYzNWJhMmVhYmI1MGMzYzZkMzZlMzdhNA==
5
- data.tar.gz: !binary |-
6
- NmFmNjJlOThlZWM3YjA1M2ZmYzNlMzk1ZWZjYTcyMjFlOGYxNzdkYg==
2
+ SHA1:
3
+ metadata.gz: 75e534abd891af04eb014e3983a57023e8963b64
4
+ data.tar.gz: e919f7ff97365327acc31c13c2be08c1fcf64e79
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- NGNkOWY0OWEzZmIyODEwODNkZjQ3YTVlMDczY2NlNzhlNzYwM2ZjNzBlNDI2
10
- ZGJhMzhhNjQ1YzhmMDQ2ZDhhZmFjMjE3ZjUxNWVkOGNmOGNmZDI4ZGIzMjI3
11
- NGQ5M2Y3YmMyMTBmYzgwMDE2MzY4NmY3MjVkOGI2NTE4NDlhYTU=
12
- data.tar.gz: !binary |-
13
- NjYwMTFmOGMyZTJmNGE0MDQ4Yjg2MjQ4NmI3ZDE2OGNiZjE3ZmQxYmI3MDQz
14
- NTFiOTE3MDAzNDRiN2UyNTI2NDI5NWJhYTBiNWI3YWM3YWU5ZDQwNzczNTIw
15
- YTE3OTIwYmM0NTE0ZjQ1YTU3MmQ4NzI2NzhjNWI4NjlhNzc2MmE=
6
+ metadata.gz: cac9998eea8762b84fa47ca56a163df9fbcd4e955f5c1181d6d363a3dd4314c0f353f399c93ecfc57d7f88823a90044283969fc27dbb95670dd845aa9af667c5
7
+ data.tar.gz: e007a8ca2c70f9b65f43592eaca28e840f45b36bd01aadfd0c9d7d50432c1f58db10e567939fdb1bc9e496796587bd0da8cdb73874b1c6bb005fdd6ba2d4c8d5
data/Gemfile.lock CHANGED
@@ -1,19 +1,22 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- xing_api_client (0.0.2)
4
+ xing_api_client (0.0.4)
5
5
  activesupport
6
- bundler (~> 1.3)
6
+ bundler
7
+ faraday
8
+ faraday_middleware
7
9
  mimemagic
8
10
  multipart-post
9
11
  oauth
10
12
  parallel
11
13
  rake
14
+ simple_oauth
12
15
 
13
16
  GEM
14
17
  remote: https://rubygems.org/
15
18
  specs:
16
- activesupport (4.1.0)
19
+ activesupport (4.1.4)
17
20
  i18n (~> 0.6, >= 0.6.9)
18
21
  json (~> 1.7, >= 1.7.7)
19
22
  minitest (~> 5.1)
@@ -21,77 +24,86 @@ GEM
21
24
  tzinfo (~> 1.1)
22
25
  celluloid (0.15.2)
23
26
  timers (~> 1.1.0)
24
- coderay (1.0.9)
25
- columnize (0.8.9)
27
+ coderay (1.1.0)
26
28
  coveralls (0.7.0)
27
29
  multi_json (~> 1.3)
28
30
  rest-client
29
31
  simplecov (>= 0.7)
30
32
  term-ansicolor
31
33
  thor
32
- debugger (1.6.6)
33
- columnize (>= 0.3.1)
34
- debugger-linecache (~> 1.2.0)
35
- debugger-ruby_core_source (~> 1.3.2)
36
- debugger-linecache (1.2.0)
37
- debugger-ruby_core_source (1.3.2)
38
- diff-lcs (1.2.4)
39
- ffi (1.9.0)
40
- formatador (0.2.4)
41
- guard (2.2.2)
34
+ diff-lcs (1.2.5)
35
+ docile (1.1.5)
36
+ faraday (0.9.0)
37
+ multipart-post (>= 1.2, < 3)
38
+ faraday_middleware (0.9.1)
39
+ faraday (>= 0.7.4, < 0.10)
40
+ ffi (1.9.3)
41
+ formatador (0.2.5)
42
+ guard (2.6.1)
42
43
  formatador (>= 0.2.4)
43
- listen (~> 2.1)
44
+ listen (~> 2.7)
44
45
  lumberjack (~> 1.0)
45
46
  pry (>= 0.9.12)
46
47
  thor (>= 0.18.1)
47
- guard-rspec (4.0.3)
48
- guard (>= 2.1.1)
49
- rspec (~> 2.14)
50
- i18n (0.6.9)
48
+ guard-rspec (4.3.1)
49
+ guard (~> 2.1)
50
+ rspec (>= 2.14, < 4.0)
51
+ i18n (0.6.11)
51
52
  json (1.8.1)
52
- listen (2.1.1)
53
+ listen (2.7.9)
53
54
  celluloid (>= 0.15.2)
54
55
  rb-fsevent (>= 0.9.3)
55
56
  rb-inotify (>= 0.9)
56
- lumberjack (1.0.4)
57
+ lumberjack (1.0.9)
57
58
  method_source (0.8.2)
58
- mime-types (1.25)
59
+ mime-types (2.3)
59
60
  mimemagic (0.2.1)
60
- minitest (5.3.3)
61
- multi_json (1.8.2)
61
+ minitest (5.4.0)
62
+ multi_json (1.10.1)
62
63
  multipart-post (2.0.0)
64
+ netrc (0.7.7)
63
65
  oauth (0.4.7)
64
- parallel (1.0.0)
65
- pry (0.9.12.2)
66
- coderay (~> 1.0.5)
67
- method_source (~> 0.8)
66
+ parallel (1.2.0)
67
+ pry (0.10.0)
68
+ coderay (~> 1.1.0)
69
+ method_source (~> 0.8.1)
68
70
  slop (~> 3.4)
69
- rake (10.3.1)
70
- rb-fsevent (0.9.3)
71
- rb-inotify (0.9.2)
71
+ rake (10.3.2)
72
+ rb-fsevent (0.9.4)
73
+ rb-inotify (0.9.5)
72
74
  ffi (>= 0.5.0)
73
- rest-client (1.6.7)
74
- mime-types (>= 1.16)
75
- rspec (2.14.1)
76
- rspec-core (~> 2.14.0)
77
- rspec-expectations (~> 2.14.0)
78
- rspec-mocks (~> 2.14.0)
79
- rspec-core (2.14.6)
80
- rspec-expectations (2.14.3)
81
- diff-lcs (>= 1.1.3, < 2.0)
82
- rspec-mocks (2.14.4)
83
- simplecov (0.7.1)
84
- multi_json (~> 1.0)
85
- simplecov-html (~> 0.7.1)
86
- simplecov-html (0.7.1)
87
- slop (3.4.6)
88
- term-ansicolor (1.2.2)
89
- tins (~> 0.8)
90
- thor (0.18.1)
91
- thread_safe (0.3.3)
75
+ rest-client (1.7.2)
76
+ mime-types (>= 1.16, < 3.0)
77
+ netrc (~> 0.7)
78
+ rspec (3.0.0)
79
+ rspec-core (~> 3.0.0)
80
+ rspec-expectations (~> 3.0.0)
81
+ rspec-mocks (~> 3.0.0)
82
+ rspec-core (3.0.3)
83
+ rspec-support (~> 3.0.0)
84
+ rspec-expectations (3.0.3)
85
+ diff-lcs (>= 1.2.0, < 2.0)
86
+ rspec-support (~> 3.0.0)
87
+ rspec-its (1.0.1)
88
+ rspec-core (>= 2.99.0.beta1)
89
+ rspec-expectations (>= 2.99.0.beta1)
90
+ rspec-mocks (3.0.3)
91
+ rspec-support (~> 3.0.0)
92
+ rspec-support (3.0.3)
93
+ simple_oauth (0.2.0)
94
+ simplecov (0.9.0)
95
+ docile (~> 1.1.0)
96
+ multi_json
97
+ simplecov-html (~> 0.8.0)
98
+ simplecov-html (0.8.0)
99
+ slop (3.6.0)
100
+ term-ansicolor (1.3.0)
101
+ tins (~> 1.0)
102
+ thor (0.19.1)
103
+ thread_safe (0.3.4)
92
104
  timers (1.1.0)
93
- tins (0.12.0)
94
- tzinfo (1.1.0)
105
+ tins (1.3.0)
106
+ tzinfo (1.2.2)
95
107
  thread_safe (~> 0.1)
96
108
 
97
109
  PLATFORMS
@@ -99,8 +111,8 @@ PLATFORMS
99
111
 
100
112
  DEPENDENCIES
101
113
  coveralls
102
- debugger
103
114
  guard-rspec
104
115
  rspec
116
+ rspec-its
105
117
  simplecov
106
118
  xing_api_client!
data/README.md CHANGED
@@ -40,6 +40,8 @@ client = XingApiClient.new(authorized_params[:access_token], authorized_params[:
40
40
  puts client.request.get_users.inspect
41
41
  ```
42
42
 
43
+ [Here](https://github.com/ependichter/xing_api_client_example) you can find an minimal example with Sinatra using a callback URL.
44
+
43
45
  ## Before you start
44
46
  To get access to the XING API, you need a consumer key and a consumer secret. To get those you have to login to the Dev-Portal http://dev.xing.com and create a new app. Now you have a test-consumer-key which can use all calls that are listed in the documentation https://dev.xing.com/docs/resources .
45
47
  After you have developed your app, you can request a production-consumer-key by using the ‘Get a production key’-Button on the app management site (https://dev.xing.com/applications).
@@ -3,6 +3,7 @@ require 'json'
3
3
  require 'open-uri'
4
4
  require 'yaml'
5
5
  require 'ostruct'
6
+ require 'faraday_middleware'
6
7
  require 'active_support/core_ext/hash/indifferent_access'
7
8
  %w{ version config object call request}.each{ |name| require_relative "xing_api_client/#{name}"}
8
9
 
@@ -22,17 +23,28 @@ class XingApiClient
22
23
 
23
24
  token = consumer.get_request_token(oauth_params)
24
25
 
25
- { request_token: token, auth_url: token.authorize_url }
26
+ warn "[DEPRECATION] returning ':request_token' is deprecated. Please use the Hash unter the key ':oauth' with the keys ':token' and ':secret' instead."
27
+ { request_token: token, auth_url: token.authorize_url, oauth: { token: token.token , secret: token.secret} }
26
28
  end
27
29
 
28
- def self.authorize(token, pin)
29
- access_token = token.get_access_token(oauth_verifier: pin)
30
+ def self.authorize(token_or_hash, *args)
31
+ if token_or_hash.is_a?(OAuth::RequestToken)
32
+ warn "[DEPRECATION] calling '.authorize' with a OAuth::RequestToken is deprecated. Please use a Hash with the keys ':token',':secret' and ':verifier' instead."
33
+
34
+ token = token_or_hash
35
+ verifier = args.first
36
+ else
37
+ token = OAuth::RequestToken.new(consumer, token_or_hash[:token], token_or_hash[:secret])
38
+ verifier = token_or_hash[:verifier]
39
+ end
40
+
41
+ access_token = token.get_access_token(oauth_verifier: verifier)
30
42
 
31
43
  { access_token: access_token.token, secret: access_token.secret }
32
44
  end
33
45
 
34
46
  def request
35
- Request.new(consumer_token)
47
+ Request.new(connection)
36
48
  end
37
49
 
38
50
  def self.consumer(options = {})
@@ -51,4 +63,20 @@ private
51
63
  def consumer_token
52
64
  OAuth::ConsumerToken.new(@consumer, @access_token, @secret)
53
65
  end
66
+
67
+ def connection
68
+ Faraday.new(:url => config.host) do |faraday|
69
+ faraday.request :multipart
70
+ faraday.request :json
71
+ faraday.request(:oauth, {
72
+ consumer_key: config.consumer_key,
73
+ consumer_secret: config.consumer_secret,
74
+ token: @access_token,
75
+ token_secret: @secret
76
+ }
77
+ )
78
+ faraday.response :logger if config.debug
79
+ faraday.adapter Faraday.default_adapter
80
+ end
81
+ end
54
82
  end
@@ -2,6 +2,12 @@ class XingApiClient
2
2
  module Call
3
3
  module Base
4
4
 
5
+ def direct(verb, url, params, options = {})
6
+ verb = "#{verb}_multipart" if options[:multipart]
7
+
8
+ handle_request(verb, url, params)
9
+ end
10
+
5
11
  private
6
12
  def request_loop(total, result, offset, requested_limit, max_limit_per_call = 100)
7
13
  offset ||= 0
@@ -0,0 +1,22 @@
1
+ class XingApiClient
2
+ module Call
3
+ module UsersNetworkRecommendationsCall
4
+ def get_users_network_recommendations(options = {})
5
+ offset = options[:offset]
6
+ limit = options[:limit]
7
+ params = { user_id: "me", user_fields: options[:fields] }
8
+ params.merge!(since: options[:similar_user_id]) unless options[:similar_user_id].nil?
9
+
10
+ request = make_request!(:get, "v1/users/me/network/recommendations", params.merge(limit: (limit || 100), offset: offset), array_keys: "user_recommendations")
11
+
12
+ request["recommendations"].tap do |collection|
13
+ collection.define_singleton_method :total, -> { request["total"].to_i }
14
+ end
15
+ end
16
+
17
+ def delete_users_network_recommendations(id)
18
+ make_request!(:delete, "v1/users/me/network/recommendations/#{id}", {}, allowed_codes: 204)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -17,12 +17,12 @@ class XingApiClient
17
17
  404 => ResourceNotFoundError
18
18
  }
19
19
 
20
- def initialize(consumer_token)
21
- @consumer_token = consumer_token
20
+ def initialize(connection)
21
+ @connection = connection
22
22
  end
23
23
 
24
24
  private
25
- attr_reader :consumer_token
25
+ attr_reader :connection
26
26
 
27
27
  def map_user(data)
28
28
  XingApiClient::Object::User.new data
@@ -31,12 +31,11 @@ class XingApiClient
31
31
  def make_request!(verb, url, params = nil, options = {})
32
32
  options = { array_keys: [], allowed_codes: [200] }.merge(options)
33
33
  url = [config.host, url].join('/')
34
-
35
34
  request_params = add_default_values(params)
36
35
 
37
36
  result = handle_request(verb, url, request_params)
38
37
  data = handle_result(result, options[:content_type])
39
- handle_error!(result.code, data, options[:allowed_codes])
38
+ handle_error!(result.status, data, options[:allowed_codes])
40
39
 
41
40
  Array(options[:array_keys]).each { |key| data = data[key] }
42
41
 
@@ -57,6 +56,8 @@ class XingApiClient
57
56
  value.to_i
58
57
  when :user_fields
59
58
  value || XingApiClient::Object::User::AVAILABLE_FIELDS.join(',')
59
+ when :phone, :mobile_phone, :fax
60
+ value.is_a?(Array) ? value.join("|") : value
60
61
  else
61
62
  value
62
63
  end
@@ -72,43 +73,24 @@ class XingApiClient
72
73
  if multipart
73
74
  handle_multipart_request(verb, url, params)
74
75
  elsif verb == "get"
75
- consumer_token.request(verb, url + generate_url_params(params))
76
+ connection.send(verb, url + generate_url_params(params))
76
77
  else
77
- consumer_token.request(verb, url, params)
78
+ connection.send(verb, url, params)
78
79
  end
79
80
  end
80
81
 
81
82
  # Not automatic tested right now... Oo
82
83
  def handle_multipart_request(verb, url, params)
83
- uri = URI.parse(url)
84
- multipart_class = case verb.to_sym
85
- when :post
86
- Net::HTTP::Post::Multipart
87
- when :put
88
- Net::HTTP::Put::Multipart
89
- else
90
- raise XingApiClient::Error::UnknownHttpMethodError
91
- end
92
84
  multipart_key, file_path = params.delete(:multipart).to_a.flatten
93
85
  mimetype = MimeMagic.by_path file_path
94
86
 
95
87
  raise XingApiClient::Error::FileMIMETypeUnknownError if mimetype.nil?
96
88
 
97
- file_name = Pathname.new file_path
98
-
99
- request_response = nil
100
- File.open(file_path) do |image|
101
- request = multipart_class.new(uri.path, multipart_key => UploadIO.new(image, mimetype, file_name))
102
- consumer_token.sign! request
103
- request_response = Net::HTTP.start(uri.host, uri.port, use_ssl: (uri.scheme == 'https')) do |http|
104
- http.request(request)
105
- end
106
- end
107
- request_response
89
+ connection.send(verb, url, multipart_key => Faraday::UploadIO.new(file_path, mimetype))
108
90
  end
109
91
 
110
92
  def handle_result(result, content_type)
111
- unless result.body.nil?
93
+ if not result.body.to_s.empty?
112
94
  if content_type == 'text'
113
95
  result.body
114
96
  else
@@ -125,9 +107,10 @@ class XingApiClient
125
107
  code = code.to_i
126
108
  return if Array(allowed_codes).include?(code)
127
109
 
128
- error_class = ERROR_CLASSES[data.nil? ? code : data['error_name']] || Error
110
+ error_name = data.nil? ? code : data['error_name']
111
+ error_class = ERROR_CLASSES[error_name] || Error
129
112
 
130
- raise error_class.new(code, data['error_name'], data)
113
+ raise error_class.new(code, error_name, data)
131
114
  end
132
115
  end
133
116
  end
@@ -1,3 +1,3 @@
1
1
  class XingApiClient
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'rubygems'
2
2
  require 'bundler/setup'
3
+ require 'rspec/its'
3
4
  require 'coveralls'
4
5
  require 'simplecov'
5
6
 
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+
3
+ describe XingApiClient::Call::UsersNetworkRecommendationsCall do
4
+ let(:call) { Object.new.tap{ |object| object.extend(XingApiClient::Call::UsersNetworkRecommendationsCall) } }
5
+
6
+ describe '#get_users_network_recommendations' do
7
+ context 'with no options' do
8
+ subject do
9
+ call.
10
+ should_receive(:make_request!).
11
+ with(:get, "v1/users/me/network/recommendations", {:user_id=>"me", :user_fields=>nil, :limit=>100, :offset=>nil}, {:array_keys=>"user_recommendations"}).
12
+ and_return({ "recommendations" => [], "total" => 0 })
13
+
14
+ call.get_users_network_recommendations()
15
+ end
16
+
17
+ its(:class) { should == Array }
18
+ end
19
+
20
+ context 'with all options' do
21
+ subject do
22
+ call.
23
+ should_receive(:make_request!).
24
+ with(:get, "v1/users/me/network/recommendations", {:user_id=>"me", :user_fields=>nil, :since=>"123456_abcdef", :limit=>"99", :offset=>"30"}, {:array_keys=>"user_recommendations"}).
25
+ and_return({ "recommendations" => [], "total" => 0 })
26
+
27
+ call.get_users_network_recommendations(offset: '30', limit: '99', similar_user_id: '123456_abcdef',user_fields: [:id, :page_name])
28
+ end
29
+
30
+ its(:class) { should == Array }
31
+ end
32
+ end
33
+
34
+ describe '#get_users_network_recommendations' do
35
+ subject do
36
+ call.
37
+ should_receive(:make_request!).
38
+ with(:delete, "v1/users/me/network/recommendations/some-123456_abcdef", {}, {:allowed_codes=>204}).
39
+ and_return(nil)
40
+
41
+ call.delete_users_network_recommendations('some-123456_abcdef')
42
+ end
43
+
44
+ its(:class) { should == NilClass }
45
+ end
46
+ end
@@ -27,7 +27,7 @@ describe XingApiClient::Object::User do
27
27
  its(:web_profiles) { should == {} }
28
28
  its(:instant_messaging_accounts) { should == {"skype"=>"username"} }
29
29
  its(:professional_experience) { should_not be_empty }
30
- its(:professional_experience) { subject.professional_experience.all?{ |e| e.kind_of?(XingApiClient::Object::Company) }.should be_true }
30
+ its(:professional_experience) { subject.professional_experience.all?{ |e| e.kind_of?(XingApiClient::Object::Company) }.should == true }
31
31
  its(:photo_urls) { should == {"large"=>"https://x1.xingassets.com/img/users/3/5/1/238ddffce.13802856,9.140x185.jpg",
32
32
  "maxi_thumb"=>"https://x1.xingassets.com/img/users/3/5/1/238ddffce.13802856,9.70x93.jpg",
33
33
  "medium_thumb"=>"https://x1.xingassets.com/img/users/3/5/1/238ddffce.13802856,9.57x75.jpg",
@@ -27,7 +27,7 @@ describe XingApiClient::Object::User do
27
27
  its(:web_profiles) { should == {} }
28
28
  its(:instant_messaging_accounts) { should == {"skype"=>"username"} }
29
29
  its(:professional_experience) { should_not be_empty }
30
- its(:professional_experience) { subject.professional_experience.all?{ |e| e.kind_of?(XingApiClient::Object::Company) }.should be_true }
30
+ its(:professional_experience) { subject.professional_experience.all?{ |e| e.kind_of?(XingApiClient::Object::Company) }.should == true }
31
31
  its(:photo_urls) { should == {"large"=>"https://x1.xingassets.com/img/users/3/5/1/238ddffce.13802856,9.140x185.jpg",
32
32
  "maxi_thumb"=>"https://x1.xingassets.com/img/users/3/5/1/238ddffce.13802856,9.70x93.jpg",
33
33
  "medium_thumb"=>"https://x1.xingassets.com/img/users/3/5/1/238ddffce.13802856,9.57x75.jpg",
@@ -2,12 +2,12 @@ require 'spec_helper'
2
2
 
3
3
  describe XingApiClient::Request do
4
4
  subject { XingApiClient::Request }
5
- let(:instance){ subject.new(consumer_token_object) }
6
- let(:consumer_token_object) { double('consumer_token_object') }
5
+ let(:instance){ subject.new(connection) }
6
+ let(:connection) { double('connection') }
7
7
 
8
8
  describe '.new' do
9
9
  it 'sets the intsance variable access_token to the argument when it gets initialized' do
10
- instance.instance_variable_get('@consumer_token').should == consumer_token_object
10
+ instance.instance_variable_get('@connection').should == connection
11
11
  end
12
12
  end
13
13
 
@@ -44,7 +44,7 @@ describe XingApiClient::Request do
44
44
 
45
45
  context 'other values' do
46
46
  it 'returns the values untouched' do
47
- test_thing = stub('something')
47
+ test_thing = double('something')
48
48
  instance.send(:add_default_values, other: test_thing ).should == { other: test_thing }
49
49
  end
50
50
  end
@@ -55,11 +55,11 @@ describe XingApiClient::Request do
55
55
  params = { some_param: 'some_value' }
56
56
  options = { array_keys: 'users', allowed_codes: 204, content_type: 'text' }
57
57
  request_params = { other_param: 'some_value'}
58
- result = stub('result', code: 204)
58
+ result = double('result', status: 204)
59
59
 
60
- instance.should_receive(:add_default_values).with(params).and_return(request_params)
61
- instance.should_receive(:handle_request).with(:get, 'https://api.xing.com/v1/something', request_params).and_return(result)
62
- instance.should_receive(:handle_result).with(result, options[:content_type]).and_return('users' => 'some data')
60
+ expect(instance).to receive(:add_default_values).with(params).and_return(request_params)
61
+ expect(instance).to receive(:handle_request).with(:get, 'https://api.xing.com/v1/something', request_params).and_return(result)
62
+ expect(instance).to receive(:handle_result).with(result, options[:content_type]).and_return('users' => 'some data')
63
63
 
64
64
  instance.send(:make_request!, :get, 'v1/something', params, options).should == 'some data'
65
65
  end
@@ -73,31 +73,31 @@ describe XingApiClient::Request do
73
73
  let(:verb){ :get }
74
74
 
75
75
  it 'adds the params to the url' do
76
- consumer_token_object.should_receive(:request).with("get", "www.test.com?param1=1&param2=2")
76
+ connection.should_receive(:get).with("www.test.com?param1=1&param2=2")
77
77
  end
78
78
  end
79
79
 
80
80
  context 'post request' do
81
81
  let(:verb){ :post }
82
82
 
83
- it 'adds the params to the body' do
84
- consumer_token_object.should_receive(:request).with("post", "www.test.com", {:param1=>"1", :param2=>"2"})
83
+ it 'adds the params to the url' do
84
+ connection.should_receive(:post).with("www.test.com", {:param1=>"1", :param2=>"2"})
85
85
  end
86
86
  end
87
87
 
88
88
  context 'put request' do
89
89
  let(:verb){ :put }
90
90
 
91
- it 'adds the params to the body' do
92
- consumer_token_object.should_receive(:request).with("put", "www.test.com", {:param1=>"1", :param2=>"2"})
91
+ it 'adds the params to the url' do
92
+ connection.should_receive(:put).with("www.test.com", {:param1=>"1", :param2=>"2"})
93
93
  end
94
94
  end
95
95
 
96
96
  context 'delete request' do
97
97
  let(:verb){ :delete }
98
98
 
99
- it 'adds the params to the body' do
100
- consumer_token_object.should_receive(:request).with("delete", "www.test.com", {:param1=>"1", :param2=>"2"})
99
+ it 'adds the params to the url' do
100
+ connection.should_receive(:delete).with("www.test.com", {:param1=>"1", :param2=>"2"})
101
101
  end
102
102
  end
103
103
 
@@ -123,7 +123,7 @@ describe XingApiClient::Request do
123
123
  describe '#handle_result' do
124
124
 
125
125
  context 'the result body is nil' do
126
- let(:result){ stub('result') }
126
+ let(:result){ double('result') }
127
127
  let(:content_type){}
128
128
 
129
129
  before{ result.should_receive(:body).and_return(nil) }
@@ -134,7 +134,7 @@ describe XingApiClient::Request do
134
134
  end
135
135
 
136
136
  context 'the result body is not nil' do
137
- let(:result){ stub('result') }
137
+ let(:result){ double('result') }
138
138
  before{ result.stub(:body).and_return('{ "male": true }') }
139
139
 
140
140
  context 'the content_type is == "text"' do
@@ -5,25 +5,44 @@ describe XingApiClient do
5
5
  let(:instance){ subject.new('access_token_ABC123', 'secret_DEF456') }
6
6
 
7
7
  describe '.request_params' do
8
- let(:token) { double('request_token', authorize_url: 'www.url.sample') }
8
+ let(:oauth_parameter_hash) { { token: 'request_token_ABC123', secret: 'secret_ABC123' } }
9
+ let(:token) { double('request_token', authorize_url: 'www.url.sample', token: oauth_parameter_hash[:token], secret: oauth_parameter_hash[:secret] ) }
9
10
  before { subject.stub_chain(:consumer, :get_request_token).and_return(token) }
10
11
 
11
12
  it 'returns a hash with a request token and a auth url' do
12
- subject.request_params.should == { request_token: token, auth_url: 'www.url.sample'}
13
+ subject.request_params.should == { request_token: token, auth_url: 'www.url.sample', oauth: oauth_parameter_hash}
13
14
  end
14
15
  end
15
16
 
16
17
  describe '.authorize' do
17
- let(:request_token) { double('request_token') }
18
- let(:pin) { '1234' }
18
+ let(:request_token) { double('request token') }
19
19
  let(:access_token) { double('access_token', token: 'access_token_ABC123', secret: 'secret_DEF456' ) }
20
20
 
21
- before do
22
- request_token.should_receive(:get_access_token).with(oauth_verifier: pin).and_return(access_token)
21
+ context 'with a token an pin - depecated' do
22
+ let(:pin) { '1234' }
23
+
24
+ before do
25
+ request_token.should_receive(:is_a?).with(OAuth::RequestToken).and_return(true)
26
+ request_token.should_receive(:get_access_token).with(oauth_verifier: pin).and_return(access_token)
27
+ end
28
+
29
+ it 'returns a hash with a access token and a secret' do
30
+ subject.authorize(request_token, pin).should == { access_token: 'access_token_ABC123', secret: 'secret_DEF456'}
31
+ end
23
32
  end
24
33
 
25
- it 'returns a hash with a access token and a secret' do
26
- subject.authorize(request_token, pin).should == { access_token: 'access_token_ABC123', secret: 'secret_DEF456'}
34
+ context 'with a hash' do
35
+ let(:oauth_parameter_hash) { { token: 'request_token_ABC123', secret: 'secret_ABC123', verifier: '1234' } }
36
+ let(:consumer) { double('consumer') }
37
+ before do
38
+ subject.should_receive(:consumer).and_return(consumer)
39
+ OAuth::RequestToken.should_receive(:new).with(consumer, oauth_parameter_hash[:token], oauth_parameter_hash[:secret]).and_return(request_token)
40
+ request_token.should_receive(:get_access_token).with(oauth_verifier: oauth_parameter_hash[:verifier]).and_return(access_token)
41
+ end
42
+
43
+ it 'returns a hash with a access token and a secret' do
44
+ subject.authorize(oauth_parameter_hash).should == { access_token: 'access_token_ABC123', secret: 'secret_DEF456'}
45
+ end
27
46
  end
28
47
  end
29
48
 
@@ -17,13 +17,16 @@ Gem::Specification.new do |spec|
17
17
  spec.require_paths = ["lib"]
18
18
 
19
19
  spec.add_development_dependency "rspec"
20
+ spec.add_development_dependency "rspec-its"
20
21
  spec.add_development_dependency "guard-rspec"
21
- spec.add_development_dependency "debugger"
22
- spec.add_dependency "bundler", "~> 1.3"
22
+ spec.add_dependency "bundler"
23
23
  spec.add_dependency "rake"
24
24
  spec.add_dependency "oauth"
25
25
  spec.add_dependency "multipart-post"
26
26
  spec.add_dependency "activesupport"
27
27
  spec.add_dependency "parallel"
28
28
  spec.add_dependency "mimemagic"
29
+ spec.add_dependency "faraday"
30
+ spec.add_dependency "faraday_middleware"
31
+ spec.add_dependency "simple_oauth"
29
32
  end
metadata CHANGED
@@ -1,153 +1,195 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xing_api_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Brendel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-07 00:00:00.000000000 Z
11
+ date: 2014-08-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ! '>='
24
+ - - '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: guard-rspec
28
+ name: rspec-its
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ! '>='
31
+ - - '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ! '>='
38
+ - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: debugger
42
+ name: guard-rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ! '>='
45
+ - - '>='
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ! '>='
52
+ - - '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - '>='
60
60
  - !ruby/object:Gem::Version
61
- version: '1.3'
61
+ version: '0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - '>='
67
67
  - !ruby/object:Gem::Version
68
- version: '1.3'
68
+ version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ! '>='
73
+ - - '>='
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ! '>='
80
+ - - '>='
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: oauth
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ! '>='
87
+ - - '>='
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ! '>='
94
+ - - '>='
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: multipart-post
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ! '>='
101
+ - - '>='
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ! '>='
108
+ - - '>='
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: activesupport
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ! '>='
115
+ - - '>='
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ! '>='
122
+ - - '>='
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: parallel
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ! '>='
129
+ - - '>='
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ! '>='
136
+ - - '>='
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: mimemagic
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - ! '>='
143
+ - - '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: faraday
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: faraday_middleware
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - '>='
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: simple_oauth
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - '>='
144
186
  - !ruby/object:Gem::Version
145
187
  version: '0'
146
188
  type: :runtime
147
189
  prerelease: false
148
190
  version_requirements: !ruby/object:Gem::Requirement
149
191
  requirements:
150
- - - ! '>='
192
+ - - '>='
151
193
  - !ruby/object:Gem::Version
152
194
  version: '0'
153
195
  description: Wrapper for the XING API
@@ -183,6 +225,7 @@ files:
183
225
  - lib/xing_api_client/call/users_me_id_card_call.rb
184
226
  - lib/xing_api_client/call/users_me_photo_call.rb
185
227
  - lib/xing_api_client/call/users_network_paths_call.rb
228
+ - lib/xing_api_client/call/users_network_recommendations_call.rb
186
229
  - lib/xing_api_client/call/users_profile_message_call.rb
187
230
  - lib/xing_api_client/call/users_visits_call.rb
188
231
  - lib/xing_api_client/config.rb
@@ -208,6 +251,7 @@ files:
208
251
  - spec/xing_api_client/call/users_me_id_card_call_spec.rb
209
252
  - spec/xing_api_client/call/users_me_photo_call_spec.rb
210
253
  - spec/xing_api_client/call/users_network_paths_call_spec.rb
254
+ - spec/xing_api_client/call/users_network_recommendations_spec.rb
211
255
  - spec/xing_api_client/call/users_profile_message_call_spec.rb
212
256
  - spec/xing_api_client/call/users_visits_call_spec.rb
213
257
  - spec/xing_api_client/config_spec.rb
@@ -229,17 +273,17 @@ require_paths:
229
273
  - lib
230
274
  required_ruby_version: !ruby/object:Gem::Requirement
231
275
  requirements:
232
- - - ! '>='
276
+ - - '>='
233
277
  - !ruby/object:Gem::Version
234
278
  version: '0'
235
279
  required_rubygems_version: !ruby/object:Gem::Requirement
236
280
  requirements:
237
- - - ! '>='
281
+ - - '>='
238
282
  - !ruby/object:Gem::Version
239
283
  version: '0'
240
284
  requirements: []
241
285
  rubyforge_project:
242
- rubygems_version: 2.2.2
286
+ rubygems_version: 2.0.14
243
287
  signing_key:
244
288
  specification_version: 4
245
289
  summary: An easy way to access the XING API
@@ -256,6 +300,7 @@ test_files:
256
300
  - spec/xing_api_client/call/users_me_id_card_call_spec.rb
257
301
  - spec/xing_api_client/call/users_me_photo_call_spec.rb
258
302
  - spec/xing_api_client/call/users_network_paths_call_spec.rb
303
+ - spec/xing_api_client/call/users_network_recommendations_spec.rb
259
304
  - spec/xing_api_client/call/users_profile_message_call_spec.rb
260
305
  - spec/xing_api_client/call/users_visits_call_spec.rb
261
306
  - spec/xing_api_client/config_spec.rb