libgss 0.7.5 → 0.7.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +18 -0
- data/Rakefile +2 -2
- data/lib/libgss/action_request.rb +5 -4
- data/lib/libgss/async_action_request.rb +13 -14
- data/lib/libgss/network.rb +9 -8
- data/lib/libgss/version.rb +1 -1
- data/libgss.gemspec +3 -0
- data/spec/factories/async_action.rb +38 -0
- data/spec/factories/client_release.rb +14 -0
- data/spec/factories/device_type.rb +15 -0
- data/spec/factories/game_data.rb +112 -0
- data/spec/factories/player.rb +155 -0
- data/spec/libgss/async_action_request_spec.rb +105 -16
- data/spec/libgss/network_spec.rb +1 -1
- data/spec/spec_helper.rb +36 -27
- data/spec/support/auto/app_garden.rb +12 -0
- data/spec/support/auto/fixtures.rb +14 -0
- data/spec/support/auto/network.rb +17 -0
- data/spec/support/models/async_action.rb +26 -0
- data/spec/support/models/client_release.rb +50 -0
- data/spec/support/models/game_data.rb +29 -0
- data/spec/support/models/player.rb +37 -0
- metadata +68 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 41ec932303909de4bd6ba629106d6090c7c0c301
|
4
|
+
data.tar.gz: 3918ed995b910482bb17d3dcee64b55a0dc97eb5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b0e92ac070c31f742624157721a56016078471ef9463a2158e65bca6c3db7c1574f9b6eb6d33ccdc93d42fd8129a4667964cc3dad77060f3955e447e35ee1e7c
|
7
|
+
data.tar.gz: a73d09d54c21f757ab590d88abbb4096ece741e89f6c48a3c07612acf887f2c648281cba9869fcdb19ad51a30500b1f62f43bbcefbe11f6cd8000a3cc67213f1
|
data/Gemfile.lock
CHANGED
@@ -11,17 +11,31 @@ PATH
|
|
11
11
|
GEM
|
12
12
|
remote: https://rubygems.org/
|
13
13
|
specs:
|
14
|
+
activemodel (3.2.14)
|
15
|
+
activesupport (= 3.2.14)
|
16
|
+
builder (~> 3.0.0)
|
14
17
|
activesupport (3.2.14)
|
15
18
|
i18n (~> 0.6, >= 0.6.4)
|
16
19
|
multi_json (~> 1.0)
|
20
|
+
builder (3.0.4)
|
17
21
|
diff-lcs (1.2.3)
|
22
|
+
factory_girl (4.2.0)
|
23
|
+
activesupport (>= 3.0.0)
|
24
|
+
fontana_client_support (0.7.2)
|
18
25
|
httpclient (2.3.4.1)
|
19
26
|
i18n (0.6.5)
|
20
27
|
json (1.8.0)
|
21
28
|
macaddr (1.6.1)
|
22
29
|
systemu (~> 2.5.0)
|
30
|
+
mongoid (3.1.5)
|
31
|
+
activemodel (~> 3.2)
|
32
|
+
moped (~> 1.4)
|
33
|
+
origin (~> 1.0)
|
34
|
+
tzinfo (~> 0.3.29)
|
35
|
+
moped (1.5.1)
|
23
36
|
multi_json (1.7.9)
|
24
37
|
oauth (0.4.7)
|
38
|
+
origin (1.1.0)
|
25
39
|
rake (10.0.4)
|
26
40
|
rspec (2.13.0)
|
27
41
|
rspec-core (~> 2.13.0)
|
@@ -34,6 +48,7 @@ GEM
|
|
34
48
|
systemu (2.5.2)
|
35
49
|
tengine_support (1.2.2)
|
36
50
|
activesupport (>= 3.0.0, < 4.0.0)
|
51
|
+
tzinfo (0.3.37)
|
37
52
|
uuid (2.3.7)
|
38
53
|
macaddr (~> 1.0)
|
39
54
|
|
@@ -42,6 +57,9 @@ PLATFORMS
|
|
42
57
|
|
43
58
|
DEPENDENCIES
|
44
59
|
bundler (~> 1.3)
|
60
|
+
factory_girl
|
61
|
+
fontana_client_support
|
45
62
|
libgss!
|
63
|
+
mongoid
|
46
64
|
rake
|
47
65
|
rspec
|
data/Rakefile
CHANGED
@@ -21,12 +21,13 @@ module Libgss
|
|
21
21
|
|
22
22
|
|
23
23
|
# 読み込みのみ、書き込み不可
|
24
|
+
attr_reader :network
|
24
25
|
attr_reader :action_url, :req_headers
|
25
26
|
attr_reader :status, :outputs
|
26
27
|
|
27
28
|
# コンストラクタ
|
28
|
-
def initialize(
|
29
|
-
@
|
29
|
+
def initialize(network, action_url, req_headers)
|
30
|
+
@network = network
|
30
31
|
@action_url = action_url
|
31
32
|
@req_headers = req_headers
|
32
33
|
@status = STATUS_PREPARING
|
@@ -36,7 +37,7 @@ module Libgss
|
|
36
37
|
|
37
38
|
def inspect
|
38
39
|
r = "#<#{self.class.name}:#{self.object_id} "
|
39
|
-
fields = (instance_variables - [:@
|
40
|
+
fields = (instance_variables - [:@network]).map{|f| "#{f}=#{instance_variable_get(f).inspect}"}
|
40
41
|
r << fields.join(", ") << ">"
|
41
42
|
end
|
42
43
|
|
@@ -53,7 +54,7 @@ module Libgss
|
|
53
54
|
# アクション群を実行するために実際にHTTPリクエストを送信します。
|
54
55
|
def send_request(&callback)
|
55
56
|
res = Libgss.with_retry("action_request") do
|
56
|
-
|
57
|
+
network.httpclient_for_action.post(action_url, {"inputs" => @actions.map(&:to_hash)}.to_json, req_headers)
|
57
58
|
end
|
58
59
|
r = process_response(res, :async_request)
|
59
60
|
@outputs = Outputs.new(r["outputs"])
|
@@ -20,24 +20,23 @@ module Libgss
|
|
20
20
|
end
|
21
21
|
|
22
22
|
# アクション群を実行するために実際にHTTPリクエストを送信します。
|
23
|
-
def send_request
|
24
|
-
res =
|
23
|
+
def send_request
|
24
|
+
res = network.httpclient_for_action.post(action_url, {"inputs" => @actions.map(&:to_hash)}.to_json, req_headers)
|
25
25
|
r = process_response(res, :async_request)
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
@ids = @outputs.map do |output|
|
30
|
-
output['id']
|
31
|
-
end
|
32
|
-
|
33
|
-
@outputs
|
26
|
+
outputs = Outputs.new(r["outputs"])
|
27
|
+
@ids = outputs.map{|output| output['id'] }
|
28
|
+
outputs
|
34
29
|
end
|
35
30
|
|
36
|
-
def async_status()
|
37
|
-
|
31
|
+
def async_status(ids=nil)
|
32
|
+
ids ||= @ids
|
33
|
+
ids = [ids] unless ids.is_a?(::Array)
|
34
|
+
raise Error, "failed to get response. please exec send_request before call." unless ids
|
38
35
|
|
39
|
-
res =
|
40
|
-
r = process_response(res, :
|
36
|
+
res = network.httpclient_for_action.post(result_url, {'input_ids' => ids}.to_json, req_headers)
|
37
|
+
r = process_response(res, :aync_results)
|
38
|
+
Outputs.new(r["outputs"])
|
41
39
|
end
|
40
|
+
alias :async_results :async_status
|
42
41
|
end
|
43
42
|
end
|
data/lib/libgss/network.rb
CHANGED
@@ -139,12 +139,12 @@ module Libgss
|
|
139
139
|
|
140
140
|
# @return [Libgss::ActionRequest] アクション用リクエストを生成して返します
|
141
141
|
def new_action_request
|
142
|
-
ActionRequest.new(
|
142
|
+
ActionRequest.new(self, action_url, req_headers)
|
143
143
|
end
|
144
144
|
|
145
145
|
# @return [Libgss::AsyncActionRequest] 非同期アクション用リクエストを生成して返します
|
146
146
|
def new_async_action_request
|
147
|
-
AsyncActionRequest.new(
|
147
|
+
AsyncActionRequest.new(self, async_action_url, async_result_url, req_headers)
|
148
148
|
end
|
149
149
|
|
150
150
|
# @return [Libgss::AssetRequest] 公開アセットを取得するリクエストを生成して返します
|
@@ -198,6 +198,13 @@ module Libgss
|
|
198
198
|
@uuid_gen ||= UUID.new
|
199
199
|
end
|
200
200
|
|
201
|
+
def httpclient_for_action
|
202
|
+
@httpclient_for_action ||=
|
203
|
+
@ignore_signature_key ? @httpclient :
|
204
|
+
HttpClientWithSignatureKey.new(@httpclient, self)
|
205
|
+
end
|
206
|
+
|
207
|
+
|
201
208
|
private
|
202
209
|
|
203
210
|
def req_headers
|
@@ -207,12 +214,6 @@ module Libgss
|
|
207
214
|
}
|
208
215
|
end
|
209
216
|
|
210
|
-
def httpclient_for_action
|
211
|
-
@httpclient_for_action ||=
|
212
|
-
@ignore_signature_key ? @httpclient :
|
213
|
-
HttpClientWithSignatureKey.new(@httpclient, self)
|
214
|
-
end
|
215
|
-
|
216
217
|
# ストレージからplayer_idをロードします
|
217
218
|
# 保存されていたらtrueを、保存されていなかったらfalseを返します。
|
218
219
|
#
|
data/lib/libgss/version.rb
CHANGED
data/libgss.gemspec
CHANGED
@@ -21,6 +21,9 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
22
|
spec.add_development_dependency "rake"
|
23
23
|
spec.add_development_dependency "rspec"
|
24
|
+
spec.add_development_dependency "fontana_client_support"
|
25
|
+
spec.add_development_dependency "mongoid"
|
26
|
+
spec.add_development_dependency "factory_girl"
|
24
27
|
|
25
28
|
spec.add_runtime_dependency "httpclient"
|
26
29
|
spec.add_runtime_dependency "json"
|
@@ -0,0 +1,38 @@
|
|
1
|
+
|
2
|
+
require 'factory_girl'
|
3
|
+
|
4
|
+
FactoryGirl.define do
|
5
|
+
|
6
|
+
factory :async_action01, class: AsyncAction do
|
7
|
+
player
|
8
|
+
action_id "1"
|
9
|
+
request_url "http://localhost:3000/api/1.0.0/async_actions.json?auth_token=CzyWmCg3vjpxeYuHL8dr"
|
10
|
+
request({"id"=>1, "action"=>"server_time"})
|
11
|
+
# response({"result"=>1379990870, "id"=>1})
|
12
|
+
attempts 0
|
13
|
+
end
|
14
|
+
|
15
|
+
factory :async_action02, class: AsyncAction do
|
16
|
+
player
|
17
|
+
action_id "2"
|
18
|
+
request_url "http://localhost:3000/api/1.0.0/async_actions.json?auth_token=CzyWmCg3vjpxeYuHL8dr"
|
19
|
+
request({"id"=>2, "action"=>"server_time"})
|
20
|
+
response({"result"=>1379990870, "id"=>"2"})
|
21
|
+
attempts 0
|
22
|
+
end
|
23
|
+
|
24
|
+
factory :player, class: Player do
|
25
|
+
player_id "1000001"
|
26
|
+
nickname "ichiro"
|
27
|
+
pf_player_id "150001"
|
28
|
+
pf_player_info ({})
|
29
|
+
first_login_at Time.zone.parse("2012-07-15T21:50:00+09:00")
|
30
|
+
current_login_at Time.zone.parse("2012-08-15T18:50:00+09:00")
|
31
|
+
last_login_at Time.zone.parse("2012-08-15T18:50:00+09:00")
|
32
|
+
login_days 100
|
33
|
+
login_count_this_day 3
|
34
|
+
continuous_login_days 5
|
35
|
+
created_at Time.zone.parse("2012-08-15T18:50:00+09:00")
|
36
|
+
updated_at Time.zone.parse("2012-08-15T18:50:00+09:00")
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
|
2
|
+
require 'factory_girl'
|
3
|
+
|
4
|
+
FactoryGirl.define do
|
5
|
+
|
6
|
+
factory :client_release01, class: ClientRelease do
|
7
|
+
status_cd 2
|
8
|
+
device_type_cd 1
|
9
|
+
version '2013073101'
|
10
|
+
url "https://itunes.apple.com/jp/app/xxxxxxxxxx/id123456789?mt=8"
|
11
|
+
created_at 1375364758
|
12
|
+
updated_at 1375364758
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
|
2
|
+
require 'factory_girl'
|
3
|
+
|
4
|
+
FactoryGirl.define do
|
5
|
+
|
6
|
+
factory :client_release_device_type01, class: ClientRelease::DeviceType do
|
7
|
+
cd 1
|
8
|
+
name "iOS"
|
9
|
+
end
|
10
|
+
|
11
|
+
factory :client_release_device_type02, class: ClientRelease::DeviceType do
|
12
|
+
cd 2
|
13
|
+
name "Android"
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
# このファイルは生成されたファイルです。
|
4
|
+
#
|
5
|
+
# このファイルを変更する際には、再度生成され、上書きされる
|
6
|
+
# かもしれないことを考慮してください。
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'factory_girl'
|
10
|
+
|
11
|
+
FactoryGirl.define do
|
12
|
+
|
13
|
+
factory :game_data01, class: GameData do
|
14
|
+
player_id "1000001"
|
15
|
+
content ({"hp"=>15, "max_hp"=>15, "mp"=>5, "max_mp"=>5, "exp"=>100, "money"=>200, "items"=>{"20001"=>3, "20005"=>1}, "equipments"=>{"head"=>10018, "body"=>10012, "right_hand"=>10001, "left_hand"=>nil}})
|
16
|
+
login_bonus [[10001, 1]]
|
17
|
+
read_notifications []
|
18
|
+
created_at Time.zone.parse("2012-08-15T18:50:00+09:00")
|
19
|
+
updated_at Time.zone.parse("2012-08-15T18:50:00+09:00")
|
20
|
+
gender 1
|
21
|
+
end
|
22
|
+
|
23
|
+
factory :game_data02, class: GameData do
|
24
|
+
player_id "1000002"
|
25
|
+
content ({"hp"=>30, "max_hp"=>30, "mp"=>10, "max_mp"=>10, "exp"=>200, "money"=>400, "items"=>{"20001"=>3, "20005"=>1}, "equipments"=>{"head"=>10018, "body"=>10012, "right_hand"=>10001, "left_hand"=>nil}})
|
26
|
+
greeting_points 10
|
27
|
+
login_bonus [[20001, 1]]
|
28
|
+
invite_player "1000003"
|
29
|
+
read_notifications []
|
30
|
+
created_at Time.zone.parse("2012-08-12T10:00:00+09:00")
|
31
|
+
updated_at Time.zone.parse("2012-08-15T10:00:00+09:00")
|
32
|
+
gender 1
|
33
|
+
end
|
34
|
+
|
35
|
+
factory :game_data03, class: GameData do
|
36
|
+
player_id "1000003"
|
37
|
+
content ({"hp"=>45, "max_hp"=>45, "mp"=>15, "max_mp"=>15, "exp"=>300, "money"=>600, "items"=>{"20001"=>3, "20005"=>1}, "equipments"=>{"head"=>10018, "body"=>10012, "right_hand"=>10001, "left_hand"=>nil}})
|
38
|
+
greeting_points 20
|
39
|
+
invitation_code "abcdABCD42"
|
40
|
+
read_notifications []
|
41
|
+
created_at Time.zone.parse("2012-08-10T01:10:00+09:00")
|
42
|
+
updated_at Time.zone.parse("2012-08-15T01:10:00+09:00")
|
43
|
+
gender 1
|
44
|
+
end
|
45
|
+
|
46
|
+
factory :game_data04, class: GameData do
|
47
|
+
player_id "1000004"
|
48
|
+
content ({"hp"=>10, "max_hp"=>15, "mp"=>5, "max_mp"=>5, "exp"=>100, "money"=>200, "items"=>{"20001"=>3, "20005"=>1}, "equipments"=>{"head"=>10018, "body"=>10012, "right_hand"=>10001, "left_hand"=>nil}})
|
49
|
+
login_bonus [[10001, 1]]
|
50
|
+
read_notifications []
|
51
|
+
created_at Time.zone.parse("2012-08-15T18:50:00+09:00")
|
52
|
+
updated_at Time.zone.parse("2012-08-15T18:50:00+09:00")
|
53
|
+
gender 2
|
54
|
+
end
|
55
|
+
|
56
|
+
factory :game_data05, class: GameData do
|
57
|
+
player_id "1000005"
|
58
|
+
content ({"hp"=>20, "max_hp"=>30, "mp"=>5, "max_mp"=>10, "exp"=>200, "money"=>400, "items"=>{"20001"=>3, "20005"=>1}, "equipments"=>{"head"=>10018, "body"=>10012, "right_hand"=>10001, "left_hand"=>nil}})
|
59
|
+
greeting_points 10
|
60
|
+
login_bonus [[20001, 1]]
|
61
|
+
invite_player "1000006"
|
62
|
+
read_notifications []
|
63
|
+
created_at Time.zone.parse("2012-08-12T10:00:00+09:00")
|
64
|
+
updated_at Time.zone.parse("2012-08-15T10:00:00+09:00")
|
65
|
+
gender 2
|
66
|
+
end
|
67
|
+
|
68
|
+
factory :game_data06, class: GameData do
|
69
|
+
player_id "1000006"
|
70
|
+
content ({"hp"=>40, "max_hp"=>45, "mp"=>15, "max_mp"=>15, "exp"=>300, "money"=>600, "items"=>{"20001"=>3, "20005"=>1}, "equipments"=>{"head"=>10018, "body"=>10012, "right_hand"=>10001, "left_hand"=>nil}})
|
71
|
+
greeting_points 20
|
72
|
+
invitation_code "abcdABCD42"
|
73
|
+
read_notifications []
|
74
|
+
created_at Time.zone.parse("2012-08-10T01:10:00+09:00")
|
75
|
+
updated_at Time.zone.parse("2012-08-15T01:10:00+09:00")
|
76
|
+
gender 1
|
77
|
+
end
|
78
|
+
|
79
|
+
factory :game_data07, class: GameData do
|
80
|
+
player_id "1000007"
|
81
|
+
content ({"hp"=>1, "max_hp"=>15, "mp"=>5, "max_mp"=>5, "exp"=>100, "money"=>200, "items"=>{"20001"=>3, "20005"=>1}, "equipments"=>{"head"=>10018, "body"=>10012, "right_hand"=>10001, "left_hand"=>nil}})
|
82
|
+
login_bonus [[10001, 1]]
|
83
|
+
read_notifications []
|
84
|
+
created_at Time.zone.parse("2012-08-15T18:50:00+09:00")
|
85
|
+
updated_at Time.zone.parse("2012-08-15T18:50:00+09:00")
|
86
|
+
gender 1
|
87
|
+
end
|
88
|
+
|
89
|
+
factory :game_data08, class: GameData do
|
90
|
+
player_id "1000008"
|
91
|
+
content ({"hp"=>3, "max_hp"=>30, "mp"=>1, "max_mp"=>10, "exp"=>200, "money"=>400, "items"=>{"20001"=>3, "20005"=>1}, "equipments"=>{"head"=>10018, "body"=>10012, "right_hand"=>10001, "left_hand"=>nil}})
|
92
|
+
greeting_points 10
|
93
|
+
login_bonus [[20001, 1]]
|
94
|
+
invite_player "1000009"
|
95
|
+
read_notifications []
|
96
|
+
created_at Time.zone.parse("2012-08-12T10:00:00+09:00")
|
97
|
+
updated_at Time.zone.parse("2012-08-15T10:00:00+09:00")
|
98
|
+
gender 1
|
99
|
+
end
|
100
|
+
|
101
|
+
factory :game_data09, class: GameData do
|
102
|
+
player_id "1000009"
|
103
|
+
content ({"hp"=>1, "max_hp"=>45, "mp"=>1, "max_mp"=>15, "exp"=>300, "money"=>600, "items"=>{"20001"=>3, "20005"=>1}, "equipments"=>{"head"=>10018, "body"=>10012, "right_hand"=>10001, "left_hand"=>nil}})
|
104
|
+
greeting_points 20
|
105
|
+
invitation_code "abcdABCD42"
|
106
|
+
read_notifications []
|
107
|
+
created_at Time.zone.parse("2012-08-10T01:10:00+09:00")
|
108
|
+
updated_at Time.zone.parse("2012-08-15T01:10:00+09:00")
|
109
|
+
gender 2
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
@@ -0,0 +1,155 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
# このファイルは生成されたファイルです。
|
4
|
+
#
|
5
|
+
# このファイルを変更する際には、再度生成され、上書きされる
|
6
|
+
# かもしれないことを考慮してください。
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'factory_girl'
|
10
|
+
|
11
|
+
FactoryGirl.define do
|
12
|
+
|
13
|
+
factory :player01, class: Player do
|
14
|
+
player_id "1000001"
|
15
|
+
nickname "ichiro"
|
16
|
+
pf_player_id "150001"
|
17
|
+
pf_player_info ({})
|
18
|
+
first_login_at Time.zone.parse("2012-07-15T21:50:00+09:00")
|
19
|
+
current_login_at Time.zone.parse("2012-08-15T18:50:00+09:00")
|
20
|
+
last_login_at Time.zone.parse("2012-08-15T18:50:00+09:00")
|
21
|
+
login_days 100
|
22
|
+
login_count_this_day 3
|
23
|
+
continuous_login_days 5
|
24
|
+
created_at Time.zone.parse("2012-08-15T18:50:00+09:00")
|
25
|
+
updated_at Time.zone.parse("2012-08-15T18:50:00+09:00")
|
26
|
+
end
|
27
|
+
|
28
|
+
factory :player02, class: Player do
|
29
|
+
player_id "1000002"
|
30
|
+
nickname "jiro"
|
31
|
+
level 2
|
32
|
+
pf_player_id "150002"
|
33
|
+
pf_player_info ({})
|
34
|
+
first_login_at Time.zone.parse("2012-07-21T10:00:00+09:00")
|
35
|
+
current_login_at Time.zone.parse("2012-08-15T10:00:00+09:00")
|
36
|
+
last_login_at Time.zone.parse("2012-08-15T10:00:00+09:00")
|
37
|
+
first_paid_at Time.zone.parse("2012-08-01T12:00:00+09:00")
|
38
|
+
last_paid_at Time.zone.parse("2012-08-15T12:00:00+09:00")
|
39
|
+
login_days 20
|
40
|
+
login_count_this_day 1
|
41
|
+
created_at Time.zone.parse("2012-08-15T12:00:00+09:00")
|
42
|
+
updated_at Time.zone.parse("2012-08-15T12:00:00+09:00")
|
43
|
+
end
|
44
|
+
|
45
|
+
factory :player03, class: Player do
|
46
|
+
player_id "1000003"
|
47
|
+
nickname "subrow"
|
48
|
+
level 3
|
49
|
+
pf_player_id "150003"
|
50
|
+
pf_player_info ({})
|
51
|
+
first_login_at Time.zone.parse("2012-07-26T22:10:00+09:00")
|
52
|
+
current_login_at Time.zone.parse("2012-08-15T01:10:00+09:00")
|
53
|
+
last_login_at Time.zone.parse("2012-08-15T01:10:00+09:00")
|
54
|
+
first_paid_at Time.zone.parse("2012-08-10T20:00:00+09:00")
|
55
|
+
last_paid_at Time.zone.parse("2012-08-10T20:00:00+09:00")
|
56
|
+
login_days 30
|
57
|
+
login_count_this_day 1
|
58
|
+
continuous_login_days 3
|
59
|
+
created_at Time.zone.parse("2012-08-15T01:10:00+09:00")
|
60
|
+
updated_at Time.zone.parse("2012-08-15T01:10:00+09:00")
|
61
|
+
end
|
62
|
+
|
63
|
+
factory :player04, class: Player do
|
64
|
+
player_id "1000004"
|
65
|
+
nickname "shirow"
|
66
|
+
level 4
|
67
|
+
pf_player_id "150004"
|
68
|
+
pf_player_info ({})
|
69
|
+
first_login_at Time.zone.parse("2012-08-01T10:20:00+09:00")
|
70
|
+
current_login_at Time.zone.parse("2012-08-14T16:20:00+09:00")
|
71
|
+
last_login_at Time.zone.parse("2012-08-14T16:20:00+09:00")
|
72
|
+
login_days 5
|
73
|
+
created_at Time.zone.parse("2012-08-14T16:20:00+09:00")
|
74
|
+
updated_at Time.zone.parse("2012-08-14T16:20:00+09:00")
|
75
|
+
end
|
76
|
+
|
77
|
+
factory :player05, class: Player do
|
78
|
+
player_id "1000005"
|
79
|
+
nickname "gorow"
|
80
|
+
pf_player_id "150005"
|
81
|
+
pf_player_info ({})
|
82
|
+
first_login_at Time.zone.parse("2012-07-15T21:50:00+09:00")
|
83
|
+
current_login_at Time.zone.parse("2012-08-15T18:50:00+09:00")
|
84
|
+
last_login_at Time.zone.parse("2012-08-15T18:50:00+09:00")
|
85
|
+
login_days 10
|
86
|
+
login_count_this_day 3
|
87
|
+
continuous_login_days 5
|
88
|
+
created_at Time.zone.parse("2012-08-15T18:50:00+09:00")
|
89
|
+
updated_at Time.zone.parse("2012-08-15T18:50:00+09:00")
|
90
|
+
end
|
91
|
+
|
92
|
+
factory :player06, class: Player do
|
93
|
+
player_id "1000006"
|
94
|
+
nickname "rockrow"
|
95
|
+
level 2
|
96
|
+
pf_player_id "150006"
|
97
|
+
pf_player_info ({})
|
98
|
+
first_login_at Time.zone.parse("2012-07-21T10:00:00+09:00")
|
99
|
+
current_login_at Time.zone.parse("2012-08-15T10:00:00+09:00")
|
100
|
+
last_login_at Time.zone.parse("2012-08-15T10:00:00+09:00")
|
101
|
+
first_paid_at Time.zone.parse("2012-08-01T12:00:00+09:00")
|
102
|
+
last_paid_at Time.zone.parse("2012-08-15T12:00:00+09:00")
|
103
|
+
login_days 2
|
104
|
+
login_count_this_day 1
|
105
|
+
created_at Time.zone.parse("2012-08-15T12:00:00+09:00")
|
106
|
+
updated_at Time.zone.parse("2012-08-15T12:00:00+09:00")
|
107
|
+
end
|
108
|
+
|
109
|
+
factory :player07, class: Player do
|
110
|
+
player_id "1000007"
|
111
|
+
nickname "nanarow"
|
112
|
+
level 3
|
113
|
+
pf_player_id "150007"
|
114
|
+
pf_player_info ({})
|
115
|
+
first_login_at Time.zone.parse("2012-07-26T22:10:00+09:00")
|
116
|
+
current_login_at Time.zone.parse("2012-08-15T01:10:00+09:00")
|
117
|
+
last_login_at Time.zone.parse("2012-08-15T01:10:00+09:00")
|
118
|
+
first_paid_at Time.zone.parse("2012-08-10T20:00:00+09:00")
|
119
|
+
last_paid_at Time.zone.parse("2012-08-10T20:00:00+09:00")
|
120
|
+
login_days 3
|
121
|
+
login_count_this_day 1
|
122
|
+
continuous_login_days 3
|
123
|
+
created_at Time.zone.parse("2012-08-15T01:10:00+09:00")
|
124
|
+
updated_at Time.zone.parse("2012-08-15T01:10:00+09:00")
|
125
|
+
end
|
126
|
+
|
127
|
+
factory :player08, class: Player do
|
128
|
+
player_id "1000008"
|
129
|
+
nickname "hachi"
|
130
|
+
level 4
|
131
|
+
pf_player_id "150008"
|
132
|
+
pf_player_info ({})
|
133
|
+
first_login_at Time.zone.parse("2012-08-01T10:20:00+09:00")
|
134
|
+
current_login_at Time.zone.parse("2012-08-14T16:20:00+09:00")
|
135
|
+
last_login_at Time.zone.parse("2012-08-14T16:20:00+09:00")
|
136
|
+
login_days 1
|
137
|
+
created_at Time.zone.parse("2012-08-14T16:20:00+09:00")
|
138
|
+
updated_at Time.zone.parse("2012-08-14T16:20:00+09:00")
|
139
|
+
end
|
140
|
+
|
141
|
+
factory :player09, class: Player do
|
142
|
+
player_id "1000009"
|
143
|
+
nickname "kurow"
|
144
|
+
level 5
|
145
|
+
pf_player_id "150009"
|
146
|
+
pf_player_info ({})
|
147
|
+
first_login_at Time.zone.parse("2012-08-01T10:20:00+09:00")
|
148
|
+
current_login_at Time.zone.parse("2012-08-14T16:20:00+09:00")
|
149
|
+
last_login_at Time.zone.parse("2012-08-14T16:20:00+09:00")
|
150
|
+
login_days 1
|
151
|
+
created_at Time.zone.parse("2012-08-14T16:20:00+09:00")
|
152
|
+
updated_at Time.zone.parse("2012-08-14T16:20:00+09:00")
|
153
|
+
end
|
154
|
+
|
155
|
+
end
|
@@ -2,28 +2,117 @@
|
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
4
|
describe Libgss::AsyncActionRequest do
|
5
|
-
before do
|
6
|
-
request_fixture_load("01_basic")
|
7
|
-
end
|
8
5
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
network
|
6
|
+
before(:all) do
|
7
|
+
ClientRelease.delete_all
|
8
|
+
FactoryGirl.create(:client_release01)
|
13
9
|
end
|
14
10
|
|
15
|
-
let(:
|
16
|
-
|
11
|
+
let(:network){ @network }
|
12
|
+
|
13
|
+
describe "POST async_action.json" do
|
14
|
+
before do
|
15
|
+
Player.delete_all
|
16
|
+
AsyncAction.delete_all
|
17
|
+
create(:player01)
|
18
|
+
@network = new_network.login!
|
19
|
+
end
|
20
|
+
|
21
|
+
context "success" do
|
22
|
+
it do
|
23
|
+
r = network.new_async_action_request
|
24
|
+
r.server_time
|
25
|
+
r.send_request.to_a.should == [{"id" => 1, "status" => "executing" }]
|
26
|
+
end
|
27
|
+
|
28
|
+
it "id is string" do
|
29
|
+
r = network.new_async_action_request
|
30
|
+
r.server_time.with("10001")
|
31
|
+
r.send_request.to_a.should == [{"id" => "10001", "status" => "executing" }]
|
32
|
+
end
|
33
|
+
|
34
|
+
it "id is integer" do
|
35
|
+
r = network.new_async_action_request
|
36
|
+
r.server_time.with(10001)
|
37
|
+
r.send_request.to_a.should == [{"id" => 10001, "status" => "executing" }]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context "failed" do
|
42
|
+
it "action_id is empty" do
|
43
|
+
r = network.new_async_action_request
|
44
|
+
r.server_time.with(nil)
|
45
|
+
r.send_request.to_a.should == [{"id" => nil, "status" => "failed", "reason"=>{"action_id"=>["can't be blank"]}}]
|
46
|
+
end
|
47
|
+
|
48
|
+
it "action_id is duplicated" do
|
49
|
+
r = network.new_async_action_request
|
50
|
+
r.server_time.with(1)
|
51
|
+
r.server_time.with(1)
|
52
|
+
r.send_request.to_a.should == [
|
53
|
+
{"id" => 1, "status" => "executing"},
|
54
|
+
{"id" => 1, "status" => "failed", "reason"=>{"action_id"=>["is already taken"]}},
|
55
|
+
]
|
56
|
+
end
|
57
|
+
|
58
|
+
it "request is empty" do
|
59
|
+
r = network.new_async_action_request
|
60
|
+
a = r.add_action({})
|
61
|
+
a.should_receive(:to_hash).and_return({})
|
62
|
+
r.send_request.to_a.should == [
|
63
|
+
{"id" => nil, "status" => "failed", "reason"=>{
|
64
|
+
"action_id"=>["can't be blank"],
|
65
|
+
"request"=>["can't be blank"]
|
66
|
+
}}]
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
17
70
|
end
|
18
71
|
|
19
|
-
describe "
|
20
|
-
|
72
|
+
describe "async_status(POST: async_results.json)" do
|
73
|
+
|
74
|
+
context "working async_action" do
|
75
|
+
before do
|
76
|
+
Player.delete_all
|
77
|
+
AsyncAction.delete_all
|
78
|
+
@async_action01 = FactoryGirl.create(:async_action01)
|
79
|
+
@player01 = @async_action01.player
|
80
|
+
@network = new_network(@player01.player_id).login!
|
81
|
+
end
|
82
|
+
|
83
|
+
it do
|
84
|
+
r = network.new_async_action_request
|
85
|
+
r.async_status(['1']).to_a.should == [{"id" => '1', "status" => "executing" }]
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
context "executed async_action" do
|
90
|
+
before do
|
91
|
+
Player.delete_all
|
92
|
+
AsyncAction.delete_all
|
93
|
+
@async_action02 = create(:async_action02)
|
94
|
+
@player02 = @async_action02.player
|
95
|
+
@network = new_network(@player02.player_id).login!
|
96
|
+
end
|
97
|
+
|
98
|
+
it do
|
99
|
+
r = network.new_async_action_request
|
100
|
+
r.async_status(['2']).to_a.should == [{"id" => '2', "result" => 1379990870}]
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
context "action_id is not exists" do
|
105
|
+
before do
|
106
|
+
Player.delete_all
|
107
|
+
AsyncAction.delete_all
|
108
|
+
@async_action01 = FactoryGirl.create(:async_action01)
|
109
|
+
@player01 = @async_action01.player
|
110
|
+
@network = new_network(@player01.player_id).login!
|
111
|
+
end
|
112
|
+
|
21
113
|
it do
|
22
|
-
|
23
|
-
|
24
|
-
outputs.length.should == 1
|
25
|
-
outputs[0]['status'].should eq('executing')
|
26
|
-
end
|
114
|
+
r = network.new_async_action_request
|
115
|
+
r.async_status(['3']).to_a.should == [{"id" => '3', "status" => "not_found", "message"=>"not found for id: \"3\""}]
|
27
116
|
end
|
28
117
|
end
|
29
118
|
|
data/spec/libgss/network_spec.rb
CHANGED
@@ -30,7 +30,7 @@ describe Libgss::Network do
|
|
30
30
|
|
31
31
|
describe "#initialize" do
|
32
32
|
context "with_trail_slash" do
|
33
|
-
let(:target){
|
33
|
+
let(:target){ new_network_with_options(url: "http://localhost:4000/") }
|
34
34
|
it{ target.base_url.should == network.base_url }
|
35
35
|
it{ target.ssl_base_url.should == network.ssl_base_url }
|
36
36
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,35 +1,44 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
1
2
|
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
2
3
|
require 'libgss'
|
3
4
|
require 'tengine/support/yaml_with_erb'
|
4
5
|
|
5
|
-
|
6
|
-
require '
|
7
|
-
def request_fixture_load(fixture_name)
|
8
|
-
c = HTTPClient.new
|
9
|
-
c.post("http://localhost:4000/libgss_test/fixture_loadings/#{fixture_name}.json", "_method" => "put")
|
10
|
-
end
|
6
|
+
require 'fontana_client_support'
|
7
|
+
require 'mongoid'
|
11
8
|
|
12
9
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
10
|
+
Mongoid.logger.level = 0
|
11
|
+
log_path = File.expand_path("../../tmp/test.log", __FILE__)
|
12
|
+
FileUtils.mkdir_p(File.dirname(log_path))
|
13
|
+
logger = Logger.new(log_path)
|
14
|
+
logger.level = Logger::DEBUG
|
15
|
+
Mongoid.logger = logger
|
16
|
+
|
17
|
+
|
18
|
+
Mongoid.load!(File.expand_path("../../fontana_sample/config/fontana_mongoid.yml", __FILE__), :development)
|
19
|
+
|
20
|
+
require 'active_support/dependencies'
|
21
|
+
|
22
|
+
Time.zone = ActiveSupport::TimeZone.zones_map["Tokyo"]
|
23
|
+
|
24
|
+
d = File.expand_path("../support/models", __FILE__)
|
25
|
+
"Directory not found: #{d.inspect}" unless Dir.exist?(d)
|
26
|
+
ActiveSupport::Dependencies.autoload_paths << d
|
27
|
+
|
28
|
+
Dir[File.expand_path("../support/auto/**/*.rb", __FILE__)].each {|f| require f}
|
29
|
+
|
30
|
+
|
31
|
+
require 'factory_girl'
|
32
|
+
FactoryGirl.find_definitions
|
24
33
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
34
|
+
RSpec.configure do |config|
|
35
|
+
# iOS開発環境が整っていない場合、SSLで接続する https://sandbox.itunes.apple.com/verifyreceipt が
|
36
|
+
# オレオレ証明書を使っているので、その検証をができなくてエラーになってしまいます。
|
37
|
+
# 本来ならば、信頼する証明書として追加する方が良いと思われますが、
|
38
|
+
# ( http://d.hatena.ne.jp/komiyak/20130508/1367993536 )
|
39
|
+
# 証明書自身の検証はローカルの開発環境で行うことができるので、ここでは単純に検証をスキップする
|
40
|
+
# ように設定してしまいます。
|
41
|
+
require 'openssl'
|
42
|
+
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
|
43
|
+
config.include FactoryGirl::Syntax::Methods
|
35
44
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'tengine/support/yaml_with_erb'
|
3
|
+
|
4
|
+
module AppGarden
|
5
|
+
CONFIG_PATH = File.expand_path("../../../../fontana_sample/config/app_garden.yml", __FILE__)
|
6
|
+
|
7
|
+
module_function
|
8
|
+
|
9
|
+
def config
|
10
|
+
@config ||= YAML.load_file(CONFIG_PATH)
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
|
2
|
+
# see https://github.com/tengine/fontana/pull/3
|
3
|
+
require 'httpclient'
|
4
|
+
def request_fixture_load(fixture_name)
|
5
|
+
c = HTTPClient.new
|
6
|
+
res = c.post("http://localhost:4000/libgss_test/fixture_loadings/#{fixture_name}.json", "_method" => "put")
|
7
|
+
raise "#{res.code} #{res.http_body.content}" unless res.code.to_s =~ /\A2\d\d\Z/
|
8
|
+
end
|
9
|
+
|
10
|
+
def fixtures(name)
|
11
|
+
before do
|
12
|
+
request_fixture_load(name)
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
def new_network(player_id = "1000001")
|
2
|
+
new_network_with_options({}, player_id)
|
3
|
+
end
|
4
|
+
|
5
|
+
def new_network_with_options(opts={}, player_id = "1000001")
|
6
|
+
config = YAML.load_file(File.expand_path("../../../../fontana_sample/config/app_garden.yml", __FILE__))
|
7
|
+
opts = {
|
8
|
+
device_type_cd: 1,
|
9
|
+
client_version: "2013073101",
|
10
|
+
consumer_secret: config["consumer_secret"],
|
11
|
+
player_id: player_id,
|
12
|
+
# ssl_disabled: true,
|
13
|
+
url: "http://localhost:4000",
|
14
|
+
}.update(opts)
|
15
|
+
url = opts.delete(:url)
|
16
|
+
Libgss::Network.new(url, opts)
|
17
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class AsyncAction
|
2
|
+
include Mongoid::Document
|
3
|
+
|
4
|
+
field :player_id, type: Moped::BSON::ObjectId
|
5
|
+
field :action_id , type: Object
|
6
|
+
field :request_url, type: String
|
7
|
+
field :request # anything
|
8
|
+
field :response # anything, can be null
|
9
|
+
field :attempts, type: Integer, default: 0
|
10
|
+
|
11
|
+
index({ player_id: 1, action_id: 1 }, { unique: true })
|
12
|
+
|
13
|
+
validates_presence_of :player_id
|
14
|
+
validates_presence_of :action_id
|
15
|
+
validates_presence_of :request_url
|
16
|
+
validates_presence_of :request
|
17
|
+
validates_uniqueness_of :action_id, scope: :player_id
|
18
|
+
|
19
|
+
Player # in order to find with ActiveSupport::Dependency
|
20
|
+
if defined? ::Player
|
21
|
+
belongs_to :player # for Rails Admin
|
22
|
+
class ::Player; has_many :async_actions end
|
23
|
+
else
|
24
|
+
raise "Player class not found!"
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
class ClientRelease
|
3
|
+
include Mongoid::Document
|
4
|
+
include Mongoid::Timestamps
|
5
|
+
# include Userstamps
|
6
|
+
# include SelectableAttr::Base
|
7
|
+
|
8
|
+
field :device_type_cd , type: Integer , label: "デバイス種別コード"
|
9
|
+
field :version , type: String , label: "クライアントバージョン"
|
10
|
+
field :status_cd , type: Integer, default: 0, label: "ステータス"
|
11
|
+
field :url , type: String , label: "ダウンロードページURL"
|
12
|
+
field :plan_released_at, type: Time , label: "予定リリース日時" # どこにも使われていません。メモ扱いです。
|
13
|
+
|
14
|
+
index({status_cd: 1, device_type_cd: 1, plan_released_at: -1})
|
15
|
+
|
16
|
+
validates :device_type_cd, presence: true
|
17
|
+
validates :version , presence: true
|
18
|
+
validates :status_cd , presence: true
|
19
|
+
# validates :url , presence: true
|
20
|
+
|
21
|
+
# selectable_attr :status_cd do
|
22
|
+
# entry 0, :develop , "開発中"
|
23
|
+
# entry 1, :ready , "リリース可能"
|
24
|
+
# entry 2, :enabled , "有効" # リリース済み
|
25
|
+
# entry 3, :disabled , "無効" # リリース済み
|
26
|
+
# end
|
27
|
+
|
28
|
+
class DeviceType
|
29
|
+
include Mongoid::Document
|
30
|
+
field :cd , type: Integer, label: "デバイス種別コード"
|
31
|
+
field :name, type: String , label: "デバイス種別名"
|
32
|
+
|
33
|
+
validates :cd , presence: true
|
34
|
+
validates :name, presence: true
|
35
|
+
|
36
|
+
# has_many :client_releases, class_name: "ClientRelease", foreign_key: "device_type_cd", inverse_of: "device_type"
|
37
|
+
|
38
|
+
DEFAULTS = [
|
39
|
+
{cd: 1, name: "iOS"}.freeze,
|
40
|
+
{cd: 2, name: "Android"}.freeze,
|
41
|
+
].freeze
|
42
|
+
|
43
|
+
class << self
|
44
|
+
def create_defaults
|
45
|
+
DEFAULTS.map{|attrs| ClientRelease::DeviceType.create!(attrs) }
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
# このファイルは生成されたファイルです。
|
4
|
+
#
|
5
|
+
# このモデルはテストデータの登録のためのものであり、実際のサーバ上での
|
6
|
+
# データの操作に使用されるモデルとは異なります。
|
7
|
+
#
|
8
|
+
# このモデルをテストデータの登録以外の目的で使用しないでください。
|
9
|
+
#
|
10
|
+
class GameData
|
11
|
+
include Mongoid::Document
|
12
|
+
|
13
|
+
include Mongoid::Timestamps::Created
|
14
|
+
include Mongoid::Timestamps::Updated
|
15
|
+
field :player_id, type: String, label: "プレイヤーID", default: nil
|
16
|
+
field :content, type: Hash, label: "内容", default: nil
|
17
|
+
field :greeting_points, type: Integer, label: "あいさつポイント", default: 0.0
|
18
|
+
field :login_bonus, type: Object, label: "ログインボーナス", default: nil
|
19
|
+
field :invitation_code, type: String, label: "招待コード", default: nil
|
20
|
+
field :invite_player, type: String, label: "招待プレイヤーID", default: nil
|
21
|
+
field :read_notifications, type: Object, label: "既読お知らせリスト", default: nil
|
22
|
+
field :created_at, type: ActiveSupport::TimeWithZone, label: "登録日時", default: nil
|
23
|
+
field :updated_at, type: ActiveSupport::TimeWithZone, label: "更新日時", default: nil
|
24
|
+
field :gender, type: Integer, label: "性別", default: 0.0
|
25
|
+
validates(:player_id, presence: true)
|
26
|
+
validates(:gender, presence: true)
|
27
|
+
index({"player_id"=>1}, :name => "主キー")
|
28
|
+
index({"invitation_code"=>1}, :name => "idx_invitation")
|
29
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
# このファイルは生成されたファイルです。
|
4
|
+
#
|
5
|
+
# このモデルはテストデータの登録のためのものであり、実際のサーバ上での
|
6
|
+
# データの操作に使用されるモデルとは異なります。
|
7
|
+
#
|
8
|
+
# このモデルをテストデータの登録以外の目的で使用しないでください。
|
9
|
+
#
|
10
|
+
class Player
|
11
|
+
include Mongoid::Document
|
12
|
+
|
13
|
+
include Mongoid::Timestamps::Created
|
14
|
+
include Mongoid::Timestamps::Updated
|
15
|
+
field :player_id, type: String, label: "プレイヤーID", default: nil
|
16
|
+
field :nickname, type: String, label: "ニックネーム", default: nil
|
17
|
+
field :level, type: Integer, label: "レベル", default: 1.0
|
18
|
+
field :authentication_token, type: String, label: "認証トークン", default: nil
|
19
|
+
field :signature_key, type: String, label: "署名キー", default: nil
|
20
|
+
field :pf_player_id, type: String, label: "プラットフォームプレイヤーID", default: nil
|
21
|
+
field :pf_player_info, type: Hash, label: "プラットフォームプレイヤー情報", default: nil
|
22
|
+
field :first_login_at, type: ActiveSupport::TimeWithZone, label: "初回ログイン日時", default: nil
|
23
|
+
field :current_login_at, type: ActiveSupport::TimeWithZone, label: "現在ログイン日時", default: nil
|
24
|
+
field :last_login_at, type: ActiveSupport::TimeWithZone, label: "最終ログイン日時", default: nil
|
25
|
+
field :first_paid_at, type: ActiveSupport::TimeWithZone, label: "初回課金日時", default: nil
|
26
|
+
field :last_paid_at, type: ActiveSupport::TimeWithZone, label: "最終課金日時", default: nil
|
27
|
+
field :login_days, type: Integer, label: "ログイン日数", default: 0.0
|
28
|
+
field :login_count_this_day, type: Integer, label: "当日ログイン回数", default: 0.0
|
29
|
+
field :continuous_login_days, type: Integer, label: "連続ログイン日数", default: 0.0
|
30
|
+
field :banned, type: Boolean, label: "アカウント停止フラグ", default: nil
|
31
|
+
field :created_at, type: ActiveSupport::TimeWithZone, label: "登録日時", default: nil
|
32
|
+
field :updated_at, type: ActiveSupport::TimeWithZone, label: "更新日時", default: nil
|
33
|
+
validates(:player_id, presence: true)
|
34
|
+
index({"player_id"=>1}, :name => "主キー")
|
35
|
+
index({"authentication_token"=>1}, :name => "idx_auth")
|
36
|
+
index({"pf_player_id"=>1}, :name => "idx_switch_login")
|
37
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: libgss
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- akima
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-09-
|
11
|
+
date: 2013-09-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,6 +52,48 @@ dependencies:
|
|
52
52
|
- - '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: fontana_client_support
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: mongoid
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: factory_girl
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
55
97
|
- !ruby/object:Gem::Dependency
|
56
98
|
name: httpclient
|
57
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -152,6 +194,11 @@ files:
|
|
152
194
|
- lib/libgss/outputs.rb
|
153
195
|
- lib/libgss/version.rb
|
154
196
|
- libgss.gemspec
|
197
|
+
- spec/factories/async_action.rb
|
198
|
+
- spec/factories/client_release.rb
|
199
|
+
- spec/factories/device_type.rb
|
200
|
+
- spec/factories/game_data.rb
|
201
|
+
- spec/factories/player.rb
|
155
202
|
- spec/libgss/action_request_spec.rb
|
156
203
|
- spec/libgss/actions/dictionary_spec.rb
|
157
204
|
- spec/libgss/actions/friendship_spec.rb
|
@@ -168,6 +215,13 @@ files:
|
|
168
215
|
- spec/protected_assets/Icon.png
|
169
216
|
- spec/public_assets/Default.png
|
170
217
|
- spec/spec_helper.rb
|
218
|
+
- spec/support/auto/app_garden.rb
|
219
|
+
- spec/support/auto/fixtures.rb
|
220
|
+
- spec/support/auto/network.rb
|
221
|
+
- spec/support/models/async_action.rb
|
222
|
+
- spec/support/models/client_release.rb
|
223
|
+
- spec/support/models/game_data.rb
|
224
|
+
- spec/support/models/player.rb
|
171
225
|
homepage: http://www.groovenauts.jp/service/#gss
|
172
226
|
licenses:
|
173
227
|
- MIT
|
@@ -193,6 +247,11 @@ signing_key:
|
|
193
247
|
specification_version: 4
|
194
248
|
summary: network library for Groovenauts GSS
|
195
249
|
test_files:
|
250
|
+
- spec/factories/async_action.rb
|
251
|
+
- spec/factories/client_release.rb
|
252
|
+
- spec/factories/device_type.rb
|
253
|
+
- spec/factories/game_data.rb
|
254
|
+
- spec/factories/player.rb
|
196
255
|
- spec/libgss/action_request_spec.rb
|
197
256
|
- spec/libgss/actions/dictionary_spec.rb
|
198
257
|
- spec/libgss/actions/friendship_spec.rb
|
@@ -209,4 +268,11 @@ test_files:
|
|
209
268
|
- spec/protected_assets/Icon.png
|
210
269
|
- spec/public_assets/Default.png
|
211
270
|
- spec/spec_helper.rb
|
271
|
+
- spec/support/auto/app_garden.rb
|
272
|
+
- spec/support/auto/fixtures.rb
|
273
|
+
- spec/support/auto/network.rb
|
274
|
+
- spec/support/models/async_action.rb
|
275
|
+
- spec/support/models/client_release.rb
|
276
|
+
- spec/support/models/game_data.rb
|
277
|
+
- spec/support/models/player.rb
|
212
278
|
has_rdoc:
|