ab_admin 0.8.3 → 0.9.0

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 (114) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE +1 -1
  3. data/README.md +11 -5
  4. data/app/assets/javascripts/ab_admin/components/admin_assets.js.coffee +0 -25
  5. data/app/assets/javascripts/ab_admin/components/google_translate.js.coffee +3 -5
  6. data/app/assets/javascripts/ab_admin/components/in_place_edit.js.coffee +5 -1
  7. data/app/assets/javascripts/ab_admin/core/columns_hider.js.coffee +24 -23
  8. data/app/assets/javascripts/ab_admin/core/init.js.coffee +6 -2
  9. data/app/assets/javascripts/ab_admin/core/search_form.js.coffee +1 -7
  10. data/app/assets/javascripts/ab_admin/core/ui_utils.js.coffee +2 -6
  11. data/app/assets/javascripts/ab_admin/core/utils.js.coffee +8 -2
  12. data/app/assets/javascripts/ab_admin/main.js +2 -2
  13. data/app/assets/stylesheets/ab_admin/bootstrap_and_overrides.scss +35 -10
  14. data/app/assets/stylesheets/ab_admin/components/_base.scss +21 -1
  15. data/app/assets/stylesheets/ab_admin/components/_form.scss +13 -17
  16. data/app/assets/stylesheets/ab_admin/components/_grid_view.scss +2 -2
  17. data/app/assets/stylesheets/ab_admin/components/_locale_tabs.scss +11 -23
  18. data/app/assets/stylesheets/ab_admin/components/_navigation.scss +0 -9
  19. data/app/assets/stylesheets/ab_admin/components/_table_view.scss +10 -2
  20. data/app/assets/stylesheets/ab_admin/components/_tooltip.scss +80 -0
  21. data/app/assets/stylesheets/ab_admin/components/_tree_view.scss +1 -1
  22. data/app/assets/stylesheets/ab_admin/devise.scss +2 -2
  23. data/app/assets/stylesheets/ab_admin/fileupload.scss +2 -9
  24. data/app/assets/stylesheets/ab_admin/main.scss +0 -1
  25. data/app/controllers/admin/base_controller.rb +67 -63
  26. data/app/controllers/admin/dashboards_controller.rb +2 -2
  27. data/app/controllers/admin/locators_controller.rb +8 -6
  28. data/app/controllers/admin/manager_controller.rb +2 -2
  29. data/app/controllers/admin/static_pages_controller.rb +0 -4
  30. data/app/controllers/admin/structures_controller.rb +2 -2
  31. data/app/views/admin/assets/batch_edit.html.slim +1 -1
  32. data/app/views/admin/base/_search_layout.html.slim +6 -5
  33. data/app/views/admin/base/create.js.erb +5 -2
  34. data/app/views/admin/base/index.html.slim +4 -4
  35. data/app/views/admin/base/update.js.erb +5 -0
  36. data/app/views/admin/fileupload/_asset_templates.html.slim +1 -2
  37. data/app/views/admin/fileupload/_image.html.slim +1 -2
  38. data/app/views/admin/locators/edit.html.slim +7 -6
  39. data/app/views/admin/manager/_map.html.slim +4 -0
  40. data/app/views/admin/manager/_table.html.slim +1 -1
  41. data/app/views/admin/shared/_content_actions.html.slim +19 -21
  42. data/app/views/admin/shared/_flash.html.slim +5 -4
  43. data/app/views/admin/shared/_locale_tabs.html.slim +2 -2
  44. data/app/views/admin/shared/_main_menu.html.slim +1 -1
  45. data/app/views/admin/structures/_form.html.slim +1 -1
  46. data/app/views/admin/users/_form.html.slim +1 -1
  47. data/app/views/admin/users/_search_form.html.slim +1 -1
  48. data/app/views/layouts/admin/_footer.html.slim +0 -1
  49. data/app/views/layouts/admin/_navigation.html.slim +1 -1
  50. data/app/views/layouts/admin/application.html.slim +2 -2
  51. data/config/locales/de.yml +1 -2
  52. data/config/locales/en.yml +1 -2
  53. data/config/locales/ru.yml +0 -1
  54. data/config/locales/uk.yml +0 -1
  55. data/lib/ab_admin.rb +34 -33
  56. data/lib/ab_admin/abstract_resource.rb +1 -1
  57. data/lib/ab_admin/carrierwave/base_uploader.rb +1 -2
  58. data/lib/ab_admin/concerns/admin_addition.rb +0 -30
  59. data/lib/ab_admin/concerns/translations_macro.rb +97 -0
  60. data/lib/ab_admin/concerns/utilities.rb +1 -1
  61. data/lib/ab_admin/config/base.rb +7 -0
  62. data/lib/ab_admin/controllers/callbacks.rb +3 -26
  63. data/lib/ab_admin/core_ext/array.rb +4 -48
  64. data/lib/ab_admin/core_ext/hash.rb +2 -31
  65. data/lib/ab_admin/core_ext/other.rb +0 -6
  66. data/lib/ab_admin/core_ext/string.rb +0 -80
  67. data/lib/ab_admin/engine.rb +1 -0
  68. data/lib/ab_admin/hooks/will_paginate_id_prefetch.rb +8 -6
  69. data/lib/ab_admin/hooks/will_paginate_no_uri.rb +1 -1
  70. data/lib/ab_admin/i18n_tools/google_translate.rb +3 -1
  71. data/lib/ab_admin/i18n_tools/model_translator.rb +1 -1
  72. data/lib/ab_admin/models/header.rb +2 -2
  73. data/lib/ab_admin/models/locator.rb +28 -2
  74. data/lib/ab_admin/models/user.rb +12 -48
  75. data/lib/ab_admin/utils/csv_document.rb +5 -3
  76. data/lib/ab_admin/utils/eval_helpers.rb +6 -3
  77. data/lib/ab_admin/utils/xls_document.rb +18 -16
  78. data/lib/ab_admin/version.rb +1 -1
  79. data/lib/ab_admin/views/admin_helpers.rb +10 -12
  80. data/lib/ab_admin/views/admin_navigation_helpers.rb +7 -8
  81. data/lib/ab_admin/views/form_builder.rb +7 -5
  82. data/lib/ab_admin/views/helpers.rb +0 -9
  83. data/lib/ab_admin/views/inputs/ckeditor_input.rb +4 -4
  84. data/lib/ab_admin/views/manager_helpers.rb +8 -5
  85. data/lib/ab_admin/views/search_form_builder.rb +2 -2
  86. data/lib/ab_admin/views/will_paginate_bootstrap_renderer.rb +60 -0
  87. data/lib/generators/ab_admin/glob/glob_generator.rb +4 -5
  88. data/lib/generators/ab_admin/glob/templates/migration.erb +10 -7
  89. data/lib/generators/ab_admin/install/templates/config/ab_admin.rb.erb +1 -1
  90. data/lib/generators/ab_admin/install/templates/models/user.rb +0 -11
  91. data/lib/generators/ab_admin/install/templates/spec/spec_helper.rb +0 -1
  92. data/lib/generators/ab_admin/install/templates/spec/support/database_cleaner.rb +8 -11
  93. data/lib/generators/ab_admin/model/model_generator.rb +3 -4
  94. data/lib/generators/ab_admin/model/templates/resource.erb +5 -2
  95. data/lib/generators/ab_admin/resource/templates/controller.erb +2 -2
  96. metadata +37 -79
  97. data/app/assets/images/admin/Jcrop.gif +0 -0
  98. data/app/assets/images/admin/flags/de.png +0 -0
  99. data/app/assets/images/admin/flags/en.png +0 -0
  100. data/app/assets/images/admin/flags/es.png +0 -0
  101. data/app/assets/images/admin/flags/fr.png +0 -0
  102. data/app/assets/images/admin/flags/it.png +0 -0
  103. data/app/assets/images/admin/flags/ja.png +0 -0
  104. data/app/assets/images/admin/flags/pl.png +0 -0
  105. data/app/assets/images/admin/flags/ru.png +0 -0
  106. data/app/assets/images/admin/flags/uk.png +0 -0
  107. data/app/assets/javascripts/ab_admin/components/croppable_image.js.coffee +0 -33
  108. data/app/assets/stylesheets/ab_admin/components/_columns_hider.scss +0 -5
  109. data/app/assets/stylesheets/ab_admin/components/_perms.scss +0 -39
  110. data/app/views/admin/shared/_columns_hider.html.slim +0 -9
  111. data/lib/ab_admin/hooks/globalize_locale_suffix_accessors.rb +0 -25
  112. data/lib/ab_admin/hooks/globalize_valid_locale.rb +0 -9
  113. data/lib/generators/ab_admin/ckeditor_assets/ckeditor_assets_generator.rb +0 -19
  114. data/lib/generators/template.rb +0 -96
@@ -1,3 +1,3 @@
1
1
  module AbAdmin
2
- VERSION = '0.8.3'
2
+ VERSION = '0.9.0'
3
3
  end
@@ -1,7 +1,6 @@
1
1
  module AbAdmin
2
2
  module Views
3
3
  module AdminHelpers
4
-
5
4
  def admin_form_for(object, *args, &block)
6
5
  record = Array(object).last
7
6
  record.fallbacks_for_empty_translations = false if record.respond_to?(:fallbacks_for_empty_translations)
@@ -21,11 +20,11 @@ module AbAdmin
21
20
  end
22
21
  end
23
22
 
24
- def editable_bool(item, attr, label: nil)
23
+ def editable_bool(item, attr, label: nil, wrapper_class: nil)
25
24
  url = "/admin/#{item.class.model_name.plural}/#{item.id}.json"
26
25
  html = check_box_tag("#{item.class.model_name.singular}[#{attr}]", '1', item.send(attr), class: 'js-auto-submit-checkbox', data: {url: url})
27
26
  html = content_tag(:label, "#{label} #{html}".html_safe) if label
28
- content_tag :div, html, class: 'auto-submit-checkbox-wrap white-space-nowrap'
27
+ content_tag :div, html, class: ['auto-submit-checkbox-wrap', 'white-space-nowrap', ('tool' unless label), wrapper_class], title: attr
29
28
  end
30
29
 
31
30
  def admin_editable(item, attr, opts=nil)
@@ -82,7 +81,7 @@ module AbAdmin
82
81
  end
83
82
 
84
83
  def options_for_ckeditor(options = {})
85
- {width: 930, height: 200, toolbar: 'VeryEasy', namespace: ''}.update(options)
84
+ {width: 930, height: 200, namespace: ''}.update(options)
86
85
  end
87
86
 
88
87
  def admin_tree_item(item)
@@ -97,13 +96,13 @@ module AbAdmin
97
96
  def admin_layout_css
98
97
  css = []
99
98
  css << 'content_with_sidebar' if settings[:sidebar] || content_for?(:sidebar)
100
- css << 'well' if settings[:well] && current_index_view != 'tree'
101
- css << "#{current_index_view}_view"
99
+ css << 'well' if !@settings[:well].is_a?(FalseClass) && (collection_action? || %w(show history).include?(action_name)) && @settings[:current_index_view] != :tree
100
+ css << "#{settings[:current_index_view]}_view"
102
101
  css
103
102
  end
104
103
 
105
104
  def admin_title
106
- base = @breadcrumbs ? @breadcrumbs.map_val(:name).reverse : []
105
+ base = @breadcrumbs ? @breadcrumbs.map{|b| b[:name] }.reverse : []
107
106
  base << @page_title || 'Ab Admin'
108
107
  base.join(' - ')
109
108
  end
@@ -127,6 +126,10 @@ module AbAdmin
127
126
  "<i class='icon-#{name} #{'icon-white' if white}'></i> ".html_safe
128
127
  end
129
128
 
129
+ def locale_flag(code)
130
+ (AbAdmin.locale_to_country_code[code] || code).to_s[0..1].upcase.tr('A-Z', '🇦-🇿')
131
+ end
132
+
130
133
  def admin_pretty_data(object)
131
134
  case object
132
135
  when String, Integer, BigDecimal, Float
@@ -167,10 +170,6 @@ module AbAdmin
167
170
  image_tag_if(item.send(assoc).try(:url, size))
168
171
  end
169
172
 
170
- def per_page_variants
171
- AbAdmin.per_page_variants.map{|variant| [variant, max_per_page].min }.uniq
172
- end
173
-
174
173
  # input_set 'title', legend_class: 'do_sort', label_class: 'label-info' do
175
174
  def input_set(title, options={}, &block)
176
175
  options.reverse_merge!(class: "inputs well well-small clearfix #{options.delete(:legend_class) || 'do_sort'}", id: options.delete(:legend_id))
@@ -191,7 +190,6 @@ module AbAdmin
191
190
  exec = options[:exec].nil? ? true : options[:exec]
192
191
  case symbol_or_proc
193
192
  when String
194
- ActiveSupport::Deprecation.warn('`call_method_or_proc_on` don\'t accept method name as String, use Symbol instead') if symbol_or_proc =~ /\A\w+\z/
195
193
  symbol_or_proc
196
194
  when Symbol
197
195
  obj.send(symbol_or_proc.to_sym)
@@ -16,7 +16,7 @@ module AbAdmin
16
16
  end
17
17
 
18
18
  def list_sort_link(attribute, options={})
19
- adapter = options[:adapter] || @search
19
+ adapter = options[:adapter] || ransack_collection
20
20
  if adapter && adapter.klass == resource_class
21
21
  sort_link(adapter, attribute, options)
22
22
  else
@@ -25,7 +25,7 @@ module AbAdmin
25
25
  end
26
26
 
27
27
  def sort_link(adapter, attribute, options={})
28
- name = options[:title] || (attribute.is_a?(Symbol) ? ha(attribute) : attribute)
28
+ name = options.delete(:title) || (attribute.is_a?(Symbol) ? ha(attribute) : attribute)
29
29
  return name unless adapter
30
30
  search_params = (params[:q] || {}).to_h.with_indifferent_access
31
31
  attr_name = (options.delete(:column) || attribute).to_s
@@ -48,7 +48,7 @@ module AbAdmin
48
48
  html_options = options.delete(:html_options) || {}
49
49
  html_options[:class] = ['sort_link', current_dir, html_options[:class]].compact.join(' ')
50
50
 
51
- options.merge!(q: search_params.merge(s: "#{attr_name} #{new_dir}"), **scope_params)
51
+ options.merge!(q: search_params.merge(s: "#{attr_name} #{new_dir}"), **collection_params)
52
52
  link_to [name, order_indicator_for(current_dir)].join(' ').html_safe, url_for(options), html_options
53
53
  end
54
54
 
@@ -62,8 +62,8 @@ module AbAdmin
62
62
  end
63
63
  end
64
64
 
65
- def scope_params
66
- params.slice(*button_scopes.map(&:first)).permit!.to_h.symbolize_keys
65
+ def collection_params
66
+ params.slice(:index_view, *button_scopes.map(&:first)).permit!.to_h.symbolize_keys
67
67
  end
68
68
 
69
69
  def short_action_link(action, item)
@@ -167,8 +167,7 @@ module AbAdmin
167
167
  if total_entries.zero?
168
168
  t('will_paginate.pagination_info_empty')
169
169
  else
170
- per_page = (params[:per_page] || resource_class.per_page).to_i
171
- t('will_paginate.pagination_info', from: offset + 1, to: [offset + per_page, total_entries].min, count: total_entries).html_safe
170
+ t('will_paginate.pagination_info', from: offset + 1, to: [offset + settings[:per_page], total_entries].min, count: total_entries).html_safe
172
171
  end
173
172
  end
174
173
 
@@ -192,7 +191,7 @@ module AbAdmin
192
191
  end
193
192
 
194
193
  def admin_comments_button(item)
195
- title = [icon('comment', true), item.admin_comments_count_non_zero].compact.join(' ').html_safe
194
+ title = [icon('comment', true), (item.admin_comments_count unless item.admin_comments_count.zero?)].compact.join(' ').html_safe
196
195
  link_to title, admin_admin_comments_path(resource_type: item.class.name, resource_id: item.id), remote: true,
197
196
  class: 'btn btn-info list_admin_comments_link'
198
197
  end
@@ -93,21 +93,23 @@ module AbAdmin
93
93
  return if @disable_all
94
94
  model = @object.class.reflect_on_association(assoc).klass
95
95
  title = [@template.icon('plus', true), I18n.t('admin.add'), options[:title] || model.model_name.human].join(' ').html_safe
96
- link_to_add title, assoc, class: "btn btn-primary #{options[:class]}"
96
+ options[:class] = "btn btn-primary #{options[:class]}"
97
+ link_to_add title, assoc, options
97
98
  end
98
99
 
99
- def link_to_remove_assoc
100
+ def link_to_remove_assoc(options={})
100
101
  return if @disable_all
101
- link_to_remove @template.icon('trash', true) + I18n.t('admin.delete'), class: 'btn btn-danger btn-mini pull-right'
102
+ options[:class] ||= 'btn btn-danger btn-mini pull-right'
103
+ link_to_remove @template.icon('trash', true) + I18n.t('admin.delete'), options
102
104
  end
103
105
 
104
106
  def locale_tabs(options={}, &block)
105
107
  locale_html = {}
106
- options[:locales] ||= Globalize.available_locales
108
+ options[:locales] ||= AbAdmin.translated_locales
107
109
  options[:locales].each do |l|
108
110
  locale_html[l] = template.capture { block.call(l) }
109
111
  end
110
- template.render 'admin/shared/locale_tabs', locale_html: locale_html, locales: options[:locales]
112
+ template.render 'admin/shared/locale_tabs', locale_html: locale_html, locales: options[:locales], tab_nav: options[:tab_nav]
111
113
  end
112
114
 
113
115
  def save_buttons
@@ -1,15 +1,6 @@
1
1
  module AbAdmin
2
2
  module Views
3
3
  module Helpers
4
-
5
- def admin?
6
- user_signed_in? && current_user.admin?
7
- end
8
-
9
- def moderator?
10
- user_signed_in? && current_user.moderator?
11
- end
12
-
13
4
  def as_html(text)
14
5
  return ''.html_safe if text.nil?
15
6
  Nokogiri::HTML.fragment(text).to_html.html_safe
@@ -3,11 +3,11 @@ module AbAdmin
3
3
  module Inputs
4
4
  class CkeditorInput < ::SimpleForm::Inputs::Base
5
5
  def input(wrapper_options=nil)
6
- unless @builder.template.instance_variable_get(:@ckeditor_init)
7
- @builder.template.concat @builder.template.javascript_include_tag('/javascripts/ckeditor/init')
8
- @builder.template.instance_variable_set(:@ckeditor_init, true)
6
+ unless @builder.template.instance_variable_get(:@ckeditor_loaded)
7
+ @builder.template.concat @builder.template.javascript_include_tag(Ckeditor.cdn_url)
8
+ @builder.template.instance_variable_set(:@ckeditor_loaded, true)
9
9
  end
10
- input_html_options.reverse_merge!({width: 800, height: 200, toolbar: 'Easy'})
10
+ input_html_options.reverse_merge!({width: 800, height: 200})
11
11
  @builder.cktext_area(attribute_name, input_html_options)
12
12
  end
13
13
  end
@@ -1,9 +1,6 @@
1
1
  module AbAdmin
2
2
  module Views
3
3
  module ManagerHelpers
4
-
5
- INDEX_VIEW_ICONS = {table: 'list', tree: 'move', grid: 'th', chart: 'signal'}
6
-
7
4
  def table_builder
8
5
  manager.table ||= ::AbAdmin::Config::Table.default_for_model(resource_class)
9
6
  end
@@ -20,6 +17,10 @@ module AbAdmin
20
17
  manager.chart ||= ::AbAdmin::Config::Chart.default_for_model(resource_class)
21
18
  end
22
19
 
20
+ def map_builder
21
+ manager.map ||= ::AbAdmin::Config::Map.default_for_model(resource_class)
22
+ end
23
+
23
24
  def modal_form_builder
24
25
  manager.modal_form ||= ::AbAdmin::Config::ModalForm.default_for_model(resource_class, skip: [:id, :created_at, :updated_at, :lft, :rgt, :depth])
25
26
  end
@@ -52,10 +53,12 @@ module AbAdmin
52
53
  end
53
54
  end
54
55
 
56
+ INDEX_VIEW_ICONS = {table: 'list', tree: 'move', grid: 'th', chart: 'signal', map: 'map-marker', stats: 'eye-open'}
55
57
  def index_view_link(index_view)
56
- options = {class: "btn #{('active' if current_index_view == index_view)}", title: t("admin.index_view.#{index_view}", default: index_view.to_s)}
58
+ options = {class: "btn tool tool-bottom #{('active' if settings[:current_index_view] == index_view)}", title: t("admin.index_view.#{index_view}", default: index_view.to_s)}
57
59
  url = url_for({index_view: index_view, q: params[:q]}.reject_blank)
58
- link_to icon(INDEX_VIEW_ICONS[index_view.to_sym]), url, options
60
+ title = INDEX_VIEW_ICONS[index_view.to_sym] ? icon(INDEX_VIEW_ICONS[index_view.to_sym]) : index_view
61
+ link_to title, url, options
59
62
  end
60
63
  end
61
64
  end
@@ -59,7 +59,7 @@ module AbAdmin
59
59
  def date_field(attr, options={})
60
60
  label(attr, options[:label]) + content_tag(:div, class: 'controls') do
61
61
  gt_param, lt_param = "#{attr}_gteq", "#{attr}_lteq"
62
- text_field_tag("q[#{gt_param}]", params[:q][gt_param], class: 'input-small datepicker', autocomplete: 'off') + ' - ' +
62
+ text_field_tag("q[#{gt_param}]", params[:q][gt_param], class: 'input-small datepicker', autocomplete: 'off') +
63
63
  text_field_tag("q[#{lt_param}]", params[:q][lt_param], class: 'input-small datepicker', autocomplete: 'off', id: "q_#{attr}")
64
64
  end
65
65
  end
@@ -68,7 +68,7 @@ module AbAdmin
68
68
  if builder_options[:compact_labels]
69
69
  options[:input_html] ||= {}
70
70
  options[:input_html][:placeholder] ||= extract_label(attr, options)
71
- wrapper_html = {'class' => 'controls js-tooltip', 'data-placement' => 'left', 'title' => options[:input_html][:placeholder]}
71
+ wrapper_html = {'class' => 'controls tool tool-left', 'data-placement' => 'left', 'title' => options[:input_html][:placeholder]}
72
72
  content_tag(:div, wrapper_html, &block)
73
73
  else
74
74
  label(attr, options[:label]) + content_tag(:div, class: 'controls', &block)
@@ -0,0 +1,60 @@
1
+ # Extracted from `will_paginate-bootstrap` (v0.2.5 written by Nicholas Dainty) because of some deprecated staff
2
+ require "will_paginate/view_helpers/action_view"
3
+ module AbAdmin
4
+ module Views
5
+ class WillPaginateBootstrapRenderer < WillPaginate::ActionView::LinkRenderer
6
+ # Contains functionality shared by all renderer classes.
7
+ ELLIPSIS = "&hellip;"
8
+
9
+ def to_html
10
+ list_items = pagination.map do |item|
11
+ item.is_a?(Integer) ? page_number(item) : send(item)
12
+ end.join(@options[:link_separator])
13
+
14
+ if @options[:bootstrap].to_i >= 3
15
+ tag("ul", list_items, class: "pagination")
16
+ else
17
+ html_container(tag("ul", list_items))
18
+ end
19
+ end
20
+
21
+ def container_attributes
22
+ @container_attributes ||= @options.except(*(WillPaginate::ViewHelpers.pagination_options.keys + [:renderer, :link_options] - [:class]))
23
+ end
24
+
25
+ protected
26
+
27
+ def page_number(page)
28
+ link_options = @options[:link_options] || {}
29
+ if page == current_page
30
+ tag("li", tag("span", page), class: "active")
31
+ else
32
+ tag("li", link(page, page, link_options.merge(rel: rel_value(page))))
33
+ end
34
+ end
35
+
36
+ def gap
37
+ tag("li", link(ELLIPSIS, "#"), class: "disabled")
38
+ end
39
+
40
+ def previous_page
41
+ num = @collection.current_page > 1 && @collection.current_page - 1
42
+ previous_or_next_page(num, @options[:previous_label], "prev")
43
+ end
44
+
45
+ def next_page
46
+ num = @collection.current_page < @collection.total_pages && @collection.current_page + 1
47
+ previous_or_next_page(num, @options[:next_label], "next")
48
+ end
49
+
50
+ def previous_or_next_page(page, text, classname)
51
+ link_options = @options[:link_options] || {}
52
+ if page
53
+ tag("li", link(text, page, link_options), class: classname)
54
+ else
55
+ tag("li", tag("span", text), class: "%s disabled" % classname)
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -2,7 +2,7 @@ require 'rails/generators/active_record'
2
2
  module AbAdmin
3
3
  module Generators
4
4
  class GlobGenerator < ActiveRecord::Generators::Base
5
- desc 'Generates migration for models without globalize tables'
5
+ desc 'Generates migration for models without translations tables'
6
6
 
7
7
  source_root File.expand_path('../templates', __FILE__)
8
8
 
@@ -17,18 +17,18 @@ module AbAdmin
17
17
  def model_attrs
18
18
  @model_attrs ||= begin
19
19
  models.each_with_object({}) do |m, h|
20
- h[m.name] = m.translated_attribute_names.map { |attr| "#{attr}: :#{get_type(attr)}" }.join(', ')
20
+ h[m.name] = m.translated_attribute_names.map { |attr| [attr, get_type(attr)] }
21
21
  end
22
22
  end
23
23
  end
24
24
 
25
25
  def migration_name
26
- "create_globalize_#{models.map { |m| m.model_name.singular }.join('_')}"
26
+ "create_translations_#{models.map { |m| m.model_name.singular }.join('_')}"
27
27
  end
28
28
 
29
29
  def models
30
30
  @models ||= begin
31
- all_translated.reject { |m| conn.data_source_exists? m.translations_table_name }
31
+ all_translated.reject { |m| conn.data_source_exists? m.translation_class.table_name }
32
32
  end
33
33
  end
34
34
 
@@ -53,7 +53,6 @@ module AbAdmin
53
53
  :string
54
54
  end
55
55
  end
56
-
57
56
  end
58
57
  end
59
58
  end
@@ -1,13 +1,16 @@
1
1
  class <%= migration_class_name %> < ActiveRecord::Migration[<%= ActiveRecord::Migration.current_version %>]
2
- def up
2
+ def change
3
3
  <%- models.each do |m| -%>
4
- <%= m.name %>.create_translation_table! <%= model_attrs[m.name] %>
5
- <%- end -%>
6
- end
4
+ create_table :<%= m.model_name.singular %>_translations do |t|
5
+ t.references :<%= m.model_name.singular %>, null: false
6
+ t.string :locale, limit: 5, null: false
7
+ <%- model_attrs[m.name].each do |attr, type| -%>
8
+ t.<%= type %> :<%= attr %>
9
+ <%- end -%>
7
10
 
8
- def down
9
- <%- models.each do |m| -%>
10
- <%= m.name %>.drop_translation_table!
11
+ t.timestamps
12
+ end
13
+ add_index :<%= m.model_name.singular %>_translations, [:<%= m.model_name.singular %>_id, :locale], unique: true, name: '<%= m.table_name %>_ts_<%= m.model_name.singular %>_id_locale'
11
14
  <%- end -%>
12
15
  end
13
16
  end
@@ -1,6 +1,6 @@
1
1
  require 'ab_admin/hooks'
2
2
 
3
- I18n.available_locales = Globalize.available_locales = [:ru, :en]
3
+ I18n.available_locales = AbAdmin.translated_locales = [:en]
4
4
 
5
5
  AbAdmin.setup do |config|
6
6
  config.site_name = '<%= app_const_base.titleize %>'
@@ -8,15 +8,4 @@ class User < ApplicationRecord
8
8
 
9
9
  fileuploads :avatar
10
10
 
11
- def init
12
- set_default_role
13
- self.locale ||= 'ru'
14
- self.time_zone ||= 'Kiev'
15
- end
16
-
17
- def password_required?
18
- return true if password.present?
19
- return false if persisted? && password.blank?
20
- super
21
- end
22
11
  end
@@ -15,5 +15,4 @@ RSpec.configure do |config|
15
15
  config.include Devise::TestHelpers, type: :controller
16
16
  config.include MailerMacros
17
17
  config.before(:each) { reset_email }
18
-
19
18
  end
@@ -1,17 +1,14 @@
1
- RSpec.configure do |config|
2
- config.use_transactional_fixtures = false
1
+ require 'database_cleaner'
3
2
 
4
- config.before :all do
3
+ RSpec.configure do |config|
4
+ config.before(:suite) do
5
5
  DatabaseCleaner.strategy = :transaction
6
- DatabaseCleaner.clean_with(:truncation)
6
+ DatabaseCleaner.clean_with(:truncation, except: %w(ar_internal_metadata countries country_translations))
7
7
  end
8
8
 
9
- config.before :each do
10
- DatabaseCleaner.start
9
+ config.around(:each) do |example|
10
+ DatabaseCleaner.cleaning do
11
+ example.run
12
+ end
11
13
  end
12
-
13
- config.after :each do
14
- DatabaseCleaner.clean
15
- end
16
-
17
14
  end
@@ -31,17 +31,16 @@ module AbAdmin
31
31
  protected
32
32
 
33
33
  def model_instance
34
- @model_instance ||= model.new
34
+ model.new
35
35
  end
36
36
 
37
37
  def translated_columns
38
- @translated_columns ||= model.respond_to?(:translated_attribute_names) ? model.translated_attribute_names.map(&:to_s) : []
38
+ model.respond_to?(:translated_attribute_names) ? model.translated_attribute_names.map(&:to_s) : []
39
39
  end
40
40
 
41
41
  def index_attrs
42
- @attrs ||= model_instance.attributes.keys.map(&:to_s)
42
+ model_instance.attributes.keys.map(&:to_s)
43
43
  end
44
-
45
44
  end
46
45
  end
47
46
  end