renshi 0.1.0 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/README CHANGED
@@ -7,9 +7,9 @@ To output data on the page stick a $ in front of your var. or expression
7
7
  $foo
8
8
  $Time.now
9
9
 
10
- If there's a space in your expression or you need formatting use ${}
10
+ If there's a space in your expression use ${}
11
11
 
12
- ${foo},$Time.now
12
+ ${some_function "takes this string as input"}
13
13
 
14
14
  To insert statements in your template use $[]
15
15
 
@@ -27,7 +27,7 @@ r:expression_name="expression" - the expression value is treated as a Ruby expre
27
27
 
28
28
  Some expressions, such as r:each, use the quoted value to also hold parameter information.
29
29
 
30
- Current Attribute Expressions
30
+ Current Attribute Expressions (see below for an explanation of each)
31
31
  * If
32
32
  * Unless
33
33
  * Elsif
@@ -36,6 +36,24 @@ Current Attribute Expressions
36
36
  * For
37
37
  * Each
38
38
 
39
+ Combinations
40
+ ============
41
+ Attribute expressions can be combined on elements, and are interpreted in the order of appearance.
42
+
43
+ For e.g.
44
+
45
+ <ul>
46
+ <li r:for="section in @section.sections" r:if="(section.groups & current_user.groups).any?">$section.name
47
+ <ul>
48
+ <li r:for="page in section.pages">${link_to page.name, "#{page.path}"}</li>
49
+ </ul>
50
+ </li>
51
+ </ul>
52
+
53
+
54
+ Descriptions
55
+ ============
56
+
39
57
  * If
40
58
  <span r:if="true">hello</span> would render "<span>hello</span>"
41
59
 
data/lib/renshi/parser.rb CHANGED
@@ -120,7 +120,6 @@ module Renshi
120
120
  #$[...]
121
121
  elsif next_char == "["
122
122
  begin
123
-
124
123
  # closing_brace_idx = text.rindex("]")
125
124
  closing_brace_idx = close_of_phrase_ending_with("]", text, idx)
126
125
  statement_str = text[(idx + 2)..(closing_brace_idx -1)]
@@ -131,7 +130,9 @@ module Renshi
131
130
  raise SyntaxError, "No closing bracket: #{text}", caller
132
131
  end
133
132
  else #$foo
134
- words = text[(idx +1)..-1].split(/\s/)
133
+
134
+ #divide with a delimiter for anything which is not a name character - alpa-numeric and underscore
135
+ words = text[(idx +1)..-1].split(/\W/)
135
136
  words[0] = "'$'" if words[0] == "$"
136
137
  statement_str = words.first
137
138
  statement = Statement.new(statement_str)
data/lib/renshi.rb CHANGED
@@ -9,7 +9,7 @@ require 'renshi/attribute_expressions'
9
9
  require 'renshi/frameworks'
10
10
 
11
11
  module Renshi
12
- VERSION="0.1.0"
12
+ VERSION="0.1.2"
13
13
 
14
14
  class SyntaxError < StandardError; end
15
15
  end
@@ -20,3 +20,7 @@
20
20
  </div>
21
21
  </body>
22
22
  </html>
23
+
24
+ <!-- possibility
25
+ $div{id='wrapper' style="width: 700px; margin: 0 auto; text-align: left; padding: 30px"}[ $p[Breadcrumbs $render_breadcrumbs]]
26
+ -->
data/spec/parser_spec.rb CHANGED
@@ -6,72 +6,72 @@ def N(str)
6
6
  end
7
7
 
8
8
  describe Renshi::Parser do
9
- # it "should parse a $foo var in elements" do
10
- # title = "hello world"
11
- # out = interpret("data/hello_world1.ren", binding)
12
- #
13
- # doc = Nokogiri::XML(out)
14
- # (doc/"title").text.should eql "hello world"
15
- # end
16
- #
17
- # it "should interpret vars surrounded by whitespace" do
18
- # foo = "in space no one can hear you scream"
19
- # out = interpret("data/white_space.ren", binding)
20
- # doc = N(out)
21
- # (doc/"div[@id='content']").text.strip.should eql "in space no one can hear you scream"
22
- # end
23
- #
24
- # it "should ignore $(..)" do
25
- # doc = Nokogiri::HTML.fragment("$(foo)")
26
- # node = doc.children.first
27
- # eval(deliver_compiled(node), binding).should eql "$(foo)"
28
- # end
29
- #
30
- # it "should parse attribute values - e.g. <div id='content$i'>" do
31
- # i = 1
32
- # html = interpret("data/attribute_values_parsed.ren", binding)
33
- # html = N(html)
34
- # (html/"div[@id='content1']").text.strip.should =~ /hello/
35
- # end
36
- #
9
+ it "should parse a $foo var in elements" do
10
+ title = "hello world"
11
+ out = interpret("data/hello_world1.ren", binding)
12
+
13
+ doc = Nokogiri::XML(out)
14
+ (doc/"title").text.should eql "hello world"
15
+ end
16
+
17
+ it "should interpret vars surrounded by whitespace" do
18
+ foo = "in space no one can hear you scream"
19
+ out = interpret("data/white_space.ren", binding)
20
+ doc = N(out)
21
+ (doc/"div[@id='content']").text.strip.should eql "in space no one can hear you scream"
22
+ end
23
+
24
+ it "should ignore $(..)" do
25
+ doc = Nokogiri::HTML.fragment("$(foo)")
26
+ node = doc.children.first
27
+ eval(deliver_compiled(node), binding).should eql "$(foo)"
28
+ end
29
+
30
+ it "should parse attribute values - e.g. <div id='content$i'>" do
31
+ i = 1
32
+ html = interpret("data/attribute_values_parsed.ren", binding)
33
+ html = N(html)
34
+ (html/"div[@id='content1']").text.strip.should =~ /hello/
35
+ end
36
+
37
37
  def foo(one, two = "", three = {})
38
38
  "#{one}, #{two}"
39
39
  end
40
- #
41
- # it "should understand double quotations marks within ruby code!" do
42
- # #${link_to "alter this template", edit_cms_page_template_path(PageTemplate.find_by_file_name("default.html.erb"))}
43
- # raw = compile_file("data/quots.ren")
44
- # html = eval(raw, binding)
45
- # html = N(html)
46
- # (html/"div[@id='content']").text.strip.should =~ /1, 2/
47
- # end
48
- #
49
- # it "should understand double quotations marks within ruby code!" do
50
- # #${link_to "alter this template", edit_cms_page_template_path(PageTemplate.find_by_file_name("default.html.erb"))}
51
- # raw = compile_file("data/quots2.ren")
52
- # html = eval(raw, binding)
53
- # html = N(html)
54
- # (html/"div[@id='content']").text.strip.should =~ /1, 2/
55
- # (html/"div[@id='content2']").text.strip.should =~ /a, 2/
56
- # end
57
- #
58
- # it "should understand double quotations marks within ruby code! 2" do
59
- # doc = Nokogiri::HTML(%Q!<p>${foo "1", foo("3", "4")}</p>!)
60
- #
61
- # puts doc.root
62
- #
63
- # body = doc.root.children.first
64
- # node = body.children.first
65
- # eval(deliver_compiled(node), binding).should eql "1, 3, 4"
66
- # end
67
- #
68
- # it "should understand multiple statements on the same line" do
69
- # raw = compile_file("data/multiple_statements.ren")
70
- # html = eval(raw, binding)
71
- # html = N(html)
72
- # (html/"div[@id='content']").text.strip.should =~ /1, 2, 3, 4/
73
- # (html/"div[@id='content2']").text.strip.should =~ /1, 2/
74
- # end
40
+
41
+ it "should understand double quotations marks within ruby code!" do
42
+ #${link_to "alter this template", edit_cms_page_template_path(PageTemplate.find_by_file_name("default.html.erb"))}
43
+ raw = compile_file("data/quots.ren")
44
+ html = eval(raw, binding)
45
+ html = N(html)
46
+ (html/"div[@id='content']").text.strip.should =~ /1, 2/
47
+ end
48
+
49
+ it "should understand double quotations marks within ruby code!" do
50
+ #${link_to "alter this template", edit_cms_page_template_path(PageTemplate.find_by_file_name("default.html.erb"))}
51
+ raw = compile_file("data/quots2.ren")
52
+ html = eval(raw, binding)
53
+ html = N(html)
54
+ (html/"div[@id='content']").text.strip.should =~ /1, 2/
55
+ (html/"div[@id='content2']").text.strip.should =~ /a, 2/
56
+ end
57
+
58
+ it "should understand double quotations marks within ruby code! 2" do
59
+ doc = Nokogiri::HTML(%Q!<p>${foo "1", foo("3", "4")}</p>!)
60
+
61
+ puts doc.root
62
+
63
+ body = doc.root.children.first
64
+ node = body.children.first
65
+ eval(deliver_compiled(node), binding).should eql "1, 3, 4"
66
+ end
67
+
68
+ it "should understand multiple statements on the same line" do
69
+ raw = compile_file("data/multiple_statements.ren")
70
+ html = eval(raw, binding)
71
+ html = N(html)
72
+ (html/"div[@id='content']").text.strip.should =~ /1, 2, 3, 4/
73
+ (html/"div[@id='content2']").text.strip.should =~ /1, 2/
74
+ end
75
75
 
76
76
 
77
77
  # STRING_END = "^R_END" #maybe replace this with a funky unicode char
@@ -100,4 +100,14 @@ describe Renshi::Parser do
100
100
 
101
101
  html.should =~/head/
102
102
  end
103
+
104
+ it "should interpret single $foos using \W, i.e. $foo$bar should render" do
105
+ raw = Renshi::Parser.parse("$foo$bar")
106
+ foo = "hello"
107
+ bar = " world"
108
+
109
+ html = eval(raw, binding)
110
+
111
+ html.should eql "hello world"
112
+ end
103
113
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: renshi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicholas Faiz
@@ -9,7 +9,7 @@ autorequire: renshi
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-08-11 00:00:00 +10:00
12
+ date: 2009-08-15 00:00:00 +10:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency