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
deeplink(options:)
click to toggle source
Deeplink to an app
# File lib/roku_builder/plugins/linker.rb, line 39 def deeplink(options:) if options.has_source? Loader.new(config: @config).sideload(options: options) end app_id = options[:app_id] app_id ||= "dev" path = "/launch/#{app_id}" send_options(path: path, options: options[:deeplink]) 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