ab_admin 0.6.1 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/ab_admin/components/admin_assets.js.coffee +6 -2
  3. data/app/assets/javascripts/ab_admin/components/base_assets.js.coffee +9 -0
  4. data/app/assets/javascripts/ab_admin/components/gmaps.js.coffee +1 -1
  5. data/app/assets/javascripts/ab_admin/components/in_place_edit.js.coffee +6 -0
  6. data/app/assets/javascripts/ab_admin/components/select2_bridge.js.coffee +2 -2
  7. data/app/assets/javascripts/ab_admin/core/batch_actions.js.coffee +52 -12
  8. data/app/assets/javascripts/ab_admin/core/init.js.coffee +2 -0
  9. data/app/assets/javascripts/ab_admin/core/pjax.js.coffee +3 -2
  10. data/app/assets/javascripts/ab_admin/core/ui_utils.js.coffee +3 -4
  11. data/app/assets/stylesheets/ab_admin/bootstrap_and_overrides.scss +4 -0
  12. data/app/assets/stylesheets/ab_admin/components/_colored_tabs.scss +4 -0
  13. data/app/assets/stylesheets/ab_admin/components/_form.scss +36 -3
  14. data/app/controllers/admin/admin_comments_controller.rb +4 -0
  15. data/app/controllers/admin/assets_controller.rb +5 -2
  16. data/app/controllers/admin/base_controller.rb +50 -41
  17. data/app/controllers/admin/locators_controller.rb +1 -1
  18. data/app/controllers/admin/manager_controller.rb +32 -3
  19. data/app/controllers/admin/settings_controller.rb +2 -3
  20. data/app/controllers/admin/static_pages_controller.rb +5 -0
  21. data/app/controllers/admin/structures_controller.rb +10 -4
  22. data/app/controllers/admin/users_controller.rb +9 -2
  23. data/app/views/admin/base/_search_layout.html.slim +0 -1
  24. data/app/views/admin/base/index.html.slim +1 -2
  25. data/app/views/admin/fileupload/_container.html.slim +17 -10
  26. data/app/views/admin/shared/_content_actions.html.slim +18 -6
  27. data/app/views/admin/shared/_locale_tabs.html.slim +3 -3
  28. data/app/views/admin/structures/_form.html.slim +2 -1
  29. data/app/views/layouts/admin/_footer.html.slim +5 -4
  30. data/app/views/layouts/admin/application.html.slim +2 -0
  31. data/config/locales/ru.yml +1 -0
  32. data/config/routes.rb +17 -22
  33. data/lib/ab_admin.rb +11 -1
  34. data/lib/ab_admin/abstract_resource.rb +11 -2
  35. data/lib/ab_admin/carrierwave/base_uploader.rb +45 -25
  36. data/lib/ab_admin/carrierwave/file_size_validator.rb +0 -1
  37. data/lib/ab_admin/carrierwave/glue.rb +2 -4
  38. data/lib/ab_admin/concerns/admin_addition.rb +12 -4
  39. data/lib/ab_admin/concerns/deep_cloneable.rb +0 -1
  40. data/lib/ab_admin/concerns/fileuploads.rb +0 -1
  41. data/lib/ab_admin/concerns/headerable.rb +0 -4
  42. data/lib/ab_admin/concerns/nested_set.rb +2 -3
  43. data/lib/ab_admin/concerns/reloadable.rb +0 -2
  44. data/lib/ab_admin/concerns/silencer.rb +0 -3
  45. data/lib/ab_admin/concerns/utilities.rb +2 -4
  46. data/lib/ab_admin/concerns/validations.rb +1 -1
  47. data/lib/ab_admin/config/base.rb +26 -6
  48. data/lib/ab_admin/controllers/callbacks.rb +6 -6
  49. data/lib/ab_admin/controllers/head_options.rb +0 -1
  50. data/lib/ab_admin/controllers/tree.rb +0 -2
  51. data/lib/ab_admin/core_ext.rb +1 -1
  52. data/lib/ab_admin/core_ext/array.rb +0 -1
  53. data/lib/ab_admin/core_ext/hash.rb +11 -0
  54. data/lib/ab_admin/core_ext/string.rb +0 -1
  55. data/lib/ab_admin/devise.rb +1 -1
  56. data/lib/ab_admin/engine.rb +2 -1
  57. data/lib/ab_admin/hooks/globalize_locale_suffix_accessors.rb +17 -31
  58. data/lib/ab_admin/hooks/will_paginate_no_uri.rb +1 -1
  59. data/lib/ab_admin/i18n_tools/google_translate.rb +0 -1
  60. data/lib/ab_admin/i18n_tools/translate_app.rb +0 -1
  61. data/lib/ab_admin/menu/builder.rb +3 -2
  62. data/lib/ab_admin/menu/group.rb +3 -1
  63. data/lib/ab_admin/models/asset.rb +9 -6
  64. data/lib/ab_admin/models/header.rb +2 -3
  65. data/lib/ab_admin/models/locator.rb +1 -1
  66. data/lib/ab_admin/models/settings.rb +6 -6
  67. data/lib/ab_admin/models/structure.rb +0 -6
  68. data/lib/ab_admin/models/track.rb +12 -3
  69. data/lib/ab_admin/models/type_model.rb +0 -1
  70. data/lib/ab_admin/models/user.rb +0 -1
  71. data/lib/ab_admin/models/validations/all.rb +4 -0
  72. data/lib/ab_admin/models/validations/domain_name_validator.rb +9 -0
  73. data/lib/ab_admin/models/validations/email_validator.rb +9 -0
  74. data/lib/ab_admin/utils.rb +12 -4
  75. data/lib/ab_admin/utils/eval_helpers.rb +1 -1
  76. data/lib/ab_admin/utils/logger.rb +0 -2
  77. data/lib/ab_admin/utils/xls_document.rb +25 -6
  78. data/lib/ab_admin/version.rb +1 -1
  79. data/lib/ab_admin/views/admin_helpers.rb +5 -4
  80. data/lib/ab_admin/views/admin_navigation_helpers.rb +16 -5
  81. data/lib/ab_admin/views/form_builder.rb +41 -10
  82. data/lib/ab_admin/views/helpers.rb +0 -2
  83. data/lib/ab_admin/views/inputs/uploader_input.rb +1 -0
  84. data/lib/ab_admin/views/search_form_builder.rb +33 -7
  85. data/lib/generators/ab_admin/ckeditor_assets/ckeditor_assets_generator.rb +0 -1
  86. data/lib/generators/ab_admin/glob/glob_generator.rb +2 -2
  87. data/lib/generators/ab_admin/glob/templates/migration.erb +1 -1
  88. data/lib/generators/ab_admin/install/install_generator.rb +0 -1
  89. data/lib/generators/ab_admin/install/templates/config/seeds.rb +0 -2
  90. data/lib/generators/ab_admin/install/templates/helpers/admin/structures_helper.rb +1 -4
  91. data/lib/generators/ab_admin/install/templates/models/admin_comment.rb +1 -3
  92. data/lib/generators/ab_admin/install/templates/models/asset.rb +3 -5
  93. data/lib/generators/ab_admin/install/templates/models/header.rb +1 -5
  94. data/lib/generators/ab_admin/install/templates/models/static_page.rb +1 -4
  95. data/lib/generators/ab_admin/install/templates/models/structure.rb +1 -5
  96. data/lib/generators/ab_admin/install/templates/models/track.rb +1 -2
  97. data/lib/generators/ab_admin/install/templates/models/user.rb +1 -9
  98. data/lib/generators/ab_admin/install/templates/uploaders/attachment_file_uploader.rb +1 -1
  99. data/lib/generators/ab_admin/install/templates/uploaders/avatar_uploader.rb +1 -1
  100. data/lib/generators/ab_admin/install/templates/uploaders/picture_uploader.rb +1 -1
  101. data/lib/generators/ab_admin/model/templates/resource.erb +1 -0
  102. data/lib/generators/template.rb +39 -59
  103. metadata +38 -36
  104. data/lib/ab_admin/hooks/active_model_attr_accessible_few_roles.rb +0 -50
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  module AbAdmin
3
2
  module CarrierWave
4
3
  class FileSizeValidator < ActiveModel::EachValidator
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  module AbAdmin
3
2
  module CarrierWave
4
3
  module Glue
@@ -6,11 +5,10 @@ module AbAdmin
6
5
 
7
6
  module ClassMethods
8
7
  def ab_admin_uploader(uploader=nil, options={}, &block)
9
- options = { mount_on: :data_file_name }.merge(options)
8
+ options.reverse_merge!(mount_on: :data_file_name)
9
+ options.merge!(validate_integrity: false, validate_processing: false, validate_download: false) unless uploader.try!(:enable_processing)
10
10
 
11
11
  mount_uploader(:data, uploader, options, &block)
12
-
13
- validates_processing_of :data
14
12
  end
15
13
 
16
14
  def sunrise_uploader(*args)
@@ -32,9 +32,17 @@ module AbAdmin
32
32
  end
33
33
 
34
34
  def new_changes
35
- exclude_attrs = respond_to?(:translated_attribute_names) ? translated_attribute_names.dup : []
36
- exclude_attrs << :updated_at
37
- changes.except(*exclude_attrs).map { |k, v| [k, v.last] }.to_h
35
+ excluded_attrs = [:updated_at]
36
+ excluded_attrs += translated_attribute_names if self.class.translates?
37
+ all_changes = changes.except(*excluded_attrs).map { |k, v| [k, v[1]] }.to_h
38
+ if self.class.translates?
39
+ globalize.dirty.each do |attr, changes|
40
+ changes.each do |change|
41
+ all_changes["#{attr}_#{change[0]}"] = send("#{attr}_#{change[0]}")
42
+ end
43
+ end
44
+ end
45
+ all_changes
38
46
  end
39
47
 
40
48
  def admin_comments_count_non_zero
@@ -87,4 +95,4 @@ module AbAdmin
87
95
 
88
96
  end
89
97
  end
90
- end
98
+ end
@@ -1,4 +1,3 @@
1
- # -*- encoding : utf-8 -*-
2
1
  module AbAdmin
3
2
  module Concerns
4
3
  module DeepCloneable
@@ -24,7 +24,6 @@ module AbAdmin
24
24
  include InstanceMethods
25
25
  extend ClassMethods
26
26
 
27
- attr_accessible :fileupload_guid
28
27
  after_create :fileuploads_update, if: :fileupload_changed?
29
28
  end
30
29
  end
@@ -1,4 +1,3 @@
1
- # -*- encoding : utf-8 -*-
2
1
  module AbAdmin
3
2
  module Concerns
4
3
  module Headerable
@@ -7,8 +6,6 @@ module AbAdmin
7
6
  included do
8
7
  has_one :header, as: :headerable, dependent: :delete
9
8
 
10
- attr_accessible :header_attributes
11
-
12
9
  accepts_nested_attributes_for :header, reject_if: :all_blank
13
10
 
14
11
  ::Header.all_translated_attribute_names.each do |attr|
@@ -25,7 +22,6 @@ module AbAdmin
25
22
  def default_header
26
23
  header || build_header
27
24
  end
28
-
29
25
  end
30
26
  end
31
27
  end
@@ -1,4 +1,3 @@
1
- # -*- encoding : utf-8 -*-
2
1
  module AbAdmin
3
2
  module Concerns
4
3
  module NestedSet
@@ -10,8 +9,8 @@ module AbAdmin
10
9
 
11
10
  attr_accessor :cached_children
12
11
 
13
- scope :nested_set, -> { order('lft ASC') }
14
- scope :reversed_nested_set, -> { order('lft DESC') }
12
+ scope :nested_set, -> { order(:lft) }
13
+ scope :reversed_nested_set, -> { order(lft: :desc) }
15
14
  scope :with_depth, lambda { |level| where(depth: level) }
16
15
  end
17
16
 
@@ -8,7 +8,6 @@ module AbAdmin
8
8
  end
9
9
 
10
10
  module ClassMethods
11
-
12
11
  def has_reload_check(key=nil, logger=nil, &block)
13
12
  self.reload_checker = ::AbAdmin::Concerns::Reloadable::Reloader.new(key, logger, &block)
14
13
  end
@@ -16,7 +15,6 @@ module AbAdmin
16
15
  def check_reload
17
16
  self.reload_checker.check
18
17
  end
19
-
20
18
  end
21
19
 
22
20
  class Reloader
@@ -1,8 +1,6 @@
1
- # -*- encoding : utf-8 -*-
2
1
  module AbAdmin
3
2
  module Concerns
4
3
  module Silencer
5
-
6
4
  def no_timestamps
7
5
  original_setting = ActiveRecord::Base.record_timestamps
8
6
  ActiveRecord::Base.record_timestamps = false
@@ -28,7 +26,6 @@ module AbAdmin
28
26
  no_versions(&block)
29
27
  end
30
28
  end
31
-
32
29
  end
33
30
  end
34
31
  end
@@ -1,4 +1,3 @@
1
- # -*- encoding : utf-8 -*-
2
1
  module AbAdmin
3
2
  module Concerns
4
3
  module Utilities
@@ -29,7 +28,7 @@ module AbAdmin
29
28
 
30
29
  def all_models
31
30
  Dir.glob(Rails.root.to_s + '/app/models/**/*.rb').each { |file| require file }
32
- ActiveRecord::Base.descendants.find_all { |model| model.table_exists? }
31
+ ActiveRecord::Base.descendants.find_all { |model| model.connection.data_source_exists?(model.table_name) }
33
32
  #ActiveRecord::Base.descendants.find_all { |model| model.descends_from_active_record? }
34
33
  end
35
34
 
@@ -86,7 +85,7 @@ module AbAdmin
86
85
 
87
86
  def all_translated_attribute_names
88
87
  if translates?
89
- ::I18n.available_locales.map do |loc|
88
+ ::Globalize.available_locales.map do |loc|
90
89
  translated_attribute_names.map { |attr| "#{attr}_#{loc}" }
91
90
  end.flatten
92
91
  else
@@ -133,6 +132,5 @@ module AbAdmin
133
132
  self[column]
134
133
  end
135
134
  end
136
-
137
135
  end
138
136
  end
@@ -3,7 +3,7 @@ module AbAdmin
3
3
  module Validations
4
4
  class UniqTranslationValidator < ActiveModel::EachValidator
5
5
  def validate_each(record, attribute, value)
6
- ::I18n.available_locales.each do |l|
6
+ (options[:locales] || ::I18n.available_locales).each do |l|
7
7
  next if record.read_attribute(attribute, locale: l).blank?
8
8
  records_scope = record.class.const_get(:Translation).where("#{record.class.model_name.singular}_id != #{record.id || 0}")
9
9
  same = records_scope.where(name: record.read_attribute(attribute, locale: l), locale: l.to_s).exists?
@@ -20,8 +20,8 @@ module AbAdmin
20
20
  def self.default_for_model(model, options={})
21
21
  new.tap do |builder|
22
22
  builder.field(:id) unless options[:skip].try(:include?, :id)
23
- model.content_columns.each do |column|
24
- column_name = column.name.to_sym
23
+ model.column_names.each do |column|
24
+ column_name = column.to_sym
25
25
  next if options[:skip].try(:include?, column_name)
26
26
  builder.field(column_name)
27
27
  end
@@ -40,7 +40,9 @@ module AbAdmin
40
40
 
41
41
  class Export < BaseBuilder
42
42
  def render_options
43
- {column_names: fields.map(&:name), column_data: fields.map(&:data), column_separator: options[:column_separator]}
43
+ {column_names: fields.map(&:name), column_data: fields.map(&:data),
44
+ column_separator: options[:column_separator], worksheet_name: options[:worksheet_name],
45
+ filename: options[:filename]}
44
46
  end
45
47
  end
46
48
 
@@ -108,12 +110,15 @@ module AbAdmin
108
110
  end
109
111
 
110
112
  class BatchAction
111
- attr_reader :name, :options, :data, :title
113
+ attr_reader :name, :options, :data, :title, :form
112
114
 
113
115
  def initialize(name, options={}, &block)
114
116
  @name = name
115
117
  @options = options
116
- @title = options[:title] || I18n.t("admin.actions.batch_#{name}.link")
118
+ if options.has_key?(:form)
119
+ @form = options[:form].is_a?(String) ? options[:form] : "##{name}_batch_form"
120
+ end
121
+ @title = options[:title] || I18n.t("admin.actions.batch_#{name}.link", default: name.to_s.humanize)
117
122
  @data = block_given? ? block : name.to_sym
118
123
  end
119
124
 
@@ -152,5 +157,20 @@ module AbAdmin
152
157
  options[:collection]
153
158
  end
154
159
  end
160
+
161
+ class Scope
162
+ attr_reader :name, :options, :data
163
+
164
+ def initialize(name, options={}, &block)
165
+ @name = name
166
+ @options = options
167
+ @data = block
168
+ end
169
+
170
+ def apply(relation, params)
171
+ return relation unless params[name].present?
172
+ data.is_a?(Proc) ? data.call(relation, params) : relation.public_send(name)
173
+ end
174
+ end
155
175
  end
156
- end
176
+ end
@@ -9,11 +9,11 @@ module AbAdmin
9
9
 
10
10
  protected
11
11
 
12
- #def build_resource
13
- # object = super
14
- # run_build_callbacks object
15
- # object
16
- #end
12
+ def build_resource
13
+ object = get_resource_ivar || set_resource_ivar(end_of_association_chain.send(method_for_build, resource_params))
14
+ # run_build_callbacks object
15
+ object
16
+ end
17
17
 
18
18
  def create_resource(object)
19
19
  run_create_callbacks object do
@@ -28,7 +28,7 @@ module AbAdmin
28
28
  end
29
29
 
30
30
  def update_resource(object, attributes)
31
- object.assign_attributes(*attributes)
31
+ object.assign_attributes(attributes)
32
32
 
33
33
  #run_update_callbacks object do
34
34
  save_resource(object)
@@ -1,4 +1,3 @@
1
- # -*- encoding : utf-8 -*-
2
1
  module AbAdmin
3
2
  module Controllers
4
3
  module HeadOptions
@@ -1,7 +1,6 @@
1
1
  module AbAdmin
2
2
  module Controllers
3
3
  module Tree
4
-
5
4
  def rebuild
6
5
  parent_id = params[:parent_id].to_i
7
6
  prev_id = params[:prev_id].to_i
@@ -19,7 +18,6 @@ module AbAdmin
19
18
 
20
19
  head :ok
21
20
  end
22
-
23
21
  end
24
22
  end
25
23
  end
@@ -1,3 +1,3 @@
1
1
  Dir["#{File.dirname(__FILE__)}/core_ext/*.rb"].sort.each do |path|
2
- require "ab_admin/core_ext/#{File.basename(path, '.rb')}"
2
+ require "ab_admin/core_ext/#{File.basename(path)}"
3
3
  end
@@ -64,7 +64,6 @@ class Array
64
64
  def val_detect(attr, val)
65
65
  detect{|v| v[attr] == val }
66
66
  end
67
-
68
67
  end
69
68
 
70
69
  #module Enumerable
@@ -19,6 +19,17 @@ class Hash
19
19
  self
20
20
  end
21
21
 
22
+ def deep_transform_values!(&block)
23
+ self.each_key do |key|
24
+ if self[key].is_a?(Hash)
25
+ self[key] = self[key].deep_transform_values!(&block)
26
+ else
27
+ self[key] = block.call(self[key])
28
+ end
29
+ end
30
+ self
31
+ end
32
+
22
33
  def clear_values
23
34
  result = {}
24
35
  self.each_key do |key|
@@ -1,4 +1,3 @@
1
- # -*- encoding : utf-8 -*-
2
1
  class String
3
2
  # http://lucene.apache.org/core/old_versioned_docs/versions/2_9_1/queryparsersyntax.html
4
3
  #LUCENE_ESCAPE_REGEX = /(\+|-|&&|\|\||!|\(|\)|{|}|\[|\]|`|"|~|\?|:|\\|\/)/
@@ -23,7 +23,7 @@ module AbAdmin
23
23
 
24
24
  def after_sign_in_path_for(resource)
25
25
  stored_location_for(resource) ||
26
- if resource.is_a?(User) && resource.moderator?
26
+ if resource.is_a?(User) && resource.admin_access?
27
27
  admin_root_path
28
28
  else
29
29
  super
@@ -7,9 +7,10 @@ module AbAdmin
7
7
  end
8
8
 
9
9
  initializer 'ab_admin.setup' do
10
- ::Mime::Type.register 'application/vnd.ms-excel', :xls
10
+ ::Mime::Type.register 'application/vnd.ms-excel', :xlsx
11
11
 
12
12
  ActiveSupport.on_load :active_record do
13
+ ActiveRecord::Base.send :include, ActiveModel::ForbiddenAttributesProtection
13
14
  ActiveRecord::Base.send :include, AbAdmin::CarrierWave::Glue
14
15
  ActiveRecord::Base.send :include, AbAdmin::Utils::Mysql
15
16
  ActiveRecord::Base.send :include, AbAdmin::Concerns::DeepCloneable
@@ -1,54 +1,40 @@
1
1
  # add accessors with locale suffix like `title_en`, `title_de`
2
- Globalize::ActiveRecord::ClassMethods.module_eval do
3
- def define_translations_reader_with_locale_suffix(name)
4
- translation_attributes = class_variable_defined?(:@@translation_attributes) ? class_variable_get(:@@translation_attributes) : []
5
-
6
- define_translations_reader_without_locale_suffix(name)
2
+ module GlobalizeAccessorsWithLocaleSuffix
3
+ def define_translated_attr_reader(name)
4
+ super
7
5
 
8
6
  Globalize.available_locales.each do |locale|
9
7
  method_name = "#{name}_#{locale}"
10
8
  define_method method_name.to_sym do
11
- read_attribute(name, {locale: locale})
9
+ Globalize::Interpolation.interpolate(name, self, [locale])
12
10
  end
13
- translation_attributes.push(method_name)
14
11
  end
15
- class_variable_set(:@@translation_attributes, translation_attributes)
16
12
  end
17
13
 
18
- alias_method_chain :define_translations_reader, :locale_suffix
19
-
20
- def define_translations_writer_with_locale_suffix(name)
21
- define_translations_writer_without_locale_suffix(name)
14
+ def define_translated_attr_writer(name)
15
+ super
22
16
 
23
17
  Globalize.available_locales.each do |locale|
24
18
  define_method :"#{name}_#{locale}=" do |value|
25
- changed_attributes
26
- @changed_attributes[:"#{name}_#{locale}"] = value unless value == read_attribute(name, {locale: locale})
27
19
  write_attribute(name, value, {locale: locale})
28
20
  end
29
21
  end
30
22
  end
31
-
32
- alias_method_chain :define_translations_writer, :locale_suffix
33
23
  end
34
24
 
35
- Globalize::ActiveRecord::InstanceMethods.module_eval do
36
- private
37
-
38
- # Filters translation attributes from the attribute names.
39
- def attributes_for_update(attribute_names)
40
- filter_translation_attributes(super)
41
- end
25
+ Globalize::ActiveRecord::ClassMethods.module_eval do
26
+ prepend GlobalizeAccessorsWithLocaleSuffix
27
+ end
42
28
 
43
- # Filters translation attributes from the attribute names.
44
- def attributes_for_create(attribute_names)
45
- filter_translation_attributes(super)
46
- end
47
29
 
48
- def filter_translation_attributes(attributes)
49
- translation_attributes = self.class.class_variable_get(:@@translation_attributes)
50
- attributes.delete_if { |attr| translation_attributes.include? attr }
30
+ module GlobalizeFixResetAttribute
31
+ def _reset_attribute name
32
+ old_value = record.changed_attributes[name]
33
+ record.original_changed_attributes.except!(name)
34
+ record.send("#{name}=", old_value)
51
35
  end
52
36
  end
53
37
 
54
- Globalize::ActiveRecord::Translation.attr_accessible :locale
38
+ Globalize::ActiveRecord::AdapterDirty.module_eval do
39
+ prepend GlobalizeFixResetAttribute
40
+ end
@@ -14,6 +14,6 @@ WillPaginate::ActionView::LinkRenderer.class_exec do
14
14
  url_params[param_name.to_sym] = nil if url_params[param_name.to_sym].to_i < 2
15
15
 
16
16
  link = @template.url_for(url_params)
17
- @options[:no_uri] ? link.split('?').first : link
17
+ @options[:no_uri] ? link.split('?').first : link.sub(/\?\z/, '')
18
18
  end
19
19
  end
@@ -1,4 +1,3 @@
1
- # -*- encoding : utf-8 -*-
2
1
  require 'multi_json'
3
2
  require 'rest-client'
4
3
 
@@ -1,4 +1,3 @@
1
- # -*- encoding : utf-8 -*-
2
1
  module AbAdmin
3
2
  module I18nTools
4
3
  class TranslateApp
@@ -4,8 +4,9 @@ module AbAdmin
4
4
  include ::Singleton
5
5
 
6
6
  def self.draw(&block)
7
- I18n.locale = AbAdmin.locale if AbAdmin.locale
8
- instance.instance_eval &block if block_given?
7
+ I18n.with_locale AbAdmin.locale do
8
+ instance.instance_eval &block if block_given?
9
+ end
9
10
  end
10
11
 
11
12
  def self.render(*args)