reagent-snip-snap 0.1.1 → 0.1.2
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/lib/snip_snap/client.rb +4 -0
- data/lib/snip_snap/image.rb +31 -0
- data/lib/snip_snap/version.rb +1 -1
- data/lib/snip_snap.rb +9 -6
- data/test/unit/snip_snap/flickr_test.rb +5 -0
- data/test/unit/snip_snap/image_test.rb +84 -0
- data/test/unit/snip_snap/imgly_test.rb +5 -0
- data/test/unit/snip_snap/skitch_test.rb +5 -0
- data/test/unit/snip_snap/yfrog_test.rb +5 -0
- data/test/unit/snip_snap_test.rb +18 -1
- metadata +6 -3
data/lib/snip_snap/client.rb
CHANGED
@@ -0,0 +1,31 @@
|
|
1
|
+
module SnipSnap
|
2
|
+
class Image
|
3
|
+
|
4
|
+
MIME_TYPES = %w(image/jpeg image/gif image/pjpeg image/png)
|
5
|
+
EXTENSIONS = %w(jpeg jpg gif png)
|
6
|
+
|
7
|
+
include Client
|
8
|
+
|
9
|
+
request_method :head
|
10
|
+
|
11
|
+
def mime_type
|
12
|
+
response.content_type
|
13
|
+
end
|
14
|
+
|
15
|
+
def extension
|
16
|
+
uri = URI.parse(url)
|
17
|
+
extension = File.extname(uri.path).sub(/./, '')
|
18
|
+
|
19
|
+
extension unless extension == ''
|
20
|
+
end
|
21
|
+
|
22
|
+
def image?
|
23
|
+
MIME_TYPES.include?(mime_type) || EXTENSIONS.include?(extension)
|
24
|
+
end
|
25
|
+
|
26
|
+
def image_url
|
27
|
+
url if image?
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
data/lib/snip_snap/version.rb
CHANGED
data/lib/snip_snap.rb
CHANGED
@@ -11,6 +11,7 @@ require 'snip_snap/imgly'
|
|
11
11
|
require 'snip_snap/yfrog'
|
12
12
|
require 'snip_snap/twitpic'
|
13
13
|
require 'snip_snap/flickr'
|
14
|
+
require 'snip_snap/image'
|
14
15
|
|
15
16
|
# = SnipSnap
|
16
17
|
#
|
@@ -37,11 +38,11 @@ module SnipSnap
|
|
37
38
|
|
38
39
|
def self.host_map # :nodoc:
|
39
40
|
{
|
40
|
-
'
|
41
|
-
'
|
42
|
-
'
|
43
|
-
'yfrog.com'
|
44
|
-
'
|
41
|
+
'Skitch' => ['skitch.com'],
|
42
|
+
'Imgly' => ['img.ly'],
|
43
|
+
'Twitpic' => ['twitpic.com'],
|
44
|
+
'Yfrog' => ['yfrog.com', 'yfrog.us'],
|
45
|
+
'Flickr' => ['flic.kr']
|
45
46
|
}
|
46
47
|
end
|
47
48
|
|
@@ -52,7 +53,9 @@ module SnipSnap
|
|
52
53
|
|
53
54
|
def self.class_name_for(url) # :nodoc:
|
54
55
|
uri = URI.parse(url)
|
55
|
-
host_map
|
56
|
+
match = host_map.detect {|k,v| v.include?(uri.host) }
|
57
|
+
|
58
|
+
match.nil? ? 'Image' : match[0]
|
56
59
|
end
|
57
60
|
|
58
61
|
# Set the Flickr API key for use by the underlying Flickr API library
|
@@ -9,6 +9,11 @@ module SnipSnap
|
|
9
9
|
@expanded_url = 'http://www.flickr.com/photos/northernraven/3317998738/'
|
10
10
|
end
|
11
11
|
|
12
|
+
should "know that it is an image" do
|
13
|
+
f = SnipSnap::Flickr.new(@url)
|
14
|
+
f.should be_image
|
15
|
+
end
|
16
|
+
|
12
17
|
should "know the identifier for the photo" do
|
13
18
|
response = stub()
|
14
19
|
response.stubs(:last_effective_url).with().returns(@expanded_url)
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../test_helper'
|
2
|
+
|
3
|
+
module SnipSnap
|
4
|
+
class ImageTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
MIME_TYPES = %w(image/jpeg image/gif image/pjpeg image/png)
|
7
|
+
EXTENSIONS = %w(jpeg jpg gif png)
|
8
|
+
|
9
|
+
context "An instance of the Image class" do
|
10
|
+
setup { @url = 'http://example.com/image.jpg' }
|
11
|
+
|
12
|
+
should "know the MIME type of the file referenced by the URL" do
|
13
|
+
response = stub() {|r| r.stubs(:content_type).with().returns('image/jpeg') }
|
14
|
+
|
15
|
+
i = SnipSnap::Image.new(@url)
|
16
|
+
i.stubs(:response).with().returns(response)
|
17
|
+
|
18
|
+
i.mime_type.should == 'image/jpeg'
|
19
|
+
end
|
20
|
+
|
21
|
+
should "know the extension of the file referenced by the URL" do
|
22
|
+
i = SnipSnap::Image.new('http://example.com/image.jpg')
|
23
|
+
i.extension.should == 'jpg'
|
24
|
+
end
|
25
|
+
|
26
|
+
should "know that the extension is nil if the URL has no file extension" do
|
27
|
+
i = SnipSnap::Image.new('http://example.com/path')
|
28
|
+
i.extension.should be_nil
|
29
|
+
end
|
30
|
+
|
31
|
+
should "know that the URL is not an image if it is of type 'text/html'" do
|
32
|
+
i = SnipSnap::Image.new(@url)
|
33
|
+
i.stubs(:extension).with().returns(nil)
|
34
|
+
i.stubs(:mime_type).with().returns('text/html')
|
35
|
+
|
36
|
+
i.should_not be_image
|
37
|
+
end
|
38
|
+
|
39
|
+
should "know that the URL is not an image if it has a '.html' extension" do
|
40
|
+
i = SnipSnap::Image.new(@url)
|
41
|
+
i.stubs(:extension).with().returns('html')
|
42
|
+
i.stubs(:mime_type).with().returns(nil)
|
43
|
+
|
44
|
+
i.should_not be_image
|
45
|
+
end
|
46
|
+
|
47
|
+
MIME_TYPES.each do |type|
|
48
|
+
should "know that the URL is an image if it is of type '#{type}'" do
|
49
|
+
i = SnipSnap::Image.new(@url)
|
50
|
+
i.stubs(:mime_type).with().returns(type)
|
51
|
+
i.stubs(:extension).with().returns(nil)
|
52
|
+
|
53
|
+
i.should be_image
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
EXTENSIONS.each do |extension|
|
58
|
+
should "know that the URL is an image if it has a '.#{extension}' extension" do
|
59
|
+
i = SnipSnap::Image.new(@url)
|
60
|
+
i.stubs(:mime_type).with().returns(nil)
|
61
|
+
i.stubs(:extension).with().returns(extension)
|
62
|
+
|
63
|
+
i.should be_image
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
should "know the URL for the image" do
|
68
|
+
i = SnipSnap::Image.new(@url)
|
69
|
+
i.stubs(:image?).with().returns(true)
|
70
|
+
|
71
|
+
i.image_url.should == @url
|
72
|
+
end
|
73
|
+
|
74
|
+
should "return nil for the image's URL if it is not an image" do
|
75
|
+
i = SnipSnap::Image.new(@url)
|
76
|
+
i.stubs(:image?).with().returns(false)
|
77
|
+
|
78
|
+
i.image_url.should be_nil
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
end
|
@@ -9,6 +9,11 @@ module SnipSnap
|
|
9
9
|
@expanded_url = 'http://img.ly/show/large/3aa'
|
10
10
|
end
|
11
11
|
|
12
|
+
should "know that it is an image" do
|
13
|
+
i = SnipSnap::Imgly.new(@url)
|
14
|
+
i.should be_image
|
15
|
+
end
|
16
|
+
|
12
17
|
should "have a url expanded from the source" do
|
13
18
|
i = SnipSnap::Imgly.new(@url)
|
14
19
|
i.url.should == @expanded_url
|
@@ -6,6 +6,11 @@ module SnipSnap
|
|
6
6
|
context "An instance of the Skitch class" do
|
7
7
|
setup { @url = 'http://skitch.com/example' }
|
8
8
|
|
9
|
+
should "know that it is an image" do
|
10
|
+
s = SnipSnap::Skitch.new(@url)
|
11
|
+
s.should be_image
|
12
|
+
end
|
13
|
+
|
9
14
|
should "have a URL" do
|
10
15
|
s = SnipSnap::Skitch.new(@url)
|
11
16
|
s.url.should == @url
|
@@ -9,6 +9,11 @@ module SnipSnap
|
|
9
9
|
@expanded_url = 'http://yfrog.com/api/xmlInfo?path=ahb97j'
|
10
10
|
end
|
11
11
|
|
12
|
+
should "know that it is an image" do
|
13
|
+
y = SnipSnap::Yfrog.new(@url)
|
14
|
+
y.should be_image
|
15
|
+
end
|
16
|
+
|
12
17
|
should "have a url derived from the source URL" do
|
13
18
|
y = SnipSnap::Yfrog.new(@url)
|
14
19
|
y.url.should == @expanded_url
|
data/test/unit/snip_snap_test.rb
CHANGED
@@ -19,16 +19,26 @@ class SnipSnapTest < Test::Unit::TestCase
|
|
19
19
|
SnipSnap.class_name_for(url).should == 'Twitpic'
|
20
20
|
end
|
21
21
|
|
22
|
-
should "know the correct class name for a Yfrog URL" do
|
22
|
+
should "know the correct class name for a Yfrog.com URL" do
|
23
23
|
url = 'http://yfrog.com/ahb97j'
|
24
24
|
SnipSnap.class_name_for(url).should == 'Yfrog'
|
25
25
|
end
|
26
26
|
|
27
|
+
should "know the correct class name for a Yfrog.us URL" do
|
28
|
+
url = 'http://yfrog.us/ahb97j'
|
29
|
+
SnipSnap.class_name_for(url).should == 'Yfrog'
|
30
|
+
end
|
31
|
+
|
27
32
|
should "know the correct class name for a Flickr URL" do
|
28
33
|
url = 'http://flic.kr/p/64cBqN'
|
29
34
|
SnipSnap.class_name_for(url).should == 'Flickr'
|
30
35
|
end
|
31
36
|
|
37
|
+
should "use the default class when it can't match on other URLs" do
|
38
|
+
url = 'http://example.com/image.jpg'
|
39
|
+
SnipSnap.class_name_for(url).should == 'Image'
|
40
|
+
end
|
41
|
+
|
32
42
|
should "be able to create an instance of the Skitch class with the supplied URL" do
|
33
43
|
url = 'http://skitch.com/reagent/bh4ei/bleeergh'
|
34
44
|
SnipSnap::Skitch.expects(:new).with(url).returns('skitch')
|
@@ -64,6 +74,13 @@ class SnipSnapTest < Test::Unit::TestCase
|
|
64
74
|
SnipSnap.from_url(url).should == 'flickr'
|
65
75
|
end
|
66
76
|
|
77
|
+
should "be able to create an instance of the Image class with the supplied URL" do
|
78
|
+
url = 'http://example.com/image.jpg'
|
79
|
+
SnipSnap::Image.expects(:new).with(url).returns('image')
|
80
|
+
|
81
|
+
SnipSnap.from_url(url).should == 'image'
|
82
|
+
end
|
83
|
+
|
67
84
|
should "be able to set the Flickr API key" do
|
68
85
|
key = 'abc123'
|
69
86
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: reagent-snip-snap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Patrick Reagan
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-09-
|
12
|
+
date: 2009-09-07 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -46,6 +46,7 @@ files:
|
|
46
46
|
- lib/snip_snap
|
47
47
|
- lib/snip_snap/client.rb
|
48
48
|
- lib/snip_snap/flickr.rb
|
49
|
+
- lib/snip_snap/image.rb
|
49
50
|
- lib/snip_snap/imgly.rb
|
50
51
|
- lib/snip_snap/skitch.rb
|
51
52
|
- lib/snip_snap/twitpic.rb
|
@@ -60,6 +61,7 @@ files:
|
|
60
61
|
- test/unit/snip_snap
|
61
62
|
- test/unit/snip_snap/client_test.rb
|
62
63
|
- test/unit/snip_snap/flickr_test.rb
|
64
|
+
- test/unit/snip_snap/image_test.rb
|
63
65
|
- test/unit/snip_snap/imgly_test.rb
|
64
66
|
- test/unit/snip_snap/skitch_test.rb
|
65
67
|
- test/unit/snip_snap/twitpic_test.rb
|
@@ -67,6 +69,7 @@ files:
|
|
67
69
|
- test/unit/snip_snap_test.rb
|
68
70
|
has_rdoc: false
|
69
71
|
homepage: http://sneaq.net
|
72
|
+
licenses:
|
70
73
|
post_install_message:
|
71
74
|
rdoc_options:
|
72
75
|
- --main
|
@@ -88,7 +91,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
88
91
|
requirements: []
|
89
92
|
|
90
93
|
rubyforge_project:
|
91
|
-
rubygems_version: 1.
|
94
|
+
rubygems_version: 1.3.5
|
92
95
|
signing_key:
|
93
96
|
specification_version: 3
|
94
97
|
summary: A ruby library that allows you to extract images from popular image-sharing services
|