class RokuBuilder::Linker

Launch application, sending parameters

Public Class Methods

commands() click to toggle source
# File lib/roku_builder/plugins/linker.rb, line 9
def self.commands
  {
    deeplink: {device: true, stage: true},
    input: {device: true},
    applist: {device: true}
  }
end
dependencies() click to toggle source
# File lib/roku_builder/plugins/linker.rb, line 34
def self.dependencies
  [Loader]
end
parse_options(parser:, options:) click to toggle source
# File lib/roku_builder/plugins/linker.rb, line 17
def self.parse_options(parser:,  options:)
  parser.separator "Commands:"
  parser.on("-o", "--deeplink OPTIONS", "Launch and Deeplink into app. Define options as keypairs. (eg. a:b, c:d,e:f)") do |o|
    options[:deeplink] = o
  end
  parser.on("-i", "--input OPTIONS", "Deeplink into app. Define options as keypairs. (eg. a:b, c:d,e:f)") do |o|
    options[:input] = o
  end
  parser.on("-A", "--app-list", "List currently installed apps") do
    options[:applist] = true
  end
  parser.separator "Options:"
  parser.on("-a", "--app ID", "Send App id for deeplinking") do |a|
    options[:app_id] = a
  end
end

Public Instance Methods

applist(options:) click to toggle source

List currently installed apps @param logger [Logger] System Logger

# File lib/roku_builder/plugins/linker.rb, line 55
def applist(options:)
  path = "/query/apps"
  conn = multipart_connection(port: 8060)
  response = conn.get path

  if response.success?
    regexp = /id="([^"]*)"\stype="([^"]*)"\sversion="([^"]*)">([^<]*)</
    apps = response.body.scan(regexp)
    printf("%30s | %10s | %10s | %10s\n", "title", "id", "type", "version")
    printf("---------------------------------------------------------------------\n")
    apps.each do |app|
      printf("%30s | %10s | %10s | %10s\n", app[3], app[0], app[1], app[2])
    end
  end
end
input(options:) click to toggle source
# File lib/roku_builder/plugins/linker.rb, line 49
def input(options:)
  send_options(path: "/input", options: options[:input])
end

Private Instance Methods

parameterize(params) click to toggle source

Parameterize options to be sent to the app @param params [Hash] Parameters to be sent @return [String] Parameters as a string, URI escaped

# File lib/roku_builder/plugins/linker.rb, line 94
def parameterize(params)
  params.collect{|k,v| "#{k}=#{CGI.escape(v)}"}.join('&')
end
send_options(path:, options:) click to toggle source
# File lib/roku_builder/plugins/linker.rb, line 73
def send_options(path:, options:)
  payload = RokuBuilder.options_parse(options: options)

  unless payload.keys.count > 0
    @logger.warn "No options sent to launched app"
  else
    payload = parameterize(payload)
    path = "#{path}?#{payload}"
    @logger.info "Deeplink:"
    @logger.info payload
    @logger.info "CURL:"
    @logger.info "curl -d '' '#{@url}:8060#{path}'"
  end

  response = multipart_connection(port: 8060).post path
  @logger.fatal("Failed Deeplinking") unless response.success?
end