conred 0.2.6 → 0.2.7
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -3
- data/README.md +30 -10
- data/conred.gemspec +3 -1
- data/lib/conred.rb +10 -2
- data/lib/conred/version.rb +1 -1
- data/lib/conred/video.rb +72 -48
- data/lib/views/video/video_iframe.html.haml +1 -0
- data/spec/conred_spec/video_spec.rb +35 -19
- metadata +36 -5
- data/lib/views/video/vimeo_iframe.html.haml +0 -1
- data/lib/views/video/youtube_iframe.html.haml +0 -1
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,8 +1,12 @@
|
|
1
|
+
[![Code Climate](https://codeclimate.com/github/janjiss/conred.png)](https://codeclimate.com/github/janjiss/conred)
|
2
|
+
[![Build Status](https://travis-ci.org/janjiss/conred.png?branch=master)](https://travis-ci.org/janjiss/conred)
|
3
|
+
|
1
4
|
# Conred
|
2
5
|
|
3
6
|
In every project we have common things like video
|
4
|
-
embeding from url,
|
5
|
-
external url protocol adding
|
7
|
+
embeding from url, user input displaying, formating, trimming stripping,
|
8
|
+
external url protocol adding and all that nasty stuff that we write in our apps.
|
9
|
+
These are the cases where Conred saves the day.
|
6
10
|
|
7
11
|
## Installation
|
8
12
|
|
@@ -20,20 +24,31 @@ Or install it yourself as:
|
|
20
24
|
|
21
25
|
## Usage
|
22
26
|
|
23
|
-
|
24
|
-
For video you can use:
|
27
|
+
### Iframe generetor for Youtube and Vimeo videos:
|
25
28
|
|
26
|
-
c = Conred::Video.new(
|
29
|
+
c = Conred::Video.new(
|
30
|
+
video_url: "http://www.youtube.com/watch?v=tNtW9pGFPTA&feature=plcp",
|
31
|
+
width: 285,
|
32
|
+
height: 185,
|
33
|
+
error_message: "Video url is invalid"
|
34
|
+
)
|
27
35
|
|
28
|
-
|
36
|
+
__NOTE:__ This is new constructor type as of version 0.3.0.
|
37
|
+
|
38
|
+
Then you can get your ready embed code like this (Conred will recognize video provider by itself):
|
29
39
|
|
30
40
|
c.code
|
31
41
|
|
32
|
-
You can also check if it is youtube
|
42
|
+
You can also check if it is youtube or vimeo video like this:
|
33
43
|
|
34
44
|
c.youtube_video? ==> true
|
35
45
|
c.vimeo_video? ==> false
|
36
|
-
|
46
|
+
|
47
|
+
Or if it exists:
|
48
|
+
|
49
|
+
c.exists? ==> true
|
50
|
+
|
51
|
+
### General helpers for rails app
|
37
52
|
|
38
53
|
If you wish to use text helpers then in your application_helper add this include line:
|
39
54
|
|
@@ -51,8 +66,7 @@ Sanitizes body, allowed tags are(p a strong ul ol li blockquote strike u em):
|
|
51
66
|
|
52
67
|
External link formating
|
53
68
|
|
54
|
-
external_url("www.google.
|
55
|
-
|
69
|
+
external_url("www.google.com") => "http://www.google.com"
|
56
70
|
|
57
71
|
## Contributing
|
58
72
|
|
@@ -61,3 +75,9 @@ External link formating
|
|
61
75
|
3. Create tests for it (Important!)
|
62
76
|
4. Create new Pull Request
|
63
77
|
5. Be happy
|
78
|
+
|
79
|
+
## Thank you's
|
80
|
+
|
81
|
+
I would like to thank these guys for contributing:
|
82
|
+
@alexcp
|
83
|
+
@barisbalic
|
data/conred.gemspec
CHANGED
@@ -8,8 +8,10 @@ Gem::Specification.new do |gem|
|
|
8
8
|
gem.summary = %q{ConcepticHQ reusable code}
|
9
9
|
gem.homepage = "http://github.com/janjiss/conred"
|
10
10
|
|
11
|
+
gem.add_dependency "haml"
|
11
12
|
gem.add_development_dependency "rspec"
|
12
|
-
gem.
|
13
|
+
gem.add_development_dependency "rake"
|
14
|
+
gem.add_development_dependency "actionpack"
|
13
15
|
|
14
16
|
gem.files = `git ls-files`.split($\)
|
15
17
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
data/lib/conred.rb
CHANGED
@@ -5,5 +5,13 @@ require "conred/video"
|
|
5
5
|
require "conred/links"
|
6
6
|
require "haml"
|
7
7
|
module Conred
|
8
|
-
|
9
|
-
|
8
|
+
def Video.new arguments
|
9
|
+
if Video::Youtube.url_format_is_valid? arguments[:video_url]
|
10
|
+
Video::Youtube.new arguments
|
11
|
+
elsif Video::Vimeo.url_format_is_valid? arguments[:video_url]
|
12
|
+
Video::Vimeo.new arguments
|
13
|
+
else
|
14
|
+
Video::Other.new arguments
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/conred/version.rb
CHANGED
data/lib/conred/video.rb
CHANGED
@@ -2,80 +2,104 @@ require "conred/version"
|
|
2
2
|
require "action_view"
|
3
3
|
require "net/http"
|
4
4
|
module Conred
|
5
|
-
|
6
|
-
def initialize(
|
7
|
-
@width = width
|
8
|
-
@height = height
|
9
|
-
@
|
10
|
-
@
|
11
|
-
end
|
12
|
-
|
13
|
-
def code
|
14
|
-
if youtube_video?
|
15
|
-
video_from_youtube_url
|
16
|
-
elsif vimeo_video?
|
17
|
-
video_from_vimeo_url
|
18
|
-
else
|
19
|
-
@error_message
|
20
|
-
end
|
5
|
+
module Video
|
6
|
+
def initialize(arguments = {:width => 670, :height => 450, :error_message => "Video url you have provided is invalid"})
|
7
|
+
@width = arguments[:width]
|
8
|
+
@height = arguments[:height]
|
9
|
+
@error_message = arguments[:error_message]
|
10
|
+
@video_id = get_video_id_from arguments[:video_url]
|
21
11
|
end
|
22
12
|
|
23
13
|
def youtube_video?
|
24
|
-
|
14
|
+
is_a?(Video::Youtube)
|
25
15
|
end
|
26
16
|
|
27
17
|
def vimeo_video?
|
28
|
-
|
18
|
+
is_a?(Video::Vimeo)
|
29
19
|
end
|
30
20
|
|
31
|
-
|
32
|
-
def video_from_vimeo_url
|
33
|
-
vimeo_partial = "../views/video/vimeo_iframe"
|
21
|
+
def code
|
34
22
|
render(
|
35
|
-
|
36
|
-
:
|
37
|
-
:height => @height,
|
23
|
+
:video_link => video_link,
|
24
|
+
:height => @height,
|
38
25
|
:width => @width
|
39
26
|
).html_safe
|
40
27
|
end
|
41
28
|
|
42
|
-
def
|
43
|
-
|
44
|
-
|
45
|
-
youtube_partial,
|
46
|
-
:youtube_id => video_id,
|
47
|
-
:height => @height,
|
48
|
-
:width => @width
|
49
|
-
).html_safe
|
29
|
+
def exist?
|
30
|
+
response = Net::HTTP.get_response(URI(api_uri))
|
31
|
+
response.is_a?(Net::HTTPSuccess)
|
50
32
|
end
|
51
33
|
|
52
|
-
|
34
|
+
private
|
35
|
+
|
36
|
+
def render(locals = {})
|
53
37
|
path = File.join(
|
54
38
|
File.dirname(__FILE__),
|
55
|
-
|
39
|
+
"../views/video/video_iframe".split("/")
|
56
40
|
)
|
57
41
|
Haml::Engine.new(File.read("#{path}.html.haml")).render(Object.new, locals)
|
58
42
|
end
|
59
43
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
44
|
+
class Youtube
|
45
|
+
include Video
|
46
|
+
|
47
|
+
def self.url_format_is_valid? url
|
48
|
+
/^(http:\/\/)*(www\.)*(youtube.com|youtu.be)/ =~ url
|
49
|
+
end
|
50
|
+
|
51
|
+
def api_uri
|
52
|
+
"http://gdata.youtube.com/feeds/api/videos/#{@video_id}"
|
53
|
+
end
|
54
|
+
|
55
|
+
def video_link
|
56
|
+
"http://www.youtube.com/embed/#{@video_id}?wmode=transparent"
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def get_video_id_from url
|
62
|
+
if url[/youtu\.be\/([^\?]*)/]
|
63
|
+
video_id = $1
|
64
|
+
else
|
65
|
+
url[/(v=([A-Za-z0-9_-]*))/]
|
66
|
+
video_id = $2
|
67
|
+
end
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
71
|
+
class Vimeo
|
72
|
+
include Video
|
73
|
+
|
74
|
+
def self.url_format_is_valid? url
|
75
|
+
/^(http:\/\/)*(www\.)*(vimeo.com)/ =~ url
|
76
|
+
end
|
77
|
+
|
78
|
+
def api_uri
|
79
|
+
"http://vimeo.com/api/v2/video/#{@video_id}.json"
|
80
|
+
end
|
81
|
+
|
82
|
+
def video_link
|
83
|
+
"http://player.vimeo.com/video/#{@video_id}"
|
84
|
+
end
|
85
|
+
|
86
|
+
private
|
87
|
+
|
88
|
+
def get_video_id_from url
|
89
|
+
url[/vimeo\.com\/([0-9]*)/]
|
90
|
+
video_id = $1
|
76
91
|
end
|
77
|
-
response.is_a?(Net::HTTPSuccess)
|
78
92
|
end
|
79
93
|
|
94
|
+
class Other
|
95
|
+
include Video
|
96
|
+
def initialize(arguments = {:error_message => "Video url you have provided is invalid"})
|
97
|
+
@error_message = arguments[:error_message]
|
98
|
+
end
|
99
|
+
|
100
|
+
def code
|
101
|
+
@error_message
|
102
|
+
end
|
103
|
+
end
|
80
104
|
end
|
81
105
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
%iframe{:allowFullScreen => "", :frameborder => "0", :height => height, :mozallowfullscreen => "", :src => "#{video_link}", :webkitAllowFullScreen => "", :width => width}
|
@@ -3,14 +3,14 @@ require "conred"
|
|
3
3
|
describe Conred do
|
4
4
|
describe Conred::Video do
|
5
5
|
|
6
|
-
let(:short_youtube_url) {Conred::Video.new("http://youtu.be/SZt5RFzqEfY")}
|
7
|
-
let(:short_youtube_url_with_www) {Conred::Video.new("www.youtu.be/SZt5RFzqEfY")}
|
8
|
-
let(:long_youtube_url_with_features) {Conred::Video.new("http://www.youtube.com/watch?NR=1&feature=endscreen&v=Lrj5Kxdzouc")}
|
9
|
-
let(:short_youtube_url_without_http_and_www) {Conred::Video.new("youtu.be/SZt5RFzqEfY")}
|
10
|
-
|
11
|
-
let(:vimeo_url) {Conred::Video.new("http://vimeo.com/12311233")}
|
12
|
-
let(:evil_vimeo) {Conred::Video.new("eeevil vimeo www.vimeo.com/12311233")}
|
13
|
-
let(:vimeo_without_http) {Conred::Video.new("vimeo.com/12311233")}
|
6
|
+
let(:short_youtube_url) {Conred::Video.new(:video_url=>"http://youtu.be/SZt5RFzqEfY")}
|
7
|
+
let(:short_youtube_url_with_www) {Conred::Video.new(:video_url=>"www.youtu.be/SZt5RFzqEfY")}
|
8
|
+
let(:long_youtube_url_with_features) {Conred::Video.new(:video_url=>"http://www.youtube.com/watch?NR=1&feature=endscreen&v=Lrj5Kxdzouc")}
|
9
|
+
let(:short_youtube_url_without_http_and_www) {Conred::Video.new(:video_url=>"youtu.be/SZt5RFzqEfY")}
|
10
|
+
|
11
|
+
let(:vimeo_url) {Conred::Video.new(:video_url=>"http://vimeo.com/12311233")}
|
12
|
+
let(:evil_vimeo) {Conred::Video.new(:video_url=>"eeevil vimeo www.vimeo.com/12311233")}
|
13
|
+
let(:vimeo_without_http) {Conred::Video.new(:video_url=>"vimeo.com/12311233")}
|
14
14
|
|
15
15
|
it "should match youtube video" do
|
16
16
|
short_youtube_url.should be_youtube_video
|
@@ -30,26 +30,42 @@ describe Conred do
|
|
30
30
|
vimeo_url.should be_vimeo_video
|
31
31
|
end
|
32
32
|
|
33
|
-
|
34
|
-
Conred::Video.new("http://www.youtube.com/watch?
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
Conred::Video.new("http://
|
33
|
+
describe "youtube embed code" do
|
34
|
+
subject {Conred::Video.new(:video_url=>"http://www.youtube.com/watch?v=Lrj5Kxdzouc", :width=>450,:height=> 300).code }
|
35
|
+
it { should match(/Lrj5Kxdzouc/)}
|
36
|
+
it { should match(/width='450'/)}
|
37
|
+
it {should match(/height='300'/)}
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "vimeo embed code" do
|
41
|
+
subject { Conred::Video.new(:video_url=>"http://vimeo.com/49556689", :width=>450, :height=>300).code }
|
42
|
+
it {should match(/49556689/)}
|
43
|
+
it {should match(/width='450'/)}
|
44
|
+
it {should match(/height='300'/)}
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should render error message when url is invalid" do
|
48
|
+
Conred::Video.new(:video_url=>"http://google.com/12311233", :width=>450, :height=>300, :error_message=>"Some mistake in url").code.should == "Some mistake in url"
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should return correct embed code when passing arguments in url" do
|
52
|
+
Conred::Video.new(:video_url=>"http://www.youtube.com/watch?NR=1&feature=endscreen&v=Lrj5Kxdzouc",:width=> 450,:height=> 300).code.should match(/Lrj5Kxdzouc/)
|
42
53
|
end
|
43
54
|
|
44
55
|
describe "check if a video exist" do
|
45
56
|
it "should return false if request 404" do
|
46
|
-
non_existing_video = Conred::Video.new("http://www.youtube.com/watch?v=Lrj5Kxdzoux")
|
57
|
+
non_existing_video = Conred::Video.new(:video_url=>"http://www.youtube.com/watch?v=Lrj5Kxdzoux")
|
47
58
|
Net::HTTP.stub(:get_response=>Net::HTTPNotFound.new(true, 404, "Not Found"))
|
48
59
|
non_existing_video.exist?.should be_false
|
49
60
|
end
|
50
61
|
|
62
|
+
it "should make a request to the proper uri" do
|
63
|
+
non_existing_video = Conred::Video.new(:video_url=>"http://www.youtube.com/watch?v=Lrj5Kxdzoux")
|
64
|
+
non_existing_video.api_uri.should eq("http://gdata.youtube.com/feeds/api/videos/Lrj5Kxdzoux")
|
65
|
+
end
|
66
|
+
|
51
67
|
it "should be true if response is 200" do
|
52
|
-
existing_video = Conred::Video.new("http://www.youtube.com/watch?v=Lrj5Kxdzouc")
|
68
|
+
existing_video = Conred::Video.new(:video_url=>"http://www.youtube.com/watch?v=Lrj5Kxdzouc")
|
53
69
|
Net::HTTP.stub(:get_response=>Net::HTTPOK.new(true,200,"OK"))
|
54
70
|
existing_video.exist?.should be_true
|
55
71
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: conred
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,8 +9,24 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-04-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: haml
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
14
30
|
- !ruby/object:Gem::Dependency
|
15
31
|
name: rspec
|
16
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -27,6 +43,22 @@ dependencies:
|
|
27
43
|
- - ! '>='
|
28
44
|
- !ruby/object:Gem::Version
|
29
45
|
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rake
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
30
62
|
- !ruby/object:Gem::Dependency
|
31
63
|
name: actionpack
|
32
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -35,7 +67,7 @@ dependencies:
|
|
35
67
|
- - ! '>='
|
36
68
|
- !ruby/object:Gem::Version
|
37
69
|
version: '0'
|
38
|
-
type: :
|
70
|
+
type: :development
|
39
71
|
prerelease: false
|
40
72
|
version_requirements: !ruby/object:Gem::Requirement
|
41
73
|
none: false
|
@@ -61,8 +93,7 @@ files:
|
|
61
93
|
- lib/conred/links.rb
|
62
94
|
- lib/conred/version.rb
|
63
95
|
- lib/conred/video.rb
|
64
|
-
- lib/views/video/
|
65
|
-
- lib/views/video/youtube_iframe.html.haml
|
96
|
+
- lib/views/video/video_iframe.html.haml
|
66
97
|
- spec/conred_spec.rb
|
67
98
|
- spec/conred_spec/helpers_spec.rb
|
68
99
|
- spec/conred_spec/video_spec.rb
|
@@ -1 +0,0 @@
|
|
1
|
-
%iframe{:allowFullScreen => "", :frameborder => "0", :height => height, :mozallowfullscreen => "", :src => "http://player.vimeo.com/video/#{vimeo_id}", :webkitAllowFullScreen => "", :width => width}
|
@@ -1 +0,0 @@
|
|
1
|
-
%iframe{:allowfullscreen => "", :frameborder => "0", :height => height, :src => "http://www.youtube.com/embed/#{youtube_id}?wmode=transparent", :title => "YouTube video player", :width => width}
|