diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c00410..294608b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,4 +4,8 @@ ## 0.5.1 -* Use POST method for `token_info` request \ No newline at end of file +* Use POST method for `token_info` request + +## 0.5.2 + +* Use GET `user_info` to check tokens \ No newline at end of file diff --git a/lib/panda.rb b/lib/panda.rb index 3a03b73..563fd51 100644 --- a/lib/panda.rb +++ b/lib/panda.rb @@ -25,8 +25,14 @@ def make_request(request) conn.response :json end - response = connection.run_request(request.method, request.url, request.params, request.headers) + response = do_request(connection, request) Panda::HTTPResponse.new(response.status, response.headers, response.body) end + + def do_request(connection, request) + return connection.post(request.url, request.params, request.headers) if request.method == :post + + connection.get(request.url, request.params, request.headers) + end end end diff --git a/lib/panda/client.rb b/lib/panda/client.rb index 524cc6a..a472258 100644 --- a/lib/panda/client.rb +++ b/lib/panda/client.rb @@ -5,7 +5,7 @@ require 'panda/errors' require 'panda/http_request' require 'panda/http_response' -require 'panda/token_info' +require 'panda/item' module Panda class Client @@ -53,6 +53,11 @@ def report(advertiser_id, report_type, dimensions, params = {}) ) end + def user_info + get_user('user/info/') + end + + # requires token from Accounts API def token_info get_token( 'tt_user/token_info/get/', @@ -63,9 +68,14 @@ def token_info private + def get_user(path, params = {}) + request = Panda::HTTPRequest.new('GET', path, params, 'Access-Token' => access_token) + Panda::Item.new(Panda.make_request(request)) + end + def get_token(path, params = {}) request = Panda::HTTPRequest.new('POST', path, params) - Panda::TokenInfo.new(Panda.make_request(request)) + Panda::Item.new(Panda.make_request(request)) end def get_collection(path, params = {}) diff --git a/lib/panda/token_info.rb b/lib/panda/item.rb similarity index 92% rename from lib/panda/token_info.rb rename to lib/panda/item.rb index 24433ee..6b44117 100644 --- a/lib/panda/token_info.rb +++ b/lib/panda/item.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module Panda - class TokenInfo + class Item attr_reader :data def initialize(response) diff --git a/lib/panda/version.rb b/lib/panda/version.rb index 38bf466..3110630 100644 --- a/lib/panda/version.rb +++ b/lib/panda/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module Panda - VERSION = '0.5.1' + VERSION = '0.5.2' end diff --git a/spec/cases/client_spec.rb b/spec/cases/client_spec.rb index 76ae289..e7d80da 100644 --- a/spec/cases/client_spec.rb +++ b/spec/cases/client_spec.rb @@ -40,6 +40,14 @@ end end + describe '#user_info' do + it 'calls #get_user' do + expect(subject).to receive(:get_user).with('user/info/') + + subject.user_info + end + end + describe '#token_info' do it 'calls #get_token' do expect(subject) diff --git a/spec/cases/item_spec.rb b/spec/cases/item_spec.rb new file mode 100644 index 0000000..5de3248 --- /dev/null +++ b/spec/cases/item_spec.rb @@ -0,0 +1,52 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Panda::Item do + let(:response) { Panda::HTTPResponse.new(200, {}, response_body) } + + context 'when item is token info' do + let(:response_body) do + { + 'message' => 'OK', + 'code' => 0, + 'data' => { + 'app_id' => Panda.config.app_id, + 'creator_id' => 'test_creator_id', + 'scope' => 'user.info.basic' + }, + 'request_id': '2020031009181201018904922342087A16' + } + end + + it 'gets token info' do + token_info = described_class.new(response) + + expect(token_info['creator_id']).to eq('test_creator_id') + expect(token_info['scope']).to eq('user.info.basic') + end + end + + context 'item is user info' do + let(:response_body) do + { + 'message' => 'OK', + 'code' => 0, + 'data' => { + 'display_name' => 'user_name', + 'email' => 'user.email@example.com', + 'core_user_id' => 'core_user_id', + 'avatar_url' => 'https://example.com/avatar.jpg' + }, + 'request_id': '2020031009181201018904922342087A16' + } + end + + it 'gets user info' do + user_info = described_class.new(response) + + expect(user_info['display_name']).to eq('user_name') + expect(user_info['email']).to eq('user.email@example.com') + end + end +end diff --git a/spec/cases/token_info_spec.rb b/spec/cases/token_info_spec.rb deleted file mode 100644 index 1505504..0000000 --- a/spec/cases/token_info_spec.rb +++ /dev/null @@ -1,29 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -describe Panda::TokenInfo do - let(:response) { Panda::HTTPResponse.new(200, {}, token_response_body) } - - context 'response with result list field in data field' do - let(:token_response_body) do - { - 'message' => 'OK', - 'code' => 0, - 'data' => { - 'app_id' => Panda.config.app_id, - 'creator_id' => 'test_creator_id', - 'scope' => 'user.info.basic' - }, - 'request_id': '2020031009181201018904922342087A16' - } - end - - it 'gets token info' do - token_info = described_class.new(response) - - expect(token_info['creator_id']).to eq('test_creator_id') - expect(token_info['scope']).to eq('user.info.basic') - end - end -end