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