Class: SleipnirAPI::Command

Inherits:
Object
  • Object
show all
Extended by:
Enumerable
Defined in:
lib/sleipnir_api/command.rb

Overview

このクラスは Sleipnir.API の ExecCommand に指定可能なコマンドをあらわすクラスです。ExecCommand に指定可能な全コマンドを定義しています。

注意: ExecCommand は Sleipnir 1.6 用の API です。2.x では利用できません。

例:

pnir = SleipnirAPI.connect
copy_cmd = SleipnirAPI::Command["コピー"]
pnir.exec_command(copy_cmd)

SleipnirAPI::Command.each do |cmd|
  puts "%d - %s" % [cmd.command_id, cmd.name]
end

# Enumerable methods
p SleipnirAPI::Command.select {|cmd| cmd.name =~ /Gecko/ }

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(cmdid, *parents) ⇒ Command

Returns a new instance of Command.



103
104
105
106
107
# File 'lib/sleipnir_api/command.rb', line 103

def initialize(cmdid, *parents)
  @cmdid = cmdid
  @name = parents.pop
  @parents = parents
end

Instance Attribute Details

#cmdidObject (readonly) Also known as: command_id

コマンド ID を取得します

SleipnirAPI::Command.get("メインウィンドウの最小化").cmdid
  #=> 33291


83
84
85
# File 'lib/sleipnir_api/command.rb', line 83

def cmdid
  @cmdid
end

#nameObject (readonly) Also known as: command, command_name

コマンド名を取得します

SleipnirAPI::Command.get("メインウィンドウの最小化").name
  #=> "メインウィンドウの最小化"


90
91
92
# File 'lib/sleipnir_api/command.rb', line 90

def name
  @name
end

#parentsObject (readonly)

コマンドの上位メニューを取得します

SleipnirAPI::Command.get("メインウィンドウの最小化").parents
  #=> ["ウィンドウ", "ウィンドウ操作"]


97
98
99
# File 'lib/sleipnir_api/command.rb', line 97

def parents
  @parents
end

Class Method Details

.build_cacheObject

:nodoc:



62
63
64
# File 'lib/sleipnir_api/command.rb', line 62

def build_cache #:nodoc:

  @cache ||= build_cache0
end

.build_cache0Object

:nodoc:



67
68
69
70
71
72
# File 'lib/sleipnir_api/command.rb', line 67

def build_cache0 #:nodoc:

  COMMANDS.inject({}) {|h,cmd|
    h[cmd.name] = Array(h[cmd.name]) + [cmd]
    h
  }
end

.each(&block) ⇒ Object

各コマンドに対してブロックを評価します。ブロックには SleipnirAPI::Command オブジェクトが指定されます。



35
36
37
# File 'lib/sleipnir_api/command.rb', line 35

def each(&block)
  COMMANDS.each(&block)
end

.get(command, *parents) ⇒ Object Also known as: []

指定されたコマンドの SleipnirAPI::Command オブジェクトを取得します。

コマンド名が一意に特定できない場合は ArgumentError が発生します。その場合、上位メニューのメニュー名を第 2 引数に指定してください。

SleipnirAPI::Command.get("編集")
SleipnirAPI::Command.get("Java の実行") #=> ArgumentError
SleipnirAPI::Command.get("Java の実行", "ページ別セキュリティ")

Raises:

  • (ArgumentError)


48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/sleipnir_api/command.rb', line 48

def get(command, *parents)
  r = build_cache[command]
  return nil if r.nil? or r.empty?
  return r[0] if r.length == 1

  r = r.select {|e| (parents - e.parents).empty? }
  return nil if r.nil? or r.empty?
  return r[0] if r.length == 1

  err = r.map{|e| "  - #{e}" }.join("\n")
  raise ArgumentError, "Ambiguous command name `#{command}':\n#{err}\n"
end

Instance Method Details

#pathObject

上位メニュー名を含めたコマンド名を配列で返します。

SleipnirAPI::Command.get("メインウィンドウの最小化").path
  #=> ["ウィンドウ", "ウィンドウ操作", "メインウィンドウの最小化"]


114
115
116
# File 'lib/sleipnir_api/command.rb', line 114

def path
  @parents + [@name]
end

#to_sObject



118
119
120
# File 'lib/sleipnir_api/command.rb', line 118

def to_s
  "%d: %s" % [@cmdid, path.join(" > ")]
end