vkontakte_api 1.4 → 1.4.2
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 +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 [](http://travis-ci.org/7even/vkontakte_api) [](http://badge.fury.io/rb/vkontakte_api) [](https://gemnasium.com/7even/vkontakte_api) [](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
|