rails_data 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +165 -0
  3. data/README.md +41 -0
  4. data/Rakefile +37 -0
  5. data/app/assets/config/rails_data_manifest.js +1 -0
  6. data/app/assets/javascripts/channels/done.js +10 -0
  7. data/app/assets/javascripts/controllers/the_data_admin/data_lists/edit.js +1 -0
  8. data/app/assets/javascripts/controllers/the_data_admin/data_lists/new.js +1 -0
  9. data/app/assets/javascripts/controllers/the_data_admin/table_lists/index.js +10 -0
  10. data/app/channels/done_channel.rb +7 -0
  11. data/app/channels/rails_data_connection.rb +29 -0
  12. data/app/controllers/rails_data_admin/base_controller.rb +3 -0
  13. data/app/controllers/rails_data_admin/data_lists_controller.rb +75 -0
  14. data/app/controllers/rails_data_admin/data_records_controller.rb +71 -0
  15. data/app/controllers/rails_data_admin/record_lists_controller.rb +105 -0
  16. data/app/controllers/rails_data_admin/table_lists_controller.rb +115 -0
  17. data/app/helpers/data_records_helper.rb +2 -0
  18. data/app/helpers/rails_data_helper.rb +21 -0
  19. data/app/jobs/table_job.rb +11 -0
  20. data/app/mailers/report_finish_mailer.rb +17 -0
  21. data/app/models/rails_data/concerns/data_cache_service.rb +26 -0
  22. data/app/models/rails_data/concerns/data_export_helper.rb +55 -0
  23. data/app/models/rails_data/concerns/data_import_helper.rb +40 -0
  24. data/app/models/rails_data/concerns/data_import_service.rb +35 -0
  25. data/app/models/rails_data/data_list.rb +47 -0
  26. data/app/models/rails_data/data_lists/data_export.rb +11 -0
  27. data/app/models/rails_data/data_lists/data_import.rb +11 -0
  28. data/app/models/rails_data/data_lists/data_record.rb +18 -0
  29. data/app/models/rails_data/export_services/csv_export_service.rb +24 -0
  30. data/app/models/rails_data/export_services/pdf_export_service.rb +74 -0
  31. data/app/models/rails_data/export_services/xlsx_export_service.rb +51 -0
  32. data/app/models/rails_data/record_list.rb +69 -0
  33. data/app/models/rails_data/table_item.rb +5 -0
  34. data/app/models/rails_data/table_list.rb +47 -0
  35. data/app/pdfs/concerns/pdf_page_helper.rb +37 -0
  36. data/app/pdfs/concerns/pdf_table_helper.rb +107 -0
  37. data/app/pdfs/concerns/pdf_text_helper.rb +18 -0
  38. data/app/pdfs/rails_data_pdf.rb +32 -0
  39. data/app/views/rails_data_admin/base/_nav.html.erb +9 -0
  40. data/app/views/rails_data_admin/data_lists/_item_form.html.erb +15 -0
  41. data/app/views/rails_data_admin/data_lists/add_item.js.erb +4 -0
  42. data/app/views/rails_data_admin/data_lists/edit.html.erb +33 -0
  43. data/app/views/rails_data_admin/data_lists/index.html.erb +43 -0
  44. data/app/views/rails_data_admin/data_lists/new.html.erb +17 -0
  45. data/app/views/rails_data_admin/data_lists/remove_item.js.erb +1 -0
  46. data/app/views/rails_data_admin/data_lists/reportable.html.erb +31 -0
  47. data/app/views/rails_data_admin/data_lists/show.html.erb +20 -0
  48. data/app/views/rails_data_admin/data_records/_item_form.html.erb +15 -0
  49. data/app/views/rails_data_admin/data_records/add_item.js.erb +4 -0
  50. data/app/views/rails_data_admin/data_records/edit.html.erb +33 -0
  51. data/app/views/rails_data_admin/data_records/index.html.erb +57 -0
  52. data/app/views/rails_data_admin/data_records/new.html.erb +16 -0
  53. data/app/views/rails_data_admin/data_records/remove_item.js.erb +1 -0
  54. data/app/views/rails_data_admin/data_records/reportable.html.erb +31 -0
  55. data/app/views/rails_data_admin/data_records/show.html.erb +20 -0
  56. data/app/views/rails_data_admin/record_lists/_edit_columns.html.erb +19 -0
  57. data/app/views/rails_data_admin/record_lists/_edit_table.erb +44 -0
  58. data/app/views/rails_data_admin/record_lists/_index.html.erb +22 -0
  59. data/app/views/rails_data_admin/record_lists/_search_form.html.erb +9 -0
  60. data/app/views/rails_data_admin/record_lists/_show.html.erb +16 -0
  61. data/app/views/rails_data_admin/record_lists/_table.html.erb +12 -0
  62. data/app/views/rails_data_admin/record_lists/edit.html.erb +19 -0
  63. data/app/views/rails_data_admin/record_lists/edit_columns.html.erb +30 -0
  64. data/app/views/rails_data_admin/record_lists/edit_columns.js.erb +9 -0
  65. data/app/views/rails_data_admin/record_lists/find.js.erb +8 -0
  66. data/app/views/rails_data_admin/record_lists/index.html.erb +52 -0
  67. data/app/views/rails_data_admin/record_lists/new.html.erb +19 -0
  68. data/app/views/rails_data_admin/record_lists/show.html.erb +19 -0
  69. data/app/views/rails_data_admin/record_lists/show.js.erb +8 -0
  70. data/app/views/rails_data_admin/record_lists/update_columns.js.erb +8 -0
  71. data/app/views/rails_data_admin/table_lists/_import.html.erb +17 -0
  72. data/app/views/rails_data_admin/table_lists/_index.html.erb +22 -0
  73. data/app/views/rails_data_admin/table_lists/_process.html.erb +5 -0
  74. data/app/views/rails_data_admin/table_lists/_show.html.erb +10 -0
  75. data/app/views/rails_data_admin/table_lists/_table.html.erb +38 -0
  76. data/app/views/rails_data_admin/table_lists/create_import.js.erb +8 -0
  77. data/app/views/rails_data_admin/table_lists/edit.html.erb +19 -0
  78. data/app/views/rails_data_admin/table_lists/find.js.erb +2 -0
  79. data/app/views/rails_data_admin/table_lists/index.html.erb +55 -0
  80. data/app/views/rails_data_admin/table_lists/new.html.erb +19 -0
  81. data/app/views/rails_data_admin/table_lists/new_import.js.erb +30 -0
  82. data/app/views/rails_data_admin/table_lists/run.js.erb +10 -0
  83. data/app/views/rails_data_admin/table_lists/show.html.erb +11 -0
  84. data/app/views/report_finish_mailer/finish_notify.text.erb +5 -0
  85. data/config/initializers/the_data.rb +4 -0
  86. data/config/locales/en.yml +10 -0
  87. data/config/locales/zh.yml +10 -0
  88. data/config/routes.rb +35 -0
  89. data/db/migrate/20150618053929_create_report_lists.rb +51 -0
  90. data/lib/rails_data/config.rb +23 -0
  91. data/lib/rails_data/engine.rb +18 -0
  92. data/lib/rails_data/export.rb +52 -0
  93. data/lib/rails_data/import.rb +42 -0
  94. data/lib/rails_data/record.rb +42 -0
  95. data/lib/rails_data/version.rb +3 -0
  96. data/lib/rails_data.rb +5 -0
  97. data/test/controllers/data_records_controller_test.rb +48 -0
  98. data/test/controllers/rails_data_admin/report_lists_controller_test.rb +49 -0
  99. data/test/controllers/rails_data_admin/table_lists_controller_test.rb +49 -0
  100. data/test/factories/combines.rb +7 -0
  101. data/test/factories/report_lists.rb +14 -0
  102. data/test/factories/table_items.rb +6 -0
  103. data/test/factories/table_lists.rb +6 -0
  104. data/test/integration/navigation_test.rb +10 -0
  105. data/test/models/data_list_test.rb +10 -0
  106. data/test/system/data_records_test.rb +41 -0
  107. data/test/test_helper.rb +21 -0
  108. data/test/the_data_test.rb +7 -0
  109. metadata +247 -0
@@ -0,0 +1,19 @@
1
+ <div class="ui segment breadcrumb">
2
+ <%= link_to 'Back', data_record_record_lists_path(@data_record), class: 'section' %>
3
+ <div class="divider"> / </div>
4
+ <div class="active section">Edit</div>
5
+ </div>
6
+
7
+ <div class="ui segment">
8
+ <%= default_form_with model: @record_list, url: data_record_record_list_path(@data_record) do |f| %>
9
+ <% @record_list.parameters.each do |k, v| %>
10
+ <div class="inline fields">
11
+ <label class="six wide field"><%= k.to_s.titleize %>:</label>
12
+ <div class="six wide field">
13
+ <%= text_field_tag :"record_list[parameters][#{k}]", v, as: @data_record.parameters[k].to_sym %>
14
+ </div>
15
+ </div>
16
+ <% end %>
17
+ <%= f.submit %>
18
+ <% end %>
19
+ </div>
@@ -0,0 +1,30 @@
1
+ <div class="ui segment breadcrumb">
2
+ <%= link_to 'Back', data_record_record_lists_path(@data_record), class: 'section' %>
3
+ <div class="divider"> / </div>
4
+ <div class="active section">Edit</div>
5
+ </div>
6
+
7
+ <div class="ui segment">
8
+ <%= default_form_with url: columns_data_record_record_list_path(@data_record), method: :patch do |f| %>
9
+ <% @record_list.columns.each do |k, v| %>
10
+ <% if TheData.config.mapping[@data_record.columns[k.to_sym].to_sym][:input] == 'array' %>
11
+ <div class="inline fields">
12
+ <label class="six wide field"><%= k.to_s.titleize %>:</label>
13
+ <% v.each_with_index do |_value, _index| %>
14
+ <% _value.each do |_k, _v| %>
15
+ <%= text_field_tag "columns[#{k}][][#{_k}]", _v %>
16
+ <% end %>
17
+ <% end %>
18
+ </div>
19
+ <% else %>
20
+ <div class="inline fields">
21
+ <label class="six wide field"><%= k.to_s.titleize %>:</label>
22
+ <div class="six wide field">
23
+ <%= text_field_tag :"columns[#{k}]", v, as: @data_record.columns[k.to_sym] %>
24
+ </div>
25
+ </div>
26
+ <% end %>
27
+ <% end %>
28
+ <%= f.submit %>
29
+ <% end %>
30
+ </div>
@@ -0,0 +1,9 @@
1
+ if ($('.ui.modals').length === 0) {
2
+ $('body').append('<%= j(render 'edit_columns') %>');
3
+ } else {
4
+ $('.ui.modals').html('<%= j(render 'edit_columns') %>');
5
+ }
6
+
7
+
8
+ $('.ui.modal').modal('setting', {autofocus: false}).modal('show');
9
+ $('#columns_main').dropdown();
@@ -0,0 +1,8 @@
1
+ if ($('.ui.modals').length === 0) {
2
+ $('body').append('<%= j(render 'show') %>');
3
+ } else {
4
+ $('.ui.modals').html('<%= j(render 'show') %>');
5
+ }
6
+
7
+
8
+ $('.ui.modal').modal('setting', {autofocus: false}).modal('show');
@@ -0,0 +1,52 @@
1
+ <ul class="ui segment breadcrumb">
2
+ <li class="section"><%= link_to 'back', data_records_path %></li>
3
+ <li class="divider">/</li>
4
+ <li class="section">Table lists</li>
5
+ </ul>
6
+
7
+ <div class="ui top attached borderless menu">
8
+ <div class="item header">Table List</div>
9
+ <div class="right menu">
10
+ <div class="item">
11
+ <%= link_to '新建', new_data_record_record_list_path(@data_record), class: 'ui teal button' %>
12
+ </div>
13
+ </div>
14
+ </div>
15
+
16
+ <div class="ui attached segment">
17
+ <%= render 'search_form' %>
18
+ </div>
19
+
20
+ <table class="ui bottom attached table">
21
+ <thead>
22
+ <tr>
23
+ <th class="one wide">ID</th>
24
+ <th class="two wide">Parameters</th>
25
+ <th>Columns</th>
26
+ <th>Export</th>
27
+ <th class="three wide"></th>
28
+ </tr>
29
+ </thead>
30
+
31
+ <tbody>
32
+ <% @record_lists.each do |record_list| %>
33
+ <tr>
34
+ <td><%= record_list.id %></td>
35
+ <td><%= simple_format_hash(record_list.parameters) %></td>
36
+ <td><%= simple_format_hash(record_list.columns) %></td>
37
+ <td class="ui labels">
38
+ <%= link_to 'pdf', data_record_record_list_path(@data_record, record_list, format: 'pdf'), target: '_blank', class: 'ui label' %>
39
+ </td>
40
+ <td class="ui labels">
41
+ <%= link_to '运行', run_data_record_record_list_path(@data_record, record_list), method: :patch, remote: true, data: { confirm: 'Are you sure?' }, class: 'ui blue label' %>
42
+ <%= link_to '预览', find_data_record_record_lists_path(@data_record.data_table, record_list.parameters), remote: true, class: 'ui blue label' %>
43
+ <%= link_to '修改', columns_data_record_record_list_path(@data_record, record_list), remote: true, class: 'ui blue label' %>
44
+ <%= link_to 'edit', edit_data_record_record_list_path(@data_record, record_list), class: 'ui yellow label' %>
45
+ <%= link_to 'destroy', data_record_record_list_path(@data_record, record_list), method: :delete, data: { confirm: 'Are you sure?' }, class: 'ui red label' %>
46
+ </td>
47
+ </tr>
48
+ <% end %>
49
+ </tbody>
50
+ </table>
51
+
52
+ <%= paginate @record_lists %>
@@ -0,0 +1,19 @@
1
+ <div class="ui segment breadcrumb">
2
+ <%= link_to 'Back', data_record_record_lists_path(@data_record), class: 'section' %>
3
+ <div class="divider"> /</div>
4
+ <div class="active section">New</div>
5
+ </div>
6
+
7
+ <div class="ui segment">
8
+ <%= default_form_with model: @record_list, url: data_record_record_lists_path, locale: true do |f| %>
9
+ <% @data_record.parameters.each do |k, v| %>
10
+ <div class="inline fields">
11
+ <label class="six wide field"><%= k.to_s.titleize %>:</label>
12
+ <div class="six wide field">
13
+ <%= text_field_tag :"record_list[parameters][#{k}]", nil, as: @data_record.parameters[k] %>
14
+ </div>
15
+ </div>
16
+ <% end %>
17
+ <%= f.submit %>
18
+ <% end %>
19
+ </div>
@@ -0,0 +1,19 @@
1
+ <ul class="ui segment breadcrumb">
2
+ <li class="section"><%= link_to 'Data List', data_records_path %></li>
3
+ <li class="divider">/</li>
4
+ <li class="section"><%= link_to 'Table List', data_record_record_lists_path(@data_record) %></li>
5
+ </ul>
6
+
7
+ <div class="ui top attached menu borderless">
8
+ <div class="item"><strong>Preview</strong></div>
9
+ </div>
10
+
11
+ <div class="ui top attached menu borderless">
12
+ <div class="item"><strong>TableID:<%= @record_list.id %></strong></div>
13
+ <div class="right menu">
14
+ <%= link_to 'download Csv', data_record_record_list_path(@data_record, @record_list, format: 'csv'), class: 'item ui button' %>
15
+ <%= link_to 'download Xlsx', data_record_record_list_path(@data_record, @record_list, format: 'xlsx'), class: 'item ui blue button' %>
16
+ </div>
17
+ </div>
18
+
19
+ <%= render 'table' %>
@@ -0,0 +1,8 @@
1
+ if ($('.ui.modals').length === 0) {
2
+ $('body').append('<%= j(render 'show') %>');
3
+ } else {
4
+ $('.ui.modals').html('<%= j(render 'show') %>');
5
+ }
6
+
7
+
8
+ $('.ui.modal').modal('setting', {autofocus: false}).modal('show');
@@ -0,0 +1,8 @@
1
+ if ($('.ui.modals').length === 0) {
2
+ $('body').append('<%= j(render 'show') %>');
3
+ } else {
4
+ $('.ui.modals').html('<%= j(render 'show') %>');
5
+ }
6
+
7
+
8
+ $('.ui.modal').modal('setting', {autofocus: false}).modal('show');
@@ -0,0 +1,17 @@
1
+ <div class="ui modal">
2
+ <i class="close icon"></i>
3
+ <div class="ui header blue">
4
+ Import
5
+ </div>
6
+
7
+ <div class="content">
8
+ <%= form_with model: @table_list, url: import_data_list_table_lists_path(@data_list), local: true, id: 'import_table' do |f| %>
9
+ <%= f.file_field :file %>
10
+ <%= f.submit %>
11
+ <% end %>
12
+ </div>
13
+ </div>
14
+
15
+
16
+
17
+
@@ -0,0 +1,22 @@
1
+ <table class="table table-striped">
2
+ <thead>
3
+ <tr>
4
+ <th>ID</th>
5
+ <th colspan="4"></th>
6
+ </tr>
7
+ </thead>
8
+
9
+ <tbody>
10
+ <% @table_lists.each do |table_list| %>
11
+ <tr>
12
+ <td><%= table_list.id %></td>
13
+ <td><%= link_to 'Download Csv', report_list_table_list_path(@report_list, table_list, format: 'csv') %></td>
14
+ <td><%= link_to 'Download Pdf', report_list_table_list_path(@report_list, table_list, format: 'pdf') %></td>
15
+ <td><%= link_to 'Download row Pdf', row_report_list_table_list_path(@report_list, table_list, format: 'pdf') %></td>
16
+ <td><%= link_to 'destroy', report_list_table_list_path(@report_list, table_list), method: :delete, data: { confirm: 'Are you sure?' } %></td>
17
+ </tr>
18
+ <% end %>
19
+ </tbody>
20
+ </table>
21
+
22
+
@@ -0,0 +1,5 @@
1
+ <div class="ui teal progress" data-percent="80" style="margin-bottom: 0">
2
+ <div class="bar"><div class="progress"></div></div>
3
+ </div>
4
+
5
+
@@ -0,0 +1,10 @@
1
+ <div class="ui modal" id="modal">
2
+ <i class="close icon"></i>
3
+ <div class="ui header blue">
4
+ 预览
5
+ </div>
6
+
7
+ <div class="content">
8
+ <%= render partial: 'table', locals: { remote: true } %>
9
+ </div>
10
+ </div>
@@ -0,0 +1,38 @@
1
+ <div class="ui top attached menu borderless">
2
+ <div class="header item">TableID:<%= @table_list.id %></div>
3
+ <div class="right menu">
4
+ <%= link_to 'Migrate', migrate_data_list_table_list_path(@data_list, @table_list), method: :patch, class: 'item ui button' if @table_list.data_list.is_a?(DataImport) %>
5
+ <%= link_to 'download Csv', data_list_table_list_path(@data_list, @table_list, format: 'csv'), class: 'item ui button' %>
6
+ <%= link_to 'download Xlsx', data_list_table_list_path(@data_list, @table_list, format: 'xlsx'), class: 'item ui blue button' %>
7
+ </div>
8
+ </div>
9
+
10
+ <table class="ui celled red bottom attached fixed table">
11
+ <thead>
12
+ <tr>
13
+ <% @table_list.headers.each do |header| %>
14
+ <th><%= header %></th>
15
+ <% end %>
16
+ </tr>
17
+ </thead>
18
+
19
+ <tbody>
20
+ <% @table_items.limit(100).each do |item| %>
21
+ <tr>
22
+ <% item.fields.each do |field| %>
23
+ <td><pre><%= field %></pre></td>
24
+ <% end %>
25
+ </tr>
26
+ <% end %>
27
+ </tbody>
28
+
29
+ <tfoot>
30
+ <tr>
31
+ <% @table_list.footers.each do |footer| %>
32
+ <th><%= footer %></th>
33
+ <% end %>
34
+ </tr>
35
+ </tfoot>
36
+ </table>
37
+
38
+ <%= paginate @table_items, remote: remote %>
@@ -0,0 +1,8 @@
1
+ if ($('.ui.modals').length === 0) {
2
+ $('body').append('<%= j(render 'show') %>');
3
+ } else {
4
+ $('.ui.modals').html('<%= j(render 'show') %>');
5
+ }
6
+
7
+
8
+ $('.ui.modal').modal('setting', {autofocus: false}).modal('show');
@@ -0,0 +1,19 @@
1
+ <div class="ui segment breadcrumb">
2
+ <%= link_to 'Back', data_list_table_lists_path(@data_list), class: 'section' %>
3
+ <div class="divider"> / </div>
4
+ <div class="active section">Edit</div>
5
+ </div>
6
+
7
+ <div class="ui segment">
8
+ <%= default_form_with model: @table_list, url: data_list_table_list_path, locale: true do |f| %>
9
+ <% @table_list.parameters.each do |k, v| %>
10
+ <div class="inline fields">
11
+ <label class="six wide field"><%= k.to_s.titleize %>:</label>
12
+ <div class="six wide field">
13
+ <%= text_field_tag :"table_list[parameters][#{k}]", v, type: TheData.config.mapping[@data_list.parameters[k].to_sym][:input] %>
14
+ </div>
15
+ </div>
16
+ <% end %>
17
+ <%= f.submit %>
18
+ <% end %>
19
+ </div>
@@ -0,0 +1,2 @@
1
+ $('#modal').replaceWith('<%= j(render 'show') %>');
2
+ $('#modal').modal('setting', {autofocus: false}).modal('show');
@@ -0,0 +1,55 @@
1
+ <ul class="ui segment breadcrumb">
2
+ <li class="section"><%= link_to 'back', data_lists_path(type: @data_list.type) %></li>
3
+ <li class="divider">/</li>
4
+ <li class="section">Table lists</li>
5
+ </ul>
6
+
7
+ <div class="ui top attached menu borderless">
8
+ <div class="item"><strong>Table List</strong></div>
9
+ </div>
10
+
11
+ <div class="ui segment top attached">
12
+ <% if @data_list.type == 'DataImport' %>
13
+ <%= link_to 'Import', import_data_list_table_lists_path(@data_list), class: 'ui blue button', remote: true %>
14
+ <% else %>
15
+ <%= link_to 'New', new_data_list_table_list_path(@data_list), class: 'ui teal button' %>
16
+ <% end %>
17
+ </div>
18
+
19
+ <table class="ui bottom attached table">
20
+ <thead>
21
+ <tr>
22
+ <th class="one wide">ID</th>
23
+ <th class="two wide">Parameters</th>
24
+ <th class="eight wide">Headers</th>
25
+ <th class="one wide"><%= TableList.human_attribute_name(:timestamp) %></th>
26
+ <th class="one wide">Done</th>
27
+ <th class="three wide"></th>
28
+ </tr>
29
+ </thead>
30
+
31
+ <tbody>
32
+ <% @table_lists.each do |table_list| %>
33
+ <tr>
34
+ <td><%= table_list.id %></td>
35
+ <td><%= simple_format_hash(table_list.parameters) %></td>
36
+ <td><%= table_list.headers.to_csv %></td>
37
+ <td><%= table_list.timestamp %></td>
38
+ <td id="done_<%= table_list.id %>">
39
+ <% if table_list.done %>
40
+ <i class="green checkmark icon"></i>
41
+ <% else %>
42
+ <i class="grey remove icon"></i>
43
+ <% end %>
44
+ </td>
45
+ <td class="ui labels">
46
+ <%= link_to 'Run', run_data_list_table_list_path(@data_list, table_list), method: :patch, remote: true, data: { confirm: 'Are you sure?' }, class: 'ui blue label' %>
47
+ <%= link_to 'xlsx', xlsx_data_list_table_list_path(@data_list, table_list, format: 'xlsx'), class: 'ui yellow label' %>
48
+ <%= link_to 'Preview', data_list_table_list_path(@data_list, table_list), class: 'ui blue label' %>
49
+ <%= link_to 'Edit', edit_data_list_table_list_path(@data_list, table_list), class: 'ui yellow label' %>
50
+ <%= link_to 'Destroy', data_list_table_list_path(@data_list, table_list), method: :delete, data: { confirm: 'Are you sure?' }, class: 'ui red label' %>
51
+ </td>
52
+ </tr>
53
+ <% end %>
54
+ </tbody>
55
+ </table>
@@ -0,0 +1,19 @@
1
+ <div class="ui segment breadcrumb">
2
+ <%= link_to 'Back', data_list_table_lists_path(@data_list), class: 'section' %>
3
+ <div class="divider"> / </div>
4
+ <div class="active section">New</div>
5
+ </div>
6
+
7
+ <div class="ui segment">
8
+ <%= form_with model: @table_list, url: data_list_table_lists_path, local: true do |f| %>
9
+ <% @data_list.parameters.each do |k, v| %>
10
+ <div class="inline fields">
11
+ <label class="six wide field"><%= k.to_s.titleize %>:</label>
12
+ <div class="six wide field">
13
+ <%= text_field_tag :"table_list[parameters][#{k}]", nil, type: TheData.config.mapping[v.to_sym][:input] %>
14
+ </div>
15
+ </div>
16
+ <% end %>
17
+ <%= f.submit %>
18
+ <% end %>
19
+ </div>
@@ -0,0 +1,30 @@
1
+ if ($('.ui.modals').length === 0) {
2
+ $('body').append('<%= j(render 'import') %>');
3
+ } else {
4
+ $('.ui.modals').html('<%= j(render 'import') %>');
5
+ }
6
+
7
+ $('.ui.modal').modal('setting', {autofocus: false}).modal('show');
8
+
9
+ $('#import_table').submit(function(event) {
10
+ event.preventDefault();
11
+ var form = document.querySelector('#import_table')
12
+
13
+ fetch('<%= import_data_list_table_lists_path(@data_list) %>', {
14
+ method: 'POST',
15
+ credentials: 'same-origin',
16
+ headers: {
17
+ Accept: 'application/javascript'
18
+ },
19
+ body: new FormData(form)
20
+ }).then(function(response) {
21
+ return response.text()
22
+ }).then(function(response) {
23
+ var script = document.createElement('script');
24
+ script.text = response;
25
+ document.head.appendChild(script).parentNode.removeChild(script);
26
+ }).catch(function(ex) {
27
+ console.log('parsing failed', ex)
28
+ })
29
+ })
30
+
@@ -0,0 +1,10 @@
1
+ var tl_id = '#done_' + '<%= @table_list.id %>';
2
+ var tl_obj = $(tl_id);
3
+ tl_obj.html('<%= j(render 'process') %>');
4
+
5
+ $('.ui.progress').progress({
6
+ label: 'percent',
7
+ text : {
8
+ percent : 'working'
9
+ }
10
+ });
@@ -0,0 +1,11 @@
1
+ <ul class="ui segment breadcrumb">
2
+ <li class="section"><%= link_to 'Data List', data_lists_path %></li>
3
+ <li class="divider">/</li>
4
+ <li class="section"><%= link_to 'Table List', data_list_table_lists_path(@data_list) %></li>
5
+ </ul>
6
+
7
+ <div class="ui top attached menu borderless">
8
+ <div class="item"><strong>Preview</strong></div>
9
+ </div>
10
+
11
+ <%= render partial: 'table', locals: { remote: false } %>
@@ -0,0 +1,5 @@
1
+ The generation process is now complete for the following:
2
+
3
+ Notices:
4
+
5
+ <%= @message.html_safe %>
@@ -0,0 +1,4 @@
1
+ require 'csv'
2
+ RailsData::Engine.config.paths['config/locales'].expanded.each do |path|
3
+ Rails.configuration.paths['config/locales'].push(path)
4
+ end
@@ -0,0 +1,10 @@
1
+ en:
2
+ admin:
3
+ data_lists:
4
+ index:
5
+ new: 新增
6
+ activerecord:
7
+ attributes:
8
+ data_list/type:
9
+ DataImport: Import
10
+ DataExport: Export
@@ -0,0 +1,10 @@
1
+ zh:
2
+ admin:
3
+ data_lists:
4
+ index:
5
+ new: 新增
6
+ activerecord:
7
+ attributes:
8
+ data_list/type:
9
+ DataImport: 导入
10
+ DataExport: 导出
data/config/routes.rb ADDED
@@ -0,0 +1,35 @@
1
+ Rails.application.routes.draw do
2
+
3
+ scope module: 'rails_data_admin' do
4
+ resources :data_lists do
5
+ get :add_item, on: :collection
6
+ get :remove_item, on: :collection
7
+ put :update_publish, on: :member
8
+ patch :rebuild, on: :member
9
+ resources :table_lists do
10
+ get :find, on: :collection
11
+ get :direct, on: :collection
12
+ get 'import' => :new_import, on: :collection
13
+ post 'import' => :create_import, on: :collection
14
+ get :row, on: :member
15
+ patch :run, on: :member
16
+ get :xlsx, on: :member
17
+ patch :migrate, on: :member
18
+ end
19
+ end
20
+
21
+ resources :data_records do
22
+ get :add_item, on: :collection
23
+ get :remove_item, on: :collection
24
+ patch :rebuild, on: :member
25
+ resources :record_lists do
26
+ get :find, on: :collection
27
+ get :row, on: :member
28
+ patch :run, on: :member
29
+ get 'columns' => :edit_columns, on: :member
30
+ patch 'columns' => :update_columns, on: :member
31
+ end
32
+ end
33
+ end
34
+
35
+ end
@@ -0,0 +1,51 @@
1
+ class CreateReportLists < ActiveRecord::Migration
2
+
3
+ def change
4
+
5
+ create_table :data_lists do |t|
6
+ t.string :title
7
+ t.string :comment, limit: 4096
8
+ t.string :type
9
+ t.string :parameters, limit: 1024
10
+ t.string :columns, limit: 1024
11
+ t.string :data_table
12
+ t.string :export_excel
13
+ t.string :export_pdf
14
+ t.timestamps
15
+ end
16
+
17
+ create_table :table_lists do |t|
18
+ t.references :data_list
19
+ t.string :headers, limit: 4096
20
+ t.string :footers, limit: 4096
21
+ t.integer :table_items_count, default: 0
22
+ t.string :parameters, limit: 1024
23
+ t.string :timestamp
24
+ t.boolean :done
25
+ t.boolean :published
26
+ t.timestamps
27
+ end
28
+
29
+ create_table :table_items do |t|
30
+ t.references :table_list
31
+ t.string :fields, limit: 4096
32
+ t.timestamps
33
+ end
34
+
35
+ create_table :record_lists do |t|
36
+ t.references :data_list
37
+ t.string :columns, limit: 4096
38
+ t.string :parameters, limit: 1024
39
+ t.boolean :done
40
+ t.timestamps
41
+ end
42
+
43
+ create_table :record_items do |t|
44
+ t.references :record_list
45
+ t.string :fields, limit: 10240
46
+ t.timestamps
47
+ end
48
+
49
+ end
50
+
51
+ end
@@ -0,0 +1,23 @@
1
+ require 'active_support/configurable'
2
+
3
+ module RailsData
4
+ # Config
5
+ # Configure the standard CSV default options
6
+ # as well the option to output the header row
7
+
8
+ include ActiveSupport::Configurable
9
+
10
+ configure do |config|
11
+ config.mapping = ActiveSupport::OrderedOptions.new
12
+
13
+ config.inflector = :titleize
14
+ config.method_name = :report
15
+ config.admin_class = 'Admin::BaseController'
16
+ config.mapping.date = { input: 'date', output: 'to_date' }
17
+ config.mapping.integer = { input: 'number', output: 'to_i' }
18
+ config.mapping.string = { input: 'text', output: 'to_s' }
19
+ config.mapping.text = { input: 'textarea', output: 'to_s' }
20
+ config.mapping.array = { input: 'array', output: 'to_s' }
21
+ end
22
+
23
+ end
@@ -0,0 +1,18 @@
1
+ module RailsData
2
+ class Engine < ::Rails::Engine
3
+
4
+ config.eager_load_paths += Dir[
5
+ "#{config.root}/app/models/rails_data",
6
+ "#{config.root}/app/models/rails_data/concerns",
7
+ "#{config.root}/app/models/rails_data/data_lists",
8
+ "#{config.root}/app/models/rails_data/export_services"
9
+ ]
10
+
11
+ initializer 'rails_data.assets.precompile' do |app|
12
+ app.config.assets.precompile += ['rails_data_manifest.js']
13
+ Mime::Type.register 'application/xlsx', :xlsx
14
+ end
15
+
16
+ end
17
+ end
18
+