enjoy_cms_pages 0.4.0.beta3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.ruby-gemset +1 -0
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +4 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +40 -0
  9. data/Rakefile +1 -0
  10. data/app/assets/javascripts/enjoy/pages/init.coffee +2 -0
  11. data/app/assets/javascripts/enjoy/pages/scrolling.coffee +55 -0
  12. data/app/assets/javascripts/enjoy/pages.coffee +6 -0
  13. data/app/controllers/concerns/enjoy/pages/blocksetable.rb +81 -0
  14. data/app/controllers/concerns/enjoy/pages/decorators/pages_controller.rb +5 -0
  15. data/app/controllers/concerns/enjoy/pages/nav_menu.rb +91 -0
  16. data/app/controllers/concerns/enjoy/pages/seo_pages.rb +90 -0
  17. data/app/controllers/enjoy/pages/pages_controller.rb +7 -0
  18. data/app/helpers/enjoy/pages/canonical_helper.rb +13 -0
  19. data/app/helpers/enjoy/pages/pages_helpers.rb +2 -0
  20. data/app/models/concerns/enjoy/pages/canonicalable.rb +22 -0
  21. data/app/models/concerns/enjoy/pages/connectable.rb +36 -0
  22. data/app/models/concerns/enjoy/pages/decorators/block.rb +5 -0
  23. data/app/models/concerns/enjoy/pages/decorators/blockset.rb +5 -0
  24. data/app/models/concerns/enjoy/pages/decorators/menu.rb +5 -0
  25. data/app/models/concerns/enjoy/pages/decorators/page.rb +5 -0
  26. data/app/models/enjoy/pages/block.rb +13 -0
  27. data/app/models/enjoy/pages/blockset.rb +13 -0
  28. data/app/models/enjoy/pages/menu.rb +16 -0
  29. data/app/models/enjoy/pages/page.rb +16 -0
  30. data/app/views/enjoy/pages/pages/show.html.slim +1 -0
  31. data/app/views/rails_admin/main/_enjoy_connectable.html.slim +56 -0
  32. data/bin/console +14 -0
  33. data/bin/setup +7 -0
  34. data/config/initializers/enjoy_pages.rb +85 -0
  35. data/config/locales/ru.enjoy.pages.yml +44 -0
  36. data/enjoy_cms_pages.gemspec +36 -0
  37. data/lib/enjoy/pages/admin/block.rb +67 -0
  38. data/lib/enjoy/pages/admin/blockset.rb +53 -0
  39. data/lib/enjoy/pages/admin/menu.rb +27 -0
  40. data/lib/enjoy/pages/admin/page.rb +98 -0
  41. data/lib/enjoy/pages/admin.rb +4 -0
  42. data/lib/enjoy/pages/configuration.rb +32 -0
  43. data/lib/enjoy/pages/controllers/pages.rb +26 -0
  44. data/lib/enjoy/pages/engine.rb +5 -0
  45. data/lib/enjoy/pages/models/active_record/block.rb +16 -0
  46. data/lib/enjoy/pages/models/active_record/blockset.rb +19 -0
  47. data/lib/enjoy/pages/models/active_record/menu.rb +20 -0
  48. data/lib/enjoy/pages/models/active_record/page.rb +22 -0
  49. data/lib/enjoy/pages/models/block.rb +89 -0
  50. data/lib/enjoy/pages/models/blockset.rb +17 -0
  51. data/lib/enjoy/pages/models/menu.rb +23 -0
  52. data/lib/enjoy/pages/models/mongoid/block.rb +32 -0
  53. data/lib/enjoy/pages/models/mongoid/blockset.rb +16 -0
  54. data/lib/enjoy/pages/models/mongoid/menu.rb +16 -0
  55. data/lib/enjoy/pages/models/mongoid/page.rb +43 -0
  56. data/lib/enjoy/pages/models/page.rb +106 -0
  57. data/lib/enjoy/pages/rails_admin_ext/enjoy_connectable.rb +33 -0
  58. data/lib/enjoy/pages/rails_admin_ext/menu.rb +147 -0
  59. data/lib/enjoy/pages/routes.rb +46 -0
  60. data/lib/enjoy/pages/version.rb +5 -0
  61. data/lib/enjoy_cms_pages.rb +70 -0
  62. data/lib/generators/enjoy/pages/migration_generator.rb +18 -0
  63. data/lib/generators/enjoy/pages/templates/migration_blocks.rb +42 -0
  64. data/lib/generators/enjoy/pages/templates/migration_pages.rb +48 -0
  65. data/release.sh +7 -0
  66. metadata +164 -0
@@ -0,0 +1,56 @@
1
+ ruby:
2
+ related_id = params[:associations] && params[:associations][field.name.to_s]
3
+ config = field.associated_model_config
4
+ source_abstract_model = RailsAdmin.config(form.object.class).abstract_model
5
+
6
+ if form.object.new_record? && related_id.present? && related_id != 'new'
7
+ selected = [config.abstract_model.get(related_id)]
8
+ else
9
+ selected = form.object.send(field.name)
10
+ end
11
+ selected_ids = selected.map{|s| s.send(field.associated_primary_key)}
12
+
13
+ current_action = params[:action].in?(['create', 'new']) ? 'create' : 'update'
14
+
15
+ xhr = !field.associated_collection_cache_all
16
+
17
+ collection = if xhr
18
+ selected.map { |o| [o.send(field.associated_object_label_method), o.send(field.associated_primary_key)] }
19
+ else
20
+ i = 0
21
+ controller.list_entries(config, :index, field.associated_collection_scope, false).map { |o| [o.send(field.associated_object_label_method), o.send(field.associated_primary_key)] }.sort_by {|a| [selected_ids.index(a[1]) || selected_ids.size, i+=1] }
22
+ end
23
+
24
+ js_data = {
25
+ xhr: xhr,
26
+ :'edit-url' => (authorized?(:edit, config.abstract_model) ? edit_path(model_name: config.abstract_model.to_param, id: '__ID__') : ''),
27
+ remote_source: index_path(config.abstract_model, source_object_id: form.object.id, source_abstract_model: source_abstract_model.to_param, associated_collection: field.name, current_action: current_action, compact: true),
28
+ sortable: !!field.orderable,
29
+ removable: !!field.removable,
30
+ cacheAll: !!field.associated_collection_cache_all,
31
+ regional: {
32
+ chooseAll: t("admin.misc.chose_all"),
33
+ chosen: t("admin.misc.chosen", name: config.label_plural),
34
+ clearAll: t("admin.misc.clear_all"),
35
+ search: t("admin.misc.search"),
36
+ up: t("admin.misc.up"),
37
+ down: t("admin.misc.down")
38
+ }
39
+ }
40
+
41
+ input{name="#{form.dom_name(field)}" type="hidden" value=""}
42
+
43
+ - if field.bindings[:object].new_record? and field.bindings[:object].respond_to?(field.autocreate_page_attr)
44
+ p
45
+ span{style='float: left'}= form.check_box field.autocreate_page_attr, checked: false, class: "form-control"
46
+ div{style='margin-left: 35px; line-height: 40px;'} Автоматически создать пункт меню
47
+
48
+ - selected_ids = (hdv = field.form_default_value).nil? ? selected_ids : hdv
49
+ = form.select field.method_name, collection, { selected: selected_ids, object: form.object }, field.html_attributes.reverse_merge({data: { filteringmultiselect: true, options: js_data.to_json }, multiple: true})
50
+ - if authorized?(:new, config.abstract_model) && field.inline_add
51
+ - path_hash = { model_name: config.abstract_model.to_param, modal: true }
52
+ - path_hash.merge!({ associations: { field.inverse_of => (form.object.persisted? ? form.object.id : 'new') } }) if field.inverse_of
53
+ = link_to "<i class=\"icon-plus icon-white\"></i> ".html_safe + wording_for(:link, :new, config.abstract_model), '#', data: { link: new_path(path_hash) }, class: "create btn btn-info", style: 'margin-left:10px'
54
+
55
+
56
+
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "enjoy_pages"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,85 @@
1
+ Enjoy.configure do |config|
2
+ config.ability_manager_config ||= []
3
+ config.ability_manager_config << {
4
+ method: :can,
5
+ model: Enjoy::Pages::Page,
6
+ actions: [:show, :read, :new, :create, :edit, :update, :nested_set]
7
+ }
8
+ config.ability_manager_config << {
9
+ method: :cannot,
10
+ model: Enjoy::Pages::Menu,
11
+ actions: :manage
12
+ }
13
+ config.ability_manager_config << {
14
+ method: :can,
15
+ model: Enjoy::Pages::Blockset,
16
+ actions: [:show, :read, :new, :create, :edit, :update, :sort_embedded]
17
+ }
18
+ config.ability_manager_config << {
19
+ method: :can,
20
+ model: Enjoy::Pages::Block,
21
+ actions: [:show, :read, :new, :create, :edit, :update]
22
+ }
23
+
24
+ config.ability_admin_config ||= []
25
+ config.ability_admin_config << {
26
+ method: :can,
27
+ model: Enjoy::Pages::Page,
28
+ actions: :manage
29
+ }
30
+ config.ability_admin_config << {
31
+ method: :can,
32
+ model: Enjoy::Pages::Menu,
33
+ actions: :manage
34
+ }
35
+ config.ability_admin_config << {
36
+ method: :can,
37
+ model: Enjoy::Pages::Blockset,
38
+ actions: :manage
39
+ }
40
+ config.ability_admin_config << {
41
+ method: :can,
42
+ model: Enjoy::Pages::Block,
43
+ actions: :manage
44
+ }
45
+ end
46
+
47
+
48
+ Enjoy.rails_admin_configure do |config|
49
+ config.action_visible_for :nested_set, 'Enjoy::Pages::Page'
50
+ if Enjoy::Pages.active_record?
51
+ config.action_visible_for :nested_set, 'Enjoy::Pages::Blockset'
52
+ end
53
+
54
+ if Enjoy::Pages.mongoid?
55
+ config.action_visible_for :sort_embedded, 'Enjoy::Pages::Blockset'
56
+ end
57
+
58
+ config.action_visible_for :toggle_menu, 'Enjoy::Pages::Page'
59
+
60
+ if defined?(RailsAdminComments)
61
+ config.action_visible_for :comments, 'Enjoy::Pages::Menu'
62
+ config.action_visible_for :comments, 'Enjoy::Pages::Page'
63
+ config.action_visible_for :comments, 'Enjoy::Pages::Blockset'
64
+ config.action_visible_for :model_comments, 'Enjoy::Pages::Menu'
65
+ config.action_visible_for :model_comments, 'Enjoy::Pages::Page'
66
+ config.action_visible_for :model_comments, 'Enjoy::Pages::Blockset'
67
+ if Enjoy::Pages.active_record?
68
+ config.action_visible_for :comments, 'Enjoy::Pages::Block'
69
+ config.action_visible_for :model_comments, 'Enjoy::Pages::Block'
70
+ end
71
+ end
72
+ end
73
+
74
+
75
+ if defined?(RailsAdmin)
76
+ RailsAdmin.config do |config|
77
+ config.excluded_models ||= []
78
+ if Enjoy::Pages.mongoid?
79
+ config.excluded_models << [
80
+ # 'Enjoy::Pages::Block'
81
+ ]
82
+ end
83
+ config.excluded_models.flatten!
84
+ end
85
+ end
@@ -0,0 +1,44 @@
1
+ ru:
2
+ admin:
3
+ actions:
4
+ toggle_menu:
5
+ menu: Переключатель меню
6
+ breadcrumb: Переключатель меню
7
+ title: Переключатель меню
8
+
9
+ enjoy:
10
+ pages: 'Страницы и меню'
11
+ menu_title: Меню
12
+ menu:
13
+ enabled: 'добавлено в меню "%{menu}"'
14
+ disabled: 'удалено из меню "%{menu}"'
15
+ error: "Ошибка: %{err}"
16
+ no_id: "Не указан ID"
17
+
18
+ mongoid: &mongoid
19
+ models:
20
+ enjoy/pages/menu: Меню
21
+ enjoy/pages/page: Страница
22
+ enjoy/pages/block: Блок
23
+ enjoy/pages/blockset: Блоки
24
+
25
+ attributes:
26
+ enjoy/pages/page:
27
+ fullpath: URL
28
+ regexp: Подсветка меню
29
+ redirect: Редирект
30
+ image: Картинка
31
+ hidden: Скрытая
32
+ menus: Меню
33
+ connectable: Связанный элемент
34
+ connectable_type: Связанный элемент
35
+ connectable_id: Связанный элемент
36
+ enjoy/pages/blockset:
37
+ blocks: Блоки
38
+ enjoy/pages/block:
39
+ pageblock_selector: "CSS селектор блока на странице"
40
+ partial: "Файл-partial"
41
+ file_path: "Путь к файлу"
42
+
43
+ activerecord:
44
+ <<: *mongoid
@@ -0,0 +1,36 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'enjoy/pages/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "enjoy_cms_pages"
8
+ spec.version = Enjoy::Pages::VERSION
9
+ spec.authors = ["Alexander Kiseliev"]
10
+ spec.email = ["dev@enjoycreate.ru"]
11
+
12
+ spec.description = %q{enjoy_cms_pages }
13
+ spec.summary = %q{enjoy_cms_pages}
14
+ spec.homepage = 'https://github.com/enjoycreative/enjoy_cms_pages'
15
+ spec.license = "MIT"
16
+
17
+ # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
18
+ # delete this section to allow pushing this gem to any host.
19
+ # if spec.respond_to?(:metadata)
20
+ # spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
21
+ # else
22
+ # raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
23
+ # end
24
+
25
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
26
+ spec.bindir = "exe"
27
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
+ spec.require_paths = ["lib"]
29
+
30
+ spec.add_development_dependency "bundler", "~> 1.10"
31
+ spec.add_development_dependency "rake", "~> 10.0"
32
+
33
+ spec.add_dependency 'enjoy_cms', "~> 0.4.0.beta3"
34
+
35
+ spec.add_dependency 'simple-navigation'
36
+ end
@@ -0,0 +1,67 @@
1
+ module Enjoy::Pages
2
+ module Admin
3
+ module Block
4
+ def self.config(fields = {})
5
+ Proc.new {
6
+ navigation_label I18n.t('enjoy.pages')
7
+
8
+ field :enabled, :toggle do
9
+ searchable false
10
+ end
11
+ field :show_in_menu, :toggle do
12
+ searchable false
13
+ end
14
+ field :partial, :toggle do
15
+ searchable false
16
+ end
17
+ field :name do
18
+ searchable true
19
+ end
20
+ field :menu_link_content, :text do
21
+ searchable true
22
+ end
23
+ field :pageblock_selector, :string do
24
+ searchable true
25
+ end
26
+
27
+ field :file_path, :string do
28
+ searchable true
29
+ end
30
+ field :content, :enjoy_html do
31
+ searchable true
32
+ end
33
+
34
+ group :wrapper do
35
+ active false
36
+ field :use_wrapper, :toggle
37
+ field :wrapper_tag, :string
38
+ field :wrapper_class, :string
39
+ field :wrapper_id, :string
40
+ end
41
+
42
+ # field :content_html, :ck_editor
43
+ # field :content_clear, :toggle
44
+
45
+ Enjoy::RailsAdminGroupPatch::enjoy_cms_group(self, fields)
46
+
47
+ # field :blocksets do
48
+ # read_only true
49
+ # help 'Список групп блоков'
50
+ #
51
+ # pretty_value do
52
+ # bindings[:object].blocksets.to_a.map { |bs|
53
+ # route = (bindings[:view] || bindings[:controller])
54
+ # model_name = bs.rails_admin_model
55
+ # route.link_to(bs.name, route.rails_admin.show_path(model_name: model_name, id: bs.id), title: bs.name)
56
+ # }.join("<br>").html_safe
57
+ # end
58
+ # end
59
+
60
+ if block_given?
61
+ yield self
62
+ end
63
+ }
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,53 @@
1
+ module Enjoy::Pages
2
+ module Admin
3
+ module Blockset
4
+ def self.config(fields = {})
5
+ Proc.new {
6
+ navigation_label I18n.t('enjoy.pages')
7
+
8
+ field :enabled, :toggle do
9
+ searchable false
10
+ end
11
+ field :text_slug do
12
+ searchable true
13
+ end
14
+ field :name do
15
+ searchable true
16
+ end
17
+
18
+ group :blocks do
19
+ active false
20
+ field :blocks do
21
+ searchable :name
22
+ end
23
+ end
24
+
25
+ Enjoy::RailsAdminGroupPatch::enjoy_cms_group(self, fields)
26
+
27
+ # field :blocks do
28
+ # read_only true
29
+ # help 'Список блоков'
30
+ #
31
+ # pretty_value do
32
+ # bindings[:object].blocks.to_a.map { |b|
33
+ # route = (bindings[:view] || bindings[:controller])
34
+ # model_name = b.rails_admin_model
35
+ # route.link_to(b.name, route.rails_admin.show_path(model_name: model_name, id: b.id), title: b.name)
36
+ # }.join("<br>").html_safe
37
+ # end
38
+ # end
39
+
40
+ sort_embedded(
41
+ {
42
+ fields: [:blocks]
43
+ }
44
+ )
45
+
46
+ if block_given?
47
+ yield self
48
+ end
49
+ }
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,27 @@
1
+ module Enjoy::Pages
2
+ module Admin
3
+ module Menu
4
+ def self.config(fields = {})
5
+ Proc.new {
6
+ navigation_label I18n.t('enjoy.pages')
7
+
8
+ field :enabled, :toggle do
9
+ searchable false
10
+ end
11
+ field :text_slug do
12
+ searchable true
13
+ end
14
+ field :name do
15
+ searchable true
16
+ end
17
+
18
+ Enjoy::RailsAdminGroupPatch::enjoy_cms_group(self, fields)
19
+
20
+ if block_given?
21
+ yield self
22
+ end
23
+ }
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,98 @@
1
+ module Enjoy::Pages
2
+ module Admin
3
+ module Page
4
+ def self.config(fields = {})
5
+ Proc.new {
6
+ navigation_label I18n.t('enjoy.pages')
7
+
8
+ list do
9
+ scopes [:sorted, :enabled, nil]
10
+
11
+ field :enabled, :toggle do
12
+ searchable false
13
+ end
14
+ field :menus, :menu do
15
+ searchable :name
16
+ end
17
+ field :name do
18
+ searchable true
19
+ end
20
+ field :connectable do
21
+ searchable :name
22
+ end
23
+ field :fullpath do
24
+ searchable true
25
+ pretty_value do
26
+ bindings[:view].content_tag(:a, bindings[:object].fullpath, href: bindings[:object].fullpath)
27
+ end
28
+ end
29
+ field :redirect do
30
+ searchable true
31
+ end
32
+ field :slug do
33
+ searchable true
34
+ end
35
+ end
36
+
37
+ edit do
38
+ field :enabled, :toggle
39
+ field :name
40
+ field :connectable do
41
+ read_only true
42
+ end
43
+
44
+ group :content do
45
+ active false
46
+ field :excerpt, :enjoy_html
47
+ # field :excerpt_html, :ck_editor
48
+ # field :excerpt_clear, :toggle
49
+ field :content, :enjoy_html
50
+ # field :content_html, :ck_editor
51
+ # field :content_clear, :toggle
52
+ end
53
+
54
+ group :menu do
55
+ active false
56
+ label I18n.t('enjoy.menu_title')
57
+ field :menus
58
+ field :fullpath, :string do
59
+ help I18n.t('enjoy.with_final_slash')
60
+ end
61
+ field :regexp, :string do
62
+ help I18n.t('enjoy.page_url_regex')
63
+ end
64
+ field :redirect, :string do
65
+ help I18n.t('enjoy.final_in_menu')
66
+ end
67
+ field :text_slug
68
+ end
69
+
70
+ Enjoy::RailsAdminGroupPatch::enjoy_cms_group(self, fields)
71
+
72
+ group :seo do
73
+ active false
74
+ field :seo do
75
+ active true
76
+ end
77
+ end
78
+ group :sitemap_data do
79
+ active false
80
+ field :sitemap_data do
81
+ active true
82
+ end
83
+ end
84
+ end
85
+
86
+ nested_set({
87
+ max_depth: Enjoy::Pages.config.menu_max_depth,
88
+ scopes: []
89
+ })
90
+
91
+ if block_given?
92
+ yield self
93
+ end
94
+ }
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,4 @@
1
+ module Enjoy::Pages
2
+ module Admin
3
+ end
4
+ end
@@ -0,0 +1,32 @@
1
+ module Enjoy::Pages
2
+ def self.configuration
3
+ @configuration ||= Configuration.new
4
+ end
5
+ def self.config
6
+ @configuration ||= Configuration.new
7
+ end
8
+
9
+ def self.configure
10
+ yield configuration
11
+ end
12
+
13
+ class Configuration
14
+ attr_accessor :menu_max_depth
15
+
16
+ attr_accessor :seo_support
17
+
18
+ attr_accessor :localize
19
+
20
+ attr_accessor :breadcrumbs_on_rails_support
21
+
22
+ def initialize
23
+ @menu_max_depth = 2
24
+
25
+ @seo_support = defined? Enjoy::Seo
26
+
27
+ @localize = Enjoy.config.localize
28
+
29
+ @breadcrumbs_on_rails_support = defined?(BreadcrumbsOnRails)
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,26 @@
1
+ module Enjoy::Pages
2
+ module Controllers
3
+ module Pages
4
+ extend ActiveSupport::Concern
5
+ def show
6
+ if @seo_page.nil? || !@seo_page.persisted?
7
+ if !params[:id].blank? or !params[:slug].blank?
8
+ @seo_page = model.enabled.find(params[:id] || params[:slug])
9
+ end
10
+ end
11
+ if @seo_page.nil?
12
+ render_404
13
+ return true
14
+ end
15
+
16
+ if Enjoy::Pages.config.breadcrumbs_on_rails_support
17
+ add_breadcrumb @seo_page.name, @seo_page.slug
18
+ end
19
+ end
20
+
21
+ def model
22
+ Enjoy::Pages::Page
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,5 @@
1
+ module Enjoy::Pages
2
+ class Engine < ::Rails::Engine
3
+ # isolate_namespace Enjoy::Pages
4
+ end
5
+ end
@@ -0,0 +1,16 @@
1
+ module Enjoy::Pages
2
+ module Models
3
+ module ActiveRecord
4
+ module Block
5
+ extend ActiveSupport::Concern
6
+
7
+ # include Enjoy::HtmlField
8
+
9
+ included do
10
+ belongs_to :blockset, class_name: "Enjoy::Pages::Block"
11
+ end
12
+
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,19 @@
1
+ module Enjoy::Pages
2
+ module Models
3
+ module ActiveRecord
4
+ module Blockset
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ has_paper_trail
9
+ validates_lengths_from_database only: [:name]
10
+ if Enjoy::Pages.config.localize
11
+ translates :name
12
+ end
13
+
14
+ has_many :page_blocks, class_name: "Enjoy::Pages::Blockset"
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,20 @@
1
+ module Enjoy::Pages
2
+ module Models
3
+ module ActiveRecord
4
+ module Menu
5
+ extend ActiveSupport::Concern
6
+ included do
7
+ has_paper_trail
8
+ validates_lengths_from_database only: [:name]
9
+ if Enjoy::Pages.config.localize
10
+ translates :name
11
+ end
12
+
13
+ has_and_belongs_to_many :pages,
14
+ class_name: "Enjoy::Pages::Page",
15
+ join_table: :enjoy_pages_menus_pages
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,22 @@
1
+ module Enjoy::Pages
2
+ module Models
3
+ module ActiveRecord
4
+ module Page
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ has_paper_trail
9
+ validates_lengths_from_database only: [:name, :content_html, :excerpt_html, :regexp, :redirect, :fullpath]
10
+ scope :sorted, -> { order(lft: :asc) }
11
+ if Enjoy::Pages.config.localize
12
+ translates :name, :content_html, :excerpt_html
13
+ end
14
+
15
+ has_and_belongs_to_many :menus,
16
+ class_name: "Enjoy::Pages::Menu",
17
+ join_table: :enjoy_pages_menus_pages
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end