smart_vk_api 1.0.0 → 1.1.0

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: e42c24b1492eecfa6a9c1f2fb33054b0ae6bbe8f
4
- data.tar.gz: 821f6c14fcee0bea3f505376563e0b31057817dd
3
+ metadata.gz: cc114237623563fcc0840b489143865529dc4353
4
+ data.tar.gz: 9d1c7c33d2a3da851e6d21db9d7245506b92dfc5
5
5
  SHA512:
6
- metadata.gz: c7e49fe118e49fb980b823f460e7593b1e625aa53a845bdef82afe65b30a2bf3ce3ff3df0d16c7d29e0cd4abdbb570d196c9c49f8795d10992909954d89f55e4
7
- data.tar.gz: b47a63e748a1083a4bd54b8428e20e3663f11a9020a558b23e3eaf8dac813304ae6d744ea05f12133086f0893073ba5dd2bd68249a13a77a61af1ae92d8446b4
6
+ metadata.gz: 586a88970465808274559974e6a2d267caa5e8d980676451075a19ebab55688475cbd001e06f83e7b0b0728a46e64349dc5528fd04763c2efb10f21610be9aef
7
+ data.tar.gz: 50b3e36b5f5a8c420274b1927962dbb378451757f5eaeb5a32a862a5767ca64fd3d30463dd5e25a810e68872fd61ecfd107bc8caa19a663a7fb9e03a4e0ddb10
data/CHANGELOG.md ADDED
@@ -0,0 +1,53 @@
1
+
2
+ ## Версия 1.1.0
3
+
4
+ * Добавлена возможность вызывать методы API, используя обычные методы Ruby.
5
+
6
+ Пример:
7
+
8
+ ```ruby
9
+ vk = SmartVkApi::VK.new
10
+ vk.users.get
11
+ ```
12
+
13
+ * Добавлена возможность задать конфигурацию для обращений к API.
14
+
15
+ Пример:
16
+
17
+ ```ruby
18
+ SmartVkApi.configure do |conf|
19
+ conf.access_token = '7a6fa4dff77a228eeda56603'
20
+ end
21
+ ```
22
+
23
+ При этом токены, которые записаны в конфиг, будут автоматически использованы, если в методы не передано другого значения:
24
+
25
+ ```ruby
26
+ SmartVkApi.configure do |conf|
27
+ conf.access_token = '7a6fa4dff77a228eeda56603'
28
+ end
29
+ vk = SmartVkApi::VK.new
30
+ vk.access_token # => 7a6fa4dff77a228eeda56603
31
+ ```
32
+
33
+ Но можно также передать более специфичный конфиг, если это требуется:
34
+
35
+ ```ruby
36
+ SmartVkApi.configure do |conf|
37
+ conf.access_token = '7a6fa4dff77a228eeda56603'
38
+ end
39
+ config = SmartVkApi::Configuration.new
40
+ config.access_token = '36fb063aa7f0ad997b5f96e91fd362857b'
41
+ vk = SmartVkApi::VK.new(config)
42
+ vk.access_token # => 36fb063aa7f0ad997b5f96e91fd362857b
43
+ ```
44
+
45
+ * Добавлена возможность прямого вызова API через метод модуля:
46
+
47
+ Пример:
48
+
49
+ ```ruby
50
+ SmartVkApi.call('users.get', :user_ids => 'kimrgrey') # [{:uid=>3710412, :first_name=>"Сергей", :last_name=>"Цветков", :hidden=>1}]
51
+ ```
52
+
53
+ Чтобы посомотреть предыдущие изменения, пожалуйста, откройте соответствующий релиз - [v1.0.0](https://github.com/kimrgrey/smart_vk_api/tree/v1.0.0)
data/README.md CHANGED
@@ -1,5 +1,6 @@
1
1
  # SmartVkApi
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/smart_vk_api.svg)](http://badge.fury.io/rb/smart_vk_api)
3
4
  [![Build Status](https://travis-ci.org/kimrgrey/smart_vk_api.svg)](https://travis-ci.org/kimrgrey/smart_vk_api)
4
5
  [![Code Climate](https://codeclimate.com/github/kimrgrey/smart_vk_api/badges/gpa.svg)](https://codeclimate.com/github/kimrgrey/smart_vk_api)
5
6
 
@@ -1,7 +1,6 @@
1
1
  module SmartVkApi
2
2
  module Call
3
- def call(method_name, *options)
4
- params = options.last if options && options.last.is_a?(Hash)
3
+ def call(method_name, params = {})
5
4
  http(method_name, params) do |response|
6
5
  raise SmartVkApi::MethodCallError, response.body unless response.is_a?(Net::HTTPSuccess)
7
6
  json = response.body
@@ -24,6 +23,10 @@ module SmartVkApi
24
23
  if method_name.nil? || method_name.empty?
25
24
  raise ArgumentError, 'Method name could not be empty'
26
25
  end
26
+ if access_token && (params.nil? || !params.key?(:access_token))
27
+ params ||= {}
28
+ params[:access_token] = access_token
29
+ end
27
30
  url = SmartVkApi::Constants::METHOD_CALL_URL + "/#{method_name}"
28
31
  url += "?#{URI.encode_www_form(params)}" if params && params.any?
29
32
  url
@@ -0,0 +1,7 @@
1
+ module SmartVkApi
2
+ class Configuration
3
+ attr_accessor :app_id
4
+ attr_accessor :app_token
5
+ attr_accessor :access_token
6
+ end
7
+ end
@@ -2,5 +2,6 @@ module SmartVkApi
2
2
  module Constants
3
3
  API_URL = "https://api.vk.com".freeze
4
4
  METHOD_CALL_URL = "#{SmartVkApi::Constants::API_URL}/method".freeze
5
+ METHOD_NAME_REGEXP = /\A([a-z,A-Z]+)\.([a-z,A-Z]+)\Z/
5
6
  end
6
7
  end
@@ -0,0 +1,29 @@
1
+ module SmartVkApi
2
+ module Methods
3
+ def method_missing(method_name, *arguments, &block)
4
+ Proxy.new(self, method_name)
5
+ end
6
+
7
+ def respond_to?(method_name, include_private = false)
8
+ true # we should respond to any method using Proxy
9
+ end
10
+
11
+ class Proxy
12
+ attr_accessor :vk
13
+ attr_accessor :scope
14
+
15
+ def initialize(vk, scope)
16
+ self.vk = vk
17
+ self.scope = scope
18
+ end
19
+
20
+ def method_missing(method_name, *arguments, &block)
21
+ vk.call("#{scope}.#{method_name}", arguments.first)
22
+ end
23
+
24
+ def respond_to?(method_name, include_private = false)
25
+ true # we should respond to any method using Proxy
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,3 +1,3 @@
1
1
  module SmartVkApi
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
data/lib/smart_vk_api.rb CHANGED
@@ -4,10 +4,54 @@ require 'json'
4
4
  module SmartVkApi
5
5
  autoload :Constants, "smart_vk_api/constants"
6
6
  autoload :Call, "smart_vk_api/call"
7
+ autoload :Methods, "smart_vk_api/methods"
8
+ autoload :Configuration, "smart_vk_api/configuration"
7
9
 
8
10
  class MethodCallError < StandardError; end;
9
11
 
10
12
  class VK
11
13
  include SmartVkApi::Call
14
+ include SmartVkApi::Methods
15
+
16
+ def initialize(configuration = nil)
17
+ @configuration = configuration
18
+ end
19
+
20
+ def configuration
21
+ @configuration || SmartVkApi.configuration
22
+ end
23
+
24
+ def access_token
25
+ configuration.access_token unless configuration.nil?
26
+ end
27
+
28
+ def app_id
29
+ configuration.app_id unless configuration.nil?
30
+ end
31
+
32
+ def app_token
33
+ configuration.app_token unless configuration.nil?
34
+ end
35
+ end
36
+
37
+ class << self
38
+ attr_accessor :configuration
39
+ end
40
+
41
+ def self.reset_configuration
42
+ self.configuration = nil
43
+ end
44
+
45
+ def self.configure
46
+ self.configuration ||= SmartVkApi::Configuration.new
47
+ yield(configuration)
48
+ end
49
+
50
+ def self.vk
51
+ SmartVkApi::VK.new
52
+ end
53
+
54
+ def self.call(method_name, params = {})
55
+ vk.call(method_name, params)
12
56
  end
13
57
  end
data/spec/call_spec.rb CHANGED
@@ -8,37 +8,63 @@ describe SmartVkApi::VK do
8
8
  let (:vk) { SmartVkApi::VK.new }
9
9
  let (:default_response_body) { {:response => {:test => 'yes'} } }
10
10
 
11
- describe '#method_url' do
12
- it 'should raise ArgumentError when method name is nil' do
13
- expect{ vk.method_url(nil) }.to raise_error(ArgumentError, 'Method name could not be empty')
14
- end
15
-
16
- it 'should raise ArgumentError when method name is empty string' do
17
- expect{ vk.method_url('') }.to raise_error(ArgumentError, 'Method name could not be empty')
18
- end
19
-
20
- it 'should take care of method name' do
21
- expect(vk.method_url('scope.method')).to eq('https://api.vk.com/method/scope.method')
11
+ before do
12
+ SmartVkApi.reset_configuration
13
+ end
14
+
15
+ describe '#method_url' do
16
+ context 'without access token' do
17
+ it 'should raise ArgumentError when method name is nil' do
18
+ expect{ vk.method_url(nil) }.to raise_error(ArgumentError, 'Method name could not be empty')
19
+ end
20
+
21
+ it 'should raise ArgumentError when method name is empty string' do
22
+ expect{ vk.method_url('') }.to raise_error(ArgumentError, 'Method name could not be empty')
23
+ end
24
+
25
+ it 'should take care of method name' do
26
+ expect(vk.method_url('users.get')).to eq('https://api.vk.com/method/users.get')
27
+ end
28
+
29
+ it 'should take care of parameters' do
30
+ expect(vk.method_url('users.get', {:aaa => :bbb, :user_ids => :kimrgrey})).to eq('https://api.vk.com/method/users.get?aaa=bbb&user_ids=kimrgrey')
31
+ end
22
32
  end
23
33
 
24
- it 'should take care of parameters' do
25
- expect(vk.method_url('scope.method', {:aaa => :bbb, :xxx => :yyy})).to eq('https://api.vk.com/method/scope.method?aaa=bbb&xxx=yyy')
34
+ context 'with access token' do
35
+ it 'should add access token when no parameters given' do
36
+ expect(vk.method_url('users.get', :access_token => '7a6fa4dff77a228eeda56603')).to eq('https://api.vk.com/method/users.get?access_token=7a6fa4dff77a228eeda56603')
37
+ end
38
+
39
+ it 'should use access token from configuration by default' do
40
+ SmartVkApi.configure do |conf|
41
+ conf.access_token = '7a6fa4dff77a228eeda56603'
42
+ end
43
+ expect(vk.method_url('users.get')).to eq('https://api.vk.com/method/users.get?access_token=7a6fa4dff77a228eeda56603')
44
+ end
45
+
46
+ it 'should use specified access token if it was given' do
47
+ SmartVkApi.configure do |conf|
48
+ conf.access_token = '7a6fa4dff77a228eeda56603'
49
+ end
50
+ expect(vk.method_url('users.get', :access_token => '7a6fa4dff77a228eeda56604')).to eq('https://api.vk.com/method/users.get?access_token=7a6fa4dff77a228eeda56604')
51
+ end
26
52
  end
27
53
  end
28
54
 
29
55
  describe '#http' do
30
56
  it 'should return http connection if block was not given' do
31
- expect( vk.http('scope.method')).to be_a(Net::HTTP)
57
+ expect( vk.http('users.get')).to be_a(Net::HTTP)
32
58
  end
33
59
 
34
60
  it 'should return result of block call if block was given' do
35
- stub_request(:get, "https://api.vk.com/method/scope.method").to_return(:status => 200, :body => default_response_body.to_json)
36
- expect( vk.http('scope.method') { |_| 'result of block' }).to eq('result of block')
61
+ stub_request(:get, "https://api.vk.com/method/users.get").to_return(:status => 200, :body => default_response_body.to_json)
62
+ expect( vk.http('users.get') { |_| 'result of block' }).to eq('result of block')
37
63
  end
38
64
 
39
65
  it 'should pass http connection as parameter into block' do
40
- stub_request(:get, "https://api.vk.com/method/scope.method").to_return(:status => 200, :body => default_response_body.to_json)
41
- expect(vk.http('scope.method') { |http| http }).to be_a(Net::HTTPResponse)
66
+ stub_request(:get, "https://api.vk.com/method/users.get").to_return(:status => 200, :body => default_response_body.to_json)
67
+ expect(vk.http('users.get') { |http| http }).to be_a(Net::HTTPResponse)
42
68
  end
43
69
 
44
70
  it 'should setup appropriate headers' do
@@ -46,54 +72,54 @@ describe SmartVkApi::VK do
46
72
  'Content-Type' =>'application/json',
47
73
  'Content-Type' =>'application/json'
48
74
  }
49
- stub_request(:get, "https://api.vk.com/method/scope.method").to_return(:status => 200, :body => default_response_body.to_json)
50
- vk.call('scope.method')
51
- expect(WebMock).to have_requested(:get, "https://api.vk.com/method/scope.method").with(:headers => headers)
75
+ stub_request(:get, "https://api.vk.com/method/users.get").to_return(:status => 200, :body => default_response_body.to_json)
76
+ vk.call('users.get')
77
+ expect(WebMock).to have_requested(:get, "https://api.vk.com/method/users.get").with(:headers => headers)
52
78
  end
53
79
  end
54
80
 
55
81
  describe '#call' do
56
82
  it 'should send request to appropriate url according to method name' do
57
- stub_request(:get, "https://api.vk.com/method/scope.method").to_return(:status => 200, :body => default_response_body.to_json)
58
- vk.call('scope.method')
59
- expect(WebMock).to have_requested(:get, "https://api.vk.com/method/scope.method")
83
+ stub_request(:get, "https://api.vk.com/method/users.get").to_return(:status => 200, :body => default_response_body.to_json)
84
+ vk.call('users.get')
85
+ expect(WebMock).to have_requested(:get, "https://api.vk.com/method/users.get")
60
86
  end
61
87
 
62
88
  it 'should send request to appropriate url according params' do
63
- stub_request(:get, "https://api.vk.com/method/scope.method?xxx=yyy").to_return(:status => 200, :body => default_response_body.to_json)
64
- vk.call('scope.method', {:xxx => 'yyy'})
65
- expect(WebMock).to have_requested(:get, "https://api.vk.com/method/scope.method?xxx=yyy")
89
+ stub_request(:get, "https://api.vk.com/method/users.get?user_ids=kimrgrey").to_return(:status => 200, :body => default_response_body.to_json)
90
+ vk.call('users.get', {:user_ids => 'kimrgrey'})
91
+ expect(WebMock).to have_requested(:get, "https://api.vk.com/method/users.get?user_ids=kimrgrey")
66
92
  end
67
93
 
68
94
  it 'should return raise MethodCallError if body of response is nil' do
69
- stub_request(:get, "https://api.vk.com/method/scope.method").to_return(:status => 200, :body => nil)
70
- expect { vk.call('scope.method') }.to raise_error(SmartVkApi::MethodCallError, 'Response could not be empty')
95
+ stub_request(:get, "https://api.vk.com/method/users.get").to_return(:status => 200, :body => nil)
96
+ expect { vk.call('users.get') }.to raise_error(SmartVkApi::MethodCallError, 'Response could not be empty')
71
97
  end
72
98
 
73
99
  it 'should return raise MethodCallError if body of response is empty string' do
74
- stub_request(:get, "https://api.vk.com/method/scope.method").to_return(:status => 200, :body => "")
75
- expect { vk.call('scope.method') }.to raise_error(SmartVkApi::MethodCallError, 'Response could not be empty')
100
+ stub_request(:get, "https://api.vk.com/method/users.get").to_return(:status => 200, :body => "")
101
+ expect { vk.call('users.get') }.to raise_error(SmartVkApi::MethodCallError, 'Response could not be empty')
76
102
  end
77
103
 
78
104
  it 'should return raise MethodCallError if body of response has no key :response' do
79
- stub_request(:get, "https://api.vk.com/method/scope.method").to_return(:status => 200, :body => { :bad => :response }.to_json)
80
- expect { vk.call('scope.method') }.to raise_error(SmartVkApi::MethodCallError, 'Response should include key named :response')
105
+ stub_request(:get, "https://api.vk.com/method/users.get").to_return(:status => 200, :body => { :bad => :response }.to_json)
106
+ expect { vk.call('users.get') }.to raise_error(SmartVkApi::MethodCallError, 'Response should include key named :response')
81
107
  end
82
108
 
83
109
  it 'should raise MethodCallError error in case of internal server error' do
84
- stub_request(:get, "https://api.vk.com/method/scope.method").to_return(:status => 500, :body => 'Internal Server Error')
85
- expect { vk.call('scope.method') }.to raise_error(SmartVkApi::MethodCallError, 'Internal Server Error')
110
+ stub_request(:get, "https://api.vk.com/method/users.get").to_return(:status => 500, :body => 'Internal Server Error')
111
+ expect { vk.call('users.get') }.to raise_error(SmartVkApi::MethodCallError, 'Internal Server Error')
86
112
  end
87
113
 
88
114
  it 'should raise MethodCallError in case of method call error' do
89
115
  response = { :error => { :error_code => 113, :error_msg => 'Invalid user id' } }
90
- stub_request(:get, "https://api.vk.com/method/scope.method").to_return(:status => 200, :body => response.to_json)
91
- expect { vk.call('scope.method') }.to raise_error(SmartVkApi::MethodCallError, response.to_json)
116
+ stub_request(:get, "https://api.vk.com/method/users.get").to_return(:status => 200, :body => response.to_json)
117
+ expect { vk.call('users.get') }.to raise_error(SmartVkApi::MethodCallError, response.to_json)
92
118
  end
93
119
 
94
120
  it 'should return value of :response key of returned json' do
95
- stub_request(:get, "https://api.vk.com/method/scope.method").to_return(:status => 200, :body => default_response_body.to_json)
96
- expect(vk.call('scope.method')).to eq(default_response_body[:response])
121
+ stub_request(:get, "https://api.vk.com/method/users.get").to_return(:status => 200, :body => default_response_body.to_json)
122
+ expect(vk.call('users.get')).to eq(default_response_body[:response])
97
123
  end
98
124
  end
99
125
  end
@@ -0,0 +1,69 @@
1
+ require 'spec_helper'
2
+
3
+ describe SmartVkApi::VK do
4
+ it { is_expected.to respond_to(:users, :wall, :photos, :friends, :audio, :groups) }
5
+
6
+ before do
7
+ SmartVkApi.reset_configuration
8
+ end
9
+
10
+ describe 'methods proxy' do
11
+ let (:vk) { SmartVkApi::VK.new }
12
+ let (:default_response_body) { {:response => {:test => 'yes'} } }
13
+
14
+ it 'should allow to call API methods using scope.method notation' do
15
+ expect(vk.users).to respond_to(:get, :search, :report)
16
+ end
17
+
18
+ it 'should perform API request on method call' do
19
+ stub_request(:get, "https://api.vk.com/method/users.get").to_return(:status => 200, :body => default_response_body.to_json)
20
+ vk.users.get
21
+ expect(WebMock).to have_requested(:get, "https://api.vk.com/method/users.get")
22
+ end
23
+
24
+ it 'should pass parameters to API request' do
25
+ stub_request(:get, "https://api.vk.com/method/users.get?user_ids=kimrgrey").to_return(:status => 200, :body => default_response_body.to_json)
26
+ vk.users.get({:user_ids => "kimrgrey"})
27
+ expect(WebMock).to have_requested(:get, "https://api.vk.com/method/users.get?user_ids=kimrgrey")
28
+ end
29
+ end
30
+
31
+ describe 'configuration' do
32
+ it { is_expected.to respond_to(:configuration) }
33
+
34
+ before do
35
+ SmartVkApi.configure do |conf|
36
+ conf.app_id = '0000000'
37
+ conf.app_token = '7a6fa4dff77a228eeda56603'
38
+ conf.access_token = '7a6fa4dff77a228eeda220349'
39
+ end
40
+ end
41
+
42
+ it 'should use global configuration by default' do
43
+ vk = SmartVkApi::VK.new
44
+ expect(vk.configuration).to eq(SmartVkApi.configuration)
45
+ end
46
+
47
+ it 'should provide direct access to configuration fields' do
48
+ vk = SmartVkApi::VK.new
49
+ expect(vk.app_id).to eq('0000000')
50
+ expect(vk.app_token).to eq('7a6fa4dff77a228eeda56603')
51
+ expect(vk.access_token).to eq('7a6fa4dff77a228eeda220349')
52
+ end
53
+
54
+ it 'should be ready that configuration will be nil' do
55
+ SmartVkApi.reset_configuration
56
+ vk = SmartVkApi::VK.new
57
+ expect(vk.configuration).to be nil
58
+ expect(vk.app_id).to be nil
59
+ expect(vk.app_token).to be nil
60
+ expect(vk.access_token).to be nil
61
+ end
62
+
63
+ it 'should use specific configuration if is was given' do
64
+ config = SmartVkApi::Configuration.new
65
+ vk = SmartVkApi::VK.new(config)
66
+ expect(vk.configuration).to eq(config)
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ describe SmartVkApi do
4
+
5
+ describe 'call' do
6
+ it { is_expected.to respond_to(:vk) }
7
+ it { is_expected.to respond_to(:call) }
8
+
9
+ it 'should delegate call to VK instance' do
10
+ vk = SmartVkApi.vk
11
+ allow(SmartVkApi).to receive(:vk) { vk }
12
+ expect(vk).to receive(:call)
13
+ SmartVkApi.call('users.get', {:user_ids => 'kimrgrey'})
14
+ end
15
+ end
16
+
17
+ describe 'configuration' do
18
+ it { is_expected.to respond_to(:configure) }
19
+
20
+ before do
21
+ SmartVkApi.configure do |conf|
22
+ conf.app_id = '0000000'
23
+ conf.app_token = '7a6fa4dff77a228eeda56603'
24
+ end
25
+ end
26
+
27
+ it 'should allow to reset configuration' do
28
+ SmartVkApi.reset_configuration
29
+ expect(SmartVkApi.configuration).to be nil
30
+ end
31
+
32
+ it 'should allow to read global configuration' do
33
+ expect(SmartVkApi.configuration.app_id).to eq('0000000')
34
+ expect(SmartVkApi.configuration.app_token).to eq('7a6fa4dff77a228eeda56603')
35
+ end
36
+ end
37
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smart_vk_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergey Tsvetkov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-26 00:00:00.000000000 Z
11
+ date: 2015-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -76,16 +76,21 @@ files:
76
76
  - ".gitignore"
77
77
  - ".rspec"
78
78
  - ".travis.yml"
79
+ - CHANGELOG.md
79
80
  - Gemfile
80
81
  - LICENSE.txt
81
82
  - README.md
82
83
  - Rakefile
83
84
  - lib/smart_vk_api.rb
84
85
  - lib/smart_vk_api/call.rb
86
+ - lib/smart_vk_api/configuration.rb
85
87
  - lib/smart_vk_api/constants.rb
88
+ - lib/smart_vk_api/methods.rb
86
89
  - lib/smart_vk_api/version.rb
87
90
  - smart_vk_api.gemspec
88
91
  - spec/call_spec.rb
92
+ - spec/methods_spec.rb
93
+ - spec/smart_vk_api_spec.rb
89
94
  - spec/spec_helper.rb
90
95
  homepage: https://github.com/kimrgrey/smart_vk_api
91
96
  licenses:
@@ -113,4 +118,6 @@ specification_version: 4
113
118
  summary: Small, thin and fast client for VK API
114
119
  test_files:
115
120
  - spec/call_spec.rb
121
+ - spec/methods_spec.rb
122
+ - spec/smart_vk_api_spec.rb
116
123
  - spec/spec_helper.rb