ab_admin 0.6.1 → 0.7.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 (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)