vkontakte_api 0.2.1 → 1.0.rc
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.
- 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 [](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.
|