From f9c19f6b81abccb68d225db8bb58942da1b7f711 Mon Sep 17 00:00:00 2001 From: Kyle Galbraith Date: Tue, 16 Oct 2018 10:54:02 -1000 Subject: [PATCH] Feature/add parler.io liquid tag for audio embed (#828) * initial parler liquid tag * fix eqaulity in test * update parler tag to parse out url since it is coming in as --- app/liquid_tags/parler_tag.rb | 35 +++++++++++++++++++++++++++++ spec/liquid_tags/parler_tag_spec.rb | 32 ++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100755 app/liquid_tags/parler_tag.rb create mode 100644 spec/liquid_tags/parler_tag_spec.rb diff --git a/app/liquid_tags/parler_tag.rb b/app/liquid_tags/parler_tag.rb new file mode 100755 index 000000000..4707efb72 --- /dev/null +++ b/app/liquid_tags/parler_tag.rb @@ -0,0 +1,35 @@ +class ParlerTag < LiquidTagBase + def initialize(tag_name, id, tokens) + super + @id = parse_id(id) + @width = 710 + @height = 120 + end + + def render(_context) + html = <<-HTML + + HTML + finalize_html(html) + end + + private + + def parse_id(input) + input_no_space = input.delete(" ") + input_no_space = input_no_space.scan(/\bhttps?:\/\/[a-z.\/0-9-]+\b/).first + raise StandardError, "Invalid Parler URL" unless valid_id?(input_no_space) + input_no_space + end + + def valid_id?(id) + puts id + id =~ /\A(https:\/\/www.parler.io\/audio\/\d{1,11}\/[a-zA-Z0-9]{11,40}.[0-9a-zA-Z-]{11,36}.mp3)\Z/ + end +end + +Liquid::Template.register_tag("parler", ParlerTag) diff --git a/spec/liquid_tags/parler_tag_spec.rb b/spec/liquid_tags/parler_tag_spec.rb new file mode 100644 index 000000000..bc587bc27 --- /dev/null +++ b/spec/liquid_tags/parler_tag_spec.rb @@ -0,0 +1,32 @@ +require "rails_helper" + +RSpec.describe ParlerTag, type: :liquid_template do + describe "#id" do + let(:valid_id) { "https://www.parler.io/audio/73240183203/d53cff009eac2ab1bc9dd8821a638823c39cbcea.7dd28611-b7fc-4cf8-9977-b6e3aaf644a1.mp3" } + + let(:invalid_id) { "https://www.google.com" } + + def generate_new_liquid(id) + Liquid::Template.register_tag("parler", ParlerTag) + Liquid::Template.parse("{% parler #{id} %}") + end + + def generate_iframe(_id) + "" + end + + it "accepts a valid Parler URL" do + liquid = generate_new_liquid(valid_id) + puts liquid + expect(liquid.render).to eq(generate_iframe(valid_id)) + end + + it "raises an error for invalid IDs" do + expect { generate_new_liquid(invalid_id).render }.to raise_error("Invalid Parler URL") + end + end +end