vkontakte_api 1.4 → 1.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/Guardfile +1 -1
- data/README.md +14 -14
- data/bin/rspec +15 -0
- data/lib/vkontakte_api/client.rb +10 -0
- data/lib/vkontakte_api/version.rb +1 -1
- data/spec/integration_spec.rb +1 -1
- data/spec/spec_helper.rb +4 -0
- data/spec/vkontakte_api/api_spec.rb +2 -2
- data/spec/vkontakte_api/authorization_spec.rb +7 -7
- data/spec/vkontakte_api/client_spec.rb +24 -5
- data/spec/vkontakte_api/method_spec.rb +5 -5
- data/spec/vkontakte_api/resolver_spec.rb +2 -2
- data/spec/vkontakte_api/result_spec.rb +3 -3
- data/spec/vkontakte_api/uploading_spec.rb +2 -2
- data/spec/vkontakte_api/utils_spec.rb +1 -1
- data/vkontakte_api.gemspec +3 -4
- metadata +9 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5f135f0fa55b982c98358a7e47fc635321bff4e4
|
4
|
+
data.tar.gz: a02fed95ccd6c1af2b96fe2fa39df38eb2e90833
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 731b0b5b6eb1ec51e4be67ba9b799cf5d24006423d52c4522bf843cfcc9cf077cc8800704f976516aa9df731f63ac1129ce54099b36e338f3cdab212461d726a
|
7
|
+
data.tar.gz: c47aaf4aaf695d78e346fc200141b31c35738f6ecc4e03745bdad57759cd08f8d60c532e31766872be220cb2089895387a1c7f234dbd4043b33481802647a250
|
data/CHANGELOG.md
CHANGED
data/Guardfile
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
## vkontakte_api [![Build Status](https://secure.travis-ci.org/7even/vkontakte_api.png)](http://travis-ci.org/7even/vkontakte_api) [![Gem Version](https://badge.fury.io/rb/vkontakte_api.png)](http://badge.fury.io/rb/vkontakte_api) [![Dependency Status](https://gemnasium.com/7even/vkontakte_api.png)](https://gemnasium.com/7even/vkontakte_api) [![Code Climate](https://codeclimate.com/github/7even/vkontakte_api.png)](https://codeclimate.com/github/7even/vkontakte_api)
|
2
2
|
|
3
|
-
`vkontakte_api`
|
3
|
+
`vkontakte_api` — ruby-адаптер для ВКонтакте API. Он позволяет вызывать методы API, загружать файлы на сервера ВКонтакте, а также поддерживает все 3 доступных способа авторизации (при этом позволяя использовать стороннее решение).
|
4
4
|
|
5
5
|
## Установка
|
6
6
|
|
@@ -55,16 +55,16 @@ end
|
|
55
55
|
|
56
56
|
### Загрузка файлов
|
57
57
|
|
58
|
-
Загрузка файлов на сервера ВКонтакте осуществляется в несколько этапов: сначала вызывается метод API, возвращающий URL для загрузки, затем происходит сама загрузка файлов, и после этого в некоторых случаях нужно вызвать другой метод API, передав в параметрах данные, возвращенные сервером после предыдущего запроса. Вызываемые методы API зависят от типа загружаемых файлов и описаны в [соответствующем разделе документации](
|
58
|
+
Загрузка файлов на сервера ВКонтакте осуществляется в несколько этапов: сначала вызывается метод API, возвращающий URL для загрузки, затем происходит сама загрузка файлов, и после этого в некоторых случаях нужно вызвать другой метод API, передав в параметрах данные, возвращенные сервером после предыдущего запроса. Вызываемые методы API зависят от типа загружаемых файлов и описаны в [соответствующем разделе документации](https://vk.com/dev/upload_files).
|
59
59
|
|
60
|
-
Файлы передаются в формате хэша, где ключом является название параметра в запросе (указано в документации, например для загрузки фото на стену это будет `photo`), а значением
|
60
|
+
Файлы передаются в формате хэша, где ключом является название параметра в запросе (указано в документации, например для загрузки фото на стену это будет `photo`), а значением — массив из 2 строк: полный путь к файлу и его MIME-тип:
|
61
61
|
|
62
62
|
``` ruby
|
63
63
|
url = 'http://cs303110.vkontakte.ru/upload.php?act=do_add'
|
64
64
|
VkontakteApi.upload(url: url, photo: ['/path/to/file.jpg', 'image/jpeg'])
|
65
65
|
```
|
66
66
|
|
67
|
-
Если загружаемый файл доступен как открытый IO-объект, его можно передать альтернативным синтаксисом
|
67
|
+
Если загружаемый файл доступен как открытый IO-объект, его можно передать альтернативным синтаксисом — IO-объект, MIME-тип и путь к файлу:
|
68
68
|
|
69
69
|
``` ruby
|
70
70
|
url = 'http://cs303110.vkontakte.ru/upload.php?act=do_add'
|
@@ -77,13 +77,13 @@ VkontakteApi.upload(url: url, photo: [file_io, 'image/jpeg', '/path/to/file.jpg'
|
|
77
77
|
|
78
78
|
Для вызова большинства методов требуется токен доступа (access token). Чтобы получить его, можно использовать авторизацию, встроенную в `vkontakte_api`, либо положиться на какой-то другой механизм (например, [OmniAuth](https://github.com/intridea/omniauth)). В последнем случае в результате авторизации будет получен токен, который нужно будет передать в `VkontakteApi::Client.new`.
|
79
79
|
|
80
|
-
Для работы с ВКонтакте API предусмотрено 3 типа авторизации: для сайтов, для клиентских приложений (мобильных либо десктопных, имеющих доступ к управлению браузером) и специальный тип авторизации серверов приложений для вызова административных методов без авторизации самого пользователя. Более подробно они описаны [тут](
|
80
|
+
Для работы с ВКонтакте API предусмотрено 3 типа авторизации: для сайтов, для клиентских приложений (мобильных либо десктопных, имеющих доступ к управлению браузером) и специальный тип авторизации серверов приложений для вызова административных методов без авторизации самого пользователя. Более подробно они описаны [тут](https://vk.com/dev/authentication); рассмотрим, как работать с ними средствами `vkontakte_api`.
|
81
81
|
|
82
82
|
Для авторизации необходимо задать параметры `app_id` (ID приложения), `app_secret` (защищенный ключ) и `redirect_uri` (адрес, куда пользователь будет направлен после предоставления прав приложению) в настройках `VkontakteApi.configure`. Более подробно о конфигурировании `vkontakte_api` см. далее в соответствующем разделе.
|
83
83
|
|
84
84
|
##### Сайт
|
85
85
|
|
86
|
-
Авторизация сайтов проходит в 2 шага. Сначала пользователь перенаправляется на страницу ВКонтакте для подтверждения запрошенных у него прав сайта на доступ к его данным. Со списком возможных прав можно ознакомиться [здесь](
|
86
|
+
Авторизация сайтов проходит в 2 шага. Сначала пользователь перенаправляется на страницу ВКонтакте для подтверждения запрошенных у него прав сайта на доступ к его данным. Со списком возможных прав можно ознакомиться [здесь](https://vk.com/dev/permissions). Допустим, нужно получить доступ к друзьям (`friends`) и фотографиям (`photos`) пользователя.
|
87
87
|
|
88
88
|
В соответствии с [рекомендациями](http://tools.ietf.org/html/draft-ietf-oauth-v2-30#section-10.12) в протоколе OAuth2 для защиты от [CSRF](http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B4%D0%B4%D0%B5%D0%BB%D0%BA%D0%B0_%D0%BC%D0%B5%D0%B6%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%B2%D1%8B%D1%85_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2), нужно передать параметр `state`, содержащий случайное значение.
|
89
89
|
|
@@ -92,7 +92,7 @@ session[:state] = Digest::MD5.hexdigest(rand.to_s)
|
|
92
92
|
redirect_to VkontakteApi.authorization_url(scope: [:notify, :friends, :photos], state: session[:state])
|
93
93
|
```
|
94
94
|
|
95
|
-
После подтверждения пользователь перенаправляется на указанный в настройках `redirect_uri`, причем в параметрах будет передан код, по которому можно получить токен доступа, а также переданный ранее `state`. Если `state` не совпадает с тем, который был использован при отправлении пользователя на ВКонтакте, то скорее всего это попытка CSRF-атаки
|
95
|
+
После подтверждения пользователь перенаправляется на указанный в настройках `redirect_uri`, причем в параметрах будет передан код, по которому можно получить токен доступа, а также переданный ранее `state`. Если `state` не совпадает с тем, который был использован при отправлении пользователя на ВКонтакте, то скорее всего это попытка CSRF-атаки — стоит отправить пользователя на повторную авторизацию.
|
96
96
|
|
97
97
|
``` ruby
|
98
98
|
redirect_to login_url, alert: 'Ошибка авторизации' if params[:state] != session[:state]
|
@@ -124,7 +124,7 @@ current_user.save
|
|
124
124
|
|
125
125
|
##### Клиентское приложение
|
126
126
|
|
127
|
-
Авторизация клиентского приложения несколько проще
|
127
|
+
Авторизация клиентского приложения несколько проще — не нужно получать токен отдельным запросом, он выдается сразу после редиректа пользователя.
|
128
128
|
|
129
129
|
``` ruby
|
130
130
|
# пользователь направляется на следующий урл
|
@@ -137,7 +137,7 @@ VkontakteApi.authorization_url(type: :client, scope: [:friends, :photos])
|
|
137
137
|
|
138
138
|
##### Сервер приложения
|
139
139
|
|
140
|
-
Последний тип авторизации
|
140
|
+
Последний тип авторизации — самый простой, т.к. не предполагает участия пользователя.
|
141
141
|
|
142
142
|
``` ruby
|
143
143
|
@vk = VkontakteApi.authorize(type: :app_server)
|
@@ -188,9 +188,9 @@ vk.friends.get(uid: 1, fields: [:first_name, :last_name, :photo])
|
|
188
188
|
# VkontakteApi::Error: VKontakte returned an error 7: 'Permission to perform this action is denied' after calling method 'friends.get' with parameters {"uid"=>"1", "fields"=>"first_name,last_name,photo"}.
|
189
189
|
```
|
190
190
|
|
191
|
-
Особый случай ошибки
|
191
|
+
Особый случай ошибки — 14: необходимо ввести код с captcha.
|
192
192
|
В этом случае можно получить параметры капчи методами
|
193
|
-
`VkontakteApi::Error#captcha_sid` и `VkontakteApi::Error#captcha_img`
|
193
|
+
`VkontakteApi::Error#captcha_sid` и `VkontakteApi::Error#captcha_img` — например,
|
194
194
|
[так](https://github.com/7even/vkontakte_api/issues/10#issuecomment-11666091).
|
195
195
|
|
196
196
|
### Логгирование
|
@@ -265,12 +265,12 @@ end
|
|
265
265
|
[любой другой адаптер](https://github.com/technoweenie/faraday/blob/master/lib/faraday/adapter.rb),
|
266
266
|
поддерживаемый `faraday`.
|
267
267
|
|
268
|
-
ВКонтакте [позволяет](
|
268
|
+
ВКонтакте [позволяет](https://vk.com/dev/api_requests)
|
269
269
|
использовать как `GET`-, так и `POST`-запросы при вызове методов API.
|
270
270
|
По умолчанию `vkontakte_api` использует `POST`, но в настройке `http_verb`
|
271
271
|
можно указать `:get`, чтобы совершать `GET`-запросы.
|
272
272
|
|
273
|
-
При необходимости можно указать параметры для faraday-соединения
|
273
|
+
При необходимости можно указать параметры для faraday-соединения — например,
|
274
274
|
параметры прокси-сервера или путь к SSL-сертификатам.
|
275
275
|
|
276
276
|
Чтобы при каждом вызове API-метода передавалась определенная версия API, можно
|
@@ -286,7 +286,7 @@ $ rails generate vkontakte_api:install
|
|
286
286
|
|
287
287
|
## JSON-парсер
|
288
288
|
|
289
|
-
`vkontakte_api` использует парсер [Oj](https://github.com/ohler55/oj)
|
289
|
+
`vkontakte_api` использует парсер [Oj](https://github.com/ohler55/oj) — это
|
290
290
|
единственный парсер, который не показал [ошибок](https://github.com/7even/vkontakte_api/issues/1)
|
291
291
|
при парсинге JSON, генерируемого ВКонтакте.
|
292
292
|
|
data/bin/rspec
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# This file was generated by Bundler.
|
4
|
+
#
|
5
|
+
# The application 'rspec' is installed as part of a gem, and
|
6
|
+
# this file is here to facilitate running it.
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'pathname'
|
10
|
+
ENV['BUNDLE_GEMFILE'] ||= Pathname.new(__FILE__).expand_path.join('../../Gemfile').to_s
|
11
|
+
|
12
|
+
require 'rubygems'
|
13
|
+
require 'bundler/setup'
|
14
|
+
|
15
|
+
load Gem.bin_path('rspec-core', 'rspec')
|
data/lib/vkontakte_api/client.rb
CHANGED
@@ -76,6 +76,16 @@ module VkontakteApi
|
|
76
76
|
end.keys
|
77
77
|
end
|
78
78
|
|
79
|
+
# Called without arguments it returns the `execute` namespace;
|
80
|
+
# called with arguments it calls the top-level `execute` API method.
|
81
|
+
def execute(*args)
|
82
|
+
if args.empty?
|
83
|
+
create_namespace(:execute)
|
84
|
+
else
|
85
|
+
call_method([:execute, *args])
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
79
89
|
# If the called method is a namespace, it creates and returns a new `VkontakteApi::Namespace` instance.
|
80
90
|
# Otherwise it creates a `VkontakteApi::Method` instance and calls it passing the arguments and a block.
|
81
91
|
def method_missing(*args, &block)
|
data/spec/integration_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -3,6 +3,10 @@ require 'pry'
|
|
3
3
|
require 'awesome_print'
|
4
4
|
require_relative './support/mechanized_authorization'
|
5
5
|
|
6
|
+
RSpec.configure do |config|
|
7
|
+
config.raise_errors_for_deprecations!
|
8
|
+
end
|
9
|
+
|
6
10
|
RSpec::Matchers.define :log_requests do
|
7
11
|
match do |logger|
|
8
12
|
logger.log_requests?
|
@@ -13,7 +13,7 @@ describe VkontakteApi::API do
|
|
13
13
|
end
|
14
14
|
end
|
15
15
|
end
|
16
|
-
subject.
|
16
|
+
allow(subject).to receive(:connection).and_return(@connection)
|
17
17
|
end
|
18
18
|
|
19
19
|
describe ".call" do
|
@@ -65,7 +65,7 @@ describe VkontakteApi::API do
|
|
65
65
|
describe ".connection" do
|
66
66
|
it "uses the :url parameter and VkontakteApi.faraday_options" do
|
67
67
|
faraday_options = double("Faraday options")
|
68
|
-
VkontakteApi.
|
68
|
+
allow(VkontakteApi).to receive(:faraday_options).and_return(faraday_options)
|
69
69
|
url = double("URL")
|
70
70
|
|
71
71
|
expect(Faraday).to receive(:new).with(url, faraday_options)
|
@@ -3,11 +3,11 @@ require 'spec_helper'
|
|
3
3
|
describe VkontakteApi::Authorization do
|
4
4
|
before(:each) do
|
5
5
|
@app_id = double("App id")
|
6
|
-
VkontakteApi.
|
6
|
+
allow(VkontakteApi).to receive(:app_id).and_return(@app_id)
|
7
7
|
@app_secret = double("App secret")
|
8
|
-
VkontakteApi.
|
8
|
+
allow(VkontakteApi).to receive(:app_secret).and_return(@app_secret)
|
9
9
|
@redirect_uri = double("Redirect uri")
|
10
|
-
VkontakteApi.
|
10
|
+
allow(VkontakteApi).to receive(:redirect_uri).and_return(@redirect_uri)
|
11
11
|
|
12
12
|
@url = double("Authorization url")
|
13
13
|
@token = double("Token")
|
@@ -17,18 +17,18 @@ describe VkontakteApi::Authorization do
|
|
17
17
|
@client_credentials = double("Client credentials strategy", get_token: @token)
|
18
18
|
|
19
19
|
@client = double("OAuth2::Client instance", auth_code: @auth_code, implicit: @implicit, client_credentials: @client_credentials)
|
20
|
-
OAuth2::Client.
|
20
|
+
allow(OAuth2::Client).to receive(:new).and_return(@client)
|
21
21
|
end
|
22
22
|
|
23
23
|
let(:auth) do
|
24
24
|
Object.new.tap do |object|
|
25
25
|
object.extend VkontakteApi::Authorization
|
26
26
|
end
|
27
|
-
end
|
27
|
+
end
|
28
28
|
|
29
29
|
describe "#authorization_url" do
|
30
30
|
before(:each) do
|
31
|
-
auth.
|
31
|
+
allow(auth).to receive(:client).and_return(@client)
|
32
32
|
end
|
33
33
|
|
34
34
|
context "with a site type" do
|
@@ -69,7 +69,7 @@ describe VkontakteApi::Authorization do
|
|
69
69
|
context "with a site type" do
|
70
70
|
before(:each) do
|
71
71
|
@code = double("Authorization code")
|
72
|
-
@auth_code.
|
72
|
+
allow(@auth_code).to receive(:get_token).and_return(@token)
|
73
73
|
end
|
74
74
|
|
75
75
|
it "gets the token" do
|
@@ -8,9 +8,9 @@ describe VkontakteApi::Client do
|
|
8
8
|
|
9
9
|
def oauth2_token(expires_at = Time.now)
|
10
10
|
token = double("Access token as an OAuth2::AccessToken").tap do |token|
|
11
|
-
token.
|
12
|
-
token.
|
13
|
-
token.
|
11
|
+
allow(token).to receive(:token).and_return(string_token)
|
12
|
+
allow(token).to receive(:params).and_return('user_id' => @user_id, 'email' => @email)
|
13
|
+
allow(token).to receive(:expires_at).and_return(expires_at)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
@@ -98,7 +98,7 @@ describe VkontakteApi::Client do
|
|
98
98
|
describe "#scope" do
|
99
99
|
let(:client) do
|
100
100
|
VkontakteApi::Client.new.tap do |client|
|
101
|
-
client.
|
101
|
+
allow(client).to receive(:get_user_settings).and_return(865310)
|
102
102
|
end
|
103
103
|
end
|
104
104
|
let(:scope) { client.scope }
|
@@ -136,7 +136,7 @@ describe VkontakteApi::Client do
|
|
136
136
|
before(:each) do
|
137
137
|
@result = double("Result")
|
138
138
|
@method = double("Method", call: @result)
|
139
|
-
VkontakteApi::Method.
|
139
|
+
allow(VkontakteApi::Method).to receive(:new).and_return(@method)
|
140
140
|
end
|
141
141
|
|
142
142
|
it "creates a Method instance" do
|
@@ -150,4 +150,23 @@ describe VkontakteApi::Client do
|
|
150
150
|
end
|
151
151
|
end
|
152
152
|
end
|
153
|
+
|
154
|
+
describe '#execute' do
|
155
|
+
let(:client) { VkontakteApi::Client.new('token') }
|
156
|
+
|
157
|
+
context 'called without arguments' do
|
158
|
+
it 'returns an :execute namespace' do
|
159
|
+
expect(client.execute).to be_a(VkontakteApi::Namespace)
|
160
|
+
expect(client.execute.name).to eq('execute')
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
context 'called with arguments' do
|
165
|
+
it 'calls the :execute method' do
|
166
|
+
code = 'return "Hello World!";'
|
167
|
+
expect(client).to receive(:call_method).with([:execute, code: code])
|
168
|
+
client.execute(code: code)
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
153
172
|
end
|
@@ -8,13 +8,13 @@ describe VkontakteApi::Method do
|
|
8
8
|
|
9
9
|
let(:method) do
|
10
10
|
VkontakteApi::Method.new('some_name').tap do |method|
|
11
|
-
method.
|
12
|
-
method.
|
11
|
+
allow(method).to receive(:full_name).and_return(full_name)
|
12
|
+
allow(method).to receive(:token).and_return(token)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
16
|
before(:each) do
|
17
|
-
VkontakteApi::Result.
|
17
|
+
allow(VkontakteApi::Result).to receive(:process)
|
18
18
|
end
|
19
19
|
|
20
20
|
it "calls API.call with full name, args and token" do
|
@@ -24,9 +24,9 @@ describe VkontakteApi::Method do
|
|
24
24
|
|
25
25
|
it "sends the response to Result.process" do
|
26
26
|
response = double("VK response")
|
27
|
-
VkontakteApi::API.
|
27
|
+
allow(VkontakteApi::API).to receive(:call).and_return(response)
|
28
28
|
type = double("Type")
|
29
|
-
method.
|
29
|
+
allow(method).to receive(:type).and_return(type)
|
30
30
|
|
31
31
|
expect(VkontakteApi::Result).to receive(:process).with(response, type, nil)
|
32
32
|
method.call(args)
|
@@ -15,7 +15,7 @@ describe VkontakteApi::Resolver do
|
|
15
15
|
before(:each) do
|
16
16
|
@resolver = @class.new('trololo')
|
17
17
|
@token = double("Token")
|
18
|
-
@resolver.
|
18
|
+
allow(@resolver).to receive(:token).and_return(@token)
|
19
19
|
end
|
20
20
|
|
21
21
|
it "gets into #method_missing" do
|
@@ -30,7 +30,7 @@ describe VkontakteApi::Resolver do
|
|
30
30
|
@name = double("Name")
|
31
31
|
@resolver = @class.new(@name)
|
32
32
|
@token = double("Token")
|
33
|
-
@resolver.
|
33
|
+
allow(@resolver).to receive(:token).and_return(@token)
|
34
34
|
end
|
35
35
|
|
36
36
|
let(:resolver) { @resolver.resolver }
|
@@ -6,7 +6,7 @@ describe VkontakteApi::Result do
|
|
6
6
|
let(:result) { double("Result") }
|
7
7
|
|
8
8
|
before(:each) do
|
9
|
-
subject.
|
9
|
+
allow(subject).to receive(:extract_result).and_return(result)
|
10
10
|
end
|
11
11
|
|
12
12
|
it "calls .extract_result passing it the response" do
|
@@ -19,7 +19,7 @@ describe VkontakteApi::Result do
|
|
19
19
|
let(:typecasted_value) { double("Typecasted value") }
|
20
20
|
|
21
21
|
before(:each) do
|
22
|
-
subject.
|
22
|
+
allow(subject).to receive(:typecast).and_return(typecasted_value)
|
23
23
|
end
|
24
24
|
|
25
25
|
it "returns #typecast-ed value" do
|
@@ -44,7 +44,7 @@ describe VkontakteApi::Result do
|
|
44
44
|
let(:enumerable_result) { [element1, element2] }
|
45
45
|
|
46
46
|
before(:each) do
|
47
|
-
subject.
|
47
|
+
allow(subject).to receive(:extract_result).and_return(enumerable_result)
|
48
48
|
end
|
49
49
|
|
50
50
|
it "returns the untouched value" do
|
@@ -14,8 +14,8 @@ describe VkontakteApi::Uploading do
|
|
14
14
|
let(:connection) { double("Faraday connection", post: response) }
|
15
15
|
|
16
16
|
before(:each) do
|
17
|
-
Faraday::UploadIO.
|
18
|
-
VkontakteApi::API.
|
17
|
+
allow(Faraday::UploadIO).to receive(:new).and_return(upload_io)
|
18
|
+
allow(VkontakteApi::API).to receive(:connection).and_return(connection)
|
19
19
|
end
|
20
20
|
|
21
21
|
context "without a :url param" do
|
@@ -8,7 +8,7 @@ describe VkontakteApi::Utils do
|
|
8
8
|
let(:flat_arg2) { double("Flattened second argument") }
|
9
9
|
|
10
10
|
before(:each) do
|
11
|
-
VkontakteApi::Utils.
|
11
|
+
allow(VkontakteApi::Utils).to receive(:flatten_argument) do |arg|
|
12
12
|
case arg
|
13
13
|
when arg1 then flat_arg1
|
14
14
|
when arg2 then flat_arg2
|
data/vkontakte_api.gemspec
CHANGED
@@ -14,7 +14,6 @@ Gem::Specification.new do |s|
|
|
14
14
|
|
15
15
|
s.files = `git ls-files`.split("\n")
|
16
16
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
18
17
|
s.require_paths = ['lib']
|
19
18
|
|
20
19
|
s.required_ruby_version = '>= 1.9.2'
|
@@ -22,11 +21,11 @@ Gem::Specification.new do |s|
|
|
22
21
|
s.add_runtime_dependency 'faraday', '~> 0.9.0'
|
23
22
|
s.add_runtime_dependency 'faraday_middleware', '~> 0.9.1'
|
24
23
|
s.add_runtime_dependency 'faraday_middleware-parse_oj', '~> 0.3'
|
25
|
-
s.add_runtime_dependency 'oauth2', '
|
26
|
-
s.add_runtime_dependency 'hashie', '
|
24
|
+
s.add_runtime_dependency 'oauth2', '>= 0.8'
|
25
|
+
s.add_runtime_dependency 'hashie', '>= 2.0'
|
27
26
|
|
28
27
|
s.add_development_dependency 'rake'
|
29
|
-
s.add_development_dependency 'rspec', '~>
|
28
|
+
s.add_development_dependency 'rspec', '~> 3.0'
|
30
29
|
s.add_development_dependency 'mechanize'
|
31
30
|
s.add_development_dependency 'guard-rspec'
|
32
31
|
s.add_development_dependency 'rb-fsevent', '~> 0.9.1'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vkontakte_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vsevolod Romashov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-10-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -56,28 +56,28 @@ dependencies:
|
|
56
56
|
name: oauth2
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0.8'
|
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
68
|
version: '0.8'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: hashie
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '2.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: '2.0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
@@ -100,14 +100,14 @@ dependencies:
|
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
103
|
+
version: '3.0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
110
|
+
version: '3.0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: mechanize
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -253,6 +253,7 @@ files:
|
|
253
253
|
- MIT-LICENSE
|
254
254
|
- README.md
|
255
255
|
- Rakefile
|
256
|
+
- bin/rspec
|
256
257
|
- lib/generators/vkontakte_api/install/USAGE
|
257
258
|
- lib/generators/vkontakte_api/install/install_generator.rb
|
258
259
|
- lib/generators/vkontakte_api/install/templates/initializer.rb
|