Class: Libgss::ActionRequest

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

Direct Known Subclasses

AsyncActionRequest

Defined Under Namespace

Classes: Error

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(httpclient, action_url, req_headers) ⇒ ActionRequest

コンストラクタ



28
29
30
31
32
33
34
35
# File 'lib/libgss/action_request.rb', line 28

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

Instance Attribute Details

#action_urlObject (readonly)

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



24
25
26
# File 'lib/libgss/action_request.rb', line 24

def action_url
  @action_url
end

#outputsObject (readonly)

Returns the value of attribute outputs.



25
26
27
# File 'lib/libgss/action_request.rb', line 25

def outputs
  @outputs
end

#req_headersObject (readonly)

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



24
25
26
# File 'lib/libgss/action_request.rb', line 24

def req_headers
  @req_headers
end

#statusObject (readonly)

Returns the value of attribute status.



25
26
27
# File 'lib/libgss/action_request.rb', line 25

def status
  @status
end

Instance Method Details

#add_action(hash) ⇒ Object



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

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:



277
278
279
280
# File 'lib/libgss/action_request.rb', line 277

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:



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

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:



304
305
306
307
# File 'lib/libgss/action_request.rb', line 304

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:



295
296
297
298
# File 'lib/libgss/action_request.rb', line 295

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)

    該当したデータの件数



100
101
102
103
104
# File 'lib/libgss/action_request.rb', line 100

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:



198
199
200
201
# File 'lib/libgss/action_request.rb', line 198

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)

    確率テーブルの値



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

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)

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



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

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>

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

Parameters:

  • name (String)

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

  • conditions (Hash) (defaults to: nil)

    検索条件

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

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

Returns:

  • (Array<Libgss::JsonObject>)

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



75
76
77
78
79
80
# File 'lib/libgss/action_request.rb', line 75

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

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

Parameters:

  • name (String)

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

  • conditions (Hash) (defaults to: nil)

    検索条件

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

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

Returns:

  • (Libgss::JsonObject)

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



111
112
113
114
115
116
# File 'lib/libgss/action_request.rb', line 111

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

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

Parameters:

  • name (String)

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

  • input (String)

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

  • conditions (Hash) (defaults to: nil)

    検索条件

Returns:

  • (Object)

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



123
124
125
126
127
# File 'lib/libgss/action_request.rb', line 123

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

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

Parameters:

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

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

  • player_id (String) (defaults to: nil)

    対象となるplayer_id

  • conditions (Hash)

    検索条件

Returns:

  • (Object)

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



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

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

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

Parameters:

  • name (String)

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

  • input (Integer)

    対象となる入力値

  • conditions (Hash) (defaults to: nil)

    検索条件

Returns:

  • (Object)

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



145
146
147
148
149
# File 'lib/libgss/action_request.rb', line 145

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

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

Parameters:

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

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

  • player_id (String) (defaults to: nil)

    対象となるplayer_id

  • conditions (Hash)

    検索条件

Returns:

  • (Object)

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



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

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

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

Parameters:

  • name (String)

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

  • value (String)

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

  • conditions (Hash) (defaults to: nil)

    検索条件

Returns:

  • (Object)

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



158
159
160
161
162
# File 'lib/libgss/action_request.rb', line 158

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

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

Parameters:

  • name (String)

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

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

    対象となるUNIX時刻

  • conditions (Hash) (defaults to: nil)

    検索条件

Returns:

  • (Object)

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



134
135
136
137
138
# File 'lib/libgss/action_request.rb', line 134

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



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

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

#master_diffs(downloaded_versions) ⇒ Object

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

Parameters:

  • downloaded_versions (Hash)

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

Returns:

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



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

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

#next_action_idObject



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

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オブジェクトの配列



89
90
91
92
93
94
# File 'lib/libgss/action_request.rb', line 89

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リクエストを送信します。



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/libgss/action_request.rb', line 54

def send_request(&callback)
  res = Libgss.with_retry("action_request") do
    @httpclient.post(action_url, {"inputs" => @actions.map(&:to_hash)}.to_json, req_headers)
  end
  case res.code.to_i
  when 200..299 then # OK
  else
    raise Error, "failed to send action request: [#{res.code}] #{res.body}"
  end
  r = JSON.parse(res.body)
  # puts res.body
  @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が属する運用日付



251
252
253
254
255
# File 'lib/libgss/action_request.rb', line 251

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

#server_timeTime

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

Returns:

  • (Time)

    現在時刻を表すUNIX時刻



240
241
242
# File 'lib/libgss/action_request.rb', line 240

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

#unblock(name, target) ⇒ Object

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

Parameters:

  • name (String)

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

  • target (Hash)

    対象となるフレンドのID

Returns:



313
314
315
316
# File 'lib/libgss/action_request.rb', line 313

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:



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

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