puffer_pages 0.0.6 → 0.0.7
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.
- data/README.md +36 -25
- data/VERSION +1 -1
- data/app/models/page_part.rb +0 -2
- data/app/models/snippet.rb +10 -0
- data/lib/puffer_pages/liquid/tags/render_snippet.rb +33 -0
- data/lib/puffer_pages/liquid/tags/yield.rb +7 -1
- data/lib/puffer_pages.rb +1 -0
- data/puffer_pages.gemspec +4 -1
- data/spec/fabricators/snippets_fabricator.rb +4 -0
- data/spec/models/page_spec.rb +2 -2
- data/spec/models/tags_spec.rb +48 -2
- metadata +6 -3
data/README.md
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
#
|
1
|
+
# Puffer_pages is lightweight rails 3 CMS
|
2
2
|
|
3
3
|
Interface of pages based on [puffer](https://github.com/puffer/puffer)
|
4
4
|
|
5
5
|
## Keyfeatures
|
6
6
|
|
7
|
-
* Full rails integration.
|
7
|
+
* Full rails integration. Puffer_pages is part of rails and you can different features related to pages in rails application directly
|
8
8
|
* Flexibility. Puffer designed to be as flexible as possible, so you can create your own functionality easily.
|
9
9
|
* Layouts. You can use rails layouts for pages and you can use pages as action layouts!
|
10
10
|
|
@@ -16,7 +16,7 @@ Or in Gemfile:
|
|
16
16
|
<pre>gem "puffer_pages"</pre>
|
17
17
|
Next step is:
|
18
18
|
<pre>rails g puffer_pages:install</pre>
|
19
|
-
This will install
|
19
|
+
This will install puffer_pages config file in your initializers, some css/js, controllers and migrations
|
20
20
|
<pre>rake db:migrate</pre>
|
21
21
|
|
22
22
|
To start working with admin interface, you need to have some routes like:
|
@@ -35,22 +35,40 @@ Just put in your routes.rb:
|
|
35
35
|
<pre>puffer_page "pages/(*path)" => 'whatever#show'</pre>
|
36
36
|
Default pages route you can see with rake routes.
|
37
37
|
|
38
|
-
|
39
|
-
|
38
|
+
Puffer_pages is radiant-like cms, so it has layouts, snippets and pages.
|
39
|
+
Puffer_pages use liquid as template language.
|
40
40
|
|
41
41
|
## Pages.
|
42
42
|
Pages - tree-based structure of site.
|
43
43
|
Every page has one or more page parts.
|
44
|
+
Every page part must have main page part, named by default `body`. You can configure main page part name in config/initializers/puffer_pages.rb
|
44
45
|
|
45
46
|
## Layouts.
|
46
47
|
Layout is page canvas, so you can draw page parts on it.
|
47
|
-
|
48
|
+
You can use layouts from database or applcation for pages.
|
48
49
|
|
49
|
-
###
|
50
|
-
For
|
50
|
+
### Application layouts.
|
51
|
+
For application layout page part body will be inserted instead of SUDDENLY! <%= yield %>
|
52
|
+
Rules are the same. If no page part name specified puffer will use page part with default name.
|
53
|
+
See `yield` liquid tag reference
|
54
|
+
|
55
|
+
So, main page part is action view and other are partials. So easy.
|
56
|
+
|
57
|
+
## [Liquid](http://github.com/tobi/liquid/).
|
58
|
+
|
59
|
+
### Variables.
|
60
|
+
This variables accessible from every page:
|
61
|
+
* self - current page reference.
|
62
|
+
<pre>{{ self.name }}</pre>
|
63
|
+
* root - root page reference.
|
64
|
+
<pre>{{ root.name }}</pre>
|
65
|
+
Both `self` and `root` are instances of page drop. View [this](https://github.com/puffer/puffer_pages/blob/master/lib/puffer_pages/liquid/page_drop.rb) to find list of possible page drop methods
|
66
|
+
|
67
|
+
### yield
|
51
68
|
<pre>{% yield [page_part_name] %}</pre>
|
69
|
+
`yield` tag is page part or actionview `content_for` placeholder.
|
52
70
|
|
53
|
-
If no page_part_name specified, puffer layout will use page part with default name ('body'). You can change defaul page part name in
|
71
|
+
If no page_part_name specified, puffer layout will use page part with default name ('body'). You can change defaul page part name in puffer_pages setup initializer.
|
54
72
|
|
55
73
|
Ex.
|
56
74
|
<pre>
|
@@ -60,21 +78,14 @@ Ex.
|
|
60
78
|
{% yield sb %} # renders sidebar too
|
61
79
|
</pre>
|
62
80
|
|
63
|
-
###
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
So, main page part is action view and other are partials. So easy.
|
68
|
-
|
69
|
-
## Liquid.
|
81
|
+
### render_snippet
|
82
|
+
<pre>{% render_snippet snippet_name %}</pre>
|
83
|
+
Renders specified snippet`s content.
|
70
84
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
Also you can do anything you can do with [liquid](http://github.com/tobi/liquid/)
|
85
|
+
Ex.
|
86
|
+
<pre>
|
87
|
+
{% render_snippet 'navigation' %}
|
88
|
+
{% assign nav = 'navigation' %}
|
89
|
+
{% render_snippet nav %}
|
90
|
+
</pre>
|
79
91
|
|
80
|
-
`self` and `root` are both instances of page drop. View [this](https://github.com/puffer/puffer_pages/blob/master/lib/puffer_pages/liquid/page_drop.rb) to find list of possible page drop methods
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.7
|
data/app/models/page_part.rb
CHANGED
@@ -4,8 +4,6 @@ class PagePart < ActiveRecord::Base
|
|
4
4
|
validates_presence_of :name
|
5
5
|
validates_uniqueness_of :name, :scope => :page_id
|
6
6
|
|
7
|
-
attr_accessor_with_default :additional, false
|
8
|
-
|
9
7
|
def render(drops_or_context, wrap = false)
|
10
8
|
template = Liquid::Template.parse(body)
|
11
9
|
result = tracker.cleanup template.render(drops_or_context, :registers => {:tracker => tracker})
|
data/app/models/snippet.rb
CHANGED
@@ -1,4 +1,14 @@
|
|
1
1
|
class Snippet < ActiveRecord::Base
|
2
2
|
validates_presence_of :name
|
3
3
|
validates_uniqueness_of :name
|
4
|
+
|
5
|
+
def render(drops_or_context)
|
6
|
+
template = Liquid::Template.parse(body)
|
7
|
+
tracker.cleanup template.render(drops_or_context, :registers => {:tracker => tracker})
|
8
|
+
end
|
9
|
+
|
10
|
+
def tracker
|
11
|
+
@tracker ||= PufferPages::Liquid::Tracker.new
|
12
|
+
end
|
13
|
+
|
4
14
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module PufferPages
|
2
|
+
module Liquid
|
3
|
+
module Tags
|
4
|
+
|
5
|
+
class RenderSnippet < ::Liquid::Tag
|
6
|
+
Syntax = /(#{::Liquid::QuotedFragment}+)/
|
7
|
+
|
8
|
+
def initialize(tag_name, markup, tokens)
|
9
|
+
if markup =~ Syntax
|
10
|
+
@name = $1
|
11
|
+
else
|
12
|
+
raise SyntaxError.new("Syntax Error in 'render_snippet' - Valid syntax: render_snippet snipper_name")
|
13
|
+
end
|
14
|
+
|
15
|
+
super
|
16
|
+
end
|
17
|
+
|
18
|
+
def render(context)
|
19
|
+
name = context[@name]
|
20
|
+
snippet = Snippet.find_by_name(name)
|
21
|
+
if snippet
|
22
|
+
snippet.render(context)
|
23
|
+
else
|
24
|
+
raise ArgumentError.new("Argument error in 'render_snippet' - Can not find snippet named '#{name}'")
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
Liquid::Template.register_tag('render_snippet', PufferPages::Liquid::Tags::RenderSnippet)
|
@@ -16,7 +16,13 @@ module PufferPages
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def render(context)
|
19
|
-
context
|
19
|
+
name = context[@name]
|
20
|
+
part = context.registers[:page].part(name)
|
21
|
+
if part
|
22
|
+
part.render(context)
|
23
|
+
else
|
24
|
+
raise ArgumentError.new("Argument error in 'yield' - Can not find page part named '#{name}'")
|
25
|
+
end
|
20
26
|
end
|
21
27
|
end
|
22
28
|
|
data/lib/puffer_pages.rb
CHANGED
@@ -19,6 +19,7 @@ require 'puffer_pages/engine'
|
|
19
19
|
require 'puffer_pages/extensions/core'
|
20
20
|
require 'puffer_pages/extensions/mapper'
|
21
21
|
require 'puffer_pages/liquid/tags/yield'
|
22
|
+
require 'puffer_pages/liquid/tags/render_snippet'
|
22
23
|
|
23
24
|
Puffer.setup do |config|
|
24
25
|
config.javascripts += %w(right-dialog right-tabs puffer_pages)
|
data/puffer_pages.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{puffer_pages}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.7"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["pyromaniac"]
|
@@ -63,6 +63,7 @@ Gem::Specification.new do |s|
|
|
63
63
|
"lib/puffer_pages/extensions/core.rb",
|
64
64
|
"lib/puffer_pages/extensions/mapper.rb",
|
65
65
|
"lib/puffer_pages/liquid/page_drop.rb",
|
66
|
+
"lib/puffer_pages/liquid/tags/render_snippet.rb",
|
66
67
|
"lib/puffer_pages/liquid/tags/yield.rb",
|
67
68
|
"lib/puffer_pages/liquid/tracker.rb",
|
68
69
|
"puffer_pages.gemspec",
|
@@ -124,6 +125,7 @@ Gem::Specification.new do |s|
|
|
124
125
|
"spec/fabricators/layouts_fabricator.rb",
|
125
126
|
"spec/fabricators/page_parts_fabricator.rb",
|
126
127
|
"spec/fabricators/pages_fabricator.rb",
|
128
|
+
"spec/fabricators/snippets_fabricator.rb",
|
127
129
|
"spec/integration/navigation_spec.rb",
|
128
130
|
"spec/models/page_spec.rb",
|
129
131
|
"spec/models/tags_spec.rb",
|
@@ -164,6 +166,7 @@ Gem::Specification.new do |s|
|
|
164
166
|
"spec/fabricators/layouts_fabricator.rb",
|
165
167
|
"spec/fabricators/page_parts_fabricator.rb",
|
166
168
|
"spec/fabricators/pages_fabricator.rb",
|
169
|
+
"spec/fabricators/snippets_fabricator.rb",
|
167
170
|
"spec/integration/navigation_spec.rb",
|
168
171
|
"spec/models/page_spec.rb",
|
169
172
|
"spec/models/tags_spec.rb",
|
data/spec/models/page_spec.rb
CHANGED
@@ -122,9 +122,9 @@ describe Page do
|
|
122
122
|
end
|
123
123
|
|
124
124
|
it 'should render layout' do
|
125
|
-
@layout = Fabricate :layout, :name => 'foo_layout', :body => "
|
125
|
+
@layout = Fabricate :layout, :name => 'foo_layout', :body => "{% yield %} {% yield 'sidebar' %}"
|
126
126
|
result = @root.render 'self' => PufferPages::Liquid::PageDrop.new(@root)
|
127
|
-
result.should == "
|
127
|
+
result.should == "#{@root.title} #{@root.name}"
|
128
128
|
end
|
129
129
|
|
130
130
|
end
|
data/spec/models/tags_spec.rb
CHANGED
@@ -2,8 +2,54 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe 'Tags' do
|
4
4
|
|
5
|
-
|
5
|
+
def render_page(page)
|
6
|
+
page.render 'self' => PufferPages::Liquid::PageDrop.new(page)
|
7
|
+
end
|
8
|
+
|
9
|
+
describe 'yield' do
|
10
|
+
|
11
|
+
before :each do
|
12
|
+
@page = Fabricate :page, :layout_name => 'foo_layout'
|
13
|
+
@main = Fabricate :page_part, :name => PufferPages.primary_page_part_name, :body => 'foo'
|
14
|
+
@sidebar = Fabricate :page_part, :name => 'sidebar', :body => 'bar'
|
15
|
+
@page.page_parts = [@main, @sidebar]
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should render yield without params' do
|
19
|
+
@layout = Fabricate :layout, :name => 'foo_layout', :body => "{% yield %}"
|
20
|
+
render_page(@page).should == @main.body
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should render yield with string param' do
|
24
|
+
@layout = Fabricate :layout, :name => 'foo_layout', :body => "{% yield 'sidebar' %}"
|
25
|
+
render_page(@page).should == @sidebar.body
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should render yield with variable param' do
|
29
|
+
@layout = Fabricate :layout, :name => 'foo_layout', :body => "{% assign sb = 'sidebar' %}{% yield sb %}"
|
30
|
+
render_page(@page).should == @sidebar.body
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
describe 'render_snippet' do
|
36
|
+
|
37
|
+
before :each do
|
38
|
+
@page = Fabricate :page, :layout_name => 'foo_layout'
|
39
|
+
@snippet = Fabricate :snippet, :name => 'snip', :body => 'snippet body'
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'should render yield with string param' do
|
43
|
+
@layout = Fabricate :layout, :name => 'foo_layout', :body => "{% render_snippet 'snip' %}"
|
44
|
+
render_page(@page).should == @snippet.body
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'should render yield with variable param' do
|
48
|
+
@layout = Fabricate :layout, :name => 'foo_layout', :body => "{% assign sn = 'snip' %}{% render_snippet sn %}"
|
49
|
+
render_page(@page).should == @snippet.body
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
6
53
|
|
7
|
-
#end
|
8
54
|
|
9
55
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puffer_pages
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 7
|
10
|
+
version: 0.0.7
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- pyromaniac
|
@@ -250,6 +250,7 @@ files:
|
|
250
250
|
- lib/puffer_pages/extensions/core.rb
|
251
251
|
- lib/puffer_pages/extensions/mapper.rb
|
252
252
|
- lib/puffer_pages/liquid/page_drop.rb
|
253
|
+
- lib/puffer_pages/liquid/tags/render_snippet.rb
|
253
254
|
- lib/puffer_pages/liquid/tags/yield.rb
|
254
255
|
- lib/puffer_pages/liquid/tracker.rb
|
255
256
|
- puffer_pages.gemspec
|
@@ -311,6 +312,7 @@ files:
|
|
311
312
|
- spec/fabricators/layouts_fabricator.rb
|
312
313
|
- spec/fabricators/page_parts_fabricator.rb
|
313
314
|
- spec/fabricators/pages_fabricator.rb
|
315
|
+
- spec/fabricators/snippets_fabricator.rb
|
314
316
|
- spec/integration/navigation_spec.rb
|
315
317
|
- spec/models/page_spec.rb
|
316
318
|
- spec/models/tags_spec.rb
|
@@ -380,6 +382,7 @@ test_files:
|
|
380
382
|
- spec/fabricators/layouts_fabricator.rb
|
381
383
|
- spec/fabricators/page_parts_fabricator.rb
|
382
384
|
- spec/fabricators/pages_fabricator.rb
|
385
|
+
- spec/fabricators/snippets_fabricator.rb
|
383
386
|
- spec/integration/navigation_spec.rb
|
384
387
|
- spec/models/page_spec.rb
|
385
388
|
- spec/models/tags_spec.rb
|