Class: Libgss::ActionRequest

Inherits:
Object
  • Object
show all
Defined in:
lib/libgss/action_request.rb

Direct Known Subclasses

AsyncActionRequest

Defined Under Namespace

Classes: Error, SignatureError

Constant Summary collapse

STATUS_PREPARING =
0
STATUS_SENDING =
1
STATUS_WAITING =
2
STATUS_RECEIVED =
3
STATUS_SUCCESS =
4
STATUS_ERROR =
5
STATUS_TIMEOUT =
6

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(network, action_url, req_headers) ⇒ ActionRequest

コンストラクタ



34
35
36
37
38
39
40
41
# File 'lib/libgss/action_request.rb', line 34

def initialize(network, action_url, req_headers)
  @network = network
  @action_url = action_url
  @req_headers = req_headers
  @status = STATUS_PREPARING
  @actions = []
  @action_id = 0;
end

Instance Attribute Details

#action_urlObject (readonly)

Returns the value of attribute action_url.



28
29
30
# File 'lib/libgss/action_request.rb', line 28

def action_url
  @action_url
end

#networkObject (readonly)

読み込みのみ、書き込み不可



27
28
29
# File 'lib/libgss/action_request.rb', line 27

def network
  @network
end

#outputsObject (readonly)

Returns the value of attribute outputs.



29
30
31
# File 'lib/libgss/action_request.rb', line 29

def outputs
  @outputs
end

#req_headersObject (readonly)

Returns the value of attribute req_headers.



28
29
30
# File 'lib/libgss/action_request.rb', line 28

def req_headers
  @req_headers
end

#response_hookObject

Returns the value of attribute response_hook.



31
32
33
# File 'lib/libgss/action_request.rb', line 31

def response_hook
  @response_hook
end

#statusObject (readonly)

Returns the value of attribute status.



29
30
31
# File 'lib/libgss/action_request.rb', line 29

def status
  @status
end

Instance Method Details

#add_action(hash) ⇒ Object



53
54
55
56
57
# File 'lib/libgss/action_request.rb', line 53

def add_action(hash)
  action = Action.new(next_action_id, hash)
  @actions << action
  action
end

#apply(name, target) ⇒ Object

フレンドシップを申請をします。

Parameters:

  • name (String)

    対象となるコレクション名

  • target (Hash)

    対象となるフレンドのID

Returns:



379
380
381
382
# File 'lib/libgss/action_request.rb', line 379

def apply(name, target)
  args = {action: "apply", name: name, target: target}
  add_action(args)
end

#approve(name, target) ⇒ Object

フレンドシップの申請を承認します。

Parameters:

  • name (String)

    対象となるコレクション名

  • target (Hash)

    対象となるフレンドのID

Returns:



388
389
390
391
# File 'lib/libgss/action_request.rb', line 388

def approve(name, target)
  args = {action: "approve", name: name, target: target}
  add_action(args)
end

#block(name, target) ⇒ Object

フレンドをブロック(ブラックリスト追加)します。

Parameters:

  • name (String)

    対象となるコレクション名

  • target (Hash)

    対象となるフレンドのID

Returns:



406
407
408
409
# File 'lib/libgss/action_request.rb', line 406

def block(name, target)
  args = {action: "block", name: name, target: target}
  add_action(args)
end

#breakoff(name, target) ⇒ Object

フレンドシップの申請のキャンセル、申請却下、フレンド解除をします。

Parameters:

  • name (String)

    対象となるコレクション名

  • target (Hash)

    対象となるフレンドのID

Returns:



397
398
399
400
# File 'lib/libgss/action_request.rb', line 397

def breakoff(name, target)
  args = {action: "breakoff", name: name, target: target}
  add_action(args)
end

#count(name, conditions = nil) ⇒ Integer

条件に該当するデータを取得

Parameters:

  • name (String)

    対象となるコレクション名

  • conditions (Hash) (defaults to: nil)

    検索条件

Returns:

  • (Integer)

    該当したデータの件数



195
196
197
198
199
# File 'lib/libgss/action_request.rb', line 195

def count(name, conditions = nil)
  args =  {action: "count", name: name}
  args[:conditions] = conditions if conditions
  add_action(args)
end

#create(name, attrs) ⇒ Object

ログあるいは履歴を登録します。

Parameters:

  • name (String)

    対象となるコレクション名

  • attrs (Hash)

    属性

Returns:



300
301
302
303
# File 'lib/libgss/action_request.rb', line 300

def create(name, attrs)
  args =  {action: "create", name: name, attrs: attrs}
  add_action(args)
end

#dice(name, conditions = nil) ⇒ Object

確率テーブルに従って、発生させた乱数から得られた値

Parameters:

  • name (String)

    対象となるコレクション名

  • conditions (Hash) (defaults to: nil)

    検索条件

Returns:

  • (Object)

    確率テーブルの値



321
322
323
324
325
# File 'lib/libgss/action_request.rb', line 321

def dice(name, conditions = nil)
  args = {action: "dice", name: name}
  args[:conditions] = conditions if conditions
  add_action(args)
end

#execute(name, key, args = nil) ⇒ Object

ストアドスクリプトを実行します。

Parameters:

  • name (String)

    対象となるコレクション名

  • key (Hash)

    対象となるスクリプトのキー

  • args (Hash) (defaults to: nil)

    スクリプトに渡す引数

Returns:

  • (Object)

    ストアドスクリプトの結果



332
333
334
335
336
# File 'lib/libgss/action_request.rb', line 332

def execute(name, key, args = nil)
  action_args = {action: "execute", name: name, key: key}
  action_args[:args] = args if args
  add_action(action_args)
end

#find_all(name, conditions = nil, order = nil) ⇒ Array<Libgss::JsonObject> Also known as: all

条件に該当するデータを取得

Parameters:

  • name (String)

    対象となるコレクション名

  • conditions (Hash) (defaults to: nil)

    検索条件

  • order (Array<Array<String, Integer>>) (defaults to: nil)

    フィールド名と(1 or -1)の組み合わせの配列

Returns:

  • (Array<Libgss::JsonObject>)

    該当したデータを表すJSONオブジェクトの配列



169
170
171
172
173
174
# File 'lib/libgss/action_request.rb', line 169

def find_all(name, conditions = nil, order = nil)
  args =  {action: "all", name: name}
  args[:conditions] = conditions if conditions
  args[:order] = order if order
  add_action(args)
end

#find_first(name, conditions = nil, order = nil) ⇒ Libgss::JsonObject Also known as: first

条件に該当するデータを1件だけ取得

Parameters:

  • name (String)

    対象となるコレクション名

  • conditions (Hash) (defaults to: nil)

    検索条件

  • order (Array<Array<String, Integer>>) (defaults to: nil)

    フィールド名と(1 or -1)の組み合わせの配列

Returns:

  • (Libgss::JsonObject)

    該当したデータを表すJSONオブジェクト



206
207
208
209
210
211
# File 'lib/libgss/action_request.rb', line 206

def find_first(name, conditions = nil, order = nil)
  args =  {action: "first", name: name}
  args[:conditions] = conditions if conditions
  args[:order] = order if order
  add_action(args)
end

#get_by_dictionary(name, input, conditions = nil) ⇒ Object Also known as: get_dictionary

辞書テーブルからinputに対応するoutputの値を返します。

Parameters:

  • name (String)

    対象となる辞書のコレクション名

  • input (String)

    入力オブジェクトの文字列表現

  • conditions (Hash) (defaults to: nil)

    検索条件

Returns:

  • (Object)

    outputの値を示すJSONオブジェクト



219
220
221
222
223
# File 'lib/libgss/action_request.rb', line 219

def get_by_dictionary(name, input, conditions = nil)
  args = {action: "get", name: name, input: input}
  args[:conditions] = conditions if conditions
  add_action(args)
end

#get_by_game_data(name = "GameData", player_id = nil) ⇒ Object Also known as: get_game_data

ゲームデータからplayer_idに対応するゲームデータを返します

Parameters:

  • name (String) (defaults to: "GameData")

    対象となるコレクション名

  • player_id (String) (defaults to: nil)

    対象となるplayer_id

  • conditions (Hash)

    検索条件

Returns:

  • (Object)

    ゲームデータを表すJSONオブジェクト



284
285
286
287
288
289
# File 'lib/libgss/action_request.rb', line 284

def get_by_game_data(name = "GameData", player_id = nil)
  args =  {action: "get"}
  args[:name] = name if name
  args[:player_id] = player_id.to_s if player_id
  add_action(args)
end

#get_by_int_range(name, input, conditions = nil) ⇒ Object Also known as: get_int_range

整数範囲テーブルからinputに対応するoutputの値を返します。

Parameters:

  • name (String)

    対象となる整数範囲テーブルのコレクション名

  • input (Integer)

    対象となる入力値

  • conditions (Hash) (defaults to: nil)

    検索条件

Returns:

  • (Object)

    outputの値を示すJSONオブジェクト



243
244
245
246
247
# File 'lib/libgss/action_request.rb', line 243

def get_by_int_range(name, input, conditions = nil)
  args = {action: "get", name: name, input: input}
  args[:conditions] = conditions if conditions
  add_action(args)
end

#get_by_player(name = "Player", player_id = nil) ⇒ Object Also known as: get_player

プレイヤーからplayer_idに対応するプレイヤーを返します

Parameters:

  • name (String) (defaults to: "Player")

    対象となるコレクション名

  • player_id (String) (defaults to: nil)

    対象となるplayer_id

  • conditions (Hash)

    検索条件

Returns:

  • (Object)

    プレイヤーを表すJSONオブジェクト



270
271
272
273
274
275
# File 'lib/libgss/action_request.rb', line 270

def get_by_player(name = "Player", player_id = nil)
  args =  {action: "get"}
  args[:name] = name if name
  args[:player_id] = player_id.to_s if player_id
  add_action(args)
end

#get_by_probability(name, value, conditions = nil) ⇒ Object Also known as: get_probability

確率テーブルからinputに対応するoutputの値を返します。 diceがあるのであまり使われないはず。

Parameters:

  • name (String)

    対象となる確率テーブルのコレクション名

  • value (String)

    対象となるオブジェクトの文字列表現

  • conditions (Hash) (defaults to: nil)

    検索条件

Returns:

  • (Object)

    valueの値を示すJSONオブジェクト



257
258
259
260
261
# File 'lib/libgss/action_request.rb', line 257

def get_by_probability(name, value, conditions = nil)
  args = {action: "get", name: name, value: value}
  args[:conditions] = conditions if conditions
  add_action(args)
end

#get_by_schedule(name, time = Time.now.to_i, conditions = nil) ⇒ Object Also known as: get_schedule

期間テーブルからinputに対応するoutputの値を返します。

Parameters:

  • name (String)

    対象となる機関テーブルのコレクション名

  • time (Integer) (defaults to: Time.now.to_i)

    対象となるUNIX時刻

  • conditions (Hash) (defaults to: nil)

    検索条件

Returns:

  • (Object)

    outputの値を示すJSONオブジェクト



231
232
233
234
235
# File 'lib/libgss/action_request.rb', line 231

def get_by_schedule(name, time = Time.now.to_i, conditions = nil)
  args = {action: "get", name: name, time: time}
  args[:conditions] = conditions if conditions
  add_action(args)
end

#inspectObject



43
44
45
46
47
# File 'lib/libgss/action_request.rb', line 43

def inspect
  r = "#<#{self.class.name}:#{self.object_id} "
  fields = (instance_variables - [:@network]).map{|f| "#{f}=#{instance_variable_get(f).inspect}"}
  r << fields.join(", ") << ">"
end

#master_diffs(downloaded_versions) ⇒ Object

マスタの差分を取得します

Parameters:

  • downloaded_versions (Hash)

    キーが対象となるコレクション名、値がそのバージョンを示すHash

Returns:

  • 差分コレクション毎の差分を示すHashの配列



424
425
426
427
# File 'lib/libgss/action_request.rb', line 424

def master_diffs(downloaded_versions)
  args = {action: "master_diffs", downloaded_versions: downloaded_versions}
  add_action(args)
end

#next_action_idObject



49
50
51
# File 'lib/libgss/action_request.rb', line 49

def next_action_id
  @action_id += 1
end

#paginate(name, page, per_page, conditions = nil, order = nil) ⇒ Array<Libgss::JsonObject>

ページネーション付きで条件に該当するデータを取得

Parameters:

  • name (String)

    対象となるコレクション名

  • page (String)

    取得するページ

  • per_page (String)

    1ページあたりの件数

  • conditions (Hash) (defaults to: nil)

    検索条件

  • order (Array<Array<String, Integer>>) (defaults to: nil)

    フィールド名と(1 or -1)の組み合わせの配列

Returns:

  • (Array<Libgss::JsonObject>)

    該当したデータを表すJSONオブジェクトの配列



184
185
186
187
188
189
# File 'lib/libgss/action_request.rb', line 184

def paginate(name, page, per_page, conditions = nil, order = nil)
  args =  {action: "all", name: name, page: page, per_page: per_page}
  args[:conditions] = conditions if conditions
  args[:order] = order if order
  add_action(args)
end

#send_request(&callback) ⇒ Object

アクション群を実行するために実際にHTTPリクエストを送信します。



60
61
62
63
64
65
66
67
68
69
# File 'lib/libgss/action_request.rb', line 60

def send_request(&callback)
  res = Libgss.with_retry("action_request") do
    network.httpclient_for_action.post(action_url, {"inputs" => @actions.map(&:to_hash)}.to_json, req_headers)
  end
  response_hook.call(res) if response_hook # テストでレスポンスを改ざんを再現するために使います
  r = process_response(res, :action_request)
  @outputs = Outputs.new(r["outputs"])
  callback.call(@outputs) if callback
  @outputs
end

#server_date(time = nil) ⇒ Date

引数timeに指定された時刻の運用日付を返します。 「運用日付」とは AppGarden で 設定された時刻を日付の開始時刻とした場合の日付(Ruby ストアドスクリプト内ではDateオブジェクト)を返します。

Parameters:

  • time (Time) (defaults to: nil)

    time に指定された時刻(省略時は現在時刻)の運用日付

Returns:

  • (Date)

    timeが属する運用日付



353
354
355
356
357
# File 'lib/libgss/action_request.rb', line 353

def server_date(time = nil)
  args = {action: "server_date"}
  args[:time] = time if time
  add_action(args)
end

#server_timeTime

サーバの現在時刻を返します。

Returns:

  • (Time)

    現在時刻を表すUNIX時刻



342
343
344
# File 'lib/libgss/action_request.rb', line 342

def server_time()
  add_action(action: "server_time")
end

#unblock(name, target) ⇒ Object

フレンドをブロックの解除(ブラックリストから除外)します。

Parameters:

  • name (String)

    対象となるコレクション名

  • target (Hash)

    対象となるフレンドのID

Returns:



415
416
417
418
# File 'lib/libgss/action_request.rb', line 415

def unblock(name, target)
  args = {action: "unblock", name: name, target: target}
  add_action(args)
end

#update(name, attrs, player_id = nil) ⇒ Object

プレイヤー、ゲームデータを更新します。

Parameters:

  • name (String)

    対象となるコレクション名

  • player_id (Hash) (defaults to: nil)

    対象を特定するためのID。

  • attrs (Hash)

    属性。対象を特定するためのplayer_idを含みません。

Returns:



310
311
312
313
314
# File 'lib/libgss/action_request.rb', line 310

def update(name, attrs, player_id = nil)
  args =  {action: "update", name: name, attrs: attrs}
  args[:player_id] = player_id.to_s if player_id
  add_action(args)
end

#verify_signature(res, &block) ⇒ Object

シグネチャの検証を行います



91
92
93
94
95
96
97
98
# File 'lib/libgss/action_request.rb', line 91

def verify_signature(res, &block)
  case network.api_version
  when "1.0.0" then verify_signature_on_headers(res, &block)
  when "1.1.0" then verify_signature_included_body(res, &block)
  else
    raise Error, "Unsupported API version: #{network.api_version}"
  end
end