Class: Integral::Video::Provider

Inherits:
Object
  • Object
show all
Defined in:
lib/integral/video/provider.rb

Constant Summary collapse

DB =
[
	{
		color:      "#e60000",
		embed_url:  "https://www.youtube.com/embed/${uid}?rel=0",
		fa_icon:    "youtube",
		name:       "YouTube",
		page_url:   "https://youtube.com/watch/?v=${uid}",
		poster_url: "https://i.ytimg.com/vi/${uid}/maxresdefault.jpg",
		uid:        "youtube"
	}, {
		color:      "#e50054",
		embed_url:  "https://odysee.com/$/embed/${uid}",
		fa_icon:    nil,
		name:       "Odysee",
		page_url:   "https://odysee.com/@LIFTINGTHEVEIL:5/How-to-save-the-world,-in-three-easy-steps.:9",
		poster_url:  nil,
		uid:        "odysee"
	}, {
		color:      "#00ADEF",
		embed_url:  "https://player.vimeo.com/video/${uid}",
		fa_icon:    "vimeo-square",
		name:       "Vimeo",
		page_url:   "https://vimeo.com/${uid}",
		poster_url:  nil,
		uid:        "vimeo"
	}, {
		color:      "#45668e",
		embed_url:  "https://vk.com/video_ext.php?oid=${oid}&id=${id}&hash=${hash}&hd=2",
		fa_icon:    "vk",
		name:       "Вконтакте",
		page_url:   "https://vk.com/video${uid}",
		poster_url:  nil,
		uid:        "vkontakte"
	}
].freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ Provider

Methods



46
47
48
49
50
# File 'lib/integral/video/provider.rb', line 46

def initialize(name)
	fail ArgumentError, "`Provider name` must be provided" if name.nil? || name == ""
	self.class.find_by(name: name) || fail(ArgumentError, "Provider `name` not supported. Currently supported: #{self.class.names.join(", ")}")
	@name = name
end

Class Method Details

.allObject



108
109
110
# File 'lib/integral/video/provider.rb', line 108

def all
	DB
end

.find_by(name: nil, uid: nil) ⇒ Object



116
117
118
119
120
# File 'lib/integral/video/provider.rb', line 116

def find_by(name: nil, uid: nil)
	fail ArgumentError, "Either `name` or `uid` must be provided" if [name, uid].all?(&:nil?)
	return DB.select { |hash| hash[:name] == name }.first unless uid
	return DB.select { |hash| hash[:uid]  == uid  }.first unless name
end

.for_selectObject



112
113
114
# File 'lib/integral/video/provider.rb', line 112

def for_select
	DB.map { |hash| [ hash[:name], hash[:name] ] }
end

.namesObject



122
123
124
# File 'lib/integral/video/provider.rb', line 122

def names
	DB.map { |hash| hash[:name] }
end

Instance Method Details

#fa_iconObject



72
73
74
# File 'lib/integral/video/provider.rb', line 72

def fa_icon
	"<span class=\"fa fa-#{fa_icon_id}\" style=\"color: #{provider_hash[:color]}\"></span>".html_safe
end

#fa_icon_idObject



67
68
69
# File 'lib/integral/video/provider.rb', line 67

def fa_icon_id
	provider_hash[:fa_icon]
end

#iframe_src(uid, hash = nil) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/integral/video/provider.rb', line 53

def iframe_src(uid, hash=nil)
	validate_uid! uid

	if @name == "Вконтакте"
		fail ArgumentError, "`uid` you provided (#{uid.inspect}) is not a valid VK UID" unless uid.include? "_"
		fail ArgumentError, "`hash` must be provided for videos from VK, you passed #{hash.inspect}" if hash.nil? || hash == ""
		oid, id = uid.split("_")
		provider_hash[:embed_url].sub("${id}", id).sub("${oid}", oid).sub("${hash}", hash)
	else
		provider_hash[:embed_url].sub("${uid}", uid)
	end
end

#page_url(uid) ⇒ Object



77
78
79
80
81
# File 'lib/integral/video/provider.rb', line 77

def page_url(uid)
	validate_uid! uid
	return unless provider_hash[:page_url]
	provider_hash[:page_url].sub("${uid}", uid)
end

#poster_url(uid) ⇒ Object



84
85
86
87
88
# File 'lib/integral/video/provider.rb', line 84

def poster_url(uid)
	validate_uid! uid
	return unless provider_hash[:poster_url]
	provider_hash[:poster_url].sub("${uid}", uid)
end