vkontakte_api 0.1 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -2,3 +2,4 @@
2
2
  .bundle
3
3
  Gemfile.lock
4
4
  pkg/*
5
+ .yardoc/*
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ rvm:
2
+ - 1.8.7
3
+ - 1.9.2
4
+ - 1.9.3
data/.yardopts ADDED
@@ -0,0 +1,3 @@
1
+ --files README.md,README.ru.md
2
+ --markup markdown
3
+ --markup-provider redcarpet
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # vkontakte_api
1
+ # vkontakte_api [![Build Status](https://secure.travis-ci.org/7even/vkontakte_api.png)](http://travis-ci.org/7even/vkontakte_api)
2
2
 
3
3
  `vkontakte_api` is a Ruby wrapper for VKontakte API. It allows you to call all API methods in the simplest possible way.
4
4
 
@@ -20,7 +20,13 @@ VkontakteApi.configure do |config|
20
20
  end
21
21
  ```
22
22
 
23
- All requests are sent via `VkontakteApi::Client` instance. To create one you just pass an access token.
23
+ All requests are sent via `VkontakteApi::Client` instance.
24
+
25
+ ``` ruby
26
+ @app = VkontakteApi::Client.new
27
+ ```
28
+
29
+ To create a client able to perform authorized requests you need to pass an access token.
24
30
 
25
31
  ``` ruby
26
32
  @app = VkontakteApi::Client.new('my_access_token')
@@ -47,18 +53,25 @@ Now for parameters. All method parameters are named, and you can pass them in a
47
53
 
48
54
  ``` ruby
49
55
  @app.friends.get(fields: 'uid,first_name,last_name')
50
- # => [
51
- {
52
- :uid => "1",
53
- :first_name => "Павел",
54
- :last_name => "Дуров"
55
- },
56
- {
57
- :uid => "6492",
58
- :first_name => "Andrew",
59
- :last_name => "Rogozov"
60
- }
61
- ]
56
+ # => [
57
+ # {
58
+ # :uid => "1",
59
+ # :first_name => "Павел",
60
+ # :last_name => "Дуров"
61
+ # },
62
+ # {
63
+ # :uid => "6492",
64
+ # :first_name => "Andrew",
65
+ # :last_name => "Rogozov"
66
+ # }
67
+ # ]
68
+ ```
69
+
70
+ If the parameter value is a comma-separated list, you can pass it as an array - it will be properly handled before the request:
71
+
72
+ ``` ruby
73
+ users_ids = [1, 6492]
74
+ @app.users.get(uids: users_ids) # => same output as above
62
75
  ```
63
76
 
64
77
  It's also worth noting that all returned hashes have symbolized keys.
@@ -83,10 +96,15 @@ If VKontakte returns an error in response, you get a `VkontakteApi::Error` excep
83
96
  # => VkontakteApi::Error: VKontakte returned an error 1: 'Unknown error occured' after calling method 'audio.getById' with parameters {}.
84
97
  ```
85
98
 
99
+ ## Changelog
100
+
101
+ * 0.1 Initial stable version
102
+ * 0.2 Array arguments support, cleaned up non-authorized requests, updated namespaces list, code documentation
103
+
86
104
  ## Roadmap
87
105
 
88
106
  * Authentication (getting the access_token from VK)
89
- * RDoc coverage
107
+ * Maybe Struct-like objects in result (instead of Hashes)
90
108
 
91
109
  ## Contributing
92
110
 
data/README.ru.md CHANGED
@@ -1,4 +1,4 @@
1
- # vkontakte_api
1
+ # vkontakte_api [![Build Status](https://secure.travis-ci.org/7even/vkontakte_api.png)](http://travis-ci.org/7even/vkontakte_api)
2
2
 
3
3
  `vkontakte_api` - ruby-обертка для API ВКонтакте. Она позволяет вызывать методы API настолько просто, насколько это возможно.
4
4
 
@@ -20,7 +20,13 @@ VkontakteApi.configure do |config|
20
20
  end
21
21
  ```
22
22
 
23
- Все запросы к API отправляются через объект класса `VkontakteApi::Client`. Чтобы создать его, нужно просто передать в конструктор токен доступа.
23
+ Все запросы к API отправляются через объект класса `VkontakteApi::Client`.
24
+
25
+ ``` ruby
26
+ @app = VkontakteApi::Client.new
27
+ ```
28
+
29
+ Чтобы создать клиент для отправки авторизованных запросов, нужно просто передать в конструктор токен доступа.
24
30
 
25
31
  ``` ruby
26
32
  @app = VkontakteApi::Client.new('my_access_token')
@@ -47,18 +53,25 @@ end
47
53
 
48
54
  ``` ruby
49
55
  @app.friends.get(fields: 'uid,first_name,last_name')
50
- # => [
51
- {
52
- :uid => "1",
53
- :first_name => "Павел",
54
- :last_name => "Дуров"
55
- },
56
- {
57
- :uid => "6492",
58
- :first_name => "Andrew",
59
- :last_name => "Rogozov"
60
- }
61
- ]
56
+ # => [
57
+ # {
58
+ # :uid => "1",
59
+ # :first_name => "Павел",
60
+ # :last_name => "Дуров"
61
+ # },
62
+ # {
63
+ # :uid => "6492",
64
+ # :first_name => "Andrew",
65
+ # :last_name => "Rogozov"
66
+ # }
67
+ # ]
68
+ ```
69
+
70
+ Если значение параметра - список, разделенный запятыми, то его можно передать в виде массива; он будет корректно обработан перед отправкой запроса:
71
+
72
+ ``` ruby
73
+ users_ids = [1, 6492]
74
+ @app.users.get(uids: users_ids) # => тот же вывод, что и выше
62
75
  ```
63
76
 
64
77
  Также следует заметить, что все возвращаемые хэши имеют символьные ключи.
@@ -83,10 +96,15 @@ end
83
96
  # => VkontakteApi::Error: VKontakte returned an error 1: 'Unknown error occured' after calling method 'audio.getById' with parameters {}.
84
97
  ```
85
98
 
99
+ ## Changelog
100
+
101
+ * 0.1 Первая стабильная версия
102
+ * 0.2 Поддержка аргументов-массивов, подчищенные неавторизованные запросы, обновленный список пространств имен, документация кода
103
+
86
104
  ## Планы
87
105
 
88
106
  * Авторизация (получение токена доступа с ВКонтакте)
89
- * Документация RDoc
107
+ * Возможно, Struct-подобные объекты в результатах запросов (вместо Hash)
90
108
 
91
109
  ## Участие в разработке
92
110
 
data/lib/vkontakte_api.rb CHANGED
@@ -11,6 +11,7 @@ require 'vkontakte_api/api'
11
11
  require 'vkontakte_api/resolver'
12
12
  require 'vkontakte_api/client'
13
13
 
14
+ # Main module.
14
15
  module VkontakteApi
15
16
  extend VkontakteApi::Configuration
16
17
  end
@@ -1,9 +1,17 @@
1
1
  module VkontakteApi
2
+ # A low-level module which handles the requests to VKontakte and returns their results as hashes with symbolized keys.
3
+ #
4
+ # It uses Faraday underneath the hood.
2
5
  module API
3
6
  BASE_HOST = 'https://api.vkontakte.ru'
4
7
  BASE_URL = '/method/'
5
8
 
6
9
  class << self
10
+ # Main interface method.
11
+ # @param [String] method_name A full name of the method.
12
+ # @param [Hash] args Method arguments including the access token.
13
+ # @return [Hash] The result of the method call.
14
+ # @raise [VkontakteApi::Error] raised when VKontakte returns an error.
7
15
  def call(method_name, args = {}, &block)
8
16
  connection = Faraday.new(:url => BASE_HOST) do |builder|
9
17
  builder.adapter(VkontakteApi.adapter)
@@ -19,9 +27,25 @@ module VkontakteApi
19
27
  response[:response]
20
28
  end
21
29
  end
30
+
22
31
  private
23
- def url_for(method_name, args)
24
- "#{BASE_URL}#{method_name}?#{args.to_param}"
32
+ def url_for(method_name, arguments)
33
+ flat_arguments = flatten_arguments(arguments)
34
+ "#{BASE_URL}#{method_name}?#{flat_arguments.to_param}"
35
+ end
36
+
37
+ def flatten_arguments(arguments)
38
+ arguments.inject({}) do |flat_args, (arg_name, arg_value)|
39
+ flat_args[arg_name] = if arg_value.respond_to?(:join)
40
+ # if value is an array, we join it with a comma
41
+ arg_value.join(',')
42
+ else
43
+ # otherwise leave it untouched
44
+ arg_value
45
+ end
46
+
47
+ flat_args
48
+ end
25
49
  end
26
50
  end
27
51
  end
@@ -1,15 +1,21 @@
1
1
  module VkontakteApi
2
+ # A class representing a connection to VK. It holds an access token.
2
3
  class Client
4
+ # An access token needed by authorized requests.
3
5
  attr_reader :access_token
4
6
 
7
+ # A new API client.
8
+ # @param [String] access_token An access token.
5
9
  def initialize(access_token = nil)
6
10
  @access_token = access_token
7
11
  end
8
12
 
13
+ # Is a `VkontakteApi::Client` instance authorized.
9
14
  def authorized?
10
15
  !@access_token.nil?
11
16
  end
12
17
 
18
+ # All unknown methods are delegated to a `VkontakteApi::Resolver` instance.
13
19
  def method_missing(method_name, *args, &block)
14
20
  args = args.first || {}
15
21
  VkontakteApi::Resolver.new(:access_token => @access_token).send(method_name, args, &block)
@@ -1,20 +1,32 @@
1
1
  module VkontakteApi
2
+ # General configuration module.
3
+ #
4
+ # It extends `VkontakteApi` so it's methods should be called from there.
2
5
  module Configuration
6
+ # Available options.
3
7
  OPTION_NAMES = [:app_id, :app_secret, :adapter]
4
8
 
5
9
  attr_accessor *OPTION_NAMES
6
10
 
11
+ # Default HTTP adapter.
7
12
  DEFAULT_ADAPTER = :net_http
8
13
 
14
+ # A global configuration set via the block.
15
+ # @example
16
+ # VkontakteApi.configure do |config|
17
+ # config.adapter = :net_http
18
+ # end
9
19
  def configure
10
20
  yield self if block_given?
11
21
  self
12
22
  end
13
23
 
24
+ # Reset all configuration options to defaults.
14
25
  def reset
15
26
  @adapter = DEFAULT_ADAPTER
16
27
  end
17
28
 
29
+ # When this module is extended, set all configuration options to their default values.
18
30
  def self.extended(base)
19
31
  base.reset
20
32
  end
@@ -1,5 +1,12 @@
1
1
  module VkontakteApi
2
+ # An exception raised by `VkontakteApi::API` when VKontakte returns an error.
2
3
  class Error < StandardError
4
+ # An error code.
5
+ # @return [Fixnum]
6
+ attr_reader :error_code
7
+
8
+ # An exception is initialized by the data from response hash.
9
+ # @param [Hash] data Error data.
3
10
  def initialize(data)
4
11
  @error_code = data.delete(:error_code)
5
12
  @error_msg = data.delete(:error_msg)
@@ -13,9 +20,12 @@ module VkontakteApi
13
20
  @params = request_params
14
21
  end
15
22
 
23
+ # A full description of the error.
24
+ # @return [String]
16
25
  def message
17
- "VKontakte returned an error #{@error_code}: \'#{@error_msg}\' after calling method \'#{@method_name}\' with parameters #{@params.inspect}."
26
+ "VKontakte returned an error #{@error_code}: '#{@error_msg}' after calling method '#{@method_name}' with parameters #{@params.inspect}."
18
27
  end
28
+
19
29
  private
20
30
  def parse_params(params)
21
31
  params.inject({}) do |memo, pair|
@@ -1,3 +1,4 @@
1
+ - users
1
2
  - friends
2
3
  - groups
3
4
  - photos
@@ -20,3 +21,5 @@
20
21
  - likes
21
22
  - status
22
23
  - polls
24
+ - account
25
+ - auth
@@ -1,27 +1,49 @@
1
1
  module VkontakteApi
2
+ # A class for resolving namespaced methods like `friends.get`.
3
+ #
4
+ # Methods are dispatched the following way:
5
+ #
6
+ # 1. API client gets an unknown method, creates a `VkontakteApi::Resolver` instance and sends it the method
7
+ # 2. if the method is a namespace (like `friends`), it creates another `VkontakteApi::Resolver` instance, namespaced this time; else go to 3
8
+ # 3. the `VkontakteApi::Resolver` instance gets the last method, inserts an access token into params and sends it to `VkontakteApi::API`
9
+ # 4. the result is typecasted and/or yielded (mapped) to a block depending on it's type
2
10
  class Resolver
11
+ # A pattern for names of methods with a boolean result.
3
12
  PREDICATE_NAMES = /^(is.*)\?$/
4
13
 
14
+ # A namespace of the current instance (if present).
5
15
  attr_reader :namespace
6
16
 
17
+ # A new resolver.
18
+ # @option options [String] :namespace A namespace.
19
+ # @option options [String] :access_token An access token.
7
20
  def initialize(options = {})
8
21
  @namespace = options.delete(:namespace)
9
22
  @access_token = options.delete(:access_token)
10
23
  end
11
24
 
25
+ # Main methods dispatch.
26
+ #
27
+ # If the called method is a namespace, it creates and returns a new `VkontakteApi::Resolver` instance.
28
+ # Otherwise it determines the full method name and result type, and sends everything to `VkontakteApi::API`.
29
+ #
30
+ # If the result is enumerable, each element is yielded to the block (or returned as is if called without a block).
31
+ # Non-enumerable results are typecasted (and yielded if the block is present).
32
+ #
33
+ # Called with a block, it returns the result of the block; called without a block it returns just the result.
34
+ # @todo Break this crap into several small methods.
12
35
  def method_missing(method_name, *args, &block)
13
36
  method_name = method_name.to_s
14
37
 
15
38
  if Resolver.namespaces.include?(method_name)
16
- # method with a two-level name called
39
+ # first level of method with a two-level name called
17
40
  Resolver.new(:namespace => method_name, :access_token => @access_token)
18
41
  else
19
- # method with a one-level name called
42
+ # method with a one-level name called (or second level of a two-level method)
20
43
  name, type = Resolver.vk_method_name(method_name, @namespace)
21
44
 
22
- # adding access_token to the args hash
23
45
  args = args.first || {}
24
- args.update(:access_token => @access_token)
46
+ args[:access_token] = @access_token unless @access_token.nil?
25
47
 
26
48
  result = API.call(name, args, &block)
27
49
 
@@ -37,6 +59,7 @@ module VkontakteApi
37
59
  end
38
60
  end
39
61
  end
62
+
40
63
  private
41
64
  def typecast(parameter, type)
42
65
  case type
@@ -49,17 +72,27 @@ module VkontakteApi
49
72
  end
50
73
 
51
74
  class << self
75
+ # An array of method namespaces.
76
+ # @return [Array]
52
77
  attr_reader :namespaces
53
78
 
54
- # load namespaces array from namespaces.yml
79
+ # Loading namespaces array from `namespaces.yml`.
80
+ # This method is called automatically at startup time.
55
81
  def load_namespaces
56
82
  filename = File.expand_path('../namespaces.yml', __FILE__)
57
83
  file = File.read(filename)
58
84
  @namespaces = YAML.load(file)
59
85
  end
60
86
 
61
- # vk_method_name('get_country_by_id', 'places')
62
- # => 'places.getCountryById'
87
+ # A complete method name needed by VKontakte.
88
+ #
89
+ # Returns a full name and the result type (:boolean or :anything).
90
+ # @example
91
+ # vk_method_name('is_app_user?')
92
+ # # => 'isAppUser'
93
+ # vk_method_name('get_country_by_id', 'places')
94
+ # # => 'places.getCountryById'
95
+ # @return [Array] full method name and type
63
96
  def vk_method_name(method_name, namespace = nil)
64
97
  method_name = method_name.to_s
65
98
 
@@ -78,6 +111,7 @@ module VkontakteApi
78
111
 
79
112
  [full_name, type]
80
113
  end
114
+
81
115
  private
82
116
  # convert('get_profiles')
83
117
  # => 'getProfiles'
@@ -1,3 +1,3 @@
1
1
  module VkontakteApi
2
- VERSION = '0.1'
2
+ VERSION = '0.2'
3
3
  end
@@ -22,13 +22,7 @@ describe VkontakteApi::API do
22
22
  @connection.stub(:get).and_return(response)
23
23
 
24
24
  @result = stub("Result")
25
- @result.stub(:has_key?) do |key|
26
- if key == 'response'
27
- true
28
- else
29
- false
30
- end
31
- end
25
+ @result.stub(:has_key?) { |key| key == 'response' }
32
26
 
33
27
  @result_response = stub("Result[response]")
34
28
  @result_error = stub("Result[error]").as_null_object
@@ -57,13 +51,7 @@ describe VkontakteApi::API do
57
51
 
58
52
  context "with an error response" do
59
53
  before(:each) do
60
- @result.stub(:has_key?) do |key|
61
- if key == 'response'
62
- false
63
- else
64
- true
65
- end
66
- end
54
+ @result.stub(:has_key?) { |key| key != 'response' }
67
55
  end
68
56
 
69
57
  it "raises a VkontakteApi::Error" do
@@ -79,5 +67,16 @@ describe VkontakteApi::API do
79
67
  url = VkontakteApi::API.send(:url_for, @method_name, @args)
80
68
  url.should == '/method/apiMethod?access_token=some_token&field=value'
81
69
  end
70
+
71
+ context "with an array argument" do
72
+ before(:each) do
73
+ @args_with_array = @args.merge(:array_arg => [1, 2, 3])
74
+ end
75
+
76
+ it "concats it with a comma" do
77
+ url = VkontakteApi::API.send(:url_for, @method_name, @args_with_array)
78
+ url.should == "/method/apiMethod?access_token=some_token&array_arg=#{CGI.escape('1,2,3')}&field=value"
79
+ end
80
+ end
82
81
  end
83
82
  end
@@ -13,33 +13,42 @@ describe VkontakteApi::Resolver do
13
13
 
14
14
  context "with a nil @namespace" do
15
15
  before(:each) do
16
+ VkontakteApi::Resolver.stub(:vk_method_name).and_return(['apiMethod', :anything])
16
17
  @resolver = VkontakteApi::Resolver.new(:access_token => @token)
17
18
  end
18
19
 
19
- context "with method_name not from NAMESPACES" do
20
- before(:each) do
21
- VkontakteApi::Resolver.stub(:vk_method_name).and_return(['apiMethod', :anything])
22
- end
23
-
20
+ context "with method_name not from namespaces" do
24
21
  it "calls #vk_method_name with method name and nil namespace" do
25
22
  VkontakteApi::Resolver.should_receive(:vk_method_name).with('api_method', nil)
26
23
  @resolver.api_method
27
24
  end
28
25
 
29
- it "calls #api_call with full VK method name" do
30
- full_args = @args.merge(:access_token => @token)
31
- VkontakteApi::API.should_receive(:call).with('apiMethod', full_args)
26
+ it "calls #api_call with full VK method name and access_token" do
27
+ @args.should_receive(:[]=).with(:access_token, @token)
28
+ VkontakteApi::API.should_receive(:call).with('apiMethod', @args)
32
29
  @resolver.api_method(@args).should == @result
33
30
  end
34
31
  end
35
32
 
36
- context "with method_name from NAMESPACES" do
33
+ context "with method_name from namespaces" do
37
34
  it "return a new resolver with the corresponding @namespace" do
38
35
  new_resolver = @resolver.friends
39
36
  new_resolver.should be_a(VkontakteApi::Resolver)
40
37
  new_resolver.namespace.should == 'friends'
41
38
  end
42
39
  end
40
+
41
+ context "without a token" do
42
+ before(:each) do
43
+ @resolver = VkontakteApi::Resolver.new
44
+ end
45
+
46
+ it "calls #api_call with full VK method name but without a token" do
47
+ @args.should_not_receive(:[]=).with(:access_token, anything)
48
+ VkontakteApi::API.should_receive(:call).with('apiMethod', @args)
49
+ @resolver.api_method(@args).should == @result
50
+ end
51
+ end
43
52
  end
44
53
 
45
54
  context "with a non-nil @namespace" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vkontakte_api
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
4
+ version: '0.2'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-31 00:00:00.000000000 Z
12
+ date: 2012-03-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &70258037639260 !ruby/object:Gem::Requirement
16
+ requirement: &70235030424180 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '3.0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70258037639260
24
+ version_requirements: *70235030424180
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: i18n
27
- requirement: &70258037638480 !ruby/object:Gem::Requirement
27
+ requirement: &70235030421960 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0.6'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70258037638480
35
+ version_requirements: *70235030421960
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: faraday
38
- requirement: &70258037637640 !ruby/object:Gem::Requirement
38
+ requirement: &70235030420280 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 0.7.6
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70258037637640
46
+ version_requirements: *70235030420280
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: yajl-ruby
49
- requirement: &70258037636920 !ruby/object:Gem::Requirement
49
+ requirement: &70235030434380 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '1.0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70258037636920
57
+ version_requirements: *70235030434380
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rake
60
- requirement: &70258037656820 !ruby/object:Gem::Requirement
60
+ requirement: &70235030433320 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70258037656820
68
+ version_requirements: *70235030433320
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
- requirement: &70258037656180 !ruby/object:Gem::Requirement
71
+ requirement: &70235030432180 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70258037656180
79
+ version_requirements: *70235030432180
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: pry
82
- requirement: &70258037655480 !ruby/object:Gem::Requirement
82
+ requirement: &70235030431540 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70258037655480
90
+ version_requirements: *70235030431540
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: awesome_print
93
- requirement: &70258037654980 !ruby/object:Gem::Requirement
93
+ requirement: &70235030430680 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,7 +98,7 @@ dependencies:
98
98
  version: '0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *70258037654980
101
+ version_requirements: *70235030430680
102
102
  description: A transparent wrapper for API of vk.com social network called VKontakte.
103
103
  Supports ruby-way method naming (without any method lists inside), result typecasting
104
104
  and any faraday-supported http adapter of your choice (no hardcoded Net::HTTP).
@@ -109,6 +109,8 @@ extensions: []
109
109
  extra_rdoc_files: []
110
110
  files:
111
111
  - .gitignore
112
+ - .travis.yml
113
+ - .yardopts
112
114
  - Gemfile
113
115
  - MIT-LICENSE
114
116
  - README.md
@@ -144,7 +146,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
144
146
  version: '0'
145
147
  segments:
146
148
  - 0
147
- hash: -2826215231838222847
149
+ hash: 4524106874123629909
148
150
  required_rubygems_version: !ruby/object:Gem::Requirement
149
151
  none: false
150
152
  requirements:
@@ -153,7 +155,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
153
155
  version: '0'
154
156
  segments:
155
157
  - 0
156
- hash: -2826215231838222847
158
+ hash: 4524106874123629909
157
159
  requirements: []
158
160
  rubyforge_project:
159
161
  rubygems_version: 1.8.10