cadmus 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +8 -1
  3. data/Gemfile +2 -0
  4. data/README.md +6 -35
  5. data/Rakefile +33 -2
  6. data/app/helpers/cadmus/rendering_helper.rb +24 -0
  7. data/app/views/cadmus/layouts/_form.html.erb +11 -0
  8. data/app/views/cadmus/layouts/edit.html.erb +5 -0
  9. data/app/views/cadmus/layouts/index.html.erb +25 -0
  10. data/app/views/cadmus/layouts/new.html.erb +5 -0
  11. data/app/views/cadmus/pages/index.html.erb +2 -2
  12. data/app/views/cadmus/pages/show.html.erb +1 -1
  13. data/app/views/cadmus/partials/_form.html.erb +35 -0
  14. data/app/views/cadmus/partials/edit.html.erb +5 -0
  15. data/app/views/cadmus/partials/index.html.erb +25 -0
  16. data/app/views/cadmus/partials/new.html.erb +5 -0
  17. data/app/views/cadmus/partials/show.html.erb +4 -0
  18. data/bin/rake +16 -0
  19. data/cadmus.gemspec +2 -2
  20. data/lib/cadmus.rb +23 -6
  21. data/lib/cadmus/concerns/controller_with_parent.rb +70 -0
  22. data/lib/cadmus/concerns/liquid_template_field.rb +33 -0
  23. data/lib/cadmus/concerns/model_with_parent.rb +14 -0
  24. data/lib/cadmus/concerns/other_class_accessor.rb +50 -0
  25. data/lib/cadmus/engine.rb +9 -0
  26. data/lib/cadmus/layout.rb +32 -0
  27. data/lib/cadmus/layouts_controller.rb +70 -0
  28. data/lib/cadmus/page.rb +22 -7
  29. data/lib/cadmus/{controller_extensions.rb → pages_controller.rb} +8 -60
  30. data/lib/cadmus/partial.rb +32 -0
  31. data/lib/cadmus/partial_file_system.rb +28 -0
  32. data/lib/cadmus/partials_controller.rb +70 -0
  33. data/lib/cadmus/renderers.rb +1 -1
  34. data/lib/cadmus/version.rb +1 -1
  35. data/test/cadmus_test.rb +7 -0
  36. data/test/dummy/Rakefile +6 -0
  37. data/test/dummy/app/assets/config/manifest.js +4 -0
  38. data/test/dummy/app/assets/images/.keep +0 -0
  39. data/test/dummy/app/assets/javascripts/application.js +13 -0
  40. data/test/dummy/app/assets/javascripts/cable.js +13 -0
  41. data/test/dummy/app/assets/javascripts/channels/.keep +0 -0
  42. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  43. data/test/dummy/app/channels/application_cable/channel.rb +4 -0
  44. data/test/dummy/app/channels/application_cable/connection.rb +4 -0
  45. data/test/dummy/app/controllers/application_controller.rb +3 -0
  46. data/test/dummy/app/controllers/concerns/.keep +0 -0
  47. data/test/dummy/app/helpers/application_helper.rb +2 -0
  48. data/test/dummy/app/jobs/application_job.rb +2 -0
  49. data/test/dummy/app/mailers/application_mailer.rb +4 -0
  50. data/test/dummy/app/models/application_record.rb +3 -0
  51. data/test/dummy/app/models/concerns/.keep +0 -0
  52. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  53. data/test/dummy/app/views/layouts/mailer.html.erb +13 -0
  54. data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
  55. data/test/dummy/bin/bundle +3 -0
  56. data/test/dummy/bin/rails +4 -0
  57. data/test/dummy/bin/rake +4 -0
  58. data/test/dummy/bin/setup +38 -0
  59. data/test/dummy/bin/update +29 -0
  60. data/test/dummy/bin/yarn +10 -0
  61. data/test/dummy/config.ru +5 -0
  62. data/test/dummy/config/application.rb +18 -0
  63. data/test/dummy/config/boot.rb +5 -0
  64. data/test/dummy/config/cable.yml +10 -0
  65. data/test/dummy/config/database.yml +25 -0
  66. data/test/dummy/config/environment.rb +5 -0
  67. data/test/dummy/config/environments/development.rb +54 -0
  68. data/test/dummy/config/environments/production.rb +91 -0
  69. data/test/dummy/config/environments/test.rb +42 -0
  70. data/test/dummy/config/initializers/application_controller_renderer.rb +6 -0
  71. data/test/dummy/config/initializers/assets.rb +14 -0
  72. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  73. data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
  74. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  75. data/test/dummy/config/initializers/inflections.rb +16 -0
  76. data/test/dummy/config/initializers/mime_types.rb +4 -0
  77. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  78. data/test/dummy/config/locales/en.yml +33 -0
  79. data/test/dummy/config/puma.rb +56 -0
  80. data/test/dummy/config/routes.rb +3 -0
  81. data/test/dummy/config/secrets.yml +32 -0
  82. data/test/dummy/config/spring.rb +6 -0
  83. data/test/dummy/db/development.sqlite3 +0 -0
  84. data/test/dummy/db/test.sqlite3 +0 -0
  85. data/test/dummy/lib/assets/.keep +0 -0
  86. data/test/dummy/log/.keep +0 -0
  87. data/test/dummy/log/development.log +5 -0
  88. data/test/dummy/package.json +5 -0
  89. data/test/dummy/public/404.html +67 -0
  90. data/test/dummy/public/422.html +67 -0
  91. data/test/dummy/public/500.html +66 -0
  92. data/test/dummy/public/apple-touch-icon-precomposed.png +0 -0
  93. data/test/dummy/public/apple-touch-icon.png +0 -0
  94. data/test/dummy/public/favicon.ico +0 -0
  95. data/test/test_helper.rb +17 -0
  96. metadata +150 -9
  97. data/lib/cadmus/liquid_template_field.rb +0 -19
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 215a6a345f843d05ef56b703311301119d8bd685
4
- data.tar.gz: 171b52fb98dcd2779c8fa28f8128a8705aea3411
2
+ SHA256:
3
+ metadata.gz: 6c607dee469a52a3503f7ed85361b5324c4b10cb44941ce653e122a6642881c6
4
+ data.tar.gz: ac58d718a15527304ebb19291d8fa641076334dfcebd6cc97711e493ee3afc77
5
5
  SHA512:
6
- metadata.gz: 138d7e20134104dd9b7f1252def6317678df7038b0ff920569673878437f72f4aeffeed5abd7c980e017ecae568f72b217ea0cb13b4b4d26bb3e4f2d79f56bbe
7
- data.tar.gz: 17f27f48c748c06284811f8b3e7cdcbe549986a97b2a4214146b2e5b24e6ba0e54f4edafa5970ee8c229c3e89f8cf06c942f56a755833f5e22f2b382187f3b3b
6
+ metadata.gz: 5629fb1f4409a98cbd053110aad417e2d3dc697f5b0cb14f00dcfd24003e5ba2571d3de2651d659c794da91bd8d83b7afe45a8f34eb9e293ece85195f6cf3603
7
+ data.tar.gz: 1996d05f4e055806e4c76428414af0c1e437e7399d5d3792ccb03a7183301a7e8411f86d5f48355cb2dbfe9c4bec11f7992113d50e6cadf890068519d7a2dc74
data/CHANGELOG.md CHANGED
@@ -1,8 +1,15 @@
1
+ ## cadmus 0.7.0 (09-19-2018)
2
+
3
+ * BREAKING CHANGE: Cadmus no longer mixes anything into `ActiveRecord::Base` when required; instead, models must explicitly include the mixins they need
4
+ * Layouts
5
+ * Partials
6
+ * Major internal refactors
7
+
1
8
  ## cadmus 0.6.0 (04-08-2017)
2
9
 
3
10
  * Expose a `{% page_url %}` tag, which outputs the URL to a page (for easier inter-page linking)
4
11
  * Expose a Liquid register called `parent` from controllers that mix in `Cadmus::ControllerExtensions`, which contains the page parent (if present)
5
- * Extract a mixin module called `Cadmus::LiquidTemplateField`, which makes it easier to add Liquid templates to models
12
+ * Extract a mixin module called `Cadmus::Concerns::LiquidTemplateField`, which makes it easier to add Liquid templates to models
6
13
 
7
14
  ## cadmus 0.5.3 (02-04-2017)
8
15
 
data/Gemfile CHANGED
@@ -6,3 +6,5 @@ gemspec
6
6
  gem 'yard'
7
7
  gem 'redcarpet', '~> 1.0'
8
8
  gem 'github-markup'
9
+ gem 'rails', '>= 5.1'
10
+ gem 'sqlite3'
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Cadmus: an embeddable CMS for Rails
2
2
 
3
- Cadmus is an embeddable content management system for Rails 3 applications. It's based on [Liquid](http://liquidmarkup.org)
3
+ Cadmus is an embeddable content management system for Rails applications. It's based on [Liquid](http://liquidmarkup.org)
4
4
  and is designed to be small and unobtrusive.
5
5
 
6
6
  Cadmus doesn't define controllers or models itself, but rather, provides mixins to add CMS-like functionality to controllers
@@ -38,10 +38,11 @@ unique index on the parent and slug columns:
38
38
  add_index :pages, [:parent_type, :parent_id, :slug], :unique => true
39
39
  ```
40
40
 
41
- And in the model, add a `cadmus_page` declaration:
41
+ And in the model, include `Cadmus::Page` and add a `cadmus_page` declaration:
42
42
 
43
43
  ```ruby
44
44
  class Page < ActiveRecord::Base
45
+ include Cadmus::Page
45
46
  cadmus_page
46
47
  end
47
48
  ```
@@ -51,36 +52,6 @@ You'll need a controller to deal with your pages. Here's a minimal example of o
51
52
  ```ruby
52
53
  class PagesController < ApplicationController
53
54
  include Cadmus::PagesController
54
-
55
- protected
56
- def page_class
57
- Page
58
- end
59
- end
60
- ```
61
-
62
- If you're on Rails 4 (or using the `strong_parameters` gem) you'll probably want to use forbidden attributes protection.
63
- Here's how you do that:
64
-
65
- ```ruby
66
- class Page < ActiveRecord::Base
67
- include ActiveModel::ForbiddenAttributesProtection
68
- cadmus_page
69
- end
70
- ```
71
-
72
- ```ruby
73
- class PagesController < ApplicationController
74
- include Cadmus::PagesController
75
-
76
- protected
77
- def page_params
78
- params.require(:page).permit(:name, :slug, :content)
79
- end
80
-
81
- def page_class
82
- Page
83
- end
84
55
  end
85
56
  ```
86
57
 
@@ -307,7 +278,7 @@ Cadmus provides a convenience mixin to let you make that field a Liquid template
307
278
 
308
279
  ```ruby
309
280
  class WelcomeEmail < ActiveRecord::Base
310
- include Cadmus::LiquidTemplateField
281
+ include Cadmus::Concerns::LiquidTemplateField
311
282
 
312
283
  liquid_template_field :content_liquid_template, :content
313
284
 
@@ -319,7 +290,7 @@ Now if you call `my_welcome_email.content_liquid_template`, you'll get a parsed
319
290
 
320
291
  ```ruby
321
292
  class WelcomeEmail < ActiveRecord::Base
322
- include Cadmus::LiquidTemplateField
293
+ include Cadmus::Concerns::LiquidTemplateField
323
294
  include Cadmus::Renderable
324
295
 
325
296
  liquid_template_field :content_liquid_template, :content
@@ -336,7 +307,7 @@ Presto! Now you can call `my_welcome_email.rendered_content`. Since `WelcomeEm
336
307
 
337
308
  ```ruby
338
309
  class WelcomeEmail < ActiveRecord::Base
339
- include Cadmus::LiquidTemplateField
310
+ include Cadmus::Concerns::LiquidTemplateField
340
311
  include Cadmus::Renderable
341
312
 
342
313
  liquid_template_field :content_liquid_template, :content
data/Rakefile CHANGED
@@ -1,2 +1,33 @@
1
- #!/usr/bin/env rake
2
- require "bundler/gem_tasks"
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'Cadmus'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.md')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+
18
+
19
+
20
+
21
+
22
+ require 'bundler/gem_tasks'
23
+
24
+ require 'rake/testtask'
25
+
26
+ Rake::TestTask.new(:test) do |t|
27
+ t.libs << 'test'
28
+ t.pattern = 'test/**/*_test.rb'
29
+ t.verbose = false
30
+ end
31
+
32
+
33
+ task default: :test
@@ -0,0 +1,24 @@
1
+ module Cadmus::RenderingHelper
2
+ def render_cadmus_page_in_effective_layout(page)
3
+ page_content = cadmus_renderer.render(@page.liquid_template, :html)
4
+ cms_layout = @page.effective_cms_layout
5
+ render_in_cadmus_layout(page_content, cms_layout, 'page' => page)
6
+ end
7
+
8
+ def render_in_cadmus_layout(content, cms_layout, assigns = {})
9
+ if cms_layout
10
+ assigns = assigns.merge({ 'content_for_layout' => content })
11
+ if defined?(:liquid_assigns_for_layout)
12
+ assigns.reverse_merge!(liquid_assigns_for_layout(cms_layout))
13
+ end
14
+
15
+ cadmus_renderer.render(cms_layout.liquid_template, :html, assigns: assigns, registers: { 'parent' => cms_layout.parent })
16
+ else
17
+ content_for :content do
18
+ content
19
+ end
20
+
21
+ render template: 'layouts/application'
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,11 @@
1
+ <div class="form-group">
2
+ <%= f.label :name %>
3
+ <%= f.text_field :name, class: 'form-control' %>
4
+ </div>
5
+
6
+ <div class="form-group">
7
+ <%= f.label :content %>
8
+ <%= f.text_area(:content, :style => "font-family: monospace; min-height: 40vh;", class: 'form-control') %>
9
+ </div>
10
+
11
+ <%= f.submit class: 'btn btn-primary' %>
@@ -0,0 +1,5 @@
1
+ <h1>Editing layout <%= @cms_layout.name %></h1>
2
+
3
+ <%= form_for @cms_layout, url: url_for(action: 'update', id: @cms_layout) do |f| %>
4
+ <%= render partial: 'cadmus/layouts/form', locals: { f: f } %>
5
+ <% end %>
@@ -0,0 +1,25 @@
1
+ <h1>
2
+ <% if @cms_layout_parent && @cms_layout_parent.respond_to?(:name) -%>
3
+ Layouts in <%= @cms_layout_parent.name %>
4
+ <% else -%>
5
+ Layouts
6
+ <% end -%>
7
+ </h1>
8
+
9
+ <ul class="list-group mb-4">
10
+ <% @cms_layouts.each do |cms_layout| %>
11
+ <li class="list-group-item">
12
+ <div class="row w-100">
13
+ <div class="col">
14
+ <%= cms_layout.name %>
15
+ </div>
16
+ <div class="col text-right">
17
+ <%= link_to "Edit", url_for(action: 'edit', id: cms_layout), class: 'btn btn-secondary btn-sm' %>
18
+ <%= link_to "Delete", url_for(action: 'destroy', id: cms_layout), method: 'DELETE', "data-confirm" => "Are you sure you want to delete this layout?", class: 'btn btn-danger btn-sm' %>
19
+ </div>
20
+ </div>
21
+ </li>
22
+ <% end -%>
23
+ </ul>
24
+
25
+ <%= link_to "New layout", url_for(action: 'new'), class: 'btn btn-primary' %>
@@ -0,0 +1,5 @@
1
+ <h1>New layout</h1>
2
+
3
+ <%= form_for @cms_layout, url: url_for(action: 'create') do |f| %>
4
+ <%= render partial: 'cadmus/layouts/form', locals: { f: f } %>
5
+ <% end %>
@@ -1,6 +1,6 @@
1
1
  <h1>
2
- <% if @page_parent && @page_parent.respond_to?(:name) -%>
3
- <%= @page_parent.name %>
2
+ <% if @parent_model && @parent_model.respond_to?(:name) -%>
3
+ <%= @parent_model.name %>
4
4
  <% else -%>
5
5
  Pages
6
6
  <% end -%>
@@ -1 +1 @@
1
- <%= cadmus_renderer.render(@page.liquid_template, :html) %>
1
+ <%= render_in_page_layout @page %>
@@ -0,0 +1,35 @@
1
+ <% if f.object.errors.any? -%>
2
+ <div id="error_explanation">
3
+ <h2><%= pluralize(f.object.errors.count, "error") %> prohibited this partial from being saved:</h2>
4
+
5
+ <ul>
6
+ <% f.object.errors.full_messages.each do |message| -%>
7
+ <li><%= message %></li>
8
+ <% end -%>
9
+ </ul>
10
+ </div>
11
+ <% end -%>
12
+
13
+ <div class="form-group">
14
+ <%= f.label f.object.class.name_field %>
15
+ <%= f.text_field f.object.class.name_field, class: 'form-control' %>
16
+ </div>
17
+
18
+ <div class="form-group">
19
+ <%= f.label :content %>
20
+ <%= f.text_area(:content, :style => "font-family: monospace; min-height: 40vh;", class: 'form-control') %>
21
+ </div>
22
+
23
+ <%= f.submit class: 'btn btn-primary' %>
24
+
25
+ <p><b>Rendered html preview</b></p>
26
+ <div id="html-preview" style="border:1px solid; min-height: 10em;">
27
+ </div>
28
+ <br/><br/>
29
+
30
+ <%= javascript_include_tag "cadmus.previewablehtml.js" %>
31
+ <script type="text/javascript">
32
+ $(document).ready(function(){
33
+ $('.cadmus-previewable-html').cadmusPreviewableHtml();
34
+ });
35
+ </script>
@@ -0,0 +1,5 @@
1
+ <h1>Editing partial <%= @cms_partial.public_send(@cms_partial.class.name_field) %></h1>
2
+
3
+ <%= form_for @cms_partial, url: url_for(action: 'update', id: @cms_partial) do |f| %>
4
+ <%= render partial: 'cadmus/partials/form', locals: { f: f } %>
5
+ <% end %>
@@ -0,0 +1,25 @@
1
+ <h1>
2
+ <% if @parent_model && @parent_model.respond_to?(:name) -%>
3
+ Partials in <%= @parent_model.name %>
4
+ <% else -%>
5
+ Partials
6
+ <% end -%>
7
+ </h1>
8
+
9
+ <ul class="list-group mb-4">
10
+ <% @cms_partials.each do |cms_partial| %>
11
+ <li class="list-group-item">
12
+ <div class="row w-100">
13
+ <div class="col">
14
+ <%= cms_partial.public_send(cms_partial.class.name_field) %>
15
+ </div>
16
+ <div class="col text-right">
17
+ <%= link_to "Edit", url_for(action: 'edit', id: cms_partial), class: 'btn btn-secondary btn-sm' %>
18
+ <%= link_to "Delete", url_for(action: 'destroy', id: cms_partial), method: 'DELETE', "data-confirm" => "Are you sure you want to delete this partial?", class: 'btn btn-danger btn-sm' %>
19
+ </div>
20
+ </div>
21
+ </li>
22
+ <% end -%>
23
+ </ul>
24
+
25
+ <%= link_to "New partial", url_for(action: 'new'), class: 'btn btn-primary' %>
@@ -0,0 +1,5 @@
1
+ <h1>New partial</h1>
2
+
3
+ <%= form_for @cms_partial, url: url_for(action: 'create') do |f| %>
4
+ <%= render partial: 'cadmus/partials/form', locals: { f: f } %>
5
+ <% end %>
@@ -0,0 +1,4 @@
1
+ <p id="notice"><%= notice %></p>
2
+
3
+ <%= link_to 'Edit', edit_cms_partial_path(@cms_partial) %> |
4
+ <%= link_to 'Back', cms_partials_path %>
data/bin/rake ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'rake' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('rake', 'rake')
data/cadmus.gemspec CHANGED
@@ -9,13 +9,13 @@ Gem::Specification.new do |gem|
9
9
  gem.homepage = "http://github.com/gively/cadmus"
10
10
  gem.license = "MIT"
11
11
 
12
- gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
+ gem.executables = `git ls-files -- exe/*`.split("\n").map{ |f| File.basename(f) }
13
13
  gem.files = `git ls-files`.split("\n")
14
14
  gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
15
15
  gem.name = "cadmus"
16
16
  gem.require_paths = ["lib"]
17
17
  gem.version = Cadmus::VERSION
18
18
 
19
- gem.add_dependency("rails", ">= 4.0.0")
19
+ gem.add_dependency("rails", ">= 5.0.0")
20
20
  gem.add_dependency("liquid")
21
21
  end
data/lib/cadmus.rb CHANGED
@@ -1,14 +1,31 @@
1
+ require 'liquid'
2
+
1
3
  require "cadmus/version"
4
+
5
+ require "cadmus/concerns/controller_with_parent"
6
+ require "cadmus/concerns/model_with_parent"
7
+ require "cadmus/concerns/liquid_template_field"
8
+ require "cadmus/concerns/other_class_accessor"
9
+
2
10
  require "cadmus/routing"
3
11
  require "cadmus/renderers"
4
- require "cadmus/controller_extensions"
5
12
  require "cadmus/slugs"
6
- require "cadmus/liquid_template_field"
7
- require "cadmus/page"
8
13
  require "cadmus/tags"
14
+ require "cadmus/page"
15
+ require "cadmus/layout"
16
+ require "cadmus/partial"
17
+ require "cadmus/partial_file_system"
18
+ require "cadmus/pages_controller"
19
+ require "cadmus/partials_controller"
20
+ require "cadmus/layouts_controller"
21
+
9
22
  require "rails"
23
+ require "cadmus/engine"
10
24
 
11
25
  module Cadmus
12
- class Engine < Rails::Engine
13
- end
14
- end
26
+ extend Cadmus::Concerns::OtherClassAccessor
27
+
28
+ other_class_accessor :layout_model
29
+ other_class_accessor :page_model
30
+ other_class_accessor :partial_model
31
+ end
@@ -0,0 +1,70 @@
1
+ module Cadmus
2
+ module Concerns
3
+ module ControllerWithParent
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ class << self
8
+ attr_accessor :parent_model_name, :parent_model_class, :find_parent_by
9
+ end
10
+ end
11
+
12
+ # This gets kind of meta.
13
+ #
14
+ # If cms_layout_parent_name and cms_layout_parent_class are both defined for this class, this method uses it to find
15
+ # the parent object in which layouts live. For example, if cms_layout_parent_class is Blog and
16
+ # cms_layout_parent_name is "blog", then this is equivalent to calling:
17
+ #
18
+ # @cms_layout_parent = Blog.where(:id => params["blog_id"]).first
19
+ #
20
+ # If you don't want to use :id to find the parent object, then redefine the find_parent_by method to return
21
+ # what you want to use.
22
+ def parent_model
23
+ return @parent_model if @parent_model
24
+
25
+ if parent_model_name && parent_model_class
26
+ parent_id_param = "#{parent_model_name}_id"
27
+ if params[parent_id_param]
28
+ @parent_model = parent_model_class.find_by(find_parent_by => params[parent_id_param])
29
+ end
30
+ end
31
+
32
+ @parent_model
33
+ end
34
+
35
+ # Returns the name of the layout parent object. This will be used for determining the parameter name for
36
+ # finding the parent object. For example, if the parent name is "wiki", the finder will look in
37
+ # params["wiki_id"] to determine the object ID.
38
+ #
39
+ # By default, this will return the value of cms_layout_parent_name set at the controller class level, but can
40
+ # be overridden for cases where the layout parent name must be determined on a per-request basis.
41
+ def parent_model_name
42
+ self.class.parent_model_name
43
+ end
44
+
45
+ # Returns the class of the layout parent object. For example, if the pages used by this controller are
46
+ # children of a Section object, this method should return the Section class.
47
+ #
48
+ # By default, this will return the value of cms_layout_parent_class set at the controller class level, but can
49
+ # be overridden for cases where the layout parent class must be determined on a per-request basis.
50
+ def parent_model_class
51
+ self.class.parent_model_class
52
+ end
53
+
54
+ # Returns the field used to find the layout parent object. By default this is :id, but if you need to
55
+ # find the layout parent object using a different parameter (for example, if you use a "slug" field for
56
+ # part of the URL), this can be changed.
57
+ #
58
+ # By default this method takes its value from the "find_parent_by" accessor set at the controller class
59
+ # level, but it can be overridden for cases where the finder field name should be determined on a
60
+ # per-request basis.
61
+ def find_parent_by
62
+ self.class.find_parent_by || :id
63
+ end
64
+
65
+ def liquid_file_system
66
+ Cadmus::PartialFileSystem.new(parent_model)
67
+ end
68
+ end
69
+ end
70
+ end