ruby-bitly 0.1.7 → 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: ff50be2b324d891776449f31237b35f8d95aa265
4
- data.tar.gz: c99ae534047471483cc3585e2d7dc35d6b5793d5
3
+ metadata.gz: d8e00677c2229d902e7a313440f78d6e87a94a60
4
+ data.tar.gz: 033846db3c3691ade37782e9f436022f2aa2e090
5
5
  SHA512:
6
- metadata.gz: 3f6f11d961827a80b1d76f32e8432d7b2aa773e9db87ea6cb8a64ba691ea7c768ec3f9b107150d53d148c551f16773e13ff4f6b788b864a42b032a7944f809ac
7
- data.tar.gz: c2e528bc64410d3611886f326475c3c5b99bffc124343d90fbece352e5acf76af3a89160ed35440827e8e359dc318b23fc81a95c2cf55a017fa57e4138c0c259
6
+ metadata.gz: 7fd6f69ce0a634a1328f0ce699be96b524661cc1f1d6105c15d0c6fdbd36876c41d4a18d8e42607ac499007d60214f41964e7967cec7d81ffc96793b45d5e7bd
7
+ data.tar.gz: bf4b2ee95401e3efdf5615c844432a64eae8c5af684321fb20eac07a73d9eee0e5f0584c45aadba4b56e3298151ad7c903576634f57b75212df1d99848bdceb5
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ - 2.1.10
5
+ - 2.2.5
6
+ - 2.3.1
data/CHANGELOG CHANGED
@@ -1,3 +1,10 @@
1
+ # 0.2.0
2
+
3
+ - Add http_proxy support by default
4
+ - Add proxy configuration support
5
+ - Add ssl support by default
6
+ - Add global config support
7
+
1
8
  # 0.1.7
2
9
 
3
10
  - Add new possibility to use named parameters
data/Gemfile CHANGED
@@ -2,15 +2,3 @@ source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in ruby-bitly.gemspec
4
4
  gemspec
5
-
6
- group :development, :test do
7
-
8
- platforms :ruby_18 do
9
- gem 'ruby-debug'
10
- end
11
-
12
- platforms :ruby_19, :ruby_20 do
13
- gem 'debugger', '1.6.5'
14
- end
15
-
16
- end
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ruby-bitly (0.1.7)
4
+ ruby-bitly (0.2.0)
5
5
  rest-client (~> 2.0)
6
6
 
7
7
  GEM
@@ -9,22 +9,14 @@ GEM
9
9
  specs:
10
10
  addressable (2.4.0)
11
11
  byebug (9.0.6)
12
- columnize (0.9.0)
13
12
  crack (0.4.3)
14
13
  safe_yaml (~> 1.0.0)
15
- debugger (1.6.5)
16
- columnize (>= 0.3.1)
17
- debugger-linecache (~> 1.2.0)
18
- debugger-ruby_core_source (~> 1.3.1)
19
- debugger-linecache (1.2.0)
20
- debugger-ruby_core_source (1.3.8)
21
14
  diff-lcs (1.2.5)
22
15
  domain_name (0.5.20160826)
23
16
  unf (>= 0.0.5, < 1.0.0)
24
17
  hashdiff (0.3.0)
25
18
  http-cookie (1.0.3)
26
19
  domain_name (~> 0.5)
27
- linecache (1.3.1)
28
20
  mime-types (3.1)
29
21
  mime-types-data (~> 3.2015)
30
22
  mime-types-data (3.2016.0521)
@@ -47,11 +39,6 @@ GEM
47
39
  diff-lcs (>= 1.2.0, < 2.0)
48
40
  rspec-support (~> 3.5.0)
49
41
  rspec-support (3.5.0)
50
- ruby-debug (0.10.4)
51
- columnize (>= 0.1)
52
- ruby-debug-base (~> 0.10.4.0)
53
- ruby-debug-base (0.10.4)
54
- linecache (>= 0.3)
55
42
  safe_yaml (1.0.4)
56
43
  unf (0.1.4)
57
44
  unf_ext
@@ -67,13 +54,11 @@ PLATFORMS
67
54
 
68
55
  DEPENDENCIES
69
56
  byebug
70
- debugger (= 1.6.5)
71
57
  rake
72
58
  rspec (~> 3.5)
73
59
  ruby-bitly!
74
- ruby-debug
75
60
  vcr (~> 3.0)
76
61
  webmock (~> 2.1)
77
62
 
78
63
  BUNDLED WITH
79
- 1.13.1
64
+ 1.13.2
@@ -1,17 +1,49 @@
1
1
  = A simple bit.ly ruby client.
2
2
 
3
+ {<img src="https://travis-ci.org/dx7/ruby-bitly.svg?branch=master" alt="Build Status" />}[https://travis-ci.org/dx7/ruby-bitly]
3
4
  {<img src="https://codeclimate.com/github/dx7/ruby-bitly/badges/gpa.svg" />}[https://codeclimate.com/github/dx7/ruby-bitly]
4
5
 
5
6
 
6
- == Shorten
7
+ == Configuration
8
+ You need to load the gem:
9
+
7
10
  require 'ruby-bitly'
8
11
 
9
- # old way (deprecated)
12
+ Set global configuration:
13
+
14
+ Bitly.config do |c|
15
+ c.login = 'login-here'
16
+ c.api_key = 'key-here'
17
+ c.key = 'key-here' # deprecated: use api_key instead
18
+ c.use_ssl = false # read more below
19
+ c.proxy = 'http://localhost:8888' # read more below
20
+ end
21
+
22
+ Or set them individualy:
23
+
24
+ Bitly.login = 'login-here'
25
+ Bitly.api_key = 'key-here'
26
+ Bitly.key = 'key-here' # deprecated: use api_key instead
27
+ Bitly.use_ssl = false # read more below
28
+ Bitly.proxy = 'http://localhost:8888' # read more below
29
+
30
+ Or set them on methods if you prefer (see it below).
31
+
32
+
33
+ == Shorten
34
+ # old way
35
+ bitly = Bitly.shorten("https://dx7.github.io/")
36
+
37
+ # old way setting local configuration
10
38
  bitly = Bitly.shorten("https://dx7.github.io/", "login-here", "key-here")
11
39
 
12
40
  # new way
13
- bitly = Bitly.shorten(long_url: "https://dx7.github.io/", login: "login-here", api_key: "key-here")
41
+ bitly = Bitly.shorten(long_url: "https://dx7.github.io/")
42
+
43
+ # new way setting local configuration
44
+ bitly = Bitly.shorten(long_url: "https://dx7.github.io/", login: "login-here", api_key: "key-here", domain: "my.do")
14
45
 
46
+ # result
15
47
  bitly.url #=> "http://bit.ly/2dAjjfo"
16
48
 
17
49
  y bitly
@@ -26,14 +58,19 @@
26
58
 
27
59
 
28
60
  == Expand
29
- require 'ruby-bitly'
61
+ # old way
62
+ bitly = Bitly.expand("http://bit.ly/2dAjjfo")
30
63
 
31
- # old way (deprecated)
64
+ # old way setting local configuration
32
65
  bitly = Bitly.expand("http://bit.ly/2dAjjfo", "login-here", "key-here")
33
66
 
34
67
  # new way
68
+ bitly = Bitly.expand(short_url: "http://bit.ly/2dAjjfo")
69
+
70
+ # new way setting local configuration
35
71
  bitly = Bitly.expand(short_url: "http://bit.ly/2dAjjfo", login: "login-here", api_key: "key-here")
36
72
 
73
+ # result
37
74
  y bitly
38
75
  :short_url: http://bit.ly/2dAjjfo
39
76
  :long_url: https://dx7.github.io/
@@ -44,14 +81,19 @@
44
81
 
45
82
 
46
83
  == Get Clicks
47
- require 'ruby-bitly'
84
+ # old way
85
+ bitly = Bitly.get_clicks("http://bit.ly/2dAjjfo")
48
86
 
49
- # old way (deprecated)
87
+ # old way setting local configuration
50
88
  bitly = Bitly.get_clicks("http://bit.ly/2dAjjfo", "login-here", "key-here")
51
89
 
52
90
  # new way
91
+ bitly = Bitly.get_clicks(short_url: "http://bit.ly/2dAjjfo")
92
+
93
+ # new way setting local configuration
53
94
  bitly = Bitly.get_clicks(short_url: "http://bit.ly/2dAjjfo", login: "login-here", api_key: "key-here")
54
95
 
96
+ # result
55
97
  y bitly
56
98
  :short_url: https://bit.ly/2dAjjfo
57
99
  :global_hash: 2dAkyet
@@ -62,7 +104,21 @@
62
104
  :status_txt: OK
63
105
 
64
106
 
65
- == Command Line Examples
107
+ == Proxy
108
+ All calls will use the proxy specified by environment variable "http_proxy" by default.
109
+
110
+ You can set the proxy directly if you prefer:
111
+
112
+ Bitly.proxy = 'http://localhost:8888'
113
+
114
+
115
+ == SSL
116
+ All calls will use SSL by default. You can disable it:
117
+
118
+ Bitly.use_ssl = false
119
+
120
+
121
+ == Command Line
66
122
  Usage
67
123
  bitly [options] url
68
124
 
@@ -93,17 +149,17 @@
93
149
  -V, --verbose Verbose output
94
150
 
95
151
 
96
- === Authentication
152
+ == Authentication
97
153
  bit.ly API requires authentication credentials.
98
154
 
99
- You need a free bit.ly user account and apiKey. Signup at: http://bit.ly/a/sign_up
100
- If you already have an account, you can find your apiKey at: http://bit.ly/a/your_api_key
155
+ You'll need a free bit.ly login and apiKey. Sign up here: http://bit.ly/a/sign_up
156
+ If you've already signed up, you can find your apiKey here: http://bit.ly/a/your_api_key
101
157
 
102
- You can supply credentials as parameters. For example:
103
- bitly -l <username> -k <key-here> -s http://dx7.github.io
158
+ Using commmand line you can supply credentials as parameters. For example:
159
+ bitly -l <login-here> -k <key-here> -s http://dx7.github.io
104
160
 
105
- Or you can create the file ~/.bitly (YAML format) with this content:
106
- login: <username>
161
+ Or you can create the file ~/.bitly (YAML format) with that content:
162
+ login: <login-here>
107
163
  key: <key-here>
108
164
 
109
165
 
@@ -2,7 +2,7 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: post
5
- uri: http://api.bit.ly/v3/expand
5
+ uri: https://api-ssl.bitly.com/v3/expand
6
6
  body:
7
7
  encoding: UTF-8
8
8
  string: shortURL=http%3A%2F%2Fgoogle.com&login=my-login&apiKey=my-api-key
@@ -2,7 +2,7 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: post
5
- uri: http://api.bit.ly/v3/expand
5
+ uri: https://api-ssl.bitly.com/v3/expand
6
6
  body:
7
7
  encoding: UTF-8
8
8
  string: shortURL=http%3A%2F%2Fbit.ly%2FbcvNe5&login=my-login&apiKey=my-api-key
@@ -2,7 +2,7 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: get
5
- uri: http://api.bit.ly/v3/clicks?apiKey=my-api-key&login=my-login&shortUrl=http://bit.ly/xlii42
5
+ uri: https://api-ssl.bitly.com/v3/clicks?apiKey=my-api-key&login=my-login&shortUrl=http://bit.ly/xlii42
6
6
  body:
7
7
  encoding: US-ASCII
8
8
  string: ''
@@ -0,0 +1,44 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://api.bitly.com/v3/clicks?apiKey=my-api-key&login=my-login&shortUrl=http://bit.ly/xlii42
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - "*/*"
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ User-Agent:
15
+ - rest-client/2.0.0 (darwin15.6.0 x86_64) ruby/2.3.0p0
16
+ Host:
17
+ - api.bitly.com
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ Server:
24
+ - nginx
25
+ Date:
26
+ - Sun, 02 Oct 2016 03:40:18 GMT
27
+ Content-Type:
28
+ - application/json; charset=utf-8
29
+ Content-Length:
30
+ - '187'
31
+ Etag:
32
+ - '"a6d2ce859ab41b205deb5d920fa10e3143a79bf2"'
33
+ Age:
34
+ - '356'
35
+ Connection:
36
+ - keep-alive
37
+ body:
38
+ encoding: UTF-8
39
+ string: '{"status_code": 200, "data": {"clicks": [{"short_url": "http://bit.ly/xlii42",
40
+ "global_hash": "cunZEP", "user_clicks": 2, "user_hash": "cT1Izu", "global_clicks":
41
+ 2}]}, "status_txt": "OK"}'
42
+ http_version:
43
+ recorded_at: Sun, 02 Oct 2016 03:46:13 GMT
44
+ recorded_with: VCR 3.0.3
@@ -2,7 +2,7 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: post
5
- uri: http://api.bit.ly/v3/shorten
5
+ uri: https://api-ssl.bitly.com/v3/shorten
6
6
  body:
7
7
  encoding: UTF-8
8
8
  string: longURL=http%3A%2F%2Fbit.ly%2FbcvNe5&login=my-login&apiKey=my-api-key
@@ -2,7 +2,7 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: post
5
- uri: http://api.bit.ly/v3/shorten
5
+ uri: https://api-ssl.bitly.com/v3/shorten
6
6
  body:
7
7
  encoding: UTF-8
8
8
  string: longURL=http%3A%2F%2Fgoogle.com&login=my-login&apiKey=my-api-key
@@ -2,7 +2,7 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: post
5
- uri: http://api.bit.ly/v3/shorten
5
+ uri: https://api-ssl.bitly.com/v3/shorten
6
6
  body:
7
7
  encoding: UTF-8
8
8
  string: longURL=http%3A%2F%2Fgoogle.com&login=my-login&apiKey=my-api-key&domain=j.mp
@@ -1,16 +1,37 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  require 'yaml'
3
- require 'restclient'
3
+ require 'rest-client'
4
4
  require 'json'
5
5
  require 'ostruct'
6
6
 
7
7
  class Bitly < OpenStruct
8
8
 
9
- REST_API_URL = "http://api.bit.ly"
9
+ REST_API_URL = "http://api.bitly.com"
10
+ REST_API_URL_SSL = "https://api-ssl.bitly.com"
10
11
  ACTION_PATH = { :shorten => '/v3/shorten', :expand => '/v3/expand', :clicks => '/v3/clicks' }
12
+ RestClient.proxy = ENV['http_proxy']
11
13
 
12
14
  class << self
13
- attr_accessor :login, :key
15
+ attr_accessor :login, :api_key
16
+ attr_writer :use_ssl
17
+ alias :key :api_key
18
+ alias :key= :api_key=
19
+
20
+ def use_ssl
21
+ instance_variable_defined?(:@use_ssl) ? @use_ssl : true
22
+ end
23
+
24
+ def proxy=(addr)
25
+ RestClient.proxy = addr
26
+ end
27
+
28
+ def proxy
29
+ RestClient.proxy
30
+ end
31
+
32
+ def config
33
+ yield self
34
+ end
14
35
 
15
36
  # Old API:
16
37
  #
@@ -42,7 +63,7 @@ class Bitly < OpenStruct
42
63
  params[:domain] = options[:domain]
43
64
  end
44
65
 
45
- response = JSON.parse RestClient.post(REST_API_URL + ACTION_PATH[:shorten], params)
66
+ response = JSON.parse RestClient.post(rest_api_url + ACTION_PATH[:shorten], params)
46
67
  response.delete("data") if response["data"].empty?
47
68
 
48
69
  bitly = new response["data"]
@@ -77,7 +98,7 @@ class Bitly < OpenStruct
77
98
  options = {}
78
99
  end
79
100
 
80
- response = JSON.parse RestClient.post(REST_API_URL + ACTION_PATH[:expand], { :shortURL => short_url, :login => login, :apiKey => key })
101
+ response = JSON.parse RestClient.post(rest_api_url + ACTION_PATH[:expand], { :shortURL => short_url, :login => login, :apiKey => key })
81
102
 
82
103
  bitly = new(response["data"]["expand"].first)
83
104
  bitly.status_code = response["status_code"]
@@ -110,7 +131,7 @@ class Bitly < OpenStruct
110
131
  options = {}
111
132
  end
112
133
 
113
- response = JSON.parse RestClient.get("#{REST_API_URL}#{ACTION_PATH[:clicks]}?login=#{login}&apiKey=#{key}&shortUrl=#{short_url}")
134
+ response = JSON.parse RestClient.get("#{rest_api_url}#{ACTION_PATH[:clicks]}?login=#{login}&apiKey=#{key}&shortUrl=#{short_url}")
114
135
 
115
136
  bitly = new(response["data"]["clicks"].first)
116
137
  bitly.status_code = response["status_code"]
@@ -118,5 +139,11 @@ class Bitly < OpenStruct
118
139
 
119
140
  bitly
120
141
  end
142
+
143
+ private
144
+
145
+ def rest_api_url
146
+ use_ssl ? REST_API_URL_SSL : REST_API_URL
147
+ end
121
148
  end
122
149
  end
@@ -1,3 +1,3 @@
1
1
  module BitlyGem
2
- VERSION = '0.1.7'
2
+ VERSION = '0.2.0'
3
3
  end
@@ -3,17 +3,19 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
  require "ruby-bitly/version"
4
4
 
5
5
  Gem::Specification.new do |s|
6
- s.name = "ruby-bitly"
7
- s.version = BitlyGem::VERSION
8
- s.authors = ["dx7"]
9
- s.email = ["dx7@protonmail.ch"]
10
- s.homepage = "http://github.com/dx7/ruby-bitly"
11
- s.summary = %q{A simple bit.ly ruby client}
12
- s.description = %q{A simple bit.ly ruby client}
13
- s.files = `git ls-files`.split("\n")
14
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
15
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
16
- s.require_paths = ["lib"]
6
+ s.name = "ruby-bitly"
7
+ s.version = BitlyGem::VERSION
8
+ s.authors = ["dx7"]
9
+ s.email = ["dx7@protonmail.ch"]
10
+ s.homepage = "http://github.com/dx7/ruby-bitly"
11
+ s.summary = %q{A simple bit.ly ruby client to shorten URLs, expand or get number of clicks on a bitlink}
12
+ s.description = %q{A simple bit.ly ruby client to shorten URLs, expand or get number of clicks on a bitlink.}
13
+ s.files = `git ls-files`.split("\n")
14
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
15
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
16
+ s.require_paths = ["lib"]
17
+ s.licenses = ['MIT']
18
+ s.required_ruby_version = '>= 2.0.0'
17
19
  s.add_dependency('rest-client', '~> 2.0')
18
20
  s.add_development_dependency('byebug')
19
21
  s.add_development_dependency('rake')
@@ -1,122 +1,294 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
3
- require 'byebug'
4
3
 
5
- describe "RubyBitly" do
4
+ describe 'RubyBitly' do
6
5
 
7
- let(:login) { ENV['RUBY_BITLY_LOGIN'] || 'my-login' }
8
- let(:key) { ENV['RUBY_BITLY_APIKEY'] || 'my-api-key' }
6
+ let(:login) { RSpec::RUBY_BITLY_LOGIN }
7
+ let(:key) { RSpec::RUBY_BITLY_APIKEY }
9
8
 
10
- it "Shorten long url using old API" do
11
- response = VCR.use_cassette('shorten_long_url') do
12
- Bitly.shorten("http://google.com", login, key)
9
+ describe 'config' do
10
+ it 'set variable login' do
11
+ Bitly.config { |c| c.login = 'login-custom' }
12
+ expect(Bitly.login).to eq('login-custom')
13
13
  end
14
14
 
15
- expect(response.status_txt).to eq("OK")
16
- expect(response.status_code).to eq(200)
17
- expect(response.new_hash).to eq(0)
18
- expect(response.global_hash).not_to be_empty
19
- expect(response.hash_path.length).not_to eq(0)
20
- expect(response.url).to match(/^http:\/\/bit\.ly\/[A-Za-z0-9]*/)
21
- end
22
-
23
- it 'Shorten long url using options API' do
24
- response = VCR.use_cassette('shorten_long_url') do
25
- Bitly.shorten(:long_url => "http://google.com", :login => login, :api_key => key)
15
+ it 'set variables key' do
16
+ Bitly.config { |c| c.api_key = 'key-custom' }
17
+ expect(Bitly.api_key).to eq('key-custom')
26
18
  end
27
19
 
28
- expect(response.status_txt).to eq("OK")
29
- expect(response.status_code).to eq(200)
30
- expect(response.new_hash).to eq(0)
31
- expect(response.global_hash).not_to be_empty
32
- expect(response.hash_path.length).not_to eq(0)
33
- expect(response.url).to match(/^http:\/\/bit\.ly\/[A-Za-z0-9]*/)
20
+ it 'set variables use_ssl' do
21
+ Bitly.config { |c| c.use_ssl = false }
22
+ expect(Bitly.use_ssl).to be false
23
+ Bitly.config { |c| c.use_ssl = true } # reset to default value
24
+ end
34
25
  end
35
26
 
36
- it 'Shorten url with a preferred domain' do
37
- response = VCR.use_cassette('shorten_long_url_with_preferred_domain') do
38
- Bitly.shorten(:long_url => "http://google.com", :domain => 'j.mp',
39
- :login => login, :api_key => key)
40
- end
27
+ describe 'shorten' do
28
+ context 'using local config' do
29
+ before do
30
+ Bitly.config { |c| c.login = 'invalid login'; c.api_key = 'invalid key' }
31
+ end
41
32
 
42
- expect(response.status_txt).to eq("OK")
43
- expect(response.status_code).to eq(200)
44
- expect(response.new_hash).to eq(0)
45
- expect(response.global_hash).not_to be_empty
46
- expect(response.hash_path.length).not_to eq(0)
47
- expect(response.url).to match(/^http:\/\/j\.mp\/[A-Za-z0-9]*/)
48
- end
33
+ it 'shorten long url using old API' do
34
+ response = VCR.use_cassette('shorten_long_url') do
35
+ Bitly.shorten('http://google.com', login, key)
36
+ end
49
37
 
50
- it "Shorten bitly url" do
51
- response = VCR.use_cassette('shorten_bitly_url') do
52
- Bitly.shorten("http://bit.ly/bcvNe5", login, key)
53
- end
38
+ expect(response.status_txt).to eq('OK')
39
+ expect(response.status_code).to eq(200)
40
+ expect(response.new_hash).to eq(0)
41
+ expect(response.global_hash).not_to be_empty
42
+ expect(response.hash_path.length).not_to eq(0)
43
+ expect(response.url).to match(/^http:\/\/bit\.ly\/[A-Za-z0-9]*/)
44
+ end
54
45
 
55
- expect(response.status_txt).to eq("ALREADY_A_BITLY_LINK")
56
- expect(response.status_code).to eq(500)
57
- end
46
+ it 'shorten long url using new API' do
47
+ response = VCR.use_cassette('shorten_long_url') do
48
+ Bitly.shorten(:long_url => 'http://google.com', :login => login, :api_key => key)
49
+ end
50
+
51
+ expect(response.status_txt).to eq('OK')
52
+ expect(response.status_code).to eq(200)
53
+ expect(response.new_hash).to eq(0)
54
+ expect(response.global_hash).not_to be_empty
55
+ expect(response.hash_path.length).not_to eq(0)
56
+ expect(response.url).to match(/^http:\/\/bit\.ly\/[A-Za-z0-9]*/)
57
+ end
58
+
59
+ it 'shorten long url with a preferred domain' do
60
+ response = VCR.use_cassette('shorten_long_url_with_preferred_domain') do
61
+ Bitly.shorten(:long_url => 'http://google.com', :domain => 'j.mp', :login => login, :api_key => key)
62
+ end
63
+
64
+ expect(response.status_txt).to eq('OK')
65
+ expect(response.status_code).to eq(200)
66
+ expect(response.new_hash).to eq(0)
67
+ expect(response.global_hash).not_to be_empty
68
+ expect(response.hash_path.length).not_to eq(0)
69
+ expect(response.url).to match(/^http:\/\/j\.mp\/[A-Za-z0-9]*/)
70
+ end
71
+
72
+ it 'shorten bitly url' do
73
+ response = VCR.use_cassette('shorten_bitly_url') do
74
+ Bitly.shorten('http://bit.ly/bcvNe5', login, key)
75
+ end
58
76
 
59
- it "Expand a short url to it long url using old API" do
60
- response = VCR.use_cassette('expand_a_short_url_to_it_long_url') do
61
- Bitly.expand("http://bit.ly/bcvNe5", login, key)
77
+ expect(response.status_txt).to eq('ALREADY_A_BITLY_LINK')
78
+ expect(response.status_code).to eq(500)
79
+ end
62
80
  end
63
81
 
64
- expect(response.status_txt).to eq("OK")
65
- expect(response.status_code).to eq(200)
66
- expect(response.long_url).to eq("http://google.com")
67
- expect(response.short_url).to eq("http://bit.ly/bcvNe5")
68
- expect(response.user_hash).to eq("bcvNe5")
82
+ context 'using global config' do
83
+ before do
84
+ Bitly.config { |c| c.login = login; c.api_key = key }
85
+ end
86
+
87
+ it 'shorten long url using old API' do
88
+ response = VCR.use_cassette('shorten_long_url') do
89
+ Bitly.shorten('http://google.com')
90
+ end
91
+
92
+ expect(response.status_txt).to eq('OK')
93
+ expect(response.status_code).to eq(200)
94
+ expect(response.new_hash).to eq(0)
95
+ expect(response.global_hash).not_to be_empty
96
+ expect(response.hash_path.length).not_to eq(0)
97
+ expect(response.url).to match(/^http:\/\/bit\.ly\/[A-Za-z0-9]*/)
98
+ end
99
+
100
+ it 'shorten long url using global config' do
101
+ response = VCR.use_cassette('shorten_long_url') do
102
+ Bitly.shorten(:long_url => 'http://google.com')
103
+ end
104
+
105
+ expect(response.status_txt).to eq('OK')
106
+ expect(response.status_code).to eq(200)
107
+ expect(response.new_hash).to eq(0)
108
+ expect(response.global_hash).not_to be_empty
109
+ expect(response.hash_path.length).not_to eq(0)
110
+ expect(response.url).to match(/^http:\/\/bit\.ly\/[A-Za-z0-9]*/)
111
+ end
112
+ end
69
113
  end
70
114
 
71
- it "Expand a short url to it long url using options API" do
72
- response = VCR.use_cassette('expand_a_short_url_to_it_long_url') do
73
- Bitly.expand({ :short_url => "http://bit.ly/bcvNe5", :login => login, :api_key => key })
115
+ describe 'expand' do
116
+ context 'using local config' do
117
+ before do
118
+ Bitly.config { |c| c.login = 'invalid login'; c.api_key = 'invalid key' }
119
+ end
120
+
121
+ it 'expand a short url to its long url old API' do
122
+ response = VCR.use_cassette('expand_a_short_url_to_it_long_url') do
123
+ Bitly.expand('http://bit.ly/bcvNe5', login, key)
124
+ end
125
+
126
+ expect(response.status_txt).to eq('OK')
127
+ expect(response.status_code).to eq(200)
128
+ expect(response.long_url).to eq('http://google.com')
129
+ expect(response.short_url).to eq('http://bit.ly/bcvNe5')
130
+ expect(response.user_hash).to eq('bcvNe5')
131
+ end
132
+
133
+ it 'expand a short url to its long url' do
134
+ response = VCR.use_cassette('expand_a_short_url_to_it_long_url') do
135
+ Bitly.expand({ :short_url => 'http://bit.ly/bcvNe5', :login => login, :api_key => key })
136
+ end
137
+
138
+ expect(response.status_txt).to eq('OK')
139
+ expect(response.status_code).to eq(200)
140
+ expect(response.long_url).to eq('http://google.com')
141
+ expect(response.short_url).to eq('http://bit.ly/bcvNe5')
142
+ expect(response.user_hash).to eq('bcvNe5')
143
+ end
144
+
145
+ it 'expand a long url should result an error' do
146
+ response = VCR.use_cassette('expand_a_long_url_should_result_an_error') do
147
+ Bitly.expand('http://google.com', login, key)
148
+ end
149
+
150
+ expect(response.status_txt).to eq('OK')
151
+ expect(response.status_code).to eq(200)
152
+ expect(response.long_url).to eq('NOT_FOUND')
153
+ expect(response.short_url).to eq('http://google.com')
154
+ end
74
155
  end
75
156
 
76
- expect(response.status_txt).to eq("OK")
77
- expect(response.status_code).to eq(200)
78
- expect(response.long_url).to eq("http://google.com")
79
- expect(response.short_url).to eq("http://bit.ly/bcvNe5")
80
- expect(response.user_hash).to eq("bcvNe5")
157
+ context 'using global config' do
158
+ before do
159
+ Bitly.config { |c| c.login = login; c.api_key = key }
160
+ end
161
+
162
+ it 'expand a short url to its long url old API' do
163
+ response = VCR.use_cassette('expand_a_short_url_to_it_long_url') do
164
+ Bitly.expand('http://bit.ly/bcvNe5')
165
+ end
166
+
167
+ expect(response.status_txt).to eq('OK')
168
+ expect(response.status_code).to eq(200)
169
+ expect(response.long_url).to eq('http://google.com')
170
+ expect(response.short_url).to eq('http://bit.ly/bcvNe5')
171
+ expect(response.user_hash).to eq('bcvNe5')
172
+ end
173
+
174
+ it 'expand a short url to its long url using global config' do
175
+ response = VCR.use_cassette('expand_a_short_url_to_it_long_url') do
176
+ Bitly.expand({ :short_url => 'http://bit.ly/bcvNe5' })
177
+ end
178
+
179
+ expect(response.status_txt).to eq('OK')
180
+ expect(response.status_code).to eq(200)
181
+ expect(response.long_url).to eq('http://google.com')
182
+ expect(response.short_url).to eq('http://bit.ly/bcvNe5')
183
+ expect(response.user_hash).to eq('bcvNe5')
184
+ end
185
+ end
81
186
  end
82
187
 
83
- it "Expand a long url should result an error" do
84
- response = VCR.use_cassette('expand_a_long_url_should_result_an_error') do
85
- Bitly.expand("http://google.com", login, key)
188
+
189
+ describe 'get clicks' do
190
+ context 'using local config' do
191
+ before do
192
+ Bitly.config { |c| c.login = 'invalid login'; c.api_key = 'invalid key' }
193
+ end
194
+
195
+ it 'get clicks by short_url using old API' do
196
+ bitly = VCR.use_cassette('get_clicks_by_short_url') do
197
+ Bitly.get_clicks('http://bit.ly/xlii42', login, key)
198
+ end
199
+
200
+ expect(bitly.status_txt).to eq('OK')
201
+ expect(bitly.status_code).to eq(200)
202
+ expect(bitly.global_clicks).to be_an_instance_of Fixnum
203
+ expect(bitly.user_clicks).to be_an_instance_of Fixnum
204
+ expect(bitly.short_url).to eq('http://bit.ly/xlii42')
205
+ expect(bitly.global_hash).to eq('cunZEP')
206
+ expect(bitly.user_hash).to eq('cT1Izu')
207
+ end
208
+
209
+ it 'get clicks by short_url using options API' do
210
+ bitly = VCR.use_cassette('get_clicks_by_short_url') do
211
+ Bitly.get_clicks(:short_url => 'http://bit.ly/xlii42', :login => login, :api_key => key)
212
+ end
213
+
214
+ expect(bitly.status_txt).to eq('OK')
215
+ expect(bitly.status_code).to eq(200)
216
+ expect(bitly.global_clicks).to be_an_instance_of Fixnum
217
+ expect(bitly.user_clicks).to be_an_instance_of Fixnum
218
+ expect(bitly.short_url).to eq('http://bit.ly/xlii42')
219
+ expect(bitly.global_hash).to eq('cunZEP')
220
+ expect(bitly.user_hash).to eq('cT1Izu')
221
+ end
86
222
  end
87
223
 
88
- expect(response.status_txt).to eq("OK")
89
- expect(response.status_code).to eq(200)
90
- expect(response.long_url).to eq("NOT_FOUND")
91
- expect(response.short_url).to eq("http://google.com")
224
+ context 'using global config' do
225
+ before do
226
+ Bitly.config { |c| c.login = login; c.api_key = key }
227
+ end
228
+
229
+ it 'get clicks by short_url using old API' do
230
+ bitly = VCR.use_cassette('get_clicks_by_short_url') do
231
+ Bitly.get_clicks('http://bit.ly/xlii42')
232
+ end
233
+
234
+ expect(bitly.status_txt).to eq('OK')
235
+ expect(bitly.status_code).to eq(200)
236
+ expect(bitly.global_clicks).to be_an_instance_of Fixnum
237
+ expect(bitly.user_clicks).to be_an_instance_of Fixnum
238
+ expect(bitly.short_url).to eq('http://bit.ly/xlii42')
239
+ expect(bitly.global_hash).to eq('cunZEP')
240
+ expect(bitly.user_hash).to eq('cT1Izu')
241
+ end
242
+
243
+ it 'get clicks by short_url using global config' do
244
+ bitly = VCR.use_cassette('get_clicks_by_short_url') do
245
+ Bitly.get_clicks(:short_url => 'http://bit.ly/xlii42')
246
+ end
247
+
248
+ expect(bitly.status_txt).to eq('OK')
249
+ expect(bitly.status_code).to eq(200)
250
+ expect(bitly.global_clicks).to be_an_instance_of Fixnum
251
+ expect(bitly.user_clicks).to be_an_instance_of Fixnum
252
+ expect(bitly.short_url).to eq('http://bit.ly/xlii42')
253
+ expect(bitly.global_hash).to eq('cunZEP')
254
+ expect(bitly.user_hash).to eq('cT1Izu')
255
+ end
256
+ end
92
257
  end
93
258
 
259
+ describe 'proxy' do
260
+ it 'uses http_proxy as default' do
261
+ expect(RestClient.proxy).not_to eq('http://http-proxy.host.com:1234')
262
+
263
+ ENV['http_proxy'] = 'http://http-proxy.host.com:1234'
264
+ Object.send :remove_const, :Bitly
265
+ load './lib/ruby-bitly.rb'
94
266
 
95
- it "Get clicks by short_url using old API" do
96
- bitly = VCR.use_cassette('get_clicks_by_short_url') do
97
- Bitly.get_clicks("http://bit.ly/xlii42", login, key)
267
+ expect(RestClient.proxy).to eq('http://http-proxy.host.com:1234')
98
268
  end
99
269
 
100
- expect(bitly.status_txt).to eq("OK")
101
- expect(bitly.status_code).to eq(200)
102
- expect(bitly.global_clicks).to be_an_instance_of Fixnum
103
- expect(bitly.user_clicks).to be_an_instance_of Fixnum
104
- expect(bitly.short_url).to eq("http://bit.ly/xlii42")
105
- expect(bitly.global_hash).to eq("cunZEP")
106
- expect(bitly.user_hash).to eq("cT1Izu")
107
- end
270
+ it 'uses set proxy on configuration' do
271
+ expect(RestClient.proxy).not_to eq('http://config-proxy.host.com:1234')
108
272
 
109
- it "Get clicks by short_url using options API" do
110
- bitly = VCR.use_cassette('get_clicks_by_short_url') do
111
- Bitly.get_clicks(:short_url => "http://bit.ly/xlii42", :login => login, :api_key => key)
273
+ ENV['http_proxy'] = 'http://http-proxy.host.com:1234'
274
+ Object.send :remove_const, :Bitly
275
+ load './lib/ruby-bitly.rb'
276
+ Bitly.proxy = 'http://config-proxy.host.com:1234'
277
+
278
+ expect(RestClient.proxy).to eq('http://config-proxy.host.com:1234')
112
279
  end
280
+ end
281
+
282
+ describe 'ssl' do
283
+ it 'do not use ssl if it is disabled' do
284
+ Bitly.use_ssl = false
113
285
 
114
- expect(bitly.status_txt).to eq("OK")
115
- expect(bitly.status_code).to eq(200)
116
- expect(bitly.global_clicks).to be_an_instance_of Fixnum
117
- expect(bitly.user_clicks).to be_an_instance_of Fixnum
118
- expect(bitly.short_url).to eq("http://bit.ly/xlii42")
119
- expect(bitly.global_hash).to eq("cunZEP")
120
- expect(bitly.user_hash).to eq("cT1Izu")
286
+ bitly = VCR.use_cassette('get_clicks_by_short_url_without_ssl') do
287
+ Bitly.get_clicks(:short_url => 'http://bit.ly/xlii42', :login => login, :api_key => key)
288
+ end
289
+
290
+ expect(bitly.status_txt).to eq('OK')
291
+ expect(bitly.status_code).to eq(200)
292
+ end
121
293
  end
122
294
  end
@@ -1,13 +1,19 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  $LOAD_PATH.unshift(File.dirname(__FILE__))
3
3
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
4
+ require 'byebug'
4
5
  require 'ruby-bitly'
5
6
  require 'rspec'
6
7
  require 'vcr'
7
8
 
9
+ RSpec::RUBY_BITLY_LOGIN = ENV['RUBY_BITLY_LOGIN'] || 'my-login'
10
+ RSpec::RUBY_BITLY_APIKEY = ENV['RUBY_BITLY_APIKEY'] || 'my-api-key'
11
+
8
12
  VCR.configure do |c|
9
13
  c.cassette_library_dir = 'fixtures/vcr_cassettes'
10
14
  c.ignore_localhost = true
11
15
  c.hook_into :webmock
12
16
  c.default_cassette_options = { :record => :once, :match_requests_on => [:method, :uri, :host, :path, :body, :query] }
17
+ c.filter_sensitive_data('my-login') { RSpec::RUBY_BITLY_LOGIN }
18
+ c.filter_sensitive_data('my-api-key') { RSpec::RUBY_BITLY_APIKEY }
13
19
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-bitly
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - dx7
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-02 00:00:00.000000000 Z
11
+ date: 2016-10-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -94,7 +94,8 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '2.1'
97
- description: A simple bit.ly ruby client
97
+ description: A simple bit.ly ruby client to shorten URLs, expand or get number of
98
+ clicks on a bitlink.
98
99
  email:
99
100
  - dx7@protonmail.ch
100
101
  executables:
@@ -104,6 +105,7 @@ extra_rdoc_files: []
104
105
  files:
105
106
  - ".gitignore"
106
107
  - ".rspec"
108
+ - ".travis.yml"
107
109
  - CHANGELOG
108
110
  - Gemfile
109
111
  - Gemfile.lock
@@ -114,6 +116,7 @@ files:
114
116
  - fixtures/vcr_cassettes/expand_a_long_url_should_result_an_error.yml
115
117
  - fixtures/vcr_cassettes/expand_a_short_url_to_it_long_url.yml
116
118
  - fixtures/vcr_cassettes/get_clicks_by_short_url.yml
119
+ - fixtures/vcr_cassettes/get_clicks_by_short_url_without_ssl.yml
117
120
  - fixtures/vcr_cassettes/shorten_bitly_url.yml
118
121
  - fixtures/vcr_cassettes/shorten_long_url.yml
119
122
  - fixtures/vcr_cassettes/shorten_long_url_with_preferred_domain.yml
@@ -123,7 +126,8 @@ files:
123
126
  - spec/ruby-bitly_spec.rb
124
127
  - spec/spec_helper.rb
125
128
  homepage: http://github.com/dx7/ruby-bitly
126
- licenses: []
129
+ licenses:
130
+ - MIT
127
131
  metadata: {}
128
132
  post_install_message:
129
133
  rdoc_options: []
@@ -133,7 +137,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
133
137
  requirements:
134
138
  - - ">="
135
139
  - !ruby/object:Gem::Version
136
- version: '0'
140
+ version: 2.0.0
137
141
  required_rubygems_version: !ruby/object:Gem::Requirement
138
142
  requirements:
139
143
  - - ">="
@@ -144,7 +148,8 @@ rubyforge_project:
144
148
  rubygems_version: 2.5.1
145
149
  signing_key:
146
150
  specification_version: 4
147
- summary: A simple bit.ly ruby client
151
+ summary: A simple bit.ly ruby client to shorten URLs, expand or get number of clicks
152
+ on a bitlink
148
153
  test_files:
149
154
  - spec/ruby-bitly_spec.rb
150
155
  - spec/spec_helper.rb