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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/ab_admin/components/admin_assets.js.coffee +6 -2
- data/app/assets/javascripts/ab_admin/components/base_assets.js.coffee +9 -0
- data/app/assets/javascripts/ab_admin/components/gmaps.js.coffee +1 -1
- data/app/assets/javascripts/ab_admin/components/in_place_edit.js.coffee +6 -0
- data/app/assets/javascripts/ab_admin/components/select2_bridge.js.coffee +2 -2
- data/app/assets/javascripts/ab_admin/core/batch_actions.js.coffee +52 -12
- data/app/assets/javascripts/ab_admin/core/init.js.coffee +2 -0
- data/app/assets/javascripts/ab_admin/core/pjax.js.coffee +3 -2
- data/app/assets/javascripts/ab_admin/core/ui_utils.js.coffee +3 -4
- data/app/assets/stylesheets/ab_admin/bootstrap_and_overrides.scss +4 -0
- data/app/assets/stylesheets/ab_admin/components/_colored_tabs.scss +4 -0
- data/app/assets/stylesheets/ab_admin/components/_form.scss +36 -3
- data/app/controllers/admin/admin_comments_controller.rb +4 -0
- data/app/controllers/admin/assets_controller.rb +5 -2
- data/app/controllers/admin/base_controller.rb +50 -41
- data/app/controllers/admin/locators_controller.rb +1 -1
- data/app/controllers/admin/manager_controller.rb +32 -3
- data/app/controllers/admin/settings_controller.rb +2 -3
- data/app/controllers/admin/static_pages_controller.rb +5 -0
- data/app/controllers/admin/structures_controller.rb +10 -4
- data/app/controllers/admin/users_controller.rb +9 -2
- data/app/views/admin/base/_search_layout.html.slim +0 -1
- data/app/views/admin/base/index.html.slim +1 -2
- data/app/views/admin/fileupload/_container.html.slim +17 -10
- data/app/views/admin/shared/_content_actions.html.slim +18 -6
- data/app/views/admin/shared/_locale_tabs.html.slim +3 -3
- data/app/views/admin/structures/_form.html.slim +2 -1
- data/app/views/layouts/admin/_footer.html.slim +5 -4
- data/app/views/layouts/admin/application.html.slim +2 -0
- data/config/locales/ru.yml +1 -0
- data/config/routes.rb +17 -22
- data/lib/ab_admin.rb +11 -1
- data/lib/ab_admin/abstract_resource.rb +11 -2
- data/lib/ab_admin/carrierwave/base_uploader.rb +45 -25
- data/lib/ab_admin/carrierwave/file_size_validator.rb +0 -1
- data/lib/ab_admin/carrierwave/glue.rb +2 -4
- data/lib/ab_admin/concerns/admin_addition.rb +12 -4
- data/lib/ab_admin/concerns/deep_cloneable.rb +0 -1
- data/lib/ab_admin/concerns/fileuploads.rb +0 -1
- data/lib/ab_admin/concerns/headerable.rb +0 -4
- data/lib/ab_admin/concerns/nested_set.rb +2 -3
- data/lib/ab_admin/concerns/reloadable.rb +0 -2
- data/lib/ab_admin/concerns/silencer.rb +0 -3
- data/lib/ab_admin/concerns/utilities.rb +2 -4
- data/lib/ab_admin/concerns/validations.rb +1 -1
- data/lib/ab_admin/config/base.rb +26 -6
- data/lib/ab_admin/controllers/callbacks.rb +6 -6
- data/lib/ab_admin/controllers/head_options.rb +0 -1
- data/lib/ab_admin/controllers/tree.rb +0 -2
- data/lib/ab_admin/core_ext.rb +1 -1
- data/lib/ab_admin/core_ext/array.rb +0 -1
- data/lib/ab_admin/core_ext/hash.rb +11 -0
- data/lib/ab_admin/core_ext/string.rb +0 -1
- data/lib/ab_admin/devise.rb +1 -1
- data/lib/ab_admin/engine.rb +2 -1
- data/lib/ab_admin/hooks/globalize_locale_suffix_accessors.rb +17 -31
- data/lib/ab_admin/hooks/will_paginate_no_uri.rb +1 -1
- data/lib/ab_admin/i18n_tools/google_translate.rb +0 -1
- data/lib/ab_admin/i18n_tools/translate_app.rb +0 -1
- data/lib/ab_admin/menu/builder.rb +3 -2
- data/lib/ab_admin/menu/group.rb +3 -1
- data/lib/ab_admin/models/asset.rb +9 -6
- data/lib/ab_admin/models/header.rb +2 -3
- data/lib/ab_admin/models/locator.rb +1 -1
- data/lib/ab_admin/models/settings.rb +6 -6
- data/lib/ab_admin/models/structure.rb +0 -6
- data/lib/ab_admin/models/track.rb +12 -3
- data/lib/ab_admin/models/type_model.rb +0 -1
- data/lib/ab_admin/models/user.rb +0 -1
- data/lib/ab_admin/models/validations/all.rb +4 -0
- data/lib/ab_admin/models/validations/domain_name_validator.rb +9 -0
- data/lib/ab_admin/models/validations/email_validator.rb +9 -0
- data/lib/ab_admin/utils.rb +12 -4
- data/lib/ab_admin/utils/eval_helpers.rb +1 -1
- data/lib/ab_admin/utils/logger.rb +0 -2
- data/lib/ab_admin/utils/xls_document.rb +25 -6
- data/lib/ab_admin/version.rb +1 -1
- data/lib/ab_admin/views/admin_helpers.rb +5 -4
- data/lib/ab_admin/views/admin_navigation_helpers.rb +16 -5
- data/lib/ab_admin/views/form_builder.rb +41 -10
- data/lib/ab_admin/views/helpers.rb +0 -2
- data/lib/ab_admin/views/inputs/uploader_input.rb +1 -0
- data/lib/ab_admin/views/search_form_builder.rb +33 -7
- data/lib/generators/ab_admin/ckeditor_assets/ckeditor_assets_generator.rb +0 -1
- data/lib/generators/ab_admin/glob/glob_generator.rb +2 -2
- data/lib/generators/ab_admin/glob/templates/migration.erb +1 -1
- data/lib/generators/ab_admin/install/install_generator.rb +0 -1
- data/lib/generators/ab_admin/install/templates/config/seeds.rb +0 -2
- data/lib/generators/ab_admin/install/templates/helpers/admin/structures_helper.rb +1 -4
- data/lib/generators/ab_admin/install/templates/models/admin_comment.rb +1 -3
- data/lib/generators/ab_admin/install/templates/models/asset.rb +3 -5
- data/lib/generators/ab_admin/install/templates/models/header.rb +1 -5
- data/lib/generators/ab_admin/install/templates/models/static_page.rb +1 -4
- data/lib/generators/ab_admin/install/templates/models/structure.rb +1 -5
- data/lib/generators/ab_admin/install/templates/models/track.rb +1 -2
- data/lib/generators/ab_admin/install/templates/models/user.rb +1 -9
- data/lib/generators/ab_admin/install/templates/uploaders/attachment_file_uploader.rb +1 -1
- data/lib/generators/ab_admin/install/templates/uploaders/avatar_uploader.rb +1 -1
- data/lib/generators/ab_admin/install/templates/uploaders/picture_uploader.rb +1 -1
- data/lib/generators/ab_admin/model/templates/resource.erb +1 -0
- data/lib/generators/template.rb +39 -59
- metadata +38 -36
- 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
|
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
|
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
|
-
|
36
|
-
|
37
|
-
changes.except(*
|
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 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(
|
14
|
-
scope :reversed_nested_set, -> { order(
|
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.
|
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
|
-
::
|
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?
|
data/lib/ab_admin/config/base.rb
CHANGED
@@ -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.
|
24
|
-
column_name = column.
|
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),
|
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
|
-
|
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
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
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(
|
31
|
+
object.assign_attributes(attributes)
|
32
32
|
|
33
33
|
#run_update_callbacks object do
|
34
34
|
save_resource(object)
|
data/lib/ab_admin/core_ext.rb
CHANGED
@@ -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|
|
data/lib/ab_admin/devise.rb
CHANGED
data/lib/ab_admin/engine.rb
CHANGED
@@ -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', :
|
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
|
-
|
3
|
-
def
|
4
|
-
|
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
|
-
|
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
|
-
|
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::
|
36
|
-
|
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
|
-
|
49
|
-
|
50
|
-
|
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::
|
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
|
@@ -4,8 +4,9 @@ module AbAdmin
|
|
4
4
|
include ::Singleton
|
5
5
|
|
6
6
|
def self.draw(&block)
|
7
|
-
I18n.
|
8
|
-
|
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)
|