From 4673496830cba22e921930d6d46af4e4886358ce Mon Sep 17 00:00:00 2001 From: Andrew Bone Date: Thu, 10 Jan 2019 17:58:16 +0000 Subject: [PATCH] SlideShare Liquid tag (#1485) * Create slideshare_tag.rb * Create slideshare_tag_spec.rb * Add slide share * rubocop compliance * Still learning https://ruby-doc.org/core-2.5.1/Regexp.html * More secure match Co-Authored-By: Link2Twenty * Strip whitespace Co-Authored-By: Link2Twenty * Strip before regex Co-Authored-By: Link2Twenty * Remove latter strip Co-Authored-By: Link2Twenty --- app/liquid_tags/slideshare_tag.rb | 33 +++++++++++++++++++++ app/views/pages/_editor_guide_text.html.erb | 4 +++ spec/liquid_tags/slideshare_tag_spec.rb | 16 ++++++++++ 3 files changed, 53 insertions(+) create mode 100644 app/liquid_tags/slideshare_tag.rb create mode 100644 spec/liquid_tags/slideshare_tag_spec.rb diff --git a/app/liquid_tags/slideshare_tag.rb b/app/liquid_tags/slideshare_tag.rb new file mode 100644 index 000000000..d878d9f47 --- /dev/null +++ b/app/liquid_tags/slideshare_tag.rb @@ -0,0 +1,33 @@ +class SlideshareTag < LiquidTagBase + def initialize(tag_name, key, tokens) + super + @key = validate key.strip + @height = 450 + end + + def render(_context) + finalize_html <<-HTML + + HTML + end + + private + + def validate(key) + if key.match?(/\A[a-zA-Z0-9]{14}\Z/) + key + else + raise StandardError, "Invalid Slideshare Key" + end + end +end + +Liquid::Template.register_tag("slideshare", SlideshareTag) diff --git a/app/views/pages/_editor_guide_text.html.erb b/app/views/pages/_editor_guide_text.html.erb index 6606fa9f9..b543c8c7a 100644 --- a/app/views/pages/_editor_guide_text.html.erb +++ b/app/views/pages/_editor_guide_text.html.erb @@ -121,6 +121,10 @@
  • YouTube: {% youtube dQw4w9WgXcQ %}
  • Vimeo: {% vimeo 193110695 %}
  • + +

    SlideShare Embed

    +

    All you need is the SlideShare key

    + {% slideshare rdOzN9kr1yK5eE %}

    CodePen Embed

    All you need is the full CodePen link, ending in the pen ID code, as follows:

    diff --git a/spec/liquid_tags/slideshare_tag_spec.rb b/spec/liquid_tags/slideshare_tag_spec.rb new file mode 100644 index 000000000..853b4d348 --- /dev/null +++ b/spec/liquid_tags/slideshare_tag_spec.rb @@ -0,0 +1,16 @@ +require "rails_helper" + +RSpec.describe SlideshareTag, type: :liquid_template do + describe "#key" do + let(:valid_key) { "rdOzN9kr1yK5eE" } + + def generate_tag(key) + Liquid::Template.register_tag("slideshare", SlideshareTag) + Liquid::Template.parse("{% slideshare #{key} %}") + end + + it "accepts a valid key" do + expect { generate_tag(valid_key) }.not_to raise_error + end + end +end