muri 0.0.13 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,82 +1,94 @@
1
- require 'cgi'
2
1
  class Muri
3
2
  module Filter
4
3
  module Photobucket
5
4
 
5
+ private
6
6
  PHOTOBUCKET_MEDIA = "media"
7
7
  PHOTOBUCKET_ALBUM = "album"
8
8
  PHOTOBUCKET_GROUP_ALBUM = "group_album"
9
9
 
10
+ REGEX_PHOTOBUCKET_IMAGE = /^\/albums\/(.+?)\/(?:(.*)\/)*(.+?)\.(.+?)$/i
11
+ REGEX_PHOTOBUCKET_ALBUM_OR_IMAGE = /^\/albums\/(.+?)\/(.[^\.]*?)\/?$/i
12
+ REGEX_PHOTOBUCKET_GROUP_IMAGE = /^\/groups\/(.+?)\/(.+?)\/(.+?)\.(.+)$/i
13
+ REGEX_PHOTOBUCKET_GROUP_ALBUM_OR_IMAGE = /^\/groups\/(\w+?)\/(\w+?)\/?$/i
14
+
10
15
  def self.included(base)
11
16
  base.class_eval do
12
17
  self::PARSERS[Muri::Filter::Photobucket] = "photobucket_parse"
13
18
  end
14
19
  end
20
+
21
+ def self.parsable?(uri)
22
+ uri.host =~ /^([a-z0-9]*?[^(media)])\.photobucket\.com$/i
23
+ end
15
24
 
16
25
  def photobucket_parse
17
- @info[:service] = 'Photobucket'
18
-
19
- @url.host =~ /^([a-z0-9]*?[^(media)])\.photobucket\.com$/i
20
- @info[:server_id] = $1.gsub(/([a-z]*)/i,"")
21
-
22
- if @url.path =~ /^\/albums\/(.+?)\/(.+?)\/(?:(.*)\/)*(.+?)\.(.+?)$/i #Images
23
- # OLD: /^\/albums\/(.+?)\/(.+?)\/((?:.+?\/)*)(.+?)\.(.+)/i
24
- photobucket_id = $1
25
- media_creator = $2
26
- album = $3.nil? ? '' : "#{$3}/"
27
- @info[:media_id] = $4
28
- @info[:content_type] = $5
29
- url_common = "#{server_id}.photobucket.com/albums/#{photobucket_id}/#{media_creator}/#{album}"
30
- direct_url_suffix = "#{url_common}#{@info[:media_id]}.#{@info[:content_type]}"
31
- @info[:media_api_type] = PHOTOBUCKET_MEDIA
32
- @info[:media_url] = "http://i#{direct_url_suffix}"
33
- @info[:website] = "http://s#{url_common}?action=view&current=#{@info[:media_id]}.#{@info[:content_type]}"
34
- elsif @url.path =~ /^\/albums\/(.+?)\/(.+?)\/(.[^\.]*?)\/?$/i #Albums
35
- # OLD: /^\/albums\/(.+?)\/(.+?)\/((?:.[^\/]+?)+)(?:\/|$)/i
36
- photobucket_id = $1
37
- media_creator = $2
38
- album = $3
39
- @info[:media_id] = "#{media_creator}/#{album}"
40
- url_common = "#{server_id}.photobucket.com/albums/#{photobucket_id}/#{media_creator}/#{album}"
41
- @info[:media_api_type] = PHOTOBUCKET_ALBUM
42
- @info[:website] = "http://s#{url_common}/"
43
- elsif @url.path =~ /^\/groups\/(.+?)\/(.+?)\/(.+?)\.(.+)$/i #Group Images
44
- group = $1
45
- group_hash_value = $2
46
- @info[:media_id] = $3
47
- @info[:content_type] = $4
48
- url_common = "#{server_id}.photobucket.com/groups/#{group}/#{group_hash_value}"
49
- direct_url_suffix = "#{url_common}/#{@info[:media_id]}.#{@info[:content_type]}"
50
- @info[:media_api_type] = PHOTOBUCKET_MEDIA
51
- @info[:media_url] = "http://gi#{direct_url_suffix}"
52
- @info[:website] = "http://gs#{url_common}/?action=view&current=#{@info[:media_id]}.#{@info[:content_type]}"
53
- elsif @url.path =~ /^\/groups\/(\w+?)\/(\w+?)\/?$/i #Group Album
26
+ self.media_service = PHOTOBUCKET_SERVICE_NAME #'Photobucket'
27
+
28
+ self.uri.host =~ /^([a-z0-9]*?[^(media)])\.photobucket\.com$/i
29
+ self.media_server_id = $1.gsub(/([a-z]*)/i,"")
30
+ params = Muri.param_parse(self.uri.query)
31
+
32
+ if self.uri.path =~ REGEX_PHOTOBUCKET_IMAGE
33
+ self.media_id = $3
34
+ self.media_content_type = $4
35
+ photobucket_set_image_common($1, $2)
36
+ elsif self.uri.path =~ REGEX_PHOTOBUCKET_ALBUM_OR_IMAGE
37
+ pb_id = $1
38
+ album = $2
39
+ url_common = "#{self.media_server_id}.photobucket.com/albums/#{pb_id}/#{album}"
40
+ if (params["action"] =~ /^(view)$/i && params["current"] =~ /^(.+)\.([a-z0-9]+)$/i)
41
+ filename = params["current"].split(".")
42
+ self.media_id = filename.first
43
+ self.media_content_type = filename.last
44
+ photobucket_set_image_common(pb_id, album)
45
+ else
46
+ self.media_id = "#{album}"
47
+ self.media_api_type = PHOTOBUCKET_ALBUM
48
+ self.media_website = "http://s#{url_common}/"
49
+ end
50
+ elsif self.uri.path =~ REGEX_PHOTOBUCKET_GROUP_IMAGE
51
+ self.media_id = $3
52
+ self.media_content_type = $4
53
+ photobucket_set_group_image_common($1, $2)
54
+ elsif self.uri.path =~ REGEX_PHOTOBUCKET_GROUP_ALBUM_OR_IMAGE
54
55
  group = $1
55
- group_hash_value = $2
56
- url_common = "#{server_id}.photobucket.com/groups/#{group}/#{group_hash_value}"
57
- @info[:media_id] = group_hash_value
58
- @info[:website] = "http://gs#{url_common}/"
59
- @info[:media_api_type] = PHOTOBUCKET_GROUP_ALBUM
60
- end
61
-
62
- if self.valid?
63
- if @info[:media_api_type] == PHOTOBUCKET_MEDIA
64
- @info[:media_api_id] = @info[:media_url]
65
- @info[:media_thumbnail] = "http://mobth#{direct_url_suffix}"
56
+ hash_value = $2
57
+ url_common = "#{self.media_server_id}.photobucket.com/groups/#{group}/#{hash_value}"
58
+ if (params["action"] =~ /^(view)$/i && params["current"] =~ /^(.+)\.([a-z0-9]+)$/i)
59
+ filename = params["current"].split(".")
60
+ self.media_id = filename.first
61
+ self.media_content_type = filename.last
62
+ photobucket_set_group_image_common(group, hash_value)
66
63
  else
67
- @info[:media_api_id] = @info[:media_id]
64
+ self.media_id = hash_value
65
+ self.media_website = "http://gs#{url_common}/"
66
+ self.media_api_type = PHOTOBUCKET_GROUP_ALBUM
68
67
  end
69
68
  else
70
- raise UnsupportedURI
69
+ raise UnsupportedURI
71
70
  end
72
-
73
- self
74
- end
75
-
76
- def self.parsable?(uri)
77
- uri.host =~ /^([a-z0-9]*?[^(media)])\.photobucket\.com$/i
78
- end
79
-
71
+
72
+ self.media_api_id = self.is_photobucket_media? ? self.media_url : self.media_id
73
+ end
74
+
75
+ def photobucket_set_image_common(pb_id, album)
76
+ url_common = "#{self.media_server_id}.photobucket.com/albums/#{pb_id}/#{album}/"
77
+ url_suffix = "#{url_common}#{self.media_id}.#{self.media_content_type}"
78
+ self.media_api_type = PHOTOBUCKET_MEDIA
79
+ self.media_url = "http://i" + url_suffix
80
+ self.media_website = "http://s#{url_common}?action=view&current=#{self.media_id}.#{self.media_content_type}"
81
+ self.media_thumbnail = "http://mobth#{url_suffix}"
82
+ end
83
+
84
+ def photobucket_set_group_image_common(group, hash_value)
85
+ url_common = "#{self.media_server_id}.photobucket.com/groups/#{group}/#{hash_value}"
86
+ url_suffix = "#{url_common}/#{self.media_id}.#{self.media_content_type}"
87
+ self.media_api_type = PHOTOBUCKET_MEDIA
88
+ self.media_url = "http://gi" + url_suffix
89
+ self.media_website = "http://gs#{url_common}/?action=view&current=#{self.media_id}.#{self.media_content_type}"
90
+ self.media_thumbnail = "http://mobth#{url_suffix}"
91
+ end
80
92
  end
81
93
  end
82
94
  end
@@ -1,41 +1,39 @@
1
1
  class Muri
2
2
  module Filter
3
3
  module Twitpic
4
-
4
+
5
+ private
5
6
  TWITPIC_PHOTO = 'photo'
7
+
8
+ REGEX_TWITPIC_PHOTO = /^\/([a-z0-9]+)/i
6
9
 
7
10
  def self.included(base)
8
11
  base.class_eval do
9
12
  self::PARSERS[Muri::Filter::Twitpic] = "twitpic_parse"
10
13
  end
11
14
  end
12
-
15
+
16
+ def self.parsable?(uri)
17
+ uri.host =~ /^twitpic\.com$/i
18
+ end
19
+
13
20
  def twitpic_parse
14
- @info[:service] = 'Twitpic'
21
+ self.media_service = TWITPIC_SERVICE_NAME #'Twitpic'
15
22
  url_common = "http://twitpic.com"
16
-
17
- if @url.path =~ /^\/([a-z0-9]+)/i
18
- @info[:media_id] = $1
19
- @info[:website] = "#{url_common}/#{@info[:media_id]}"
20
- @info[:media_url] = "#{url_common}/show/large/#{@info[:media_id]}"
21
- @info[:media_thumbnail] = "#{url_common}/show/thumb/#{@info[:media_id]}"
22
- @info[:media_api_type] = TWITPIC_PHOTO
23
- end
24
23
 
25
- # Twitpic does not have an API to pull photo info. Media ID is best guess
26
- if self.valid?
27
- @info[:media_api_id] = @info[:media_id]
24
+ if self.uri.path =~ REGEX_TWITPIC_PHOTO
25
+ self.media_id = $1
26
+ self.media_website = "#{url_common}/#{self.media_id}"
27
+ self.media_url = "#{url_common}/show/large/#{self.media_id}"
28
+ self.media_thumbnail = "#{url_common}/show/thumb/#{self.media_id}"
29
+ self.media_api_type = TWITPIC_PHOTO
28
30
  else
29
31
  raise UnsupportedURI
30
32
  end
31
-
32
- self
33
- end
34
-
35
- def self.parsable?(uri)
36
- uri.host =~ /^twitpic\.com$/i
33
+
34
+ # Twitpic does not have an API to pull photo info. Media ID is best guess
35
+ self.media_api_id = self.media_id
37
36
  end
38
-
39
37
  end
40
38
  end
41
39
  end
@@ -43,4 +41,4 @@ end
43
41
  # http://twitpic.com/show/large/17d7th
44
42
  # http://twitpic.com/show/thumb/17d7th
45
43
 
46
- # http://twitpic.com/api.do
44
+ # http://twitpic.com/api.do
@@ -1,54 +1,62 @@
1
- require 'cgi'
2
1
  class Muri
3
2
  module Filter
4
3
  module Vimeo
5
-
4
+
5
+ private
6
6
  VIMEO_VIDEO = "video"
7
7
  VIMEO_ALBUM = "album"
8
8
 
9
+ REGEX_VIMEO_VIDEO_OR_ALBUM = /^\/(album\/)?([0-9]+)\/?$/i
10
+ REGEX_VIMEO_GROUP_VIDEO = /^\/groups\/([0-9a-z\@\-\_]+)\/videos\/([0-9]+)\/?$/i
11
+ REGEX_VIMEO_SWF_VIDEO = /^\/moogaloop\.swf$/i
12
+
9
13
  def self.included(base)
10
14
  base.class_eval do
11
15
  self::PARSERS[Muri::Filter::Vimeo] = "vimeo_parse"
12
16
  end
13
17
  end
14
-
18
+
19
+ def self.parsable?(uri)
20
+ uri.host =~ /^(www\.)?vimeo\.com$/i
21
+ end
22
+
15
23
  def vimeo_parse
16
- @info[:service] = 'Vimeo'
17
- params = @url.query.nil? ? {} : CGI::parse(@url.query)#.each {|k,v| b[k] = v.first}
18
-
19
- if @url.path =~ /^\/(album\/)?([0-9]+)\/?$/i
20
- @info[:media_id] = $2
21
- @info[:media_api_type] = $1.nil? ? VIMEO_VIDEO : VIMEO_ALBUM
22
- elsif @url.path =~ /^\/groups\/([0-9a-z\@\-\_]+)\/videos\/([0-9]+)\/?$/i
23
- @info[:media_id] = $2
24
- @info[:media_api_type] = VIMEO_VIDEO
25
- elsif ((@url.path =~ /^\/moogaloop\.swf$/i) && (params.include?("clip_id")) && (params["clip_id"].first =~ /^([0-9]+)$/))
26
- @info[:media_id] = params["clip_id"].first
27
- @info[:media_api_type] = VIMEO_VIDEO
28
- end
29
-
30
- if self.valid?
31
- @info[:media_api_id] = @info[:media_id]
32
- album = (@info[:media_api_type] == VIMEO_ALBUM) ? "album/" : ""
33
- @info[:website] = "http://vimeo.com/#{album}#{@info[:media_id]}"
34
- if @info[:media_api_type] == VIMEO_VIDEO
35
- @info[:media_url] = "http://vimeo.com/moogaloop.swf?clip_id=#{@info[:media_id]}&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1"
36
- end
24
+ self.media_service = VIMEO_SERVICE_NAME #'Vimeo'
25
+ params = Muri.param_parse(self.uri.query)
26
+
27
+ if self.uri.path =~ REGEX_VIMEO_VIDEO_OR_ALBUM
28
+ self.media_id = $2
29
+ self.media_api_type = $1.nil? ? VIMEO_VIDEO : VIMEO_ALBUM
30
+ elsif self.uri.path =~ REGEX_VIMEO_GROUP_VIDEO
31
+ self.media_id = $2
32
+ self.media_api_type = VIMEO_VIDEO
33
+ elsif ((self.uri.path =~ REGEX_VIMEO_SWF_VIDEO) && (params["clip_id"] =~ /^([0-9]+)$/))
34
+ self.media_id = params["clip_id"]
35
+ self.media_api_type = VIMEO_VIDEO
37
36
  else
38
37
  raise UnsupportedURI
39
38
  end
40
-
41
- self
42
- end
43
-
44
- def self.parsable?(uri)
45
- uri.host =~ /^(www\.)?vimeo\.com$/i
39
+
40
+ self.media_api_id = self.media_id
41
+ self.media_website = Filter::Vimeo.vimeo_media_website self #:api_type => self.media_api_type, :id => self.media_id
42
+ if self.is_vimeo_video?
43
+ self.media_url = Filter::Vimeo.vimeo_media_url self #:id => self.media_id
44
+ end
45
+ end
46
+
47
+ def self.vimeo_media_url(obj)
48
+ "http://vimeo.com/moogaloop.swf?clip_id=#{obj.media_id}&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1"
49
+ end
50
+
51
+ def self.vimeo_media_website(obj)
52
+ str = "http://vimeo.com/"
53
+ str += "album/" if obj.media_api_type == VIMEO_ALBUM
54
+ str += obj.media_id
46
55
  end
47
-
48
56
  end
49
57
  end
50
58
  end
51
59
  # http://www.vimeo.com/groups/beyondthestill/videos/9394829
52
- # http://vimeo.com/moogaloop.swf?clip_id=7312128&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1"
60
+ # http://vimeo.com/moogaloop.swf?clip_id=7312128&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1"
53
61
  # http://vimeo.com/7312128
54
- # http://vimeo.com/album/89702
62
+ # http://vimeo.com/album/89702
@@ -1,55 +1,58 @@
1
- require 'cgi'
2
1
  class Muri
3
2
  module Filter
4
3
  module Youtube
5
4
 
5
+ private
6
6
  YOUTUBE_VIDEO = "video"
7
7
  YOUTUBE_PLAYLIST = "playlist"
8
+
9
+ REGEX_YOUTUBE_VIDEO_WATCH = /^\/watch\/?$/i
10
+ REGEX_YOUTUBE_VIDEO_DIRECT = /\/v\/([a-z0-9\-\_]+)/i
11
+ REGEX_YOUTUBE_PLAYLIST_WATCH = /^\/view\_play\_list\/?$/i
12
+ REGEX_YOUTUBE_PLAYLIST_DIRECT = /^\/p\/([a-z0-9\-\_]+)/i
8
13
 
9
14
  def self.included(base)
10
- base.class_eval do
15
+ base.class_eval do
11
16
  self::PARSERS[Muri::Filter::Youtube] = "youtube_parse"
12
17
  end
13
18
  end
14
-
19
+
20
+ def self.parsable?(uri)
21
+ uri.host =~ /^(www\.)?youtube\.com$/i
22
+ end
23
+
15
24
  def youtube_parse
16
- @info[:service] = 'Youtube'
17
- url_common = "http://www.youtube.com"
18
- params = @url.query.nil? ? {} : CGI::parse(@url.query)#.each {|k,v| b[k] = v.first}
19
-
20
- if (@url.path =~ /^\/watch$/i) && params.include?("v")
21
- @info[:media_id] = params["v"].first
22
- @info[:media_api_type] = YOUTUBE_VIDEO
23
- elsif (@url.path =~ /\/v\/([a-z0-9\-\_]+)/i)
24
- @info[:media_id] = $1
25
- @info[:media_api_type] = YOUTUBE_VIDEO
26
- elsif (@url.path =~ /^\/p\/([a-z0-9\-\_]+)/i)
27
- @info[:media_id] = $1
28
- @info[:media_api_type] = YOUTUBE_PLAYLIST
29
- elsif (@url.path =~ /^\/view\_play\_list$/i) && (params.include?('p'))
30
- @info[:media_id] = params['p'].first
31
- @info[:media_api_type] = YOUTUBE_PLAYLIST
32
- end
25
+ self.media_service = YOUTUBE_SERVICE_NAME #'Youtube'
33
26
 
34
- if self.valid?
35
- if @info[:media_api_type] == YOUTUBE_VIDEO
36
- @info[:website] = "#{url_common}/watch?v=#{@info[:media_id]}"
37
- @info[:media_url] = "#{url_common}/v/#{@info[:media_id]}"
38
- @info[:media_thumbnail] = "http://i.ytimg.com/vi/#{@info[:media_id]}/default.jpg"
39
- elsif @info[:media_api_type] == YOUTUBE_PLAYLIST
40
- @info[:website] = "#{url_common}/view_play_list?p=#{@info[:media_id]}"
41
- @info[:media_url] = "#{url_common}/p/#{@info[:media_id]}"
42
- end
43
- @info[:media_api_id] = @info[:media_id]
27
+ url_common = "http://www.youtube.com"
28
+ params = Muri.param_parse(self.uri.query)
29
+
30
+ if (self.uri.path =~ REGEX_YOUTUBE_VIDEO_WATCH) && params['v']
31
+ self.media_id = params['v']
32
+ self.media_api_type = YOUTUBE_VIDEO
33
+ elsif (self.uri.path =~ REGEX_YOUTUBE_VIDEO_DIRECT)
34
+ self.media_id = $1
35
+ self.media_api_type = YOUTUBE_VIDEO
36
+ elsif (self.uri.path =~ REGEX_YOUTUBE_PLAYLIST_DIRECT)
37
+ self.media_id = $1
38
+ self.media_api_type = YOUTUBE_PLAYLIST
39
+ elsif (self.uri.path =~ REGEX_YOUTUBE_PLAYLIST_WATCH) && (params['p'])
40
+ self.media_id = params['p']
41
+ self.media_api_type = YOUTUBE_PLAYLIST
44
42
  else
45
43
  raise UnsupportedURI
46
44
  end
47
-
48
- self
49
- end
50
- def self.parsable?(uri)
51
- uri.host =~ /^(www\.)?youtube\.com$/i
52
- end
45
+
46
+ self.media_api_id = self.media_id
47
+ if self.is_youtube_video?
48
+ self.media_website = "#{url_common}/watch?v=#{self.media_id}"
49
+ self.media_url = "#{url_common}/v/#{self.media_id}"
50
+ self.media_thumbnail = "http://i.ytimg.com/vi/#{self.media_id}/default.jpg"
51
+ elsif self.is_youtube_playlist?
52
+ self.media_website = "#{url_common}/view_play_list?p=#{self.media_id}"
53
+ self.media_url = "#{url_common}/p/#{self.media_id}"
54
+ end
55
+ end
53
56
  end
54
57
  end
55
58
  end
data/lib/muri.rb CHANGED
@@ -1,10 +1,12 @@
1
+ require 'uri'
2
+ require 'cgi'
3
+
1
4
  # Register built-in filters
2
5
  Dir["#{File.dirname(__FILE__) + '/muri/filters'}/**/*"].each do |filter|
3
6
  require "#{filter}"
4
7
  end
5
8
 
6
9
  # Just base now..more later(?)
7
- %w(base).each do |f|
10
+ %w(filter base).each do |f|
8
11
  require File.dirname(__FILE__) + "/muri/#{f}"
9
12
  end
10
-
data/muri.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{muri}
8
- s.version = "0.0.13"
8
+ s.version = "1.0.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["William Schneider"]
12
- s.date = %q{2010-03-23}
12
+ s.date = %q{2010-03-28}
13
13
  s.description = %q{Automatically get media information from the URL.}
14
14
  s.email = %q{bananastalktome@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -43,16 +43,16 @@ Gem::Specification.new do |s|
43
43
  s.homepage = %q{http://github.com/bananastalktome/muri/}
44
44
  s.rdoc_options = ["--charset=UTF-8"]
45
45
  s.require_paths = ["lib"]
46
- s.rubygems_version = %q{1.3.5}
46
+ s.rubygems_version = %q{1.3.6}
47
47
  s.summary = %q{Media URI Parser}
48
48
  s.test_files = [
49
- "test/error_test.rb",
50
- "test/facebook_test.rb",
51
- "test/flickr_test.rb",
52
- "test/imageshack_test.rb",
53
- "test/photobucket_test.rb",
49
+ "test/facebook_test.rb",
54
50
  "test/twitpic_test.rb",
51
+ "test/photobucket_test.rb",
55
52
  "test/vimeo_test.rb",
53
+ "test/imageshack_test.rb",
54
+ "test/error_test.rb",
55
+ "test/flickr_test.rb",
56
56
  "test/youtube_test.rb"
57
57
  ]
58
58
 
data/test/error_test.rb CHANGED
@@ -29,13 +29,13 @@ describe "Parse Errors" do
29
29
  it "#{b} should return UnsupportedURI" do
30
30
  #lambda { Muri.parse b }.should raise_exception(Muri::UnsupportedURI)
31
31
  m = Muri.parse b
32
- m.valid?.should == false
32
+ #m.valid?.should == false
33
33
  m.errors.should == "Muri::UnsupportedURI"
34
34
  end
35
35
  end
36
36
 
37
37
  it "should not bomb if no URI is provided" do
38
- lambda { Muri.parse '' }.should_not raise_exception()
38
+ lambda { Muri.parse nil }.should_not raise_exception()
39
39
  end
40
40
 
41
41
  end
@@ -2,13 +2,14 @@ require 'lib/muri.rb'
2
2
 
3
3
  shared_examples_for "Facebook parse" do
4
4
  it "should be Facebook service" do
5
- @a.service.should == 'Facebook'
5
+ @a.media_service.should == 'Facebook'
6
6
  end
7
7
 
8
8
  it "should be valid" do
9
9
  @a.valid?.should == true
10
10
  end
11
11
  end
12
+
12
13
  shared_examples_for "Facebook parse photo" do
13
14
  it_should_behave_like "Facebook parse"
14
15
  it "should have media api type = FACEBOOK_PHOTO" do
@@ -16,47 +17,34 @@ shared_examples_for "Facebook parse photo" do
16
17
  end
17
18
  end
18
19
 
19
- # shared_examples_for "Facebook parse video" do
20
- # it_should_behave_like "Facebook parse"
21
- # it "should have media api type = FACEBOOK_VIDEO" do
22
- # @a.media_api_type.should == Muri::FACEBOOK_VIDEO
23
- # end
24
- # end
25
-
26
- # describe "Facebook parse first" do
27
- # before(:all) do
28
- # @a = Muri.parse 'http://www.facebook.com/v/614695029223'
29
- # end
30
- # it_should_behave_like "Facebook parse video"
31
- #
32
- # it "should have media id" do
33
- # @a.media_id.should == '614695029223'
34
- # end
35
- #
36
- # it "should have a media_url" do
37
- # @a.media_url.should == 'http://www.facebook.com/v/614695029223'
38
- # end
39
- #
40
- # it "should have media api id" do
41
- # @a.media_api_id.should == '614695029223'
42
- # end
43
- # end
44
-
45
- describe "Facebook parse second" do
46
- before(:all) do
47
- @a = Muri.parse 'http://www.facebook.com/photo.php?pid=34929102&l=a1abf8cd37&id=15201063'
48
- end
49
- it_should_behave_like "Facebook parse photo"
50
-
51
- it "should have media id" do
52
- @a.media_id.should == '34929102'
53
- end
20
+ {'http://www.facebook.com/photo.php?pid=34929102&l=a1abf8cd37&id=15201063' =>
21
+ { :media_id => '34929102',
22
+ :media_website => 'http://www.facebook.com/photo.php?pid=34929102&l=a1abf8cd37&id=15201063',
23
+ :media_api_id => 65288068484364750
24
+ }
25
+ }.each do |url, values|
26
+ describe "Facebook parse #{url}" do
27
+ before(:all) do
28
+ @a = Muri.parse url
29
+ end
30
+ it_should_behave_like "Facebook parse photo"
54
31
 
55
- it "should have a website" do
56
- @a.website.should == 'http://www.facebook.com/photo.php?pid=34929102&l=a1abf8cd37&id=15201063'
32
+ if values[:media_id]
33
+ it "should have media id" do
34
+ @a.media_id.should == values[:media_id]
35
+ end
36
+ end
37
+
38
+ if values[:media_website]
39
+ it "should have a website" do
40
+ @a.media_website.should == values[:media_website]
41
+ end
42
+ end
43
+
44
+ if values[:media_api_id]
45
+ it "should have media api id" do
46
+ @a.media_api_id.should == values[:media_api_id]
47
+ end
48
+ end
57
49
  end
58
-
59
- it "should have media api id" do
60
- @a.media_api_id.should == 65288068484364750
61
- end
62
50
  end