cadmus 0.6.0 → 0.7.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 (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