ab_admin 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. data/Gemfile +1 -0
  2. data/Guardfile +1 -1
  3. data/app/assets/images/admin/flags/b_uk.png +0 -0
  4. data/app/assets/images/admin/preloader.gif +0 -0
  5. data/app/assets/javascripts/ab_admin/application.js +1 -28
  6. data/app/assets/javascripts/ab_admin/components/admin_assets.js.coffee +29 -6
  7. data/app/assets/javascripts/ab_admin/components/gmaps.js.coffee +120 -91
  8. data/app/assets/javascripts/ab_admin/components/google_translate.js.coffee +3 -2
  9. data/app/assets/javascripts/ab_admin/core/batch_actions.js.coffee +4 -7
  10. data/app/assets/javascripts/ab_admin/core/init.js.coffee +8 -10
  11. data/app/assets/javascripts/ab_admin/core/ui_utils.js.coffee +53 -24
  12. data/app/assets/javascripts/ab_admin/core/utils.js.coffee +7 -0
  13. data/app/assets/javascripts/ab_admin/inputs/datetime_input.js.coffee +1 -2
  14. data/app/assets/javascripts/ab_admin/main.js +28 -0
  15. data/app/assets/stylesheets/ab_admin/application.css.scss +1 -10
  16. data/app/assets/stylesheets/ab_admin/bootstrap_and_overrides.css.scss +4 -0
  17. data/app/assets/stylesheets/ab_admin/components/_base.css.scss +4 -1
  18. data/app/assets/stylesheets/ab_admin/components/_form.css.scss +10 -13
  19. data/app/assets/stylesheets/ab_admin/components/_geo_input.css.scss +5 -9
  20. data/app/assets/stylesheets/ab_admin/fileupload.css.scss +68 -102
  21. data/app/assets/stylesheets/ab_admin/main.css.scss +8 -0
  22. data/app/controllers/admin/base_controller.rb +18 -14
  23. data/app/controllers/admin/manager_controller.rb +51 -6
  24. data/app/controllers/admin/users_controller.rb +23 -0
  25. data/app/views/admin/fileupload/_asset.html.slim +8 -0
  26. data/app/views/admin/fileupload/_container.html.slim +10 -0
  27. data/app/views/admin/fileupload/_file.html.slim +5 -0
  28. data/app/views/admin/fileupload/_ftmpl.html.slim +6 -0
  29. data/app/views/admin/fileupload/_tmpl.html.slim +9 -0
  30. data/app/views/admin/users/_form.html.slim +1 -0
  31. data/config/locales/en.yml +5 -60
  32. data/config/locales/ru.yml +14 -63
  33. data/config/routes.rb +7 -4
  34. data/features/dsl/custom_actions.feature +62 -0
  35. data/features/dsl/parent_resource.feature +18 -0
  36. data/features/step_definitions/configuration_steps.rb +6 -0
  37. data/features/step_definitions/dsl/parent_resource_steps.rb +8 -0
  38. data/features/step_definitions/settings_steps.rb +1 -1
  39. data/features/step_definitions/web_steps/transforms_steps.rb +3 -0
  40. data/features/support/paths.rb +3 -0
  41. data/lib/ab_admin.rb +5 -0
  42. data/lib/ab_admin/abstract_resource.rb +28 -4
  43. data/lib/ab_admin/carrierwave/base_uploader.rb +22 -22
  44. data/lib/ab_admin/concerns/admin_addition.rb +2 -2
  45. data/lib/ab_admin/concerns/utilities.rb +4 -4
  46. data/lib/ab_admin/config/base.rb +18 -0
  47. data/lib/ab_admin/controllers/head_options.rb +1 -1
  48. data/lib/ab_admin/core_ext/array.rb +4 -0
  49. data/lib/ab_admin/core_ext/string.rb +9 -10
  50. data/lib/ab_admin/hooks/quiet_scope_page.rb +16 -16
  51. data/lib/ab_admin/hooks/simple_form_hooks.rb +13 -13
  52. data/lib/ab_admin/i18n_tools/model_translator.rb +67 -0
  53. data/lib/ab_admin/models/asset.rb +32 -1
  54. data/lib/ab_admin/models/attachment_file.rb +1 -1
  55. data/lib/ab_admin/models/locator.rb +7 -0
  56. data/lib/ab_admin/models/settings.rb +7 -0
  57. data/lib/ab_admin/models/structure.rb +4 -0
  58. data/lib/ab_admin/utils.rb +2 -2
  59. data/lib/ab_admin/version.rb +1 -1
  60. data/lib/ab_admin/views/admin_helpers.rb +3 -3
  61. data/lib/ab_admin/views/admin_navigation_helpers.rb +1 -1
  62. data/lib/ab_admin/views/form_builder.rb +42 -39
  63. data/lib/ab_admin/views/helpers.rb +5 -0
  64. data/lib/ab_admin/views/manager_helpers.rb +10 -0
  65. data/lib/ab_admin/views/search_form_builder.rb +12 -5
  66. data/lib/generators/ab_admin/install/install_generator.rb +1 -1
  67. data/lib/generators/ab_admin/install/templates/config/admin_menu.rb +2 -2
  68. data/lib/generators/ab_admin/install/templates/helpers/admin/structures_helper.rb +1 -1
  69. data/lib/generators/ab_admin/install/templates/models/attachment_file.rb +2 -0
  70. data/lib/generators/ab_admin/install/templates/models/locator.rb +0 -1
  71. data/lib/generators/ab_admin/install/templates/models/settings.rb +0 -1
  72. data/lib/generators/ab_admin/install/templates/models/static_page.rb +1 -0
  73. data/lib/generators/ab_admin/install/templates/{scripts → script}/unicorn.sh +0 -0
  74. data/lib/generators/ab_admin/install/templates/uploaders/avatar_uploader.rb +4 -0
  75. data/lib/generators/ab_admin/resource/templates/_search_form.haml.erb +1 -1
  76. data/lib/generators/ab_admin/resource/templates/_search_form.slim.erb +1 -1
  77. data/lib/generators/ab_admin/resource/templates/_table.haml.erb +1 -2
  78. data/lib/generators/ab_admin/resource/templates/_table.slim.erb +1 -2
  79. data/lib/generators/template.rb +1 -0
  80. data/lib/tasks/i18n.rake +7 -0
  81. data/spec/dummy/app/models/ab_admin/ab_admin_collection.rb +35 -0
  82. data/spec/dummy/app/models/ab_admin/ab_admin_product.rb +2 -0
  83. data/spec/dummy/app/models/admin_menu.rb +4 -2
  84. data/spec/dummy/app/models/collection.rb +3 -1
  85. data/spec/generators/install_generator_spec.rb +1 -1
  86. data/spec/generators/resource_generator_spec.rb +1 -1
  87. data/spec/models/avatar_spec.rb +29 -2
  88. metadata +25 -12
  89. data/app/views/admin/fileupload/_asset.html.erb +0 -5
  90. data/app/views/admin/fileupload/_container.html.erb +0 -28
  91. data/app/views/admin/fileupload/_fcontainer.html.erb +0 -25
  92. data/app/views/admin/fileupload/_file.html.erb +0 -5
  93. data/app/views/admin/fileupload/_ftmpl.html.erb +0 -7
  94. data/app/views/admin/fileupload/_tmpl.html.erb +0 -9
  95. data/lib/ab_admin/utils/csv_builder.rb +0 -52
@@ -71,6 +71,13 @@ $.fn.loadSelect = (optionsDataArray) ->
71
71
  $.fn.scrollToEl = ->
72
72
  $('html, body').animate({scrollTop: $(this).offset().top}, 'slow')
73
73
 
74
+ $.fn.toHref = ->
75
+ $el = $(this)
76
+ if _.isEmpty($el.data())
77
+ window.location.href = $el.attr('href')
78
+ else
79
+ $el.click()
80
+
74
81
  $.parseQuery = ->
75
82
  window.location.search.replace("?", "").parseQuery()
76
83
 
@@ -19,5 +19,4 @@ $ ->
19
19
  initPickers()
20
20
 
21
21
  $('.simple_form').bind "nested:fieldAdded", =>
22
- initPickers()
23
- initFancySelect()
22
+ initPickers()
@@ -0,0 +1,28 @@
1
+ //= require i18n
2
+ //= require i18n/translations
3
+ //= require jquery_ujs
4
+ //= require jquery.cookie
5
+ //= require jquery.pjax
6
+ //= require jquery.ui.nestedSortable
7
+ //= require jquery_nested_form
8
+ //= require jquery.hotkeys
9
+ //= require bootstrap
10
+ //= require ab_admin/bootstrap-tab-multi
11
+ //= require ab_admin/bootstrap-datepicker/core
12
+ //= require ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.ru.js
13
+ //= require ab_admin/bootstrap-timepicker
14
+ //= require bootstrap-wysihtml5
15
+ //= require bootstrap-wysihtml5/locales/ru
16
+ //= require bootstrap-editable-inline
17
+ //= require select2
18
+ //= require fancybox
19
+ //= require jquery.ui.nestedSortable
20
+ //= require ab_admin/components/sortable_tree
21
+ //= require ab_admin/components/google_translate
22
+ //= require ab_admin/components/locator
23
+ //= require ab_admin/components/admin_assets
24
+ //= require ab_admin/components/gmaps
25
+ //= require ab_admin/components/in_place_edit
26
+
27
+ //= require ab_admin/core/init
28
+ //= require ab_admin/inputs/datetime_input
@@ -1,10 +1 @@
1
- //= require ab_admin/bootstrap-datepicker
2
- //= require ab_admin/bootstrap-timepicker
3
- //= require bootstrap-wysihtml5
4
- //= require bootstrap-editable
5
- //= require select2
6
- //= require ab_admin/bootstrap_and_overrides
7
- //= require ab_admin/fileupload
8
-
9
- //q= require jquery.fancybox
10
- //q= require token_input/token-input-facebook
1
+ //= require ab_admin/main
@@ -17,6 +17,10 @@ $iconWhiteSpritePath: asset-url('glyphicons-halflings-white.png', image);
17
17
  @import "ab_admin/components/geo_input";
18
18
  @import "ab_admin/components/sortable_tree";
19
19
 
20
+ .dropdown .caret {
21
+ margin-left: 5px;
22
+ }
23
+
20
24
  .btn .caret {
21
25
  margin-left: 3px;
22
26
  }
@@ -7,9 +7,12 @@
7
7
  float: left;
8
8
  }
9
9
  .sidebar {
10
- width: 220px;
10
+ width: 260px;
11
11
  margin: 0 0 20px -265px;
12
12
  float: left;
13
+ &.well {
14
+ width: 220px;
15
+ }
13
16
  }
14
17
  .content_with_sidebar {
15
18
  margin-right: 280px;
@@ -92,19 +92,16 @@ textarea.do_wysihtml5 {
92
92
  width: 625px;
93
93
  }
94
94
 
95
- .fileupload {
96
- position: relative;
95
+ textarea {
96
+ width: auto;
97
97
  }
98
98
 
99
- .fileupload-drop-area {
100
- position: absolute;
101
- top: 0;
102
- left: 0;
103
- width: 100%;
104
- height: 100%;
105
- min-height: 70px;
106
- z-index: 2;
107
- text-align: center;
108
- color: #999;
109
- font-size: 26px;
99
+ .fancy_select, input.token {
100
+ min-width: 220px;
101
+ }
102
+
103
+ .simple_form {
104
+ .fancy_select, input.token {
105
+ min-width: 400px;
106
+ }
110
107
  }
@@ -1,19 +1,15 @@
1
1
  .admin_map {
2
2
  height: 400px;
3
- margin-left: 10%;
4
- width: 80%;
5
- margin-top: 0.6em;
3
+ width: 800px;
6
4
  img {
7
5
  max-width: none;
8
6
  }
9
7
  }
10
8
  .geo_input {
11
- label {
12
- display: inline-block;
13
- width: 10%;
14
- }
15
9
  input {
16
- display: inline-block;
17
- width: 80% !important;
10
+ width: 400px;
11
+ &.geo_ac {
12
+ width: 800px;
13
+ }
18
14
  }
19
15
  }
@@ -1,120 +1,86 @@
1
- .gray-blocks {
1
+ .fileupload {
2
2
  overflow: hidden;
3
- margin-top: 10px;
4
- .fileupload-file img {
5
- width: 80px;
6
- }
7
- .bg-bl {
8
- background: #d1e6dc;
9
- overflow: hidden;
10
- }
11
- .gr-title {
12
- display: block;
13
- color: #5b6569;
14
- font-size: 1.1em;
15
- padding: 20px 20px 15px 20px;
16
- }
17
- .galery {
18
- display: block;
19
- overflow: hidden;
20
- .ill {
21
- z-index: 3;
22
- display: block;
3
+ position: relative;
4
+ padding-top: 10px;
5
+ padding-left: 10px;
6
+ &.asset_asset_type {
7
+ .asset {
23
8
  float: left;
24
9
  overflow: hidden;
25
- width: 80px;
26
- height: 80px;
27
- margin-right: 1px;
28
- margin-bottom: 1px;
10
+ margin: 3px;
29
11
  position: relative;
30
- .del {
31
- display: block;
12
+ z-index: 3;
13
+ .del_asset, .main_image, .crop_image, .rotate_image {
32
14
  position: absolute;
33
- right: 0px;
34
- top: 0px;
35
- background: image_url("admin/transp_cross.png") no-repeat left top;
36
- width: 17px;
37
- height: 17px;
38
15
  cursor: pointer;
39
- z-index: 1;
40
- img {
41
- width: 17px;
42
- height: 17px;
43
- }
16
+ background: rgba(100, 131, 137, 0.6);
17
+ z-index: 4;
18
+ padding: 1px 3px;
44
19
  }
45
- .main_img {
46
- cursor: pointer;
47
- display: block;
48
- height: 17px;
49
- width: 17px;
50
- text-indent: -2000px;
51
- position: absolute;
52
- padding: 0 0 0 20px;
53
- left: 0;
20
+ .del_asset {
21
+ right: 0;
54
22
  top: 0;
55
- z-index: 1;
56
23
  }
57
-
58
- //checkbox on pic
59
- .main_img {
60
- background: image_url("main_pic.png") no-repeat;
24
+ .main_image {
25
+ right: 0;
26
+ bottom: 0;
61
27
  }
62
- }
63
- }
64
- .ill-bl {
65
- display: block;
66
- overflow: hidden;
67
- padding: 0px 20px 0px 20px;
68
- border-bottom: solid 1px #e7faed;
69
- position: relative;
70
- .r-ill {
71
- margin-left: -90px;
72
- width: 100%;
73
- float: right;
74
- .r-ill-data {
75
- margin-left: 90px;
28
+ .crop_image {
29
+ display: none;
30
+ left: 0;
31
+ bottom: 0;
32
+ }
33
+ .rotate_image {
34
+ left: 0;
35
+ bottm: 0;
76
36
  }
77
37
  }
78
- .l-ill {
79
- float: left;
80
- width: 80px;
81
- overflow: hidden;
82
- }
83
- .file-name {
84
- color: #5b6569;
85
- font-size: 0.9em;
86
- font-weight: bold;
87
- display: block;
38
+ &.one_asset .main_image {
39
+ display: none;
88
40
  }
89
- .del {
90
- display: block;
91
- position: absolute;
92
- right: 20px;
93
- top: 0px;
94
- width: 13px;
95
- height: 13px;
96
- overflow: hidden;
41
+ }
42
+ &.file_asset_type {
43
+ .asset {
44
+ margin-bottom: 10px;
45
+ z-index: 2;
46
+ position: relative;
47
+ .del_asset {
48
+ margin-left: 15px;
49
+ }
97
50
  }
98
51
  }
99
- }
52
+ .file-name {
53
+ color: #5b6569;
54
+ font-size: 0.9em;
55
+ font-weight: bold;
56
+ }
57
+ .file-types {
58
+ overflow: hidden;
59
+ padding-top: 10px;
60
+ padding-left: 5px;
61
+ z-index: 2;
62
+ }
63
+ .fileupload-button {
64
+ z-index: 3;
65
+ }
100
66
 
101
- .file-types {
102
- display: block;
103
- overflow: hidden;
104
- padding: 5px 20px;
105
- }
67
+ .file-types .type-info {
68
+ float: right;
69
+ color: #5b6569;
70
+ font-size: 0.9em;
71
+ text-transform: uppercase;
72
+ }
73
+ .fileupload-drop-area {
74
+ position: absolute;
75
+ top: 0;
76
+ left: 0;
77
+ width: 100%;
78
+ height: 100%;
79
+ min-height: 70px;
80
+ z-index: 1;
81
+ text-align: center;
82
+ color: #999;
83
+ font-size: 18px;
84
+ }
106
85
 
107
- .file-types .type-info {
108
- display: block;
109
- float: right;
110
- color: #5b6569;
111
- font-size: 0.9em;
112
86
  }
113
- .fileupload.file_asset_type {
114
- .fileupload-list .asset {
115
- width: auto !important;
116
- height: auto !important;
117
- float: none;
118
- margin-bottom: 10px;
119
- }
120
- }
@@ -0,0 +1,8 @@
1
+ //= require ab_admin/bootstrap-datepicker
2
+ //= require ab_admin/bootstrap-timepicker
3
+ //= require bootstrap-wysihtml5
4
+ //= require bootstrap-editable
5
+ //= require select2
6
+ //= require fancybox
7
+ //= require ab_admin/bootstrap_and_overrides
8
+ //= require ab_admin/fileupload
@@ -9,17 +9,17 @@ class Admin::BaseController < ::InheritedResources::Base
9
9
  before_filter :authenticate_user!, :require_moderator
10
10
  before_filter :add_breadcrumbs, :set_title, :set_user_vars, :unless => :xhr?
11
11
 
12
- class_attribute :csv_builder, :batch_action_list, :instance_reader => false, :instance_writer => false
12
+ class_attribute :export_builder, :batch_action_list, :instance_reader => false, :instance_writer => false
13
13
  self.batch_action_list = [AbAdmin::Config::BatchAction.new(:destroy, :confirm => I18n.t('admin.delete_confirmation'))]
14
14
 
15
15
  has_scope :ids, :type => :array
16
16
 
17
17
  helper_method :admin?, :moderator?
18
18
 
19
- helper_method :button_scopes, :collection_action?, :action_items, :resource_action_items, :csv_builder,
19
+ helper_method :button_scopes, :collection_action?, :action_items, :resource_action_items,
20
20
  :preview_resource_path, :get_subject, :settings, :batch_action_list, :tree_node_renderer
21
21
 
22
- respond_to :json, :only => [:index, :update]
22
+ respond_to :json
23
23
 
24
24
  rescue_from ::CanCan::AccessDenied, :with => :render_unauthorized
25
25
 
@@ -98,10 +98,6 @@ class Admin::BaseController < ::InheritedResources::Base
98
98
  self.class.batch_action_list
99
99
  end
100
100
 
101
- def export_options
102
- {:column_names => csv_builder.columns.map(&:name), :column_data => csv_builder.columns.map(&:data), :column_separator => csv_builder.column_separator}
103
- end
104
-
105
101
  def self.inherited(base)
106
102
  super
107
103
  base.class_eval do
@@ -114,12 +110,16 @@ class Admin::BaseController < ::InheritedResources::Base
114
110
  {:errors => resource.errors.full_messages.map { |m| "<br/> - #{m}" }.join.html_safe}
115
111
  end
116
112
 
117
- def self.csv(options={}, &block)
118
- self.csv_builder = ::AbAdmin::Utils::CSVBuilder.new(options, &block)
113
+ def self.export(options={}, &block)
114
+ self.export_builder = ::AbAdmin::Config::Export.new(options, &block)
115
+ end
116
+
117
+ def export_builder
118
+ self.class.export_builder ||= ::AbAdmin::Config::Export.default_for_model(resource_class)
119
119
  end
120
120
 
121
- def csv_builder
122
- self.class.csv_builder ||= ::AbAdmin::Utils::CSVBuilder.default_for_resource(resource_class)
121
+ def export_options
122
+ export_builder.render_options
123
123
  end
124
124
 
125
125
  def set_title
@@ -171,8 +171,7 @@ class Admin::BaseController < ::InheritedResources::Base
171
171
  def add_breadcrumbs
172
172
  @breadcrumbs = []
173
173
  if parent?
174
- @breadcrumbs << {:name => parent_class.model_name.human(:count => 9),
175
- :url => {:action => :index, :controller => "admin/#{parent_class.model_name.plural}"}}
174
+ @breadcrumbs << {:name => parent_class.model_name.human(:count => 9), :url => parent_collection_path}
176
175
  @breadcrumbs << {:name => AbAdmin.display_name(parent), :url => parent_path}
177
176
  end
178
177
  @breadcrumbs << {:name => resource_class.model_name.human(:count => 9), :url => collection_path}
@@ -181,6 +180,10 @@ class Admin::BaseController < ::InheritedResources::Base
181
180
  end
182
181
  end
183
182
 
183
+ def parent_collection_path
184
+ {:action => :index, :controller => "admin/#{parent_class.model_name.plural}"}
185
+ end
186
+
184
187
  def tree_node_renderer
185
188
  @tree_node_renderer ||= lambda { |r| link_to AbAdmin.display_name(r), resource_path(r), :class => 'tree-item_link' }
186
189
  end
@@ -277,7 +280,8 @@ class Admin::BaseController < ::InheritedResources::Base
277
280
  end
278
281
 
279
282
  def get_role
280
- return :admin if admin?
283
+ return [:admin, :moderator] if admin?
284
+ return [:moderator] if moderator?
281
285
  nil
282
286
  end
283
287
 
@@ -8,8 +8,53 @@ class ::Admin::ManagerController < ::Admin::BaseController
8
8
 
9
9
  helper_method :manager, :admin_partial_name
10
10
 
11
+ def custom_action
12
+ custom_action = manager.custom_action_for(params[:custom_action], self)
13
+ if custom_action.options[:method] && custom_action.options[:method] != request.method_symbol
14
+ raise ActionController::RoutingError.new("AbAdmin custom action for #{params[:custom_action]} not found")
15
+ end
16
+ instance_exec(&custom_action.data)
17
+ end
18
+
11
19
  protected
12
20
 
21
+ def begin_of_association_chain
22
+ parent
23
+ end
24
+
25
+ def parent
26
+ return @parent if defined?(@parent)
27
+ @parent = begin
28
+ return if !params[:parent_resource] && !params[:parent_id]
29
+ assoc_name, r_id = params[:parent_resource].singularize.to_sym, params[:parent_id]
30
+ parent_config = manager.parent_resources.detect { |conf| conf.name == assoc_name }
31
+ return unless parent_config
32
+ assoc = resource_class.reflect_on_association(parent_config.name)
33
+ return unless assoc
34
+ assoc.klass.find(r_id)
35
+ end
36
+ end
37
+
38
+ def parent?
39
+ !!parent
40
+ end
41
+
42
+ def parent_type
43
+ parent.class.name.underscore.to_sym
44
+ end
45
+
46
+ def parent_class
47
+ parent.class
48
+ end
49
+
50
+ def parent_path
51
+ "/admin/#{parent_class.model_name.plural}/#{parent.id}"
52
+ end
53
+
54
+ def parent_collection_path
55
+ "/admin/#{parent_class.model_name.plural}"
56
+ end
57
+
13
58
  def tree_node_renderer
14
59
  manager.tree_node_renderer || super
15
60
  end
@@ -49,16 +94,16 @@ class ::Admin::ManagerController < ::Admin::BaseController
49
94
  raise ActionController::RoutingError.new("AbAdmin action #{action_name} for #{resource_class.name} not found")
50
95
  end
51
96
  manager_instance
52
- #rescue NameError
53
- # raise ActionController::RoutingError.new("AbAdmin manager_model for #{resource_class.name} not found")
97
+ rescue NameError => e
98
+ raise ActionController::RoutingError.new("AbAdmin manager_model for #{resource_class.name} not found (#{e.message})")
54
99
  end
55
100
  end
56
101
 
57
102
  def resource_class
58
103
  @model ||= begin
59
104
  params[:model_name].singularize.classify.constantize
60
- rescue NameError
61
- raise ActionController::RoutingError.new("AbAdmin model #{params[:model_name]} not found")
105
+ rescue NameError => e
106
+ raise ActionController::RoutingError.new("AbAdmin model #{params[:model_name]} not found (#{e.message})")
62
107
  end
63
108
  end
64
109
 
@@ -98,12 +143,12 @@ class ::Admin::ManagerController < ::Admin::BaseController
98
143
 
99
144
  def edit_resource_path(record=nil, options={})
100
145
  record ||= resource
101
- admin_edit_path(options.merge(:model_name => resource_collection_name, :id => record.id))
146
+ admin_edit_path(options.merge(:model_name => record.class.model_name.plural, :id => record.id))
102
147
  end
103
148
 
104
149
  def resource_path(record=nil, options={})
105
150
  record ||= resource
106
- admin_show_path(options.merge(:model_name => resource_collection_name, :id => record.id))
151
+ admin_show_path(options.merge(:model_name => record.class.model_name.plural, :id => record.id))
107
152
  end
108
153
 
109
154
  def self.cancan_resource_class