fu 0.0.2 → 0.1.1
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 +1 -13
- data/fu.gemspec +0 -1
- data/lib/fu/mustache.rb +11 -5
- data/lib/fu/version.rb +1 -1
- data/spec/fu_spec.rb +3 -1
- metadata +10 -24
- data/lib/fu/tilt.rb +0 -31
- data/spec/fu_tilt_spec.rb +0 -24
data/README.md
CHANGED
@@ -36,21 +36,9 @@ A contrived example using all aspects of the syntax:
|
|
36
36
|
Usage
|
37
37
|
=====
|
38
38
|
|
39
|
-
Direct:
|
40
|
-
|
41
39
|
Fu.to_mustache("%p Hello {{mustache}}")
|
42
40
|
|
43
|
-
|
44
|
-
|
45
|
-
require 'fu/tilt'
|
46
|
-
|
47
|
-
Stick your fu-templates in your views-folder with the extension `.fu`.
|
48
|
-
|
49
|
-
Then, in your app:
|
50
|
-
|
51
|
-
get "/some_action" do
|
52
|
-
fu :some_template, :locals => {...}
|
53
|
-
end
|
41
|
+
Sinatra w/Tilt? See https://github.com/benglerpebbles/fu-tilt#readme
|
54
42
|
|
55
43
|
Todo
|
56
44
|
====
|
data/fu.gemspec
CHANGED
@@ -21,7 +21,6 @@ Gem::Specification.new do |s|
|
|
21
21
|
# specify any dependencies here; for example:
|
22
22
|
s.add_development_dependency "rspec"
|
23
23
|
s.add_development_dependency "sinatra"
|
24
|
-
s.add_development_dependency "sinatra"
|
25
24
|
s.add_development_dependency "rack-test"
|
26
25
|
s.add_development_dependency "mustache"
|
27
26
|
|
data/lib/fu/mustache.rb
CHANGED
@@ -7,19 +7,20 @@ module Fu
|
|
7
7
|
attr_reader :mustache
|
8
8
|
SELF_CLOSING_TAGS = %w(meta img link br hr input area param col base)
|
9
9
|
BLOCK_ACTIONS = %w(# ^) # <- Mustache actions that take a block
|
10
|
-
NO_SPACE_CHARS = /[{}
|
10
|
+
NO_SPACE_CHARS = /[{}<>\s]|^$/ # <- Characters that do not need to be separated by a space
|
11
11
|
# when joining elements (e.g. "<p>!</p>", not "<p> ! </p>")
|
12
12
|
|
13
13
|
def initialize(root)
|
14
|
-
@mustache = flatten(render_children(root))
|
14
|
+
@mustache = flatten(render_children(root).compact)
|
15
15
|
end
|
16
16
|
|
17
17
|
private
|
18
18
|
|
19
19
|
# Flatten the tag_tree inserting spaces only where they have to be.
|
20
20
|
def flatten(tag_tree)
|
21
|
-
tag_tree.flatten.inject("") do |result, element|
|
22
|
-
|
21
|
+
tag_tree.flatten.inject("") do |result, element|
|
22
|
+
tail, incoming = result[-1], element[0]
|
23
|
+
if tail.nil? || (tail+incoming) =~ NO_SPACE_CHARS
|
23
24
|
"#{result}#{element}"
|
24
25
|
else
|
25
26
|
"#{result} #{element}"
|
@@ -27,6 +28,11 @@ module Fu
|
|
27
28
|
end
|
28
29
|
end
|
29
30
|
|
31
|
+
# Restore include tags that have been destroyed by escaping
|
32
|
+
def escape_html(text)
|
33
|
+
CGI.escapeHTML(text).gsub(/\{\{\s*\>\;/, "{{>")
|
34
|
+
end
|
35
|
+
|
30
36
|
# Returns a tag-tree of nested arrays reflecting the structure of the
|
31
37
|
# document. E.g. ["<p>",["<em>", "Italicized text", "</em>"],"</p>"]
|
32
38
|
def render_children(node)
|
@@ -34,7 +40,7 @@ module Fu
|
|
34
40
|
end
|
35
41
|
|
36
42
|
def render_text(node)
|
37
|
-
[
|
43
|
+
[escape_html(node.text), render_children(node)].compact
|
38
44
|
end
|
39
45
|
|
40
46
|
def render_blank(node); end
|
data/lib/fu/version.rb
CHANGED
data/spec/fu_spec.rb
CHANGED
@@ -84,7 +84,6 @@ describe Fu::Mustache do
|
|
84
84
|
result.should eq "{{^children}}{{name}} and {{address}}{{/children}}"
|
85
85
|
end
|
86
86
|
|
87
|
-
|
88
87
|
it "handles mustache in attributes" do
|
89
88
|
Fu.to_mustache('%p(data-bingo="{{bingo}}")').should eq '<p data-bingo="{{bingo}}"></p>'
|
90
89
|
end
|
@@ -101,4 +100,7 @@ describe Fu::Mustache do
|
|
101
100
|
END
|
102
101
|
end
|
103
102
|
|
103
|
+
it "never escapes the gt-character of include-statements" do
|
104
|
+
Fu.to_mustache("Bingo{{>partial}}bongo").should eq "Bingo{{>partial}}bongo"
|
105
|
+
end
|
104
106
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-12-
|
12
|
+
date: 2011-12-14 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &70312003890400 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70312003890400
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: sinatra
|
27
|
-
requirement: &
|
27
|
+
requirement: &70312003889520 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,21 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: sinatra
|
38
|
-
requirement: &70092482431880 !ruby/object:Gem::Requirement
|
39
|
-
none: false
|
40
|
-
requirements:
|
41
|
-
- - ! '>='
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version: '0'
|
44
|
-
type: :development
|
45
|
-
prerelease: false
|
46
|
-
version_requirements: *70092482431880
|
35
|
+
version_requirements: *70312003889520
|
47
36
|
- !ruby/object:Gem::Dependency
|
48
37
|
name: rack-test
|
49
|
-
requirement: &
|
38
|
+
requirement: &70312003888900 !ruby/object:Gem::Requirement
|
50
39
|
none: false
|
51
40
|
requirements:
|
52
41
|
- - ! '>='
|
@@ -54,10 +43,10 @@ dependencies:
|
|
54
43
|
version: '0'
|
55
44
|
type: :development
|
56
45
|
prerelease: false
|
57
|
-
version_requirements: *
|
46
|
+
version_requirements: *70312003888900
|
58
47
|
- !ruby/object:Gem::Dependency
|
59
48
|
name: mustache
|
60
|
-
requirement: &
|
49
|
+
requirement: &70312003888480 !ruby/object:Gem::Requirement
|
61
50
|
none: false
|
62
51
|
requirements:
|
63
52
|
- - ! '>='
|
@@ -65,7 +54,7 @@ dependencies:
|
|
65
54
|
version: '0'
|
66
55
|
type: :development
|
67
56
|
prerelease: false
|
68
|
-
version_requirements: *
|
57
|
+
version_requirements: *70312003888480
|
69
58
|
description: Fu combines the logic–less portability of Mustache with the terse utility
|
70
59
|
of Haml.
|
71
60
|
email:
|
@@ -83,11 +72,9 @@ files:
|
|
83
72
|
- lib/fu/error.rb
|
84
73
|
- lib/fu/mustache.rb
|
85
74
|
- lib/fu/parser.rb
|
86
|
-
- lib/fu/tilt.rb
|
87
75
|
- lib/fu/version.rb
|
88
76
|
- spec/fixtures/views/list.fu
|
89
77
|
- spec/fu_spec.rb
|
90
|
-
- spec/fu_tilt_spec.rb
|
91
78
|
- spec/spec_helper.rb
|
92
79
|
homepage: ''
|
93
80
|
licenses: []
|
@@ -116,5 +103,4 @@ summary: Fu template engine
|
|
116
103
|
test_files:
|
117
104
|
- spec/fixtures/views/list.fu
|
118
105
|
- spec/fu_spec.rb
|
119
|
-
- spec/fu_tilt_spec.rb
|
120
106
|
- spec/spec_helper.rb
|
data/lib/fu/tilt.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
# Makes Fu available through Tilt, also contains a utility
|
2
|
-
# function that will be added to Sinatra if Sinatra is
|
3
|
-
# defined.
|
4
|
-
require 'fu'
|
5
|
-
require 'tilt'
|
6
|
-
require 'mustache'
|
7
|
-
|
8
|
-
module Tilt
|
9
|
-
class FuTemplate < Template
|
10
|
-
self.default_mime_type = "text/html"
|
11
|
-
def initialize_engine
|
12
|
-
return if defined? ::Fu
|
13
|
-
require_template_library 'fu'
|
14
|
-
end
|
15
|
-
|
16
|
-
def prepare; end
|
17
|
-
|
18
|
-
def evaluate(scope, locals, &block)
|
19
|
-
Mustache.render(Fu.to_mustache(data), locals.merge(scope.is_a?(Hash) ? scope : {}).merge({:yield => block.nil? ? '' : block.call}))
|
20
|
-
end
|
21
|
-
end
|
22
|
-
register FuTemplate, 'fu'
|
23
|
-
end
|
24
|
-
|
25
|
-
if defined?(Sinatra)
|
26
|
-
module Sinatra::Templates
|
27
|
-
def fu(template, options={}, locals={})
|
28
|
-
render :fu, template, options, locals
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
data/spec/fu_tilt_spec.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'sinatra'
|
3
|
-
require 'rack/test'
|
4
|
-
require 'fu/tilt'
|
5
|
-
|
6
|
-
class FuApp < Sinatra::Base
|
7
|
-
set :root, File.dirname(__FILE__)+"/fixtures"
|
8
|
-
get "/list" do
|
9
|
-
fu :list, :locals => {:children => [{:name => "Arne"}, {:name => "Bjarne"}]}
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
describe "API v1 posts" do
|
14
|
-
include Rack::Test::Methods
|
15
|
-
|
16
|
-
def app
|
17
|
-
FuApp
|
18
|
-
end
|
19
|
-
|
20
|
-
it "'s alive" do
|
21
|
-
get "/list"
|
22
|
-
last_response.body.should eq "<ul><li>Arne</li><li>Bjarne</li></ul>"
|
23
|
-
end
|
24
|
-
end
|