diff --git a/app/labor/markdown_parser.rb b/app/labor/markdown_parser.rb index 1b662727f..10cb9846f 100644 --- a/app/labor/markdown_parser.rb +++ b/app/labor/markdown_parser.rb @@ -197,6 +197,7 @@ class MarkdownParser Liquid::Template.register_tag("codepen", CodepenTag) Liquid::Template.register_tag("gist", GistTag) Liquid::Template.register_tag("instagram", InstagramTag) + Liquid::Template.register_tag("speakerdeck", SpeakerdeckTag) Liquid::Template.register_tag("replit", ReplitTag) Liquid::Template.register_tag("runkit", RunkitTag) Liquid::Template.register_tag("youtube", YoutubeTag) diff --git a/app/liquid_tags/speakerdeck_tag.rb b/app/liquid_tags/speakerdeck_tag.rb new file mode 100644 index 000000000..84f5ec2e3 --- /dev/null +++ b/app/liquid_tags/speakerdeck_tag.rb @@ -0,0 +1,37 @@ +class SpeakerdeckTag < LiquidTagBase + def initialize(tag_name, id, tokens) + super + @id = parse_id(id) + end + + def render(context) + html = <<-HTML + + HTML + finalize_html(html) + end + + private + + def parse_id(input) + input_no_space = input.delete(" ") + if valid_id?(input_no_space) + input_no_space + else + raise StandardError, "Invalid Speakerdeck Id" + end + end + + def valid_id?(id) + !!(id =~ /\A[a-z\d]*\Z/i) + end +end diff --git a/config/initializers/liquid.rb b/config/initializers/liquid.rb index 05a53cfb3..28ea0406b 100644 --- a/config/initializers/liquid.rb +++ b/config/initializers/liquid.rb @@ -13,6 +13,7 @@ Liquid::Template.register_tag("user", UserTag) Liquid::Template.register_tag("codepen", CodepenTag) Liquid::Template.register_tag("gist", GistTag) Liquid::Template.register_tag("instagram", InstagramTag) +Liquid::Template.register_tag("speakerdeck", SpeakerdeckTag) Liquid::Template.register_tag("replit", ReplitTag) Liquid::Template.register_tag("runkit", RunkitTag) Liquid::Template.register_tag("youtube", YoutubeTag) diff --git a/spec/liquid_tags/speakereck_tag_spec.rb b/spec/liquid_tags/speakereck_tag_spec.rb new file mode 100644 index 000000000..e433847cc --- /dev/null +++ b/spec/liquid_tags/speakereck_tag_spec.rb @@ -0,0 +1,21 @@ +require "rails_helper" + +RSpec.describe InstagramTag, type: :liquid_template do + describe "#id" do + let(:valid_id) { "BXgGcAUjM39" } + let(:invalid_id) { "blahblahblahbl sdsdssd // dsdssd" } + + def generate_tag(id) + Liquid::Template.register_tag("speakerdeck", SpeakerdeckTag) + Liquid::Template.parse("{% speakerdeck #{id} %}") + end + + it "rejects invalid ids" do + expect { generate_tag(invalid_id) }.to raise_error(StandardError) + end + + it "accepts a valid id" do + expect { generate_tag(valid_id) }.not_to raise_error + end + end +end