metrika 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/.rspec CHANGED
@@ -1 +1,2 @@
1
- --color --format doc
1
+ --format nested
2
+ --color
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.1.3
@@ -12,7 +12,7 @@ module Metrika
12
12
  class UnauthorizedError < MetrikaError; end
13
13
  class GeneralError < MetrikaError; end
14
14
  class AccessDeniedError < MetrikaError; end
15
- class NoTokenError < StandardError; end
16
- class NotFoundError < StandardError; end
15
+ class NoTokenError < MetrikaError; end
16
+ class NotFoundError < MetrikaError; end
17
17
  end
18
18
  end
@@ -11,9 +11,12 @@ module Metrika
11
11
  protected
12
12
 
13
13
  def get(path, params = {}, options = {})
14
- response = self.token.get(path, DEFAULT_OPTIONS.merge(:params => params).merge(options))
14
+ begin
15
+ response = self.token.get(path, DEFAULT_OPTIONS.merge(:params => params).merge(options))
16
+ rescue OAuth2::Error => e
17
+ self.process_oauth2_errors(e.response.status, e.message, path, params)
18
+ end
15
19
 
16
- # self.raise_errors(response)
17
20
  Yajl::Parser.parse(response.body)
18
21
  end
19
22
 
@@ -40,6 +43,17 @@ module Metrika
40
43
  # self.raise_errors(response)
41
44
  Yajl::Parser.parse(response.body)
42
45
  end
46
+
47
+ def process_oauth2_errors(status, message, path = nil, params = {})
48
+ case status
49
+ when 404
50
+ raise Metrika::Errors::NotFoundError.new(:message => message, :path => path, :params => params)
51
+ when 403
52
+ raise Metrika::Errors::AccessDeniedError.new(:message => message, :path => path, :params => params)
53
+ else
54
+ raise Metrika::Errors::MetrikaError.new(:message => message, :path => path, :params => params)
55
+ end
56
+ end
43
57
  end
44
58
  end
45
59
  end
data/metrika.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "metrika"
8
- s.version = "0.1.2"
8
+ s.version = "0.1.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Igor Alexandrov"]
12
- s.date = "2012-10-26"
12
+ s.date = "2012-10-28"
13
13
  s.email = "igor.alexandrov@gmail.com"
14
14
  s.extra_rdoc_files = [
15
15
  "LICENSE",
@@ -38,7 +38,10 @@ Gem::Specification.new do |s|
38
38
  "spec/cases/metrika/authorization_spec.rb",
39
39
  "spec/cases/metrika/counters_spec.rb",
40
40
  "spec/cases/metrika_spec.rb",
41
+ "spec/fixtures/cassettes/counter_237991.yml",
42
+ "spec/fixtures/cassettes/counter_237992.yml",
41
43
  "spec/fixtures/cassettes/counters.yml",
44
+ "spec/fixtures/cassettes/non_existent_counter.yml",
42
45
  "spec/helper.rb"
43
46
  ]
44
47
  s.homepage = "http://github.com/igor-alexandrov/metrika"
@@ -1,7 +1,23 @@
1
1
  require 'helper'
2
2
 
3
- describe Metrika do
3
+ RSpec::Matchers.define :be_a_counter_hash do |expected|
4
+ match do |actual|
5
+ actual.should be_instance_of(Hash)
6
+
7
+ actual.should have_key('code_options')
8
+ actual.should have_key('code_status')
9
+ actual.should have_key('name')
10
+ actual.should have_key('permission')
11
+ actual.should have_key('monitoring')
12
+ actual.should have_key('site')
13
+ actual.should have_key('id')
14
+ actual.should have_key('type')
15
+ actual.should have_key('owner_login')
16
+ actual.should have_key('code')
17
+ end
18
+ end
4
19
 
20
+ describe Metrika do
5
21
  before(:all) do
6
22
  Metrika.configure do |config|
7
23
  config.application_id = APPLICATION_ID
@@ -13,12 +29,63 @@ describe Metrika do
13
29
  end
14
30
 
15
31
  context '#get_counters' do
16
- it 'should return array of counters' do
32
+ it 'should be' do
33
+ VCR.use_cassette("counters") do
34
+ lambda {
35
+ counters = @client.get_counters
36
+ counters.should_not be_nil
37
+ }.should_not raise_error
38
+ end
39
+ end
40
+
41
+ it 'should return array of counter hashes' do
17
42
  VCR.use_cassette('counters') do
18
43
  counters = @client.get_counters
19
44
  counters.should be_instance_of(Array)
20
- counters.size.should > 0
45
+ counters.size.should > 0
46
+ end
47
+ end
48
+ end
49
+
50
+ context '#get_counter' do
51
+ before(:all) do
52
+ VCR.use_cassette('counters') do
53
+ @counter_id = @client.get_counters[0]['id']
54
+ end
55
+ end
56
+
57
+ it 'should be' do
58
+ VCR.use_cassette("counter_#{@counter_id}") do
59
+ lambda {
60
+ counter = @client.get_counter(@counter_id)
61
+ counter.should_not be_nil
62
+ }.should_not raise_error
63
+ end
64
+ end
65
+
66
+ it 'should return a counter hash' do
67
+ VCR.use_cassette("counter_#{@counter_id}") do
68
+ counter = @client.get_counter(@counter_id)
69
+ counter.should be_a_counter_hash
21
70
  end
22
71
  end
72
+
73
+ it 'should raise NotAuthorizedError when trying to get counter that you do not have ability to get' do
74
+ another_counter_id = 237992
75
+ VCR.use_cassette("counter_#{another_counter_id}") do
76
+ lambda {
77
+ counter = @client.get_counter(another_counter_id)
78
+ }.should raise_error(Metrika::Errors::AccessDeniedError)
79
+ end
80
+ end
81
+
82
+ it 'should raise NotFoundError when trying to get counter that does not exist' do
83
+ VCR.use_cassette('non_existent_counter') do
84
+ lambda {
85
+ counter = @client.get_counter('non_existent_counter')
86
+ }.should raise_error(Metrika::Errors::NotFoundError)
87
+ end
88
+ end
89
+
23
90
  end
24
91
  end
@@ -0,0 +1,49 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://api-metrika.yandex.ru/counter/237991
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - application/x-yametrika+json
12
+ Content-Type:
13
+ - application/x-yametrika+json
14
+ Authorization:
15
+ - Bearer 926b254ca2f24869999a3d404a01f616
16
+ Accept-Encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ User-Agent:
19
+ - Ruby
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Pragma:
26
+ - no-cache
27
+ Cache-Control:
28
+ - no-cache, no-store, max-age=0, must-revalidate
29
+ Expires:
30
+ - Thu, 01 Jan 1970 00:00:00 GMT
31
+ Date:
32
+ - Sun, 28 Oct 2012 10:06:07 GMT
33
+ Server:
34
+ - Apache/2.2
35
+ Content-Type:
36
+ - application/x-yametrika+json
37
+ Transfer-Encoding:
38
+ - chunked
39
+ body:
40
+ encoding: US-ASCII
41
+ string: ! '{"counter":{"code_options":{"denial":0,"clickmap":0,"async":0,"informer":{"color_arrow":1,"color_start":"FFFFFFFF","color_text":0,"size":3,"allowed":0,"color_end":"EFEFEFFF","indicator":"pageviews","type":"ext","enabled":0},"track_hash":0,"ut":0,"params":0,"external_links":0,"webvisor_load_player":"on-your-behalf"},"code_status":"CS_OK","name":null,"permission":"own","monitoring":{"enable_monitoring":0,"enable_sms":0,"sms_time":"9-20;9-20;9-20;9-20;9-20;9-20;9-20","emails":["igor.alexandrov@gmail.com"],"sms_allowed":1},"site":"www.requestbilling.com","id":237991,"type":"simple","owner_login":"igor-alexandrov","code":"<!--
42
+ Yandex.Metrika counter -->\n<script src=\"\/\/mc.yandex.ru\/metrika\/watch.js\"
43
+ type=\"text\/javascript\"><\/script>\n<script type=\"text\/javascript\">\ntry
44
+ { var yaCounter237991 = new Ya.Metrika({id:237991});}\ncatch(e) { }\n<\/script>\n<noscript><div><img
45
+ src=\"\/\/mc.yandex.ru\/watch\/237991\" style=\"position:absolute; left:-9999px;\"
46
+ alt=\"\" \/><\/div><\/noscript>\n<!-- \/Yandex.Metrika counter -->"}}'
47
+ http_version:
48
+ recorded_at: Sun, 28 Oct 2012 10:06:08 GMT
49
+ recorded_with: VCR 2.2.5
@@ -0,0 +1,71 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://api-metrika.yandex.ru/counter/237992
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - application/x-yametrika+json
12
+ Content-Type:
13
+ - application/x-yametrika+json
14
+ Authorization:
15
+ - Bearer 926b254ca2f24869999a3d404a01f616
16
+ Accept-Encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ User-Agent:
19
+ - Ruby
20
+ response:
21
+ status:
22
+ code: 403
23
+ message: !binary |-
24
+ Rm9yYmlkZGVu
25
+ headers:
26
+ !binary "UHJhZ21h":
27
+ - !binary |-
28
+ bm8tY2FjaGU=
29
+ !binary "Q2FjaGUtQ29udHJvbA==":
30
+ - !binary |-
31
+ bm8tY2FjaGUsIG5vLXN0b3JlLCBtYXgtYWdlPTAsIG11c3QtcmV2YWxpZGF0
32
+ ZQ==
33
+ !binary "RXhwaXJlcw==":
34
+ - !binary |-
35
+ VGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMCBHTVQ=
36
+ !binary "RGF0ZQ==":
37
+ - !binary |-
38
+ U3VuLCAyOCBPY3QgMjAxMiAxMDowNjowOCBHTVQ=
39
+ !binary "U2VydmVy":
40
+ - !binary |-
41
+ QXBhY2hlLzIuMg==
42
+ !binary "TGFzdC1Nb2RpZmllZA==":
43
+ - !binary |-
44
+ V2VkLCAxNCBNYXIgMjAxMiAxMTo0NjoyMSBHTVQ=
45
+ !binary "RXRhZw==":
46
+ - !binary |-
47
+ ImExMTRlLTQ5LTRiYjMyODYzMTlkNDAi
48
+ !binary "QWNjZXB0LVJhbmdlcw==":
49
+ - !binary |-
50
+ Ynl0ZXM=
51
+ !binary "VmFyeQ==":
52
+ - !binary |-
53
+ QWNjZXB0LUVuY29kaW5n
54
+ !binary "Q29udGVudC1FbmNvZGluZw==":
55
+ - !binary |-
56
+ Z3ppcA==
57
+ !binary "Q29udGVudC1MZW5ndGg=":
58
+ - !binary |-
59
+ OTI=
60
+ !binary "Q29udGVudC1UeXBl":
61
+ - !binary |-
62
+ dGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04
63
+ body:
64
+ encoding: ASCII-8BIT
65
+ string: !binary |-
66
+ H4sIAAAAAAAAA7PxMLQzMTBWcMsvSspMSUnNs9EHinBF5pcqpOTnqZcoZCSW
67
+ pSoUpBblZhYXZ+bnKZTkKyQmJ6cWFyuUZGQWKxSlFueXFiWncgEAVB5PQkkA
68
+ AAA=
69
+ http_version:
70
+ recorded_at: Sun, 28 Oct 2012 10:06:08 GMT
71
+ recorded_with: VCR 2.2.5
@@ -35,7 +35,7 @@ http_interactions:
35
35
  VGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMCBHTVQ=
36
36
  !binary "RGF0ZQ==":
37
37
  - !binary |-
38
- RnJpLCAyNiBPY3QgMjAxMiAwODoxOToxMyBHTVQ=
38
+ U3VuLCAyOCBPY3QgMjAxMiAxMDowNjowNiBHTVQ=
39
39
  !binary "U2VydmVy":
40
40
  - !binary |-
41
41
  QXBhY2hlLzIuMg==
@@ -78,5 +78,5 @@ http_interactions:
78
78
  cGUiOiJzaW1wbGUiLCJpZCI6MTUwNjgxMSwib3duZXJfbG9naW4iOiJpZ29y
79
79
  LWFsZXhhbmRyb3YifV19
80
80
  http_version:
81
- recorded_at: Fri, 26 Oct 2012 08:19:15 GMT
81
+ recorded_at: Sun, 28 Oct 2012 10:06:07 GMT
82
82
  recorded_with: VCR 2.2.5
@@ -0,0 +1,70 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://api-metrika.yandex.ru/counter/non_existent_counter
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - application/x-yametrika+json
12
+ Content-Type:
13
+ - application/x-yametrika+json
14
+ Authorization:
15
+ - Bearer 926b254ca2f24869999a3d404a01f616
16
+ Accept-Encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ User-Agent:
19
+ - Ruby
20
+ response:
21
+ status:
22
+ code: 404
23
+ message: !binary |-
24
+ Tm90IEZvdW5k
25
+ headers:
26
+ !binary "UHJhZ21h":
27
+ - !binary |-
28
+ bm8tY2FjaGU=
29
+ !binary "Q2FjaGUtQ29udHJvbA==":
30
+ - !binary |-
31
+ bm8tY2FjaGUsIG5vLXN0b3JlLCBtYXgtYWdlPTAsIG11c3QtcmV2YWxpZGF0
32
+ ZQ==
33
+ !binary "RXhwaXJlcw==":
34
+ - !binary |-
35
+ VGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMCBHTVQ=
36
+ !binary "RGF0ZQ==":
37
+ - !binary |-
38
+ U3VuLCAyOCBPY3QgMjAxMiAxMDowNjowOCBHTVQ=
39
+ !binary "U2VydmVy":
40
+ - !binary |-
41
+ QXBhY2hlLzIuMg==
42
+ !binary "TGFzdC1Nb2RpZmllZA==":
43
+ - !binary |-
44
+ V2VkLCAxNCBNYXIgMjAxMiAxMTo0NjoyMSBHTVQ=
45
+ !binary "RXRhZw==":
46
+ - !binary |-
47
+ ImExMTRiLTM4LTRiYjMyODYzMTlkNDAi
48
+ !binary "QWNjZXB0LVJhbmdlcw==":
49
+ - !binary |-
50
+ Ynl0ZXM=
51
+ !binary "VmFyeQ==":
52
+ - !binary |-
53
+ QWNjZXB0LUVuY29kaW5n
54
+ !binary "Q29udGVudC1FbmNvZGluZw==":
55
+ - !binary |-
56
+ Z3ppcA==
57
+ !binary "Q29udGVudC1MZW5ndGg=":
58
+ - !binary |-
59
+ NzA=
60
+ !binary "Q29udGVudC1UeXBl":
61
+ - !binary |-
62
+ dGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04
63
+ body:
64
+ encoding: ASCII-8BIT
65
+ string: !binary |-
66
+ H4sIAAAAAAAAA7PxMLQzMTBR8MsvUXDLL81LsdEHinCFZKQqFKUWlqYWl6Sm
67
+ AFnF+aVFyakKeUBVaSBVXABtZ1XKOAAAAA==
68
+ http_version:
69
+ recorded_at: Sun, 28 Oct 2012 10:06:08 GMT
70
+ recorded_with: VCR 2.2.5
data/spec/helper.rb CHANGED
@@ -20,7 +20,6 @@ end
20
20
  APPLICATION_ID = '663576cbd55948a4ae45424fb508ef97'
21
21
  APPLICATION_PASSWORD = 'fc2f76dc877e41a4a6cbe78d73faff85'
22
22
 
23
- # ACCESS_TOKEN = '926b254ca2f24869999a3d404a01f616'
24
23
  token_file = File.expand_path('../.access_token', __FILE__)
25
24
  if File.exists?(token_file)
26
25
  ACCESS_TOKEN = File.read(token_file).strip
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metrika
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-26 00:00:00.000000000 Z
12
+ date: 2012-10-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: oauth2
@@ -137,7 +137,10 @@ files:
137
137
  - spec/cases/metrika/authorization_spec.rb
138
138
  - spec/cases/metrika/counters_spec.rb
139
139
  - spec/cases/metrika_spec.rb
140
+ - spec/fixtures/cassettes/counter_237991.yml
141
+ - spec/fixtures/cassettes/counter_237992.yml
140
142
  - spec/fixtures/cassettes/counters.yml
143
+ - spec/fixtures/cassettes/non_existent_counter.yml
141
144
  - spec/helper.rb
142
145
  homepage: http://github.com/igor-alexandrov/metrika
143
146
  licenses:
@@ -154,7 +157,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
154
157
  version: '0'
155
158
  segments:
156
159
  - 0
157
- hash: -3365005199933718832
160
+ hash: 3580690976981475761
158
161
  required_rubygems_version: !ruby/object:Gem::Requirement
159
162
  none: false
160
163
  requirements: