class MediaController::Media

Attributes

page[RW]

Public Class Methods

new(capybara_page, options={}) click to toggle source
# File lib/media_controller/media.rb, line 11
def initialize(capybara_page, options={})
  raise "Please supply a valid ID" if options[:id] == ""
  @page = capybara_page

  if options[:id]
    @id = options[:id]
    @ref = "window['media-#{@id}']"
    @page.execute_script("#{@ref} = document.getElementById('#{@id}')")
  elsif options[:reference]
    @id = Media.random_id
    @ref = "window['media-#{@id}']"
    @page.execute_script("#{@ref} = document.evaluate('#{options[:reference].path}', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue")
  else
    @id = Media.random_id
    @ref = "window['media-#{@id}']"
    @page.execute_script("#{@ref} = document.getElementsByTagName('#{self.class.name.split('::').last.downcase}')[0]")
  end
end
random_id() click to toggle source
# File lib/media_controller/media.rb, line 7
def Media.random_id
  rand(10000..99999)
end

Public Instance Methods

add_event_listener(event_name) click to toggle source
# File lib/media_controller/media.rb, line 92
def add_event_listener(event_name)
  @page.execute_script "window['media-#{@id}-#{event_name}-count'] = 0;"
  @page.execute_script "window['media-#{@id}-#{event_name}-count-function'] = function() { window['media-#{@id}-#{event_name}-count'] += 1; };"
  @page.execute_script "#{@ref}.addEventListener('#{event_name}', window['media-#{@id}-#{event_name}-count-function']);"
end
current_src() click to toggle source
# File lib/media_controller/media.rb, line 30
def current_src
  @page.evaluate_script "#{@ref}.currentSrc;"
end
current_time() click to toggle source
# File lib/media_controller/media.rb, line 46
def current_time
  @page.evaluate_script "#{@ref}.currentTime;"
end
duration() click to toggle source
# File lib/media_controller/media.rb, line 50
def duration
  @page.evaluate_script "#{@ref}.duration;"
end
event_count(event_name) click to toggle source
# File lib/media_controller/media.rb, line 88
def event_count(event_name)
  @page.evaluate_script "window['media-#{@id}-#{event_name}-count'];"
end
mute!() click to toggle source
# File lib/media_controller/media.rb, line 62
def mute!
  @page.execute_script "#{@ref}.muted = true;"
end
muted?() click to toggle source
# File lib/media_controller/media.rb, line 70
def muted?
  @page.evaluate_script "#{@ref}.muted;"
end
pause() click to toggle source
# File lib/media_controller/media.rb, line 38
def pause
  @page.execute_script "#{@ref}.pause();"
end
play() click to toggle source
# File lib/media_controller/media.rb, line 34
def play
  @page.execute_script "#{@ref}.play();"
end
playing?() click to toggle source
# File lib/media_controller/media.rb, line 54
def playing?
  add_event_listener('timeupdate')
  sleep 3
  playing = event_count('timeupdate') > 3
  remove_event_listener('timeupdate')
  return playing
end
remove_event_listener(event_name) click to toggle source
# File lib/media_controller/media.rb, line 98
def remove_event_listener(event_name)
  @page.execute_script "#{@ref}.removeEventListener('#{event_name}', window['media-#{@id}-#{event_name}-count-function']);"
  @page.execute_script "window['media-#{@id}-#{event_name}-count-function'] = null;"
  @page.execute_script "window['media-#{@id}-#{event_name}-count'] = null;"
end
seek_to(seconds) click to toggle source
# File lib/media_controller/media.rb, line 42
def seek_to(seconds)
  @page.execute_script "#{@ref}.currentTime = #{seconds.to_i};"
end
size() click to toggle source
# File lib/media_controller/media.rb, line 82
def size
  width = @page.evaluate_script "#{@ref}.clientWidth;"
  height = @page.evaluate_script "#{@ref}.clientHeight;"
  {width: width, height: height}
end
unmute!() click to toggle source
# File lib/media_controller/media.rb, line 66
def unmute!
  @page.execute_script "#{@ref}.muted = false;"
end
volume() click to toggle source
# File lib/media_controller/media.rb, line 78
def volume
  @page.evaluate_script "#{@ref}.volume;"
end
volume=(new_volume) click to toggle source
# File lib/media_controller/media.rb, line 74
def volume=(new_volume)
  @page.execute_script "#{@ref}.volume = #{new_volume};"
end