Class: SpreeCmCommissioner::UrlEmbed::YoutubeEmbed
- Inherits:
-
Object
- Object
- SpreeCmCommissioner::UrlEmbed::YoutubeEmbed
- 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
-
.extract_video_id(url_string) ⇒ Object
Extracts video ID from YouTube URL (used for thumbnails, etc.).
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 |