baidu-sdk 0.0.2 → 0.0.3

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,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e7d739a156a7feec33727249033320452ff730d1
4
- data.tar.gz: 1db71954fe27d31241176786cab6ec5dbd18ae09
3
+ metadata.gz: 3af6ada389f6a63f94e817ce4a13d344b73461f5
4
+ data.tar.gz: c769fddcdea66b5cb027fd123f7e366e17bae183
5
5
  SHA512:
6
- metadata.gz: 7ea790ba81dabc1968e53664a95e30b741ba1d9c282d4631edeac230b9b2c9e631d359add53badf7636e7acda6dfff7f924ccf98ceeced42b166627766d9afe7
7
- data.tar.gz: 19e130371ed9e9d9f804b0fbf60e1e6a6e4dc5c9df7f1b50e715cd3152b404c942a1594202194a8dd1e1b775c16bf6e74d126cb55b40bbbfeeaf8e690eab4780
6
+ metadata.gz: 3f354a1ae052d10dacc1160c23f94f90c2eeea602dd437e134383e4771d5bc43e1ece0e168445f7c9c6ce74518855e47175911e825bac7f45a1f157e1b078abb
7
+ data.tar.gz: 613e6c1f4b7ab7a2b0bdc5c72c9f8382cf26fdc0e2006922ac85cd9cedc02d920f57cfa1066df76b516154c5847d87bd34496810a9b22fb0b5c4ee085fe9ee14
data/.travis.yml CHANGED
@@ -5,11 +5,13 @@ script: 'bundle exec rake spec'
5
5
  rvm:
6
6
  - 1.9.3
7
7
  - 2.0.0
8
- - rbx-2.1.1
8
+ - 2.1.0
9
+ - rbx-2
9
10
  - jruby-19mode
10
11
  - ruby-head
11
12
 
12
13
  matrix:
13
14
  allow_failures:
14
- - rvm: rbx-2.1.1
15
+ - rvm: rbx-2
15
16
  - rvm: jruby-19mode
17
+ - rvm: ruby-head
data/HISTORY.md CHANGED
@@ -1,3 +1,16 @@
1
+ ## 0.0.3 (2013-12-30)
2
+ * 添加部分 REST API, `Baidu::OAuth::RESTClient`
3
+ * get_logged_in_user
4
+ * get_info
5
+ * app_user?
6
+ * has_app_permission?
7
+ * has_app_permissions
8
+ * get_friends
9
+ * are_friends
10
+ * expire_session
11
+ * revoke_authorization
12
+ * query_ip
13
+
1
14
  ## 0.0.2 (2013-12-06)
2
15
  * **OAuth** 添加 Implicit Grant 授权流程
3
16
  * **OAuth** 添加 Client Credentials 授权流程
data/README.md CHANGED
@@ -149,6 +149,19 @@ get '/auth/callback' do
149
149
  end
150
150
  ```
151
151
 
152
+ ### REST API
153
+ 通过百度开放平台提供的 REST API,第三方应用可以获取到百度用户的用户资料、好友关系等基本信息,以及今后百度开放的其他任何数据,但前提是应用必须获得到百度开放平台和百度用户的授权。
154
+
155
+ 当前实现了用户信息类接口、好友关系类接口、用户授权类接口和工具类接口。
156
+
157
+ ```ruby
158
+ rest_client = Baidu::OAuth::RESTClient.new('my_token...')
159
+ puts rest_client.get_logged_in_user
160
+ puts rest_client.get_info
161
+ puts rest_client.expire_session
162
+ # puts rest_client.revoke_authorization
163
+ ```
164
+
152
165
  ## PCS
153
166
  要使用 PCS 必须到 [百度开发者中心](http://developer.baidu.com/console) 开启指定应用的 PCS API 权限,参考 [开通PCS API权限](http://developer.baidu.com/wiki/index.php?title=docs/pcs/guide/api_approve),并获取所设置的文件目录。
154
167
 
data/lib/baidu/oauth.rb CHANGED
@@ -1,9 +1,11 @@
1
1
  require 'baidu/core'
2
2
  require 'baidu/oauth/client'
3
+ require 'baidu/oauth/rest_client'
3
4
 
4
5
  module Baidu
5
6
  module OAuth
6
7
  SITE = 'https://openapi.baidu.com'
8
+ BASE_PATH = '/rest/2.0'
7
9
  AUTHORIZATION_ENDPOINT = '/oauth/2.0/authorize'
8
10
  TOKEN_ENDPOINT = '/oauth/2.0/token'
9
11
  TOKEN_INFO_ENDPOINT = '/oauth/2.0/tokeninfo'
@@ -0,0 +1,334 @@
1
+ # encoding: UTF-8
2
+
3
+ module Baidu
4
+ module OAuth
5
+ # 通过百度开放平台提供的REST API,第三方应用可以获取到百度用户的用户资料、
6
+ # 好友关系等基本信息,以及今后百度开放的其他任何数据,
7
+ # 但前提是应用必须获得到百度开放平台和百度用户的授权。
8
+ class RESTClient
9
+ include Baidu::Support::Request
10
+
11
+ # 创建一个 REST API Client 实例
12
+ #
13
+ # @example
14
+ # rest_client = Baidu::OAuth::RESTClient.new('my_token...')
15
+ #
16
+ # @overload initialize(access_token)
17
+ # @param [String] access_token
18
+ #
19
+ # @overload initialize(session)
20
+ # @param [Baidu::Session] session
21
+ def initialize(access_token_or_session)
22
+ @access_token = case access_token_or_session
23
+ when String then access_token_or_session
24
+ when Baidu::Session then access_token_or_session.access_token
25
+ else
26
+ raise ArgumentError, 'need a String or Baidu::Session'
27
+ end
28
+ @site = Baidu::OAuth::SITE
29
+ end
30
+
31
+ # 获取当前登录用户的简单信息
32
+ #
33
+ # 获取当前登录用户的用户uid、用户名和头像。
34
+ # @note 如果存储用户信息的话,请大家以百度用户uid为主键
35
+ #
36
+ # @example 返回的原始 JSON
37
+ # {
38
+ # "uid": "256758493",
39
+ # "uname": "XiaoLu",
40
+ # "portrait": "b4994c6849380284916e67af0c"
41
+ # }
42
+ #
43
+ # :uid 当前登录用户的数字ID
44
+ # :uname 当前登录用户的用户名。只用于显示,可能会发生变化,不保证全局唯一
45
+ # :portrait 当前登录用户的头像
46
+ #
47
+ # 头像的地址具体如下:
48
+ # small image: http://tb.himg.baidu.com/sys/portraitn/item/{$portrait}
49
+ # large image: http://tb.himg.baidu.com/sys/portrait/item/{$portrait}
50
+ #
51
+ # @return [Hash]
52
+ # @see http://developer.baidu.com/wiki/index.php?title=docs/oauth/rest/file_data_apis_list#.E8.8E.B7.E5.8F.96.E5.BD.93.E5.89.8D.E7.99.BB.E5.BD.95.E7.94.A8.E6.88.B7.E7.9A.84.E7.AE.80.E5.8D.95.E4.BF.A1.E6.81.AF 获取当前登录用户的信息
53
+ def get_logged_in_user
54
+ api_request '/passport/users/getLoggedInUser'
55
+ end
56
+
57
+ # 返回用户详细资料
58
+ # @note 如果存储用户信息的话,请大家以百度用户uid为主键
59
+ #
60
+ # @example 返回的原始 JSON
61
+ # {
62
+ # "userid":"2097322476",
63
+ # "username":"wl19871011",
64
+ # "realname":"阳光",
65
+ # "userdetail":"喜欢自由",
66
+ # "birthday":"1987-01-01",
67
+ # "marriage":"恋爱",
68
+ # "sex":"男",
69
+ # "blood":"O",
70
+ # "constellation":"射手",
71
+ # "figure":"小巧",
72
+ # "education":"大学/专科",
73
+ # "trade":"计算机/电子产品",
74
+ # "job":"未知",
75
+ # "birthday_year":"1987",
76
+ # "birthday_month":"01",
77
+ # "birthday_day":"01"
78
+ # }
79
+ #
80
+ # :userid 当前登录用户的数字ID
81
+ # :username 当前登录用户的用户名,值可能为空。
82
+ # :realname 用户真实姓名,可能为空。
83
+ # :portrait 当前登录用户的头像
84
+ # :userdetail 自我简介,可能为空。
85
+ # :birthday 生日,以yyyy-mm-dd格式显示。
86
+ # :marriage 婚姻状况
87
+ # :sex 性别
88
+ # :blood 血型
89
+ # :figure 体型
90
+ # :constellation 星座
91
+ # :education 学历
92
+ # :trade 当前职业
93
+ # :job 职位
94
+ #
95
+ # 头像的地址具体如下:
96
+ # small image: http://tb.himg.baidu.com/sys/portraitn/item/{$portrait}
97
+ # large image: http://tb.himg.baidu.com/sys/portrait/item/{$portrait}
98
+ #
99
+ # @return [Hash]
100
+ # @see http://developer.baidu.com/wiki/index.php?title=docs/oauth/rest/file_data_apis_list#.E8.BF.94.E5.9B.9E.E7.94.A8.E6.88.B7.E8.AF.A6.E7.BB.86.E8.B5.84.E6.96.99 返回用户详细资料
101
+ def get_info
102
+ api_request '/passport/users/getInfo'
103
+ end
104
+
105
+ # 判定当前用户是否已经为应用授权
106
+ #
107
+ # @option options [String] :uid 用户uid,为空则默认是当前用户
108
+ # @option options [String] :appid 应用的appid,为空则默认是当前应用
109
+ #
110
+ # @return [Boolean]
111
+ # @see http://developer.baidu.com/wiki/index.php?title=docs/oauth/rest/file_data_apis_list#.E5.88.A4.E5.AE.9A.E5.BD.93.E5.89.8D.E7.94.A8.E6.88.B7.E6.98.AF.E5.90.A6.E5.B7.B2.E7.BB.8F.E4.B8.BA.E5.BA.94.E7.94.A8.E6.8E.88.E6.9D.83 判定当前用户是否已经为应用授权
112
+ def app_user?(options={})
113
+ rest = api_request '/passport/users/isAppUser', options
114
+ rest[:result] == '1'
115
+ end
116
+
117
+ # 判断指定用户是否具有某个数据操作权限
118
+ #
119
+ # 根据用户id以及在百度的相应的操作权限(单个权限,例如接收email等)来判断用户是否可以进行此操作。
120
+ #
121
+ # @param [String] ext_perm 单个权限,例如接收email等,具体权限请查看权限列表
122
+ # @param [String] uid 用户uid,为空则默认是当前用户
123
+ #
124
+ # @return [Boolean]
125
+ # @see http://developer.baidu.com/wiki/index.php?title=docs/oauth/rest/file_data_apis_list#.E5.88.A4.E6.96.AD.E6.8C.87.E5.AE.9A.E7.94.A8.E6.88.B7.E6.98.AF.E5.90.A6.E5.85.B7.E6.9C.89.E6.9F.90.E4.B8.AA.E6.95.B0.E6.8D.AE.E6.93.8D.E4.BD.9C.E6.9D.83.E9.99.90 判断指定用户是否具有某个数据操作权限
126
+ # @see http://developer.baidu.com/wiki/index.php?title=docs/oauth#.E6.8E.88.E6.9D.83.E6.9D.83.E9.99.90.E5.88.97.E8.A1.A8 权限列表
127
+ def has_app_permission?(ext_perm, uid=nil)
128
+ body = { ext_perm: ext_perm, uid: uid }
129
+ rest = api_request '/passport/users/hasAppPermission', body
130
+ rest[:result] == '1'
131
+ end
132
+
133
+ # 判断指定用户是否具有某一批数据操作权限
134
+ #
135
+ # 根据用户id以及在百度的相应的操作权限(可以是多个权限半角逗号隔开)来判断用户是否可以进行此操作
136
+ #
137
+ # @example 返回的原始 JSON
138
+ # {"basic":"1","email":"0"}
139
+ #
140
+ # @overload has_app_permissions(ext_perm, uid=nil)
141
+ # @param [String] ext_perm 多个权限半角逗号隔开,例如basic,email等,具体权限请查看权限列表
142
+ # @param [String] uid 用户uid,为空则默认是当前用户
143
+ #
144
+ # @overload has_app_permissions(ext_perms, uid=nil)
145
+ # @param [Array<String>] ext_perms 权限字符串数组,具体权限请查看权限列表
146
+ # @param [String] uid 用户uid,为空则默认是当前用户
147
+ #
148
+ # @return [Hash]
149
+ # 各个值在原始 JSON 基础之上转换为 true 或者 false
150
+ # 如:{:basic=>true, :email=>false}
151
+ # @see http://developer.baidu.com/wiki/index.php?title=docs/oauth/rest/file_data_apis_list#.E5.88.A4.E6.96.AD.E6.8C.87.E5.AE.9A.E7.94.A8.E6.88.B7.E6.98.AF.E5.90.A6.E5.85.B7.E6.9C.89.E6.9F.90.E4.B8.80.E6.89.B9.E6.95.B0.E6.8D.AE.E6.93.8D.E4.BD.9C.E6.9D.83.E9.99.90 判断指定用户是否具有某一批数据操作权限
152
+ # @see http://developer.baidu.com/wiki/index.php?title=docs/oauth#.E6.8E.88.E6.9D.83.E6.9D.83.E9.99.90.E5.88.97.E8.A1.A8 权限列表
153
+ def has_app_permissions(ext_perms, uid=nil)
154
+ body = { ext_perms: ext_perms, uid: uid }
155
+ if ext_perms.is_a? Array
156
+ body[:ext_perms] = ext_perms.join ','
157
+ end
158
+
159
+ rest = api_request '/passport/users/hasAppPermissions', body
160
+ rest.each { |k, v| rest[k] = v == '1' }
161
+ end
162
+
163
+ # 返回用户好友资料
164
+ #
165
+ # 根据用户id以及在百度的相应的操作权限(可以是多个权限半角逗号隔开)来判断用户是否可以进行此操作
166
+ # @todo TODO: check return value
167
+ #
168
+ # @example 返回的原始 JSON
169
+ # [
170
+ # {
171
+ # "uname": "spacebj009",
172
+ # "uid": "2013411308",
173
+ # "portrait": "79787370616365626a3030393306"
174
+ # },
175
+ # {
176
+ # "uname": "spacebj003",
177
+ # "uid": "2013412844",
178
+ # "portrait": "73787370616365626a3030333306"
179
+ # }
180
+ # ]
181
+ #
182
+ # :uname 好友的用户名
183
+ # :uid 当前登录用户的数字ID
184
+ # :portrait 好友的用户头像加密串
185
+ #
186
+ # @option options [Fixnum] :page_no 用于支持分页的API,0表示第1页,默认为0
187
+ # @option options [Fixnum] :page_size 用于支持分页的API,表示每页返回多少条数据,默认值500
188
+ # @option options [String] :sort_type 0: 按照添加时间排序,1:登陆时间排序,默认为0
189
+ #
190
+ # @return [Array]
191
+ # @see http://developer.baidu.com/wiki/index.php?title=docs/oauth/rest/file_data_apis_list#.E8.BF.94.E5.9B.9E.E7.94.A8.E6.88.B7.E5.A5.BD.E5.8F.8B.E8.B5.84.E6.96.99 返回用户好友资料
192
+ def get_friends(options={})
193
+ api_request '/friends/getFriends', options
194
+ end
195
+
196
+ # 获得指定用户之间好友关系
197
+ #
198
+ # 获得指定用户之间是否是好友关系。第一个数组指定一半用户,第二个数组指定另外一半,
199
+ # 两个数组必须同样的个数,一次最多可以查20个
200
+ #
201
+ # @example 返回的原始 JSON
202
+ # [
203
+ # {
204
+ # "uid1": "2222",
205
+ # "uid2": "1111",
206
+ # "are_friends": "1",
207
+ # "are_friends_reverse": "0"
208
+ # },
209
+ # {
210
+ # "uid1": "3333",
211
+ # "uid2": "2222",
212
+ # "are_friends": "0",
213
+ # "are_friends_reverse": "1"
214
+ # }
215
+ # ]
216
+ #
217
+ # :are_friends uid2是否是uid1的好友
218
+ # :are_friends_reverse uid1是否是uid2的好友
219
+ #
220
+ # @overload are_friends(uid1, uid2)
221
+ # @param [String] uid1
222
+ # @param [String] uid2
223
+ #
224
+ # @overload are_friends(uids1, uids2)
225
+ # @param [Array<String>] uids1
226
+ # @param [Array<String>] uids2
227
+ #
228
+ # @return [Array]
229
+ # are_friends 和 are_friends_reverse 值在原始 JSON 基础之上转换为 true 或者 false
230
+ # 如:[{:uid1=>"22", :uid2=>"33", :are_friends=>false, :are_friends_reverse=>true}]
231
+ # @see http://developer.baidu.com/wiki/index.php?title=docs/oauth/rest/file_data_apis_list#.E8.8E.B7.E5.BE.97.E6.8C.87.E5.AE.9A.E7.94.A8.E6.88.B7.E4.B9.8B.E9.97.B4.E5.A5.BD.E5.8F.8B.E5.85.B3.E7.B3.BB 获得指定用户之间好友关系
232
+ def are_friends(uids1, uids2)
233
+ body = {}
234
+ case
235
+ when uids1.is_a?(String) && uids2.is_a?(String)
236
+ body[:uids1], body[:uids2] = uids1, uids2
237
+ when uids1.is_a?(Array) && uids2.is_a?(Array)
238
+ raise ArgumentError, 'not the same size of array' unless uids1.size == uids2.size
239
+ body[:uids1], body[:uids2] = uids1.join(','), uids2.join(',')
240
+ else
241
+ raise ArgumentError, 'not the same types'
242
+ end
243
+
244
+ rest = api_request '/friends/areFriends', body
245
+ rest.each do |h|
246
+ h[:are_friends] = h[:are_friends] == '1'
247
+ h[:are_friends_reverse] = h[:are_friends_reverse] == '1'
248
+ end
249
+ end
250
+
251
+ # 使access_token,session_key过期
252
+ #
253
+ # 使用户授予的access_token和session_key过期
254
+ #
255
+ # @return [Boolean] true: 成功 false: 失败
256
+ # @see http://developer.baidu.com/wiki/index.php?title=docs/oauth/rest/file_data_apis_list#.E4.BD.BFaccess_token.2Csession_key.E8.BF.87.E6.9C.9F 使access_token,session_key过期
257
+ def expire_session
258
+ rest = api_request '/passport/auth/expireSession'
259
+ rest[:result] == '1'
260
+ end
261
+
262
+ # 撤销用户授予第三方应用的权限
263
+ #
264
+ # @param [String] uid 用户的ID,空则默认为当前用户
265
+ #
266
+ # @return [Boolean] true: 成功 false: 失败
267
+ # @see http://developer.baidu.com/wiki/index.php?title=docs/oauth/rest/file_data_apis_list#.E6.92.A4.E9.94.80.E7.94.A8.E6.88.B7.E6.8E.88.E4.BA.88.E7.AC.AC.E4.B8.89.E6.96.B9.E5.BA.94.E7.94.A8.E7.9A.84.E6.9D.83.E9.99.90 撤销用户授予第三方应用的权限
268
+ def revoke_authorization(uid=nil)
269
+ rest = api_request('/passport/auth/revokeAuthorization', {uid: uid})
270
+ rest[:result] == '1'
271
+ end
272
+
273
+ # 查询IP地址所在地区
274
+ #
275
+ # @example
276
+ # rest_client.query_ip '111.222.111.222', '114.114.114.114'
277
+ #
278
+ # @example 返回的原始 JSON
279
+ # {
280
+ # "111.222.111.222": {
281
+ # "province": "\u5e7f\u4e1c",
282
+ # "city": "\u6df1\u5733"
283
+ # },
284
+ # "111.222.111.222": {
285
+ # "province": ""\u6c5f\u82cf",
286
+ # "city": ""
287
+ # }
288
+ # }
289
+ #
290
+ # @param [*String] ips 需要查询的ip地址
291
+ #
292
+ # @return [Hash]
293
+ # @see http://developer.baidu.com/wiki/index.php?title=docs/oauth/rest/file_data_apis_list#.E6.9F.A5.E8.AF.A2IP.E5.9C.B0.E5.9D.80.E6.89.80.E5.9C.A8.E5.9C.B0.E5.8C.BA 查询IP地址所在地区
294
+ def query_ip(*ips)
295
+ api_request('/iplib/query', { ip: ips.join(',') }, :get)
296
+ end
297
+
298
+ private
299
+
300
+ def base_query
301
+ { access_token: @access_token }
302
+ end
303
+
304
+ def api_request(path, params={}, method=:post)
305
+ body = base_query.update params
306
+ rest =
307
+ case method
308
+ when :post
309
+ post "#{BASE_PATH}#{path}", nil, body
310
+ when :get
311
+ get "#{BASE_PATH}#{path}", body
312
+ end
313
+ process_error rest
314
+ rest
315
+ end
316
+
317
+ # NOTE: Baidu api sucks, it may return error info with 200 status
318
+ # http://developer.baidu.com/wiki/index.php?title=%E7%99%BE%E5%BA%A6Open_API%E9%94%99%E8%AF%AF%E7%A0%81%E5%AE%9A%E4%B9%89
319
+ def process_error(data)
320
+ if data.is_a?(Hash) && data.has_key?(:error_code)
321
+ code = data[:error_code].to_s.strip
322
+ msg = data[:error_msg]
323
+ unless code == '0'
324
+ if %w[102 110 111 112].include? code
325
+ raise Baidu::Errors::AuthError.new(msg, code)
326
+ else
327
+ raise Baidu::Errors::Error.new(msg, code)
328
+ end
329
+ end
330
+ end
331
+ end
332
+ end
333
+ end
334
+ end
data/lib/baidu/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # encoding: UTF-8
2
2
 
3
3
  module Baidu
4
- VERSION = "0.0.2"
4
+ VERSION = "0.0.3"
5
5
  end
@@ -82,26 +82,24 @@ describe Baidu::OAuth::Client do
82
82
  context '#user_and_device_code' do
83
83
 
84
84
  it 'requests user and device code' do
85
- stub_get(:oauth, '/oauth/2.0/device/code', client_id: 'ci', response_type: 'device_code').
86
- to_return(status: 200, body: ft('user_and_device_code.json'))
85
+ stub = stub_get(:oauth, '/oauth/2.0/device/code', client_id: 'ci', response_type: 'device_code')
86
+ stub.to_return(status: 200, body: ft('user_and_device_code.json'))
87
87
  @client.device_flow.user_and_device_code
88
- a_get(:oauth, '/oauth/2.0/device/code', client_id: 'ci', response_type: 'device_code').
89
- should have_been_made
88
+ stub.should have_been_requested
90
89
  end
91
90
 
92
91
  it 'requests user and device code with scope' do
93
- stub_get(:oauth, '/oauth/2.0/device/code', client_id: 'ci',
94
- response_type: 'device_code', scope: 'basic netdisk').
95
- to_return(status: 200, body: ft('user_and_device_code.json'))
92
+ stub = stub_get(:oauth, '/oauth/2.0/device/code', client_id: 'ci',
93
+ response_type: 'device_code',
94
+ scope: 'basic netdisk')
95
+ stub.to_return(status: 200, body: ft('user_and_device_code.json'))
96
96
  @client.device_flow.user_and_device_code 'basic netdisk'
97
- a_get(:oauth, '/oauth/2.0/device/code', client_id: 'ci',
98
- response_type: 'device_code', scope: 'basic netdisk').
99
- should have_been_made
97
+ stub.should have_been_requested
100
98
  end
101
99
 
102
100
  it 'responses user and device code' do
103
- stub_get(:oauth, '/oauth/2.0/device/code', client_id: 'ci', response_type: 'device_code').
104
- to_return(status: 200, body: ft('user_and_device_code.json'))
101
+ stub = stub_get(:oauth, '/oauth/2.0/device/code', client_id: 'ci', response_type: 'device_code')
102
+ stub.to_return(status: 200, body: ft('user_and_device_code.json'))
105
103
  result = @client.device_flow.user_and_device_code
106
104
  expect(result).to be_instance_of(Hash)
107
105
  expect(result).to have_key(:device_code)
@@ -114,29 +112,26 @@ describe Baidu::OAuth::Client do
114
112
  end
115
113
 
116
114
  context '#get_token' do
117
- context 'with code flow' do
118
- before do
119
- stub_post(:oauth, '/oauth/2.0/token',
120
- grant_type: 'authorization_code',
121
- code: 'ANXxSNjwQDugOnqeikRMu2bKaXCdlLxn',
122
- client_id: 'ci', client_secret: 'cs',
123
- redirect_uri: 'http://www.example.com/oauth_redirect').
124
- to_return(status: 200, body: ft('get_token_code.json'))
125
- end
126
-
115
+ context 'with authorization code flow' do
127
116
  it 'requests access tokey' do
117
+ stub = stub_post(:oauth, '/oauth/2.0/token', grant_type: 'authorization_code',
118
+ client_id: 'ci', client_secret: 'cs',
119
+ redirect_uri: 'http://www.example.com/oauth_redirect',
120
+ code: 'ANXxSNjwQDugOnqeikRMu2bKaXCdlLxn')
121
+ stub.to_return(status: 200, body: ft('get_token_code.json'))
128
122
  @client.authorization_code_flow.get_token 'ANXxSNjwQDugOnqeikRMu2bKaXCdlLxn',
129
- 'http://www.example.com/oauth_redirect'
130
- a_post(:oauth, '/oauth/2.0/token',
131
- grant_type: 'authorization_code',
132
- code: 'ANXxSNjwQDugOnqeikRMu2bKaXCdlLxn',
133
- client_id: 'ci', client_secret: 'cs',
134
- redirect_uri: 'http://www.example.com/oauth_redirect').should have_been_made
123
+ 'http://www.example.com/oauth_redirect'
124
+ stub.should have_been_requested
135
125
  end
136
126
 
137
127
  it 'responses access token' do
128
+ stub = stub_post(:oauth, '/oauth/2.0/token', grant_type: 'authorization_code',
129
+ client_id: 'ci', client_secret: 'cs',
130
+ redirect_uri: 'http://www.example.com/oauth_redirect',
131
+ code: 'ANXxSNjwQDugOnqeikRMu2bKaXCdlLxn')
132
+ stub.to_return(status: 200, body: ft('get_token_code.json'))
138
133
  result = @client.authorization_code_flow.get_token 'ANXxSNjwQDugOnqeikRMu2bKaXCdlLxn',
139
- 'http://www.example.com/oauth_redirect'
134
+ 'http://www.example.com/oauth_redirect'
140
135
  expect(result).to be_instance_of(Baidu::Session)
141
136
  expect(result).to respond_to(:access_token)
142
137
  expect(result).to respond_to(:refresh_token)
@@ -147,20 +142,20 @@ describe Baidu::OAuth::Client do
147
142
  end
148
143
 
149
144
  context 'with device flow' do
150
- before do
151
- stub_post(:oauth, '/oauth/2.0/token', grant_type: 'device_token',
152
- code: 'a82hjs723h72h3a82hjs723h72h3vb', client_id: 'ci', client_secret: 'cs').
153
- to_return(status: 200, body: ft('get_token_device.json'))
154
- end
155
-
156
145
  it 'requests access token' do
146
+ stub = stub_post(:oauth, '/oauth/2.0/token', grant_type: 'device_token',
147
+ client_id: 'ci', client_secret: 'cs',
148
+ code: 'a82hjs723h72h3a82hjs723h72h3vb')
149
+ stub.to_return(status: 200, body: ft('get_token_device.json'))
157
150
  @client.device_flow.get_token 'a82hjs723h72h3a82hjs723h72h3vb'
158
- a_post(:oauth, '/oauth/2.0/token', grant_type: 'device_token',
159
- code: 'a82hjs723h72h3a82hjs723h72h3vb',
160
- client_id: 'ci', client_secret: 'cs').should have_been_made
151
+ stub.should have_been_requested
161
152
  end
162
153
 
163
154
  it 'responses access token' do
155
+ stub = stub_post(:oauth, '/oauth/2.0/token', grant_type: 'device_token',
156
+ client_id: 'ci', client_secret: 'cs',
157
+ code: 'a82hjs723h72h3a82hjs723h72h3vb')
158
+ stub.to_return(status: 200, body: ft('get_token_device.json'))
164
159
  result = @client.device_flow.get_token 'a82hjs723h72h3a82hjs723h72h3vb'
165
160
  expect(result).to be_instance_of(Baidu::Session)
166
161
  expect(result).to respond_to(:access_token)
@@ -184,14 +179,16 @@ describe Baidu::OAuth::Client do
184
179
  end
185
180
 
186
181
  it 'requests access token with scope' do
187
- stub = stub_post(:oauth, '/oauth/2.0/token', base_params.update({ scope: 'basic hao123' }))
182
+ params = { grant_type: 'client_credentials', scope: 'basic hao123',
183
+ client_id: 'ci', client_secret: 'cs' }
184
+ stub = stub_post(:oauth, '/oauth/2.0/token', params)
188
185
  @client.client_credentials_flow.get_token('basic hao123')
189
186
  stub.should have_been_requested
190
187
  end
191
188
 
192
189
  it 'responses access token' do
193
- stub = stub_post(:oauth, '/oauth/2.0/token', base_params).
194
- to_return(status: 200, body: ft('get_token_client_credentials.json'))
190
+ stub = stub_post(:oauth, '/oauth/2.0/token', base_params)
191
+ stub.to_return(status: 200, body: ft('get_token_client_credentials.json'))
195
192
  result = @client.client_credentials_flow.get_token
196
193
  expect(result).to be_instance_of(Baidu::Session)
197
194
  expect(result).to respond_to(:access_token)
@@ -203,34 +200,31 @@ describe Baidu::OAuth::Client do
203
200
  end
204
201
 
205
202
  context '#refresh_token' do
206
- before do
207
- stub_post(:oauth, '/oauth/2.0/token', grant_type: 'refresh_token',
208
- refresh_token: '2.af3d55f8615fdfd9edb7c4b5ebdc3e32.604800.1293440400-2346678-124328',
209
- client_id: 'ci', client_secret: 'cs').
210
- to_return(status: 200, body: ft('refresh_token.json'))
211
- end
212
-
213
203
  it 'requests access token by refresh token' do
214
- @client.refresh('2.af3d55f8615fdfd9edb7c4b5ebdc3e32.604800.1293440400-2346678-124328')
215
- a_post(:oauth, '/oauth/2.0/token', grant_type: 'refresh_token',
216
- refresh_token: '2.af3d55f8615fdfd9edb7c4b5ebdc3e32.604800.1293440400-2346678-124328',
217
- client_id: 'ci', client_secret: 'cs').should have_been_made
204
+ stub = stub_post(:oauth, '/oauth/2.0/token', grant_type: 'refresh_token',
205
+ refresh_token: '2.af3d55f',
206
+ client_id: 'ci', client_secret: 'cs')
207
+ stub.to_return(status: 200, body: ft('refresh_token.json'))
208
+ @client.refresh('2.af3d55f')
209
+ stub.should have_been_requested
218
210
  end
219
211
 
220
- it 'requests access token by refresh token with params' do
221
- stub_post(:oauth, '/oauth/2.0/token', grant_type: 'refresh_token',
222
- refresh_token: '2.af3d55f8615fdfd9edb7c4b5ebdc3e32.604800.1293440400-2346678-124328',
223
- scope: 'basic netdisk', client_id: 'ci', client_secret: 'cs').
224
- to_return(status: 200, body: ft('refresh_token.json'))
225
- @client.refresh('2.af3d55f8615fdfd9edb7c4b5ebdc3e32.604800.1293440400-2346678-124328',
226
- scope: 'basic netdisk')
227
- a_post(:oauth, '/oauth/2.0/token', grant_type: 'refresh_token',
228
- refresh_token: '2.af3d55f8615fdfd9edb7c4b5ebdc3e32.604800.1293440400-2346678-124328',
229
- scope: 'basic netdisk', client_id: 'ci', client_secret: 'cs').should have_been_made
212
+ it 'requests access token by refresh token with params' do
213
+ stub = stub_post(:oauth, '/oauth/2.0/token', grant_type: 'refresh_token',
214
+ refresh_token: '2.af3d55f8',
215
+ client_id: 'ci', client_secret: 'cs',
216
+ scope: 'basic netdisk')
217
+ stub.to_return(status: 200, body: ft('refresh_token.json'))
218
+ @client.refresh('2.af3d55f8', scope: 'basic netdisk')
219
+ stub.should have_been_requested
230
220
  end
231
221
 
232
222
  it 'responses access token by refresh token' do
233
- result = @client.refresh('2.af3d55f8615fdfd9edb7c4b5ebdc3e32.604800.1293440400-2346678-124328')
223
+ stub = stub_post(:oauth, '/oauth/2.0/token', grant_type: 'refresh_token',
224
+ refresh_token: '2.af3d55f86',
225
+ client_id: 'ci', client_secret: 'cs')
226
+ stub.to_return(status: 200, body: ft('refresh_token.json'))
227
+ result = @client.refresh('2.af3d55f86')
234
228
  expect(result).to be_instance_of(Baidu::Session)
235
229
  expect(result).to respond_to(:access_token)
236
230
  expect(result).to respond_to(:refresh_token)
@@ -0,0 +1,313 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'spec_helper'
4
+ require 'baidu/oauth'
5
+
6
+ module Baidu
7
+ describe OAuth::RESTClient do
8
+ let(:base_query) { { access_token: '3.xxx.yyy' } }
9
+
10
+ before do
11
+ @client = OAuth::RESTClient.new(base_query[:access_token])
12
+ end
13
+
14
+ describe '#initialize' do
15
+ it 'inits with access token string' do
16
+ client = OAuth::RESTClient.new('xyz_at')
17
+ expect(client).to be_a(OAuth::RESTClient)
18
+ expect(client.instance_variable_get(:@access_token)).to eq('xyz_at')
19
+ end
20
+
21
+ it 'inits with Baidu::Session' do
22
+ session = Baidu::Session.new
23
+ session.access_token = 'zyx_at'
24
+ client = OAuth::RESTClient.new(session)
25
+ expect(client).to be_a(OAuth::RESTClient)
26
+ expect(client.instance_variable_get(:@access_token)).to eq('zyx_at')
27
+ end
28
+
29
+ it 'provides base uri' do
30
+ client = OAuth::RESTClient.new('xyz_at')
31
+ expect(client.instance_variable_get(:@site)).to eq('https://openapi.baidu.com')
32
+ end
33
+
34
+ it 'raises error with other params' do
35
+ expect {
36
+ OAuth::RESTClient.new({})
37
+ }.to raise_error(ArgumentError, 'need a String or Baidu::Session')
38
+ end
39
+ end
40
+
41
+ describe '#get_logged_in_user' do
42
+ it 'requests with params' do
43
+ stub = stub_post(:oauth_rest, '/passport/users/getLoggedInUser', base_query)
44
+ @client.get_logged_in_user
45
+ stub.should have_been_requested
46
+ end
47
+ end
48
+
49
+ describe '#get_info' do
50
+ it 'requests current user info' do
51
+ stub = stub_post(:oauth_rest, '/passport/users/getInfo', base_query)
52
+ @client.get_info
53
+ stub.should have_been_requested
54
+ end
55
+ end
56
+
57
+ describe '#app_user?' do
58
+ it 'requests "isAppUser" api' do
59
+ stub = stub_post(:oauth_rest, '/passport/users/isAppUser', base_query)
60
+ @client.app_user?
61
+ stub.should have_been_requested
62
+ end
63
+
64
+ it 'requests "isAppUser" for specified user' do
65
+ stub = stub_post(:oauth_rest,
66
+ '/passport/users/isAppUser',
67
+ base_query.update({ uid: '456123' }))
68
+ stub.to_return(body: '{"result":"1"}')
69
+ rest = @client.app_user?(uid: '456123')
70
+ stub.should have_been_requested
71
+ expect(rest).to eq(true)
72
+ end
73
+
74
+ it 'requests "isAppUser" for specified appid' do
75
+ stub = stub_post(:oauth_rest,
76
+ '/passport/users/isAppUser',
77
+ base_query.update({ appid: '341256' }))
78
+ stub.to_return(body: '{"result":"0"}')
79
+ rest = @client.app_user?(appid: '341256')
80
+ stub.should have_been_requested
81
+ expect(rest).to eq(false)
82
+ end
83
+ end
84
+
85
+ describe '#has_app_permission?' do
86
+ it 'requests "hasAppPermission" api' do
87
+ stub = stub_post(:oauth_rest,
88
+ '/passport/users/hasAppPermission',
89
+ base_query.update({ ext_perm: 'netdisk' }))
90
+ stub.to_return(body: '{"result":"1"}')
91
+ rest = @client.has_app_permission? 'netdisk'
92
+ stub.should have_been_requested
93
+ expect(rest).to eq(true)
94
+ end
95
+
96
+ it 'requests "hasAppPermission" for specified user' do
97
+ stub = stub_post(:oauth_rest,
98
+ '/passport/users/hasAppPermission',
99
+ base_query.update({ ext_perm: 'super_msg', uid: '456123' }))
100
+ stub.to_return(body: '{"result":"0"}')
101
+ rest = @client.has_app_permission?('super_msg', '456123')
102
+ stub.should have_been_requested
103
+ expect(rest).to eq(false)
104
+ end
105
+ end
106
+
107
+ describe '#has_app_permissions' do
108
+ it 'requests "hasAppPermissions" api' do
109
+ stub = stub_post(:oauth_rest,
110
+ '/passport/users/hasAppPermissions',
111
+ base_query.update({ ext_perms: 'netdisk,basic' }))
112
+ stub.to_return(body: '{"basic":"1", "netdisk":"0"}')
113
+ rest = @client.has_app_permissions 'netdisk,basic'
114
+ stub.should have_been_requested
115
+ expect(rest[:basic]).to eq(true)
116
+ expect(rest[:netdisk]).to eq(false)
117
+ end
118
+
119
+ it 'requests "hasAppPermissions" api with array of perms' do
120
+ stub = stub_post(:oauth_rest,
121
+ '/passport/users/hasAppPermissions',
122
+ base_query.update({ ext_perms: 'netdisk,basic' }))
123
+ stub.to_return(body: '{"basic":"1", "netdisk":"0"}')
124
+ rest = @client.has_app_permissions %w[netdisk basic]
125
+ stub.should have_been_requested
126
+ expect(rest[:basic]).to eq(true)
127
+ expect(rest[:netdisk]).to eq(false)
128
+ end
129
+
130
+ it 'requests "hasAppPermissions" for specified user' do
131
+ stub = stub_post(:oauth_rest,
132
+ '/passport/users/hasAppPermissions',
133
+ base_query.update({ ext_perms: 'super_msg', uid: '456123' }))
134
+ stub.to_return(body: '{"super_msg":"0"}')
135
+ rest = @client.has_app_permissions('super_msg', '456123')
136
+ stub.should have_been_requested
137
+ expect(rest[:super_msg]).to eq(false)
138
+ end
139
+ end
140
+
141
+ describe '#get_friends' do
142
+ it 'requests with default params' do
143
+ stub = stub_post(:oauth_rest, '/friends/getFriends', base_query)
144
+ @client.get_friends
145
+ stub.should have_been_requested
146
+ end
147
+
148
+ it 'requests with custom params' do
149
+ stub = stub_post(:oauth_rest,
150
+ '/friends/getFriends',
151
+ base_query.update({ page_no: 3, page_size: 10, sort_type: 1 }))
152
+ @client.get_friends page_no: 3, page_size: 10, sort_type: 1
153
+ stub.should have_been_requested
154
+ end
155
+
156
+ it 'returns result of an array' do
157
+ stub = stub_post(:oauth_rest, '/friends/getFriends', base_query.update(page_size: 2))
158
+ stub.to_return(body: ft('get_friends.json'))
159
+ rest = @client.get_friends page_size: 2
160
+ stub.should have_been_requested
161
+ expect(rest).to be_a Array
162
+ expect(rest.size).to be(2)
163
+ end
164
+ end
165
+
166
+ describe '#are_friends' do
167
+ it 'requests with both string params' do
168
+ stub = stub_post(:oauth_rest,
169
+ '/friends/areFriends',
170
+ base_query.update(uids1: '111', uids2: '222'))
171
+ @client.are_friends '111', '222'
172
+ stub.should have_been_requested
173
+ end
174
+
175
+ it 'requests with both array params' do
176
+ stub = stub_post(:oauth_rest,
177
+ '/friends/areFriends',
178
+ base_query.update(uids1: '111,333', uids2: '222,444'))
179
+ @client.are_friends %w[111 333], %w[222 444]
180
+ stub.should have_been_requested
181
+ end
182
+
183
+ it 'requests with different param type' do
184
+ expect {
185
+ @client.are_friends '111', %w[222]
186
+ }.to raise_error ArgumentError, 'not the same types'
187
+ end
188
+
189
+ it 'requests with different size of array params' do
190
+ expect {
191
+ @client.are_friends %w[111], %w[222, 333]
192
+ }.to raise_error ArgumentError, 'not the same size of array'
193
+ end
194
+
195
+ it 'changes result with true or false' do
196
+ stub = stub_post(:oauth_rest,
197
+ '/friends/areFriends',
198
+ base_query.update(uids1: '111,333', uids2: '222,444'))
199
+ stub.to_return(body: ft('are_friends.json'))
200
+ rest = @client.are_friends %w[111 333], %w[222 444]
201
+ stub.should have_been_requested
202
+ expect(rest.first[:are_friends]).to eq(true)
203
+ expect(rest.first[:are_friends_reverse]).to eq(false)
204
+ expect(rest.last[:are_friends]).to eq(false)
205
+ expect(rest.last[:are_friends_reverse]).to eq(true)
206
+ end
207
+ end
208
+
209
+ describe '#expire_session' do
210
+ it 'requests "expireSession" api successfully' do
211
+ stub = stub_post(:oauth_rest,
212
+ '/passport/auth/expireSession',
213
+ base_query)
214
+ stub.to_return(body: '{"result":"1"}')
215
+ rest = @client.expire_session
216
+ stub.should have_been_requested
217
+ expect(rest).to eq(true)
218
+ end
219
+
220
+ it 'requests "expireSession" api unsuccessfully' do
221
+ stub = stub_post(:oauth_rest,
222
+ '/passport/auth/expireSession',
223
+ base_query)
224
+ stub.to_return(body: '{"result":"0"}')
225
+ rest = @client.expire_session
226
+ stub.should have_been_requested
227
+ expect(rest).to eq(false)
228
+ end
229
+ end
230
+
231
+ describe '#revoke_authorization' do
232
+ it 'requests "revokeAuthorization" api successfully' do
233
+ stub = stub_post(:oauth_rest,
234
+ '/passport/auth/revokeAuthorization',
235
+ base_query)
236
+ stub.to_return(body: '{"result":"1"}')
237
+ rest = @client.revoke_authorization
238
+ stub.should have_been_requested
239
+ expect(rest).to eq(true)
240
+ end
241
+
242
+ it 'requests "revokeAuthorization" api with uid successfully' do
243
+ stub = stub_post(:oauth_rest,
244
+ '/passport/auth/revokeAuthorization',
245
+ base_query.update({ uid: 123654 }))
246
+ stub.to_return(body: '{"result":"1"}')
247
+ rest = @client.revoke_authorization '123654'
248
+ stub.should have_been_requested
249
+ expect(rest).to eq(true)
250
+ end
251
+
252
+ it 'requests "revokeAuthorization" api unsuccessfully' do
253
+ stub = stub_post(:oauth_rest,
254
+ '/passport/auth/revokeAuthorization',
255
+ base_query)
256
+ stub.to_return(body: '{"result":"0"}')
257
+ rest = @client.revoke_authorization
258
+ stub.should have_been_requested
259
+ expect(rest).to eq(false)
260
+ end
261
+ end
262
+
263
+ describe '#query_ip' do
264
+ it 'requests single ip' do
265
+ stub = stub_get(:oauth_rest,
266
+ '/iplib/query',
267
+ base_query.update({ ip: '111.222.111.222' }))
268
+ stub.to_return(body: '{"111.222.111.222":{"province":"\u5e7f\u4e1c","city":"\u6df1\u5733"}}')
269
+ rest = @client.query_ip '111.222.111.222'
270
+ stub.should have_been_requested
271
+ expect(rest).to have_key(:'111.222.111.222')
272
+ end
273
+
274
+ it 'requests multiple ips' do
275
+ stub = stub_get(:oauth_rest,
276
+ '/iplib/query',
277
+ base_query.update({ ip: '111.222.111.222,8.8.8.8' }))
278
+ @client.query_ip '111.222.111.222', '8.8.8.8'
279
+ stub.should have_been_requested
280
+ end
281
+
282
+ it 'requests multiple ips as array' do
283
+ stub = stub_get(:oauth_rest,
284
+ '/iplib/query',
285
+ base_query.update({ ip: '111.222.111.222,8.8.8.8,8.8.4.4' }))
286
+ @client.query_ip ['111.222.111.222', '8.8.8.8', '8.8.4.4']
287
+ stub.should have_been_requested
288
+ end
289
+ end
290
+
291
+ describe 'when process error' do
292
+ it 'does not raise error' do
293
+ expect {
294
+ @client.send(:process_error, ['hi'])
295
+ @client.send(:process_error, {num: 0})
296
+ @client.send(:process_error, {error_code: 0})
297
+ }.not_to raise_error
298
+ end
299
+
300
+ it 'raises Baidu::Errors::Error' do
301
+ expect {
302
+ @client.send(:process_error, {error_code: 1})
303
+ }.to raise_error Baidu::Errors::Error
304
+ end
305
+
306
+ it 'raises Baidu::Errors::AuthError' do
307
+ expect {
308
+ @client.send(:process_error, {error_code: 110})
309
+ }.to raise_error Baidu::Errors::AuthError
310
+ end
311
+ end
312
+ end
313
+ end
@@ -0,0 +1,14 @@
1
+ [
2
+ {
3
+ "uid1": "111",
4
+ "uid2": "222",
5
+ "are_friends": "1",
6
+ "are_friends_reverse": "0"
7
+ },
8
+ {
9
+ "uid1": " 333",
10
+ "uid2": "444",
11
+ "are_friends": "0",
12
+ "are_friends_reverse": "1"
13
+ }
14
+ ]
@@ -0,0 +1,12 @@
1
+ [
2
+ {
3
+ "uname": "spacebj009",
4
+ "uid": "2013411308",
5
+ "portrait": "79787370616365626a3030393306"
6
+ },
7
+ {
8
+ "uname": "spacebj003",
9
+ "uid": "2013412844",
10
+ "portrait": "73787370616365626a3030333306"
11
+ }
12
+ ]
data/spec/spec_helper.rb CHANGED
@@ -35,6 +35,7 @@ end
35
35
  def webmock_url(mod, path)
36
36
  case mod
37
37
  when :oauth then "https://openapi.baidu.com#{path}"
38
+ when :oauth_rest then "https://openapi.baidu.com/rest/2.0#{path}"
38
39
  when :pcs then "https://pcs.baidu.com/rest/2.0/pcs#{path}"
39
40
  when :pcs_upload then "https://c.pcs.baidu.com/rest/2.0/pcs#{path}"
40
41
  when :pcs_download then "https://d.pcs.baidu.com/rest/2.0/pcs#{path}"
@@ -43,24 +44,35 @@ end
43
44
 
44
45
  def stub_get(mod, path, params={})
45
46
  req = stub_request :get, webmock_url(mod, path)
46
- req.with(query: params) unless params.empty?
47
+ set_req_params :query, req, params
47
48
  req
48
49
  end
49
50
 
50
51
  def stub_post(mod, path, params={})
51
52
  req = stub_request :post, webmock_url(mod, path)
52
- req.with(body: params) unless params.empty?
53
+ set_req_params :body, req, params
53
54
  req
54
55
  end
55
56
 
56
57
  def a_get(mod, path, params={})
57
58
  req = a_request :get, webmock_url(mod, path)
58
- req.with(query: params) unless params.empty?
59
+ set_req_params :query, req, params
59
60
  req
60
61
  end
61
62
 
62
63
  def a_post(mod, path, params={})
63
64
  req = a_request :post, webmock_url(mod, path)
64
- req.with(body: params) unless params.empty?
65
+ set_req_params :body, req, params
65
66
  req
66
67
  end
68
+
69
+ private
70
+
71
+ def set_req_params(type, req, params)
72
+ unless params.empty?
73
+ if params.is_a?(Hash)
74
+ params = URI.encode_www_form(params)
75
+ end
76
+ req.with(Hash[type, params])
77
+ end
78
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: baidu-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lonre Wang
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-05 00:00:00.000000000 Z
11
+ date: 2013-12-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multipart-post
@@ -66,6 +66,7 @@ files:
66
66
  - lib/baidu/oauth/flow/client_credentials.rb
67
67
  - lib/baidu/oauth/flow/device.rb
68
68
  - lib/baidu/oauth/flow/implicit_grant.rb
69
+ - lib/baidu/oauth/rest_client.rb
69
70
  - lib/baidu/pcs.rb
70
71
  - lib/baidu/pcs/client.rb
71
72
  - lib/baidu/session.rb
@@ -75,16 +76,19 @@ files:
75
76
  - lib/baidu/version.rb
76
77
  - spec/baidu/core_spec.rb
77
78
  - spec/baidu/oauth/client_spec.rb
79
+ - spec/baidu/oauth/rest_client_spec.rb
78
80
  - spec/baidu/pcs/client_spec.rb
79
81
  - spec/baidu/session_spec.rb
80
82
  - spec/baidu/support/request_spec.rb
81
83
  - spec/baidu/support/util_spec.rb
82
84
  - spec/fixtures/add_task.json
85
+ - spec/fixtures/are_friends.json
83
86
  - spec/fixtures/cancel_task.json
84
87
  - spec/fixtures/copy.json
85
88
  - spec/fixtures/delete.json
86
89
  - spec/fixtures/diff.json
87
90
  - spec/fixtures/empty.json
91
+ - spec/fixtures/get_friends.json
88
92
  - spec/fixtures/get_token_client_credentials.json
89
93
  - spec/fixtures/get_token_code.json
90
94
  - spec/fixtures/get_token_device.json
@@ -130,23 +134,26 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
134
  version: '0'
131
135
  requirements: []
132
136
  rubyforge_project:
133
- rubygems_version: 2.1.11
137
+ rubygems_version: 2.2.0
134
138
  signing_key:
135
139
  specification_version: 4
136
140
  summary: Unofficial Baidu REST API SDK for Ruby.
137
141
  test_files:
138
142
  - spec/baidu/core_spec.rb
139
143
  - spec/baidu/oauth/client_spec.rb
144
+ - spec/baidu/oauth/rest_client_spec.rb
140
145
  - spec/baidu/pcs/client_spec.rb
141
146
  - spec/baidu/session_spec.rb
142
147
  - spec/baidu/support/request_spec.rb
143
148
  - spec/baidu/support/util_spec.rb
144
149
  - spec/fixtures/add_task.json
150
+ - spec/fixtures/are_friends.json
145
151
  - spec/fixtures/cancel_task.json
146
152
  - spec/fixtures/copy.json
147
153
  - spec/fixtures/delete.json
148
154
  - spec/fixtures/diff.json
149
155
  - spec/fixtures/empty.json
156
+ - spec/fixtures/get_friends.json
150
157
  - spec/fixtures/get_token_client_credentials.json
151
158
  - spec/fixtures/get_token_code.json
152
159
  - spec/fixtures/get_token_device.json