rails_admin 0.8.1 → 1.0.0.rc

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 (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)