From 211e4f40f49676d96bf481971a468fa2e2e05542 Mon Sep 17 00:00:00 2001 From: Juan Rodriguez Date: Sun, 26 Mar 2023 19:18:08 +0200 Subject: [PATCH] refactor: improve url regex --- .github/workflows/main.yml | 2 +- app/models/link.rb | 7 +++++-- app/views/links/_form.html.erb | 4 ++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 9d7a130..8ce5ee9 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,4 +1,4 @@ -name: Deploy production to Heroku +name: Rubocop Linter on: push: branches: diff --git a/app/models/link.rb b/app/models/link.rb index 98df1d7..497da7f 100644 --- a/app/models/link.rb +++ b/app/models/link.rb @@ -1,11 +1,14 @@ # frozen_string_literal: true +VALID_URL_REGEX = /\A(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)? \ + ([a-zA-Z0-9-]+\.[a-zA-Z]{2,}(?:\.[a-zA-Z]{2,})?) \ + (?:\/[^\s]*)?\z/ + class Link < ApplicationRecord validates :url, presence: true validates :slug, uniqueness: true - validates :url, - format: { with: /\A#{URI::DEFAULT_PARSER.make_regexp(%w[http https])}\z/, message: 'invalid format' } + validates :url, format: { with: VALID_URL_REGEX, message: 'invalid format' } validates :url, length: { within: 3..30_000, on: :create, message: 'max length is 30000' } before_validation :generate_slug diff --git a/app/views/links/_form.html.erb b/app/views/links/_form.html.erb index d3da99b..f9d9d32 100644 --- a/app/views/links/_form.html.erb +++ b/app/views/links/_form.html.erb @@ -4,11 +4,11 @@ Shorten an url
- <%= f.text_field :url, data: { target: "links.url" }, placeholder: "https://google.com", class: "focus:ring-indigo-500 focus:border-indigo-500 flex-1 block w-full rounded-none rounded-md sm:text-sm border-gray-300" %> + <%= f.text_field :url, pattern: '(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([a-zA-Z0-9-]+\.[a-zA-Z]{2,}(?:\.[a-zA-Z]{2,})?)(?:\/[^\s]*)?', data: { target: "links.url" }, placeholder: "https://google.com", class: "focus:ring-indigo-500 focus:border-indigo-500 flex-1 block w-full rounded-none rounded-md sm:text-sm border-gray-300" %>
<%= f.submit "Generate", class: "inline-flex w-full sm:w-auto justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500" %>
-<% end %> \ No newline at end of file +<% end %>