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.

Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -15
  3. data/LICENSE.md +1 -1
  4. data/README.md +21 -8
  5. data/app/assets/images/rails_admin/aristo/images/bg_fallback.png +0 -0
  6. data/app/assets/images/rails_admin/aristo/images/slider_handles.png +0 -0
  7. data/app/assets/images/rails_admin/aristo/images/ui-icons_222222_256x240.png +0 -0
  8. data/app/assets/images/rails_admin/aristo/images/ui-icons_454545_256x240.png +0 -0
  9. data/app/assets/images/rails_admin/bootstrap/glyphicons-halflings-white.png +0 -0
  10. data/app/assets/images/rails_admin/bootstrap/glyphicons-halflings.png +0 -0
  11. data/app/assets/images/rails_admin/bullet_black.png +0 -0
  12. data/app/assets/images/rails_admin/bullet_white.png +0 -0
  13. data/app/assets/images/rails_admin/calendar.png +0 -0
  14. data/app/assets/images/rails_admin/clock.png +0 -0
  15. data/app/assets/images/rails_admin/colorpicker/colorpicker_background.png +0 -0
  16. data/app/assets/images/rails_admin/colorpicker/colorpicker_hex.png +0 -0
  17. data/app/assets/images/rails_admin/colorpicker/colorpicker_hsb_b.png +0 -0
  18. data/app/assets/images/rails_admin/colorpicker/colorpicker_hsb_h.png +0 -0
  19. data/app/assets/images/rails_admin/colorpicker/colorpicker_hsb_s.png +0 -0
  20. data/app/assets/images/rails_admin/colorpicker/colorpicker_indic.gif +0 -0
  21. data/app/assets/images/rails_admin/colorpicker/colorpicker_overlay.png +0 -0
  22. data/app/assets/images/rails_admin/colorpicker/colorpicker_rgb_b.png +0 -0
  23. data/app/assets/images/rails_admin/colorpicker/colorpicker_rgb_g.png +0 -0
  24. data/app/assets/images/rails_admin/colorpicker/colorpicker_submit.png +0 -0
  25. data/app/assets/images/rails_admin/colorpicker/custom_background.png +0 -0
  26. data/app/assets/images/rails_admin/colorpicker/custom_hex.png +0 -0
  27. data/app/assets/images/rails_admin/colorpicker/custom_hsb_b.png +0 -0
  28. data/app/assets/images/rails_admin/colorpicker/custom_hsb_h.png +0 -0
  29. data/app/assets/images/rails_admin/colorpicker/custom_hsb_s.png +0 -0
  30. data/app/assets/images/rails_admin/colorpicker/custom_indic.gif +0 -0
  31. data/app/assets/images/rails_admin/colorpicker/custom_submit.png +0 -0
  32. data/app/assets/images/rails_admin/colorpicker/select.png +0 -0
  33. data/app/assets/images/rails_admin/colorpicker/slider.png +0 -0
  34. data/app/assets/images/rails_admin/magnifier.png +0 -0
  35. data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-n-dark.png +0 -0
  36. data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-s-dark.png +0 -0
  37. data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-s-light.png +0 -0
  38. data/app/assets/javascripts/rails_admin/ra.filter-box.js +1 -1
  39. data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.coffee +4 -1
  40. data/app/assets/javascripts/rails_admin/ra.remote-form.js +4 -1
  41. data/app/assets/javascripts/rails_admin/rails_admin.js +1 -1
  42. data/app/assets/stylesheets/rails_admin/aristo/images/bg_fallback.png +0 -0
  43. data/app/assets/stylesheets/rails_admin/aristo/images/slider_handles.png +0 -0
  44. data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_222222_256x240.png +0 -0
  45. data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_454545_256x240.png +0 -0
  46. data/app/assets/stylesheets/rails_admin/aristo/jquery-ui-1.8.7.custom.scss +5 -5
  47. data/app/assets/stylesheets/rails_admin/ra.widgets.scss +5 -1
  48. data/app/controllers/rails_admin/application_controller.rb +3 -3
  49. data/app/controllers/rails_admin/main_controller.rb +6 -6
  50. data/app/helpers/rails_admin/application_helper.rb +5 -5
  51. data/app/helpers/rails_admin/form_builder.rb +1 -1
  52. data/app/helpers/rails_admin/main_helper.rb +1 -1
  53. data/app/views/kaminari/{twitter-bootstrap → ra-twitter-bootstrap}/_gap.html.haml +0 -0
  54. data/app/views/kaminari/{twitter-bootstrap → ra-twitter-bootstrap}/_next_page.html.haml +0 -0
  55. data/app/views/kaminari/{twitter-bootstrap → ra-twitter-bootstrap}/_page.html.haml +0 -0
  56. data/app/views/kaminari/{twitter-bootstrap → ra-twitter-bootstrap}/_paginator.html.haml +0 -0
  57. data/app/views/kaminari/{twitter-bootstrap → ra-twitter-bootstrap}/_prev_page.html.haml +0 -0
  58. data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +1 -1
  59. data/app/views/rails_admin/main/_form_colorpicker.html.haml +1 -1
  60. data/app/views/rails_admin/main/dashboard.html.haml +5 -5
  61. data/app/views/rails_admin/main/export.html.haml +45 -36
  62. data/app/views/rails_admin/main/history.html.haml +2 -2
  63. data/app/views/rails_admin/main/index.html.haml +1 -1
  64. data/config/locales/rails_admin.en.yml +1 -1
  65. data/lib/generators/rails_admin/templates/initializer.erb +4 -0
  66. data/lib/rails_admin.rb +23 -0
  67. data/lib/rails_admin/adapters/active_record.rb +8 -3
  68. data/lib/rails_admin/adapters/mongoid.rb +10 -13
  69. data/lib/rails_admin/adapters/mongoid/abstract_object.rb +1 -0
  70. data/lib/rails_admin/adapters/mongoid/association.rb +1 -0
  71. data/lib/rails_admin/adapters/mongoid/bson.rb +29 -0
  72. data/lib/rails_admin/config.rb +12 -6
  73. data/lib/rails_admin/config/actions/bulk_delete.rb +2 -2
  74. data/lib/rails_admin/config/actions/dashboard.rb +3 -3
  75. data/lib/rails_admin/config/actions/export.rb +1 -1
  76. data/lib/rails_admin/config/actions/index.rb +6 -2
  77. data/lib/rails_admin/config/actions/new.rb +2 -1
  78. data/lib/rails_admin/config/fields/association.rb +5 -1
  79. data/lib/rails_admin/config/fields/types/active_record_enum.rb +4 -0
  80. data/lib/rails_admin/config/fields/types/bson_object_id.rb +1 -15
  81. data/lib/rails_admin/config/fields/types/datetime.rb +5 -2
  82. data/lib/rails_admin/config/fields/types/file_upload.rb +1 -1
  83. data/lib/rails_admin/config/fields/types/serialized.rb +2 -2
  84. data/lib/rails_admin/config/fields/types/wysihtml5.rb +2 -2
  85. data/lib/rails_admin/config/lazy_model.rb +44 -4
  86. data/lib/rails_admin/config/model.rb +1 -1
  87. data/lib/rails_admin/engine.rb +0 -1
  88. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +2 -1
  89. data/lib/rails_admin/support/csv_converter.rb +9 -13
  90. data/lib/rails_admin/support/datetime.rb +6 -5
  91. data/lib/rails_admin/support/i18n.rb +7 -5
  92. data/lib/rails_admin/version.rb +4 -4
  93. metadata +22 -30
  94. 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-used= t "admin.table_headers.last_used"
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
- - last_used = @most_recent_changes[abstract_model.model.name]
16
- - active = last_used.try(:today?)
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 last_used
21
- = time_ago_in_words last_used
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 denser' do
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.col-sm-12
12
- .controls
13
- .col-sm-12
14
- %label.col-sm-12.checkbox{for: 'check_all'}
15
- = check_box_tag 'all', 'all', true, { id: 'check_all' }
16
- = t('admin.export.select_all_fields')
17
- .form-group.control-group.col-sm-12
18
- %label.col-sm-12.well.control-label{rel: 'tooltip', :'data-original-title' => t('admin.export.click_to_reverse_selection'), onclick: 'jQuery(this).siblings(".controls").find("input").click()'}= t('admin.export.fields_from', name: @model_config.label_plural.downcase)
19
- .col-sm-11.col-sm-offset-1.controls
20
- - visible_fields.select{ |f| !f.association? || f.association.polymorphic? }.each do |field|
21
- - list = field.virtual? ? 'methods' : 'only'
22
- - if field.association? && field.association.polymorphic?
23
- %label.checkbox.col-sm-3{for: "schema_#{list}_#{field.method_name}"}
24
- = check_box_tag "schema[#{list}][]", field.method_name, true, { id: "schema_#{list}_#{field.method_name}" }
25
- = field.label + " [id]"
26
- - polymorphic_type_column_name = @abstract_model.properties.detect {|p| field.association.foreign_type == p.name }.name
27
- %label.checkbox.col-sm-3{for: "schema_#{list}_#{polymorphic_type_column_name}"}
28
- = check_box_tag "schema[#{list}][]", polymorphic_type_column_name, true, { id: "schema_#{list}_#{polymorphic_type_column_name}" }
29
- = capitalize_first_letter(field.label) + " [type]"
30
- - else
31
- %label.checkbox.col-sm-3{for: "schema_#{list}_#{field.name}"}
32
- = check_box_tag "schema[#{list}][]", field.name, true, { id: "schema_#{list}_#{field.name}" }
33
- = capitalize_first_letter(field.label)
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.col-sm-12
38
- %label.col-sm-12.well.control-label{rel: 'tooltip', :'data-original-title' => t('admin.export.click_to_reverse_selection'), onclick: 'jQuery(this).siblings(".controls").find("input").click()'}= t('admin.export.fields_from_associated', name: field.label.downcase)
39
- .col-sm-11.col-sm-offset-1.controls
40
- - fields.each do |associated_model_field|
41
- - list = associated_model_field.virtual? ? 'methods' : 'only'
42
- %label.checkbox.col-sm-3{for: "schema_include_#{field.name}_#{list}_#{associated_model_field.name}"}
43
- = check_box_tag "schema[include][#{field.name}][#{list}][]", associated_model_field.name, true, { id: "schema_include_#{field.name}_#{list}_#{associated_model_field.name}" }
44
- = capitalize_first_letter(associated_model_field.label)
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(RailsAdmin::CSVConverter::TARGET_ENCODINGS), include_blank: true
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
- %label.checkbox
62
- = check_box_tag 'csv_options[skip_header]', 'true'
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, locale: :en))
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}"
@@ -52,7 +52,7 @@ en:
52
52
  object_not_found: "%{model} with id '%{id}' could not be found"
53
53
  table_headers:
54
54
  model_name: "Model name"
55
- last_used: "Last used"
55
+ last_created: "Last created"
56
56
  records: "Records"
57
57
  username: "User"
58
58
  changes: "Changes"
@@ -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
- encoding = ::ActiveRecord::Base.connection.try(:encoding)
71
- encoding ||= ::ActiveRecord::Base.connection.try(:charset) # mysql2
72
- encoding || 'UTF-8'
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 = ['Range', 'Moped::BSON::Binary', 'BSON::Binary', 'Mongoid::Geospatial::Point']
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
- 'UTF-8'
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
- if statements.any?
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
- if statements.any?
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)
@@ -1,4 +1,5 @@
1
1
  require 'rails_admin/adapters/active_record/abstract_object'
2
+
2
3
  module RailsAdmin
3
4
  module Adapters
4
5
  module Mongoid
@@ -3,6 +3,7 @@ module RailsAdmin
3
3
  module Mongoid
4
4
  class Association
5
5
  attr_reader :association, :model
6
+
6
7
  def initialize(association, model)
7
8
  @association = association
8
9
  @model = model
@@ -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
@@ -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) + ['RailsAdmin::History'])
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
- if block
227
- @registry[key] = RailsAdmin::Config::LazyModel.new(entity, &block)
228
- else
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
- msg = t('admin.flash.error', name: pluralize(0, @model_config.label), action: t('admin.actions.delete.done'))
46
- render text: msg, status: :not_found
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
- @most_recent_changes = {}
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 == :updated_at }
30
- @most_recent_changes[t.model.name] = t.first(sort: "#{t.table_name}.updated_at").try(:updated_at)
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)