sitepress-rails 4.0.2 → 4.0.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d982983be98080c0cfe1f61ab6664347e9ae387335222f751c04138b5cc3ba25
4
- data.tar.gz: 63bd4f4ba8d058e07c0bceb90919180f41a5248c7ec9d318a1737a38b93f2b24
3
+ metadata.gz: e52a5129966fa3d7c603ae1ba2eecc190a5253341f727c1f50f63b091ca0f719
4
+ data.tar.gz: a2d1edec8406017193c328df2f79ad3c1e6a71b929071a0f7ba90fa7c3ba44f3
5
5
  SHA512:
6
- metadata.gz: a19381871e14383c5b65d87a3cec2ea99564b23fb148b1c4c0a8c5b11552f996804dab72b5203a88581c06a350a3d187a9cc4e696e280f87d1049034bae52796
7
- data.tar.gz: 5fce88a50329238576a40cc21c796f3c873947be86d3e1ba536265075a0b9adb099fa0723dbff0efa5aa28c462a183e2e54f9f12b582ab342ad89a6400338be0
6
+ metadata.gz: 03f239c1317da796ba12e152f41c242859ec254cca06591a848997de3ced52ff48176ee628eb4f89d51400e39d6108a7a575cf26d58a4f6f6adc10a1c5a44b7c
7
+ data.tar.gz: 6cfad8a7a9938ed295bcf8f2982ae6b6d61e792132e5bc44228ea756ed3c5682384d7a180b89ce4a974565d3e27c16b2bed097a49dde31ff008ae2763b6852e8
@@ -45,13 +45,21 @@ module Sitepress
45
45
  # Configure Sitepress with Rails settings.
46
46
  initializer :configure_sitepress do |app|
47
47
  sitepress_configuration.parent_engine = app
48
- # Reloads entire site between requests for development environments
49
- sitepress_configuration.cache_resources = app.config.cache_classes
50
- end
48
+ # Reloads entire site between requests for development environments.
49
+ sitepress_configuration.cache_resources = if app.config.respond_to? :enable_reloading?
50
+ # Rails 7.1 changed the name of this setting to enable_reloading, so check if that exist and use it.
51
+ app.config.enable_reloading?
52
+ else
53
+ # Rails 7.0.x and lower all use this method to check if reloading is enabled.
54
+ app.config.cache_classes
55
+ end
51
56
 
52
- config.after_initialize do
53
- # Set the templates extensions (e.g. erb, haml) so that Sitepress can parse paths.
54
- Sitepress::Path.handler_extensions = ActionView::Template::Handlers.extensions
57
+ # Setup Sitepress to handle Rails extensions.
58
+ ActiveSupport.on_load(:action_view) do
59
+ ActiveSupport.on_load(:after_initialize) do
60
+ Sitepress::Path.handler_extensions = ActionView::Template::Handlers.extensions
61
+ end
62
+ end
55
63
  end
56
64
 
57
65
  private
@@ -8,11 +8,11 @@ module ActionDispatch::Routing
8
8
  ROUTE_GLOB_KEY = "/*resource_path".freeze
9
9
 
10
10
  # Hook up all the Sitepress pages
11
- def sitepress_pages(controller: DEFAULT_CONTROLLER, action: DEFAULT_ACTION, root: false, constraints: Sitepress::RouteConstraint.new)
11
+ def sitepress_pages(controller: DEFAULT_CONTROLLER, action: DEFAULT_ACTION, root: false, constraints: Sitepress::RouteConstraint.new, as: :page)
12
12
  get ROUTE_GLOB_KEY,
13
13
  controller: controller,
14
14
  action: action,
15
- as: :page,
15
+ as: as,
16
16
  format: false,
17
17
  constraints: constraints
18
18
 
@@ -18,14 +18,13 @@ module Sitepress
18
18
  rescue_from Sitepress::ResourceNotFound, with: :resource_not_found
19
19
  helper Sitepress::Engine.helpers
20
20
  helper_method :current_page, :site, :page_rendition
21
- before_action :append_relative_partial_path, only: :show
22
- around_action :ensure_site_reload, only: :show
21
+ around_action :ensure_site_reload
23
22
  end
24
23
 
25
24
  # Public method that is primarily called by Rails to display the page. This should
26
25
  # be hooked up to the Rails routes file.
27
26
  def show
28
- render_resource current_resource
27
+ render_resource requested_resource
29
28
  end
30
29
 
31
30
  protected
@@ -35,6 +34,9 @@ module Sitepress
35
34
  # file and serve it up.
36
35
  def render_resource(resource)
37
36
  if resource.renderable?
37
+ # Set this as our "top-level" resource. We might change it again in the pre-render
38
+ # method to deal with rendering resources inside of resources.
39
+ @current_resource = resource
38
40
  render_resource_with_handler resource
39
41
  else
40
42
  send_binary_resource resource
@@ -54,7 +56,10 @@ module Sitepress
54
56
  # contained in a way that the end user can override, we coupled the resource, source
55
57
  # and output within a `Rendition` object so that it may be processed via hooks.
56
58
  def render_resource_with_handler(resource)
57
- rendition = page_rendition(resource, layout: controller_layout)
59
+ # Add the resource path to the view path so that partials can be rendered
60
+ append_relative_partial_path resource
61
+
62
+ rendition = page_rendition(resource, layout: controller_layout(resource))
58
63
 
59
64
  # Fire a callback in the controller in case anybody needs it.
60
65
  process_rendition rendition
@@ -65,9 +70,16 @@ module Sitepress
65
70
 
66
71
  # This is where the actual rendering happens for the page source in Rails.
67
72
  def pre_render(rendition)
68
- rendition.output = render_to_string inline: rendition.source,
69
- type: rendition.handler,
70
- layout: rendition.layout
73
+ original_resource = @current_resource
74
+ begin
75
+ # This sets the `current_page` and `current_resource` variable equal to the given resource.
76
+ @current_resource = rendition.resource
77
+ rendition.output = render_to_string inline: rendition.source,
78
+ type: rendition.handler,
79
+ layout: rendition.layout
80
+ ensure
81
+ @current_resource = original_resource
82
+ end
71
83
  end
72
84
 
73
85
  # This is to be used by end users if they need to do any post-processing on the rendering page.
@@ -84,9 +96,8 @@ module Sitepress
84
96
  end
85
97
 
86
98
  # A reference to the current resource that's being requested.
87
- def current_resource
88
- @current_resource ||= find_resource
89
- end
99
+ attr_reader :current_resource
100
+
90
101
  # In templates resources are more naturally thought of as pages, so we call it `current_page` from
91
102
  # there and from the controller.
92
103
  alias :current_page :current_resource
@@ -108,8 +119,8 @@ module Sitepress
108
119
  private
109
120
  # This makes it possible to render partials from the current resource with relative
110
121
  # paths. Without this the paths would have to be absolute.
111
- def append_relative_partial_path
112
- append_view_path current_resource.asset.path.dirname
122
+ def append_relative_partial_path(resource)
123
+ append_view_path resource.asset.path.dirname
113
124
  end
114
125
 
115
126
  def send_binary_resource(resource)
@@ -132,7 +143,7 @@ module Sitepress
132
143
 
133
144
  # Default finder of the resource for the current controller context. If the :resource_path
134
145
  # isn't present, then its probably the root path so grab that.
135
- def find_resource
146
+ def requested_resource
136
147
  get resource_request_path
137
148
  end
138
149
 
@@ -144,13 +155,13 @@ module Sitepress
144
155
  # Returns the current layout for the inline Sitepress renderer. This is
145
156
  # exposed via some really convoluted private methods inside of the various
146
157
  # versions of Rails, so I try my best to hack out the path to the layout below.
147
- def controller_layout
158
+ def controller_layout(resource)
148
159
  private_layout_method = self.method(:_layout)
149
160
  layout =
150
161
  if Rails.version >= "6"
151
- private_layout_method.call lookup_context, current_resource_rails_formats
162
+ private_layout_method.call lookup_context, resource_rails_formats(resource)
152
163
  elsif Rails.version >= "5"
153
- private_layout_method.call current_resource_rails_formats
164
+ private_layout_method.call resource_rails_formats(resource)
154
165
  else
155
166
  private_layout_method.call
156
167
  end
@@ -170,8 +181,8 @@ module Sitepress
170
181
  # method returns the intersection of the formats Rails supports from Mime::Types
171
182
  # and the current page's node formats. If nothing intersects, HTML is returned
172
183
  # as a default.
173
- def current_resource_rails_formats
174
- node_formats = current_resource.node.formats
184
+ def resource_rails_formats(resource)
185
+ node_formats = resource.node.formats
175
186
  supported_formats = node_formats & Mime::EXTENSION_LOOKUP.keys
176
187
 
177
188
  if supported_formats.empty?