mrpin-sdk 0.3.141 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +47 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +65 -0
  6. data/Rakefile +1 -0
  7. data/app/assets/stylesheets/mrpin/sign_in.css +32 -0
  8. data/app/assets/stylesheets/mrpin.css.scss +3 -0
  9. data/app/views/devise/sessions/new.html.erb +16 -0
  10. data/app/views/layouts/devise.html.erb +12 -0
  11. data/lib/mrpin/all_files.rb +48 -0
  12. data/lib/mrpin/api/base/api_object.rb +48 -0
  13. data/lib/mrpin/api/base/handler_base.rb +86 -0
  14. data/lib/mrpin/api/base/request_base.rb +15 -0
  15. data/lib/mrpin/api/base/response_base.rb +29 -0
  16. data/lib/mrpin/api/bundles/init/handler_bundles_init.rb +36 -0
  17. data/lib/mrpin/api/bundles/init/request_bundles_init.rb +7 -0
  18. data/lib/mrpin/api/bundles/init/response_bundles_init.rb +5 -0
  19. data/lib/mrpin/api/packs/requests_pack.rb +38 -0
  20. data/lib/mrpin/api/packs/responses_pack.rb +38 -0
  21. data/lib/mrpin/api/platform/base/handler_platform_base.rb +26 -0
  22. data/lib/mrpin/api/platform/base/request_platform_base.rb +54 -0
  23. data/lib/mrpin/api/platform/report/handler_report_error.rb +74 -0
  24. data/lib/mrpin/api/platform/report/request_report_error.rb +20 -0
  25. data/lib/mrpin/api/standard/response_error.rb +19 -0
  26. data/lib/mrpin/api/standard/response_ok.rb +18 -0
  27. data/lib/mrpin/api/standard/response_session_end.rb +21 -0
  28. data/lib/mrpin/api/standard/response_with_url_data.rb +7 -0
  29. data/lib/mrpin/api/system/echo/handler_system_echo.rb +25 -0
  30. data/lib/mrpin/api/system/echo/request_system_echo.rb +19 -0
  31. data/lib/mrpin/config/initializers/00_carrier_wave.rb +4 -0
  32. data/lib/mrpin/config/initializers/01_devise.rb +264 -0
  33. data/lib/mrpin/config/initializers/02_mongo.rb +2 -0
  34. data/lib/mrpin/config/initializers/03_i18n.rb +3 -0
  35. data/lib/mrpin/config/initializers.rb +7 -0
  36. data/lib/mrpin/config/locales/rails_admin.en.yml +10 -0
  37. data/lib/mrpin/controllers/application_controller_base.rb +14 -0
  38. data/lib/mrpin/controllers/system_controller_base.rb +222 -0
  39. data/lib/mrpin/core/admin/admin_user.rb +39 -0
  40. data/lib/mrpin/core/admin/e_admin_user_role.rb +4 -0
  41. data/lib/mrpin/core/app_config_base.rb +48 -0
  42. data/lib/mrpin/core/app_info/app_info_base.rb +413 -0
  43. data/lib/mrpin/core/app_info/e_app_state.rb +13 -0
  44. data/lib/mrpin/core/base/amf_serializable.rb +16 -0
  45. data/lib/mrpin/core/base/enum_base.rb +12 -0
  46. data/lib/mrpin/core/base/info_base.rb +18 -0
  47. data/lib/mrpin/core/base/manager_base.rb +74 -0
  48. data/lib/mrpin/core/base/manager_with_json_data.rb +98 -0
  49. data/lib/mrpin/core/base/model_base.rb +219 -0
  50. data/lib/mrpin/core/bundles/bundle_base.rb +197 -0
  51. data/lib/mrpin/core/bundles/bundle_info_base.rb +29 -0
  52. data/lib/mrpin/core/bundles/e_build_type.rb +7 -0
  53. data/lib/mrpin/core/bundles/manager_bundles_base.rb +56 -0
  54. data/lib/mrpin/core/constants/constants_remote.rb +14 -0
  55. data/lib/mrpin/core/currency_exchanger/base/exchanger_base.rb +21 -0
  56. data/lib/mrpin/core/currency_exchanger/currency_exchanger.rb +40 -0
  57. data/lib/mrpin/core/currency_exchanger/e_currency_type.rb +8 -0
  58. data/lib/mrpin/core/currency_exchanger/fixer/exchanger_fixer.rb +40 -0
  59. data/lib/mrpin/core/currency_exchanger/local/exchanger_local.rb +23 -0
  60. data/lib/mrpin/core/currency_exchanger/yahoo/exchanger_yahoo.rb +34 -0
  61. data/lib/mrpin/core/exceptions/assertion_error.rb +3 -0
  62. data/lib/mrpin/core/extensions/hash.rb +25 -0
  63. data/lib/mrpin/core/extensions/mongoid_id_alias.rb +7 -0
  64. data/lib/mrpin/core/extensions/object.rb +57 -0
  65. data/lib/mrpin/core/extensions/thread.rb +23 -0
  66. data/lib/mrpin/core/extensions/time.rb +5 -0
  67. data/lib/mrpin/core/logger/logger_sdk.rb +14 -0
  68. data/lib/mrpin/core/platform/e_platform_type.rb +14 -0
  69. data/lib/mrpin/core/player/e_player_role.rb +7 -0
  70. data/lib/mrpin/core/player/e_sex_type.rb +7 -0
  71. data/lib/mrpin/core/player/player_statistic_base.rb +50 -0
  72. data/lib/mrpin/core/purchase/e_sale_type.rb +7 -0
  73. data/lib/mrpin/core/remote/e_response_type.rb +4 -0
  74. data/lib/mrpin/core/remote/http/manager_remote_http.rb +107 -0
  75. data/lib/mrpin/core/remote/socket/base/extensions/manager_remote_socket_api.rb +43 -0
  76. data/lib/mrpin/core/remote/socket/base/extensions/manager_remote_socket_disconnect.rb +69 -0
  77. data/lib/mrpin/core/remote/socket/base/extensions/manager_remote_socket_handle.rb +155 -0
  78. data/lib/mrpin/core/remote/socket/base/extensions/manager_remote_socket_sessions.rb +41 -0
  79. data/lib/mrpin/core/remote/socket/base/extensions/manager_remote_socket_statistic.rb +41 -0
  80. data/lib/mrpin/core/remote/socket/base/extensions/network_interface_helper.rb +53 -0
  81. data/lib/mrpin/core/remote/socket/base/manager_remote_socket_base.rb +131 -0
  82. data/lib/mrpin/core/remote/socket/base/socket_client_base.rb +181 -0
  83. data/lib/mrpin/core/remote/socket/base/socket_client_crossdomain.rb +33 -0
  84. data/lib/mrpin/core/remote/socket/flash/manager_remote_socket_flash.rb +51 -0
  85. data/lib/mrpin/core/remote/socket/flash/socket_client_flash.rb +21 -0
  86. data/lib/mrpin/core/remote/socket/unity/manager_remote_socket_unity.rb +58 -0
  87. data/lib/mrpin/core/remote/socket/unity/socket_client_unity.rb +19 -0
  88. data/lib/mrpin/core/remote/socket/websocket/manager_remote_web_sockets.rb +101 -0
  89. data/lib/mrpin/core/remote/socket/websocket/socket_client_web_sockets.rb +129 -0
  90. data/lib/mrpin/core/remote/socket/with_policy/socket_client_with_policy.rb +66 -0
  91. data/lib/mrpin/core/review.rb +231 -0
  92. data/lib/mrpin/core/scheduler/manager_scheduler.rb +66 -0
  93. data/lib/mrpin/core/statistic/error_client_base.rb +136 -0
  94. data/lib/mrpin/core/statistic/error_server_base.rb +93 -0
  95. data/lib/mrpin/core/statistic/manager_statistics_base.rb +221 -0
  96. data/lib/mrpin/core/statistic/statistic_application_base.rb +88 -0
  97. data/lib/mrpin/core/statistic/statistic_config_base.rb +38 -0
  98. data/lib/mrpin/core/statistic/system_handler_profiler.rb +85 -0
  99. data/lib/mrpin/core/string/e_language_type.rb +29 -0
  100. data/lib/mrpin/core/string/e_string_type_base.rb +14 -0
  101. data/lib/mrpin/core/string/localization_base.rb +77 -0
  102. data/lib/mrpin/core/string/localization_base_map.rb +303 -0
  103. data/lib/mrpin/core/string/manager_string_base.rb +159 -0
  104. data/lib/mrpin/core/threads/thread_with_task.rb +62 -0
  105. data/lib/mrpin/core/uploaders/aws/aws_file_info.rb +16 -0
  106. data/lib/mrpin/core/uploaders/aws/aws_uploader.rb +229 -0
  107. data/lib/mrpin/core/uploaders/carrierwave/file_uploader.rb +7 -0
  108. data/lib/mrpin/core/uploaders/carrierwave/file_uploader_helpers_base.rb +66 -0
  109. data/lib/mrpin/core/uploaders/carrierwave/file_uploader_helpers_local.rb +111 -0
  110. data/lib/mrpin/core/uploaders/carrierwave/file_uploader_helpers_s3.rb +87 -0
  111. data/lib/mrpin/core/uploaders/carrierwave/zip_uploader.rb +10 -0
  112. data/lib/mrpin/core/utils/mongo.rb +41 -0
  113. data/lib/mrpin/core/utils/sorter_base.rb +344 -0
  114. data/lib/mrpin/core/utils/utils_io.rb +27 -0
  115. data/lib/mrpin/core/utils/utils_string.rb +17 -0
  116. data/lib/mrpin/core/utils/utils_zip.rb +58 -0
  117. data/lib/mrpin/libs/rails_admin/localization.rb +70 -0
  118. data/lib/mrpin/libs.rb +11 -0
  119. data/lib/mrpin/rails/engine.rb +11 -0
  120. data/lib/mrpin/vendors.rb +19 -0
  121. data/lib/mrpin/version.rb +3 -0
  122. data/lib/mrpin-sdk.rb +6 -0
  123. data/mrpin-sdk.gemspec +54 -0
  124. metadata +163 -96
@@ -0,0 +1,51 @@
1
+ class ManagerRemoteSocketFlash < ManagerRemoteSocketBase
2
+
3
+
4
+ #
5
+ # Properties
6
+ #
7
+
8
+ protected
9
+ def server_type
10
+ 'flash'
11
+ end
12
+
13
+ #
14
+ # Events
15
+ #
16
+
17
+ public
18
+ def on_client_request_policy(session)
19
+ session.send_data(@policy)
20
+ session.close_connection_after_writing
21
+ end
22
+
23
+ #
24
+ # Methods
25
+ #
26
+
27
+ # default constructor
28
+ def initialize
29
+ super
30
+
31
+ @policy = File.open('public/crossdomain.xml', 'rb').read
32
+ end
33
+
34
+ protected
35
+ def try_handle_request(session, request)
36
+
37
+ check_request_class(request)
38
+
39
+ super
40
+ end
41
+
42
+ public
43
+ def start!(callback = nil)
44
+ super
45
+
46
+ start_server_on_port(Constants::REMOTE_PORT_FLASH, SocketClientFlash, callback)
47
+
48
+ start_server_on_port(Constants::REMOTE_PORT_FLASH_CROSSDOMAIN, SocketClientCrossdomain, false)
49
+ end
50
+
51
+ end
@@ -0,0 +1,21 @@
1
+ class SocketClientFlash < SocketClientBase
2
+
3
+ #
4
+ # Properties
5
+ #
6
+
7
+ #
8
+ # Events
9
+ #
10
+
11
+ #
12
+ # Methods
13
+ #
14
+ public
15
+ def post_init
16
+ super
17
+
18
+ @policy_regexp = /^<policy-file-request\/>/ #full request is <policy-file-request/>
19
+ end
20
+
21
+ end
@@ -0,0 +1,58 @@
1
+ class ManagerRemoteSocketUnity < ManagerRemoteSocketBase
2
+
3
+
4
+ #
5
+ # Properties
6
+ #
7
+
8
+ protected
9
+ def class_client
10
+ SocketClientUnity
11
+ end
12
+
13
+ protected
14
+ def server_type
15
+ 'unity'
16
+ end
17
+
18
+ #
19
+ # Events
20
+ #
21
+
22
+ public
23
+ def on_client_request_policy(session)
24
+ session.send_data(@policy)
25
+ session.close_connection_after_writing
26
+ end
27
+
28
+ #
29
+ # Methods
30
+ #
31
+
32
+ # default constructor
33
+ def initialize
34
+ super
35
+
36
+ @policy = File.open('public/crossdomain.xml', 'rb').read
37
+ end
38
+
39
+ protected
40
+ def try_handle_request(session, request)
41
+
42
+ check_request_class(request)
43
+
44
+ super
45
+ end
46
+
47
+ public
48
+ def start!(callback = nil)
49
+ super
50
+
51
+ start_server_on_port(Constants::REMOTE_PORT_UNITY, self.class_client, callback)
52
+
53
+ start_server_on_port(Constants::REMOTE_PORT_UNITY_CROSSDOMAIN, SocketClientCrossdomain, false)
54
+
55
+ nil
56
+ end
57
+
58
+ end
@@ -0,0 +1,19 @@
1
+ class SocketClientUnity < SocketClientBase
2
+
3
+ #
4
+ # Properties
5
+ #
6
+
7
+ #
8
+ # Methods
9
+ #
10
+
11
+ # default constructor
12
+ public
13
+ def post_init
14
+ super
15
+
16
+ @policy_regexp = /^<policy-file-request\/>/ #full request is <policy-file-request/>
17
+ end
18
+
19
+ end
@@ -0,0 +1,101 @@
1
+ class ManagerRemoteWebSockets < ManagerRemoteSocketBase
2
+
3
+ #
4
+ # properties
5
+ #
6
+
7
+ protected
8
+ def server_type
9
+ 'websocket'
10
+ end
11
+
12
+ #
13
+ # methods
14
+ #
15
+
16
+ public
17
+ def initialize
18
+ super
19
+
20
+ @class_client = @class_client || SocketClientWebSockets
21
+
22
+ @class_client.manager_remote = self
23
+ end
24
+
25
+
26
+ public
27
+ def start!(callback = nil)
28
+
29
+ path_private_key = ENV['SERVER_PRIVATE_KEY']
30
+ path_certificate = ENV['SERVER_CERTIFICATE']
31
+
32
+ @port = Constants::REMOTE_PORT_WEBSOCKET
33
+
34
+ start_server(@port, nil, callback)
35
+
36
+ if !path_private_key.nil? && !path_certificate.nil?
37
+ tls_options =
38
+ {
39
+ private_key_file: path_private_key,
40
+ cert_chain_file: path_certificate,
41
+ }
42
+
43
+ @logger.info 'try start secure websocket server'
44
+
45
+ @port_secure = Constants::REMOTE_PORT_WEBSOCKET_SECURE
46
+
47
+ start_server(@port_secure, tls_options, callback)
48
+ end
49
+
50
+ nil
51
+ end
52
+
53
+ private
54
+ def start_server(port, tls_options = nil, callback = nil)
55
+ host = '0.0.0.0'
56
+
57
+ thread = Thread.new do
58
+ begin
59
+
60
+ EM.run do
61
+
62
+ begin
63
+
64
+ params =
65
+ {
66
+ host: host,
67
+ port: port
68
+ }
69
+
70
+ unless tls_options.nil?
71
+ params[:secure] = true
72
+ params[:tls_options] = tls_options
73
+ end
74
+
75
+ EM::WebSocket.run(params) do |websocket|
76
+ client = @class_client.new(websocket)
77
+ client.websocket = websocket
78
+ end
79
+
80
+ @logger.info "server #{self.server_type}\tstarted on #{host}:#{port}"
81
+
82
+ callback.call unless callback.nil?
83
+
84
+ rescue Exception => e
85
+ AppInfo.instance.on_server_error(e.to_s, e)
86
+ end
87
+ end
88
+ rescue Exception => e
89
+ message = "ATTENTION! error on web socket server #{host}:#{port} thread. Server is secure: #{!tls_options.nil?}. Error: #{e}"
90
+
91
+ AppInfo.instance.on_server_error(message, e)
92
+
93
+ end
94
+ end
95
+
96
+ thread.name = "thread_remote_server_#{host}:#{port}"
97
+
98
+ nil
99
+ end
100
+
101
+ end
@@ -0,0 +1,129 @@
1
+ class SocketClientWebSockets < SocketClientBase
2
+
3
+ #
4
+ # events
5
+ #
6
+
7
+
8
+ # Access properties on the EM::WebSocket::Handshake object, e.g.
9
+ # path, query_string, origin, headers
10
+ protected
11
+ def on_connection_open(handshake)
12
+ end
13
+
14
+ protected
15
+ def on_connection_closed
16
+ @is_online = false
17
+
18
+ unless @player.nil?
19
+ AppInfo.instance.manager_players.on_player_disconnected(@player)
20
+ end
21
+
22
+ @manager_remote.on_client_disconnected(self) unless @manager_remote.nil?
23
+ end
24
+
25
+ protected
26
+ def on_error(e)
27
+ AppInfo.instance.on_server_error(e.to_s, e)
28
+ end
29
+
30
+ #
31
+ # properties
32
+ #
33
+
34
+ public
35
+ attr_accessor :player
36
+
37
+ public
38
+ def websocket=(value)
39
+ @websocket = value
40
+
41
+ init_ip_internal(@websocket.get_peername)
42
+
43
+ @websocket.onopen do |handshake|
44
+ begin
45
+ on_connection_open(handshake)
46
+ rescue Exception => e
47
+ on_error(e)
48
+ end
49
+ end
50
+
51
+ @websocket.onclose do
52
+ begin
53
+ on_connection_closed
54
+ rescue Exception => e
55
+ on_error(e)
56
+ end
57
+ end
58
+
59
+ @websocket.onmessage do |data|
60
+ begin
61
+ receive_data(data)
62
+ rescue Exception => e
63
+ on_error(e)
64
+ end
65
+ end
66
+
67
+ @websocket.onbinary do |data|
68
+ begin
69
+ receive_data(data)
70
+ rescue Exception => e
71
+ on_error(e)
72
+ end
73
+ end
74
+ end
75
+
76
+ #
77
+ # methods
78
+ #
79
+
80
+ # default constructor
81
+ public
82
+ def post_init
83
+ super
84
+ end
85
+
86
+ protected
87
+ def init_ip
88
+ #do nothing
89
+ end
90
+
91
+ public
92
+ def send_response(response_obj)
93
+ return unless @is_online
94
+
95
+ report_about_sent_request(response_obj)
96
+
97
+ response = AMF::Root.serialize(response_obj)
98
+
99
+ try_send_binary(response)
100
+
101
+ nil #for prevent return other value
102
+ end
103
+
104
+ public
105
+ def send_raw_data(response)
106
+ try_send_binary(response)
107
+
108
+ nil
109
+ end
110
+
111
+ public
112
+ def close_connection_after_writing
113
+ @websocket.close_connection_after_writing
114
+ end
115
+
116
+ private
117
+ def try_send_binary(response)
118
+ return unless @is_online
119
+
120
+ begin
121
+ @websocket.send_binary(response)
122
+ rescue
123
+ #do nothing
124
+ end
125
+
126
+ nil
127
+ end
128
+
129
+ end
@@ -0,0 +1,66 @@
1
+ class SocketClientWithPolicy
2
+
3
+ #
4
+ # properties
5
+ #
6
+
7
+ #
8
+ # methods
9
+ #
10
+
11
+ public
12
+ def initialize
13
+ @policy_was_sent = false
14
+
15
+ @policy_regexp = '<policy_request_stub>'
16
+ end
17
+
18
+ public
19
+ def get_requests
20
+ result = []
21
+
22
+ return result unless @is_online
23
+
24
+ @requests_locker.synchronize do
25
+ begin
26
+
27
+ unless @data_buffer.empty?
28
+
29
+ deserialize_data = AMF::Root.deserialize(@data_buffer)
30
+ result = deserialize_data[:objects]
31
+ @data_buffer = deserialize_data[:incomplete_objects] || ''
32
+
33
+ if result.empty?
34
+ try_send_policy
35
+ elsif !@policy_was_sent
36
+ @policy_was_sent = true
37
+ end
38
+ end
39
+
40
+ rescue Exception => e
41
+ on_get_requests_error(e)
42
+ end #begin/rescue
43
+ end #synchronize
44
+
45
+ result
46
+ end
47
+
48
+
49
+
50
+ protected
51
+ def try_send_policy
52
+ #do nothing
53
+ return if @policy_was_sent
54
+
55
+ unless @policy_regexp.match(@data_buffer).nil?
56
+ @manager_remote.on_client_request_policy(self) unless @manager_remote.nil?
57
+
58
+ @data_buffer = ''
59
+
60
+ @policy_was_sent = true
61
+ end
62
+
63
+ nil
64
+ end
65
+
66
+ end
@@ -0,0 +1,231 @@
1
+ # [].sort! { |a, b| a.number <=> b.number }
2
+ # online_days_in_a_row.modulo(@daily_bonuses_count)
3
+ # Time.now.utc.midnight.to_i
4
+ # player.friends_ids_new.any?
5
+ #
6
+ #
7
+ # private
8
+ # def save_bonus_received_time(player_id, bonus_id, last_received_at)
9
+ # filter =
10
+ # {
11
+ # player_id: player_id,
12
+ # bonus_id: bonus_id
13
+ # }
14
+ #
15
+ # document =
16
+ # {
17
+ # '$setOnInsert' => {player_id: player_id, bonus_id: bonus_id},
18
+ # '$set' => {last_received_at: last_received_at}
19
+ # }
20
+ #
21
+ # options =
22
+ # {
23
+ # upsert: true
24
+ # }
25
+ #
26
+ # @class_player_bonus.collection.find_one_and_update(filter, document, options)
27
+ # end
28
+ #
29
+ #
30
+ #
31
+ # @class_player_bonus.where(:bonus_id.nin => @auto_claim_bonuses_ids, :last_received_at.lt => time_limit).delete_all
32
+ #
33
+ # public
34
+ # def self.configure_admin_list(section, field_name)
35
+ #
36
+ # case field_name
37
+ # when :number
38
+ # section.configure field_name do
39
+ # visible false
40
+ # column_width 60
41
+ # end
42
+ # end
43
+ #
44
+ # end
45
+ #
46
+ # #edit
47
+ # section.configure field_name do
48
+ # read_only true
49
+ # help 'Required. Please choose icon file'
50
+ # end
51
+ #
52
+ # #callbacks
53
+ # after_validation :show_criteria_base_errors
54
+ #
55
+ #
56
+ #
57
+ # public
58
+ # def self.filters_for_admin_list(section)
59
+ # section.filters [:_id]
60
+ # end
61
+ #
62
+ # # convert to hash
63
+ # Hash[level_progress_default]
64
+ #
65
+ #
66
+ # notification.update_attributes(enable: false)
67
+ #
68
+ #
69
+ # players_ids_for_send_online = @class_player.where(:id.in => players_ids, :online_days_total.lt => ONLINE_NOTIFICATIONS_SEND_FIRST_DAYS).distinct(:id)
70
+ #
71
+ #
72
+ # private
73
+ # def create_player_notifications(notification_type, players_ids, send_at)
74
+ #
75
+ # notification_time = get_notification_time(send_at)
76
+ #
77
+ # filter =
78
+ # {
79
+ # notification_type: notification_type,
80
+ # send_at: notification_time
81
+ # }
82
+ #
83
+ # document =
84
+ # {
85
+ # '$setOnInsert' => {notification_type: notification_type, send_at: notification_time},
86
+ # '$push' =>
87
+ # {
88
+ # players_ids:
89
+ # {
90
+ # '$each' => players_ids
91
+ # }
92
+ # }
93
+ # }
94
+ #
95
+ # options = {upsert: true}
96
+ #
97
+ # # Update an existing document, otherwise create one.
98
+ # @class_notification_player.collection.find_one_and_update(filter, document, options)
99
+ # end
100
+ #
101
+ #
102
+ # private
103
+ # def delete_player_notifications(notification_type, players_ids)
104
+ # @class_notification_player.where(:notification_type => notification_type,
105
+ # :players_ids.in => players_ids).update_all('$pullAll' => {players_ids: players_ids})
106
+ # end
107
+ #
108
+ #
109
+ # private
110
+ # def get_notification_time(time)
111
+ # if time.min < 30
112
+ # time.utc.beginning_of_hour.to_i
113
+ # else
114
+ # (time + 1.hour).beginning_of_hour.to_i
115
+ # end
116
+ # end
117
+ #
118
+ # next if criterion.flagged_for_destroy?
119
+ #
120
+ # unless criterion.errors[:base].nil? || criterion.errors[:base].empty?
121
+ # errors.add(:base, "Error Criteria: #{criterion.errors[:base]}")
122
+ # end
123
+ #
124
+ # player_offers = @class_player_offer.without(:player_id).where(:player_id => player.id,
125
+ # :expires_at.gt => time_now_i,
126
+ # :purchases_left.gt => 0).to_a
127
+ #
128
+ # document =
129
+ # {
130
+ # '$setOnInsert' => {player_id: player.id},
131
+ # '$push' => {offer_ids: offer_id}
132
+ # }
133
+ #
134
+ # options = {upsert: true}
135
+ #
136
+ # # Update an existing document, otherwise create one.
137
+ # @class_player_offers_list.collection.find_one_and_update(filter, document, options)
138
+ #
139
+ #
140
+ #
141
+ # when :platforms
142
+ # section.configure field_name do
143
+ #
144
+ # pretty_value do
145
+ #
146
+ # platforms = bindings[:object].platforms
147
+ #
148
+ # result = []
149
+ #
150
+ # platforms.each do |platform, platform_id|
151
+ #
152
+ # link_text = "#{platform.upcase}: #{platform_id}"
153
+ #
154
+ # case platform
155
+ #
156
+ # when EPlatformType::EPT_VK
157
+ #
158
+ # result << bindings[:view].link_to(link_text, "https://vk.com/id#{platform_id}".html_safe)
159
+ #
160
+ # when EPlatformType::EPT_OK
161
+ #
162
+ # result << bindings[:view].link_to(link_text, "http://ok.ru/profile/#{platform_id}".html_safe)
163
+ #
164
+ # when EPlatformType::EPT_FB
165
+ #
166
+ # result << bindings[:view].link_to(link_text, "http://facebook.com/#{platform_id}".html_safe)
167
+ #
168
+ # when EPlatformType::EPT_MM #not supported
169
+ #
170
+ # result << link_text
171
+ #
172
+ # when EPlatformType::EPT_MAMBA
173
+ #
174
+ # result << bindings[:view].link_to(link_text, "http://mamba.ru/mb#{platform_id}".html_safe)
175
+ #
176
+ # when EPlatformType::EPT_FS #todo:finish
177
+ #
178
+ # result << bindings[:view].link_to(link_text, "http://fotostrana.ru/#{platform_id}".html_safe)
179
+ #
180
+ # else
181
+ # result << link_text
182
+ # end
183
+ # end
184
+ #
185
+ # result.join('<br>').html_safe
186
+ # end
187
+ # end
188
+ #
189
+ #
190
+ # when :friends_ids
191
+ # section.configure field_name do
192
+ #
193
+ # pretty_value do
194
+ #
195
+ # friends_ids = bindings[:object].friends_ids
196
+ #
197
+ # result = []
198
+ #
199
+ # friends_ids.each do |player_id|
200
+ #
201
+ # link_url = bindings[:view].rails_admin.show_path(model_name: CLASS_MAP[EClassType::ECT_PLAYER], id: player_id)
202
+ #
203
+ # result << bindings[:view].link_to(player_id, link_url)
204
+ #
205
+ # end
206
+ #
207
+ # result.join('<br>').html_safe
208
+ # end
209
+ # end
210
+ #
211
+ #
212
+ # routes = ["# mrpin-sdk routes START"]
213
+ #
214
+ # routes << "devise_for :admin_users\n"
215
+ #
216
+ # routes << "mount RailsAdmin::Engine => '/admin', as: 'rails_admin'\n"
217
+ #
218
+ # routes << "root :to => 'rails_admin/main#dashboard'\n"
219
+ #
220
+ # routes << "match '/system/info' => 'system#info', via: [:get, :post]"
221
+ # routes << "match '/system/info/gc_stat' => 'system#gc_stat', via: [:get, :post]"
222
+ # routes << "match '/system/invalidate_cache' => 'system#invalidate_cache', via: [:get, :post]"
223
+ # routes << "match '/system/send_notifications' => 'system#send_notifications', via: [:get, :post]"
224
+ # routes << "match '/system/cleanup_data' => 'system#cleanup_data', via: [:get, :post]"
225
+ # routes << "match '/system/downloads/:type' => 'system#download', via: [:get, :post]"
226
+ #
227
+ # routes << "# mrpin-sdk routes END\n"
228
+ #
229
+ # route routes.join("\n ")
230
+ #
231
+ # @class_player.where(:friends_ids.in => deleted_player_ids).update_all('$pullAll' => {friends_ids: deleted_player_ids})