Class: SpreeCmCommissioner::UrlEmbed::YoutubeEmbed

Inherits:
Object
  • Object
show all
Includes:
Spree::ServiceModule::Base
Defined in:
app/services/spree_cm_commissioner/url_embed/youtube_embed.rb

Constant Summary collapse

PATTERNS =

Regex patterns to extract video IDs from various YouTube URL formats Supports: watch?v=, youtu.be, embed, shorts, live, and /v/ URLs All patterns capture alphanumeric characters, underscores, and hyphens as video IDs

[
  %r{youtube\.com/watch\?v=([a-zA-Z0-9_-]+)}, # Standard watch URL
  %r{youtu\.be/([a-zA-Z0-9_-]+)},              # Shortened youtu.be URL
  %r{youtube\.com/embed/([a-zA-Z0-9_-]+)},     # Already embedded URL
  %r{youtube\.com/shorts/([a-zA-Z0-9_-]+)},    # YouTube Shorts
  %r{youtube\.com/live/([a-zA-Z0-9_-]+)},      # YouTube Live
  %r{youtube\.com/v/([a-zA-Z0-9_-]+)}          # Legacy /v/ format
].freeze

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extract_video_id(url_string) ⇒ Object

Extracts video ID from YouTube URL (used for thumbnails, etc.)



25
26
27
28
29
# File 'app/services/spree_cm_commissioner/url_embed/youtube_embed.rb', line 25

def self.extract_video_id(url_string)
  return nil if url_string.blank?

  PATTERNS.lazy.map { |pattern| url_string[pattern, 1] }.find(&:present?)
end

Instance Method Details

#call(url:) ⇒ Object



15
16
17
18
19
20
21
22
# File 'app/services/spree_cm_commissioner/url_embed/youtube_embed.rb', line 15

def call(url:)
  return failure(nil, 'URL is blank') if url.blank?

  video_id = self.class.extract_video_id(url.to_s.strip)
  return failure(nil, 'Invalid YouTube URL') unless video_id

  success("https://www.youtube.com/embed/#{video_id}")
end