Class: SpreeCmCommissioner::UrlEmbed::YoutubeEmbed

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

Constant Summary collapse

PATTERNS =
[
  %r{youtube\.com/watch\?v=([a-zA-Z0-9_-]+)},
  %r{youtu\.be/([a-zA-Z0-9_-]+)},
  %r{youtube\.com/embed/([a-zA-Z0-9_-]+)},
  %r{youtube\.com/shorts/([a-zA-Z0-9_-]+)},
  %r{youtube\.com/live/([a-zA-Z0-9_-]+)},
  %r{youtube\.com/v/([a-zA-Z0-9_-]+)}
].freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(url) ⇒ YoutubeEmbed

Returns a new instance of YoutubeEmbed.



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

def initialize(url)
  @url = url
end

Instance Attribute Details

#urlObject (readonly)

Returns the value of attribute url.



4
5
6
# File 'app/services/spree_cm_commissioner/url_embed/youtube_embed.rb', line 4

def url
  @url
end

Class Method Details

.call(url) ⇒ Object



15
16
17
# File 'app/services/spree_cm_commissioner/url_embed/youtube_embed.rb', line 15

def self.call(url)
  new(url).call
end

.extract_video_id(url) ⇒ Object



23
24
25
# File 'app/services/spree_cm_commissioner/url_embed/youtube_embed.rb', line 23

def self.extract_video_id(url)
  new(url).extract_video_id(url.to_s.strip)
end

.valid_youtube_url?(url) ⇒ Boolean

Returns:

  • (Boolean)


19
20
21
# File 'app/services/spree_cm_commissioner/url_embed/youtube_embed.rb', line 19

def self.valid_youtube_url?(url)
  new(url).valid?
end

Instance Method Details

#callObject



31
32
33
34
35
36
37
38
# File 'app/services/spree_cm_commissioner/url_embed/youtube_embed.rb', line 31

def call
  return nil if url.blank?

  video_id = extract_video_id(url.strip)
  return nil unless video_id

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

#extract_video_id(url_string) ⇒ Object



44
45
46
# File 'app/services/spree_cm_commissioner/url_embed/youtube_embed.rb', line 44

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

#valid?Boolean

Returns:

  • (Boolean)


40
41
42
# File 'app/services/spree_cm_commissioner/url_embed/youtube_embed.rb', line 40

def valid?
  extract_video_id(url.to_s.strip).present?
end