module Jaguar::DSL::Keyboard::Type

Public Class Methods

type(*integer_or_string_or_symbol_or_arrays_or_hashes) click to toggle source
# File lib/jaguar/dsl/keyboard/type.rb, line 8
def self.type(*integer_or_string_or_symbol_or_arrays_or_hashes)
  opts, type_sequence = parse_type_args_to_opts_and_type_sequence integer_or_string_or_symbol_or_arrays_or_hashes

  sequence = unpack_type_sequence type_sequence
  delay = opts[:delay]

  Jaguar.debug "sequence", sequence, "delay", delay

  sequence.each do |s|
    already_delayed = false

    case s
    when String,Integer
      Jaguar.debug "direct_write_instead_of_key_presses?(delay)", direct_write_instead_of_key_presses?(delay)

      if direct_write_instead_of_key_presses?(delay)
        Jaguar.driver.do device: :keyboard, action: :write, params: {string: s}
      else
        s.split('').each do |k|
          Jaguar.driver.do device: :keyboard, action: :write, params: {string: s}
          Jaguar::Helpers.delay delay if delay
          already_delayed = true
        end
      end
    when Array
      non_mods = s.pop
      Jaguar.debug "non_mods", non_mods
      for mod in s do
        Jaguar.driver.do device: :keyboard, action: :key_down, params: {key: mod}
      end

      case non_mods
      when String,Symbol
        # [:alt, "d"]
        # [:cmd, :tab]
        Jaguar.driver.do device: :keyboard, action: :key_press, params: {key: non_mods}
      when Array
        # [:alt, [:tab, :tab]]
        non_mods.each do |non_mod|
          Jaguar.driver.do device: :keyboard, action: :key_press, params: {key: non_mod}
          Jaguar::Helpers.delay delay if delay
          already_delayed = true
        end
      end

      for mod in s do
        Jaguar.driver.do device: :keyboard, action: :key_up, params: {key: mod}
      end
    when Symbol
      Jaguar.driver.do device: :keyboard, action: :key_press, params: {key: s}
    end

    unless already_delayed
      Jaguar::Helpers.delay delay if delay
    end
  end

  self
end

Private Class Methods

direct_write_instead_of_key_presses?(delay) click to toggle source
# File lib/jaguar/dsl/keyboard/type.rb, line 86
def self.direct_write_instead_of_key_presses?(delay)
  case delay
  when Integer
    delay == 0
  when Float
    delay == 0.0
  when Range
    delay.first == 0 && delay.last == 0
  when NilClass
    true
  end
end
parse_type_args_to_opts_and_type_sequence(args) click to toggle source
# File lib/jaguar/dsl/keyboard/type.rb, line 71
def self.parse_type_args_to_opts_and_type_sequence(args)
  opts = {}
  type_sequence = []
  args.each do |integer_or_string_or_symbol_or_array_or_hash|
    case integer_or_string_or_symbol_or_array_or_hash.class.name
    when "Integer","String", "Array", "Symbol"
      type_sequence << integer_or_string_or_symbol_or_array_or_hash
    when "Hash"
      opts.merge!(integer_or_string_or_symbol_or_array_or_hash)
    end
  end
  [opts, type_sequence]
end
unpack_type_sequence(type_sequence) click to toggle source
# File lib/jaguar/dsl/keyboard/type.rb, line 100
def self.unpack_type_sequence(type_sequence)
  case type_sequence
  when String
    # type "hello"
    type_sequence.split ''
  when Array
    # type "hello", :enter
    # type [:ctrl, :c]
    # type [:alt, [:tab, :tab]]
    type_sequence
  when Symbol
    # type :enter
    [type_sequence]
  end
end