From 11b7255439211ec735f58200b2537f551a47d6be Mon Sep 17 00:00:00 2001 From: Arit Amana <32520970+msarit@users.noreply.github.com> Date: Fri, 7 Jan 2022 15:00:06 -0500 Subject: [PATCH] Implement Replit Unified Embed (#15992) * complete implementation and specs * add error spec * write clearer spec --- app/liquid_tags/replit_tag.rb | 24 ++++++++++--------- app/views/liquids/_replit.html.erb | 2 +- spec/liquid_tags/replit_tag_spec.rb | 6 +++++ .../unified_embed/registry_spec.rb | 12 ++++++++++ 4 files changed, 32 insertions(+), 12 deletions(-) diff --git a/app/liquid_tags/replit_tag.rb b/app/liquid_tags/replit_tag.rb index 39c1003cc..e07380428 100644 --- a/app/liquid_tags/replit_tag.rb +++ b/app/liquid_tags/replit_tag.rb @@ -1,31 +1,33 @@ class ReplitTag < LiquidTagBase PARTIAL = "liquids/replit".freeze - def initialize(_tag_name, id, _parse_context) + REGISTRY_REGEXP = %r{https?://replit.com/(?
@\w{2,15}/[a-zA-Z0-9\-]{0,60})(?:#[\w.]+)?} + VALID_ADDRESS = %r{(?
@\w{2,15}/[a-zA-Z0-9\-]{0,60})(?:#[\w.]+)?} + REGEXP_OPTIONS = [REGISTRY_REGEXP, VALID_ADDRESS].freeze + + def initialize(_tag_name, input, _parse_context) super - @id = parse_id(id) + @address = parse_input(strip_tags(input)) end def render(_context) ApplicationController.render( partial: PARTIAL, locals: { - id: @id + address: @address }, ) end private - def parse_id(input) - input_no_space = input.delete(" ") - raise StandardError, "Invalid replit Id" unless valid_id?(input_no_space) + def parse_input(input) + match = pattern_match_for(input, REGEXP_OPTIONS) + raise StandardError, "Invalid Replit URL or @user/slug" unless match - input_no_space - end - - def valid_id?(id) - id =~ %r{\A@\w{2,15}/[a-zA-Z0-9\-]{0,60}\Z} + match[:address] end end Liquid::Template.register_tag("replit", ReplitTag) + +UnifiedEmbed.register(ReplitTag, regexp: ReplitTag::REGISTRY_REGEXP) diff --git a/app/views/liquids/_replit.html.erb b/app/views/liquids/_replit.html.erb index f67241634..c0ab245d2 100644 --- a/app/views/liquids/_replit.html.erb +++ b/app/views/liquids/_replit.html.erb @@ -1,3 +1,3 @@
- +
diff --git a/spec/liquid_tags/replit_tag_spec.rb b/spec/liquid_tags/replit_tag_spec.rb index 18fe49d32..de3b3fccc 100644 --- a/spec/liquid_tags/replit_tag_spec.rb +++ b/spec/liquid_tags/replit_tag_spec.rb @@ -3,6 +3,7 @@ require "rails_helper" RSpec.describe ReplitTag, type: :liquid_tag do describe "#id" do let(:replit_id) { "@WigWog/PositiveFineOpensource" } + let(:invalid_replit_id) { "@Cant-Have-Dashes/PositiveFineOpensource" } def generate_new_liquid(id) Liquid::Template.register_tag("replit", ReplitTag) @@ -17,6 +18,11 @@ RSpec.describe ReplitTag, type: :liquid_tag do it "renders iframe" do liquid = generate_new_liquid(replit_id) expect(liquid.render).to include("