rails_admin 0.8.1 → 1.0.0.rc
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of rails_admin might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Gemfile +3 -15
- data/LICENSE.md +1 -1
- data/README.md +21 -8
- data/app/assets/images/rails_admin/aristo/images/bg_fallback.png +0 -0
- data/app/assets/images/rails_admin/aristo/images/slider_handles.png +0 -0
- data/app/assets/images/rails_admin/aristo/images/ui-icons_222222_256x240.png +0 -0
- data/app/assets/images/rails_admin/aristo/images/ui-icons_454545_256x240.png +0 -0
- data/app/assets/images/rails_admin/bootstrap/glyphicons-halflings-white.png +0 -0
- data/app/assets/images/rails_admin/bootstrap/glyphicons-halflings.png +0 -0
- data/app/assets/images/rails_admin/bullet_black.png +0 -0
- data/app/assets/images/rails_admin/bullet_white.png +0 -0
- data/app/assets/images/rails_admin/calendar.png +0 -0
- data/app/assets/images/rails_admin/clock.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_background.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_hex.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_hsb_b.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_hsb_h.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_hsb_s.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_indic.gif +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_overlay.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_rgb_b.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_rgb_g.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_submit.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/custom_background.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/custom_hex.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/custom_hsb_b.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/custom_hsb_h.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/custom_hsb_s.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/custom_indic.gif +0 -0
- data/app/assets/images/rails_admin/colorpicker/custom_submit.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/select.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/slider.png +0 -0
- data/app/assets/images/rails_admin/magnifier.png +0 -0
- data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-n-dark.png +0 -0
- data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-s-dark.png +0 -0
- data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-s-light.png +0 -0
- data/app/assets/javascripts/rails_admin/ra.filter-box.js +1 -1
- data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.coffee +4 -1
- data/app/assets/javascripts/rails_admin/ra.remote-form.js +4 -1
- data/app/assets/javascripts/rails_admin/rails_admin.js +1 -1
- data/app/assets/stylesheets/rails_admin/aristo/images/bg_fallback.png +0 -0
- data/app/assets/stylesheets/rails_admin/aristo/images/slider_handles.png +0 -0
- data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_222222_256x240.png +0 -0
- data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_454545_256x240.png +0 -0
- data/app/assets/stylesheets/rails_admin/aristo/jquery-ui-1.8.7.custom.scss +5 -5
- data/app/assets/stylesheets/rails_admin/ra.widgets.scss +5 -1
- data/app/controllers/rails_admin/application_controller.rb +3 -3
- data/app/controllers/rails_admin/main_controller.rb +6 -6
- data/app/helpers/rails_admin/application_helper.rb +5 -5
- data/app/helpers/rails_admin/form_builder.rb +1 -1
- data/app/helpers/rails_admin/main_helper.rb +1 -1
- data/app/views/kaminari/{twitter-bootstrap → ra-twitter-bootstrap}/_gap.html.haml +0 -0
- data/app/views/kaminari/{twitter-bootstrap → ra-twitter-bootstrap}/_next_page.html.haml +0 -0
- data/app/views/kaminari/{twitter-bootstrap → ra-twitter-bootstrap}/_page.html.haml +0 -0
- data/app/views/kaminari/{twitter-bootstrap → ra-twitter-bootstrap}/_paginator.html.haml +0 -0
- data/app/views/kaminari/{twitter-bootstrap → ra-twitter-bootstrap}/_prev_page.html.haml +0 -0
- data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +1 -1
- data/app/views/rails_admin/main/_form_colorpicker.html.haml +1 -1
- data/app/views/rails_admin/main/dashboard.html.haml +5 -5
- data/app/views/rails_admin/main/export.html.haml +45 -36
- data/app/views/rails_admin/main/history.html.haml +2 -2
- data/app/views/rails_admin/main/index.html.haml +1 -1
- data/config/locales/rails_admin.en.yml +1 -1
- data/lib/generators/rails_admin/templates/initializer.erb +4 -0
- data/lib/rails_admin.rb +23 -0
- data/lib/rails_admin/adapters/active_record.rb +8 -3
- data/lib/rails_admin/adapters/mongoid.rb +10 -13
- data/lib/rails_admin/adapters/mongoid/abstract_object.rb +1 -0
- data/lib/rails_admin/adapters/mongoid/association.rb +1 -0
- data/lib/rails_admin/adapters/mongoid/bson.rb +29 -0
- data/lib/rails_admin/config.rb +12 -6
- data/lib/rails_admin/config/actions/bulk_delete.rb +2 -2
- data/lib/rails_admin/config/actions/dashboard.rb +3 -3
- data/lib/rails_admin/config/actions/export.rb +1 -1
- data/lib/rails_admin/config/actions/index.rb +6 -2
- data/lib/rails_admin/config/actions/new.rb +2 -1
- data/lib/rails_admin/config/fields/association.rb +5 -1
- data/lib/rails_admin/config/fields/types/active_record_enum.rb +4 -0
- data/lib/rails_admin/config/fields/types/bson_object_id.rb +1 -15
- data/lib/rails_admin/config/fields/types/datetime.rb +5 -2
- data/lib/rails_admin/config/fields/types/file_upload.rb +1 -1
- data/lib/rails_admin/config/fields/types/serialized.rb +2 -2
- data/lib/rails_admin/config/fields/types/wysihtml5.rb +2 -2
- data/lib/rails_admin/config/lazy_model.rb +44 -4
- data/lib/rails_admin/config/model.rb +1 -1
- data/lib/rails_admin/engine.rb +0 -1
- data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +2 -1
- data/lib/rails_admin/support/csv_converter.rb +9 -13
- data/lib/rails_admin/support/datetime.rb +6 -5
- data/lib/rails_admin/support/i18n.rb +7 -5
- data/lib/rails_admin/version.rb +4 -4
- metadata +22 -30
- data/app/assets/javascripts/rails_admin/jquery.remotipart.fixed.js +0 -72
@@ -1 +1 @@
|
|
1
|
-
= form.send field.view_helper, field.method_name, field.html_attributes.reverse_merge({value: field.form_value, style: "background-color: #{field.color}", data: {color: true}})
|
1
|
+
= form.send field.view_helper, field.method_name, field.html_attributes.reverse_merge({class: 'form-control', value: field.form_value, style: "background-color: #{field.color}", data: {color: true}})
|
@@ -3,7 +3,7 @@
|
|
3
3
|
%thead
|
4
4
|
%tr
|
5
5
|
%th.shrink.model-name= t "admin.table_headers.model_name"
|
6
|
-
%th.shrink.last-
|
6
|
+
%th.shrink.last-created= t "admin.table_headers.last_created"
|
7
7
|
%th.records= t "admin.table_headers.records"
|
8
8
|
%th.shrink.controls
|
9
9
|
%tbody
|
@@ -12,13 +12,13 @@
|
|
12
12
|
- index_path = index_path(model_name: abstract_model.to_param)
|
13
13
|
- row_class = "#{cycle("odd", "even")}#{" link" if index_path} #{abstract_model.param_key}_links"
|
14
14
|
%tr{class: row_class, :"data-link" => index_path}
|
15
|
-
-
|
16
|
-
- active =
|
15
|
+
- last_created = @most_recent_created[abstract_model.model.name]
|
16
|
+
- active = last_created.try(:today?)
|
17
17
|
%td
|
18
18
|
%span.show= link_to capitalize_first_letter(abstract_model.config.label_plural), index_path, class: 'pjax'
|
19
19
|
%td
|
20
|
-
- if
|
21
|
-
= time_ago_in_words
|
20
|
+
- if last_created
|
21
|
+
= time_ago_in_words last_created
|
22
22
|
= t "admin.misc.ago"
|
23
23
|
%td
|
24
24
|
- count = @count[abstract_model.model.name]
|
@@ -1,47 +1,55 @@
|
|
1
1
|
- params = request.params.except(:action, :controller, :utf8, :page, :per_page, :format, :authenticity_token)
|
2
2
|
- visible_fields = @model_config.export.with(view: self, object: @abstract_model.model.new, controller: self.controller).visible_fields
|
3
3
|
|
4
|
-
= form_tag export_path(params.merge(all: true)), method: 'post', class: 'form-horizontal
|
4
|
+
= form_tag export_path(params.merge(all: true)), method: 'post', class: 'form-horizontal' do
|
5
5
|
|
6
6
|
%input{name: "send_data", type: "hidden", value: "true"}/
|
7
7
|
%fieldset{id: 'fields_to_export'}
|
8
8
|
%legend
|
9
9
|
%i.icon-chevron-down
|
10
10
|
= t('admin.export.select')
|
11
|
-
.form-group.control-group
|
12
|
-
.
|
13
|
-
.
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
.form-group.control-group
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
11
|
+
.form-group.control-group
|
12
|
+
.col-sm-12
|
13
|
+
.checkbox
|
14
|
+
%label{for: 'check_all'}
|
15
|
+
= check_box_tag 'all', 'all', true, { id: 'check_all' }
|
16
|
+
%b= t('admin.export.select_all_fields')
|
17
|
+
.form-group.control-group
|
18
|
+
.col-sm-12
|
19
|
+
.well.well-sm{rel: 'tooltip', :'data-original-title' => t('admin.export.click_to_reverse_selection'), onclick: 'jQuery(this).closest(".control-group").find(".controls").find("input").click()', style: 'margin: 0; cursor: pointer;'}
|
20
|
+
%b= t('admin.export.fields_from', name: @model_config.label_plural.downcase)
|
21
|
+
.controls
|
22
|
+
.row
|
23
|
+
- visible_fields.select{ |f| !f.association? || f.association.polymorphic? }.each do |field|
|
24
|
+
- list = field.virtual? ? 'methods' : 'only'
|
25
|
+
.checkbox.col-sm-3
|
26
|
+
- if field.association? && field.association.polymorphic?
|
27
|
+
%label{for: "schema_#{list}_#{field.method_name}"}
|
28
|
+
= check_box_tag "schema[#{list}][]", field.method_name, true, { id: "schema_#{list}_#{field.method_name}" }
|
29
|
+
= field.label + " [id]"
|
30
|
+
- polymorphic_type_column_name = @abstract_model.properties.detect {|p| field.association.foreign_type == p.name }.name
|
31
|
+
%label{for: "schema_#{list}_#{polymorphic_type_column_name}"}
|
32
|
+
= check_box_tag "schema[#{list}][]", polymorphic_type_column_name, true, { id: "schema_#{list}_#{polymorphic_type_column_name}" }
|
33
|
+
= capitalize_first_letter(field.label) + " [type]"
|
34
|
+
- else
|
35
|
+
%label{for: "schema_#{list}_#{field.name}"}
|
36
|
+
= check_box_tag "schema[#{list}][]", field.name, true, { id: "schema_#{list}_#{field.name}" }
|
37
|
+
= capitalize_first_letter(field.label)
|
34
38
|
|
35
39
|
- visible_fields.select{ |f| f.association? && !f.association.polymorphic? }.each do |field|
|
36
40
|
- fields = field.associated_model_config.export.with(controller: self.controller, view: self, object: (associated_model = field.associated_model_config.abstract_model.model).new).visible_fields.select{ |f| !f.association? }
|
37
|
-
.form-group.control-group
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
41
|
+
.form-group.control-group
|
42
|
+
.col-sm-12
|
43
|
+
.well.well-sm{rel: 'tooltip', :'data-original-title' => t('admin.export.click_to_reverse_selection'), onclick: 'jQuery(this).closest(".control-group").find(".controls").find("input").click()', style: 'margin: 0; cursor: pointer;'}
|
44
|
+
%b= t('admin.export.fields_from_associated', name: field.label.downcase)
|
45
|
+
.controls
|
46
|
+
.row
|
47
|
+
- fields.each do |associated_model_field|
|
48
|
+
- list = associated_model_field.virtual? ? 'methods' : 'only'
|
49
|
+
.checkbox.col-sm-3
|
50
|
+
%label{for: "schema_include_#{field.name}_#{list}_#{associated_model_field.name}"}
|
51
|
+
= check_box_tag "schema[include][#{field.name}][#{list}][]", associated_model_field.name, true, { id: "schema_include_#{field.name}_#{list}_#{associated_model_field.name}" }
|
52
|
+
= capitalize_first_letter(associated_model_field.label)
|
45
53
|
|
46
54
|
%fieldset
|
47
55
|
%legend
|
@@ -52,20 +60,21 @@
|
|
52
60
|
%label.col-sm-2.control-label{for: "csv_options_encoding_to"}= t('admin.export.csv.encoding_to')
|
53
61
|
.col-sm-10.controls
|
54
62
|
-# from http://books.google.com/support/partner/bin/answer.py?answer=30990 :
|
55
|
-
= select_tag 'csv_options[encoding_to]', options_for_select(
|
63
|
+
= select_tag 'csv_options[encoding_to]', options_for_select(Encoding.name_list.sort), include_blank: true, placeholder: t('admin.misc.search'), :'data-enumeration' => true
|
56
64
|
%p.help-block= t('admin.export.csv.encoding_to_help', name: guessed_encoding)
|
57
65
|
|
58
66
|
.form-group.control-group
|
59
67
|
%label.col-sm-2.control-label{for: "csv_options_skip_header"}= t('admin.export.csv.skip_header')
|
60
68
|
.col-sm-10.controls
|
61
|
-
|
62
|
-
|
69
|
+
.checkbox
|
70
|
+
%label{style: 'display: block;' }
|
71
|
+
= check_box_tag 'csv_options[skip_header]', 'true'
|
63
72
|
%p.help-block= t('admin.export.csv.skip_header_help')
|
64
73
|
|
65
74
|
.form-group.control-group
|
66
75
|
%label.col-sm-2.control-label{for: "csv_options_generator_col_sep"}= t('admin.export.csv.col_sep')
|
67
76
|
.col-sm-10.controls
|
68
|
-
= select_tag 'csv_options[generator][col_sep]', options_for_select({ '' => t('admin.export.csv.default_col_sep'), "<comma> ','" => ',', "<semicolon> ';'" => ';', '<tabs>' => "'\t'" })
|
77
|
+
= select_tag 'csv_options[generator][col_sep]', options_for_select({ '' => t('admin.export.csv.default_col_sep'), "<comma> ','" => ',', "<semicolon> ';'" => ';', '<tabs>' => "'\t'" }), placeholder: t('admin.misc.search'), :'data-enumeration' => true
|
69
78
|
%p.help-block= t('admin.export.csv.col_sep_help', value: t('admin.export.csv.default_col_sep'))
|
70
79
|
|
71
80
|
.form-group.form-actions
|
@@ -32,7 +32,7 @@
|
|
32
32
|
- @history.each_with_index do |object, index|
|
33
33
|
%tr
|
34
34
|
- unless object.created_at.nil?
|
35
|
-
%td= l(object.created_at, format: :long, default: l(object.created_at, format: :long
|
35
|
+
%td= l(object.created_at, format: :long, default: l(object.created_at, format: :long))
|
36
36
|
%td= object.username
|
37
37
|
- if @general
|
38
38
|
- if o = @abstract_model.get(object.item)
|
@@ -46,6 +46,6 @@
|
|
46
46
|
%td= object.message.in?(['delete', 'new']) ? t("admin.actions.#{object.message}.done").capitalize : object.message
|
47
47
|
|
48
48
|
- unless params[:all] || !@history.respond_to?(:current_page)
|
49
|
-
= paginate(@history, theme: 'twitter-bootstrap', remote: true)
|
49
|
+
= paginate(@history, theme: 'ra-twitter-bootstrap', remote: true)
|
50
50
|
= link_to(t("admin.misc.show_all"), send(path_method, params.merge(all: true)), class: "show-all btn pjax") unless (tc = @history.total_count) <= @history.size || tc > 100
|
51
51
|
|
@@ -106,7 +106,7 @@
|
|
106
106
|
- if @objects.respond_to?(:total_count)
|
107
107
|
- total_count = @objects.total_count.to_i
|
108
108
|
.row
|
109
|
-
.col-md-6= paginate(@objects, theme: 'twitter-bootstrap', remote: true)
|
109
|
+
.col-md-6= paginate(@objects, theme: 'ra-twitter-bootstrap', remote: true)
|
110
110
|
.row
|
111
111
|
.col-md-6= link_to(t("admin.misc.show_all"), index_path(params.merge(all: true)), class: "show-all btn btn-default clearfix pjax") unless total_count > 100 || total_count <= @objects.to_a.size
|
112
112
|
.clearfix.total-count= "#{total_count} #{@model_config.pluralize(total_count).downcase}"
|
@@ -19,6 +19,10 @@ RailsAdmin.config do |config|
|
|
19
19
|
|
20
20
|
### More at https://github.com/sferik/rails_admin/wiki/Base-configuration
|
21
21
|
|
22
|
+
## == Gravatar integration ==
|
23
|
+
## To disable Gravatar integration in Navigation Bar set to false
|
24
|
+
# config.show_gravatar true
|
25
|
+
|
22
26
|
config.actions do
|
23
27
|
dashboard # mandatory
|
24
28
|
index # mandatory
|
data/lib/rails_admin.rb
CHANGED
@@ -9,6 +9,7 @@ require 'rails_admin/extensions/paper_trail'
|
|
9
9
|
require 'rails_admin/extensions/history'
|
10
10
|
require 'rails_admin/support/csv_converter'
|
11
11
|
require 'rails_admin/support/hash_helper'
|
12
|
+
require 'yaml'
|
12
13
|
|
13
14
|
module RailsAdmin
|
14
15
|
# Setup RailsAdmin
|
@@ -33,6 +34,28 @@ module RailsAdmin
|
|
33
34
|
RailsAdmin::Config
|
34
35
|
end
|
35
36
|
end
|
37
|
+
|
38
|
+
# Backwards-compatible with safe_yaml/load when SafeYAML isn't available.
|
39
|
+
# Evaluates available YAML loaders at boot and creates appropriate method,
|
40
|
+
# so no conditionals are required at runtime.
|
41
|
+
begin
|
42
|
+
require 'safe_yaml/load'
|
43
|
+
def self.yaml_load(yaml)
|
44
|
+
SafeYAML.load(yaml)
|
45
|
+
end
|
46
|
+
rescue LoadError
|
47
|
+
if YAML.respond_to?(:safe_load)
|
48
|
+
def self.yaml_load(yaml)
|
49
|
+
YAML.safe_load(yaml)
|
50
|
+
end
|
51
|
+
else
|
52
|
+
raise LoadError.new "Safe-loading of YAML is not available. Please install 'safe_yaml' or install Psych 2.0+"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.yaml_dump(object)
|
57
|
+
YAML.dump(object)
|
58
|
+
end
|
36
59
|
end
|
37
60
|
|
38
61
|
require 'rails_admin/bootstrap-sass' unless defined? Bootstrap
|
@@ -67,9 +67,14 @@ module RailsAdmin
|
|
67
67
|
delegate :primary_key, :table_name, to: :model, prefix: false
|
68
68
|
|
69
69
|
def encoding
|
70
|
-
|
71
|
-
|
72
|
-
|
70
|
+
case ::ActiveRecord::Base.connection_config[:adapter]
|
71
|
+
when 'postgresql'
|
72
|
+
::ActiveRecord::Base.connection.select_one("SELECT ''::text AS str;").values.first.encoding
|
73
|
+
when 'mysql2'
|
74
|
+
::ActiveRecord::Base.connection.instance_variable_get(:@connection).encoding
|
75
|
+
else
|
76
|
+
::ActiveRecord::Base.connection.select_one("SELECT '' AS str;").values.first.encoding
|
77
|
+
end
|
73
78
|
end
|
74
79
|
|
75
80
|
def embedded?
|
@@ -3,11 +3,16 @@ require 'rails_admin/config/sections/list'
|
|
3
3
|
require 'rails_admin/adapters/mongoid/abstract_object'
|
4
4
|
require 'rails_admin/adapters/mongoid/association'
|
5
5
|
require 'rails_admin/adapters/mongoid/property'
|
6
|
+
require 'rails_admin/adapters/mongoid/bson'
|
6
7
|
|
7
8
|
module RailsAdmin
|
8
9
|
module Adapters
|
9
10
|
module Mongoid
|
10
|
-
DISABLED_COLUMN_TYPES =
|
11
|
+
DISABLED_COLUMN_TYPES = %w(Range Moped::BSON::Binary BSON::Binary Mongoid::Geospatial::Point)
|
12
|
+
|
13
|
+
def parse_object_id(value)
|
14
|
+
Bson.parse_object_id(value)
|
15
|
+
end
|
11
16
|
|
12
17
|
def new(params = {})
|
13
18
|
AbstractObject.new(model.new(params))
|
@@ -17,10 +22,10 @@ module RailsAdmin
|
|
17
22
|
AbstractObject.new(model.find(id))
|
18
23
|
rescue => e
|
19
24
|
raise e if %w(
|
20
|
-
BSON::InvalidObjectId
|
21
25
|
Mongoid::Errors::DocumentNotFound
|
22
26
|
Mongoid::Errors::InvalidFind
|
23
27
|
Moped::Errors::InvalidObjectId
|
28
|
+
BSON::InvalidObjectId
|
24
29
|
).exclude?(e.class.to_s)
|
25
30
|
end
|
26
31
|
|
@@ -74,7 +79,7 @@ module RailsAdmin
|
|
74
79
|
end
|
75
80
|
|
76
81
|
def encoding
|
77
|
-
|
82
|
+
Encoding::UTF_8
|
78
83
|
end
|
79
84
|
|
80
85
|
def embedded?
|
@@ -117,11 +122,7 @@ module RailsAdmin
|
|
117
122
|
statements.concat make_condition_for_current_collection(field, conditions_per_collection)
|
118
123
|
end
|
119
124
|
|
120
|
-
|
121
|
-
{'$or' => statements}
|
122
|
-
else
|
123
|
-
{}
|
124
|
-
end
|
125
|
+
statements.any? ? {'$or' => statements} : {}
|
125
126
|
end
|
126
127
|
|
127
128
|
# filters example => {"string_field"=>{"0055"=>{"o"=>"like", "v"=>"test_value"}}, ...}
|
@@ -144,11 +145,7 @@ module RailsAdmin
|
|
144
145
|
end
|
145
146
|
end
|
146
147
|
|
147
|
-
|
148
|
-
{'$and' => statements}
|
149
|
-
else
|
150
|
-
{}
|
151
|
-
end
|
148
|
+
statements.any? ? {'$and' => statements} : {}
|
152
149
|
end
|
153
150
|
|
154
151
|
def parse_collection_name(column)
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'mongoid'
|
2
|
+
|
3
|
+
module RailsAdmin
|
4
|
+
module Adapters
|
5
|
+
module Mongoid
|
6
|
+
class Bson
|
7
|
+
OBJECT_ID = begin
|
8
|
+
if defined?(Moped::BSON)
|
9
|
+
Moped::BSON::ObjectId
|
10
|
+
elsif defined?(BSON::ObjectId)
|
11
|
+
BSON::ObjectId
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class << self
|
16
|
+
def parse_object_id(value)
|
17
|
+
OBJECT_ID.from_string(value)
|
18
|
+
rescue => e
|
19
|
+
raise e if %w(
|
20
|
+
Moped::Errors::InvalidObjectId
|
21
|
+
BSON::ObjectId::Invalid
|
22
|
+
BSON::InvalidObjectId
|
23
|
+
).exclude?(e.class.to_s)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/rails_admin/config.rb
CHANGED
@@ -41,6 +41,9 @@ module RailsAdmin
|
|
41
41
|
# been configured
|
42
42
|
attr_accessor :default_items_per_page
|
43
43
|
|
44
|
+
# Default association limit
|
45
|
+
attr_accessor :default_associated_collection_limit
|
46
|
+
|
44
47
|
attr_reader :default_search_operator
|
45
48
|
|
46
49
|
# Configuration option to specify which method names will be searched for
|
@@ -65,6 +68,9 @@ module RailsAdmin
|
|
65
68
|
# @see RailsAdmin.config
|
66
69
|
attr_reader :registry
|
67
70
|
|
71
|
+
# show Gravatar in Navigation bar
|
72
|
+
attr_accessor :show_gravatar
|
73
|
+
|
68
74
|
# accepts a hash of static links to be shown below the main navigation
|
69
75
|
attr_accessor :navigation_static_links
|
70
76
|
attr_accessor :navigation_static_label
|
@@ -193,7 +199,7 @@ module RailsAdmin
|
|
193
199
|
|
194
200
|
# pool of all found model names from the whole application
|
195
201
|
def models_pool
|
196
|
-
excluded = (excluded_models.collect(&:to_s) +
|
202
|
+
excluded = (excluded_models.collect(&:to_s) + %w(RailsAdmin::History PaperTrail::Version PaperTrail::VersionAssociation))
|
197
203
|
|
198
204
|
(viable_models - excluded).uniq.sort
|
199
205
|
end
|
@@ -223,11 +229,9 @@ module RailsAdmin
|
|
223
229
|
end
|
224
230
|
end
|
225
231
|
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
@registry[key] ||= RailsAdmin::Config::LazyModel.new(entity)
|
230
|
-
end
|
232
|
+
@registry[key] ||= RailsAdmin::Config::LazyModel.new(entity)
|
233
|
+
@registry[key].add_deferred_block(&block) if block
|
234
|
+
@registry[key]
|
231
235
|
end
|
232
236
|
|
233
237
|
def default_hidden_fields=(fields)
|
@@ -268,6 +272,7 @@ module RailsAdmin
|
|
268
272
|
@default_hidden_fields[:edit] = [:id, :_id, :created_at, :created_on, :deleted_at, :updated_at, :updated_on, :deleted_on]
|
269
273
|
@default_hidden_fields[:show] = [:id, :_id, :created_at, :created_on, :deleted_at, :updated_at, :updated_on, :deleted_on]
|
270
274
|
@default_items_per_page = 20
|
275
|
+
@default_associated_collection_limit = 100
|
271
276
|
@default_search_operator = 'default'
|
272
277
|
@excluded_models = []
|
273
278
|
@included_models = []
|
@@ -275,6 +280,7 @@ module RailsAdmin
|
|
275
280
|
@label_methods = [:name, :title]
|
276
281
|
@main_app_name = proc { [Rails.application.engine_name.titleize.chomp(' Application'), 'Admin'] }
|
277
282
|
@registry = {}
|
283
|
+
@show_gravatar = true
|
278
284
|
@navigation_static_links = {}
|
279
285
|
@navigation_static_label = nil
|
280
286
|
@parent_controller = '::ApplicationController'
|
@@ -42,8 +42,8 @@ module RailsAdmin
|
|
42
42
|
end
|
43
43
|
|
44
44
|
if destroyed.nil?
|
45
|
-
|
46
|
-
|
45
|
+
flash[:error] = t('admin.flash.error', name: pluralize(0, @model_config.label), action: t('admin.actions.delete.done'))
|
46
|
+
redirect_to back_or_index
|
47
47
|
else
|
48
48
|
flash[:success] = t('admin.flash.successful', name: pluralize(destroyed.count, @model_config.label), action: t('admin.actions.delete.done')) unless destroyed.empty?
|
49
49
|
flash[:error] = t('admin.flash.error', name: pluralize(not_destroyed.count, @model_config.label), action: t('admin.actions.delete.done')) unless not_destroyed.empty?
|
@@ -18,7 +18,7 @@ module RailsAdmin
|
|
18
18
|
if @action.statistics?
|
19
19
|
@abstract_models = RailsAdmin::Config.visible_models(controller: self).collect(&:abstract_model)
|
20
20
|
|
21
|
-
@
|
21
|
+
@most_recent_created = {}
|
22
22
|
@count = {}
|
23
23
|
@max = 0
|
24
24
|
@abstract_models.each do |t|
|
@@ -26,8 +26,8 @@ module RailsAdmin
|
|
26
26
|
current_count = t.count({}, scope)
|
27
27
|
@max = current_count > @max ? current_count : @max
|
28
28
|
@count[t.model.name] = current_count
|
29
|
-
next unless t.properties.detect { |c| c.name == :
|
30
|
-
@
|
29
|
+
next unless t.properties.detect { |c| c.name == :created_at }
|
30
|
+
@most_recent_created[t.model.name] = t.model.last.try(:created_at)
|
31
31
|
end
|
32
32
|
end
|
33
33
|
render @action.template_name, status: (flash[:error].present? ? :not_found : 200)
|