adminsite 2.0.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 (115) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +12 -0
  3. data/Gemfile.lock +209 -0
  4. data/MIT-LICENSE +20 -0
  5. data/README.markdown +122 -0
  6. data/Rakefile +14 -0
  7. data/USAGE +18 -0
  8. data/VERSION +1 -0
  9. data/app/admin_configs/adminsite/adminsite_admin_user_admin_config.rb +43 -0
  10. data/app/admin_configs/adminsite/adminsite_file_asset_admin_config.rb +32 -0
  11. data/app/admin_configs/adminsite/adminsite_page_admin_config.rb +46 -0
  12. data/app/admin_configs/adminsite/adminsite_page_layout_admin_config.rb +31 -0
  13. data/app/assets/images/adminsite/admin/accept.png +0 -0
  14. data/app/assets/images/adminsite/admin/add.png +0 -0
  15. data/app/assets/images/adminsite/admin/arrow_left.png +0 -0
  16. data/app/assets/images/adminsite/admin/arrow_refresh.png +0 -0
  17. data/app/assets/images/adminsite/admin/arrow_up.png +0 -0
  18. data/app/assets/images/adminsite/admin/cross.png +0 -0
  19. data/app/assets/images/adminsite/admin/logo.gif +0 -0
  20. data/app/assets/images/adminsite/admin/logo.png +0 -0
  21. data/app/assets/images/adminsite/admin/magnifier.png +0 -0
  22. data/app/assets/images/adminsite/admin/newspaper_add.png +0 -0
  23. data/app/assets/images/adminsite/admin/newspaper_delete.png +0 -0
  24. data/app/assets/images/adminsite/admin/openid-icon-small.gif +0 -0
  25. data/app/assets/images/adminsite/admin/page_white_magnify.png +0 -0
  26. data/app/assets/images/adminsite/admin/pencil.png +0 -0
  27. data/app/assets/images/adminsite/admin/rails.png +0 -0
  28. data/app/assets/images/adminsite/admin/reorder.gif +0 -0
  29. data/app/assets/images/adminsite/admin/spinner.gif +0 -0
  30. data/app/assets/javascripts/adminsite/admin.js +13 -0
  31. data/app/assets/javascripts/adminsite/admin/code_editor.js.coffee +40 -0
  32. data/app/assets/javascripts/adminsite/admin/hide_and_show.js +26 -0
  33. data/app/assets/stylesheets/adminsite/admin.scss +16 -0
  34. data/app/assets/stylesheets/adminsite/admin/base.scss +521 -0
  35. data/app/assets/stylesheets/adminsite/admin/code_editor.scss +29 -0
  36. data/app/assets/stylesheets/adminsite/admin/pagination.scss +28 -0
  37. data/app/controllers/adminsite/admin/adminsite_admin_users_controller.rb +21 -0
  38. data/app/controllers/adminsite/admin/adminsite_file_assets_controller.rb +57 -0
  39. data/app/controllers/adminsite/admin/adminsite_page_layouts_controller.rb +41 -0
  40. data/app/controllers/adminsite/admin/adminsite_pages_controller.rb +40 -0
  41. data/app/controllers/adminsite/admin/base_controller.rb +16 -0
  42. data/app/controllers/adminsite/admin/crud_controller.rb +27 -0
  43. data/app/controllers/adminsite/admin/iframe_controller.rb +28 -0
  44. data/app/controllers/adminsite/admin/resources_controller.rb +148 -0
  45. data/app/controllers/adminsite/admin_application_controller.rb +9 -0
  46. data/app/controllers/adminsite/admin_user_sessions_controller.rb +5 -0
  47. data/app/controllers/adminsite/contents_controller.rb +88 -0
  48. data/app/helpers/admin/adminsite_application_helper.rb +174 -0
  49. data/app/helpers/admin_application_helper.rb +3 -0
  50. data/app/models/adminsite/admin_config/base.rb +100 -0
  51. data/app/models/adminsite/admin_user.rb +10 -0
  52. data/app/models/adminsite/file_asset.rb +22 -0
  53. data/app/models/adminsite/page.rb +59 -0
  54. data/app/models/adminsite/page_layout.rb +9 -0
  55. data/app/views/adminsite/admin/adminsite_file_assets/index.html.haml +39 -0
  56. data/app/views/adminsite/admin/adminsite_page_layouts/edit.html.haml +5 -0
  57. data/app/views/adminsite/admin/adminsite_page_layouts/index.html.haml +9 -0
  58. data/app/views/adminsite/admin/adminsite_page_layouts/new.html.haml +5 -0
  59. data/app/views/adminsite/admin/adminsite_pages/edit.html.haml +5 -0
  60. data/app/views/adminsite/admin/adminsite_pages/index.html.haml +16 -0
  61. data/app/views/adminsite/admin/adminsite_pages/new.html.haml +5 -0
  62. data/app/views/adminsite/admin/crud/index.html.haml +4 -0
  63. data/app/views/adminsite/admin/crud/show.html.haml +15 -0
  64. data/app/views/adminsite/admin/iframe/index.haml +14 -0
  65. data/app/views/adminsite/admin/resources/_form.haml +6 -0
  66. data/app/views/adminsite/admin/resources/_list.haml +18 -0
  67. data/app/views/adminsite/admin/resources/_search_form.html.haml +41 -0
  68. data/app/views/adminsite/admin/resources/edit.haml +13 -0
  69. data/app/views/adminsite/admin/resources/index.haml +13 -0
  70. data/app/views/adminsite/admin/resources/new.haml +14 -0
  71. data/app/views/adminsite/admin/resources/show.haml +15 -0
  72. data/app/views/adminsite/admin/shared/_admin_menu.html.haml +6 -0
  73. data/app/views/adminsite/admin/shared/_content_menu.html.haml +4 -0
  74. data/app/views/adminsite/admin/shared/_page_assets_list.html.haml +6 -0
  75. data/app/views/adminsite/admin/shared/_syntax_help.html.haml +24 -0
  76. data/app/views/adminsite/admin_user_sessions/new.html.haml +14 -0
  77. data/app/views/layouts/adminsite/admin.html.haml +31 -0
  78. data/config/initializers/adminsite_constants.rb +2 -0
  79. data/config/initializers/assets.rb +7 -0
  80. data/config/initializers/devise.rb +265 -0
  81. data/config/initializers/filter_parameter_logging.rb +4 -0
  82. data/config/initializers/paperclip.rb +15 -0
  83. data/config/initializers/time_formats.rb +1 -0
  84. data/config/locales/da.devise.yaml +57 -0
  85. data/config/locales/da.yaml +199 -0
  86. data/config/locales/en.devise.yaml +60 -0
  87. data/config/locales/en.yaml +205 -0
  88. data/config/routes.rb +17 -0
  89. data/db/migrate/20101007000000_create_admin.rb +59 -0
  90. data/db/migrate/20101007000001_create_cms_tables.rb +39 -0
  91. data/lib/adminsite.rb +28 -0
  92. data/lib/adminsite/configuration.rb +15 -0
  93. data/lib/adminsite/engine.rb +30 -0
  94. data/lib/adminsite/liquid/tags/asset.rb +70 -0
  95. data/lib/adminsite/version.rb +3 -0
  96. data/lib/generators/adminsite/add_dashboard/add_dashboard_generator.rb +34 -0
  97. data/lib/generators/adminsite/add_dashboard/templates/controllers/admin_dashboard_controller.rb +13 -0
  98. data/lib/generators/adminsite/add_dashboard/templates/views/index.html.haml +6 -0
  99. data/lib/generators/adminsite/add_iframe/add_iframe_generator.rb +42 -0
  100. data/lib/generators/adminsite/add_iframe/templates/controllers/admin_iframe_controller.rb +16 -0
  101. data/lib/generators/adminsite/add_resource/USAGE +0 -0
  102. data/lib/generators/adminsite/add_resource/add_resource_generator.rb +40 -0
  103. data/lib/generators/adminsite/add_resource/templates/admin_configs/resource_admin_config.rb +47 -0
  104. data/lib/generators/adminsite/add_resource/templates/controllers/admin_resource_controller.rb +19 -0
  105. data/lib/generators/adminsite/install/USAGE +13 -0
  106. data/lib/generators/adminsite/install/install_generator.rb +51 -0
  107. data/lib/generators/adminsite/install/templates/assets/adminsite.js +17 -0
  108. data/lib/generators/adminsite/install/templates/assets/adminsite.scss +14 -0
  109. data/lib/generators/adminsite/install/templates/config/locales/adminsite.da.yml +4 -0
  110. data/lib/generators/adminsite/install/templates/config/locales/adminsite.en.yml +6 -0
  111. data/lib/generators/adminsite/install/templates/recipes/application.rb +18 -0
  112. data/lib/generators/adminsite/install/templates/views/_admin_menu.html.haml +8 -0
  113. data/lib/recipes/adminsite.rb +82 -0
  114. data/lib/tasks/adminsite.rake +147 -0
  115. metadata +384 -0
@@ -0,0 +1,9 @@
1
+ # Filters added to this controller apply to all controllers in the application.
2
+ # Likewise, all the methods added will be available for all controllers.
3
+
4
+ class Adminsite::AdminApplicationController < ActionController::Base
5
+ helper :all, "admin/adminsite_application"
6
+ layout 'adminsite/admin'
7
+ before_filter :authenticate_adminsite_admin_user!
8
+
9
+ end
@@ -0,0 +1,5 @@
1
+ class Adminsite::AdminUserSessionsController < Devise::SessionsController
2
+ skip_filter :verify_authenticity_token, only: [:destroy]
3
+
4
+ layout 'adminsite/admin'
5
+ end
@@ -0,0 +1,88 @@
1
+ class Adminsite::ContentsController < ApplicationController
2
+ include ActionController::Caching::Pages
3
+ self.page_cache_directory = Adminsite::Engine.config.action_controller.page_cache_directory
4
+
5
+ before_filter :set_p3p
6
+
7
+ def show
8
+ retrive_page_or_404(params[:page_url], params[:id], params[:format])
9
+ end
10
+
11
+ def render_404(format = params[:format])
12
+ page = find_page_by_url('404', format)
13
+ if page.nil?
14
+ render :file => Rails.root.join('public', '404.html'), :status => 404, layout: nil
15
+ else
16
+ render :text => page.render(liquid_attributes), :status => 404 and return
17
+ end
18
+ end
19
+
20
+ class << self
21
+
22
+ def fallback_format
23
+ 'html'
24
+ end
25
+
26
+ def find_page_by_url(url, format)
27
+ page = nil
28
+ urls = ["#{url}.#{format || fallback_format}" ]
29
+ urls.unshift(url) if format.nil?
30
+ urls.push(url) if format == 'html'
31
+ urls.each do |full_url|
32
+ page ||= Adminsite::Page.find_by_url(full_url)
33
+ end
34
+ page
35
+ end
36
+ end
37
+
38
+ private
39
+
40
+ def find_page_by_url(url, format)
41
+ self.class.find_page_by_url(url, format)
42
+ end
43
+
44
+ def set_p3p
45
+ response.headers['P3P'] = 'CP="CAO PSA OUR"'
46
+ end
47
+
48
+ def content_params
49
+ { :authenticity_token => form_authenticity_token,
50
+ :authenticity_param => request_forgery_protection_token,
51
+ :notice => flash[:notice],
52
+ :error => flash[:error]
53
+ }
54
+ end
55
+
56
+ def liquid_attributes
57
+ return @liquid_attributes if @liquid_attributes.present?
58
+
59
+ @liquid_attributes = {}
60
+ if defined?(liquid_params)
61
+ @liquid_attributes = content_params.merge(liquid_params)
62
+ else
63
+ @liquid_attributes = content_params
64
+ Rails.logger.warn("Please define liquid_params in your application controller")
65
+ end
66
+ Rails.logger.debug("Content params: #{@liquid_attributes.inspect}")
67
+ @liquid_attributes
68
+ end
69
+
70
+ def retrive_page_or_404(url, id, format)
71
+ page = find_page_by_url(url, format)
72
+ unless page.nil?
73
+ return if page.requires_login && !authenticate_content_user
74
+
75
+ render :text => page.render(liquid_attributes)
76
+ if page.cacheable?
77
+ cache_page
78
+ logger.info("Caching page: #{page.url}")
79
+ else
80
+ logger.info("Not caching page: #{page.url}")
81
+ end
82
+ return
83
+ else
84
+ render_404(format)
85
+ end
86
+ end
87
+
88
+ end
@@ -0,0 +1,174 @@
1
+ module Admin::AdminsiteApplicationHelper
2
+
3
+ def column_of_attr(search_attr)
4
+ return if search_attr.blank?
5
+ resource_class.columns.each{|c| return c if c.name == search_attr.to_s.downcase }
6
+ nil
7
+ end
8
+
9
+ def input_type_of_column(column)
10
+ case
11
+ when column.sql_type.match(/\Acharacter varying/)
12
+ return :string
13
+ when column.sql_type.match(/\Atimestamp/)
14
+ return :date
15
+ when column.sql_type.match(/\integer/)
16
+ return :number
17
+ else
18
+ column.sql_type.try(:to_sym)
19
+ end
20
+ end
21
+
22
+ def ransack_predicate_input_type(input_type)
23
+ case input_type
24
+ when :boolean
25
+ return [:eq]
26
+ when :text
27
+ return [:eq, :cont]
28
+ when :string
29
+ return [:eq, :cont]
30
+ when :date
31
+ return [:lteq, :gteq]
32
+ when :number
33
+ return [:eq, :lteq, :gteq]
34
+ else
35
+ [:eq]
36
+ end
37
+ end
38
+
39
+ def format_response_value(value)
40
+ value = value.url if defined?(PictureUploader) && value.is_a?(PictureUploader)
41
+ response = '<td>'
42
+ if is_url?(value)
43
+ response += link_to(value,value, target: :blank)
44
+ response += "<br/>#{image_tag(value)}" if is_image?(value)
45
+ else
46
+ response += h value
47
+ end
48
+ response + '</td>'
49
+ end
50
+
51
+ def is_url?(value)
52
+ value.is_a?(String) && value.match(/\A[\/]|\Ahttp[s]*:/)
53
+ end
54
+
55
+ def image_extensions
56
+ %w(.png .gif .jpg .tif)
57
+ end
58
+
59
+ def is_image?(path)
60
+ image_extensions.include?( File.extname(path).split('?').first.try(:downcase) )
61
+ end
62
+
63
+ def error_messages_for(obj)
64
+ return if obj.errors.blank?
65
+ msgs = obj.errors.full_messages.collect{|msg| "<li>#{ h msg }</li>" }
66
+ raw ['<ul>', msgs, '</ul>'].flatten.join
67
+ end
68
+
69
+ def recognize_path(path)
70
+ return {} if path.try(:strip).blank?
71
+ begin
72
+ return Adminsite::Engine.routes.recognize_path(path) # '/admin/profiles'
73
+ return Rails.application.routes.recognize_path(path)
74
+ rescue Exception => e
75
+ end
76
+ end
77
+
78
+ def current_admin_menu
79
+ @current_admin_menu ||= params[:admin_menu]
80
+ end
81
+
82
+ def menu_item(label, url, child_controller_names = [], klasses = nil, method = nil, admin_menu = label)
83
+ link = link_to(label, "#{url}?admin_menu=#{admin_menu}", method: method, )
84
+ result = raw "<li class='#{html_classes(url, nil, klasses, admin_menu, label )}'>#{link}</li>"
85
+
86
+ if current_url?(url, label) || ( child_controller_active?(child_controller_names) && current_admin_menu == admin_menu)
87
+ child_controller_names.each do |child_controller_name|
88
+ child_menu = content_menu_item(child_controller_name, admin_menu, nil, nil )
89
+ content_for(:content_menu, child_menu)
90
+ end
91
+ end
92
+ result
93
+ end
94
+
95
+ def content_menu_label(url, controller_name)
96
+ menu_controller = recognize_path(url)[:controller]
97
+ return controller_name.titlecase if menu_controller.blank?
98
+ eval("#{menu_controller}_controller".classify).content_menu_label
99
+ end
100
+
101
+ def content_menu_item(controller_name, admin_menu, klasses, method )
102
+ if controller_name != controller_name.pluralize
103
+ url = eval("admin_#{controller_name}_index_path")
104
+ else
105
+ url = eval("admin_#{controller_name}_path")
106
+ end
107
+ link = link_to(content_menu_label(url, controller_name), "#{url}?admin_menu=#{admin_menu}", method: method, )
108
+ raw "<li class='#{html_classes(url, controller_name, klasses, admin_menu )}'>#{link}</li>"
109
+ end
110
+
111
+ def current_url?(url, label = '')
112
+ if label.present?
113
+ return request.fullpath == "#{url}?admin_menu=#{label}"
114
+ else
115
+ return request.fullpath == url
116
+ end
117
+ end
118
+
119
+ def child_controller_active?(child_controller_names)
120
+ child_controller_names.include?(controller.controller_name)
121
+ end
122
+
123
+ def html_classes(url, controller_name, klasses = nil, admin_menu = '', label = '')
124
+ result = []
125
+ result |= [klasses].flatten if klasses.present?
126
+ result |= ['current'] if current_url?(url, admin_menu)
127
+ result |= ['active'] if current_admin_menu == label || controller_name == controller.controller_name
128
+ result.join(' ')
129
+ end
130
+
131
+ def label_resource
132
+ @resource.send(resource_admin_config.label_attribute)
133
+ end
134
+
135
+ def label_resource_class
136
+ resource_class.name.underscore.gsub('_', ' ')
137
+ end
138
+
139
+ def label_resource_class_plural
140
+ label_resource_class.pluralize
141
+ end
142
+
143
+ def link_to_back(text, path = admin_resource_path)
144
+ link_to text, path, :class => 'back'
145
+ end
146
+
147
+ def link_to_new(text, path = admin_resource_path(nil, :new) )
148
+ link_to text, path, :class => 'add'
149
+ end
150
+
151
+ def link_to_show(resource)
152
+ link_to image_tag('adminsite/admin/magnifier.png', :size => '16x16'), admin_resource_path(resource.id), target: :blank
153
+ end
154
+
155
+ def link_to_edit(resource)
156
+ link_to image_tag('adminsite/admin/pencil.png', :size => '16x16'), admin_resource_path(resource.id, :edit)
157
+ end
158
+
159
+ def link_to_destroy(resource)
160
+ link_to image_tag('adminsite/admin/cross.png', :size => '16x16'), admin_resource_path(resource.id), :confirm => 'Are you sure?', :method => :delete
161
+ end
162
+
163
+ def display_resource_value(resource, attr)
164
+ value = nil
165
+ attr.to_s.split('.').each{|a| value = (value || resource).send(a) }
166
+ value = display_referenced_resource(value) if value.is_a?(ActiveRecord::Base)
167
+ format_response_value(value).html_safe
168
+ end
169
+
170
+ def display_referenced_resource(resource)
171
+ link_to resource.title, send("edit_admin_#{resource.class.name.underscore.gsub('/','_')}_path", resource.id, admin_menu: params[:admin_menu])
172
+ end
173
+
174
+ end
@@ -0,0 +1,3 @@
1
+ # Methods added to this helper will be available to all templates in the application.
2
+ module AdminApplicationHelper
3
+ end
@@ -0,0 +1,100 @@
1
+ module Adminsite
2
+ module AdminConfig
3
+ class Base #
4
+
5
+ @@admin_configs = {}
6
+
7
+ class << self
8
+
9
+ def admin_default_config_class(class_name)
10
+ config_class = 'Adminsite::AdminConfig::Base'
11
+ return config_class if class_name.blank?
12
+
13
+ config_class_name = class_name.to_s.gsub('::','')
14
+ begin
15
+ # Test if "Adminsite::AdminConfig::#{config_class_name.gsub('::','')}" is defined
16
+ config_class = "Adminsite::#{config_class_name}AdminConfig"
17
+ eval(config_class)
18
+ rescue NameError, LoadError => e
19
+ puts("AdminConfig for #{config_class_name} not found. Use fallback: #{config_class}")
20
+ Rails.logger.warn("AdminConfig for #{config_class_name} not found. Use fallback: #{config_class}")
21
+ end
22
+ config_class
23
+ end
24
+
25
+ def admin_config_of_class(class_name, admin_config_class = nil)
26
+ admin_config_class ||= @@admin_configs[class_name.to_s]
27
+ if admin_config_class.blank?
28
+ admin_config_class = admin_default_config_class(class_name.to_s)
29
+ register_admin_configs(class_name.to_s, admin_config_class)
30
+ end
31
+ eval(admin_config_class).new(class_name)
32
+ end
33
+
34
+ def register_admin_configs(class_name, admin_config, override = true)
35
+ if override
36
+ @@admin_configs[class_name] = admin_config
37
+ else
38
+ @@admin_configs[class_name] ||= admin_config
39
+ end
40
+ end
41
+
42
+ def all_registered_admin_configs
43
+ @@admin_configs
44
+ end
45
+ end
46
+
47
+ attr_reader :resource_class
48
+
49
+ def ignore_columns
50
+ ['created_at', 'updated_at', 'id']
51
+ end
52
+
53
+ def column_names
54
+ @column_names ||= resource_class.column_names
55
+ end
56
+
57
+ def attributes_index
58
+ column_names
59
+ end
60
+
61
+ def attributes_edit
62
+ @attributes_edit ||= (column_names - ignore_columns)
63
+ end
64
+
65
+ def attributes_show
66
+ attributes_edit
67
+ end
68
+
69
+ def attributes_search
70
+ attributes_index
71
+ end
72
+
73
+ def default_member_actions
74
+ [ :show,
75
+ :edit,
76
+ :destroy]
77
+ end
78
+
79
+ def actions_index
80
+ [ :new ]
81
+ end
82
+
83
+ def label_attribute
84
+ :title
85
+ end
86
+
87
+ def scopes
88
+ [:all]
89
+ end
90
+
91
+ protected
92
+
93
+ def initialize(resource_class)
94
+ require Adminsite::Engine.root.join("app/models/#{resource_class.name.underscore}") unless defined?(resource_class)
95
+ @resource_class = resource_class
96
+ end
97
+
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,10 @@
1
+ module Adminsite
2
+ class AdminUser < ActiveRecord::Base
3
+ # Include default devise modules. Others available are:
4
+ # :token_authenticatable, :confirmable, :lockable and :timeoutable
5
+ devise :database_authenticatable, :registerable,
6
+ :recoverable, :rememberable, :trackable, :validatable
7
+
8
+ end
9
+
10
+ end
@@ -0,0 +1,22 @@
1
+ module Adminsite
2
+ class FileAsset < ActiveRecord::Base
3
+
4
+ has_attached_file :attachment
5
+
6
+ validates_with AttachmentPresenceValidator, :attributes => :attachment
7
+ validates_with AttachmentSizeValidator, :attributes => :attachment, :less_than => 2.megabytes
8
+ validates_attachment :attachment, content_type: { content_type: /\A.*\Z/ }
9
+ # do_not_validate_attachment_file_type :image
10
+
11
+ class << self
12
+ def attachment_url_for(name)
13
+ asset = find_by_attachment_file_name(name)
14
+ if asset.nil?
15
+ "http://missing.jpg?#{name}"
16
+ else
17
+ asset.attachment.url(:original, false)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,59 @@
1
+ class Adminsite::Page < ActiveRecord::Base
2
+ belongs_to :page_layout
3
+ validates_presence_of :title
4
+ validates_presence_of :page_layout
5
+ validates_presence_of :url
6
+
7
+ class << self
8
+
9
+ def cleanup_all_cached
10
+ Adminsite::Page.all.each do |p|
11
+ p.cleanup_cached
12
+ end
13
+ logger.info("Page cache has been wiped out: deleted all cached pages.")
14
+ end
15
+
16
+ def cacheable
17
+ where(cacheable: true)
18
+ end
19
+
20
+ def requires_login
21
+ where(requires_login: true)
22
+ end
23
+
24
+ end
25
+
26
+ def cache_dir
27
+ @cache_dir ||= Adminsite::ContentsController.page_cache_directory # Adminsite::Engine.config.action_controller.page_cache_directory
28
+ end
29
+
30
+ def cleanup_cached
31
+ return if self.url.blank?
32
+ logger.info("Removing cached page for: #{self.url}")
33
+ cache_file_path = "#{cache_dir}/#{self.url}"
34
+ if !remove_cache_file(cache_file_path)
35
+ remove_cache_file("#{cache_file_path}.html")
36
+ end
37
+ end
38
+
39
+ def remove_cache_file(file_path)
40
+ if File.exist?(file_path)
41
+ logger.info("Removing cached page at: #{file_path}")
42
+ FileUtils.rm(file_path)
43
+ true
44
+ end
45
+ end
46
+
47
+ def render(args)
48
+ page_layout.render(layout_args(args))
49
+ end
50
+
51
+ def layout_args(args)
52
+ args.stringify_keys.merge(:content_for_template => content_for_template(args))
53
+ end
54
+
55
+ def content_for_template(liquid_params)
56
+ liquid_template = Liquid::Template.parse(body)
57
+ liquid_template.render(liquid_params.stringify_keys)
58
+ end
59
+ end