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,229 @@
1
+ require 'open-uri'
2
+
3
+ class AWSUploader
4
+
5
+ BUCKET_NAME_DEFAULT = 'mrpin-static'
6
+ DOMAIN_NAME_CLOUD_FRONT = 'd3crzre36asem1.cloudfront.net'
7
+ DOMAIN_NAME_S3 = 's3.amazonaws.com'
8
+ AWS_REGION = 'us-east-1'
9
+
10
+ CACHE_CONTROL_MAX_AGE_DEFAULT = 365 * 24 * 60 * 60
11
+
12
+ attr_reader :s3
13
+ attr_reader :cloud_front
14
+
15
+ def initialize(options = {})
16
+ credentials = {}
17
+
18
+ credentials[:access_key_id] = get_var_from_env('AWS_ACCESS_KEY_ID')
19
+ credentials[:secret_access_key] = get_var_from_env('AWS_SECRET_ACCESS_KEY')
20
+ credentials[:region] = AWS_REGION
21
+
22
+ @s3 = Aws::S3::Client.new(credentials)
23
+ @s3_resources = Aws::S3::Resource.new(credentials)
24
+ @cloud_front = Aws::CloudFront::Client.new(credentials)
25
+ end
26
+
27
+ # upload files to s3 and returns urls map
28
+ public
29
+ def upload_files_to_s3(files_to_upload, bucket_name, keys)
30
+ bucket_name ||= BUCKET_NAME_DEFAULT
31
+
32
+ assert(!files_to_upload.nil?, 'aws:upload_files_to_s3. Files to upload must be non nil')
33
+ assert(!bucket_name.nil?, 'aws:upload_files_to_s3. Bucket name must be non nil')
34
+ assert(!keys.nil? && keys.size == files_to_upload.size, 'aws:upload_files_to_s3. Desired names must be non nil and its count must be equal count of files to upload')
35
+
36
+ result = []
37
+
38
+ begin
39
+
40
+ [0..files_to_upload.size - 1].each do |i|
41
+ file_to_upload = files_to_upload[i]
42
+
43
+ s3_key = keys[i]
44
+
45
+ result << upload_file_to_s3(file_to_upload, bucket_name, s3_key)
46
+ end
47
+
48
+ rescue Exception => e
49
+
50
+ result.each do |file_info|
51
+ delete_file_from_s3_by_uri(bucket_name, file_info.url_s3)
52
+ end
53
+
54
+ assert(false, e.to_s)
55
+ end
56
+
57
+ result
58
+ end
59
+
60
+ public
61
+ def upload_file_to_s3(file_to_upload, bucket_name, key)
62
+ result = nil
63
+
64
+ File.open(file_to_upload) do |data_to_upload|
65
+ result = upload_to_s3_internal(data_to_upload, bucket_name, key, file_to_upload)
66
+ end
67
+
68
+ result
69
+ end
70
+
71
+ # upload file to s3 and returns instance of AWSFileInfo
72
+ public
73
+ def upload_data_to_s3(data_to_upload, bucket_name, path, desired_name = nil)
74
+ upload_to_s3_internal(data_to_upload, bucket_name, path, desired_name)
75
+ end
76
+
77
+ public
78
+ def upload_url_file_to_s3(url_to_upload, bucket_name, key)
79
+ result = nil
80
+
81
+ open(url_to_upload) do |data_to_upload|
82
+ result = upload_to_s3_internal(data_to_upload, bucket_name, key, url_to_upload)
83
+ end
84
+
85
+ result.source = url_to_upload
86
+
87
+ result
88
+ end
89
+
90
+ # @source_type - possible values :file, :data
91
+ private
92
+ def upload_to_s3_internal(data_to_upload, bucket_name, s3_key, source = nil)
93
+ result = AWSFileInfo.new
94
+
95
+ bucket_name ||= BUCKET_NAME_DEFAULT
96
+
97
+ s3_object_options = {}
98
+ s3_object_options[:body] = data_to_upload
99
+ s3_object_options[:acl] = 'public-read'
100
+ s3_object_options[:cache_control] = "max-age=#{CACHE_CONTROL_MAX_AGE_DEFAULT}"
101
+
102
+ s3_object = @s3_resources.bucket(bucket_name).object(s3_key)
103
+
104
+ s3_object.put(s3_object_options)
105
+
106
+ result.source = source
107
+ result.url_s3 = s3_object.public_url
108
+ result.url_cloud_front = get_cloud_front_url(result.url_s3)
109
+
110
+ result
111
+ end
112
+
113
+ public
114
+ def delete_file_from_s3_by_uri(bucket_name, url)
115
+ bucket_name ||= BUCKET_NAME_DEFAULT
116
+
117
+ key = get_key_from_url(url, bucket_name)
118
+
119
+ delete_file_from_s3(bucket_name, key)
120
+ end
121
+
122
+ # remove file from s3
123
+ public
124
+ def delete_file_from_s3(bucket_name, key)
125
+ bucket_name ||= BUCKET_NAME_DEFAULT
126
+
127
+ return unless check_s3_object_exists(key, bucket_name)
128
+
129
+ s3_object = @s3_resources.bucket(bucket_name).object(key)
130
+
131
+ s3_object.delete
132
+
133
+ nil
134
+ end
135
+
136
+
137
+ #
138
+ # CloudFront
139
+ #
140
+
141
+ public
142
+ def get_cloud_front_url(url, use_ssl = true)
143
+ result = url.sub URI.parse(url).host, DOMAIN_NAME_CLOUD_FRONT
144
+
145
+ if use_ssl
146
+ result.sub! 'http:/', 'https:/'
147
+ else
148
+ result.sub! 'https:/', 'http:/'
149
+ end
150
+
151
+ result
152
+ end
153
+
154
+
155
+ public
156
+ def get_distribution_id_by(bucket_name = BUCKET_NAME_DEFAULT)
157
+ result = nil
158
+
159
+ response = @cloud_front.list_distributions
160
+
161
+ list_distributions = response[:items]
162
+
163
+ list_distributions.each do |distribution|
164
+ origin_settings = distribution[:origins]
165
+ origin_item_first = origin_settings[:items].first
166
+ origin_domain_name = origin_item_first[:domain_name]
167
+ origin_name = origin_domain_name.split('.s3.').first
168
+
169
+ if origin_name == bucket_name
170
+ result = distribution[:id]
171
+ break
172
+ end
173
+ end
174
+
175
+ result
176
+ end
177
+
178
+ public
179
+ def invalidate_distribution(distribution_id, keys)
180
+
181
+ assert(!distribution_id.nil?, 'aws:invalidate_distribution. distribution_id must be non nil')
182
+ assert(keys.is_a?(Array), 'aws:invalidate_distribution. distribution_id must be non nil')
183
+
184
+ keys = keys.map do |k|
185
+ k.start_with?('/') ? k : '/' + k
186
+ end
187
+
188
+ paths = {}
189
+ paths[:items] = keys
190
+ paths[:quantity] = keys.size
191
+
192
+ invalidation_batch = {}
193
+ invalidation_batch[:caller_reference] = Time.now.to_i.to_s
194
+ invalidation_batch[:paths] = paths
195
+
196
+ options = {}
197
+ options[:distribution_id] = distribution_id
198
+ options[:invalidation_batch] = invalidation_batch
199
+
200
+ response = @cloud_front.create_invalidation(options)
201
+ end
202
+
203
+ public
204
+ def get_s3_url(url, bucket_name = BUCKET_NAME_DEFAULT)
205
+ result = url.sub URI.parse(url).host, "#{bucket_name}.#{DOMAIN_NAME_S3}"
206
+
207
+ result.sub! 'http:/', 'https:/'
208
+
209
+ result
210
+ end
211
+
212
+ public
213
+ def check_s3_object_exists(url, bucket_name = BUCKET_NAME_DEFAULT)
214
+
215
+ key = get_key_from_url(url, bucket_name)
216
+
217
+ s3_object = @s3_resources.bucket(bucket_name).object(key)
218
+
219
+ s3_object.exists?
220
+ end
221
+
222
+ private
223
+ def get_key_from_url(url, bucket_name = nil)
224
+ bucket_name ||= BUCKET_NAME_DEFAULT
225
+
226
+ URI(url).path.gsub(bucket_name, '').gsub(/\/+/, '/').gsub(/^\/+/, '')
227
+ end
228
+
229
+ end
@@ -0,0 +1,7 @@
1
+ # encoding: utf-8
2
+
3
+ class FileUploader < CarrierWave::Uploader::Base
4
+
5
+ storage :file
6
+
7
+ end
@@ -0,0 +1,66 @@
1
+ #todo: fix extension
2
+ module FileUploaderHelpersBase
3
+
4
+ #
5
+ # properties
6
+ #
7
+
8
+ # key - url field
9
+ # value - uploader field
10
+ protected
11
+ def url_uploaders_map
12
+ {}
13
+ end
14
+
15
+ #
16
+ # methods
17
+ #
18
+
19
+ protected
20
+ def delete_uploaded_files
21
+ end
22
+
23
+ protected
24
+ def try_update_uploaded_files
25
+ end
26
+
27
+ protected
28
+ def delete_uploaded_files_if_error
29
+ if self.new_record? && !errors.empty?
30
+
31
+ delete_uploaded_files
32
+
33
+ url_uploaders_map.each_key do |url_field|
34
+ self.send("#{url_field}=", nil)
35
+ end
36
+
37
+ end
38
+ end
39
+
40
+ #
41
+ # commons methods
42
+ #
43
+
44
+ protected
45
+ def get_upload_file_name(url_field, file_path)
46
+ result = "#{self.id.to_s}_#{url_field}_#{Time.now.to_i}"
47
+
48
+ extension = File.extname file_path
49
+
50
+ unless extension.nil?
51
+ result += extension.downcase
52
+ end
53
+
54
+ result
55
+ end
56
+
57
+ private
58
+ def upload_file_full_path(url_field)
59
+ game_name = AppInfo.instance.server_name
60
+ path = upload_file_path(url_field)
61
+
62
+ File.join(game_name, path)
63
+ end
64
+
65
+
66
+ end
@@ -0,0 +1,111 @@
1
+ module FileUploaderHelpersLocal
2
+
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ after_destroy :delete_uploaded_files
7
+ before_validation :try_update_uploaded_files
8
+ after_validation :delete_uploaded_files_if_error
9
+ end
10
+
11
+ include FileUploaderHelpersBase
12
+
13
+ #
14
+ # properties
15
+ #
16
+
17
+ #
18
+ # methods
19
+ #
20
+
21
+ # default constructor
22
+ protected
23
+ def try_update_uploaded_files
24
+ url_uploaders_map.each do |url_field, uploader_field|
25
+
26
+ next unless self.send(uploader_field).present?
27
+
28
+ begin
29
+ file_to_upload = self.send(uploader_field).file.file.to_s
30
+
31
+ # delete old file if was uploaded
32
+ old_url = self.send(url_field)
33
+
34
+ delete_file_local(old_url)
35
+
36
+ # upload new file
37
+ path = upload_file_full_path(url_field)
38
+ name = get_upload_file_name(url_field, file_to_upload)
39
+
40
+ file_path = File.join(path, name)
41
+
42
+ file_path_local = UtilsIO.to_local_path(file_path)
43
+
44
+ upload_file(url_field, file_to_upload, file_path_local)
45
+
46
+ rescue Exception => e
47
+ errors[:base] << e.to_s
48
+ ensure
49
+ file_path = File.dirname(file_to_upload)
50
+
51
+ FileUtils.rm_rf(file_path) if File.exists?(file_path)
52
+ end
53
+
54
+ end
55
+
56
+ nil
57
+ end
58
+
59
+ private
60
+ def upload_file(url_field, file_to_upload, file_path_local)
61
+ file_dir = File.dirname(file_path_local)
62
+
63
+ FileUtils.mkdir_p(file_dir)
64
+
65
+ FileUtils.copy(file_to_upload, file_path_local)
66
+
67
+ file_path_domain = UtilsIO.to_domain_path(file_path_local)
68
+
69
+ self.send("#{url_field}=", file_path_domain)
70
+
71
+ nil
72
+ end
73
+
74
+
75
+ protected
76
+ def get_upload_file_name(url_field, file_path)
77
+ file_name = File.basename(file_path)
78
+
79
+ result = "#{file_name}_#{url_field}_#{Time.now.to_i}"
80
+
81
+ extension = File.extname file_path
82
+
83
+ unless extension.nil?
84
+ result += extension.downcase
85
+ end
86
+
87
+ result
88
+ end
89
+
90
+ protected
91
+ def delete_uploaded_files
92
+ url_uploaders_map.each do |url_field, uploader_field|
93
+ url = self.send(url_field)
94
+ delete_file_local(url)
95
+ end
96
+
97
+ nil
98
+ end
99
+
100
+ private
101
+ def delete_file_local(url)
102
+ return if url.nil? || url.blank?
103
+
104
+ local_path = UtilsIO.to_local_path(url)
105
+
106
+ FileUtils.rm_rf(local_path) if File.exists?(local_path)
107
+
108
+ nil
109
+ end
110
+
111
+ end
@@ -0,0 +1,87 @@
1
+ module FileUploaderHelpersS3
2
+
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ after_destroy :delete_uploaded_files
7
+ before_validation :try_update_uploaded_files
8
+ after_validation :delete_uploaded_files_if_error
9
+ end
10
+
11
+ include FileUploaderHelpersBase
12
+
13
+ #
14
+ # Properties
15
+ #
16
+
17
+
18
+
19
+
20
+ protected
21
+ def upload_file_path(url_field)
22
+ assert(false, 'Please override')
23
+ end
24
+
25
+ private
26
+ def aws_uploader
27
+ @aws_uploader ||= AppInfo.instance.aws_uploader
28
+ end
29
+
30
+
31
+ #
32
+ # Methods
33
+ #
34
+
35
+ protected
36
+ def try_update_uploaded_files
37
+ url_uploaders_map.each do |url_field, uploader_field|
38
+
39
+ next unless self.send(uploader_field).present?
40
+
41
+ begin
42
+ file_to_upload = self.send(uploader_field).file.file.to_s
43
+
44
+ # delete old file if was uploaded
45
+ old_url = self.send(url_field)
46
+
47
+ delete_file_from_s3(old_url)
48
+
49
+ # upload new file
50
+ path = upload_file_full_path(url_field)
51
+ name = get_upload_file_name(url_field, file_to_upload)
52
+
53
+ s3_key = File.join(path, name)
54
+
55
+ s3_file_info = aws_uploader.upload_file_to_s3(file_to_upload, AWSUploader::BUCKET_NAME_DEFAULT, s3_key)
56
+
57
+ self.send("#{url_field}=", s3_file_info.url_cloud_front)
58
+
59
+ rescue Exception => e
60
+ errors[:base] << e.to_s
61
+
62
+ ensure
63
+ file_path = File.dirname(file_to_upload)
64
+
65
+ FileUtils.rm_rf(file_path) if File.exists?(file_path)
66
+ end
67
+
68
+ end
69
+ end
70
+
71
+ protected
72
+ def delete_uploaded_files
73
+ url_uploaders_map.each do |url_field, uploader_field|
74
+ url = self.send(url_field)
75
+ delete_file_from_s3(url)
76
+ end
77
+ end
78
+
79
+ private
80
+ def delete_file_from_s3(url)
81
+ unless url.nil? || url.blank?
82
+ s3_url = aws_uploader.get_s3_url(url)
83
+ aws_uploader.delete_file_from_s3_by_uri(AWSUploader::BUCKET_NAME_DEFAULT, s3_url)
84
+ end
85
+ end
86
+
87
+ end
@@ -0,0 +1,10 @@
1
+ # encoding: utf-8
2
+
3
+ class ZipUploader < CarrierWave::Uploader::Base
4
+
5
+ storage :file
6
+
7
+ def extension_white_list
8
+ %w(zip)
9
+ end
10
+ end
@@ -0,0 +1,41 @@
1
+ module Utils
2
+ module Mongo
3
+
4
+ class << self
5
+
6
+ def create_capped_collection(collection, size, max = 10_000_000)
7
+ Mongoid::Clients.default.command(create: collection, capped: true, size: size, max: max)
8
+ end
9
+
10
+ def get_collection_stats(collection)
11
+ Mongoid::Clients.default.command(collStats: collection) rescue nil
12
+ end
13
+
14
+ def get_database_stats
15
+ Mongoid::Clients.default.command(dbStats: 1) rescue nil
16
+ end
17
+
18
+ def get_collection_storage_size(collection)
19
+ get_collection_stats_property(collection, 'storageSize')
20
+ end
21
+
22
+ def get_collection_data_size(collection)
23
+ get_collection_stats_property(collection, 'size')
24
+ end
25
+
26
+ def get_collection_stats_property(collection, property)
27
+ result = nil
28
+
29
+ stats = get_collection_stats(collection)
30
+
31
+ if !stats.nil? && !stats.first.nil?
32
+ result = stats.first[property]
33
+ end
34
+
35
+ result
36
+ end
37
+
38
+ end
39
+
40
+ end
41
+ end