vkontakte_api 0.2.1 → 1.0.rc
Sign up to get free protection for your applications and to get access to all the features.
- data/.rspec +1 -0
- data/.travis.yml +1 -0
- data/.yardopts +1 -1
- data/CHANGELOG.md +23 -0
- data/README.md +136 -61
- data/lib/generators/vkontakte_api/install/USAGE +2 -0
- data/lib/generators/vkontakte_api/install/install_generator.rb +9 -0
- data/lib/generators/vkontakte_api/install/templates/initializer.rb +22 -0
- data/lib/vkontakte_api/api.rb +27 -39
- data/lib/vkontakte_api/authorization.rb +66 -0
- data/lib/vkontakte_api/client.rb +14 -12
- data/lib/vkontakte_api/configuration.rb +22 -4
- data/lib/vkontakte_api/error.rb +15 -7
- data/lib/vkontakte_api/logger.rb +35 -0
- data/lib/vkontakte_api/method.rb +40 -0
- data/lib/vkontakte_api/namespace.rb +7 -0
- data/lib/vkontakte_api/resolvable.rb +20 -0
- data/lib/vkontakte_api/resolver.rb +18 -103
- data/lib/vkontakte_api/result.rb +48 -0
- data/lib/vkontakte_api/uploading.rb +29 -0
- data/lib/vkontakte_api/utils.rb +28 -0
- data/lib/vkontakte_api/version.rb +2 -1
- data/lib/vkontakte_api.rb +14 -3
- data/spec/integration_spec.rb +84 -0
- data/spec/spec_helper.rb +18 -0
- data/spec/vkontakte_api/api_spec.rb +39 -58
- data/spec/vkontakte_api/authorization_spec.rb +111 -0
- data/spec/vkontakte_api/client_spec.rb +17 -24
- data/spec/vkontakte_api/configuration_spec.rb +5 -0
- data/spec/vkontakte_api/error_spec.rb +30 -10
- data/spec/vkontakte_api/logger_spec.rb +88 -0
- data/spec/vkontakte_api/method_spec.rb +59 -0
- data/spec/vkontakte_api/namespace_spec.rb +5 -0
- data/spec/vkontakte_api/resolvable_spec.rb +21 -0
- data/spec/vkontakte_api/resolver_spec.rb +58 -141
- data/spec/vkontakte_api/result_spec.rb +115 -0
- data/spec/vkontakte_api/uploading_spec.rb +46 -0
- data/spec/vkontakte_api/utils_spec.rb +47 -0
- data/spec/vkontakte_api_spec.rb +4 -0
- data/vkontakte_api.gemspec +6 -5
- metadata +119 -38
- data/README.ru.md +0 -115
@@ -0,0 +1,115 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe VkontakteApi::Result do
|
4
|
+
describe ".process" do
|
5
|
+
before(:each) do
|
6
|
+
@response = stub("Response")
|
7
|
+
@result = stub("Result")
|
8
|
+
subject.stub(:extract_result).and_return(@result)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "calls .extract_result passing it the response" do
|
12
|
+
subject.should_receive(:extract_result).with(@response)
|
13
|
+
subject.process(@response, @type, nil)
|
14
|
+
end
|
15
|
+
|
16
|
+
context "with a non-enumerable result" do
|
17
|
+
before(:each) do
|
18
|
+
@type = stub("Type")
|
19
|
+
@typecasted_value = stub("Typecasted value")
|
20
|
+
subject.stub(:typecast).and_return(@typecasted_value)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "returns #typecast-ed value" do
|
24
|
+
subject.should_receive(:typecast).with(@result, @type).and_return(@typecasted_value)
|
25
|
+
subject.send(:process, @result, @type, nil).should == @typecasted_value
|
26
|
+
end
|
27
|
+
|
28
|
+
context "when block_given?" do
|
29
|
+
it "yields the #typecast-ed value and returns the result of the block" do
|
30
|
+
block_result = stub("Block result")
|
31
|
+
@typecasted_value.should_receive(:result_method).and_return(block_result)
|
32
|
+
block = proc(&:result_method)
|
33
|
+
|
34
|
+
subject.send(:process, @response, @type, block).should == block_result
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context "with an enumerable result" do
|
40
|
+
before(:each) do
|
41
|
+
@element1 = stub("First element")
|
42
|
+
@element2 = stub("Second element")
|
43
|
+
@enumerable_result = [@element1, @element2]
|
44
|
+
subject.stub(:extract_result).and_return(@enumerable_result)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "returns the untouched value" do
|
48
|
+
subject.send(:process, @enumerable_result, :anything, nil).should == @enumerable_result
|
49
|
+
end
|
50
|
+
|
51
|
+
context "when block_given?" do
|
52
|
+
it "yields each element untouched to the block" do
|
53
|
+
result1 = stub("First element after result_method")
|
54
|
+
result2 = stub("Second element after result_method")
|
55
|
+
@element1.should_receive(:result_method).and_return(result1)
|
56
|
+
@element2.should_receive(:result_method).and_return(result2)
|
57
|
+
block = proc(&:result_method)
|
58
|
+
|
59
|
+
subject.send(:process, @enumerable_result, :anything, block).should == [result1, result2]
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe ".extract_result" do
|
66
|
+
before(:each) do
|
67
|
+
@result_response = {'key' => 'value'}
|
68
|
+
@result_error = {'request_params' => [{'key' => 'error', 'value' => 'description'}]}
|
69
|
+
end
|
70
|
+
|
71
|
+
context "with a successful response" do
|
72
|
+
before(:each) do
|
73
|
+
@result = Hashie::Mash.new(:response => @result_response)
|
74
|
+
end
|
75
|
+
|
76
|
+
it "returns the response part" do
|
77
|
+
subject.send(:extract_result, @result).should == @result_response
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
context "with an error response" do
|
82
|
+
before(:each) do
|
83
|
+
@result = Hashie::Mash.new(:error => @result_error)
|
84
|
+
end
|
85
|
+
|
86
|
+
it "raises a VkontakteApi::Error" do
|
87
|
+
expect {
|
88
|
+
subject.send(:extract_result, @result)
|
89
|
+
}.to raise_error(VkontakteApi::Error)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
describe ".typecast" do
|
95
|
+
context "with an :anything type" do
|
96
|
+
it "returns it's argument untouched" do
|
97
|
+
subject.send(:typecast, :some_arg, :anything).should == :some_arg
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
context "with a :boolean type" do
|
102
|
+
context "and zero result" do
|
103
|
+
it "returns false" do
|
104
|
+
subject.send(:typecast, '0', :boolean).should == false
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
context "and non-zero parameter" do
|
109
|
+
it "returns true" do
|
110
|
+
subject.send(:typecast, '1', :boolean).should == true
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe VkontakteApi::Uploading do
|
4
|
+
before(:each) do
|
5
|
+
@uploader = Object.new
|
6
|
+
@uploader.extend VkontakteApi::Uploading
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "#upload" do
|
10
|
+
before(:each) do
|
11
|
+
@upload_io = stub("Faraday::UploadIO instance")
|
12
|
+
Faraday::UploadIO.stub(:new).and_return(@upload_io)
|
13
|
+
|
14
|
+
@response_body = stub("Server response body")
|
15
|
+
response = stub("Server response", :body => @response_body)
|
16
|
+
@connection = stub("Faraday connection", :post => response)
|
17
|
+
VkontakteApi::API.stub(:connection).and_return(@connection)
|
18
|
+
end
|
19
|
+
|
20
|
+
context "without a :url param" do
|
21
|
+
it "raises an ArgumentError" do
|
22
|
+
expect {
|
23
|
+
@uploader.upload
|
24
|
+
}.to raise_error(ArgumentError)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
it "creates a Faraday::UploadIO for each file passed in" do
|
29
|
+
path = stub("File path")
|
30
|
+
type = stub("File mime type")
|
31
|
+
Faraday::UploadIO.should_receive(:new).with(path, type)
|
32
|
+
@uploader.upload(:url => 'http://example.com', :file1 => [path, type])
|
33
|
+
end
|
34
|
+
|
35
|
+
it "POSTs the files through the connection to a given URL" do
|
36
|
+
url = stub("URL")
|
37
|
+
file = stub("File")
|
38
|
+
@connection.should_receive(:post).with(url, :file1 => @upload_io)
|
39
|
+
@uploader.upload(:url => url, :file1 => file)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "returns the server response" do
|
43
|
+
@uploader.upload(:url => 'http://example.com').should == @response_body
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe VkontakteApi::Utils do
|
4
|
+
describe ".flatten_arguments" do
|
5
|
+
before(:each) do
|
6
|
+
@arg1 = stub("First argument")
|
7
|
+
@arg2 = stub("Second argument")
|
8
|
+
@flat_arg1 = stub("Flattened first argument")
|
9
|
+
@flat_arg2 = stub("Flattened second argument")
|
10
|
+
|
11
|
+
VkontakteApi::Utils.stub(:flatten_argument) do |arg|
|
12
|
+
case arg
|
13
|
+
when @arg1 then @flat_arg1
|
14
|
+
when @arg2 then @flat_arg2
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
it "sends each value to .flatten_argument" do
|
20
|
+
flat_arguments = VkontakteApi::Utils.flatten_arguments(:arg1 => @arg1, :arg2 => @arg2)
|
21
|
+
flat_arguments.should == {:arg1 => @flat_arg1, :arg2 => @flat_arg2}
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe ".flatten_argument" do
|
26
|
+
context "with a flat argument" do
|
27
|
+
before(:each) do
|
28
|
+
@argument = :flat
|
29
|
+
end
|
30
|
+
|
31
|
+
it "leaves it untouched" do
|
32
|
+
subject.send(:flatten_argument, @argument).should == @argument
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context "with an array argument" do
|
37
|
+
before(:each) do
|
38
|
+
@array_argument = [1, 2, 3]
|
39
|
+
end
|
40
|
+
|
41
|
+
it "joins the elements with a comma" do
|
42
|
+
flat_argument = subject.send(:flatten_argument, @array_argument)
|
43
|
+
flat_argument.should == '1,2,3'
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/spec/vkontakte_api_spec.rb
CHANGED
data/vkontakte_api.gemspec
CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.version = VkontakteApi::VERSION
|
8
8
|
s.authors = ['Vsevolod Romashov']
|
9
9
|
s.email = ['7@7vn.ru']
|
10
|
-
s.homepage = '
|
10
|
+
s.homepage = 'http://7even.github.com/vkontakte_api'
|
11
11
|
s.summary = %q{Ruby-way wrapper for VKontakte API}
|
12
12
|
s.description = %q{A transparent wrapper for API of vk.com social network called VKontakte. Supports ruby-way method naming (without any method lists inside), result typecasting and any faraday-supported http adapter of your choice (no hardcoded Net::HTTP).}
|
13
13
|
|
@@ -16,10 +16,11 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
17
17
|
s.require_paths = ['lib']
|
18
18
|
|
19
|
-
s.add_runtime_dependency '
|
20
|
-
s.add_runtime_dependency '
|
21
|
-
s.add_runtime_dependency '
|
22
|
-
s.add_runtime_dependency '
|
19
|
+
s.add_runtime_dependency 'faraday', '~> 0.8'
|
20
|
+
s.add_runtime_dependency 'faraday_middleware', '~> 0.8'
|
21
|
+
s.add_runtime_dependency 'faraday_middleware-parse_oj', '~> 0.1'
|
22
|
+
s.add_runtime_dependency 'oauth2', '~> 0.8'
|
23
|
+
s.add_runtime_dependency 'hashie', '~> 1.2'
|
23
24
|
|
24
25
|
s.add_development_dependency 'rake'
|
25
26
|
s.add_development_dependency 'rspec'
|
metadata
CHANGED
@@ -1,63 +1,99 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vkontakte_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.rc
|
5
|
+
prerelease: 4
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Vsevolod Romashov
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-07-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
16
|
-
requirement:
|
15
|
+
name: faraday
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: '
|
21
|
+
version: '0.8'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0.8'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
|
-
name:
|
27
|
-
requirement:
|
31
|
+
name: faraday_middleware
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ~>
|
31
36
|
- !ruby/object:Gem::Version
|
32
|
-
version: '0.
|
37
|
+
version: '0.8'
|
33
38
|
type: :runtime
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0.8'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
|
-
name:
|
38
|
-
requirement:
|
47
|
+
name: faraday_middleware-parse_oj
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ~>
|
42
52
|
- !ruby/object:Gem::Version
|
43
|
-
version: 0.
|
53
|
+
version: '0.1'
|
44
54
|
type: :runtime
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.1'
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
49
|
-
requirement:
|
63
|
+
name: oauth2
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
67
|
- - ~>
|
53
68
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
69
|
+
version: '0.8'
|
55
70
|
type: :runtime
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0.8'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: hashie
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ~>
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '1.2'
|
86
|
+
type: :runtime
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '1.2'
|
58
94
|
- !ruby/object:Gem::Dependency
|
59
95
|
name: rake
|
60
|
-
requirement:
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
61
97
|
none: false
|
62
98
|
requirements:
|
63
99
|
- - ! '>='
|
@@ -65,10 +101,15 @@ dependencies:
|
|
65
101
|
version: '0'
|
66
102
|
type: :development
|
67
103
|
prerelease: false
|
68
|
-
version_requirements:
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
69
110
|
- !ruby/object:Gem::Dependency
|
70
111
|
name: rspec
|
71
|
-
requirement:
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
72
113
|
none: false
|
73
114
|
requirements:
|
74
115
|
- - ! '>='
|
@@ -76,10 +117,15 @@ dependencies:
|
|
76
117
|
version: '0'
|
77
118
|
type: :development
|
78
119
|
prerelease: false
|
79
|
-
version_requirements:
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
80
126
|
- !ruby/object:Gem::Dependency
|
81
127
|
name: pry
|
82
|
-
requirement:
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
83
129
|
none: false
|
84
130
|
requirements:
|
85
131
|
- - ! '>='
|
@@ -87,10 +133,15 @@ dependencies:
|
|
87
133
|
version: '0'
|
88
134
|
type: :development
|
89
135
|
prerelease: false
|
90
|
-
version_requirements:
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
91
142
|
- !ruby/object:Gem::Dependency
|
92
143
|
name: awesome_print
|
93
|
-
requirement:
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
94
145
|
none: false
|
95
146
|
requirements:
|
96
147
|
- - ! '>='
|
@@ -98,7 +149,12 @@ dependencies:
|
|
98
149
|
version: '0'
|
99
150
|
type: :development
|
100
151
|
prerelease: false
|
101
|
-
version_requirements:
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
102
158
|
description: A transparent wrapper for API of vk.com social network called VKontakte.
|
103
159
|
Supports ruby-way method naming (without any method lists inside), result typecasting
|
104
160
|
and any faraday-supported http adapter of your choice (no hardcoded Net::HTTP).
|
@@ -109,30 +165,51 @@ extensions: []
|
|
109
165
|
extra_rdoc_files: []
|
110
166
|
files:
|
111
167
|
- .gitignore
|
168
|
+
- .rspec
|
112
169
|
- .travis.yml
|
113
170
|
- .yardopts
|
171
|
+
- CHANGELOG.md
|
114
172
|
- Gemfile
|
115
173
|
- MIT-LICENSE
|
116
174
|
- README.md
|
117
|
-
- README.ru.md
|
118
175
|
- Rakefile
|
176
|
+
- lib/generators/vkontakte_api/install/USAGE
|
177
|
+
- lib/generators/vkontakte_api/install/install_generator.rb
|
178
|
+
- lib/generators/vkontakte_api/install/templates/initializer.rb
|
119
179
|
- lib/vkontakte_api.rb
|
120
180
|
- lib/vkontakte_api/api.rb
|
181
|
+
- lib/vkontakte_api/authorization.rb
|
121
182
|
- lib/vkontakte_api/client.rb
|
122
183
|
- lib/vkontakte_api/configuration.rb
|
123
184
|
- lib/vkontakte_api/error.rb
|
185
|
+
- lib/vkontakte_api/logger.rb
|
186
|
+
- lib/vkontakte_api/method.rb
|
187
|
+
- lib/vkontakte_api/namespace.rb
|
124
188
|
- lib/vkontakte_api/namespaces.yml
|
189
|
+
- lib/vkontakte_api/resolvable.rb
|
125
190
|
- lib/vkontakte_api/resolver.rb
|
191
|
+
- lib/vkontakte_api/result.rb
|
192
|
+
- lib/vkontakte_api/uploading.rb
|
193
|
+
- lib/vkontakte_api/utils.rb
|
126
194
|
- lib/vkontakte_api/version.rb
|
195
|
+
- spec/integration_spec.rb
|
127
196
|
- spec/spec_helper.rb
|
128
197
|
- spec/vkontakte_api/api_spec.rb
|
198
|
+
- spec/vkontakte_api/authorization_spec.rb
|
129
199
|
- spec/vkontakte_api/client_spec.rb
|
130
200
|
- spec/vkontakte_api/configuration_spec.rb
|
131
201
|
- spec/vkontakte_api/error_spec.rb
|
202
|
+
- spec/vkontakte_api/logger_spec.rb
|
203
|
+
- spec/vkontakte_api/method_spec.rb
|
204
|
+
- spec/vkontakte_api/namespace_spec.rb
|
205
|
+
- spec/vkontakte_api/resolvable_spec.rb
|
132
206
|
- spec/vkontakte_api/resolver_spec.rb
|
207
|
+
- spec/vkontakte_api/result_spec.rb
|
208
|
+
- spec/vkontakte_api/uploading_spec.rb
|
209
|
+
- spec/vkontakte_api/utils_spec.rb
|
133
210
|
- spec/vkontakte_api_spec.rb
|
134
211
|
- vkontakte_api.gemspec
|
135
|
-
homepage:
|
212
|
+
homepage: http://7even.github.com/vkontakte_api
|
136
213
|
licenses: []
|
137
214
|
post_install_message:
|
138
215
|
rdoc_options: []
|
@@ -144,29 +221,33 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
144
221
|
- - ! '>='
|
145
222
|
- !ruby/object:Gem::Version
|
146
223
|
version: '0'
|
147
|
-
segments:
|
148
|
-
- 0
|
149
|
-
hash: 3384818246116410230
|
150
224
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
151
225
|
none: false
|
152
226
|
requirements:
|
153
|
-
- - ! '
|
227
|
+
- - ! '>'
|
154
228
|
- !ruby/object:Gem::Version
|
155
|
-
version:
|
156
|
-
segments:
|
157
|
-
- 0
|
158
|
-
hash: 3384818246116410230
|
229
|
+
version: 1.3.1
|
159
230
|
requirements: []
|
160
231
|
rubyforge_project:
|
161
|
-
rubygems_version: 1.8.
|
232
|
+
rubygems_version: 1.8.23
|
162
233
|
signing_key:
|
163
234
|
specification_version: 3
|
164
235
|
summary: Ruby-way wrapper for VKontakte API
|
165
236
|
test_files:
|
237
|
+
- spec/integration_spec.rb
|
166
238
|
- spec/spec_helper.rb
|
167
239
|
- spec/vkontakte_api/api_spec.rb
|
240
|
+
- spec/vkontakte_api/authorization_spec.rb
|
168
241
|
- spec/vkontakte_api/client_spec.rb
|
169
242
|
- spec/vkontakte_api/configuration_spec.rb
|
170
243
|
- spec/vkontakte_api/error_spec.rb
|
244
|
+
- spec/vkontakte_api/logger_spec.rb
|
245
|
+
- spec/vkontakte_api/method_spec.rb
|
246
|
+
- spec/vkontakte_api/namespace_spec.rb
|
247
|
+
- spec/vkontakte_api/resolvable_spec.rb
|
171
248
|
- spec/vkontakte_api/resolver_spec.rb
|
249
|
+
- spec/vkontakte_api/result_spec.rb
|
250
|
+
- spec/vkontakte_api/uploading_spec.rb
|
251
|
+
- spec/vkontakte_api/utils_spec.rb
|
172
252
|
- spec/vkontakte_api_spec.rb
|
253
|
+
has_rdoc:
|
data/README.ru.md
DELETED
@@ -1,115 +0,0 @@
|
|
1
|
-
# vkontakte_api [![Build Status](https://secure.travis-ci.org/7even/vkontakte_api.png)](http://travis-ci.org/7even/vkontakte_api)
|
2
|
-
|
3
|
-
`vkontakte_api` - ruby-обертка для API ВКонтакте. Она позволяет вызывать методы API настолько просто, насколько это возможно.
|
4
|
-
|
5
|
-
Это русская версия readme. Английская версия лежит [здесь](https://github.com/7even/vkontakte_api/blob/master/README.md).
|
6
|
-
|
7
|
-
## Установка
|
8
|
-
|
9
|
-
``` bash
|
10
|
-
gem install vkontakte_api
|
11
|
-
```
|
12
|
-
|
13
|
-
## Использование
|
14
|
-
|
15
|
-
По умолчанию для HTTP-запросов используется `Net::HTTP`. Можно выбрать любой другой адаптер, поддерживаемый `faraday`, в блоке `VkontakteApi.configure` следующим образом:
|
16
|
-
|
17
|
-
``` ruby
|
18
|
-
VkontakteApi.configure do |config|
|
19
|
-
config.adapter = :net_http
|
20
|
-
end
|
21
|
-
```
|
22
|
-
|
23
|
-
Все запросы к API отправляются через объект класса `VkontakteApi::Client`.
|
24
|
-
|
25
|
-
``` ruby
|
26
|
-
@app = VkontakteApi::Client.new
|
27
|
-
```
|
28
|
-
|
29
|
-
Чтобы создать клиент для отправки авторизованных запросов, нужно просто передать в конструктор токен доступа.
|
30
|
-
|
31
|
-
``` ruby
|
32
|
-
@app = VkontakteApi::Client.new('my_access_token')
|
33
|
-
```
|
34
|
-
|
35
|
-
Пожалуй, самый простой способ получить токен в веб-приложении - использовать [OmniAuth](https://github.com/intridea/omniauth), но если это неприемлемо, можно реализовать свой механизм авторизации. На данный момент `vkontakte_api` не умеет получать токен.
|
36
|
-
|
37
|
-
Теперь можно вызывать методы API. Все названия методов переведены в underscore_case - в отличие от [официальной документации](http://vk.com/developers.php?oid=-17680044&p=API_Method_Description), где они в camelCase, т.е. `getGroups` становится `get_groups`. Можно по прежнему писать методы в camelCase, но это не соответствует стандартам стиля кода, принятым в ruby.
|
38
|
-
|
39
|
-
``` ruby
|
40
|
-
@app.get_user_settings # => 327710
|
41
|
-
@app.groups.get # => [1, 31022447]
|
42
|
-
```
|
43
|
-
|
44
|
-
Предикатные методы (названия которых начинаются с `is`, например `is_app_user`) должны возвращать результат какого-то условия, поэтому в конец названия метода добавляется '?', и возвращается булево значение (`true` или `false`):
|
45
|
-
|
46
|
-
``` ruby
|
47
|
-
@app.is_app_user? # => true
|
48
|
-
```
|
49
|
-
|
50
|
-
Можно вызывать эти методы и без '?' на конце, тогда они будут возвращать `'0'` или `'1'`.
|
51
|
-
|
52
|
-
Теперь о параметрах. Все параметры именованные, и передаются в методы в виде хэша, где ключи соответствуют названиям параметров, а значения - соответственно, их значениям:
|
53
|
-
|
54
|
-
``` ruby
|
55
|
-
@app.friends.get(fields: 'uid,first_name,last_name')
|
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) # => тот же вывод, что и выше
|
75
|
-
```
|
76
|
-
|
77
|
-
Также следует заметить, что все возвращаемые хэши имеют символьные ключи.
|
78
|
-
|
79
|
-
Если результат метода - Enumerable, то методу можно передать блок, который будет вызван для каждого элемента результата. В этом случае метод вернет массив из результатов выполнения блока с каждым элементом (аналогично `Enumerable#map`):
|
80
|
-
|
81
|
-
``` ruby
|
82
|
-
@app.friends.get(fields: 'first_name,last_name') do |friend|
|
83
|
-
"#{friend[:first_name]} #{friend[:last_name]}"
|
84
|
-
end
|
85
|
-
# => ["Павел Дуров", "Andrew Rogozov"]
|
86
|
-
```
|
87
|
-
|
88
|
-
`vkontakte_api` не содержит списка названий методов (если не считать пространств имен, вроде `friends` или `groups`) - когда вызывается метод, его название переводится в camelCase, а уже потом отправляется запрос к ВКонтакте. Поэтому когда новый метод добавляется в API, не нужно ждать новой версии гема `vkontakte_api` - можно использовать этот новый метод сразу же. Если в названии запрошенного метода допущены ошибки, или вызван метод, на выполнение которого отсутствуют права, будет выброшено исключение с соответствующим сообщением (об исключениях чуть ниже).
|
89
|
-
|
90
|
-
### Обработка ошибок
|
91
|
-
|
92
|
-
Если ВКонтакте возвращает ошибку, выбрасывается исключение класса `VkontakteApi::Error` со всей значимой информацией, которую можно получить:
|
93
|
-
|
94
|
-
``` ruby
|
95
|
-
@app.audio.get_by_id
|
96
|
-
# => VkontakteApi::Error: VKontakte returned an error 1: 'Unknown error occured' after calling method 'audio.getById' with parameters {}.
|
97
|
-
```
|
98
|
-
|
99
|
-
## Changelog
|
100
|
-
|
101
|
-
* 0.1 Первая стабильная версия
|
102
|
-
* 0.2 Поддержка аргументов-массивов, подчищенные неавторизованные запросы, обновленный список пространств имен, документация кода
|
103
|
-
* 0.2.1 Пространство имен `stats`
|
104
|
-
|
105
|
-
## Планы
|
106
|
-
|
107
|
-
* Логирование запросов
|
108
|
-
* Авторизация (получение токена доступа с ВКонтакте)
|
109
|
-
* Возможно, Struct-подобные объекты в результатах запросов (вместо Hash)
|
110
|
-
|
111
|
-
## Участие в разработке
|
112
|
-
|
113
|
-
Если вы хотите поучаствовать в разработке проекта, форкните репозиторий, положите свои изменения в отдельную ветку и отправьте мне pull request.
|
114
|
-
|
115
|
-
`vkontakte_api` тестируется под MRI `1.8.7`, `1.9.2` и `1.9.3`. Если в одной из этих сред что-то работает неправильно, либо вообще не работает, то это следует считать багом, и написать об этом в issues на Github.
|