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 CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2008 starapor
1
+ Copyright (c) 2009 starapor
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
+ :patch: 6
2
3
  :major: 0
3
4
  :minor: 0
4
- :patch: 5
@@ -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', DateTime.new(1983, 9, 2))
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
+
@@ -4,5 +4,8 @@
4
4
  </head>
5
5
  <body>
6
6
  $person:person/index()$
7
+ <div>
8
+ This is authored by $author:author()$.
9
+ </div>
7
10
  </body>
8
11
  </html>
@@ -1 +1 @@
1
- was born in $year$
1
+ is $person/age_renderer()$ years old
@@ -0,0 +1,6 @@
1
+ class AgeRenderer
2
+ def render(date)
3
+ age = DateTime.now.year - date.year
4
+ age.to_s
5
+ end
6
+ end
@@ -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>
@@ -8,7 +8,7 @@ module Slippers
8
8
  end
9
9
 
10
10
  def to_s
11
- "BindingWrapper with #{@bindings}"
11
+ "BindingWrapper with #{@bindingsw}"
12
12
  end
13
13
  end
14
14
  end
@@ -29,7 +29,7 @@ grammar Slippers
29
29
  end
30
30
 
31
31
  rule attribute
32
- anything_except_keywords <AttributeNode>
32
+ anything_except_keywords <AttributeToRenderNode>
33
33
  end
34
34
 
35
35
  rule some_text
@@ -1,8 +1,8 @@
1
1
  module Slippers
2
- module AttributeNode
2
+ module AttributeToRenderNode
3
3
 
4
- def eval(object_to_render, template_group=nil)
5
- [object_to_render].flatten.inject('') { |rendered, item| rendered + value_of(item).to_s }
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=nil)
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 to_s
15
- "TemplateGroup#Templates:[#{@templates}]&SuperGroup:[#{@super_group}] "
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
- template_group_directory = ::Slippers::TemplateGroupDirectory.new(view_root)
18
- template_group = ::Slippers::TemplateGroup.new(:super_group => template_group_directory, :templates => subtemplates)
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'
@@ -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.5
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-13 00:00:00 -07:00
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$