pixy 0.0.2 → 0.1.0
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/.gitignore +1 -0
- data/README.md +8 -5
- data/lib/pixy.rb +7 -3
- data/lib/pixy/errors.rb +9 -0
- data/lib/pixy/shorten.rb +27 -3
- data/lib/pixy/version.rb +1 -1
- data/spec/fixtures/empty_api_key.json +6 -0
- data/spec/fixtures/empty_long_url.json +6 -0
- data/spec/fixtures/invalid_api_key.json +6 -0
- data/spec/fixtures/invalid_long_url.json +6 -0
- data/spec/fixtures/ok.json +6 -0
- data/spec/pixy/shorten_spec.rb +43 -5
- data/spec/spec_helper.rb +21 -9
- metadata +21 -10
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -14,19 +14,22 @@ gem 'pixy'
|
|
14
14
|
## Usage
|
15
15
|
|
16
16
|
```ruby
|
17
|
-
|
17
|
+
Pixy.shorten!(API_KEY, 'https://github.com/narkoz/pixy')
|
18
|
+
# => "http://p.tl/Us9R"
|
19
|
+
|
20
|
+
pixy = Pixy.shorten(API_KEY, 'https://github.com/narkoz/pixy')
|
18
21
|
# => #<Pixy::Shorten:0x0000010201bde8 @status="ok", @long_url="https://github.com/narkoz/pixy", @short_url="http://p.tl/Us9R", @counter=20>
|
19
22
|
|
20
|
-
|
23
|
+
pixy.status
|
21
24
|
# => "ok"
|
22
25
|
|
23
|
-
|
26
|
+
pixy.long_url
|
24
27
|
# => "https://github.com/narkoz/pixy"
|
25
28
|
|
26
|
-
|
29
|
+
pixy.short_url
|
27
30
|
# => "http://p.tl/Us9R"
|
28
31
|
|
29
|
-
|
32
|
+
pixy.counter
|
30
33
|
# => 20
|
31
34
|
```
|
32
35
|
|
data/lib/pixy.rb
CHANGED
@@ -1,14 +1,18 @@
|
|
1
1
|
require 'pixy/version'
|
2
2
|
require 'pixy/shorten'
|
3
|
+
require 'pixy/errors'
|
3
4
|
require 'net/http'
|
4
5
|
require 'json'
|
5
6
|
|
6
7
|
module Pixy
|
7
8
|
extend self
|
8
9
|
|
9
|
-
def shorten
|
10
|
-
raise
|
10
|
+
def shorten(key=nil, url='')
|
11
|
+
raise MissingApiKey, "API key is required" if key.nil?
|
11
12
|
Pixy::Shorten.new(key, url)
|
12
13
|
end
|
13
|
-
|
14
|
+
|
15
|
+
def shorten!(key=nil, url='')
|
16
|
+
Pixy.shorten(key, url).short_url
|
17
|
+
end
|
14
18
|
end
|
data/lib/pixy/errors.rb
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
module Pixy
|
2
|
+
class EmptyLongUrl < StandardError; end
|
3
|
+
class EmptyApiKey < StandardError; end
|
4
|
+
class ApiLimit < StandardError; end
|
5
|
+
class InvalidApiKey < StandardError; end
|
6
|
+
class InvalidLongUrl < StandardError; end
|
7
|
+
class UnknownError < StandardError; end
|
8
|
+
class MissingApiKey < ArgumentError; end
|
9
|
+
end
|
data/lib/pixy/shorten.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
module Pixy
|
2
2
|
class Shorten
|
3
|
+
API_URL = 'http://p.tl/api/api_simple.php'
|
3
4
|
attr_accessor :status, :long_url, :short_url, :counter
|
4
5
|
|
5
6
|
def initialize(key, url)
|
6
|
-
uri = URI(
|
7
|
-
uri.query = URI.encode_www_form({:key => key, :url => url})
|
7
|
+
uri = URI "#{API_URL}?key=#{key}&url=#{escape_url(url)}"
|
8
8
|
response = Net::HTTP.get_response(uri)
|
9
9
|
result = JSON.parse(response.body)
|
10
10
|
|
@@ -13,9 +13,33 @@ module Pixy
|
|
13
13
|
self.long_url = result['long_url']
|
14
14
|
self.short_url = result['short_url']
|
15
15
|
self.counter = result['counter']
|
16
|
+
raise_exception self.status unless self.status == 'ok'
|
16
17
|
else
|
17
|
-
raise "Server responded with code #{response.code}"
|
18
|
+
raise UnknownError, "Server responded with code #{response.code}"
|
18
19
|
end
|
19
20
|
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def raise_exception(status)
|
25
|
+
case status
|
26
|
+
when 'empty long url'
|
27
|
+
raise EmptyLongUrl, "Missing long URL."
|
28
|
+
when 'empty API key'
|
29
|
+
raise EmptyApiKey, "Missing API key."
|
30
|
+
when 'API limit'
|
31
|
+
raise ApiLimit, "API limit exceeded."
|
32
|
+
when 'invalid API key'
|
33
|
+
raise InvalidApiKey, "API key is invalid."
|
34
|
+
when 'invalid long url'
|
35
|
+
raise InvalidLongUrl, "The URL can not be shortened."
|
36
|
+
else
|
37
|
+
raise UnknownError, "Unknown status error."
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def escape_url(url)
|
42
|
+
URI.escape(url, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
|
43
|
+
end
|
20
44
|
end
|
21
45
|
end
|
data/lib/pixy/version.rb
CHANGED
data/spec/pixy/shorten_spec.rb
CHANGED
@@ -1,18 +1,24 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Pixy::Shorten do
|
4
|
-
|
5
|
-
|
6
|
-
it { Pixy.should respond_to(:shorten) }
|
4
|
+
it { Pixy.should respond_to :shorten }
|
5
|
+
it { Pixy.should respond_to :shorten! }
|
7
6
|
|
7
|
+
describe "#shorten!" do
|
8
|
+
it "should return a short url" do
|
9
|
+
Pixy.shorten!('API_KEY', 'https://github.com/narkoz/pixy').should == 'http://p.tl/Us9R'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
context "when a new short url requested" do
|
8
14
|
context "without arguments" do
|
9
15
|
it "should raise a required API key error" do
|
10
|
-
lambda { Pixy.shorten
|
16
|
+
lambda { Pixy.shorten }.should raise_error(Pixy::MissingApiKey, "API key is required")
|
11
17
|
end
|
12
18
|
end
|
13
19
|
|
14
20
|
context "with arguments" do
|
15
|
-
subject { Pixy.shorten
|
21
|
+
subject { Pixy.shorten('API_KEY', 'https://github.com/narkoz/pixy') }
|
16
22
|
|
17
23
|
describe "#status" do
|
18
24
|
it "should return a response status" do
|
@@ -37,6 +43,38 @@ describe Pixy::Shorten do
|
|
37
43
|
subject.counter.should == 12
|
38
44
|
end
|
39
45
|
end
|
46
|
+
|
47
|
+
context "with empty long url" do
|
48
|
+
it "should raise EmptyLongUrl" do
|
49
|
+
lambda {
|
50
|
+
Pixy.shorten('API_KEY', '')
|
51
|
+
}.should raise_error(Pixy::EmptyLongUrl, "Missing long URL.")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context "with empty API key" do
|
56
|
+
it "should raise EmptyApiKey" do
|
57
|
+
lambda {
|
58
|
+
Pixy.shorten('', 'https://github.com/narkoz/pixy')
|
59
|
+
}.should raise_error(Pixy::EmptyApiKey, "Missing API key.")
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context "with invalid API key" do
|
64
|
+
it "should raise InvalidApiKey" do
|
65
|
+
lambda {
|
66
|
+
Pixy.shorten('invalid_API_KEY', 'https://github.com/narkoz/pixy')
|
67
|
+
}.should raise_error(Pixy::InvalidApiKey, "API key is invalid.")
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
context "with invalid long url" do
|
72
|
+
it "should raise InvalidLongUrl" do
|
73
|
+
lambda {
|
74
|
+
Pixy.shorten('API_KEY', '^_^')
|
75
|
+
}.should raise_error(Pixy::InvalidLongUrl, "The URL can not be shortened.")
|
76
|
+
end
|
77
|
+
end
|
40
78
|
end
|
41
79
|
end
|
42
80
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -4,12 +4,24 @@ require 'pixy'
|
|
4
4
|
|
5
5
|
FakeWeb.allow_net_connect = false
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
7
|
+
def escape_url(url)
|
8
|
+
URI.escape(url, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
|
9
|
+
end
|
10
|
+
|
11
|
+
API_URL = 'http://p.tl/api/api_simple.php'
|
12
|
+
url_to_shorten = escape_url("https://github.com/narkoz/pixy")
|
13
|
+
invalid_url_to_shorten = escape_url("^_^")
|
14
|
+
|
15
|
+
def load_fixture(name)
|
16
|
+
File.open(File.dirname(__FILE__) + "/fixtures/#{name}.json").read
|
17
|
+
end
|
18
|
+
|
19
|
+
def fake_url(url, fixture_name)
|
20
|
+
FakeWeb.register_uri(:get, url, :body => load_fixture(fixture_name))
|
21
|
+
end
|
22
|
+
|
23
|
+
fake_url "#{API_URL}?key=API_KEY&url=#{url_to_shorten}", 'ok'
|
24
|
+
fake_url "#{API_URL}?key=API_KEY&url=", 'empty_long_url'
|
25
|
+
fake_url "#{API_URL}?key=&url=#{url_to_shorten}", 'empty_api_key'
|
26
|
+
fake_url "#{API_URL}?key=invalid_API_KEY&url=#{url_to_shorten}", 'invalid_api_key'
|
27
|
+
fake_url "#{API_URL}?key=API_KEY&url=#{invalid_url_to_shorten}", 'invalid_long_url'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pixy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-12-
|
12
|
+
date: 2011-12-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
16
|
-
requirement: &
|
16
|
+
requirement: &2164331840 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2164331840
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
27
|
-
requirement: &
|
27
|
+
requirement: &2164331040 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2164331040
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec
|
38
|
-
requirement: &
|
38
|
+
requirement: &2164330600 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2164330600
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: fakeweb
|
49
|
-
requirement: &
|
49
|
+
requirement: &2164329980 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2164329980
|
58
58
|
description: Pixy is an API wrapper for Pixiv url shortener - p.tl
|
59
59
|
email:
|
60
60
|
- mail@narkoz.me
|
@@ -69,9 +69,15 @@ files:
|
|
69
69
|
- README.md
|
70
70
|
- Rakefile
|
71
71
|
- lib/pixy.rb
|
72
|
+
- lib/pixy/errors.rb
|
72
73
|
- lib/pixy/shorten.rb
|
73
74
|
- lib/pixy/version.rb
|
74
75
|
- pixy.gemspec
|
76
|
+
- spec/fixtures/empty_api_key.json
|
77
|
+
- spec/fixtures/empty_long_url.json
|
78
|
+
- spec/fixtures/invalid_api_key.json
|
79
|
+
- spec/fixtures/invalid_long_url.json
|
80
|
+
- spec/fixtures/ok.json
|
75
81
|
- spec/pixy/shorten_spec.rb
|
76
82
|
- spec/spec_helper.rb
|
77
83
|
homepage: https://github.com/narkoz/pixy
|
@@ -99,5 +105,10 @@ signing_key:
|
|
99
105
|
specification_version: 3
|
100
106
|
summary: API wrapper for Pixiv url shortener
|
101
107
|
test_files:
|
108
|
+
- spec/fixtures/empty_api_key.json
|
109
|
+
- spec/fixtures/empty_long_url.json
|
110
|
+
- spec/fixtures/invalid_api_key.json
|
111
|
+
- spec/fixtures/invalid_long_url.json
|
112
|
+
- spec/fixtures/ok.json
|
102
113
|
- spec/pixy/shorten_spec.rb
|
103
114
|
- spec/spec_helper.rb
|