express_translate 1.0 → 1.0.1

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 (27) hide show
  1. data/README.md +53 -43
  2. data/VERSION +1 -1
  3. data/app/assets/stylesheets/express_translate/express_translate.css.scss +4 -0
  4. data/app/controllers/express_translate/account_controller.rb +10 -0
  5. data/app/controllers/express_translate/ajax/codes_controller.rb +21 -1
  6. data/app/controllers/express_translate/ajax/languages_controller.rb +16 -0
  7. data/app/controllers/express_translate/ajax/packages_controller.rb +13 -0
  8. data/app/controllers/express_translate/base_controller.rb +3 -1
  9. data/app/controllers/express_translate/files_controller.rb +32 -1
  10. data/app/controllers/express_translate/options_controller.rb +16 -5
  11. data/app/controllers/express_translate/services_controller.rb +20 -1
  12. data/app/views/express_translate/ajax/languages/_content_language.html.erb +1 -1
  13. data/app/views/express_translate/options/languages.html.erb +69 -1
  14. data/config/routes.rb +1 -0
  15. data/express_translate.gemspec +1 -2
  16. data/lib/express_translate.rb +7 -2
  17. data/lib/express_translate/account_management.rb +4 -1
  18. data/lib/express_translate/express_translate_model.rb +39 -5
  19. data/lib/express_translate/language_detail_management.rb +1 -1
  20. data/lib/express_translate/languages_management.rb +7 -1
  21. data/lib/express_translate/package_management.rb +1 -1
  22. data/lib/generators/express_translate/install_generator.rb +2 -0
  23. data/lib/generators/express_translate/reset_account_generator.rb +2 -0
  24. data/lib/generators/express_translate/reset_generator.rb +2 -1
  25. data/lib/generators/express_translate/seed_generator.rb +1 -0
  26. metadata +2 -3
  27. data/app/views/express_translate/options/_language.html.erb +0 -28
data/README.md CHANGED
@@ -21,57 +21,67 @@ Express Translate
21
21
 
22
22
  ##Installation
23
23
  ### 1. Gemfile
24
- ```bash
25
- gem 'rubify_dashboard', :git => 'git@github.com:RubifyTechnology/express_translate.git'
26
- ```
27
-
28
- ### 2. Install
29
- Open terminal and run:
30
-
31
- ```bash
32
- rails g express_translate:install
33
- ```
34
-
35
- ### 3. Setup
36
- Run on terminal.
37
- ```bash
38
- bundle install
39
- ```
24
+ ```bash
25
+ gem 'express_translate', '~> 1.0.0'
26
+ ```
27
+
28
+ ### 2. Setup
29
+ Run on terminal.
30
+ ```bash
31
+ bundle install
32
+ ```
33
+
34
+ ### 3. Install
35
+ Open terminal and run:
36
+
37
+ ```bash
38
+ rails g express_translate:install
39
+ ```
40
40
 
41
41
  ##Using
42
42
  ### Run
43
- Start Redis Server
44
- ```bash
45
- redis-server
46
- ```
43
+ Start Redis Server
44
+ ```bash
45
+ redis-server
46
+ ```
47
47
 
48
48
  ### Reset data
49
- ```bash
50
- rails g express_translate:reset
51
- ```
49
+ ```bash
50
+ rails g express_translate:reset
51
+ ```
52
52
 
53
53
  ### Reset Account
54
- ```bash
55
- rails g express_translate:reset_account
56
- ```
57
- Account list config in "/config/express_translate.yml"
58
- You can add account:
59
- ```bash
60
- account:
61
- -
62
- username: "abc_name"
63
- password: "abc_pass"
64
- ```
54
+ ```bash
55
+ rails g express_translate:reset_account
56
+ ```
57
+ Account list config in "/config/express_translate.yml"
58
+ You can add account:
59
+ ```bash
60
+ account:
61
+ -
62
+ username: "abc_name"
63
+ password: "abc_pass"
64
+ ```
65
65
  ### Login page
66
- You can see login page at:
67
- http://you_domain/express_translate/login
68
-
69
- * e.g: http://localhost:3000/express_translate/login
66
+ You can see login page at:
67
+ http://you_domain/express_translate/login
68
+
69
+ * e.g: http://localhost:3000/express_translate/login
70
70
 
71
71
  ### Packages management
72
- You can see at:
73
- http://you_domain/express_translate
72
+ You can see at:
73
+ http://you_domain/express_translate
74
+
75
+ * e.g: http://localhost:3000/express_translate
74
76
 
75
- * e.g: http://localhost:3000/express_translate
76
-
77
- Note: You can see before login. Account for login in config file ("/config/express_translate.yml").
77
+ Note: You can see before login. Account for login in config file ("/config/express_translate.yml").
78
+
79
+ ##Support
80
+
81
+ ### Files
82
+ Export and Import csv file
83
+
84
+ ### Application
85
+ Backend for Ruby on Rails
86
+
87
+ Get data with json (for Javascript)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0
1
+ 1.0.1
@@ -313,6 +313,10 @@ body#express_translate {
313
313
  background: #0B61A4;
314
314
  }
315
315
 
316
+ &.add_files {
317
+ border:3px dotted #cacaca;
318
+ }
319
+
316
320
  .remove {
317
321
  background-image: url("remove.png");
318
322
  }
@@ -1,12 +1,19 @@
1
1
  class ExpressTranslate::AccountController < ExpressTranslate::BaseController
2
+ # Check login status for goto page
2
3
  before_filter :check_login
3
4
 
4
5
  include ExpressTranslate
5
6
 
7
+ # Login page html code only
6
8
  def login
7
9
  render layout: 'express_translate/login'
8
10
  end
9
11
 
12
+ # Login action
13
+ # Find account with username
14
+ # Change exists of account and change password for account (encoding password)
15
+ # If oke, new token for account login and update token for account
16
+ # Render json data for client Successful or Error
10
17
  def login_check
11
18
  account = Account.find(params[:username])
12
19
  if account.present? and account["password"] == Account.encoding(params[:password])
@@ -18,11 +25,14 @@ class ExpressTranslate::AccountController < ExpressTranslate::BaseController
18
25
  end
19
26
  end
20
27
 
28
+ # Create token for login action, random string
21
29
  def new_token
22
30
  o = [('a'..'z'), ('A'..'Z')].map { |i| i.to_a }.flatten
23
31
  string = (0...50).map { o[rand(o.length)] }.join
24
32
  end
25
33
 
34
+ # Check login status function
35
+ # If logined auto change location for Client
26
36
  def check_login
27
37
  if check_authentication
28
38
  redirect_to controller: "options", action: "index"
@@ -1,21 +1,38 @@
1
+ # Ajax action for Codes Controller
1
2
  class ExpressTranslate::Ajax::CodesController < ActionController::Base
3
+
4
+ # Include and require Libraries
2
5
  require 'redis'
3
6
  require 'json'
4
7
  require 'csv'
5
8
  include ExpressTranslate
6
9
 
10
+ # Add code
11
+ # The first: selector LanguageDetail want to add with Language ID and Package ID
12
+ # After: add code for LanguageDetail selected
13
+ # The finally: check status add and show html content for Client is successful or json data is error
7
14
  def code_add
8
15
  @lang_detail = LanguageDetail.info({'id'=> params[:lang], 'packages'=> params[:pack]})
9
16
  add = @lang_detail.add(params)
10
17
  add['success'] ? load_content_code(params) : (render :json => add)
11
18
  end
12
19
 
20
+ # Update code
21
+ # The first: selector LanguageDetail want to add with Language ID and Package ID
22
+ # Next step: selector code want to update Text for this
23
+ # Next step: Update if exists data and add for not exists data
24
+ # The finally: show html content for Client
13
25
  def code_update
14
- @lang_detail = LanguageDetail.info({'id'=> params[:lang], 'packages'=> params[:pack]})
26
+ @lang_detail = LanguageDetail.info({'id'=> params[:lang], 'packages'=> params[:pack]})
15
27
  @lang_detail.find(params[:code]).present? ? @lang_detail.update(params) : @lang_detail.add(params)
16
28
  load_content_code(params)
17
29
  end
18
30
 
31
+
32
+ # Delete code
33
+ # The first: selector LanguageDetail want to add with Language ID and Package ID
34
+ # Next step: find and remove code data
35
+ # The finally: show html content for Client
19
36
  def code_delete
20
37
  @lang_detail = LanguageDetail.info({'id'=> params[:lang], 'packages'=> params[:pack]})
21
38
  @lang_detail.delete(params[:code])
@@ -24,6 +41,9 @@ class ExpressTranslate::Ajax::CodesController < ActionController::Base
24
41
 
25
42
  private
26
43
 
44
+ # Load html contents code
45
+ # The first: selector Origin language
46
+ # The second: selector Language want to show
27
47
  def load_content_code(params)
28
48
  @origin_lang = Language.get_origin(params[:pack])
29
49
  @LanguageDetail = LanguageDetail
@@ -1,27 +1,43 @@
1
+ # Ajax action for Languages Controller
1
2
  class ExpressTranslate::Ajax::LanguagesController < ActionController::Base
3
+
4
+ # Include and require Libraries
2
5
  require 'redis'
3
6
  require 'json'
4
7
  require 'csv'
5
8
  include ExpressTranslate
6
9
 
10
+ # Add language
11
+ # Load html content when add Language
7
12
  def language_add
8
13
  load_content_language(params, Language.add(params))
9
14
  end
10
15
 
16
+ # Update language
17
+ # Load html content when update Language
11
18
  def language_update
12
19
  load_content_language(params, Language.update_by_id_packages(params[:old_id], params[:packages], params))
13
20
  end
14
21
 
22
+ # Delete language
23
+ # Load html content when delete Language
15
24
  def language_delete
16
25
  load_content_language(params, Language.delete_by_id_packages(params[:id], params[:packages]))
17
26
  end
18
27
 
28
+ # Set origin language
29
+ # Load html content when set origin Language for package
19
30
  def language_set_origin
20
31
  load_content_language(params, Language.set_origin(params[:id], params[:packages]))
21
32
  end
22
33
 
23
34
  private
24
35
 
36
+ # Load language html content
37
+ # The firstly: check status for action add, update, delete and set origin language
38
+ # get origin language for know max count => percent complete
39
+ # get max number language origin
40
+ # render to html content
25
41
  def load_content_language(params, check)
26
42
  if check['success']
27
43
  origin = Language.get_origin(params[:packages])
@@ -1,23 +1,36 @@
1
+ # Ajax action for Package Controller
1
2
  class ExpressTranslate::Ajax::PackagesController < ActionController::Base
3
+
4
+ # Include and require Libraries
2
5
  require 'redis'
3
6
  require 'json'
4
7
  require 'csv'
5
8
  include ExpressTranslate
6
9
 
10
+ # Add package
11
+ # Load html content when add Package
7
12
  def package_add
8
13
  load_content_package(Package.add(params))
9
14
  end
10
15
 
16
+ # Update package
17
+ # Load html content when update Package
11
18
  def package_update
12
19
  load_content_package(Package.update(params))
13
20
  end
14
21
 
22
+ # Delete package
23
+ # Load html content when delete Package
15
24
  def package_delete
16
25
  load_content_package(Package.delete(params[:id]))
17
26
  end
18
27
 
19
28
  private
20
29
 
30
+ # Load packages html content
31
+ # The firstly: check status for action add, update, delete package
32
+ # render to html content for successful
33
+ # render to json content for error
21
34
  def load_content_package(check)
22
35
  if check['success']
23
36
  @packages = Package.all
@@ -1,11 +1,13 @@
1
1
  class ExpressTranslate::BaseController < ActionController::Base
2
2
  include ExpressTranslate
3
-
3
+
4
+ # Check login status by cookie
4
5
  def check_authentication
5
6
  token_store = getCookie(request.headers["HTTP_COOKIE"], "token")
6
7
  return (token_store.present? and Account.find_by_token(token_store).present?)
7
8
  end
8
9
 
10
+ # Get cookie form header action
9
11
  def getCookie(string, key)
10
12
  if string.present?
11
13
  string.split(";").each do |cookie|
@@ -1,9 +1,12 @@
1
1
  class ExpressTranslate::FilesController < ExpressTranslate::BaseController
2
+
3
+ # Require or include Libraries
2
4
  before_filter :check_login_files
3
5
  require 'redis'
4
6
  require 'json'
5
7
  require 'csv'
6
8
 
9
+ # Export to csv file form redis database
7
10
  def export
8
11
  respond_to do |format|
9
12
  format.csv do
@@ -14,6 +17,8 @@ class ExpressTranslate::FilesController < ExpressTranslate::BaseController
14
17
  end
15
18
  end
16
19
 
20
+ # Export form csv file to redis database
21
+ # Upload csv file
17
22
  def import
18
23
  filename = Rails.root.join('public', "last_import.csv")
19
24
  File.open(filename, 'wb') do |file|
@@ -23,8 +28,18 @@ class ExpressTranslate::FilesController < ExpressTranslate::BaseController
23
28
  render text: "Uploaded"
24
29
  end
25
30
 
31
+ def import_yml
32
+ filename = Rails.root.join('public', "last_import.yml")
33
+ File.open(filename, 'wb') do |file|
34
+ file.write(params[:file_yml].read)
35
+ end
36
+ import_yml_file(File.open(filename, 'r').path)
37
+ render text: "Uploaded"
38
+ end
39
+
26
40
  private
27
41
 
42
+ # Check login status when excute with files
28
43
  def check_login_files
29
44
  redirect_to controller: "account", action: "login" if !check_authentication
30
45
  end
@@ -42,7 +57,7 @@ class ExpressTranslate::FilesController < ExpressTranslate::BaseController
42
57
  csv_string
43
58
  end
44
59
 
45
- # Import files
60
+ # Import csv file
46
61
  def import_csv(path)
47
62
  @before_row = []
48
63
  @last_package = {}
@@ -58,6 +73,14 @@ class ExpressTranslate::FilesController < ExpressTranslate::BaseController
58
73
  end
59
74
  end
60
75
 
76
+ # Import yml file
77
+ def import_yml_file(path)
78
+ data = YAML.load_file(path)
79
+ data.each do |lang|
80
+ # puts lang
81
+ end
82
+ end
83
+
61
84
  # Processing
62
85
  def exp_pack(csv)
63
86
  csv << [@package["id"], @package["text"]]
@@ -74,6 +97,7 @@ class ExpressTranslate::FilesController < ExpressTranslate::BaseController
74
97
  csv << []
75
98
  end
76
99
 
100
+ # Export row
77
101
  def exp_rows(csv)
78
102
  all_of_origin = LanguageDetail.info(@origin_lang).all
79
103
  all_of_origin.each_with_index do |item, index|
@@ -81,6 +105,7 @@ class ExpressTranslate::FilesController < ExpressTranslate::BaseController
81
105
  end
82
106
  end
83
107
 
108
+ # Export header row for file
84
109
  def exp_header(csv)
85
110
  header = ["No.", "Key", @origin_lang["text"]]
86
111
  @package["language"].each do |lang|
@@ -89,6 +114,7 @@ class ExpressTranslate::FilesController < ExpressTranslate::BaseController
89
114
  csv << header
90
115
  end
91
116
 
117
+ # Export data with row data
92
118
  def exp_row(csv, item, index)
93
119
  row = ["#{index+1}", item["code"], item["text"]]
94
120
  @package["language"].each do |lang|
@@ -100,6 +126,7 @@ class ExpressTranslate::FilesController < ExpressTranslate::BaseController
100
126
  csv << row
101
127
  end
102
128
 
129
+ # Add row when import file
103
130
  def add_row(row)
104
131
  if row[0].to_i > 0
105
132
  index_col = 0
@@ -110,6 +137,7 @@ class ExpressTranslate::FilesController < ExpressTranslate::BaseController
110
137
  end
111
138
  end
112
139
 
140
+ # Add details of row when import file
113
141
  def add_row_detail(row, cell_header, index_col)
114
142
  if row[index_col].present?
115
143
  lang_id = lang_text_to_id(cell_header)
@@ -117,6 +145,7 @@ class ExpressTranslate::FilesController < ExpressTranslate::BaseController
117
145
  end
118
146
  end
119
147
 
148
+ # Set header row for package
120
149
  def is_header_row(row)
121
150
  packages = Package.all.select{|pack| pack["id"] == @before_row[0]}
122
151
  if packages.count > 0
@@ -127,6 +156,7 @@ class ExpressTranslate::FilesController < ExpressTranslate::BaseController
127
156
  end
128
157
  end
129
158
 
159
+ # Clear old data in language
130
160
  def clear_lang(pack_id, row_header)
131
161
  row_header.each do |cell_header|
132
162
  lang_id = lang_text_to_id(cell_header)
@@ -134,6 +164,7 @@ class ExpressTranslate::FilesController < ExpressTranslate::BaseController
134
164
  end
135
165
  end
136
166
 
167
+ # Detect language id with text language
137
168
  def lang_text_to_id(text)
138
169
  languages = YAML.load_file("#{ExpressTranslate.root}/config/languages.yml")
139
170
  languages.each do |lang|
@@ -1,20 +1,25 @@
1
1
  class ExpressTranslate::OptionsController < ExpressTranslate::BaseController
2
2
 
3
+ # Check login status for controller
3
4
  before_filter :check_login
4
5
 
6
+ # Require and include Libraries
5
7
  require 'redis'
6
8
  require 'json'
7
9
  require 'csv'
8
-
9
10
  include ExpressTranslate
10
11
 
12
+ # Show all packages for client (html code) index page
13
+ # Get all packages
11
14
  def index
12
- # ExpressTranslate.reset
13
- # ExpressTranslate.seeds
14
15
  @packages = Package.all
15
16
  render :action => :index, layout: 'express_translate/translate'
16
17
  end
17
-
18
+
19
+ # Show all languages for client (html code) index page
20
+ # Get all languages of package ID
21
+ # Get origin languages
22
+ # Get max count of percent translate
18
23
  def languages
19
24
  @selects = YAML.load_file("#{ExpressTranslate.root}/config/languages.yml")
20
25
  origin = Language.get_origin(params[:packages])
@@ -25,6 +30,11 @@ class ExpressTranslate::OptionsController < ExpressTranslate::BaseController
25
30
  render :action => :languages, layout: 'express_translate/translate'
26
31
  end
27
32
 
33
+
34
+ # Show all codes for client (html code) index page
35
+ # Get all codes of package ID and language ID
36
+ # Get origin language
37
+ # Get language for show
28
38
  def language_detail
29
39
  @languages = Package.find(params[:package])['language']
30
40
  @origin_lang = Language.get_origin(params[:package])
@@ -34,7 +44,8 @@ class ExpressTranslate::OptionsController < ExpressTranslate::BaseController
34
44
  end
35
45
 
36
46
  private
37
-
47
+
48
+ # Check login status for controller
38
49
  def check_login
39
50
  if !check_authentication
40
51
  redirect_to controller: "account", action: "login"
@@ -1,11 +1,12 @@
1
1
  class ExpressTranslate::ServicesController < ExpressTranslate::BaseController
2
2
 
3
+ # Require and include Libraries
3
4
  require 'redis'
4
-
5
5
  include ExpressTranslate
6
6
 
7
7
  # SERVICE
8
8
 
9
+ # Get all languages in package with json data
9
10
  def service_languages
10
11
  respond_to do |format|
11
12
  format.json do
@@ -15,6 +16,7 @@ class ExpressTranslate::ServicesController < ExpressTranslate::BaseController
15
16
  end
16
17
  end
17
18
 
19
+ # Get all data of language with json data
18
20
  def service_language
19
21
  respond_to do |format|
20
22
  format.json do
@@ -31,6 +33,12 @@ class ExpressTranslate::ServicesController < ExpressTranslate::BaseController
31
33
 
32
34
  private
33
35
 
36
+ # Convert redis database to json data with key
37
+ # Nnew arrayfor store value level key
38
+ # ex: en.home.hello = "Hello"
39
+ # ["home" => {"hello"=> "Hello"}, {"hello"=> "Hello"}]
40
+ # Set data for array
41
+ # Support multi level keys
34
42
  def service_language_detail(key)
35
43
  path = key.split(".")
36
44
  i = path.count - 1
@@ -44,6 +52,17 @@ class ExpressTranslate::ServicesController < ExpressTranslate::BaseController
44
52
  extendObjects(@data, items[0])
45
53
  end
46
54
 
55
+ # Function for convert redis database to json data (support multi level)
56
+ # Check type of old data
57
+ # String: extend value
58
+ # Object: add attribute for object
59
+ # Nil: add attribute for object
60
+ # If type of old and new data is Object
61
+ # Extend new object for old object
62
+ # Description:
63
+ # obj1: old object
64
+ # obj2: new object
65
+ # Return: Object
47
66
  def extendObjects(obj1, obj2)
48
67
  if obj1.is_a?(String)
49
68
  if obj2.is_a?(String)
@@ -1,5 +1,5 @@
1
1
  <% @languages.each do |lang| %>
2
- <a class="lang origin_<%= lang['is_origin'] %>" href="/express_translate/language/<%= params[:packages] %>/<%= lang['id'] %>">
2
+ <a class="lang add_files origin_<%= lang['is_origin'] %>" href="/express_translate/language/<%= params[:packages] %>/<%= lang['id'] %>">
3
3
  <span><%= lang['text'].slice(0,1).capitalize + lang['text'].slice(1..-1) %></span>
4
4
  <p><%= (@LanguageDetail.info(lang).all.count.to_f / (@max == 0 ? 1 : @max) * 100).to_i %>%</p>
5
5
  <h5><%= @LanguageDetail.info(lang).all.count %>/<%= @max %></h5>
@@ -172,7 +172,75 @@
172
172
  $(".json").click(function(event) {
173
173
  event.preventDefault();
174
174
  openInNewTab(window.location.origin + "/express_translate/service/" + $(event.target).attr("data") + ".json")
175
- })
175
+ });
176
+
177
+ var obj = $(".lang");
178
+
179
+ obj.on('dragenter', function (e){
180
+ e.stopPropagation();
181
+ e.preventDefault();
182
+ $(this).removeClass("add_files");
183
+ });
184
+
185
+ obj.on('dragover', function (e){
186
+ e.stopPropagation();
187
+ e.preventDefault();
188
+ $(this).addClass("add_files");
189
+ });
190
+
191
+ obj.on('drop', function (e){
192
+ $(this).removeClass("add_files");
193
+ e.preventDefault();
194
+ var files = e.originalEvent.dataTransfer.files;
195
+ handleFileUpload(files, obj);
196
+ });
197
+
198
+ obj.on('dragleave', function (e) {
199
+ $(this).removeClass("add_files");
200
+ });
201
+
202
+ function handleFileUpload(files, obj) {
203
+ for (var i = 0; i < files.length; i++) {
204
+ var fd = new FormData();
205
+ fd.append('file_yml', files[i]);
206
+ sendFileToServer(fd);
207
+ }
208
+ }
209
+
210
+ function sendFileToServer(formData) {
211
+ var uploadURL ="/express_translate/import_yml";
212
+ var extraData ={};
213
+ var jqXHR = $.ajax({
214
+ xhr: function() {
215
+ var xhrobj = $.ajaxSettings.xhr();
216
+ if (xhrobj.upload) {
217
+ xhrobj.upload.addEventListener('progress', function(event) {
218
+ var percent = 0;
219
+ var position = event.loaded || event.position;
220
+ var total = event.total;
221
+ if (event.lengthComputable) {
222
+ percent = Math.ceil(position / total * 100);
223
+ }
224
+ }, false);
225
+ }
226
+ return xhrobj;
227
+ },
228
+ url: uploadURL,
229
+ type: "POST",
230
+ contentType:false,
231
+ processData: false,
232
+ cache: false,
233
+ data: formData,
234
+ success: function(data){
235
+ console.log(data)
236
+ $(".import").html("Import");
237
+ setTimeout(function(){
238
+ // window.location.reload();
239
+ }, 100);
240
+ }
241
+ });
242
+ }
243
+
176
244
  }
177
245
 
178
246
  runJavascriptsLanguage();
data/config/routes.rb CHANGED
@@ -6,6 +6,7 @@ Rails.application.routes.draw do
6
6
 
7
7
  get "/export" => "express_translate/files#export"
8
8
  post "/import" => "express_translate/files#import"
9
+ post "/import_yml" => "express_translate/files#import_yml"
9
10
 
10
11
  get "/login" => "express_translate/account#login"
11
12
  post "/login" => "express_translate/account#login_check"
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "express_translate"
8
- s.version = "1.0"
8
+ s.version = "1.0.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Karl"]
@@ -147,7 +147,6 @@ Gem::Specification.new do |s|
147
147
  "app/views/express_translate/ajax/packages/_content_index.html.erb",
148
148
  "app/views/express_translate/ajax/packages/package_update.html.erb",
149
149
  "app/views/express_translate/options/.DS_Store",
150
- "app/views/express_translate/options/_language.html.erb",
151
150
  "app/views/express_translate/options/index.html.erb",
152
151
  "app/views/express_translate/options/language_detail.html.erb",
153
152
  "app/views/express_translate/options/languages.html.erb",
@@ -1,3 +1,4 @@
1
+ # Class in my gem
1
2
  require 'express_translate/express_translate_model'
2
3
  require 'express_translate/database_management'
3
4
  require 'express_translate/account_management'
@@ -13,6 +14,7 @@ require 'seeds/accounts_seed'
13
14
  # Lib
14
15
  require 'redis'
15
16
 
17
+ # Main module for my gem
16
18
  module ExpressTranslate
17
19
 
18
20
  class << self; attr_accessor :package, :language, :url end
@@ -21,6 +23,8 @@ module ExpressTranslate
21
23
  @language = ""
22
24
  @url = ""
23
25
 
26
+ # Change language locals for I18N
27
+ # lang: is a code of language want to change for backend
24
28
  def language(lang)
25
29
  I18n.locale = "#{YAML.load_file(Rails.root.to_s + '/config/express_translate.yml')['package']['id']}#{lang}"
26
30
  end
@@ -51,9 +55,10 @@ module ExpressTranslate
51
55
  end
52
56
 
53
57
  # def initialize
54
- #
55
- # end
58
+ #
59
+ # end
56
60
 
61
+ # Setup My gem
57
62
  def self.setup
58
63
  yield self
59
64
  end
@@ -4,21 +4,24 @@ module ExpressTranslate
4
4
  # password:
5
5
  require "base64"
6
6
 
7
- class Account < RLangModel
7
+ class Account < ExpressTranslateModel
8
8
  @name = "account"
9
9
  @primary = "username"
10
10
  @attr = "password", "token"
11
11
 
12
+ # Modify account when add (Encoding password)
12
13
  def self.add(params)
13
14
  params[:password] = self.encoding(params[:password])
14
15
  super(params)
15
16
  end
16
17
 
18
+ # Find account with token, check status login bt cookie
17
19
  def self.find_by_token(token)
18
20
  _find = self.all.select{|s| (s["token"] == token)}
19
21
  return _find.count > 0 ? _find[0] : nil
20
22
  end
21
23
 
24
+ # Ecoding password
22
25
  def self.encoding(string)
23
26
  encode = Base64.encode64(string)
24
27
  encode = encode.split("=").join()
@@ -4,16 +4,24 @@ module ExpressTranslate
4
4
  # ......
5
5
  # ......
6
6
 
7
- class RLangModel
8
-
7
+ class ExpressTranslateModel
8
+ # Attributes for table
9
9
  class << self; attr_accessor :name, :primary, :has_many, :attr, :unique end
10
10
  # attr_accessor :
11
+
12
+ # Config for item
13
+ # List table relationship
11
14
  @has_many = []
15
+ # Table name
12
16
  @name = "express_translate"
17
+ # Primary key for table
13
18
  @primary = "id"
19
+ # All attributes
14
20
  @attr = ""
21
+ # @unique for options check when add data
15
22
  @unique = ""
16
23
 
24
+ # get all item in table
17
25
  def self.all
18
26
  data = Database.get(@name)
19
27
  data = data.nil? ? [] : (data.is_a?(Array) ? data : [].push(data))
@@ -22,14 +30,21 @@ module ExpressTranslate
22
30
  data
23
31
  end
24
32
 
33
+ # Save obj to redis database
34
+ # Synchronize data to redis database
25
35
  def self.save(obj)
26
36
  Database.set(@name, self.protect_attr_items(obj))
27
37
  end
28
38
 
39
+ # Clear all data of table
29
40
  def self.destroy
30
41
  Database.del(@name)
31
42
  end
32
43
 
44
+ # Add item with params
45
+ # Check primary key for present
46
+ # Check unique data
47
+ # Return messages
33
48
  def self.add(params)
34
49
  if JSON.parse(params.to_json)[@primary] == ""
35
50
  return self.primary_nil
@@ -43,13 +58,19 @@ module ExpressTranslate
43
58
  end
44
59
  end
45
60
 
61
+ # Delete item by id
62
+ # Remove item with primary key
46
63
  def self.delete(id)
47
64
  all = self.all
48
65
  count_before = all.count
49
66
  all.reject!{|package| package[@primary] == id}
50
67
  return self.change_data(count_before, all.count, all)
51
68
  end
52
-
69
+
70
+ # Update item by params
71
+ # Remove old item
72
+ # Add new item with exsits data
73
+ # Return json data for status
53
74
  def self.update(params)
54
75
  all = self.all
55
76
  count_before = all.count
@@ -59,6 +80,9 @@ module ExpressTranslate
59
80
  return self.change_data(count_before, count_after, all)
60
81
  end
61
82
 
83
+ # Find item by code
84
+ # Select item with primary key
85
+ # return limit items selected
62
86
  def self.find(code)
63
87
  data = self.all
64
88
  search = data.select{|package| package[@primary] == code}
@@ -72,6 +96,7 @@ module ExpressTranslate
72
96
 
73
97
  private
74
98
 
99
+ # Check duplicate primary key or list unique
75
100
  def self.check_unique_allow_add(item)
76
101
  if @unique.present?
77
102
  @unique = @unique.is_a?(Array) ? @unique : [@unique]
@@ -86,6 +111,7 @@ module ExpressTranslate
86
111
  end
87
112
  end
88
113
 
114
+ # Check attributes for allow store for list items
89
115
  def self.protect_attr_items(items)
90
116
  items_copy = []
91
117
  items.each do |item|
@@ -94,6 +120,7 @@ module ExpressTranslate
94
120
  return items_copy
95
121
  end
96
122
 
123
+ # Check attributes for allow store only one item
97
124
  def self.protect_attr(item)
98
125
  if item.to_json == ""
99
126
  puts item.inspect
@@ -111,12 +138,14 @@ module ExpressTranslate
111
138
  return item_copy
112
139
  end
113
140
 
141
+ # Add relationship for model for item list
114
142
  def self.add_has_many(items)
115
143
  items.each do |item|
116
144
  self.add_has_many_item(item)
117
145
  end
118
146
  end
119
147
 
148
+ # Add relationship for model only one item
120
149
  def self.add_has_many_item(item)
121
150
  if @has_many.present?
122
151
  @has_many = @has_many.is_a?(Array) ? @has_many : [@has_many]
@@ -128,8 +157,9 @@ module ExpressTranslate
128
157
  end
129
158
  end
130
159
 
131
- # Return
160
+ # Return messages
132
161
 
162
+ # Messages for change data
133
163
  def self.change_data(before, after, data)
134
164
  if before > after
135
165
  self.save(data)
@@ -138,19 +168,23 @@ module ExpressTranslate
138
168
  return self.notfound
139
169
  end
140
170
  end
141
-
171
+
172
+ # Messages for not found data
142
173
  def self.notfound
143
174
  return {"success"=> false, "error"=> "Data is not found!"}
144
175
  end
145
176
 
177
+ # Messages for duplicate primary key
146
178
  def self.primary_key
147
179
  return {"success" => false, "error" => "Duplicate primary key"}
148
180
  end
149
181
 
182
+ # Messages for primary key is nil
150
183
  def self.primary_nil
151
184
  return {"success" => false, "error" => "Primary data is nil!"}
152
185
  end
153
186
 
187
+ # Messages for successful
154
188
  def self.successful(data)
155
189
  return {"success" => true, "#{@name}" => data}
156
190
  end
@@ -3,7 +3,7 @@ module ExpressTranslate
3
3
  # code: no_one
4
4
  # text: Number one....
5
5
 
6
- class LanguageDetail < RLangModel
6
+ class LanguageDetail < ExpressTranslateModel
7
7
  @name = "lang_package_id"
8
8
  @primary = "code"
9
9
  @attr = "text"
@@ -4,16 +4,18 @@ module ExpressTranslate
4
4
  # text: English
5
5
  # packages: be
6
6
 
7
- class Language < RLangModel
7
+ class Language < ExpressTranslateModel
8
8
  @name = "languages"
9
9
  @primary = "id"
10
10
  @attr = "text", "packages", "is_origin"
11
11
  @unique = "id", "packages"
12
12
 
13
+ # Remove package by ID package
13
14
  def self.delete_by_id_packages(id, packages)
14
15
  return self.reject_with_id_packages(id, packages)
15
16
  end
16
17
 
18
+ # Update package by item id and ID package
17
19
  def self.update_by_id_packages(old_id, packages, params)
18
20
  all = self.all
19
21
  return self.primary_key if self.get_with_id_packages(params[:id], packages).present?
@@ -21,6 +23,7 @@ module ExpressTranslate
21
23
  return self.check_update_data(old_id, packages, params, self.add(params))
22
24
  end
23
25
 
26
+ # Set origin language id and packages id
24
27
  def self.set_origin(id, packages)
25
28
  all = self.all
26
29
  origin_old = self.get_origin(packages)
@@ -33,6 +36,7 @@ module ExpressTranslate
33
36
  return self.notfound
34
37
  end
35
38
 
39
+ # Get origin language id and packages id
36
40
  def self.get_origin(packages)
37
41
  origin = self.all.select{|lang| (lang["packages"] == packages and lang["is_origin"] == true)}
38
42
  return origin[0] if origin.count > 0
@@ -41,6 +45,7 @@ module ExpressTranslate
41
45
 
42
46
  private
43
47
 
48
+ # Remove Language by ID and Package ID
44
49
  def self.reject_with_id_packages(id, packages)
45
50
  all_reject = self.all
46
51
  count_before = all_reject.count
@@ -48,6 +53,7 @@ module ExpressTranslate
48
53
  return self.change_data(count_before, all_reject.count, all_reject)
49
54
  end
50
55
 
56
+ # Update status origin for language
51
57
  def self.update_origin_only(id, packages, is_true)
52
58
  this = self.get_with_id_packages(id, packages)
53
59
  this["is_origin"] = is_true
@@ -3,7 +3,7 @@ module ExpressTranslate
3
3
  # id: be
4
4
  # text: Backend
5
5
 
6
- class Package < RLangModel
6
+ class Package < ExpressTranslateModel
7
7
  @name = "packages"
8
8
  @primary = "id"
9
9
  @attr = "text"
@@ -8,10 +8,12 @@ module ExpressTranslate
8
8
 
9
9
  include ExpressTranslate
10
10
 
11
+ # Copy config file for my gem
11
12
  def create_file_config
12
13
  template "config/express_translate.yml", "config/express_translate.yml"
13
14
  end
14
15
 
16
+ # Seed data for redis database
15
17
  def seeds_data
16
18
  ExpressTranslate.seeds
17
19
  end
@@ -2,6 +2,8 @@ module ExpressTranslate
2
2
  class ResetAccountGenerator < Rails::Generators::Base
3
3
  include ExpressTranslate
4
4
 
5
+ # Reset all account
6
+ # Synchronize account with config file
5
7
  def reset_data
6
8
  Database.redis.del("account")
7
9
  Account.seed
@@ -1,7 +1,8 @@
1
1
  module ExpressTranslate
2
2
  class ResetGenerator < Rails::Generators::Base
3
3
  include ExpressTranslate
4
-
4
+
5
+ # Clear all data for redis database
5
6
  def reset_data
6
7
  ExpressTranslate.reset
7
8
  puts "Reset successful!"
@@ -2,6 +2,7 @@ module ExpressTranslate
2
2
  class SeedGenerator < Rails::Generators::Base
3
3
  include ExpressTranslate
4
4
 
5
+ # Seed data for redis database
5
6
  def seed_data
6
7
  ExpressTranslate.seeds
7
8
  puts "Seed data is successful!"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: express_translate
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.0'
4
+ version: 1.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -261,7 +261,6 @@ files:
261
261
  - app/views/express_translate/ajax/packages/_content_index.html.erb
262
262
  - app/views/express_translate/ajax/packages/package_update.html.erb
263
263
  - app/views/express_translate/options/.DS_Store
264
- - app/views/express_translate/options/_language.html.erb
265
264
  - app/views/express_translate/options/index.html.erb
266
265
  - app/views/express_translate/options/language_detail.html.erb
267
266
  - app/views/express_translate/options/languages.html.erb
@@ -356,7 +355,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
356
355
  version: '0'
357
356
  segments:
358
357
  - 0
359
- hash: 4372043879744402579
358
+ hash: -3049154278621812228
360
359
  required_rubygems_version: !ruby/object:Gem::Requirement
361
360
  none: false
362
361
  requirements:
@@ -1,28 +0,0 @@
1
- <ul>
2
- <!-- <% en_list.each do |key,value| %>
3
- <% if value.class != Array %>
4
- <li key='<%= key %>'>
5
- <%= @trans[key] %>
6
- <input type='text' value='<%= @trans[key] %>' readonly='readonly' class='translate-box hidden' />
7
- </li>
8
- <% else %>
9
- <li>
10
- <ol>
11
- <% value.each_with_index do |from_text_section, index| %>
12
- <%
13
- from_text_section = from_text_section.to_s
14
- line_size = 100
15
- # this is needed so the controller doesn't freak out when there is no translations found
16
- # for this element yet...
17
- to_text = Array.new if to_text.blank?
18
- %>
19
- <li key='<%= key %>[<%=index%>]'>
20
- <%= @trans[key][index] if @trans[key] %>
21
- <input type='text' value='<%= trans[key] ? [index] : '' %>' readonly='readonly' class='translate-box hidden' />
22
- </li>
23
- <% end %>
24
- </ol>
25
- </li>
26
- <% end %>
27
- <% end %> -->
28
- </ul>