hancock_cms 2.0.0.2 → 2.0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (137) hide show
  1. checksums.yaml +4 -4
  2. data/.gitattributes +4 -0
  3. data/app/assets/images/{devices → hancock/devise}/login-bg.jpg +0 -0
  4. data/app/assets/images/{rails-admin → hancock/rails_admin}/hancock_logo.svg +0 -0
  5. data/app/assets/javascripts/hancock/cms.coffee +1 -1
  6. data/app/assets/javascripts/hancock/rails_admin/cms.ui.coffee +11 -37
  7. data/app/assets/javascripts/hancock/rails_admin/en_ru_switcher.coffee +90 -0
  8. data/app/assets/javascripts/hancock/rails_admin/enum_with_custom.coffee +42 -0
  9. data/app/assets/javascripts/hancock/rails_admin/form_controls_fixed.coffee +44 -0
  10. data/app/assets/javascripts/hancock/rails_admin/leftside_hider.coffee +106 -0
  11. data/app/assets/javascripts/hancock/rails_admin/multiselect.coffee +8 -0
  12. data/app/assets/javascripts/hancock/rails_admin/navigation_dropdown.coffee +25 -0
  13. data/app/assets/javascripts/hancock/rails_admin/navigation_filter.coffee +108 -0
  14. data/app/assets/javascripts/hancock/rails_admin/navigation_scroll.coffee +12 -0
  15. data/app/assets/javascripts/hancock/rails_admin/plugins.coffee.erb +16 -0
  16. data/app/assets/javascripts/jquery.placeholder.js +3 -2
  17. data/app/assets/javascripts/rails_admin/custom/ui.coffee +1 -0
  18. data/app/assets/stylesheets/hancock/cms/devise.sass +4 -1
  19. data/app/assets/stylesheets/hancock/rails_admin/cms.theming.sass +354 -147
  20. data/app/assets/stylesheets/hancock/rails_admin/fieldsets.sass +198 -0
  21. data/app/assets/stylesheets/hancock/rails_admin/plugins.sass.erb +6 -0
  22. data/app/assets/stylesheets/rails_admin/custom/theming.sass +1 -1
  23. data/app/controllers/concerns/hancock/decorators/home.rb +1 -1
  24. data/app/controllers/concerns/hancock/errors.rb +5 -7
  25. data/app/controllers/hancock/registrations_controller.rb +2 -7
  26. data/app/controllers/hancock/sessions_controller.rb +3 -7
  27. data/app/helpers/hancock/powered_helper.rb +3 -3
  28. data/app/helpers/hancock/settings_helper.rb +44 -0
  29. data/app/helpers/rails_admin/application/hancock_helper.rb +19 -0
  30. data/app/helpers/rails_admin/hancock/form_builder.rb +44 -0
  31. data/app/helpers/rails_admin/main/hancock_helper.rb +51 -0
  32. data/app/models/concerns/hancock/boolean_field.rb +7 -2
  33. data/app/models/concerns/hancock/decorators/embedded_element.rb +1 -9
  34. data/app/models/concerns/hancock/enableable.rb +1 -0
  35. data/app/models/concerns/hancock/hash_field.rb +9 -8
  36. data/app/models/concerns/hancock/html_field.rb +6 -3
  37. data/app/models/concerns/hancock/insertion_field.rb +115 -0
  38. data/app/models/concerns/hancock/mappable.rb +1 -0
  39. data/app/models/concerns/hancock/master_collection.rb +31 -0
  40. data/app/models/concerns/hancock/model_localizeable.rb +4 -1
  41. data/app/models/concerns/hancock/rails_admin_patch.rb +22 -3
  42. data/app/models/concerns/hancock/sort_field.rb +26 -3
  43. data/app/models/concerns/hancock/sortable.rb +3 -0
  44. data/app/models/concerns/hancock/user_defined.rb +53 -0
  45. data/app/views/blocks/_footer.html.slim +1 -1
  46. data/app/views/devise/passwords/edit.html.slim +0 -2
  47. data/app/views/devise/passwords/new.html.slim +0 -2
  48. data/app/views/devise/registrations/edit.html.slim +0 -2
  49. data/app/views/devise/registrations/new.html.slim +0 -2
  50. data/app/views/devise/sessions/new.html.slim +0 -2
  51. data/app/views/hancock/home/index.html.slim +4 -1
  52. data/app/views/layouts/application.html.slim +1 -11
  53. data/app/views/layouts/hancock/_assets.html.slim +15 -0
  54. data/app/views/layouts/hancock/devise/confirmations.html.slim +7 -4
  55. data/app/views/layouts/hancock/devise/passwords.html.slim +7 -4
  56. data/app/views/layouts/hancock/devise/registrations.html.slim +7 -4
  57. data/app/views/layouts/hancock/devise/sessions.html.slim +7 -4
  58. data/app/views/layouts/hancock/devise/unlocks.html.slim +7 -4
  59. data/app/views/layouts/rails_admin/_footer.html.slim +2 -2
  60. data/app/views/layouts/rails_admin/_footer_navigation.html.slim +20 -4
  61. data/app/views/layouts/rails_admin/_navigation.html.slim +13 -47
  62. data/app/views/layouts/rails_admin/_secondary_navigation.html.slim +5 -12
  63. data/app/views/layouts/rails_admin/_sidebar_navigation.html.slim +2 -0
  64. data/app/views/layouts/rails_admin/_sidebar_navigation_filter.html.slim +3 -0
  65. data/app/views/layouts/rails_admin/application.html.haml +3 -38
  66. data/app/views/rails_admin/main/_enum_for_settings_kinds.html.slim +24 -0
  67. data/app/views/rails_admin/main/_form_hancock_enum.html.slim +18 -0
  68. data/app/views/rails_admin/main/_form_hancock_enum_with_custom.slim +20 -0
  69. data/app/views/rails_admin/main/_hancock_html.html.slim +2 -2
  70. data/app/views/rails_admin/main/_hancock_html_ml.html.slim +31 -34
  71. data/app/views/rails_admin/main/edit.html.haml +18 -0
  72. data/app/views/rails_admin/main/new.html.haml +17 -0
  73. data/app/views/shared/_admin_link.html.slim +4 -2
  74. data/config/initializers/nested_set_patch.rb +76 -73
  75. data/config/initializers/rails_admin_mongoid_patch.rb +27 -0
  76. data/config/initializers/sprockets_patch.rb +159 -0
  77. data/config/locales/en.hancock.yml +1 -0
  78. data/config/locales/ru.devise.yml +22 -18
  79. data/config/locales/ru.hancock.yml +5 -5
  80. data/config/locales/ru.rails_admin.yml +3 -0
  81. data/hancock_cms.gemspec +7 -2
  82. data/lib/filename_to_slug.rb +0 -20
  83. data/lib/generators/hancock/cms/ability_generator.rb +1 -0
  84. data/lib/generators/hancock/cms/admin_generator.rb +1 -0
  85. data/lib/generators/hancock/cms/application_generator.rb +1 -0
  86. data/lib/generators/hancock/cms/assets_generator.rb +1 -0
  87. data/lib/generators/hancock/cms/layout_generator.rb +1 -0
  88. data/lib/generators/hancock/cms/model_generator.rb +1 -0
  89. data/lib/generators/hancock/cms/models/templates/embedded_element.erb +2 -2
  90. data/lib/generators/hancock/cms/rack_generator.rb +1 -0
  91. data/lib/generators/hancock/cms/raven_generator.rb +13 -0
  92. data/lib/generators/hancock/cms/robots_generator.rb +1 -0
  93. data/lib/generators/hancock/cms/scripts_generator.rb +1 -0
  94. data/lib/generators/hancock/cms/setup_generator.rb +146 -33
  95. data/lib/generators/hancock/cms/templates/Gemfile.erb +4 -5
  96. data/lib/generators/hancock/cms/templates/ability.erb +1 -1
  97. data/lib/generators/hancock/cms/templates/admin.erb +12 -4
  98. data/lib/generators/hancock/cms/templates/hancock_cms.erb +6 -3
  99. data/lib/generators/hancock/cms/templates/model.erb +5 -6
  100. data/lib/generators/hancock/cms/templates/raven.erb +13 -0
  101. data/lib/generators/hancock/cms/templates/robots.txt.erb +6 -2
  102. data/lib/generators/hancock/cms/templates/scripts/db_dump.sh.erb +1 -1
  103. data/lib/generators/hancock/cms/unicorn_god_generator.rb +1 -0
  104. data/lib/generators/hancock/cms/utils.rb +2 -0
  105. data/lib/hancock/admin.rb +153 -21
  106. data/lib/hancock/admin/embedded_element.rb +7 -2
  107. data/lib/hancock/configuration.rb +49 -4
  108. data/lib/hancock/controller.rb +1 -1
  109. data/lib/hancock/engine.rb +32 -36
  110. data/lib/hancock/model.rb +10 -0
  111. data/lib/hancock/models/embedded_element.rb +2 -0
  112. data/lib/hancock/models/mongoid/embedded_element.rb +17 -0
  113. data/lib/hancock/plugin_configuration.rb +1 -1
  114. data/lib/hancock/rails_admin_ext/config.rb +21 -4
  115. data/lib/hancock/rails_admin_ext/hancock_array.rb +19 -0
  116. data/lib/hancock/rails_admin_ext/hancock_enum.rb +33 -0
  117. data/lib/hancock/rails_admin_ext/hancock_enum_with_custom.rb +34 -0
  118. data/lib/hancock/rails_admin_ext/hancock_hash.rb +8 -1
  119. data/lib/hancock/rails_admin_ext/hancock_html.rb +17 -2
  120. data/lib/hancock/rails_admin_ext/hancock_multiselect.rb +1 -5
  121. data/lib/hancock/rails_admin_ext/hancock_slugs.rb +2 -6
  122. data/lib/hancock/rails_admin_ext/patches/field_patch.rb +2 -1
  123. data/lib/hancock/rails_admin_ext/patches/fieldset_patch.rb +14 -0
  124. data/lib/hancock/rails_admin_ext/patches/group_patch.rb +9 -0
  125. data/lib/hancock/rails_admin_ext/patches/hancock_cms_group.rb +2 -0
  126. data/lib/hancock/rails_admin_ext/patches/has_fields.rb +27 -0
  127. data/lib/hancock/rails_admin_ext/patches/navigation_patch.rb +25 -0
  128. data/lib/hancock/rails_admin_settings_patch.rb +219 -0
  129. data/lib/hancock/version.rb +1 -1
  130. data/lib/hancock_cms.rb +12 -9
  131. data/lib/manual_slug/active_record.rb +8 -8
  132. data/lib/manual_slug/mongoid.rb +6 -1
  133. data/lib/rails_admin/custom_show_in_app.rb +21 -32
  134. data/template.rb +19 -20
  135. metadata +104 -12
  136. data/app/controllers/concerns/hancock/no_cache.rb +0 -12
  137. data/app/models/concerns/hancock/cacheable.rb +0 -51
@@ -18,7 +18,9 @@
18
18
  = render "layouts/rails_admin/navigation"
19
19
 
20
20
  .admin-menubar.admin-menubar-fixed.admin-menubar-dark
21
- .toolbar
21
+ .navigation-filter
22
+ = render "layouts/rails_admin/sidebar_navigation_filter"
23
+ .toolbar.custom_scroll
22
24
  = render "layouts/rails_admin/sidebar_navigation"
23
25
  .admin-menubar-footer
24
26
  = render "layouts/rails_admin/footer_navigation"
@@ -29,40 +31,3 @@
29
31
 
30
32
  %footer.admin-footer
31
33
  = render "layouts/rails_admin/footer"
32
-
33
- -#%nav.navbar-hancock.navbar-fixed
34
- -# = render "layouts/rails_admin/navigation"
35
- -#
36
- -#%main.root
37
- -# .sidebar.fixed-sidebar
38
- -# .sidebar-backdrop
39
- -# .toolbar
40
- -# = render "layouts/rails_admin/sidebar_navigation"
41
- -#
42
- -# .content-wrapper
43
- -# .content{:'data-pjax-container' => true}= render template: 'layouts/rails_admin/pjax'
44
- -#
45
- -#%footer.footer
46
- -# = render "layouts/rails_admin/footer"
47
-
48
- -#%body.rails_admin
49
- -# #loading.label.label-warning{style: 'display:none; position:fixed; right:20px; bottom:20px; z-index:100000'}= t('admin.loading')
50
- -# %nav.navbar.navbar-default.navbar-fixed-top
51
- -# = render "layouts/rails_admin/navigation"
52
- -#
53
- -# .menu-bar
54
- -# = render "layouts/rails_admin/sidebar_navigation"
55
- -#
56
- -# .page-content
57
- -# .content{:'data-pjax-container' => true}= render template: 'layouts/rails_admin/pjax'
58
- -#
59
- -#
60
- -#
61
- -# #status-bar
62
-
63
- -#.container-fluid
64
- -# .row
65
- -# .col-sm-3.col-md-2.sidebar-nav.hancock-nav
66
- -# = render "layouts/rails_admin/sidebar_navigation"
67
- -# .col-sm-9.col-sm-offset-3.col-md-10.col-md-offset-2.sidebar-content
68
- -# .content{:'data-pjax-container' => true}= render template: 'layouts/rails_admin/pjax'
@@ -0,0 +1,24 @@
1
+ .form-control-static
2
+ span= field.form_value
3
+ span= " "
4
+ span= " "
5
+ span= " "
6
+ span= link_to '(изменить)', "#", onclick: "var _p = $(this).closest('.form-control-static'); _p.siblings('.hancock_enum').removeClass('hidden'); _p.remove(); return false;", style: 'color: grey;', onmouseover: 'this.style.color = "darkgrey";', onmouseout: 'this.style.color = "grey";'
7
+ - unless field.multiple?
8
+ = form.select field.method_name, field.enum, { include_blank: true }.reverse_merge({ selected: field.form_value }), field.html_attributes.reverse_merge({ data: { enumeration: true }, placeholder: t('admin.misc.search'), class: 'hancock_enum hidden'})
9
+ - else
10
+ ruby:
11
+ js_data = {
12
+ xhr: false,
13
+ sortable: false,
14
+ cacheAll: true,
15
+ regional: {
16
+ chooseAll: t("admin.misc.chose_all"),
17
+ chosen: t("admin.misc.chosen", name: config.label_plural),
18
+ clearAll: t("admin.misc.clear_all"),
19
+ search: t("admin.misc.search"),
20
+ up: t("admin.misc.up"),
21
+ down: t("admin.misc.down")
22
+ }
23
+ }
24
+ = form.select field.method_name, field.enum, { selected: field.form_value, object: form.object }, field.html_attributes.reverse_merge({data: { filteringmultiselect: true, options: js_data.to_json }, multiple: true, class: 'hancock_enum hidden'})
@@ -0,0 +1,18 @@
1
+ - unless field.multiple?
2
+ = form.select field.method_name, field.enum, { include_blank: true }.reverse_merge({ selected: field.form_value }), field.html_attributes.reverse_merge({ data: { enumeration: true }, placeholder: t('admin.misc.search'), class: 'hancock_enum'})
3
+ - else
4
+ ruby:
5
+ js_data = {
6
+ xhr: false,
7
+ sortable: false,
8
+ cacheAll: true,
9
+ regional: {
10
+ chooseAll: t("admin.misc.chose_all"),
11
+ chosen: t("admin.misc.chosen", name: config.label_plural),
12
+ clearAll: t("admin.misc.clear_all"),
13
+ search: t("admin.misc.search"),
14
+ up: t("admin.misc.up"),
15
+ down: t("admin.misc.down")
16
+ }
17
+ }
18
+ = form.select field.method_name, field.enum, { selected: field.form_value, object: form.object }, field.html_attributes.reverse_merge({data: { filteringmultiselect: true, options: js_data.to_json }, multiple: true, class: 'hancock_enum'})
@@ -0,0 +1,20 @@
1
+ - unless field.multiple?
2
+ / = form.select field.method_name, field.enum, { include_blank: true }.reverse_merge({ selected: field.form_value }), field.html_attributes.reverse_merge({ data: { enumeration: true }, placeholder: t('admin.misc.search'), class: 'hancock_enum'})
3
+ = form.select field.method_name, field.selection, { include_blank: true }.reverse_merge({ selected: field.form_value }), field.html_attributes.reverse_merge({ data: { enumeration: true }, placeholder: t('admin.misc.search_or_add_yours'), class: 'hancock_enum'})
4
+ - else
5
+ ruby:
6
+ js_data = {
7
+ xhr: false,
8
+ sortable: false,
9
+ cacheAll: true,
10
+ regional: {
11
+ chooseAll: t("admin.misc.chose_all"),
12
+ chosen: t("admin.misc.chosen", name: config.label_plural),
13
+ clearAll: t("admin.misc.clear_all"),
14
+ search: t("admin.misc.search_or_add_yours"),
15
+ up: t("admin.misc.up"),
16
+ down: t("admin.misc.down")
17
+ }
18
+ }
19
+ / = form.select field.method_name, field.enum, { selected: field.form_value, object: form.object }, field.html_attributes.reverse_merge({data: { filteringmultiselect: true, options: js_data.to_json }, multiple: true, class: 'hancock_enum'})
20
+ = form.select field.method_name, field.selection, { selected: field.form_value, object: form.object }, field.html_attributes.reverse_merge({data: { filteringmultiselect: true, options: js_data.to_json, unique: field.unique }, multiple: true, class: 'hancock_enum'})
@@ -1,9 +1,9 @@
1
1
  ruby:
2
2
  js_data = {
3
- jspath: field.location ? field.location : field.base_location + "ckeditor.js",
3
+ jspath: asset_path(field.location ? field.location : field.base_location + "ckeditor.js"),
4
4
  base_location: field.base_location,
5
5
  options: {
6
- customConfig: field.config_js ? field.config_js : field.base_location + "config.js"
6
+ customConfig: asset_path(field.config_js ? field.config_js : field.base_location + "config.js")
7
7
  }
8
8
  }
9
9
  _html_attributes = field.html_attributes.reverse_merge(data: { richtext: 'ckeditor', options: js_data.to_json, value: field.form_value[:html] })
@@ -6,40 +6,37 @@ ul.nav.nav-tabs
6
6
  .tab-content
7
7
  / = form.fields_for field.translations_field do |localized_field|
8
8
  - I18n.available_locales.each do |locale|
9
- - _class = "#{[( 'active' if locale == I18n.locale ), uuid].join(" ")}"
10
- .fields.tab-pane(style='padding:5px; margin: 0;' id="#{locale}_#{uuid}" class="#{_class}")
11
- = form.fields_for field.html_translations_field do |html_localized_field|
12
- ruby:
13
- js_data = {
14
- jspath: field.location ? field.location : field.base_location + "ckeditor.js",
15
- base_location: field.base_location,
16
- options: {
17
- customConfig: field.config_js ? field.config_js : field.base_location + "config.js"
18
- }
19
- }
20
- _html_attributes = field.html_attributes.reverse_merge(data: {
21
- richtext: 'ckeditor',
22
- options: js_data.to_json
23
- })
24
- _html_attributes[:value] = field.form_value[:html] ? field.form_value[:html][locale] : ""
25
- = html_localized_field.send :text_area, locale , _html_attributes
26
-
27
- = form.fields_for field.clear_translations_field do |clear_localized_field|
28
- label{style='display: block;'}
29
- ruby:
30
- _value = field.form_value[:clear] ? field.form_value[:clear][locale] : true
31
- _hash = {
32
- value: _value,
33
- checked: _value.in?([true, '1']),
34
- required: false,
35
- class: "form-control"
36
- }
37
- _html_attributes = field.html_attributes.reverse_merge(_hash)
38
- span{style='float: left'}= clear_localized_field.send field.boolean_view_helper, locale , _html_attributes
39
- div{style='margin-left: 35px; line-height: 40px;'} Убирать теги
40
-
41
-
42
-
9
+ - _class = "#{[( 'active' if locale == I18n.locale ), uuid].join(" ")}"
10
+ .fields.tab-pane(style='padding:5px; margin: 0;' id="#{locale}_#{uuid}" class="#{_class}")
11
+ = form.fields_for field.html_translations_field do |html_localized_field|
12
+ ruby:
13
+ js_data = {
14
+ jspath: asset_path(field.location ? field.location : field.base_location + "ckeditor.js"),
15
+ base_location: field.base_location,
16
+ options: {
17
+ customConfig: asset_path(field.config_js ? field.config_js : field.base_location + "config.js")
18
+ }
19
+ }
20
+ _html_attributes = field.html_attributes.reverse_merge(data: {
21
+ richtext: 'ckeditor',
22
+ options: js_data.to_json
23
+ })
24
+ _html_attributes[:value] = field.form_value[:html] ? field.form_value[:html][locale] : ""
25
+ = html_localized_field.send :text_area, locale , _html_attributes
26
+
27
+ = form.fields_for field.clear_translations_field do |clear_localized_field|
28
+ label{style='display: block;'}
29
+ ruby:
30
+ _value = field.form_value[:clear] ? field.form_value[:clear][locale] : true
31
+ _hash = {
32
+ value: _value,
33
+ checked: _value.in?([true, '1']),
34
+ required: false,
35
+ class: "form-control"
36
+ }
37
+ _html_attributes = field.html_attributes.reverse_merge(_hash)
38
+ span{style='float: left'}= clear_localized_field.send field.boolean_view_helper, locale , _html_attributes
39
+ div{style='margin-left: 35px; line-height: 40px;'} Убирать теги
43
40
 
44
41
  javascript:
45
42
  var #{field.name}#{field.object_id} = (new Date().getTime()) + Math.floor(Math.random()*100000);
@@ -0,0 +1,18 @@
1
+ :ruby
2
+ opts = {
3
+ builder: (defined?(RailsAdmin::Hancock::FormBuilder) ? RailsAdmin::Hancock::FormBuilder : RailsAdmin::FormBuilder),
4
+ url: edit_path(@abstract_model, @object.id),
5
+ as: @abstract_model.param_key,
6
+ html: {
7
+ method: "put",
8
+ multipart: true,
9
+ class: "form-horizontal denser",
10
+ data: {
11
+ title: @page_name
12
+ }
13
+ }
14
+ }
15
+ = rails_admin_form_for @object, opts do |form|
16
+ = form.generate action: :update
17
+ / = hancock_rails_admin_form_for @object, opts do |form|
18
+ / = form.generate action: :update
@@ -0,0 +1,17 @@
1
+ :ruby
2
+ opts = {
3
+ builder: (defined?(RailsAdmin::Hancock::FormBuilder) ? RailsAdmin::Hancock::FormBuilder : RailsAdmin::FormBuilder),
4
+ url: new_path(model_name: @abstract_model.to_param),
5
+ as: @abstract_model.param_key,
6
+ html: {
7
+ multipart: true,
8
+ class: "form-horizontal denser",
9
+ data: {
10
+ title: @page_name
11
+ }
12
+ }
13
+ }
14
+ = rails_admin_form_for @object, opts do |form|
15
+ = form.generate action: :create
16
+ / = hancock_rails_admin_form_for @object, opts do |form|
17
+ / = form.generate action: :create
@@ -1,3 +1,5 @@
1
1
  - if user_signed_in? && respond_to?(:can?) && can?(:access, :rails_admin) && can?(:edit, obj)
2
- .admin_link
3
- = link_to t('hancock.edit'), rails_admin.edit_path(obj.class.model_name.i18n_key.to_s.gsub('/', '~'), obj.id), 'data-no-turbolink' => true
2
+ - cache obj do
3
+ .admin_button
4
+ .admin_link
5
+ = link_to t('hancock.edit'), rails_admin.edit_path(obj.class.model_name.i18n_key.to_s.gsub('/', '~'), obj.id), 'data-no-turbolink' => true
@@ -1,89 +1,92 @@
1
- # Patach for glebtv-mongoid_nested_set and rails5 (belongs_to is required)
2
- require 'glebtv-mongoid_nested_set'
1
+ if defined?(Mongoid)
2
+ # Patch for glebtv-mongoid_nested_set and rails5 (belongs_to is required)
3
+ require 'glebtv-mongoid_nested_set'
3
4
 
4
- module Mongoid::Acts::NestedSet
5
- module Base
6
- # Configuration options are:
7
- #
8
- # * +:parent_field+ - field name to use for keeping the parent id (default: parent_id)
9
- # * +:left_field+ - field name for left boundary data, default 'lft'
10
- # * +:right_field+ - field name for right boundary data, default 'rgt'
11
- # * +:outline_number_field+ - field name for the number field, default nil. If set,
12
- # the value will be used as a field name to keep track of each node's
13
- # "outline number" (e.g. 1.2.5).
14
- # * +:scope+ - restricts what is to be considered a list. Given a symbol, it'll attach
15
- # "_id" (if it hasn't been already) and use that as the foreign key restriction. You
16
- # can also pass an array to scope by multiple attributes
17
- # * +:dependent+ - behavior for cascading destroy. If set to :destroy, all the child
18
- # objects are destroyed alongside this object by calling their destroy method. If set
19
- # to :delete_all (default), all the child objects are deleted without calling their
20
- # destroy method.
21
- # * +:klass+ - class to use for queries (defaults to self)
22
- #
23
- # See Mongoid::Acts::NestedSet::ClassMethods for a list of class methods and
24
- # Mongoid::Acts::NestedSet::InstanceMethods for a list of instance methods added to
25
- # acts_as_nested_set models
26
- def acts_as_nested_set(options = {})
27
- options = {
28
- :parent_field => 'parent_id',
29
- :left_field => 'lft',
30
- :right_field => 'rgt',
31
- :outline_number_field => nil,
32
- :dependent => :delete_all, # or :destroy
33
- :klass => self,
34
- }.merge(options)
5
+ module Mongoid::Acts::NestedSet
6
+ module Base
7
+ # Configuration options are:
8
+ #
9
+ # * +:parent_field+ - field name to use for keeping the parent id (default: parent_id)
10
+ # * +:left_field+ - field name for left boundary data, default 'lft'
11
+ # * +:right_field+ - field name for right boundary data, default 'rgt'
12
+ # * +:outline_number_field+ - field name for the number field, default nil. If set,
13
+ # the value will be used as a field name to keep track of each node's
14
+ # "outline number" (e.g. 1.2.5).
15
+ # * +:scope+ - restricts what is to be considered a list. Given a symbol, it'll attach
16
+ # "_id" (if it hasn't been already) and use that as the foreign key restriction. You
17
+ # can also pass an array to scope by multiple attributes
18
+ # * +:dependent+ - behavior for cascading destroy. If set to :destroy, all the child
19
+ # objects are destroyed alongside this object by calling their destroy method. If set
20
+ # to :delete_all (default), all the child objects are deleted without calling their
21
+ # destroy method.
22
+ # * +:klass+ - class to use for queries (defaults to self)
23
+ #
24
+ # See Mongoid::Acts::NestedSet::ClassMethods for a list of class methods and
25
+ # Mongoid::Acts::NestedSet::InstanceMethods for a list of instance methods added to
26
+ # acts_as_nested_set models
27
+ def acts_as_nested_set(options = {})
28
+ options = {
29
+ :parent_field => 'parent_id',
30
+ :left_field => 'lft',
31
+ :right_field => 'rgt',
32
+ :outline_number_field => nil,
33
+ :dependent => :delete_all, # or :destroy
34
+ :klass => self,
35
+ }.merge(options)
35
36
 
36
- if options[:scope].is_a?(Symbol) && options[:scope].to_s !~ /_id$/
37
- options[:scope] = "#{options[:scope]}_id".intern
38
- end
37
+ if options[:scope].is_a?(Symbol) && options[:scope].to_s !~ /_id$/
38
+ options[:scope] = "#{options[:scope]}_id".intern
39
+ end
39
40
 
40
- class_attribute :acts_as_nested_set_options, :instance_writer => false
41
- self.acts_as_nested_set_options = options
41
+ class_attribute :acts_as_nested_set_options, :instance_writer => false
42
+ self.acts_as_nested_set_options = options
42
43
 
43
- unless self.is_a?(Document::ClassMethods)
44
- include Document
45
- include OutlineNumber if outline_number_field_name
44
+ unless self.is_a?(Document::ClassMethods)
45
+ include Document
46
+ include OutlineNumber if outline_number_field_name
46
47
 
47
- field left_field_name, :type => Integer
48
- field right_field_name, :type => Integer
49
- field outline_number_field_name, :type => String if outline_number_field_name
50
- field :depth, :type => Integer
48
+ field left_field_name, :type => Integer
49
+ field right_field_name, :type => Integer
50
+ field outline_number_field_name, :type => String if outline_number_field_name
51
+ field :depth, :type => Integer
51
52
 
52
- has_many :children, :class_name => self.name, :foreign_key => parent_field_name, :inverse_of => :parent, :order => left_field_name.to_sym.asc
53
- # was
54
- # belongs_to :parent, :class_name => self.name, :foreign_key => parent_field_name
55
- # became
56
- belongs_to :parent, :class_name => self.name, :foreign_key => parent_field_name, required: false
53
+ has_many :children, :class_name => self.name, :foreign_key => parent_field_name, :inverse_of => :parent, :order => left_field_name.to_sym.asc
54
+ # was
55
+ # belongs_to :parent, :class_name => self.name, :foreign_key => parent_field_name
56
+ # became
57
+ belongs_to :parent, :class_name => self.name, :foreign_key => parent_field_name, required: false
57
58
 
58
- attr_accessor :skip_before_destroy
59
+ attr_accessor :skip_before_destroy
59
60
 
60
- define_callbacks :move, :terminator => callback_terminator
61
+ define_callbacks :move, :terminator => callback_terminator
61
62
 
62
- before_create :set_default_left_and_right
63
- before_save :store_new_parent
64
- after_save :move_to_new_parent
65
- before_destroy :destroy_descendants
63
+ before_create :set_default_left_and_right
64
+ before_save :store_new_parent
65
+ after_save :move_to_new_parent
66
+ before_destroy :destroy_descendants
66
67
 
67
- # no assignment to structure fields
68
- [left_field_name, right_field_name].each do |field|
69
- module_eval <<-"end_eval", __FILE__, __LINE__
70
- def #{field}=(x)
71
- raise NameError, "Unauthorized assignment to #{field}: it's an internal field handled by acts_as_nested_set code, use move_to_* methods instead.", "#{field}"
72
- end
73
- end_eval
74
- end
68
+ # no assignment to structure fields
69
+ [left_field_name, right_field_name].each do |field|
70
+ module_eval <<-"end_eval", __FILE__, __LINE__
71
+ def #{field}=(x)
72
+ raise NameError, "Unauthorized assignment to #{field}: it's an internal field handled by acts_as_nested_set code, use move_to_* methods instead.", "#{field}"
73
+ end
74
+ end_eval
75
+ end
75
76
 
76
- scope :roots, lambda {
77
- where(parent_field_name => nil).asc(left_field_name)
78
- }
79
- scope :leaves, lambda {
80
- where("this.#{quoted_right_field_name} - this.#{quoted_left_field_name} == 1").asc(left_field_name)
81
- }
82
- scope :with_depth, lambda { |level|
83
- where(:depth => level).asc(left_field_name)
84
- }
77
+ scope :roots, lambda {
78
+ where(parent_field_name => nil).asc(left_field_name)
79
+ }
80
+ scope :leaves, lambda {
81
+ where("this.#{quoted_right_field_name} - this.#{quoted_left_field_name} == 1").asc(left_field_name)
82
+ }
83
+ scope :with_depth, lambda { |level|
84
+ where(:depth => level).asc(left_field_name)
85
+ }
85
86
 
87
+ end
86
88
  end
87
89
  end
88
90
  end
91
+
89
92
  end
@@ -0,0 +1,27 @@
1
+ require 'rails_admin/adapters/mongoid'
2
+ module RailsAdmin
3
+ module Adapters
4
+ module Mongoid
5
+
6
+ def sort_by(options, scope)
7
+ return scope unless options[:sort]
8
+
9
+ case options[:sort]
10
+ when String
11
+ field_name, collection_name = options[:sort].split('.').reverse
12
+ # if collection_name && collection_name != table_name
13
+ # raise('sorting by associated model column is not supported in Non-Relational databases')
14
+ # end
15
+ when Symbol
16
+ field_name = options[:sort].to_s
17
+ end
18
+ if options[:sort_reverse]
19
+ scope.asc field_name
20
+ else
21
+ scope.desc field_name
22
+ end
23
+ end
24
+
25
+ end
26
+ end
27
+ end