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.
- checksums.yaml +4 -4
- data/.gitignore +47 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +65 -0
- data/Rakefile +1 -0
- data/app/assets/stylesheets/mrpin/sign_in.css +32 -0
- data/app/assets/stylesheets/mrpin.css.scss +3 -0
- data/app/views/devise/sessions/new.html.erb +16 -0
- data/app/views/layouts/devise.html.erb +12 -0
- data/lib/mrpin/all_files.rb +48 -0
- data/lib/mrpin/api/base/api_object.rb +48 -0
- data/lib/mrpin/api/base/handler_base.rb +86 -0
- data/lib/mrpin/api/base/request_base.rb +15 -0
- data/lib/mrpin/api/base/response_base.rb +29 -0
- data/lib/mrpin/api/bundles/init/handler_bundles_init.rb +36 -0
- data/lib/mrpin/api/bundles/init/request_bundles_init.rb +7 -0
- data/lib/mrpin/api/bundles/init/response_bundles_init.rb +5 -0
- data/lib/mrpin/api/packs/requests_pack.rb +38 -0
- data/lib/mrpin/api/packs/responses_pack.rb +38 -0
- data/lib/mrpin/api/platform/base/handler_platform_base.rb +26 -0
- data/lib/mrpin/api/platform/base/request_platform_base.rb +54 -0
- data/lib/mrpin/api/platform/report/handler_report_error.rb +74 -0
- data/lib/mrpin/api/platform/report/request_report_error.rb +20 -0
- data/lib/mrpin/api/standard/response_error.rb +19 -0
- data/lib/mrpin/api/standard/response_ok.rb +18 -0
- data/lib/mrpin/api/standard/response_session_end.rb +21 -0
- data/lib/mrpin/api/standard/response_with_url_data.rb +7 -0
- data/lib/mrpin/api/system/echo/handler_system_echo.rb +25 -0
- data/lib/mrpin/api/system/echo/request_system_echo.rb +19 -0
- data/lib/mrpin/config/initializers/00_carrier_wave.rb +4 -0
- data/lib/mrpin/config/initializers/01_devise.rb +264 -0
- data/lib/mrpin/config/initializers/02_mongo.rb +2 -0
- data/lib/mrpin/config/initializers/03_i18n.rb +3 -0
- data/lib/mrpin/config/initializers.rb +7 -0
- data/lib/mrpin/config/locales/rails_admin.en.yml +10 -0
- data/lib/mrpin/controllers/application_controller_base.rb +14 -0
- data/lib/mrpin/controllers/system_controller_base.rb +222 -0
- data/lib/mrpin/core/admin/admin_user.rb +39 -0
- data/lib/mrpin/core/admin/e_admin_user_role.rb +4 -0
- data/lib/mrpin/core/app_config_base.rb +48 -0
- data/lib/mrpin/core/app_info/app_info_base.rb +413 -0
- data/lib/mrpin/core/app_info/e_app_state.rb +13 -0
- data/lib/mrpin/core/base/amf_serializable.rb +16 -0
- data/lib/mrpin/core/base/enum_base.rb +12 -0
- data/lib/mrpin/core/base/info_base.rb +18 -0
- data/lib/mrpin/core/base/manager_base.rb +74 -0
- data/lib/mrpin/core/base/manager_with_json_data.rb +98 -0
- data/lib/mrpin/core/base/model_base.rb +219 -0
- data/lib/mrpin/core/bundles/bundle_base.rb +197 -0
- data/lib/mrpin/core/bundles/bundle_info_base.rb +29 -0
- data/lib/mrpin/core/bundles/e_build_type.rb +7 -0
- data/lib/mrpin/core/bundles/manager_bundles_base.rb +56 -0
- data/lib/mrpin/core/constants/constants_remote.rb +14 -0
- data/lib/mrpin/core/currency_exchanger/base/exchanger_base.rb +21 -0
- data/lib/mrpin/core/currency_exchanger/currency_exchanger.rb +40 -0
- data/lib/mrpin/core/currency_exchanger/e_currency_type.rb +8 -0
- data/lib/mrpin/core/currency_exchanger/fixer/exchanger_fixer.rb +40 -0
- data/lib/mrpin/core/currency_exchanger/local/exchanger_local.rb +23 -0
- data/lib/mrpin/core/currency_exchanger/yahoo/exchanger_yahoo.rb +34 -0
- data/lib/mrpin/core/exceptions/assertion_error.rb +3 -0
- data/lib/mrpin/core/extensions/hash.rb +25 -0
- data/lib/mrpin/core/extensions/mongoid_id_alias.rb +7 -0
- data/lib/mrpin/core/extensions/object.rb +57 -0
- data/lib/mrpin/core/extensions/thread.rb +23 -0
- data/lib/mrpin/core/extensions/time.rb +5 -0
- data/lib/mrpin/core/logger/logger_sdk.rb +14 -0
- data/lib/mrpin/core/platform/e_platform_type.rb +14 -0
- data/lib/mrpin/core/player/e_player_role.rb +7 -0
- data/lib/mrpin/core/player/e_sex_type.rb +7 -0
- data/lib/mrpin/core/player/player_statistic_base.rb +50 -0
- data/lib/mrpin/core/purchase/e_sale_type.rb +7 -0
- data/lib/mrpin/core/remote/e_response_type.rb +4 -0
- data/lib/mrpin/core/remote/http/manager_remote_http.rb +107 -0
- data/lib/mrpin/core/remote/socket/base/extensions/manager_remote_socket_api.rb +43 -0
- data/lib/mrpin/core/remote/socket/base/extensions/manager_remote_socket_disconnect.rb +69 -0
- data/lib/mrpin/core/remote/socket/base/extensions/manager_remote_socket_handle.rb +155 -0
- data/lib/mrpin/core/remote/socket/base/extensions/manager_remote_socket_sessions.rb +41 -0
- data/lib/mrpin/core/remote/socket/base/extensions/manager_remote_socket_statistic.rb +41 -0
- data/lib/mrpin/core/remote/socket/base/extensions/network_interface_helper.rb +53 -0
- data/lib/mrpin/core/remote/socket/base/manager_remote_socket_base.rb +131 -0
- data/lib/mrpin/core/remote/socket/base/socket_client_base.rb +181 -0
- data/lib/mrpin/core/remote/socket/base/socket_client_crossdomain.rb +33 -0
- data/lib/mrpin/core/remote/socket/flash/manager_remote_socket_flash.rb +51 -0
- data/lib/mrpin/core/remote/socket/flash/socket_client_flash.rb +21 -0
- data/lib/mrpin/core/remote/socket/unity/manager_remote_socket_unity.rb +58 -0
- data/lib/mrpin/core/remote/socket/unity/socket_client_unity.rb +19 -0
- data/lib/mrpin/core/remote/socket/websocket/manager_remote_web_sockets.rb +101 -0
- data/lib/mrpin/core/remote/socket/websocket/socket_client_web_sockets.rb +129 -0
- data/lib/mrpin/core/remote/socket/with_policy/socket_client_with_policy.rb +66 -0
- data/lib/mrpin/core/review.rb +231 -0
- data/lib/mrpin/core/scheduler/manager_scheduler.rb +66 -0
- data/lib/mrpin/core/statistic/error_client_base.rb +136 -0
- data/lib/mrpin/core/statistic/error_server_base.rb +93 -0
- data/lib/mrpin/core/statistic/manager_statistics_base.rb +221 -0
- data/lib/mrpin/core/statistic/statistic_application_base.rb +88 -0
- data/lib/mrpin/core/statistic/statistic_config_base.rb +38 -0
- data/lib/mrpin/core/statistic/system_handler_profiler.rb +85 -0
- data/lib/mrpin/core/string/e_language_type.rb +29 -0
- data/lib/mrpin/core/string/e_string_type_base.rb +14 -0
- data/lib/mrpin/core/string/localization_base.rb +77 -0
- data/lib/mrpin/core/string/localization_base_map.rb +303 -0
- data/lib/mrpin/core/string/manager_string_base.rb +159 -0
- data/lib/mrpin/core/threads/thread_with_task.rb +62 -0
- data/lib/mrpin/core/uploaders/aws/aws_file_info.rb +16 -0
- data/lib/mrpin/core/uploaders/aws/aws_uploader.rb +229 -0
- data/lib/mrpin/core/uploaders/carrierwave/file_uploader.rb +7 -0
- data/lib/mrpin/core/uploaders/carrierwave/file_uploader_helpers_base.rb +66 -0
- data/lib/mrpin/core/uploaders/carrierwave/file_uploader_helpers_local.rb +111 -0
- data/lib/mrpin/core/uploaders/carrierwave/file_uploader_helpers_s3.rb +87 -0
- data/lib/mrpin/core/uploaders/carrierwave/zip_uploader.rb +10 -0
- data/lib/mrpin/core/utils/mongo.rb +41 -0
- data/lib/mrpin/core/utils/sorter_base.rb +344 -0
- data/lib/mrpin/core/utils/utils_io.rb +27 -0
- data/lib/mrpin/core/utils/utils_string.rb +17 -0
- data/lib/mrpin/core/utils/utils_zip.rb +58 -0
- data/lib/mrpin/libs/rails_admin/localization.rb +70 -0
- data/lib/mrpin/libs.rb +11 -0
- data/lib/mrpin/rails/engine.rb +11 -0
- data/lib/mrpin/vendors.rb +19 -0
- data/lib/mrpin/version.rb +3 -0
- data/lib/mrpin-sdk.rb +6 -0
- data/mrpin-sdk.gemspec +54 -0
- metadata +163 -96
@@ -0,0 +1,344 @@
|
|
1
|
+
class SorterBase
|
2
|
+
|
3
|
+
#
|
4
|
+
# properties
|
5
|
+
#
|
6
|
+
|
7
|
+
attr_accessor :top_size
|
8
|
+
attr_accessor :sort_criteria_non_players
|
9
|
+
|
10
|
+
attr_reader :players_ids
|
11
|
+
#todo:remove for avoid sync errors (can't add key during iteration)
|
12
|
+
attr_reader :player_position_map
|
13
|
+
attr_reader :players_resources_map
|
14
|
+
attr_reader :players_locker
|
15
|
+
|
16
|
+
|
17
|
+
#
|
18
|
+
# events
|
19
|
+
#
|
20
|
+
|
21
|
+
protected
|
22
|
+
def on_player_updated(player, position_old, position_new, resource_count_new)
|
23
|
+
#do nothing
|
24
|
+
end
|
25
|
+
|
26
|
+
protected
|
27
|
+
def on_player_came_to_top(player, position_old, position_new, resource_count_new)
|
28
|
+
#do nothing
|
29
|
+
end
|
30
|
+
|
31
|
+
protected
|
32
|
+
def on_player_left_from_top(player, position_old, position_new, resource_count_new)
|
33
|
+
#do nothing
|
34
|
+
end
|
35
|
+
|
36
|
+
protected
|
37
|
+
def on_player_top_updated(player, position_old, position_new, resource_count_new)
|
38
|
+
#do nothing
|
39
|
+
end
|
40
|
+
|
41
|
+
#
|
42
|
+
# methods
|
43
|
+
#
|
44
|
+
|
45
|
+
public
|
46
|
+
def initialize
|
47
|
+
@top_size = 100
|
48
|
+
|
49
|
+
@sort_criteria_non_players = 0
|
50
|
+
|
51
|
+
# ordered player_ids
|
52
|
+
@players_ids = []
|
53
|
+
# key player_id, value - position
|
54
|
+
@player_position_map = {}
|
55
|
+
# key - player_id, value - player specify resource count
|
56
|
+
@players_resources_map = {}
|
57
|
+
|
58
|
+
@players_locker = Mutex.new
|
59
|
+
end
|
60
|
+
|
61
|
+
# init sorter with start data
|
62
|
+
# sort_criteria_map - map with key - player_id, value - sort criteria
|
63
|
+
public
|
64
|
+
def init_sorter(sort_criteria_map)
|
65
|
+
@players_ids = sort_criteria_map.keys.dup
|
66
|
+
|
67
|
+
@players_ids.sort_by! do |id|
|
68
|
+
sort_criteria_map[id]
|
69
|
+
end
|
70
|
+
|
71
|
+
@players_ids.reverse!
|
72
|
+
|
73
|
+
@player_position_map = Hash[@players_ids.map.with_index(index_offset = 1).to_a]
|
74
|
+
|
75
|
+
@players_resources_map = sort_criteria_map.dup
|
76
|
+
end
|
77
|
+
|
78
|
+
protected
|
79
|
+
def find_new_position(resource_count, player_position_old, find_up)
|
80
|
+
|
81
|
+
if find_up
|
82
|
+
index_left = 0
|
83
|
+
index_right = player_position_old - 1
|
84
|
+
else
|
85
|
+
index_left = player_position_old - 1
|
86
|
+
index_right = @players_ids.size - 1
|
87
|
+
end
|
88
|
+
|
89
|
+
while index_left <= index_right
|
90
|
+
median_index = (index_right + index_left) / 2
|
91
|
+
|
92
|
+
player_median_resources = @players_resources_map[@players_ids[median_index]]
|
93
|
+
|
94
|
+
if resource_count > player_median_resources
|
95
|
+
index_right = median_index - 1
|
96
|
+
elsif resource_count == player_median_resources
|
97
|
+
|
98
|
+
index_left = median_index
|
99
|
+
|
100
|
+
while resource_count == player_median_resources
|
101
|
+
index_left = index_left + 1
|
102
|
+
player_median_resources = @players_resources_map[@players_ids[index_left]]
|
103
|
+
end
|
104
|
+
|
105
|
+
break
|
106
|
+
else
|
107
|
+
index_left = median_index + 1
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
index_left + 1
|
112
|
+
end
|
113
|
+
|
114
|
+
public
|
115
|
+
def try_update_position(player, sort_criteria_value)
|
116
|
+
player_came_to_top = false
|
117
|
+
player_left_from_top = false
|
118
|
+
|
119
|
+
player_id = player.id
|
120
|
+
|
121
|
+
if player.respond_to?(:is_player?) && !player.is_player?
|
122
|
+
sort_criteria_value = @sort_criteria_non_players
|
123
|
+
end
|
124
|
+
|
125
|
+
@players_locker.synchronize do
|
126
|
+
|
127
|
+
#add player if he doesn't exist
|
128
|
+
if @player_position_map[player_id].nil?
|
129
|
+
add_player_unsafe(player, sort_criteria_value)
|
130
|
+
return
|
131
|
+
end
|
132
|
+
|
133
|
+
sort_criteria_old = @players_resources_map[player_id]
|
134
|
+
|
135
|
+
return if sort_criteria_value == sort_criteria_old
|
136
|
+
|
137
|
+
find_position_up = sort_criteria_value > sort_criteria_old
|
138
|
+
|
139
|
+
position_old = @player_position_map[player_id]
|
140
|
+
position_new = find_new_position(sort_criteria_value, position_old, find_position_up)
|
141
|
+
|
142
|
+
if position_new > position_old
|
143
|
+
# need because player already in top
|
144
|
+
position_new -= 1
|
145
|
+
end
|
146
|
+
|
147
|
+
@players_resources_map[player_id] = sort_criteria_value
|
148
|
+
|
149
|
+
player_in_top = position_new <= @top_size
|
150
|
+
|
151
|
+
if position_new != position_old
|
152
|
+
|
153
|
+
player_came_to_top = position_old > @top_size && position_new <= @top_size
|
154
|
+
player_left_from_top = position_old <= @top_size && position_new > @top_size
|
155
|
+
|
156
|
+
@players_ids.delete_at(position_old - 1)
|
157
|
+
@players_ids.insert(position_new - 1, player_id)
|
158
|
+
|
159
|
+
update_player_positions(position_new, position_old)
|
160
|
+
end
|
161
|
+
|
162
|
+
if player_came_to_top
|
163
|
+
on_player_came_to_top(player, position_old, position_new, sort_criteria_value)
|
164
|
+
elsif player_left_from_top
|
165
|
+
on_player_left_from_top(player, position_old, position_new, sort_criteria_value)
|
166
|
+
elsif player_in_top #invalidate top player
|
167
|
+
on_player_top_updated(player, position_old, position_new, sort_criteria_value)
|
168
|
+
else #usual player, just invalidate online friends
|
169
|
+
on_player_updated(player, position_old, position_new, sort_criteria_value)
|
170
|
+
end
|
171
|
+
|
172
|
+
end
|
173
|
+
|
174
|
+
nil
|
175
|
+
end
|
176
|
+
|
177
|
+
protected
|
178
|
+
def update_player_positions(position_new, position_old)
|
179
|
+
|
180
|
+
position_start = [position_new, position_old].min
|
181
|
+
position_end = [position_new, position_old].max
|
182
|
+
|
183
|
+
(position_start..position_end).each do |position|
|
184
|
+
|
185
|
+
player_id = @players_ids[position - 1]
|
186
|
+
|
187
|
+
@player_position_map[player_id] = position
|
188
|
+
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
#
|
193
|
+
# methods for get info
|
194
|
+
#
|
195
|
+
|
196
|
+
public
|
197
|
+
def get_players_ids(position_start = 0, position_end = nil)
|
198
|
+
result = nil
|
199
|
+
|
200
|
+
@players_locker.synchronize do
|
201
|
+
result = get_players_ids_unsafe(position_start, position_end)
|
202
|
+
end
|
203
|
+
|
204
|
+
result
|
205
|
+
end
|
206
|
+
|
207
|
+
public
|
208
|
+
def get_player_position_total(player)
|
209
|
+
result = 0
|
210
|
+
|
211
|
+
@players_locker.synchronize do
|
212
|
+
result = @player_position_map[player.id]
|
213
|
+
end
|
214
|
+
|
215
|
+
result
|
216
|
+
end
|
217
|
+
|
218
|
+
|
219
|
+
# return
|
220
|
+
# {
|
221
|
+
# player_id:
|
222
|
+
# sort_criteria:
|
223
|
+
# position:
|
224
|
+
# }
|
225
|
+
public
|
226
|
+
def get_player_info(player_id)
|
227
|
+
result = nil
|
228
|
+
|
229
|
+
@players_locker.synchronize do
|
230
|
+
return result unless @player_position_map.key?(player_id)
|
231
|
+
|
232
|
+
result = get_player_info_unsafe(player_id)
|
233
|
+
end
|
234
|
+
|
235
|
+
result
|
236
|
+
end
|
237
|
+
|
238
|
+
private
|
239
|
+
def get_player_info_unsafe(player_id)
|
240
|
+
{
|
241
|
+
player_id: player_id,
|
242
|
+
position: @player_position_map[player_id],
|
243
|
+
sort_criteria: @players_resources_map[player_id]
|
244
|
+
}
|
245
|
+
end
|
246
|
+
|
247
|
+
private
|
248
|
+
def get_players_ids_unsafe(position_start, position_end)
|
249
|
+
position_end = position_end || (@top_size - 1)
|
250
|
+
|
251
|
+
position_end = @players_ids.size if position_end < 0
|
252
|
+
|
253
|
+
result = @players_ids[position_start..position_end]
|
254
|
+
end
|
255
|
+
|
256
|
+
# return array of
|
257
|
+
# {
|
258
|
+
# player_id:
|
259
|
+
# sort_criteria:
|
260
|
+
# position:
|
261
|
+
# }
|
262
|
+
public
|
263
|
+
def get_players_infos(position_start = 0, position_end = nil)
|
264
|
+
|
265
|
+
result = []
|
266
|
+
|
267
|
+
@players_locker.synchronize do
|
268
|
+
|
269
|
+
players_ids = get_players_ids_unsafe(position_start, position_end)
|
270
|
+
|
271
|
+
players_ids.each do |player_id|
|
272
|
+
player_info = get_player_info_unsafe(player_id)
|
273
|
+
|
274
|
+
result << player_info
|
275
|
+
end
|
276
|
+
|
277
|
+
end
|
278
|
+
|
279
|
+
result
|
280
|
+
end
|
281
|
+
|
282
|
+
#
|
283
|
+
# manager players
|
284
|
+
#
|
285
|
+
|
286
|
+
public
|
287
|
+
def add_player(player, sort_criteria_value = 0)
|
288
|
+
@players_locker.synchronize do
|
289
|
+
add_player_unsafe(player, sort_criteria_value)
|
290
|
+
end
|
291
|
+
end
|
292
|
+
|
293
|
+
protected
|
294
|
+
def add_player_unsafe(player, sort_criteria_value = 0)
|
295
|
+
player_id = player.id
|
296
|
+
|
297
|
+
sort_criteria_value = 0 if sort_criteria_value.nil?
|
298
|
+
|
299
|
+
return if @players_resources_map.empty?
|
300
|
+
return unless @player_position_map[player_id].nil?
|
301
|
+
|
302
|
+
index_position = @players_ids.size
|
303
|
+
|
304
|
+
while index_position > 0 && sort_criteria_value > @players_resources_map[@players_ids[index_position - 1]]
|
305
|
+
index_position -= 1
|
306
|
+
end
|
307
|
+
|
308
|
+
@players_ids.insert(index_position, player_id)
|
309
|
+
@players_resources_map[player_id] = sort_criteria_value
|
310
|
+
@player_position_map[player_id] = index_position + 1
|
311
|
+
|
312
|
+
update_player_positions(index_position + 1, @players_ids.size)
|
313
|
+
|
314
|
+
if index_position < @top_size
|
315
|
+
on_player_came_to_top(player, nil, index_position + 1, sort_criteria_value)
|
316
|
+
end
|
317
|
+
end
|
318
|
+
|
319
|
+
public
|
320
|
+
def delete_player(player)
|
321
|
+
@players_locker.synchronize do
|
322
|
+
player_id = player.id
|
323
|
+
|
324
|
+
position_old = @player_position_map[player.id]
|
325
|
+
|
326
|
+
return if position_old.nil?
|
327
|
+
|
328
|
+
@players_ids.delete_at(position_old - 1)
|
329
|
+
@players_resources_map.delete(player_id)
|
330
|
+
@player_position_map.delete(player_id)
|
331
|
+
|
332
|
+
update_player_positions(position_old, @players_ids.size)
|
333
|
+
|
334
|
+
if position_old <= @top_size
|
335
|
+
position_new = [@players_ids.size + 1, @top_size + 1].max
|
336
|
+
resource_count_new = 0
|
337
|
+
|
338
|
+
on_player_left_from_top(player, position_old, position_new, resource_count_new)
|
339
|
+
end
|
340
|
+
end
|
341
|
+
end
|
342
|
+
|
343
|
+
|
344
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module UtilsIO
|
2
|
+
private
|
3
|
+
def self.root_dir
|
4
|
+
Rails.env.development? ? File.join(Rails.root.to_s, 'public') : "/usr/local/#{AppInfo.instance.server_name}"
|
5
|
+
end
|
6
|
+
|
7
|
+
public
|
8
|
+
def self.to_domain_path(file_path)
|
9
|
+
root_dir = self.root_dir
|
10
|
+
|
11
|
+
file_path = file_path.gsub(root_dir, '')
|
12
|
+
|
13
|
+
File.join('https://', AppInfo.instance.host, file_path)
|
14
|
+
end
|
15
|
+
|
16
|
+
public
|
17
|
+
def self.to_local_path(url_path)
|
18
|
+
root_dir = self.root_dir
|
19
|
+
|
20
|
+
file_path = url_path
|
21
|
+
file_path = file_path.gsub(AppInfo.instance.host, '')
|
22
|
+
file_path = file_path.gsub('https://', '')
|
23
|
+
file_path = file_path.gsub('http://', '')
|
24
|
+
|
25
|
+
File.join(root_dir, file_path)
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
class UtilsZip
|
2
|
+
|
3
|
+
#
|
4
|
+
# Properties
|
5
|
+
#
|
6
|
+
|
7
|
+
#
|
8
|
+
# Methods
|
9
|
+
#
|
10
|
+
|
11
|
+
public
|
12
|
+
def self.compress_to_base64(data)
|
13
|
+
return data if data.nil?
|
14
|
+
|
15
|
+
#compress and encode to base64
|
16
|
+
data_bin = Zlib.deflate(data)
|
17
|
+
Base64.strict_encode64(data_bin)
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
public
|
22
|
+
def self.decompress_base64(data_base64)
|
23
|
+
result = nil
|
24
|
+
|
25
|
+
unless data_base64.nil?
|
26
|
+
#decode from base64 and decompress
|
27
|
+
progress_bin = Base64.strict_decode64(data_base64)
|
28
|
+
result = Zlib.inflate(progress_bin)
|
29
|
+
result = result.force_encoding('utf-8')
|
30
|
+
end
|
31
|
+
|
32
|
+
result
|
33
|
+
end
|
34
|
+
|
35
|
+
# unzip all files from zip to destination dir
|
36
|
+
# return extract dir path
|
37
|
+
#todo:fix extract_dir
|
38
|
+
public
|
39
|
+
def self.unzip_file(filename, destination_dir = nil)
|
40
|
+
|
41
|
+
destination_dir = File.dirname(filename) if destination_dir.nil?
|
42
|
+
|
43
|
+
%x(unzip -n '#{filename}' -d '#{destination_dir}') #-n never overwrite existing files
|
44
|
+
|
45
|
+
extract_dir = File.join(destination_dir, File.basename(filename, '.*'))
|
46
|
+
|
47
|
+
#downcase all file names
|
48
|
+
Dir.glob(extract_dir + '/*.*').each do |file|
|
49
|
+
filename = File.basename(file, '.*')
|
50
|
+
filename_new = Unicode::downcase(filename.force_encoding('utf-8'))
|
51
|
+
File.rename(file, extract_dir + '/' + filename_new)
|
52
|
+
end
|
53
|
+
|
54
|
+
extract_dir
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'rails_admin/config/actions'
|
2
|
+
require 'rails_admin/config/actions/base'
|
3
|
+
|
4
|
+
module RailsAdmin
|
5
|
+
module Config
|
6
|
+
module Actions
|
7
|
+
class Localization < Base
|
8
|
+
RailsAdmin::Config::Actions.register(self)
|
9
|
+
|
10
|
+
register_instance_option :visible? do
|
11
|
+
authorized? && (bindings[:abstract_model].to_s == CLASS_MAP[EClassType::ECT_LOCALIZATION])
|
12
|
+
end
|
13
|
+
|
14
|
+
register_instance_option :collection do
|
15
|
+
true
|
16
|
+
end
|
17
|
+
|
18
|
+
register_instance_option :link_icon do
|
19
|
+
'icon-none'
|
20
|
+
end
|
21
|
+
|
22
|
+
register_instance_option :pjax? do
|
23
|
+
false
|
24
|
+
end
|
25
|
+
|
26
|
+
register_instance_option :http_methods do
|
27
|
+
[:get, :post]
|
28
|
+
end
|
29
|
+
|
30
|
+
register_instance_option :controller do
|
31
|
+
|
32
|
+
proc do
|
33
|
+
|
34
|
+
model_name = @abstract_model.model_name
|
35
|
+
|
36
|
+
unless model_name == CLASS_MAP[EClassType::ECT_LOCALIZATION]
|
37
|
+
flash[:error] = 'Localization actions work only with Localization model'
|
38
|
+
redirect_to index_path
|
39
|
+
next
|
40
|
+
end
|
41
|
+
|
42
|
+
flash.clear
|
43
|
+
|
44
|
+
next unless request.post?
|
45
|
+
|
46
|
+
params = request.filtered_parameters.symbolize_keys
|
47
|
+
|
48
|
+
if params[:export] # EXPORT
|
49
|
+
|
50
|
+
begin
|
51
|
+
|
52
|
+
manager_string = AppInfo.instance.manager_string
|
53
|
+
|
54
|
+
file_name = manager_string.export_localizations_to_s3
|
55
|
+
|
56
|
+
flash[:success] = "File #{file_name} was exported"
|
57
|
+
|
58
|
+
rescue Exception => error
|
59
|
+
flash[:error] = "Error exporting file. #{error.message}"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
render @action.template_name
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/lib/mrpin/libs.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'base64'
|
2
|
+
require 'benchmark'
|
3
|
+
require 'date'
|
4
|
+
require 'digest/md5'
|
5
|
+
require 'fileutils'
|
6
|
+
require 'net/http'
|
7
|
+
require 'singleton'
|
8
|
+
require 'socket'
|
9
|
+
require 'zlib'
|
10
|
+
|
11
|
+
Dir[File.dirname(__FILE__) + '/libs/**/*.rb'].each { |file| require file }
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'rails'
|
2
|
+
|
3
|
+
require 'amf'
|
4
|
+
require 'aws-sdk'
|
5
|
+
require 'bootstrap-sass-rails'
|
6
|
+
require 'carrierwave/mongoid'
|
7
|
+
require 'eventmachine'
|
8
|
+
require 'em-websocket'
|
9
|
+
require 'devise'
|
10
|
+
require 'faraday'
|
11
|
+
require 'faraday_middleware'
|
12
|
+
require 'mongoid'
|
13
|
+
require 'rails_admin'
|
14
|
+
require 'rufus-scheduler'
|
15
|
+
require 'uglifier'
|
16
|
+
require 'unicode'
|
17
|
+
require 'uuid'
|
18
|
+
require 'vmstat'
|
19
|
+
require 'securerandom'
|
data/lib/mrpin-sdk.rb
ADDED
data/mrpin-sdk.gemspec
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
|
5
|
+
begin
|
6
|
+
require 'mrpin/version'
|
7
|
+
rescue Exception => e
|
8
|
+
puts "[WARNING] Can't require mrpin-sdk with error: #{e}"
|
9
|
+
end
|
10
|
+
|
11
|
+
Gem::Specification.new do |spec|
|
12
|
+
spec.name = 'mrpin-sdk'
|
13
|
+
spec.version = Mrpin::VERSION
|
14
|
+
spec.authors = %w(Gregory Tkach Yakupov Dmitrij)
|
15
|
+
spec.email = %w(gregory.tkach@gmail.com yakupov.dmitrij@gmail.com)
|
16
|
+
spec.description = %q{Mrpin sdk for backend development.}
|
17
|
+
spec.summary = "#{spec.description}. Summary."
|
18
|
+
spec.license = 'MIT'
|
19
|
+
spec.homepage = 'https://mr-pin.net'
|
20
|
+
|
21
|
+
spec.files = `git ls-files`.split($/)
|
22
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
23
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
24
|
+
spec.require_paths = %w(app lib)
|
25
|
+
|
26
|
+
spec.add_development_dependency 'bundler', '~> 1'
|
27
|
+
spec.add_development_dependency 'rake', '~> 12'
|
28
|
+
|
29
|
+
spec.add_runtime_dependency 'aws-sdk', '~> 2'
|
30
|
+
spec.add_runtime_dependency 'bootstrap-sass-rails', '~> 3'
|
31
|
+
# improve bson deserialization
|
32
|
+
spec.add_runtime_dependency 'bson_ext', '~> 1'
|
33
|
+
# uploader
|
34
|
+
spec.add_runtime_dependency 'carrierwave-mongoid', '~> 0'
|
35
|
+
# auth gem
|
36
|
+
spec.add_runtime_dependency 'devise', '~> 4'
|
37
|
+
# websockets based on event machine
|
38
|
+
spec.add_runtime_dependency 'em-websocket', '~> 0'
|
39
|
+
spec.add_runtime_dependency 'eventmachine', '~> 1'
|
40
|
+
spec.add_runtime_dependency 'faraday', '~> 0'
|
41
|
+
spec.add_runtime_dependency 'faraday_middleware', '~> 0'
|
42
|
+
spec.add_runtime_dependency 'mongoid', '~> 6'
|
43
|
+
spec.add_runtime_dependency 'mrpin-amf', '~> 2'
|
44
|
+
spec.add_runtime_dependency 'rails', '~> 5'
|
45
|
+
spec.add_runtime_dependency 'rails_admin', '~> 1'
|
46
|
+
spec.add_runtime_dependency 'rufus-scheduler', '~> 3'
|
47
|
+
# JavaScript compressor
|
48
|
+
spec.add_runtime_dependency 'uglifier', '~> 2'
|
49
|
+
spec.add_runtime_dependency 'unicode', '~> 0'
|
50
|
+
spec.add_runtime_dependency 'uuid', '~> 2'
|
51
|
+
# system info cpu, memory etc
|
52
|
+
spec.add_runtime_dependency 'vmstat', '~> 2'
|
53
|
+
|
54
|
+
end
|