Skip to content

Commit

Permalink
Added raisable errors option
Browse files Browse the repository at this point in the history
  • Loading branch information
pyromaniac committed Jun 7, 2012
1 parent f462278 commit 1d3f7b3
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 16 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Expand Up @@ -2,6 +2,9 @@

### New features

* `config.puffer_pages.raise_errors = true` in any environment config file makes
liquid templates errors raisable.

* `render` tag. Acts same as rails <%= render %>

* `url` and `path` tags
Expand Down
20 changes: 16 additions & 4 deletions lib/puffer_pages/backends/models/page.rb
Expand Up @@ -31,11 +31,23 @@ def self.find_page location
page
end

def self.find_layout_page location
def self.find_view_page location, options = {}
location = normalize_path(location)
page = location.blank? ? roots.first :
where(['? like location', location]).where(['status not in (?)', 'draft']).order('lft desc').first
raise PufferPages::LayoutMissed.new("PufferPages can`t render page for `#{location}` because layout page missed or draft") unless page

page = if location.blank?
roots.first
else
(options[:formats].presence || [:html]).inject(nil) do |page, format|
unless page
loc = format == :html ? location : [location, format].join('.')
page = where(['? like location', loc]).where(['status not in (?)', 'draft']).order('lft desc').first
end
end
end

raise PufferPages::LayoutMissed.new(
"PufferPages can`t render page for `#{location}` because layout page missed or draft"
) unless page
page
end

Expand Down
5 changes: 3 additions & 2 deletions lib/puffer_pages/backends/models/renderable.rb
Expand Up @@ -17,13 +17,14 @@ def normalize_render_options options

def render_liquid template, page, options = {}
template = ::Liquid::Template.parse(template)
render_method = Rails.application.config.puffer_pages.raise_errors ? 'render!' : 'render'

if options.is_a?(::Liquid::Context)
template.render(options)
template.send(render_method, options)
else
options = normalize_render_options(options)
tracker = PufferPages::Liquid::Tracker.new
tracker.cleanup template.render(options[:drops], :registers => {
tracker.cleanup template.send(render_method, options[:drops], :registers => {
:file_system => PufferPages::Liquid::FileSystem.new,
:tracker => tracker,
:page => page
Expand Down
3 changes: 3 additions & 0 deletions lib/puffer_pages/engine.rb
Expand Up @@ -2,6 +2,9 @@ module PufferPages
class Engine < Rails::Engine
config.autoload_paths << File.join(root, 'lib')

config.puffer_pages = ActiveSupport::OrderedOptions.new
config.puffer_pages.raise_errors = false

initializer 'puffer_pages.add_puffer_pages_route', :after => :add_builtin_route do |app|
app.routes_reloader.paths << File.join(root, 'config/puffer_routes.rb')
end
Expand Down
5 changes: 4 additions & 1 deletion lib/puffer_pages/extensions/pagenator.rb
Expand Up @@ -56,7 +56,10 @@ def _puffer_pages_template suggest, scope = nil
scope
end

::Page.controller_scope(scope).find_layout_page(suggest.presence || request.path_info)
::Page.controller_scope(scope).find_view_page(
suggest.presence || request.path_info,
:formats => lookup_context.formats
)
end

end
Expand Down
18 changes: 9 additions & 9 deletions spec/models/page_spec.rb
Expand Up @@ -200,7 +200,7 @@ def single_section_page_path

end

describe 'find_layout_page' do
describe 'find_view_page' do

before :each do
@root = Fabricate :page, :layout_name => 'foo_layout'
Expand All @@ -210,24 +210,24 @@ def single_section_page_path
end

it 'root page' do
Page.find_layout_page('/').should == @root
Page.find_view_page('/').should == @root
end

it 'not root page' do
Page.find_layout_page('/foo').should == @foo
Page.find_layout_page('/foo/bar').should == @bar
Page.find_layout_page('/foo/baz').should == @bar
Page.find_layout_page('/foo/bar/baz').should == @baz
Page.find_layout_page('/foo/moo/baz').should == @baz
Page.find_view_page('/foo').should == @foo
Page.find_view_page('/foo/bar').should == @bar
Page.find_view_page('/foo/baz').should == @bar
Page.find_view_page('/foo/bar/baz').should == @baz
Page.find_view_page('/foo/moo/baz').should == @baz
end

it 'not existent page' do
expect {Page.find_layout_page('/bar')}.to raise_error(PufferPages::LayoutMissed)
expect {Page.find_view_page('/bar')}.to raise_error(PufferPages::LayoutMissed)
end

it 'draft page' do
@bar.update_attributes(:status => 'draft')
expect {Page.find_layout_page('/foo/bar')}.to raise_error(PufferPages::LayoutMissed)
expect {Page.find_view_page('/foo/bar')}.to raise_error(PufferPages::LayoutMissed)
end

end
Expand Down

0 comments on commit 1d3f7b3

Please sign in to comment.