Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Deprecate _view suffix of element views #1648

Merged
merged 1 commit into from
Oct 21, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions app/helpers/alchemy/elements_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ def render_elements(options = {})
#
# == View partial naming
#
# The partial has to be named after the name of the element as defined in the <tt>elements.yml</tt> file and has to be suffixed with <tt>_view</tt>.
# The partial has to be named after the name of the element as defined in the <tt>elements.yml</tt> file.
#
# === Example
#
Expand All @@ -137,7 +137,7 @@ def render_elements(options = {})
#
# Then your element view partial has to be named like:
#
# app/views/alchemy/elements/_headline_view.html.{erb|haml|slim}
# app/views/alchemy/elements/_headline.html.{erb|haml|slim}
#
# === Element partials generator
#
Expand All @@ -147,7 +147,7 @@ def render_elements(options = {})
#
# == Usage
#
# <%= render_element(Alchemy::Element.published.named(:headline).first) %>
# <%= render_element(Alchemy::Element.available.named(:headline).first) %>
#
# @param [Alchemy::Element] element
# The element you want to render the view for
Expand Down
12 changes: 11 additions & 1 deletion app/models/alchemy/element.rb
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,17 @@ def compact?
# Element partials live in +app/views/alchemy/elements+
#
def to_partial_path
"alchemy/elements/#{name}_view"
if Alchemy::LOOKUP_CONTEXT.exists?("#{name}_view", ["elements"], true)
Alchemy::Deprecation.warn <<~WARN
Having the `_view` suffix on your element view partials is deprecated
and will not be supported in Alchemy 5.0 anymore. You can safely remove the suffix now.

Please also rename the local `element` or `#{name}_view` variable into `#{name}`.
WARN
"alchemy/elements/#{name}_view"
else
"alchemy/elements/#{name}"
end
end

# Returns the key that's taken for cache path.
Expand Down
13 changes: 8 additions & 5 deletions lib/alchemy/cache_digests/template_tracker.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,15 @@ def dependencies
case @name.to_s
when /^alchemy\/pages\/show/
PageLayout.all.map { |p| "alchemy/page_layouts/_#{p['name']}" }
when /^alchemy\/page_layouts\/_(.+)/
when /^alchemy\/page_layouts\/_(\w+)/
page_layout = PageLayout.get($1)
page_layout.fetch('elements', []).map { |name| "alchemy/elements/_#{name}_view" }
when /alchemy\/elements\/_(.+)_view/
essences = essence_types($1)
essences.map { |name| "alchemy/essences/_#{name.underscore}_view" }.uniq
layout_elements = page_layout.fetch('elements', [])
layout_elements.map { |name| "alchemy/elements/_#{name}_view" } +
layout_elements.map { |name| "alchemy/elements/_#{name}" }
when /^alchemy\/elements\/_(\w+)_view/, /^alchemy\/elements\/_(\w+)/
essence_types($1).map { |name|
"alchemy/essences/_#{name.underscore}_view"
}.uniq
else
ActionView::DependencyTracker::ERBTracker.call(@name, @template)
end
Expand Down
4 changes: 4 additions & 0 deletions lib/alchemy/engine.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ class Engine < Rails::Engine
engine_name 'alchemy'
config.mount_at = '/'

initializer 'alchemy.lookup_context' do
Alchemy::LOOKUP_CONTEXT = ActionView::LookupContext.new(Rails.root.join('app', 'views', 'alchemy'))
end

initializer 'alchemy.dependency_tracker' do
[:erb, :slim, :haml].each do |handler|
ActionView::DependencyTracker.register_tracker(handler, CacheDigests::TemplateTracker)
Expand Down
6 changes: 3 additions & 3 deletions lib/rails/generators/alchemy/elements/templates/view.html.erb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<%%- cache(<%= @element_name %>_view) do -%>
<%%= element_view_for(<%= @element_name %>_view) do |el| -%>
<%%- cache(<%= @element_name %>) do -%>
<%%= element_view_for(<%= @element_name %>) do |el| -%>
<%- @contents.each do |content| -%>
<%- if @contents.length > 1 -%>
<div class="<%= content["name"] %>">
Expand All @@ -10,7 +10,7 @@
<%- end -%>
<%- end -%>
<%- if @element['nestable_elements'].present? -%>
<%%= render <%= @element_name %>_view.nested_elements %>
<%%= render <%= @element_name %>.nested_elements.available %>
<%- end -%>
<%%- end -%>
<%%- end -%>
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
- cache(<%= @element_name -%>_view) do
= element_view_for(<%= @element_name -%>_view) do |el|
- cache(<%= @element_name -%>) do
= element_view_for(<%= @element_name -%>) do |el|
<%- @contents.each do |content| -%>
<%- if @contents.length > 1 -%>
.<%= content["name"] %>
Expand All @@ -9,5 +9,5 @@
<%- end -%>
<%- end -%>
<%- if @element['nestable_elements'].present? -%>
= render <%= @element_name -%>_view.nested_elements
= render <%= @element_name -%>.nested_elements.available
<%- end -%>
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
- cache(<%= @element_name -%>_view) do
= element_view_for(<%= @element_name -%>_view) do |el|
- cache(<%= @element_name -%>) do
= element_view_for(<%= @element_name -%>) do |el|
<%- @contents.each do |content| -%>
<%- if @contents.length > 1 -%>
.<%= content["name"] %>
Expand All @@ -9,5 +9,5 @@
<%- end -%>
<%- end -%>
<%- if @element['nestable_elements'].present? -%>
= render <%= @element_name -%>_view.nested_elements
= render <%= @element_name -%>.nested_elements.available
<%- end -%>
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<%- cache(all_you_can_eat_view) do -%>
<%= element_view_for(all_you_can_eat_view) do |el| -%>
<%- cache(all_you_can_eat) do -%>
<%= element_view_for(all_you_can_eat) do |el| -%>
<div class="essence_text">
<%= el.render :essence_text %>
</div>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<%- cache(article_view) do -%>
<%= element_view_for(article_view) do |el| -%>
<% if article_view.has_ingredient?(:intro) %>
<%- cache(article) do -%>
<%= element_view_for(article) do |el| -%>
<% if article.has_ingredient?(:intro) %>
<div class="intro"><%= el.render :intro %></div>
<% end %>
<h1 class="headline"><%= el.render :headline %></h1>
Expand Down
5 changes: 5 additions & 0 deletions spec/dummy/app/views/alchemy/elements/_bild.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<%- cache(bild) do -%>
<%= element_view_for(bild) do |el| -%>
<%= el.render :image %>
<%- end -%>
<%- end -%>
5 changes: 0 additions & 5 deletions spec/dummy/app/views/alchemy/elements/_bild_view.html.erb

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<%- cache(contactform_view) do -%>
<%= element_view_for(contactform_view) do |el| -%>
<%- cache(contactform) do -%>
<%= element_view_for(contactform) do |el| -%>
<form action="/messages" method="POST">
<div>
<label>
Expand Down
5 changes: 5 additions & 0 deletions spec/dummy/app/views/alchemy/elements/_download.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<%- cache(download) do -%>
<%= element_view_for(download) do |el| -%>
<%= el.render :file %>
<%- end -%>
<%- end -%>
5 changes: 0 additions & 5 deletions spec/dummy/app/views/alchemy/elements/_download_view.html.erb

This file was deleted.

5 changes: 5 additions & 0 deletions spec/dummy/app/views/alchemy/elements/_erb_element.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<%- cache(erb_element) do -%>
<%= element_view_for(erb_element) do |el| -%>
<%= el.render :text %>
<%- end -%>
<%- end -%>

This file was deleted.

7 changes: 7 additions & 0 deletions spec/dummy/app/views/alchemy/elements/_gallery.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<%- cache(gallery) do -%>
<%= element_view_for(gallery) do |el| -%>
<div class="gallery_images">
<%= render gallery.nested_elements %>
</div>
<%- end -%>
<%- end -%>
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<%- cache(gallery_picture) do -%>
<%= element_view_for(gallery_picture) do |el| -%>
<%= el.render :picture, size: '160x120' %>
<%- end -%>
<%- end -%>

This file was deleted.

7 changes: 0 additions & 7 deletions spec/dummy/app/views/alchemy/elements/_gallery_view.html.erb

This file was deleted.

5 changes: 5 additions & 0 deletions spec/dummy/app/views/alchemy/elements/_header.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<%- cache(header) do -%>
<%= element_view_for(header) do |el| -%>
<%= el.render :image %>
<%- end -%>
<%- end -%>
5 changes: 0 additions & 5 deletions spec/dummy/app/views/alchemy/elements/_header_view.html.erb

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<%= element_view_for(headline_view, tag: 'h1') do |el| %>
<%= element_view_for(headline, tag: 'h1') do |el| %>
<%= local_assigns[:counter] -%>. <%= el.render(:headline) %>
<small><%= local_assigns[:some] -%></small>
<% end %>
5 changes: 5 additions & 0 deletions spec/dummy/app/views/alchemy/elements/_left_column.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<%- cache(left_column) do -%>
<%= element_view_for(left_column) do |el| -%>
<%= render left_column.nested_elements %>
<%- end -%>
<%- end -%>

This file was deleted.

11 changes: 11 additions & 0 deletions spec/dummy/app/views/alchemy/elements/_news.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<div class="news" id="<%= element_dom_id(news) %>" <%= element_preview_code(news) -%>>
<div class="date">
<%= render_essence_view_by_name(news, 'date', :date_format => "%d.%m.%Y") %>
</div>
<h2>
<%= render_essence_view_by_name(news, 'news_headline') %>
</h2>
<div class="body">
<%= render_essence_view_by_name(news, 'body') %>
</div>
</div>
11 changes: 0 additions & 11 deletions spec/dummy/app/views/alchemy/elements/_news_view.html.erb

This file was deleted.

6 changes: 6 additions & 0 deletions spec/dummy/app/views/alchemy/elements/_right_column.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<%- cache(right_column) do -%>
<%= element_view_for(right_column) do |el| -%>
<%= el.render :title %>
<%= render right_column.nested_elements %>
<%- end -%>
<%- end -%>

This file was deleted.

4 changes: 4 additions & 0 deletions spec/dummy/app/views/alchemy/elements/_search.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<%- cache(search) do -%>
<%= element_view_for(search) do |el| -%>
<%- end -%>
<%- end -%>
4 changes: 0 additions & 4 deletions spec/dummy/app/views/alchemy/elements/_search_view.html.erb

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<%- cache(slide_view) do -%>
<%= element_view_for(slide_view) do |el| -%>
<%- cache(slide) do -%>
<%= element_view_for(slide) do |el| -%>
<%= el.render :picture %>
<%= el.render :caption %>
<%- end -%>
Expand Down
5 changes: 5 additions & 0 deletions spec/dummy/app/views/alchemy/elements/_slider.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<%- cache(slider) do -%>
<%= element_view_for(slider) do |el| -%>
<%= render slider.nested_elements %>
<%- end -%>
<%- end -%>
5 changes: 0 additions & 5 deletions spec/dummy/app/views/alchemy/elements/_slider_view.html.erb

This file was deleted.

5 changes: 5 additions & 0 deletions spec/dummy/app/views/alchemy/elements/_text.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<%- cache(text) do -%>
<%= element_view_for(text) do |el| -%>
<%= el.render :text %>
<%- end -%>
<%- end -%>
5 changes: 0 additions & 5 deletions spec/dummy/app/views/alchemy/elements/_text_view.html.erb

This file was deleted.

32 changes: 31 additions & 1 deletion spec/libraries/template_tracker_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ module CacheDigests
end
end

context 'with an element given as name' do
context 'with an element view given as name' do
let(:name) { 'alchemy/elements/_text_view' }
let(:elements) { [{'name' => 'text', 'contents' => [{'type' => 'EssenceText'}]}] }

Expand All @@ -48,6 +48,36 @@ module CacheDigests
end
end

context 'with an element editor given as name' do
let(:name) { 'alchemy/elements/_text_editor' }
let(:elements) { [{'name' => 'text', 'contents' => [{'type' => 'EssenceText'}]}] }

it do
is_expected.to be_empty
end
end

context 'with an element given as name' do
let(:name) { 'alchemy/elements/_text' }
let(:elements) { [{'name' => 'text', 'contents' => [{'type' => 'EssenceText'}]}] }

context 'that is having a definition' do
before { allow(Element).to receive(:definitions).and_return(elements) }

it "returns all essence layout view partial names for that element" do
is_expected.to include('alchemy/essences/_essence_text_view')
end
end

context 'that has no definition' do
before { allow(Element).to receive(:definitions).and_return([]) }

it "returns empty array" do
is_expected.to be_empty
end
end
end

context 'with not an alchemy template given as name' do
let(:name) { 'shop/cart' }

Expand Down
20 changes: 18 additions & 2 deletions spec/models/alchemy/element_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -808,8 +808,24 @@ module Alchemy
end

describe "#to_partial_path" do
it "should return a String in the format of 'alchemy/elements/#{name}_view'" do
expect(Element.new(name: 'article').to_partial_path).to eq('alchemy/elements/article_view')
context 'if element partial with _view suffix exists' do
before do
expect(Alchemy::LOOKUP_CONTEXT).to receive(:exists?) { true }
end

it do
expect(Element.new(name: 'article').to_partial_path).to eq('alchemy/elements/article_view')
end
end

context 'if element partial with _view suffix does not exist' do
before do
expect(Alchemy::LOOKUP_CONTEXT).to receive(:exists?) { false }
end

it do
expect(Element.new(name: 'article').to_partial_path).to eq('alchemy/elements/article')
end
end
end

Expand Down