class MediaEmbed::IframeBuilder

Constants

IFRAME_ATTRS_WHITELIST
NO_VALUE_OPTIONS

Attributes

iframe_options[RW]
url_options[RW]

Public Class Methods

new(source, options = {}, url_params_whitelist = []) click to toggle source
# File lib/media_embed/iframe_builder.rb, line 15
def initialize(source, options = {}, url_params_whitelist = [])
  @source = source
  @options = Hash[options.map { |key, val| [key.to_sym, val] }]
  @url_params_whitelist = url_params_whitelist

  split_options
end

Public Instance Methods

build() click to toggle source
# File lib/media_embed/iframe_builder.rb, line 23
def build
  %(<iframe src="#{@source}#{url_params_string}"#{iframe_options_string}></iframe>)
end
iframe_options_string() click to toggle source
# File lib/media_embed/iframe_builder.rb, line 33
def iframe_options_string
  return unless iframe_options.any?

  key_value_options = iframe_options.reject { |opt_name, _| NO_VALUE_OPTIONS.include?(opt_name) }

  options_string = " #{key_value_options.map { |name, value| "#{name}=\"#{value}\"" }.join(' ')}"

  if NO_VALUE_OPTIONS.any? { |opt| iframe_options.keys.include? opt }
    options_string = "#{options_string}#{NO_VALUE_OPTIONS.map { |opt| iframe_options[opt] ? opt.to_s : nil }.compact.join(' ')}"
  end

  options_string
end
split_options() click to toggle source
# File lib/media_embed/iframe_builder.rb, line 47
def split_options
  self.iframe_options = @options.select { |key, _| IFRAME_ATTRS_WHITELIST.include?(key) }
  self.url_options = @options.select { |key, _| @url_params_whitelist.include?(key) }
end
url_params_string() click to toggle source

private

# File lib/media_embed/iframe_builder.rb, line 29
def url_params_string
  "?#{url_options.map { |name, value| "#{name}=#{value}" }.join('&')}" if url_options.any?
end