auto_html-whistlerbrk 2.0.0.pre

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.
Files changed (65) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +123 -0
  3. data/Rakefile +9 -0
  4. data/lib/auto_html.rb +17 -0
  5. data/lib/auto_html/auto_html_for.rb +64 -0
  6. data/lib/auto_html/base.rb +21 -0
  7. data/lib/auto_html/builder.rb +22 -0
  8. data/lib/auto_html/capistrano.rb +17 -0
  9. data/lib/auto_html/filter.rb +22 -0
  10. data/lib/auto_html/filters/dailymotion.rb +6 -0
  11. data/lib/auto_html/filters/flickr.rb +20 -0
  12. data/lib/auto_html/filters/gist.rb +8 -0
  13. data/lib/auto_html/filters/google_map.rb +19 -0
  14. data/lib/auto_html/filters/hashtag.rb +7 -0
  15. data/lib/auto_html/filters/html_escape.rb +9 -0
  16. data/lib/auto_html/filters/image.rb +16 -0
  17. data/lib/auto_html/filters/instagram.rb +10 -0
  18. data/lib/auto_html/filters/link.rb +16 -0
  19. data/lib/auto_html/filters/liveleak.rb +19 -0
  20. data/lib/auto_html/filters/metacafe.rb +13 -0
  21. data/lib/auto_html/filters/redcarpet.rb +4 -0
  22. data/lib/auto_html/filters/sanitize.rb +5 -0
  23. data/lib/auto_html/filters/simple_format.rb +12 -0
  24. data/lib/auto_html/filters/soundcloud.rb +19 -0
  25. data/lib/auto_html/filters/ted.rb +13 -0
  26. data/lib/auto_html/filters/twitter.rb +19 -0
  27. data/lib/auto_html/filters/vimeo.rb +15 -0
  28. data/lib/auto_html/filters/worldstar.rb +8 -0
  29. data/lib/auto_html/filters/youtube.rb +19 -0
  30. data/lib/auto_html/filters/youtube_image.rb +17 -0
  31. data/lib/auto_html/filters/youtube_js_api.rb +6 -0
  32. data/lib/auto_html/railtie.rb +10 -0
  33. data/lib/auto_html/rake_tasks.rb +27 -0
  34. data/lib/auto_html/task.rb +9 -0
  35. data/test/fixture_setup.rb +13 -0
  36. data/test/fixtures/database.yml +5 -0
  37. data/test/fixtures/schema.rb +20 -0
  38. data/test/functional/auto_html_for_options_test.rb +26 -0
  39. data/test/functional/auto_html_for_test.rb +56 -0
  40. data/test/functional/filter_test.rb +27 -0
  41. data/test/test_helper.rb +16 -0
  42. data/test/unit/auto_html_test.rb +37 -0
  43. data/test/unit/filters/dailymotion_test.rb +34 -0
  44. data/test/unit/filters/gist_test.rb +15 -0
  45. data/test/unit/filters/google_map_test.rb +24 -0
  46. data/test/unit/filters/hashtag_test.rb +25 -0
  47. data/test/unit/filters/html_escape_test.rb +15 -0
  48. data/test/unit/filters/image_test.rb +77 -0
  49. data/test/unit/filters/instagram_test.rb +35 -0
  50. data/test/unit/filters/link_test.rb +55 -0
  51. data/test/unit/filters/liveleak_test.rb +17 -0
  52. data/test/unit/filters/metacafe_test.rb +29 -0
  53. data/test/unit/filters/redcarpet_test.rb +38 -0
  54. data/test/unit/filters/sanitize_test.rb +36 -0
  55. data/test/unit/filters/simple_format_test.rb +15 -0
  56. data/test/unit/filters/soundcloud_test.rb +52 -0
  57. data/test/unit/filters/ted_test.rb +18 -0
  58. data/test/unit/filters/twitter_test.rb +45 -0
  59. data/test/unit/filters/vimeo_test.rb +64 -0
  60. data/test/unit/filters/worldstar_test.rb +27 -0
  61. data/test/unit/filters/youtube_image_test.rb +59 -0
  62. data/test/unit/filters/youtube_js_api_test.rb +30 -0
  63. data/test/unit/filters/youtube_test.rb +73 -0
  64. data/test/unit/unit_test_helper.rb +3 -0
  65. metadata +134 -0
@@ -0,0 +1,13 @@
1
+ AutoHtml.add_filter(:metacafe).with(:width => 440, :height => 272, :show_stats => false, :autoplay => false) do |text, options|
2
+ text.gsub(/http:\/\/www\.metacafe\.com\/watch\/([A-Za-z0-9._%-]*)\/([A-Za-z0-9._%-]*)(\/)?/) do
3
+ metacafe_id = $1
4
+ metacafe_slug = $2
5
+ width = options[:width]
6
+ height = options[:height]
7
+ show_stats = options[:show_stats] ? "showStats=yes" : "showStats=no"
8
+ autoplay = options[:autoplay] ? "autoPlay=yes" : "autoPlay=no"
9
+ flash_vars = [show_stats, autoplay].join("|")
10
+
11
+ %{<div style="background:#000000;width:#{width}px;height:#{height}px"><embed flashVars="playerVars=#{flash_vars}" src="http://www.metacafe.com/fplayer/#{metacafe_id}/#{metacafe_slug}.swf" width="#{width}" height="#{height}" wmode="transparent" allowFullScreen="true" allowScriptAccess="always" name="Metacafe_#{metacafe_id}" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"></embed></div>}
12
+ end
13
+ end
@@ -0,0 +1,4 @@
1
+ require 'redcarpet'
2
+ AutoHtml.add_filter(:redcarpet).with(:renderer => Redcarpet::Render::HTML, :markdown_options => {}) do |text, options|
3
+ Redcarpet::Markdown.new(options[:renderer], options[:markdown_options]).render(text)
4
+ end
@@ -0,0 +1,5 @@
1
+ AutoHtml.add_filter(:sanitize).with({}) do |text, options|
2
+ require 'action_controller'
3
+ require 'cgi'
4
+ HTML::WhiteListSanitizer.new.sanitize(text, options)
5
+ end
@@ -0,0 +1,12 @@
1
+ AutoHtml.add_filter(:simple_format).with({}) do |text, html_options|
2
+ require 'action_view'
3
+
4
+ args = [text, {}, {:sanitize => false}]
5
+ begin
6
+ ActionView::Base.new.simple_format(*args)
7
+ rescue ArgumentError
8
+ # Rails 2 support
9
+ args.pop
10
+ retry
11
+ end
12
+ end
@@ -0,0 +1,19 @@
1
+ # encoding: UTF-8
2
+
3
+ # set these options and default values
4
+ # :width => '100%', :height => 166, :auto_play => false, :theme_color => '00FF00', :color => '915f33', :show_comments => false
5
+ AutoHtml.add_filter(:soundcloud).with(:width => '100%', :height => 166, :auto_play => false, :theme_color => '00FF00', :color => '915f33', :show_comments => false, :show_artwork => false) do |text, options|
6
+ text.gsub(/(https?:\/\/)?(www.)?soundcloud\.com\/\S*/) do |match|
7
+ new_uri = match.to_s
8
+ new_uri = (new_uri =~ /^https?\:\/\/.*/) ? new_uri : "http://#{new_uri}"
9
+ new_uri.strip!
10
+ width = options[:width]
11
+ height = options[:height]
12
+ auto_play = options[:auto_play]
13
+ theme_color = options[:theme_color]
14
+ color = options[:color]
15
+ show_artwork = options[:show_artwork]
16
+ show_comments = options[:show_comments]
17
+ %{<iframe width="#{width}" height="#{height}" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=#{new_uri}&show_artwork=#{show_artwork}&show_comments=#{show_comments}&auto_play=#{auto_play}&color=#{color}&theme_color=#{theme_color}"></iframe>}
18
+ end
19
+ end
@@ -0,0 +1,13 @@
1
+ # TED talks (http://www.ted.com)
2
+ AutoHtml.add_filter(:ted).with(:width => 640, :height => 360, :scrolling => "no", :frameborder => 0, :allow_full_screen => false) do |text, options|
3
+ text.gsub(/https?:\/\/(www.|embed.)?ted\.com\/talks\/([A-Za-z0-9._%-]*)\.html((\?|#)\S+)?/) do
4
+ ted_page = $2
5
+ width = options[:width]
6
+ height = options[:height]
7
+ scrolling = options[:scrolling]
8
+ frameborder = options[:frameborder]
9
+ allow_full_screen = options[:allow_full_screen]
10
+
11
+ %{<iframe width="#{width}" height="#{height}" frameborder="#{frameborder}" scrolling="#{scrolling}" src="http://embed.ted.com/talks/#{ted_page}.html"#{allow_full_screen ? ' webkitAllowFullScreen mozallowfullscreen allowFullScreen' : ''}></iframe>}
12
+ end
13
+ end
@@ -0,0 +1,19 @@
1
+ AutoHtml.add_filter(:twitter).with({}) do |text, options|
2
+ require 'uri'
3
+ require 'net/http'
4
+
5
+ regex = %r{(?<!href=")https://twitter\.com(/#!)?/[A-Za-z0-9_]{1,15}/status(es)?/\d+(/?)}
6
+
7
+ text.gsub(regex) do |match|
8
+ params = { :url => match }.merge(options)
9
+
10
+ uri = URI("https://api.twitter.com/1/statuses/oembed.json")
11
+ uri.query = URI.encode_www_form(params)
12
+
13
+ http = Net::HTTP.new(uri.host, uri.port)
14
+ http.use_ssl = true
15
+
16
+ response = JSON.parse(http.get(uri.request_uri).body)
17
+ response["html"]
18
+ end
19
+ end
@@ -0,0 +1,15 @@
1
+ AutoHtml.add_filter(:vimeo).with(:width => 440, :height => 248, :show_title => false, :show_byline => false, :show_portrait => false) do |text, options|
2
+ text.gsub(/https?:\/\/(www.)?vimeo\.com\/([A-Za-z0-9._%-]*)((\?|#)\S+)?/) do
3
+ vimeo_id = $2
4
+ width = options[:width]
5
+ height = options[:height]
6
+ show_title = "title=0" unless options[:show_title]
7
+ show_byline = "byline=0" unless options[:show_byline]
8
+ show_portrait = "portrait=0" unless options[:show_portrait]
9
+ frameborder = options[:frameborder] || 0
10
+ query_string_variables = [show_title, show_byline, show_portrait].compact.join("&")
11
+ query_string = "?" + query_string_variables unless query_string_variables.empty?
12
+
13
+ %{<div class="video-container vimeo"><iframe src="//player.vimeo.com/video/#{vimeo_id}#{query_string}" width="#{width}" height="#{height}" frameborder="#{frameborder}"></iframe></div>}
14
+ end
15
+ end
@@ -0,0 +1,8 @@
1
+ AutoHtml.add_filter(:worldstar).with(:width => 448, :height => 374) do |text,options|
2
+ text.gsub(/http:\/\/www\.worldstarhiphop\.com\/videos\/video\.php\?v\=(wshh[A-Za-z0-9]+)/) do
3
+ video_id = $1
4
+ width = options[:width]
5
+ height = options[:height]
6
+ %{<div class="video-container worldstar"><object width="#{width}" height="#{height}"><param name="movie" value="http://www.worldstarhiphop.com/videos/e/16711680/#{video_id}"><param name="allowFullScreen" value="true"></param><embed src="http://www.worldstarhiphop.com/videos/e/16711680/#{video_id}" type="application/x-shockwave-flash" allowFullscreen="true" width="#{width}" height="#{height}"></embed></object></div>}
7
+ end
8
+ end
@@ -0,0 +1,19 @@
1
+ AutoHtml.add_filter(:youtube).with(:width => 420, :height => 315, :frameborder => 0, :wmode => nil, :autoplay => false, :hide_related => false) do |text, options|
2
+ regex = /(https?:\/\/)?(www.)?(youtube\.com\/watch\?v=|youtu\.be\/|youtube\.com\/watch\?feature=player_embedded&v=)([A-Za-z0-9_-]*)(\&\S+)?(\?\S+)?/
3
+ text.gsub(regex) do
4
+ youtube_id = $4
5
+ width = options[:width]
6
+ height = options[:height]
7
+ frameborder = options[:frameborder]
8
+ wmode = options[:wmode]
9
+ autoplay = options[:autoplay]
10
+ hide_related = options[:hide_related]
11
+ src = "//www.youtube.com/embed/#{youtube_id}"
12
+ params = []
13
+ params << "wmode=#{wmode}" if wmode
14
+ params << "autoplay=1" if autoplay
15
+ params << "rel=0" if hide_related
16
+ src += "?#{params.join '&'}" unless params.empty?
17
+ %{<div class="video-container youtube"><iframe width="#{width}" height="#{height}" src="#{src}" frameborder="#{frameborder}" allowfullscreen></iframe></div>}
18
+ end
19
+ end
@@ -0,0 +1,17 @@
1
+ AutoHtml.add_filter(:youtube_image).with(:width => 320, :height => 315, :style => 'medium', :target => 'blank', :border => '0') do |text, options|
2
+ styles = { 'default' => 'default', 'high' => 'hqdefault',
3
+ 'medium' => 'mqdefault', 'normal' => 'sddefault',
4
+ 'max' => 'maxresdefault' }
5
+ regex = /(https?:\/\/)?(www.)?(youtube\.com\/watch\?v=|youtu\.be\/|youtube\.com\/watch\?feature=player_embedded&v=)([A-Za-z0-9_-]*)(\&\S+)?(\?\S+)?/
6
+ text.gsub(regex) do
7
+ youtube_id = $4
8
+ video_url = "https://www.youtube.com/watch?v=#{youtube_id}"
9
+ target = options[:target]
10
+ width = options[:width]
11
+ height = options[:height]
12
+ border = options[:border]
13
+ style = styles[options[:style]] rescue styles['default']
14
+ src = "//img.youtube.com/vi/#{youtube_id}/#{style}.jpg"
15
+ %{<div class="thumbnail youtube"><a href="#{video_url}" target="_#{target}"><img src="#{src}" width="#{width}" height="#{height}" border="#{border}"></a></div>}
16
+ end
17
+ end
@@ -0,0 +1,6 @@
1
+ AutoHtml.add_filter(:youtube_js_api).with(:width => 390, :height => 250) do |text, options|
2
+ text.gsub(/https?:\/\/(www.)?youtube\.com\/watch\?v=([A-Za-z0-9._%-]*)(\&\S+)?/) do
3
+ youtube_id = $2
4
+ %{<object width="#{options[:width]}" height="#{options[:height]}"><param name="movie" value="//www.youtube.com/v/#{youtube_id}?enablejsapi=1&playerapiid=ytplayer"></param><param name="wmode" value="transparent"></param><param name="allowscriptaccess" value="always"></param><embed src="//www.youtube.com/v/#{youtube_id}?enablejsapi=1&playerapiid=ytplayer" type="application/x-shockwave-flash" wmode="transparent" width="#{options[:width]}" height="#{options[:height]}" allowscriptaccess="always"></embed></object>}
5
+ end
6
+ end
@@ -0,0 +1,10 @@
1
+ require 'auto_html'
2
+ require 'rails'
3
+
4
+ module AutoHtml
5
+ class Railtie < Rails::Railtie
6
+ rake_tasks do
7
+ require "auto_html/rake_tasks"
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,27 @@
1
+ require 'auto_html/task'
2
+
3
+ # Rake task for rebuilding cached in DB auto_html columns values
4
+ # Usage: rake auto_html:rebuild CLASS=[your model]
5
+ # Where [your model] is the name of model which contains auto_html_for columns
6
+
7
+ namespace :auto_html do
8
+ desc "Rebuild auto_html columns"
9
+ task :rebuild => :environment do
10
+
11
+ klass = AutoHtml::Task.obtain_class.constantize
12
+ suffix = AutoHtmlFor.auto_html_for_options[:htmlized_attribute_suffix]
13
+ column_names = klass.respond_to?(:column_names) ? klass.column_names : klass.fields.keys
14
+ observed_attributes = column_names.select { |c| c=~/#{suffix}$/ }.map { |c| c.gsub(/#{suffix}$/, '')}
15
+
16
+ i = 0
17
+ klass.find_each do |item|
18
+ observed_attributes.each do |field|
19
+ item.send("#{field}=", item.send(field))
20
+ end
21
+ item.save
22
+ i += 1
23
+ end
24
+
25
+ puts "Done! Processed #{i} items."
26
+ end
27
+ end
@@ -0,0 +1,9 @@
1
+ module AutoHtml
2
+ module Task
3
+ def self.obtain_class
4
+ class_name = ENV['CLASS'] || ENV['class']
5
+ raise "Must specify CLASS" unless class_name
6
+ class_name
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,13 @@
1
+ module FixtureSetup
2
+ fixtures_dir = File.dirname(__FILE__) + '/fixtures'
3
+ connections = YAML.load_file("#{fixtures_dir}/database.yml")
4
+ ActiveRecord::Base.establish_connection(connections['sqlite3'])
5
+ ActiveRecord::Migration.verbose = false
6
+ load "#{fixtures_dir}/schema.rb"
7
+
8
+ def setup
9
+ fixtures_dir = File.dirname(__FILE__) + '/fixtures'
10
+ ActiveRecord::Migration.verbose = false
11
+ load "#{fixtures_dir}/schema.rb"
12
+ end
13
+ end
@@ -0,0 +1,5 @@
1
+ sqlite3:
2
+ adapter: sqlite3
3
+ database: test.sqlite3
4
+ pool: 5
5
+ timeout: 5000
@@ -0,0 +1,20 @@
1
+ ActiveRecord::Schema.define(:version => Time.now.to_i) do
2
+ create_table "articles", :force => true do |t|
3
+ t.column "title", :string
4
+ t.column "body", :text
5
+ t.column "body_html", :text
6
+ t.column "created_at", :datetime
7
+ t.column "updated_at", :datetime
8
+ end
9
+
10
+ create_table "users", :force => true do |t|
11
+ t.column "name", :string
12
+ t.column "bio", :text
13
+ end
14
+
15
+ create_table "posts", :force => true do |t|
16
+ t.column "topic_id", :integer
17
+ t.column "user_id", :integer
18
+ t.column "content", :text
19
+ end
20
+ end
@@ -0,0 +1,26 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+ require File.expand_path('../../fixture_setup', __FILE__)
3
+
4
+ # store default so we can revert so that other tests use default option
5
+ default_suffix = AutoHtmlFor.auto_html_for_options[:htmlized_attribute_suffix]
6
+ AutoHtmlFor.auto_html_for_options[:htmlized_attribute_suffix] = '_htmlized'
7
+
8
+ class Post < ActiveRecord::Base
9
+ auto_html_for :content do
10
+ simple_format
11
+ end
12
+ end
13
+
14
+ class AutoHtmlForOptionsTest < Minitest::Test
15
+ include FixtureSetup
16
+
17
+ def test_transform_after_save
18
+ @article = Post.new(:content => 'Yo!')
19
+ assert_equal '<p>Yo!</p>', @article.content_htmlized
20
+ @article.save!
21
+ assert_equal '<p>Yo!</p>', @article.content_htmlized
22
+ end
23
+ end
24
+
25
+ # reverting to default so that other tests use default option
26
+ AutoHtmlFor.auto_html_for_options[:htmlized_attribute_suffix] = default_suffix
@@ -0,0 +1,56 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+ require File.expand_path('../../fixture_setup', __FILE__)
3
+
4
+ class Article < ActiveRecord::Base
5
+ auto_html_for :body do
6
+ html_escape
7
+ youtube(:width => 400, :height => 250)
8
+ image
9
+ link(:target => "_blank")
10
+ simple_format
11
+ end
12
+
13
+ alias_attribute :plain_body, :body
14
+ auto_html_for :plain_body do
15
+ html_escape
16
+ end
17
+ end
18
+
19
+ class AutoHtmlForTest < Minitest::Test
20
+ include FixtureSetup
21
+
22
+ def test_transform_on_initialization
23
+ @article = Article.new(:body => 'Yo!')
24
+ assert_equal '<p>Yo!</p>', @article.body_html
25
+ end
26
+
27
+ def test_html_safe
28
+ return unless "".respond_to?(:html_safe?)
29
+ @article = Article.new(:body => 'Yo!')
30
+ assert @article.body_html.html_safe?
31
+ end
32
+
33
+ def test_transform_after_save
34
+ @article = Article.new(:body => 'Yo!')
35
+ @article.save!
36
+ assert_equal '<p>Yo!</p>', @article.body_html
37
+ end
38
+
39
+ def test_transform_of_nil
40
+ @article = Article.new(:body => nil)
41
+ @article.save!
42
+ assert_equal '', @article.body_html
43
+ end
44
+
45
+ def test_transform_after_update
46
+ @article = Article.create!(:body => 'Yo!')
47
+ @article.update_attributes(:body => 'http://vukajlija.com')
48
+ @article.save!
49
+ assert_equal '<p><a href="http://vukajlija.com" target="_blank">http://vukajlija.com</a></p>', @article.body_html
50
+ end
51
+
52
+ def test_transform_of_alias_attribute
53
+ @article = Article.new(:body => 'Hello there.')
54
+ assert_equal 'Hello there.', @article.plain_body_html
55
+ end
56
+ end
@@ -0,0 +1,27 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+ require File.expand_path('../../fixture_setup', __FILE__)
3
+
4
+ AutoHtml.add_filter(:foo) do |text|
5
+ nil
6
+ end
7
+
8
+ AutoHtml.add_filter(:bar) do |text|
9
+ "bar"
10
+ end
11
+
12
+ class User < ActiveRecord::Base
13
+ auto_html_for :bio do
14
+ foo
15
+ foo
16
+ bar
17
+ end
18
+ end
19
+
20
+ class FilterTest < Minitest::Test
21
+ include FixtureSetup
22
+
23
+ def test_transform_after_save
24
+ @article = User.new(:bio => 'in progress...')
25
+ assert_equal 'bar', @article.bio_html
26
+ end
27
+ end
@@ -0,0 +1,16 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ Bundler.setup
4
+
5
+ require 'active_record'
6
+ require 'action_view'
7
+ require 'active_support'
8
+ require 'active_support/core_ext/class'
9
+
10
+ require 'minitest'
11
+ require 'minitest/focus'
12
+
13
+ require File.dirname(__FILE__) + '/../init'
14
+
15
+ require 'minitest/reporters'
16
+ MiniTest::Reporters.use!
@@ -0,0 +1,37 @@
1
+ require File.expand_path('../unit_test_helper', __FILE__)
2
+
3
+
4
+ class AutoHtmlTest < Minitest::Test
5
+
6
+ def test_should_be_raw_input_when_no_filters_provided
7
+ input = "Hey check out my blog => http://rors.org"
8
+ result = auto_html(input) { }
9
+ assert_equal result, input
10
+ end
11
+
12
+ def test_should_apply_simple_format_filter
13
+ result = auto_html("Hey check out my blog => http://rors.org") { simple_format }
14
+ assert_equal "<p>Hey check out my blog => http://rors.org</p>", result
15
+ end
16
+
17
+ def test_should_apply_simple_format_and_image_filter
18
+ result = auto_html("Check the logo: http://rors.org/images/rails.png") { simple_format; image(:alt => nil) }
19
+ assert_equal '<p>Check the logo: <img src="http://rors.org/images/rails.png" alt=""/></p>', result
20
+ end
21
+
22
+ def test_should_apply_simple_format_image_and_link_filter
23
+ result = auto_html("Check the logo: http://rors.org/images/rails.png. Visit: http://rubyonrails.org") { simple_format; image(:alt => nil); link }
24
+ assert_equal '<p>Check the logo: <img src="http://rors.org/images/rails.png" alt=""/>. Visit: <a href="http://rubyonrails.org" >http://rubyonrails.org</a></p>', result
25
+ end
26
+
27
+ def test_should_return_blank_if_input_is_blank
28
+ result = auto_html("") { simple_format; image(:alt => nil); link }
29
+ assert_equal "", result
30
+ end
31
+
32
+ def test_should_not_apply_simple_format_if_input_is_nil
33
+ result = auto_html(nil) { simple_format; image(:alt => nil); link }
34
+ assert_equal "", result
35
+ end
36
+
37
+ end
@@ -0,0 +1,34 @@
1
+ require File.expand_path('../../unit_test_helper', __FILE__)
2
+
3
+ class DailyMotionTest < Minitest::Test
4
+
5
+ DIV_START = '<div class="video-container dailymotion">'
6
+
7
+ def test_transform
8
+ result = auto_html("http://www.dailymotion.com/en/featured/video/xag4p2_tempsmorttv-episode-01_shortfilms") { dailymotion }
9
+ assert_equal %Q|#{DIV_START}<object type="application/x-shockwave-flash" data="http://www.dailymotion.com/swf/xag4p2_tempsmorttv-episode-01_shortfilms&related=0" width="480" height="360"><param name="movie" value="http://www.dailymotion.com/swf/xag4p2_tempsmorttv-episode-01_shortfilms&related=0"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><a href="http://www.dailymotion.com/video/xag4p2_tempsmorttv-episode-01_shortfilms?embed=1"><img src="http://www.dailymotion.com/thumbnail/video/xag4p2_tempsmorttv-episode-01_shortfilms" width="480" height="360"/></a></object></div>|, result
10
+ end
11
+
12
+ def test_transform_with_tweaked_width
13
+ result = auto_html("http://www.dailymotion.com/related/x9cyf6/video/x9tinl_happy-tree-friends-as-you-wish-part_fun") { dailymotion :width => 500 }
14
+ assert_equal %Q|#{DIV_START}<object type="application/x-shockwave-flash" data="http://www.dailymotion.com/swf/x9tinl_happy-tree-friends-as-you-wish-part_fun&related=0" width="500" height="360"><param name="movie" value="http://www.dailymotion.com/swf/x9tinl_happy-tree-friends-as-you-wish-part_fun&related=0"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><a href="http://www.dailymotion.com/video/x9tinl_happy-tree-friends-as-you-wish-part_fun?embed=1"><img src="http://www.dailymotion.com/thumbnail/video/x9tinl_happy-tree-friends-as-you-wish-part_fun" width="500" height="360"/></a></object></div>|, result
15
+ end
16
+
17
+ def test_transform_with_options
18
+ result = auto_html("http://www.dailymotion.com/video/xakv5i") { dailymotion(:width => 500, :height => 300) }
19
+ assert_equal %Q|#{DIV_START}<object type="application/x-shockwave-flash" data="http://www.dailymotion.com/swf/xakv5i&related=0" width="500" height="300"><param name="movie" value="http://www.dailymotion.com/swf/xakv5i&related=0"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><a href="http://www.dailymotion.com/video/xakv5i?embed=1"><img src="http://www.dailymotion.com/thumbnail/video/xakv5i" width="500" height="300"/></a></object></div>|, result
20
+ end
21
+
22
+
23
+ def test_prevent_html_transform
24
+ str = '<object type="application/x-shockwave-flash" data="http://www.dailymotion.com/swf/xakv5i&related=0" width="500" height="300"><param name="movie" value="http://www.dailymotion.com/swf/xakv5i&related=0"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><a href="http://www.dailymotion.com/video/xakv5i?embed=1"><img src="http://www.dailymotion.com/thumbnail/video/xakv5i" width="500" height="300"/></a></object>'
25
+
26
+ result = auto_html(str) { dailymotion(:width => 500, :height => 300) }
27
+
28
+ assert_equal(
29
+ str, result,
30
+ "Should not re-transform HTML with dailymotion links inside of it"
31
+ )
32
+ end
33
+
34
+ end