url_to_media_tag 0.1.2 → 0.1.3
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/Readme.md +17 -1
- data/VERSION +1 -1
- data/lib/url_to_media_tag.rb +20 -4
- data/spec/url_to_media_tag_spec.rb +33 -6
- data/url_to_media_tag.gemspec +1 -1
- metadata +3 -3
data/Readme.md
CHANGED
@@ -19,8 +19,25 @@ Usage
|
|
19
19
|
|
20
20
|
UrlToMediaTag.convert('http://www.youtube.com/watch?v=kW-dS4otEZU') # -> <iframe ...>
|
21
21
|
UrlToMediaTag.convert(url, :width => 480, :height => 320) # -> <iframe ...>
|
22
|
+
UrlToMediaTag.convert('http://foo.com/xxx.jpg') # -> <img
|
22
23
|
UrlToMediaTag.convert('no-url') # -> nil
|
23
24
|
|
25
|
+
### settings
|
26
|
+
|
27
|
+
More specific settings overwrite others
|
28
|
+
|
29
|
+
UrlToMediaTag.convert(url, :width => '400px', :settings => {:image => {:width => '100%'}, :vimeo => {:show_title => true})
|
30
|
+
any -> :width => '400px'
|
31
|
+
image -> :width => '100%'
|
32
|
+
vimeo -> :width => '400px', :show_title => true
|
33
|
+
|
34
|
+
Videos get default settings
|
35
|
+
|
36
|
+
:width => 640,
|
37
|
+
:height => 480,
|
38
|
+
:class => "url-to-media-tag-video",
|
39
|
+
:frameborder => 0
|
40
|
+
|
24
41
|
### Find
|
25
42
|
|
26
43
|
urls = text.scan(%r{https?://[^\s]*})
|
@@ -35,7 +52,6 @@ Alternative
|
|
35
52
|
|
36
53
|
TODO
|
37
54
|
====
|
38
|
-
- support images
|
39
55
|
- let users choose which providers to convert
|
40
56
|
|
41
57
|
Author
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.3
|
data/lib/url_to_media_tag.rb
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
module UrlToMediaTag
|
2
2
|
VERSION = File.read( File.join(File.dirname(__FILE__),'..','VERSION') ).strip
|
3
3
|
|
4
|
-
|
4
|
+
VIDEO_DEFAULTS = {
|
5
5
|
:width => 640,
|
6
|
-
:height => 480
|
6
|
+
:height => 480,
|
7
|
+
:class => "url-to-media-tag-video",
|
8
|
+
:frameborder => 0
|
7
9
|
}
|
8
10
|
|
9
11
|
def self.video_iframe(url, options)
|
10
|
-
options = {:src => url
|
12
|
+
options = {:src => url}.merge(VIDEO_DEFAULTS).merge(options)
|
11
13
|
tag(:iframe, options)
|
12
14
|
end
|
13
15
|
|
@@ -16,8 +18,18 @@ module UrlToMediaTag
|
|
16
18
|
%{<#{name} #{options}></#{name}>}
|
17
19
|
end
|
18
20
|
|
21
|
+
# :video, :x => 1, :settings => {:video => {:width => 300}}
|
22
|
+
# --> {:x => 1, :width => 300}
|
23
|
+
def self.merge_settings(*args)
|
24
|
+
options = args.pop.dup
|
25
|
+
raise unless options.kind_of?(Hash)
|
26
|
+
settings = options.delete(:settings) || {}
|
27
|
+
args.each{|type| options.merge!(settings[type] || {}) }
|
28
|
+
options
|
29
|
+
end
|
30
|
+
|
19
31
|
def self.convert(url, options={})
|
20
|
-
options =
|
32
|
+
options = options.dup
|
21
33
|
|
22
34
|
# prevent any kind of html or xss
|
23
35
|
return if url.include?('>') or url.include?('<')
|
@@ -26,11 +38,14 @@ module UrlToMediaTag
|
|
26
38
|
|
27
39
|
# youtube
|
28
40
|
when /http:\/\/(www.)?youtube\.com\/watch\?v=([A-Za-z0-9._%-]*)(\&\S+)?|http:\/\/(www.)?youtu\.be\/([A-Za-z0-9._%-]*)?/
|
41
|
+
options = merge_settings(:video, :vimeo, options)
|
29
42
|
youtube_id = $2 || $5
|
30
43
|
video_iframe "http://www.youtube.com/embed/#{youtube_id}", options
|
31
44
|
|
32
45
|
# vimeo
|
33
46
|
when /http:\/\/(www.)?vimeo\.com\/([A-Za-z0-9._%-]*)((\?|#)\S+)?/
|
47
|
+
options = merge_settings(:video, :vimeo, options)
|
48
|
+
|
34
49
|
vimeo_id = $2
|
35
50
|
show_title = "title=0" unless options.delete(:show_title)
|
36
51
|
show_byline = "byline=0" unless options.delete(:show_byline)
|
@@ -42,6 +57,7 @@ module UrlToMediaTag
|
|
42
57
|
|
43
58
|
# image
|
44
59
|
when /https?:\/\/\S+\.(jpe?g|gif|png|bmp|tif)(\?\S+)?/i
|
60
|
+
options = merge_settings(:image, options)
|
45
61
|
tag(:img, options.merge(:src => $&))
|
46
62
|
end
|
47
63
|
|
@@ -17,15 +17,15 @@ describe UrlToMediaTag do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
it "converts images" do
|
20
|
-
UrlToMediaTag.convert('http://foo.com/foo.jpg').should == "<img
|
21
|
-
UrlToMediaTag.convert('http://foo.com/foo.gif').should == "<img
|
22
|
-
UrlToMediaTag.convert('http://foo.com/foo.png').should == "<img
|
23
|
-
UrlToMediaTag.convert('http://foo.com/foo.jpeg').should == "<img
|
24
|
-
UrlToMediaTag.convert('http://foo.com/foo.JPG').should == "<img
|
20
|
+
UrlToMediaTag.convert('http://foo.com/foo.jpg').should == "<img src=\"http://foo.com/foo.jpg\"></img>"
|
21
|
+
UrlToMediaTag.convert('http://foo.com/foo.gif').should == "<img src=\"http://foo.com/foo.gif\"></img>"
|
22
|
+
UrlToMediaTag.convert('http://foo.com/foo.png').should == "<img src=\"http://foo.com/foo.png\"></img>"
|
23
|
+
UrlToMediaTag.convert('http://foo.com/foo.jpeg').should == "<img src=\"http://foo.com/foo.jpeg\"></img>"
|
24
|
+
UrlToMediaTag.convert('http://foo.com/foo.JPG').should == "<img src=\"http://foo.com/foo.JPG\"></img>"
|
25
25
|
end
|
26
26
|
|
27
27
|
it "converts images with ?" do
|
28
|
-
UrlToMediaTag.convert('http://foo.com/foo.jpg?foo=bar').should == "<img
|
28
|
+
UrlToMediaTag.convert('http://foo.com/foo.jpg?foo=bar').should == "<img src=\"http://foo.com/foo.jpg?foo=bar\"></img>"
|
29
29
|
end
|
30
30
|
|
31
31
|
it "does not convert unknown" do
|
@@ -40,5 +40,32 @@ describe UrlToMediaTag do
|
|
40
40
|
UrlToMediaTag.convert('http://vimeo.com/26881896<').should == nil
|
41
41
|
UrlToMediaTag.convert('http://vimeo.com/26881896>').should == nil
|
42
42
|
end
|
43
|
+
|
44
|
+
describe 'settings' do
|
45
|
+
it "uses directly given settings" do
|
46
|
+
UrlToMediaTag.convert('http://foo.com/foo.jpg', :foo => 'bar').should == "<img foo=\"bar\" src=\"http://foo.com/foo.jpg\"></img>"
|
47
|
+
end
|
48
|
+
|
49
|
+
it "uses indirectly given settings" do
|
50
|
+
UrlToMediaTag.convert('http://foo.com/foo.jpg', :settings => {:image => {:foo => 'bar'}}).should == "<img foo=\"bar\" src=\"http://foo.com/foo.jpg\"></img>"
|
51
|
+
end
|
52
|
+
|
53
|
+
it "does not use not-matching settings" do
|
54
|
+
UrlToMediaTag.convert('http://foo.com/foo.jpg', :settings => {:video => {:foo => 'bar'}}).should == "<img src=\"http://foo.com/foo.jpg\"></img>"
|
55
|
+
end
|
56
|
+
|
57
|
+
it "users more precise settings" do
|
58
|
+
UrlToMediaTag.convert('http://vimeo.com/26881896', :settings => {:video => {:foo => 'bar'}, :vimeo => {:foo => 'baz'}}).should include('foo="baz"')
|
59
|
+
end
|
60
|
+
|
61
|
+
it "overwrites default settings" do
|
62
|
+
UrlToMediaTag.convert('http://foo.com/foo.jpg', :foo => 'bar', :settings => {:image => {:foo => 'baz'}}).should include('foo="baz"')
|
63
|
+
end
|
64
|
+
|
65
|
+
it "can take options from settings" do
|
66
|
+
UrlToMediaTag.convert('http://vimeo.com/26881896').should include('title=0')
|
67
|
+
UrlToMediaTag.convert('http://vimeo.com/26881896', :settings => {:vimeo => {:show_title => true}}).should_not include('title=0')
|
68
|
+
end
|
69
|
+
end
|
43
70
|
end
|
44
71
|
end
|
data/url_to_media_tag.gemspec
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: url_to_media_tag
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 29
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 3
|
10
|
+
version: 0.1.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Michael Grosser
|