starapor-slippers 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +1 -1
- data/VERSION.yml +1 -1
- data/examples/main_controller.rb +29 -5
- data/examples/view/index.st +3 -0
- data/examples/view/person/age.st +1 -1
- data/examples/view/person/age_renderer.rb +6 -0
- data/examples/view/person/index.st +1 -1
- data/lib/engine/binding_wrapper.rb +1 -1
- data/lib/engine/slippers.treetop +1 -1
- data/lib/engine/slippers_nodes.rb +9 -4
- data/lib/engine/template_group.rb +12 -2
- data/lib/engine/template_group_directory.rb +10 -1
- data/lib/ramazeTemplates/0001-Adding-slippers-as-a-new-template.patch +138 -0
- data/lib/ramazeTemplates/0002-Fixing-problem-with-using-other-renderers.patch +27 -0
- data/lib/ramazeTemplates/slippers.rb +2 -2
- data/spec/engine.rb +8 -0
- data/spec/template_group.rb +21 -0
- metadata +5 -3
- data/examples/view/person/name.st +0 -1
data/LICENSE
CHANGED
data/VERSION.yml
CHANGED
data/examples/main_controller.rb
CHANGED
@@ -1,16 +1,40 @@
|
|
1
|
+
require 'date'
|
2
|
+
|
3
|
+
class Role
|
4
|
+
def initialize(name, level)
|
5
|
+
@name, @level = name, level
|
6
|
+
end
|
7
|
+
attr_reader :name, :level
|
8
|
+
end
|
9
|
+
|
1
10
|
class Person
|
2
|
-
def initialize(name, date_of_birth)
|
3
|
-
@name, @dob = name, date_of_birth
|
11
|
+
def initialize(name, date_of_birth, role)
|
12
|
+
@name, @dob, @role = name, date_of_birth, role
|
4
13
|
end
|
5
|
-
attr_reader :name, :dob
|
14
|
+
attr_reader :name, :dob, :role
|
6
15
|
end
|
7
16
|
|
17
|
+
class RoleRenderer
|
18
|
+
def render(role)
|
19
|
+
role.level + ' : ' + role.name
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class AuthorRenderer
|
24
|
+
def render(author)
|
25
|
+
"the awesome " + author.name
|
26
|
+
end
|
27
|
+
end
|
8
28
|
|
9
29
|
class MainController < Ramaze::Controller
|
10
30
|
engine :Slippers
|
11
|
-
|
31
|
+
trait :slippers_options => {:author => AuthorRenderer.new, Role => RoleRenderer.new}
|
32
|
+
|
12
33
|
def index
|
13
|
-
@person = Person.new('Sarah',
|
34
|
+
@person = Person.new('Sarah', Date.new(1999, 1, 1), Role.new('developer', 'senior'))
|
35
|
+
@author = Person.new('Paul', Date.new(1880,3,5), Role.new('author', 'junior'))
|
36
|
+
@role = Role.new("sd", "sdffs")
|
14
37
|
end
|
15
38
|
end
|
16
39
|
|
40
|
+
|
data/examples/view/index.st
CHANGED
data/examples/view/person/age.st
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
is $person/age_renderer()$ years old
|
@@ -1,2 +1,2 @@
|
|
1
1
|
<h3>Introducing....</h3>
|
2
|
-
the faboulous <strong>$name$</strong> who $dob:person/age()$
|
2
|
+
<p>the faboulous <strong>$name$</strong> who $dob:person/age()$ is a $role$</p>
|
data/lib/engine/slippers.treetop
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
module Slippers
|
2
|
-
module
|
2
|
+
module AttributeToRenderNode
|
3
3
|
|
4
|
-
def eval(object_to_render, template_group
|
5
|
-
[object_to_render].flatten.inject('') { |rendered, item| rendered + value_of(item)
|
4
|
+
def eval(object_to_render, template_group)
|
5
|
+
[object_to_render].flatten.inject('') { |rendered, item| rendered + render(value_of(item), template_group) }
|
6
6
|
end
|
7
7
|
|
8
8
|
def value_of(item)
|
@@ -12,6 +12,11 @@ module Slippers
|
|
12
12
|
''
|
13
13
|
end
|
14
14
|
|
15
|
+
def render(object_to_render, template_group)
|
16
|
+
return template_group.render(object_to_render) if template_group && template_group.has_registered?(object_to_render.class)
|
17
|
+
object_to_render.to_s
|
18
|
+
end
|
19
|
+
|
15
20
|
def to_sym
|
16
21
|
text_value.to_sym
|
17
22
|
end
|
@@ -75,7 +80,7 @@ module Slippers
|
|
75
80
|
|
76
81
|
class TemplatedExpressionNode < Treetop::Runtime::SyntaxNode
|
77
82
|
|
78
|
-
def eval(object_to_render, template_group
|
83
|
+
def eval(object_to_render, template_group)
|
79
84
|
foo.eval(object_to_render, template_group)
|
80
85
|
end
|
81
86
|
|
@@ -11,8 +11,18 @@ module Slippers
|
|
11
11
|
find_in_super_group(subtemplate)
|
12
12
|
end
|
13
13
|
|
14
|
-
def
|
15
|
-
|
14
|
+
def has_registered?(class_name)
|
15
|
+
return false unless @templates
|
16
|
+
return true if @templates.include?(class_name)
|
17
|
+
return false unless @super_group
|
18
|
+
@super_group.has_registered?(class_name)
|
19
|
+
end
|
20
|
+
|
21
|
+
def render(item)
|
22
|
+
return '' unless @templates
|
23
|
+
return @templates[item.class].render(item) if has_registered?(item.class)
|
24
|
+
return '' unless @super_group
|
25
|
+
@super_group.render(item)
|
16
26
|
end
|
17
27
|
|
18
28
|
private
|
@@ -7,13 +7,22 @@ module Slippers
|
|
7
7
|
attr_reader :directory_path
|
8
8
|
|
9
9
|
def find(subtemplate)
|
10
|
-
|
11
10
|
file_name = @directory_path + '/' + subtemplate + '.st'
|
12
11
|
return find_renderer(subtemplate) unless File.exist?(file_name)
|
13
12
|
Engine.new(FileTemplate.new(file_name).template, :template_group => self)
|
14
13
|
|
15
14
|
end
|
15
|
+
def has_registered?(class_name)
|
16
|
+
return false unless @super_group
|
17
|
+
@super_group.has_registered?(class_name)
|
18
|
+
end
|
16
19
|
|
20
|
+
def render(item)
|
21
|
+
return '' unless @super_group
|
22
|
+
@super_group.render(item)
|
23
|
+
end
|
24
|
+
|
25
|
+
|
17
26
|
def eql?(other)
|
18
27
|
return false unless other
|
19
28
|
directory_path.eql?(other.directory_path)
|
@@ -0,0 +1,138 @@
|
|
1
|
+
From 11437e4517358214979eef34351208f4d2fefcbb Mon Sep 17 00:00:00 2001
|
2
|
+
From: starapor <me@sarahtaraporewalla.com>
|
3
|
+
Date: Sun, 13 Sep 2009 14:47:14 +0100
|
4
|
+
Subject: [PATCH] Adding slippers as a new template
|
5
|
+
|
6
|
+
---
|
7
|
+
lib/ramaze/view.rb | 1 +
|
8
|
+
lib/ramaze/view/slippers.rb | 22 ++++++++++++++
|
9
|
+
spec/ramaze/view/slippers.rb | 52 +++++++++++++++++++++++++++++++++
|
10
|
+
spec/ramaze/view/slippers/external.st | 8 +++++
|
11
|
+
spec/ramaze/view/slippers/sum.st | 1 +
|
12
|
+
5 files changed, 84 insertions(+), 0 deletions(-)
|
13
|
+
create mode 100644 lib/ramaze/view/slippers.rb
|
14
|
+
create mode 100644 spec/ramaze/view/slippers.rb
|
15
|
+
create mode 100644 spec/ramaze/view/slippers/external.st
|
16
|
+
create mode 100644 spec/ramaze/view/slippers/sum.st
|
17
|
+
|
18
|
+
diff --git a/lib/ramaze/view.rb b/lib/ramaze/view.rb
|
19
|
+
index e69ae84..ec44754 100644
|
20
|
+
--- a/lib/ramaze/view.rb
|
21
|
+
+++ b/lib/ramaze/view.rb
|
22
|
+
@@ -35,5 +35,6 @@ module Ramaze
|
23
|
+
auto_register :Sass, :sass
|
24
|
+
auto_register :Tagz, :rb, :tagz
|
25
|
+
auto_register :Tenjin, :rbhtml, :tenjin
|
26
|
+
+ auto_register :Slippers, :st
|
27
|
+
end
|
28
|
+
end
|
29
|
+
diff --git a/lib/ramaze/view/slippers.rb b/lib/ramaze/view/slippers.rb
|
30
|
+
new file mode 100644
|
31
|
+
index 0000000..f604185
|
32
|
+
--- /dev/null
|
33
|
+
+++ b/lib/ramaze/view/slippers.rb
|
34
|
+
@@ -0,0 +1,22 @@
|
35
|
+
+require 'slippers'
|
36
|
+
+
|
37
|
+
+module Ramaze
|
38
|
+
+ module View
|
39
|
+
+ module Slippers
|
40
|
+
+ def self.call(action, string)
|
41
|
+
+ slippers = View.compile(string){|s| ::Slippers::Engine.new(s, :template_group => template_group(action)) }
|
42
|
+
+ object_to_render = ::Slippers::BindingWrapper.new(action.instance.binding)
|
43
|
+
+ html = slippers.render(object_to_render)
|
44
|
+
+ return html, 'text/html'
|
45
|
+
+ end
|
46
|
+
+
|
47
|
+
+ private
|
48
|
+
+ def self.template_group(action)
|
49
|
+
+ subtemplates = action.instance.ancestral_trait[:slippers_options] || {}
|
50
|
+
+ view_root = "#{action.instance.options[:roots]}/#{action.instance.options[:views]}"
|
51
|
+
+ template_group_directory = ::Slippers::TemplateGroupDirectory.new(view_root)
|
52
|
+
+ template_group = ::Slippers::TemplateGroup.new(:super_group => template_group_directory, :templates => subtemplates)
|
53
|
+
+ end
|
54
|
+
+ end
|
55
|
+
+ end
|
56
|
+
+end
|
57
|
+
diff --git a/spec/ramaze/view/slippers.rb b/spec/ramaze/view/slippers.rb
|
58
|
+
new file mode 100644
|
59
|
+
index 0000000..769b547
|
60
|
+
--- /dev/null
|
61
|
+
+++ b/spec/ramaze/view/slippers.rb
|
62
|
+
@@ -0,0 +1,52 @@
|
63
|
+
+require File.expand_path('../../../../spec/helper', __FILE__)
|
64
|
+
+spec_require 'slippers'
|
65
|
+
+
|
66
|
+
+Ramaze::App.options.views = 'slippers'
|
67
|
+
+
|
68
|
+
+class SpecSlippers < Ramaze::Controller
|
69
|
+
+ map '/'
|
70
|
+
+ engine :Slippers
|
71
|
+
+
|
72
|
+
+ def index
|
73
|
+
+ @value = "foo"
|
74
|
+
+ '<h1>Slippers Index with $value$</h1>'
|
75
|
+
+ end
|
76
|
+
+
|
77
|
+
+ def sum(num1, num2)
|
78
|
+
+ @num1, @num2 = num1.to_i, num2.to_i
|
79
|
+
+ end
|
80
|
+
+
|
81
|
+
+ def external
|
82
|
+
+ end
|
83
|
+
+end
|
84
|
+
+
|
85
|
+
+describe 'Ramaze::View::Slippers' do
|
86
|
+
+ behaves_like :rack_test
|
87
|
+
+
|
88
|
+
+ should 'render' do
|
89
|
+
+ get('/').body.should == '<h1>Slippers Index with foo</h1>'
|
90
|
+
+ end
|
91
|
+
+
|
92
|
+
+ should 'render external template' do
|
93
|
+
+ get('/external').body.strip.
|
94
|
+
+ should == '<html>
|
95
|
+
+ <head>
|
96
|
+
+ <title>Slippers Test</title>
|
97
|
+
+ </head>
|
98
|
+
+ <body>
|
99
|
+
+ <h1>Slippers Template</h1>
|
100
|
+
+ </body>
|
101
|
+
+</html>'
|
102
|
+
+ end
|
103
|
+
+
|
104
|
+
+ should 'render external template with instance variables' do
|
105
|
+
+ got = get('/sum/1/2')
|
106
|
+
+ got.status.should == 200
|
107
|
+
+ got['Content-Type'].should == 'text/html'
|
108
|
+
+ got.body.strip.should ==
|
109
|
+
+"<div>
|
110
|
+
+ 1 and 2
|
111
|
+
+</div>"
|
112
|
+
+ end
|
113
|
+
+
|
114
|
+
+end
|
115
|
+
diff --git a/spec/ramaze/view/slippers/external.st b/spec/ramaze/view/slippers/external.st
|
116
|
+
new file mode 100644
|
117
|
+
index 0000000..431467b
|
118
|
+
--- /dev/null
|
119
|
+
+++ b/spec/ramaze/view/slippers/external.st
|
120
|
+
@@ -0,0 +1,8 @@
|
121
|
+
+<html>
|
122
|
+
+ <head>
|
123
|
+
+ <title>Slippers Test</title>
|
124
|
+
+ </head>
|
125
|
+
+ <body>
|
126
|
+
+ <h1>Slippers Template</h1>
|
127
|
+
+ </body>
|
128
|
+
+</html>
|
129
|
+
diff --git a/spec/ramaze/view/slippers/sum.st b/spec/ramaze/view/slippers/sum.st
|
130
|
+
new file mode 100644
|
131
|
+
index 0000000..728e130
|
132
|
+
--- /dev/null
|
133
|
+
+++ b/spec/ramaze/view/slippers/sum.st
|
134
|
+
@@ -0,0 +1 @@
|
135
|
+
+<div>$num1$ and $num2$</div>
|
136
|
+
--
|
137
|
+
1.6.1
|
138
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
From a72bd79dfa70bc41cf9bc97ef0f5e96273583a17 Mon Sep 17 00:00:00 2001
|
2
|
+
From: starapor <me@sarahtaraporewalla.com>
|
3
|
+
Date: Tue, 15 Sep 2009 19:16:55 +0100
|
4
|
+
Subject: [PATCH 2/2] Fixing problem with using other renderers
|
5
|
+
|
6
|
+
---
|
7
|
+
lib/ramaze/view/slippers.rb | 4 ++--
|
8
|
+
1 files changed, 2 insertions(+), 2 deletions(-)
|
9
|
+
|
10
|
+
diff --git a/lib/ramaze/view/slippers.rb b/lib/ramaze/view/slippers.rb
|
11
|
+
index f604185..7a4569a 100644
|
12
|
+
--- a/lib/ramaze/view/slippers.rb
|
13
|
+
+++ b/lib/ramaze/view/slippers.rb
|
14
|
+
@@ -14,8 +14,8 @@ module Ramaze
|
15
|
+
def self.template_group(action)
|
16
|
+
subtemplates = action.instance.ancestral_trait[:slippers_options] || {}
|
17
|
+
view_root = "#{action.instance.options[:roots]}/#{action.instance.options[:views]}"
|
18
|
+
- template_group_directory = ::Slippers::TemplateGroupDirectory.new(view_root)
|
19
|
+
- template_group = ::Slippers::TemplateGroup.new(:super_group => template_group_directory, :templates => subtemplates)
|
20
|
+
+ super_group = ::Slippers::TemplateGroup.new(:templates => subtemplates)
|
21
|
+
+ ::Slippers::TemplateGroupDirectory.new(view_root, :super_group => super_group)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
--
|
26
|
+
1.6.1
|
27
|
+
|
@@ -14,8 +14,8 @@ module Ramaze
|
|
14
14
|
def self.template_group(action)
|
15
15
|
subtemplates = action.instance.ancestral_trait[:slippers_options] || {}
|
16
16
|
view_root = "#{action.instance.options[:roots]}/#{action.instance.options[:views]}"
|
17
|
-
|
18
|
-
|
17
|
+
super_group = ::Slippers::TemplateGroup.new(:templates => subtemplates)
|
18
|
+
::Slippers::TemplateGroupDirectory.new(view_root, :super_group => super_group)
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
data/spec/engine.rb
CHANGED
@@ -48,6 +48,14 @@ describe Slippers::Engine do
|
|
48
48
|
engine = Slippers::Engine.new("Introducing $name:name()$ who is $dob:age()$.", :template_group => template_group)
|
49
49
|
engine.render(person).should eql("Introducing Fred Flinstone who is 34 years old.")
|
50
50
|
end
|
51
|
+
|
52
|
+
it "should select a renderer based on the type of the object to render" do
|
53
|
+
person = OpenStruct.new({:name => {:first => 'Fred', :last => 'Flinstone'}, :dob => Date.new(DateTime.now.year - 34, 2, 4)})
|
54
|
+
template_group = Slippers::TemplateGroup.new(:templates => {:name => Slippers::Engine.new('$first$ $last$'), Date => AgeRenderer.new})
|
55
|
+
|
56
|
+
engine = Slippers::Engine.new("Introducing $name:name()$ who is $dob$.", :template_group => template_group)
|
57
|
+
engine.render(person).should eql("Introducing Fred Flinstone who is 34 years old.")
|
58
|
+
end
|
51
59
|
|
52
60
|
it 'should render a bindings wrapper' do
|
53
61
|
@first = 'fred'
|
data/spec/template_group.rb
CHANGED
@@ -21,4 +21,25 @@ describe Slippers::TemplateGroup do
|
|
21
21
|
template_group.find(:person).should eql(template)
|
22
22
|
template_group.find(:not_this).should eql(nil)
|
23
23
|
end
|
24
|
+
|
25
|
+
it 'should render an item if its class is registered' do
|
26
|
+
date = Date.new(DateTime.now.year, 2, 4)
|
27
|
+
rendered_text = "rendered text"
|
28
|
+
template_group = Slippers::TemplateGroup.new(:templates => {Date => OpenStruct.new({:render => rendered_text})})
|
29
|
+
|
30
|
+
template_group.has_registered?(date.class).should be_true
|
31
|
+
template_group.render(date).should eql(rendered_text)
|
32
|
+
|
33
|
+
template_group.has_registered?(template_group.class).should be_false
|
34
|
+
template_group.render(template_group).should eql('')
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should not render an item if there are no templates' do
|
38
|
+
date = Date.new(DateTime.now.year, 2, 4)
|
39
|
+
template_group = Slippers::TemplateGroup.new()
|
40
|
+
|
41
|
+
template_group.has_registered?(date.class).should be_false
|
42
|
+
template_group.render(date).should eql('')
|
43
|
+
end
|
44
|
+
|
24
45
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: starapor-slippers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sarah Taraporewalla
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-09-
|
12
|
+
date: 2009-09-17 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -55,6 +55,8 @@ files:
|
|
55
55
|
- lib/engine/template_group.rb
|
56
56
|
- lib/engine/template_group_directory.rb
|
57
57
|
- lib/ramazeTemplates
|
58
|
+
- lib/ramazeTemplates/0001-Adding-slippers-as-a-new-template.patch
|
59
|
+
- lib/ramazeTemplates/0002-Fixing-problem-with-using-other-renderers.patch
|
58
60
|
- lib/ramazeTemplates/slippers.rb
|
59
61
|
- lib/slippers.rb
|
60
62
|
- spec/binding_wrapper.rb
|
@@ -170,8 +172,8 @@ files:
|
|
170
172
|
- examples/view/index.st
|
171
173
|
- examples/view/person
|
172
174
|
- examples/view/person/age.st
|
175
|
+
- examples/view/person/age_renderer.rb
|
173
176
|
- examples/view/person/index.st
|
174
|
-
- examples/view/person/name.st
|
175
177
|
has_rdoc: false
|
176
178
|
homepage: http://github.com/starapor/slippers
|
177
179
|
licenses:
|
@@ -1 +0,0 @@
|
|
1
|
-
$first$ $last$
|