ok_linker 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 44003b9838b2c7b86e8c62a11e079977cfba4f0b
4
- data.tar.gz: bf19d4062fee0fda113bd20a8a0d12840166c25f
3
+ metadata.gz: 3ceb4ad68239f66c806a0d727f45a5c5a95388d1
4
+ data.tar.gz: 88a90f82509fea88964efc4de7636b2ff42eefd4
5
5
  SHA512:
6
- metadata.gz: 1bf0db6afc6c6b978e7bdd1a53c0e5a0f1c5966331ad1266c61d63f3e9106c68caae660395b3658f3b2f7c51781dac1a5e7347c8026417bb536798612bb7a408
7
- data.tar.gz: 4ec0daffb379255e1ded1810d418d148ed0441bf4a2f928d50cb4e6fd6a0329516b97d6ef2210fe59af81a9a1c9a0678274f0286f41175c5ed89a3e19443c199
6
+ metadata.gz: 9c9ce31dc2d30d97884b17a245627dc430fddf4513a096836cd56baf84cafe3b7f31845d1c775bd3ed2817e0e722c16c542167f01aa4922c45942f5eac59416b
7
+ data.tar.gz: bcf1a69a56e9ea7752c6b1bfebbe9d8511b9679666ac9ab20dd23dc9d23536b5425af9a4d6e985e7d8e9a1ffe066e6c0097bcd76851549bdb8dabc96f25ddd61
@@ -0,0 +1,2 @@
1
+ # grab your API key at https://okey.link/cabinet/api
2
+ OKEY_LINK_KEY='YOUR_OKEY_LINK_KEY_HERE'
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
1
  Gemfile.lock
2
2
  .idea/
3
- *.gem
3
+ *.gem
4
+ .env
data/.rspec ADDED
@@ -0,0 +1,4 @@
1
+ --color
2
+ --require spec_helper
3
+ --order rand
4
+ --format doc
@@ -0,0 +1,15 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 1.9.3
5
+ - 2.0.0
6
+ - 2.1.5
7
+ - 2.2.2
8
+ - jruby
9
+ - rbx
10
+
11
+ install: bundle install --retry=3
12
+
13
+ addons:
14
+ code_climate:
15
+ repo_token: 538ae4e9f0bf524715e01814dd7d10657553904b7f0c21da5d92a9b052157a24
data/README.md CHANGED
@@ -1,9 +1,12 @@
1
1
  # OkLinker
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/ok_linker.svg)](https://badge.fury.io/rb/ok_linker)
4
+ [![Build Status](https://travis-ci.org/bodrovis/ok_linker.svg?branch=master)](https://travis-ci.org/bodrovis/ok_linker)
5
+ [![Code Climate](https://codeclimate.com/github/bodrovis/ok_linker/badges/gpa.svg)](https://codeclimate.com/github/bodrovis/ok_linker)
6
+ [![Test Coverage](https://codeclimate.com/github/bodrovis/ok_linker/badges/coverage.svg)](https://codeclimate.com/github/bodrovis/ok_linker/coverage)
4
7
  [![Dependency Status](https://gemnasium.com/bodrovis/ok_linker.svg)](https://gemnasium.com/bodrovis/ok_linker)
5
8
 
6
- Ruby gem to work with Odnoklassniki's URL shortening service [okey.link](http://okey.link).
9
+ Ruby gem to work with Odnoklassniki's URL shortening service [okey.link](http://okey.link). Tested against Ruby 1.9.3, 2.0, 2.1, 2.2, jRuby and rbx.
7
10
 
8
11
  ## Installation
9
12
 
@@ -25,6 +28,18 @@ to gain access.
25
28
  After logging in, copy your API access token from the [API section](https://okey.link/cabinet/api). This token
26
29
  has unlimited lifetime and has to be stored securely.
27
30
 
31
+ ### Instantiating a Client
32
+
33
+ Create a new client by typing
34
+
35
+ client = OkLinker::Client.new(opts)
36
+
37
+ or simply with
38
+
39
+ client = OkLinker.new(opts)
40
+
41
+ You can now call OkLinker's [methods](https://github.com/bodrovis/ok_linker#calling-methods).
42
+
28
43
  ### Configuration
29
44
 
30
45
  OkLinker does not require much configuration. The only thing that you need to provide is your access token.
@@ -53,8 +68,8 @@ clicks(url) # Get clicks statistics for the given URL
53
68
 
54
69
  urls(params) # Get a list of shortened URLs.
55
70
  # Allowed options:
56
- # * :epp - integer, optional. Elements per page. Default is 20.
57
- # * :page - integer, optional. Page to fetch. Default is 1.
71
+ ## :epp - integer, optional. Elements per page. Default is 20.
72
+ ## :page - integer, optional. Page to fetch. Default is 1.
58
73
  ```
59
74
 
60
75
  Also, you can call raw methods:
@@ -71,9 +86,13 @@ For example,
71
86
 
72
87
  These methods always return JSON or one of the errors listed [here](https://github.com/bodrovis/ok_linker/blob/master/lib/ok_linker/error.rb#L18).
73
88
 
74
- ## Todo
89
+ ## Testing
90
+
91
+ Rename `.env.sample` to `.env` and assign `OKEY_LINK_KEY` to your API key. This file is excluded from version control, so your token won't be exposed.
92
+
93
+ Then run
75
94
 
76
- * Write tests
95
+ $ bundle exec rspec .
77
96
 
78
97
  ## License
79
98
 
@@ -0,0 +1,6 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task default: :spec
@@ -2,7 +2,7 @@ module OkLinker
2
2
  class Config
3
3
  VALID_OPTIONS_KEYS = [:access_token].freeze
4
4
 
5
- attr_accessor *VALID_OPTIONS_KEYS
5
+ attr_accessor(*VALID_OPTIONS_KEYS)
6
6
 
7
7
  def self.configure
8
8
  config = self.new
@@ -16,7 +16,6 @@ module OkLinker
16
16
  NotImplemented = Class.new(ServerError)
17
17
 
18
18
  ERRORS = {
19
- 200 => OkLinker::Error::ClientError,
20
19
  400 => OkLinker::Error::BadRequest,
21
20
  401 => OkLinker::Error::Unauthorized,
22
21
  403 => OkLinker::Error::Forbidden,
@@ -1,3 +1,3 @@
1
1
  module OkLinker
2
- VERSION = '0.1.0'
2
+ VERSION = '0.2.0'
3
3
  end
@@ -1,26 +1,30 @@
1
1
  require File.expand_path("../lib/ok_linker/version", __FILE__)
2
2
 
3
3
  Gem::Specification.new do |spec|
4
- spec.name = "ok_linker"
5
- spec.version = OkLinker::VERSION
6
- spec.authors = ["Ilya Bodrov"]
7
- spec.email = ["golosizpru@gmail.com"]
8
- spec.summary = %q{Ruby gem for okey.link API.}
9
- spec.description = %q{Ruby gem for Odnoklassniki's URL shortening service okey.link.}
10
- spec.homepage = "https://github.com/bodrovis/ok_linker"
11
- spec.license = "MIT"
12
- spec.platform = Gem::Platform::RUBY
4
+ spec.name = "ok_linker"
5
+ spec.version = OkLinker::VERSION
6
+ spec.authors = ["Ilya Bodrov"]
7
+ spec.email = ["golosizpru@gmail.com"]
8
+ spec.summary = %q{Ruby gem for okey.link API.}
9
+ spec.description = %q{Ruby gem for Odnoklassniki's URL shortening service okey.link.}
10
+ spec.homepage = "https://github.com/bodrovis/ok_linker"
11
+ spec.license = "MIT"
12
+ spec.platform = Gem::Platform::RUBY
13
13
 
14
- spec.files = `git ls-files -z`.split("\x0")
15
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
16
- spec.require_paths = ["lib"]
14
+ spec.files = `git ls-files`.split("\n")
15
+ spec.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ spec.extra_rdoc_files = ["README.md"]
17
+ spec.require_paths = ["lib"]
17
18
 
18
- spec.add_dependency "faraday", "~> 0.9"
19
- spec.add_dependency "faraday_middleware", "~> 0.9"
20
- spec.add_dependency "multi_json", "~> 1.11"
19
+ spec.add_runtime_dependency "faraday", "~> 0.9"
20
+ spec.add_runtime_dependency "faraday_middleware", "~> 0.9"
21
+ spec.add_runtime_dependency "multi_json", "~> 1.11"
21
22
 
22
- spec.add_development_dependency "rake", "~> 10.4"
23
- spec.add_development_dependency "rspec", "~> 3.4"
24
- spec.add_development_dependency "pry", "0.10.3"
25
- spec.add_development_dependency "vcr", "~> 3.0", ">= 3.0.0"
23
+ spec.add_development_dependency "rake", "~> 10.4"
24
+ spec.add_development_dependency "rspec", "~> 3.4"
25
+ spec.add_development_dependency "pry", "0.10.3"
26
+ spec.add_development_dependency "vcr", "~> 3.0", ">= 3.0.0"
27
+ spec.add_development_dependency "dotenv", "~> 2.0"
28
+ spec.add_development_dependency "webmock", "~> 1.22"
29
+ spec.add_development_dependency "codeclimate-test-reporter", "~> 0"
26
30
  end
@@ -0,0 +1,51 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://okey.link/api/v1/get-urls?epp=2&page=1
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - application/json
12
+ User-Agent:
13
+ - ok_linker ruby gem/0.1.0
14
+ Access-Token:
15
+ - "<OKEY_LINK_KEY>"
16
+ Accept-Encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ Server:
24
+ - nginx/1.9.5
25
+ Content-Type:
26
+ - application/json
27
+ Transfer-Encoding:
28
+ - chunked
29
+ Connection:
30
+ - keep-alive
31
+ Vary:
32
+ - Accept-Encoding
33
+ Set-Cookie:
34
+ - core_cookie=3a8e4rhaDb3R4TCerMdh00bj9GGykcAL; expires=Fri, 25-Nov-2016 19:11:47
35
+ GMT; Max-Age=31536000; path=/
36
+ Cache-Control:
37
+ - no-cache
38
+ Date:
39
+ - Thu, 26 Nov 2015 19:11:47 GMT
40
+ Strict-Transport-Security:
41
+ - max-age=31536000;
42
+ Content-Security-Policy-Report-Only:
43
+ - 'default-src https:; script-src https: ''unsafe-eval'' ''unsafe-inline'';
44
+ style-src https: ''unsafe-inline''; img-src https: data:; font-src https:
45
+ data:; report-uri /csp-report'
46
+ body:
47
+ encoding: UTF-8
48
+ string: '{"result":true,"data":{"urls":[],"pages":{"current":1,"total":0,"epp":2}}}'
49
+ http_version:
50
+ recorded_at: Thu, 26 Nov 2015 19:11:40 GMT
51
+ recorded_with: VCR 3.0.0
@@ -0,0 +1,53 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://okey.link/api/v1/hide-url
6
+ body:
7
+ encoding: UTF-8
8
+ string: url=http%3A%2F%2Fexample.com
9
+ headers:
10
+ Accept:
11
+ - application/json
12
+ User-Agent:
13
+ - ok_linker ruby gem/0.1.0
14
+ Access-Token:
15
+ - "<OKEY_LINK_KEY>"
16
+ Content-Type:
17
+ - application/x-www-form-urlencoded
18
+ Accept-Encoding:
19
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Server:
26
+ - nginx/1.9.5
27
+ Content-Type:
28
+ - application/json
29
+ Transfer-Encoding:
30
+ - chunked
31
+ Connection:
32
+ - keep-alive
33
+ Vary:
34
+ - Accept-Encoding
35
+ Set-Cookie:
36
+ - core_cookie=ZPxh4809PUXXBEHPZ16mh9AdCTQatvw9; expires=Fri, 25-Nov-2016 19:07:59
37
+ GMT; Max-Age=31536000; path=/
38
+ Cache-Control:
39
+ - no-cache
40
+ Date:
41
+ - Thu, 26 Nov 2015 19:07:59 GMT
42
+ Strict-Transport-Security:
43
+ - max-age=31536000;
44
+ Content-Security-Policy-Report-Only:
45
+ - 'default-src https:; script-src https: ''unsafe-eval'' ''unsafe-inline'';
46
+ style-src https: ''unsafe-inline''; img-src https: data:; font-src https:
47
+ data:; report-uri /csp-report'
48
+ body:
49
+ encoding: UTF-8
50
+ string: '{"result":true}'
51
+ http_version:
52
+ recorded_at: Thu, 26 Nov 2015 19:07:52 GMT
53
+ recorded_with: VCR 3.0.0
@@ -0,0 +1,43 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://okey.link/api/v1/some-test-method
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - application/json
12
+ User-Agent:
13
+ - ok_linker ruby gem/0.1.0
14
+ Access-Token:
15
+ - "<OKEY_LINK_KEY>"
16
+ Accept-Encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ response:
19
+ status:
20
+ code: 501
21
+ message: Not Implemented
22
+ headers:
23
+ Server:
24
+ - nginx/1.9.5
25
+ Content-Type:
26
+ - text/plain;charset=UTF-8
27
+ Transfer-Encoding:
28
+ - chunked
29
+ Connection:
30
+ - keep-alive
31
+ Set-Cookie:
32
+ - core_cookie=z9JY67P2UqYOzjOb3aSGTDcSmni1ly1J; expires=Fri, 25-Nov-2016 18:54:26
33
+ GMT; Max-Age=31536000; path=/
34
+ Cache-Control:
35
+ - no-cache
36
+ Date:
37
+ - Thu, 26 Nov 2015 18:54:26 GMT
38
+ body:
39
+ encoding: UTF-8
40
+ string: Method not found
41
+ http_version:
42
+ recorded_at: Thu, 26 Nov 2015 18:54:19 GMT
43
+ recorded_with: VCR 3.0.0
@@ -0,0 +1,51 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://okey.link/api/v1/get-urls?epp=1
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - application/json
12
+ User-Agent:
13
+ - ok_linker ruby gem/0.1.0
14
+ Access-Token:
15
+ - "<OKEY_LINK_KEY>"
16
+ Accept-Encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ Server:
24
+ - nginx/1.9.5
25
+ Content-Type:
26
+ - application/json
27
+ Transfer-Encoding:
28
+ - chunked
29
+ Connection:
30
+ - keep-alive
31
+ Vary:
32
+ - Accept-Encoding
33
+ Set-Cookie:
34
+ - core_cookie=8j2maHsCdFxyp4oJdqUb4bwJmmA9iawq; expires=Fri, 25-Nov-2016 18:57:34
35
+ GMT; Max-Age=31536000; path=/
36
+ Cache-Control:
37
+ - no-cache
38
+ Date:
39
+ - Thu, 26 Nov 2015 18:57:34 GMT
40
+ Strict-Transport-Security:
41
+ - max-age=31536000;
42
+ Content-Security-Policy-Report-Only:
43
+ - 'default-src https:; script-src https: ''unsafe-eval'' ''unsafe-inline'';
44
+ style-src https: ''unsafe-inline''; img-src https: data:; font-src https:
45
+ data:; report-uri /csp-report'
46
+ body:
47
+ encoding: UTF-8
48
+ string: '{"result":true,"data":{"urls":[{"url":"http:\/\/example.com","short":"http:\/\/okey.link\/529Y","clicks":0,"cpd":0}],"pages":{"current":1,"total":1,"epp":1}}}'
49
+ http_version:
50
+ recorded_at: Thu, 26 Nov 2015 18:57:26 GMT
51
+ recorded_with: VCR 3.0.0
@@ -0,0 +1,53 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://okey.link/api/v1/make-short-url
6
+ body:
7
+ encoding: UTF-8
8
+ string: url=http%3A%2F%2Fexample.com
9
+ headers:
10
+ Accept:
11
+ - application/json
12
+ User-Agent:
13
+ - ok_linker ruby gem/0.1.0
14
+ Access-Token:
15
+ - "<OKEY_LINK_KEY>"
16
+ Content-Type:
17
+ - application/x-www-form-urlencoded
18
+ Accept-Encoding:
19
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Server:
26
+ - nginx/1.9.5
27
+ Content-Type:
28
+ - application/json
29
+ Transfer-Encoding:
30
+ - chunked
31
+ Connection:
32
+ - keep-alive
33
+ Vary:
34
+ - Accept-Encoding
35
+ Set-Cookie:
36
+ - core_cookie=58APyl62mLrupKxLh4qlZN6OBDTPBrWz; expires=Fri, 25-Nov-2016 18:59:41
37
+ GMT; Max-Age=31536000; path=/
38
+ Cache-Control:
39
+ - no-cache
40
+ Date:
41
+ - Thu, 26 Nov 2015 18:59:41 GMT
42
+ Strict-Transport-Security:
43
+ - max-age=31536000;
44
+ Content-Security-Policy-Report-Only:
45
+ - 'default-src https:; script-src https: ''unsafe-eval'' ''unsafe-inline'';
46
+ style-src https: ''unsafe-inline''; img-src https: data:; font-src https:
47
+ data:; report-uri /csp-report'
48
+ body:
49
+ encoding: UTF-8
50
+ string: '{"result":true,"data":{"url":"http:\/\/example.com","short":"okey.link\/52cD"}}'
51
+ http_version:
52
+ recorded_at: Thu, 26 Nov 2015 18:59:34 GMT
53
+ recorded_with: VCR 3.0.0
@@ -0,0 +1,53 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://okey.link/api/v1/make-short-url
6
+ body:
7
+ encoding: UTF-8
8
+ string: url=http%3A%2F%2Fexample.com
9
+ headers:
10
+ Accept:
11
+ - application/json
12
+ User-Agent:
13
+ - ok_linker ruby gem/0.1.0
14
+ Access-Token:
15
+ - "<OKEY_LINK_KEY>"
16
+ Content-Type:
17
+ - application/x-www-form-urlencoded
18
+ Accept-Encoding:
19
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Server:
26
+ - nginx/1.9.5
27
+ Content-Type:
28
+ - application/json
29
+ Transfer-Encoding:
30
+ - chunked
31
+ Connection:
32
+ - keep-alive
33
+ Vary:
34
+ - Accept-Encoding
35
+ Set-Cookie:
36
+ - core_cookie=9MCxjMJvbrWHL1PaZ6gULGeP5lyIsffZ; expires=Fri, 25-Nov-2016 18:21:02
37
+ GMT; Max-Age=31536000; path=/
38
+ Cache-Control:
39
+ - no-cache
40
+ Date:
41
+ - Thu, 26 Nov 2015 18:21:02 GMT
42
+ Strict-Transport-Security:
43
+ - max-age=31536000;
44
+ Content-Security-Policy-Report-Only:
45
+ - 'default-src https:; script-src https: ''unsafe-eval'' ''unsafe-inline'';
46
+ style-src https: ''unsafe-inline''; img-src https: data:; font-src https:
47
+ data:; report-uri /csp-report'
48
+ body:
49
+ encoding: UTF-8
50
+ string: '{"result":true,"data":{"url":"http:\/\/example.com","short":"okey.link\/529Y"}}'
51
+ http_version:
52
+ recorded_at: Thu, 26 Nov 2015 18:20:55 GMT
53
+ recorded_with: VCR 3.0.0
@@ -0,0 +1,47 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://okey.link/api/v1/make-short-url
6
+ body:
7
+ encoding: UTF-8
8
+ string: url=http%3A%2F%2Fexample.com
9
+ headers:
10
+ Accept:
11
+ - application/json
12
+ User-Agent:
13
+ - ok_linker ruby gem/0.1.0
14
+ Access-Token:
15
+ - '1'
16
+ Content-Type:
17
+ - application/x-www-form-urlencoded
18
+ Accept-Encoding:
19
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
20
+ response:
21
+ status:
22
+ code: 403
23
+ message: Forbidden
24
+ headers:
25
+ Server:
26
+ - nginx/1.9.5
27
+ Content-Type:
28
+ - text/plain;charset=UTF-8
29
+ Transfer-Encoding:
30
+ - chunked
31
+ Connection:
32
+ - keep-alive
33
+ Vary:
34
+ - Accept-Encoding
35
+ Set-Cookie:
36
+ - core_cookie=BRHgO8xwzgniHdWqdV6qdcgab2Mq2t4M; expires=Fri, 25-Nov-2016 18:44:16
37
+ GMT; Max-Age=31536000; path=/
38
+ Cache-Control:
39
+ - no-cache
40
+ Date:
41
+ - Thu, 26 Nov 2015 18:44:16 GMT
42
+ body:
43
+ encoding: UTF-8
44
+ string: Forbidden
45
+ http_version:
46
+ recorded_at: Thu, 26 Nov 2015 18:44:09 GMT
47
+ recorded_with: VCR 3.0.0
@@ -0,0 +1,45 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://okey.link/api/v1/make-short-url
6
+ body:
7
+ encoding: UTF-8
8
+ string: url=
9
+ headers:
10
+ Accept:
11
+ - application/json
12
+ User-Agent:
13
+ - ok_linker ruby gem/0.1.0
14
+ Access-Token:
15
+ - "<OKEY_LINK_KEY>"
16
+ Content-Type:
17
+ - application/x-www-form-urlencoded
18
+ Accept-Encoding:
19
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
20
+ response:
21
+ status:
22
+ code: 400
23
+ message: Bad Request
24
+ headers:
25
+ Server:
26
+ - nginx/1.9.5
27
+ Content-Type:
28
+ - text/plain;charset=UTF-8
29
+ Transfer-Encoding:
30
+ - chunked
31
+ Connection:
32
+ - keep-alive
33
+ Set-Cookie:
34
+ - core_cookie=DMmMHJlZ4dtoYM0qERO3fRftORHPdNrR; expires=Fri, 25-Nov-2016 18:51:51
35
+ GMT; Max-Age=31536000; path=/
36
+ Cache-Control:
37
+ - no-cache
38
+ Date:
39
+ - Thu, 26 Nov 2015 18:51:51 GMT
40
+ body:
41
+ encoding: UTF-8
42
+ string: Required parameters missing.
43
+ http_version:
44
+ recorded_at: Thu, 26 Nov 2015 18:51:43 GMT
45
+ recorded_with: VCR 3.0.0
@@ -0,0 +1,45 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://okey.link/api/v1/make-short-url
6
+ body:
7
+ encoding: UTF-8
8
+ string: url=http%3A%2F%2Fexample.com
9
+ headers:
10
+ Accept:
11
+ - application/json
12
+ User-Agent:
13
+ - ok_linker ruby gem/0.1.0
14
+ Access-Token:
15
+ - ''
16
+ Content-Type:
17
+ - application/x-www-form-urlencoded
18
+ Accept-Encoding:
19
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
20
+ response:
21
+ status:
22
+ code: 401
23
+ message: Unauthorized
24
+ headers:
25
+ Server:
26
+ - nginx/1.9.5
27
+ Content-Type:
28
+ - text/plain;charset=UTF-8
29
+ Transfer-Encoding:
30
+ - chunked
31
+ Connection:
32
+ - keep-alive
33
+ Set-Cookie:
34
+ - core_cookie=M2gzVBvMGY8I4Hde0Rh0cIRSEusaixm5; expires=Fri, 25-Nov-2016 18:53:10
35
+ GMT; Max-Age=31536000; path=/
36
+ Cache-Control:
37
+ - no-cache
38
+ Date:
39
+ - Thu, 26 Nov 2015 18:53:10 GMT
40
+ body:
41
+ encoding: UTF-8
42
+ string: Authorization required
43
+ http_version:
44
+ recorded_at: Thu, 26 Nov 2015 18:53:03 GMT
45
+ recorded_with: VCR 3.0.0
@@ -0,0 +1,51 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://okey.link/api/v1/get-url-clicks?url=http://example.com
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - application/json
12
+ User-Agent:
13
+ - ok_linker ruby gem/0.1.0
14
+ Access-Token:
15
+ - "<OKEY_LINK_KEY>"
16
+ Accept-Encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ Server:
24
+ - nginx/1.9.5
25
+ Content-Type:
26
+ - application/json
27
+ Transfer-Encoding:
28
+ - chunked
29
+ Connection:
30
+ - keep-alive
31
+ Vary:
32
+ - Accept-Encoding
33
+ Set-Cookie:
34
+ - core_cookie=fRJyH4BnrK4R386esDrQFjEbnx7P2oAc; expires=Fri, 25-Nov-2016 19:09:38
35
+ GMT; Max-Age=31536000; path=/
36
+ Cache-Control:
37
+ - no-cache
38
+ Date:
39
+ - Thu, 26 Nov 2015 19:09:38 GMT
40
+ Strict-Transport-Security:
41
+ - max-age=31536000;
42
+ Content-Security-Policy-Report-Only:
43
+ - 'default-src https:; script-src https: ''unsafe-eval'' ''unsafe-inline'';
44
+ style-src https: ''unsafe-inline''; img-src https: data:; font-src https:
45
+ data:; report-uri /csp-report'
46
+ body:
47
+ encoding: UTF-8
48
+ string: '{"result":true,"data":{"url":"http:\/\/example.com","short":"http:\/\/okey.link\/4dyj","clicks":0,"cpd":0}}'
49
+ http_version:
50
+ recorded_at: Thu, 26 Nov 2015 19:09:31 GMT
51
+ recorded_with: VCR 3.0.0
@@ -0,0 +1,81 @@
1
+ RSpec.describe OkLinker::Client do
2
+ let(:full_url) { 'http://example.com' }
3
+
4
+ specify "#shorten" do
5
+ response = VCR.use_cassette("ShortenUrl") do
6
+ test_client.shorten(full_url)
7
+ end
8
+ expect(response['data']['url']).to eq full_url
9
+ expect(response['data']['short']).not_to be_empty
10
+ expect(response['result']).to be true
11
+ end
12
+
13
+ specify "#get" do
14
+ response = VCR.use_cassette("RawGet") do
15
+ test_client.get('get-urls', epp: 1)
16
+ end
17
+ expect(response['result']).to be true
18
+ expect(response['data']['pages']['epp']).to eq 1
19
+ end
20
+
21
+ specify "#post" do
22
+ response = VCR.use_cassette("RawPost") do
23
+ test_client.post('make-short-url', url: full_url)
24
+ end
25
+ expect(response['data']['url']).to eq full_url
26
+ expect(response['data']['short']).not_to be_empty
27
+ expect(response['result']).to be true
28
+ end
29
+
30
+ specify "#hide" do
31
+ response = VCR.use_cassette("HideUrl") do
32
+ test_client.hide(full_url)
33
+ end
34
+ expect(response['result']).to be true
35
+ end
36
+
37
+ specify "#clicks" do
38
+ response = VCR.use_cassette("UrlClicks") do
39
+ test_client.clicks(full_url)
40
+ end
41
+ expect(response['result']).to be true
42
+ expect(response['data']['url']).to eq full_url
43
+ expect(response['data']['clicks']).to eq 0
44
+ expect(response['data']['cpd']).to eq 0
45
+ end
46
+
47
+ specify "#urls" do
48
+ response = VCR.use_cassette("GetUrls") do
49
+ test_client.urls(page: 1, epp: 2)
50
+ end
51
+ expect(response['result']).to be true
52
+ expect(response['data']['pages']['current']).to eq 1
53
+ expect(response['data']['pages']['epp']).to eq 2
54
+ end
55
+
56
+ context "errors" do
57
+ it "should raise OkLinker::Error::Forbidden if access token is not valid" do
58
+ VCR.use_cassette("ShortenUrlWithInvalidToken") do
59
+ expect { test_client('1').shorten(full_url) }.to raise_error(OkLinker::Error::Forbidden)
60
+ end
61
+ end
62
+
63
+ it "should raise OkLinker::Error::BadRequest if required attributes are not provided" do
64
+ VCR.use_cassette("ShortenUrlWithMissingParams") do
65
+ expect { test_client.shorten('') }.to raise_error(OkLinker::Error::BadRequest)
66
+ end
67
+ end
68
+
69
+ it "should raise OkLinker::Error::Unauthorized if access_token is not provided" do
70
+ VCR.use_cassette("ShortenUrlWithMissingToken") do
71
+ expect { test_client('').shorten(full_url) }.to raise_error(OkLinker::Error::Unauthorized)
72
+ end
73
+ end
74
+
75
+ it "should raise OkLinker::Error::NotImplemented if non-existent method is requested" do
76
+ VCR.use_cassette("NonExistentMethod") do
77
+ expect { test_client.get('some-test-method') }.to raise_error(OkLinker::Error::NotImplemented)
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,7 @@
1
+ RSpec.describe OkLinker::Error do
2
+ let(:message) {'error message'}
3
+ it "creates a proper error from response" do
4
+ error = OkLinker::Error.from_response(message)
5
+ expect(error.message).to eq message
6
+ end
7
+ end
@@ -0,0 +1,29 @@
1
+ RSpec.describe OkLinker do
2
+ specify ".new" do
3
+ client = OkLinker.new
4
+ expect(client).to be_an_instance_of OkLinker::Client
5
+ end
6
+
7
+ describe "configuration" do
8
+ let(:access_token) {SecureRandom.hex}
9
+ it "accepts config options" do
10
+ OkLinker.configure do |c|
11
+ c.access_token = access_token
12
+ end
13
+ expect(OkLinker.options[:access_token]).to eq access_token
14
+ end
15
+
16
+ it "accepts config options when creating client" do
17
+ client = OkLinker::Client.new(access_token: access_token)
18
+ expect(client.instance_variable_get('@access_token')).to eq access_token
19
+ end
20
+
21
+ it "is possible to pass config block to OkLinker.config" do
22
+ config = OkLinker::Config.configure do |c|
23
+ c.access_token = access_token
24
+ end
25
+ OkLinker.config = config
26
+ expect(OkLinker.config).to eq config
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,21 @@
1
+ require "codeclimate-test-reporter"
2
+ CodeClimate::TestReporter.start
3
+
4
+ require 'dotenv'
5
+ require 'pry'
6
+ Dotenv.load
7
+
8
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
9
+ require 'ok_linker'
10
+
11
+ module SpecHelper
12
+ def test_client(access_token = nil)
13
+ return if @client && !access_token
14
+
15
+ @client = OkLinker::Client.new(access_token: access_token || ENV.fetch("OKEY_LINK_KEY"))
16
+ end
17
+ end
18
+
19
+ RSpec.configure do |config|
20
+ config.include SpecHelper
21
+ end
@@ -0,0 +1,14 @@
1
+ require 'vcr'
2
+
3
+ VCR.configure do |c|
4
+ c.ignore_hosts "codeclimate.com"
5
+ c.allow_http_connections_when_no_cassette = true
6
+ c.hook_into :webmock
7
+ c.cassette_library_dir = File.join(File.dirname(__FILE__), "..", "fixtures", "vcr_cassettes")
8
+ c.configure_rspec_metadata!
9
+ c.filter_sensitive_data("<OKEY_LINK_KEY>") { ENV.fetch("OKEY_LINK_KEY") }
10
+
11
+ c.before_record do |i|
12
+ i.response.body.force_encoding("UTF-8")
13
+ end
14
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ok_linker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ilya Bodrov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-25 00:00:00.000000000 Z
11
+ date: 2015-11-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -114,17 +114,64 @@ dependencies:
114
114
  - - ">="
115
115
  - !ruby/object:Gem::Version
116
116
  version: 3.0.0
117
+ - !ruby/object:Gem::Dependency
118
+ name: dotenv
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '2.0'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '2.0'
131
+ - !ruby/object:Gem::Dependency
132
+ name: webmock
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '1.22'
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '1.22'
145
+ - !ruby/object:Gem::Dependency
146
+ name: codeclimate-test-reporter
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ type: :development
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - "~>"
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
117
159
  description: Ruby gem for Odnoklassniki's URL shortening service okey.link.
118
160
  email:
119
161
  - golosizpru@gmail.com
120
162
  executables: []
121
163
  extensions: []
122
- extra_rdoc_files: []
164
+ extra_rdoc_files:
165
+ - README.md
123
166
  files:
167
+ - ".env.sample"
124
168
  - ".gitignore"
169
+ - ".rspec"
170
+ - ".travis.yml"
125
171
  - Gemfile
126
172
  - LICENSE
127
173
  - README.md
174
+ - Rakefile
128
175
  - lib/ok_linker.rb
129
176
  - lib/ok_linker/client.rb
130
177
  - lib/ok_linker/config.rb
@@ -133,6 +180,21 @@ files:
133
180
  - lib/ok_linker/request.rb
134
181
  - lib/ok_linker/version.rb
135
182
  - ok_linker.gemspec
183
+ - spec/fixtures/vcr_cassettes/GetUrls.yml
184
+ - spec/fixtures/vcr_cassettes/HideUrl.yml
185
+ - spec/fixtures/vcr_cassettes/NonExistentMethod.yml
186
+ - spec/fixtures/vcr_cassettes/RawGet.yml
187
+ - spec/fixtures/vcr_cassettes/RawPost.yml
188
+ - spec/fixtures/vcr_cassettes/ShortenUrl.yml
189
+ - spec/fixtures/vcr_cassettes/ShortenUrlWithInvalidToken.yml
190
+ - spec/fixtures/vcr_cassettes/ShortenUrlWithMissingParams.yml
191
+ - spec/fixtures/vcr_cassettes/ShortenUrlWithMissingToken.yml
192
+ - spec/fixtures/vcr_cassettes/UrlClicks.yml
193
+ - spec/lib/ok_linker/client_spec.rb
194
+ - spec/lib/ok_linker/error_spec.rb
195
+ - spec/lib/ok_linker_spec.rb
196
+ - spec/spec_helper.rb
197
+ - spec/support/vcr.rb
136
198
  homepage: https://github.com/bodrovis/ok_linker
137
199
  licenses:
138
200
  - MIT