ember 0.0.0

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.
@@ -0,0 +1,14 @@
1
+ #--
2
+ # Copyright 2009 Suraj N. Kurapati
3
+ # See the LICENSE file for details.
4
+ #++
5
+
6
+ require 'rubygems'
7
+ gem 'inochi', '~> 1'
8
+ require 'inochi'
9
+
10
+ Inochi.rake :Ember,
11
+ :test_with => :dfect,
12
+ :rubyforge_project => 'sunaku',
13
+ :upload_target => File.expand_path('~/www/lib/ember/'),
14
+ :upload_delete => true
@@ -0,0 +1,17 @@
1
+ unless Ember.const_defined? :INOCHI
2
+ fail "#{Ember} must have INOCHI constant"
3
+ end
4
+
5
+ Ember::INOCHI.each do |param, value|
6
+ const = param.to_s.upcase
7
+
8
+ unless Ember.const_defined? const
9
+ fail "#{Ember} must have #{const} constant"
10
+ end
11
+
12
+ unless Ember.const_get(const) == value
13
+ fail "#{Ember}'s #{const} constant must be provided by Inochi"
14
+ end
15
+ end
16
+
17
+ puts "Inochi establishment tests passed!"
@@ -0,0 +1,141 @@
1
+ require 'dfect/mini'
2
+ require 'inochi/util/combo'
3
+
4
+ describe "A template" do
5
+ it "renders single & multi-line comments as nothing" do
6
+ WHITESPACE.each_join do |s|
7
+ render("<%##{s}an#{s}eRuby#{s}comment#{s}%>").must_equal("")
8
+ end
9
+ end
10
+
11
+ it "renders directives with whitespace-only bodies as nothing" do
12
+ WHITESPACE.each_join do |s|
13
+ OPERATIONS.each do |o|
14
+ render("<%#{o}#{s}%>").must_equal("")
15
+ end
16
+ end
17
+ end
18
+
19
+ it "renders escaped directives in unescaped form" do
20
+ render("<%%%>").must_equal("<%%>")
21
+
22
+ render("<%% %>").must_equal("<% %>")
23
+
24
+ lambda { render("<% %%>") }.
25
+ must_raise(SyntaxError, "the trailing delimiter must not be unescaped")
26
+
27
+ render("<%%%%>").must_equal("<%%%>",
28
+ "the trailing delimiter must not be unescaped")
29
+
30
+ WHITESPACE.each_join do |s|
31
+ body = "#{s}an#{s}eRuby#{s}directive#{s}"
32
+
33
+ OPERATIONS.each do |o|
34
+ render("<%%#{o}#{body}%>").must_equal("<%#{o}#{body}%>")
35
+ end
36
+ end
37
+ end
38
+
39
+ it "renders whitespace surrounding vocal directives correctly" do
40
+ o = rand.to_s
41
+ i = "<%= #{o} %>"
42
+
43
+ WHITESPACE.each_join do |s|
44
+ (BLANK + NEWLINES).enumeration do |a, b|
45
+ render("a#{a}#{s}#{i}#{b}#{s}b").must_equal("a#{a}#{s}#{o}#{b}#{s}b")
46
+ end
47
+ end
48
+ end
49
+
50
+ it "renders whitespace surrounding silent directives correctly" do
51
+ i = '<%%>'
52
+ o = ''
53
+
54
+ SPACES.each_join do |s|
55
+ NEWLINES.each do |n|
56
+ # without preceding newline
57
+ render("a#{s}#{i}#{n}b").must_equal("a#{o}b")
58
+
59
+ # with preceding newline
60
+ render("a#{n}#{s}#{i}#{n}b").must_equal("a#{n}#{o}b")
61
+ end
62
+ end
63
+ end
64
+
65
+ private
66
+
67
+ def render input, options = {}
68
+ Ember::Template.new(input, options).render
69
+ end
70
+
71
+ BLANK = [''] # the empty string
72
+ NEWLINES = ["\n", "\r\n"]
73
+ SPACES = [' ', "\t"]
74
+ WHITESPACE = SPACES + NEWLINES
75
+ OPERATIONS = [nil, '=', '#', *WHITESPACE]
76
+ end
77
+
78
+ describe "A program compiled from a template" do
79
+ it "has the same number of lines as its input, regardless of template options" do
80
+ (BLANK + NEWLINES).each do |s|
81
+ test_num_lines s
82
+ test_num_lines "hello#{s}world"
83
+
84
+ OPERATIONS.each do |o|
85
+ test_num_lines "<%#{o}hello#{s}world%>"
86
+ end
87
+ end
88
+ end
89
+
90
+ private
91
+
92
+ ##
93
+ # Checks that the given input template is compiled into the same
94
+ # number of lines of Ruby code for all possible template options.
95
+ #
96
+ def test_num_lines input
97
+ num_input_lines = count_lines(input)
98
+
99
+ OPTIONS.each_combo do |options|
100
+ template = Ember::Template.new(input, options)
101
+ program = template.program
102
+
103
+ count_lines(program).must_equal num_input_lines, "template program compiled with #{options.inspect} has different number of lines for input #{input.inspect}"
104
+ end
105
+ end
106
+
107
+ ##
108
+ # Counts the number of lines in the given string.
109
+ #
110
+ def count_lines string
111
+ string.to_s.scan(/$/).length
112
+ end
113
+
114
+ OPTIONS = [:shorthand, :infer_end, :unindent]
115
+
116
+ ##
117
+ # Invokes the given block, passing in an options hash
118
+ # for Ember::Template, for every possible combination.
119
+ #
120
+ def OPTIONS.each_combo
121
+ raise ArgumentError unless block_given?
122
+
123
+ combinations do |flags|
124
+ yield Hash[ *flags.map {|f| [f, true] }.flatten ]
125
+ end
126
+ end
127
+ end
128
+
129
+ class Array
130
+ ##
131
+ # Invokes the given block, passing in the result
132
+ # of Array#join, for every possible combination.
133
+ #
134
+ def each_join
135
+ raise ArgumentError unless block_given?
136
+
137
+ permutations do |combo|
138
+ yield combo.join
139
+ end
140
+ end
141
+ end
metadata ADDED
@@ -0,0 +1,109 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ember
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Suraj N. Kurapati
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-05-04 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: inochi
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ~>
22
+ - !ruby/object:Gem::Version
23
+ version: "1"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: inochi
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: "1"
34
+ version:
35
+ description: eRuby template processor
36
+ email: sunaku@gmail.com
37
+ executables:
38
+ - ember
39
+ extensions: []
40
+
41
+ extra_rdoc_files: []
42
+
43
+ files:
44
+ - rakefile
45
+ - test/ember.rb
46
+ - test/ember/template.rb
47
+ - lib/ember.rb
48
+ - lib/ember/template.rb
49
+ - bin/ember
50
+ - LICENSE
51
+ - doc/intro.erb
52
+ - doc/setup.erb
53
+ - doc/example.txt
54
+ - doc/example.erb
55
+ - doc/index.xhtml
56
+ - doc/api/classes/Ember.html
57
+ - doc/api/classes/Ember/Template/Program.html
58
+ - doc/api/classes/Ember/Template.html
59
+ - doc/api/panel/search_index.js
60
+ - doc/api/panel/tree.js
61
+ - doc/api/panel/index.html
62
+ - doc/api/js/searchdoc.js
63
+ - doc/api/js/jquery-effect.js
64
+ - doc/api/js/jquery-1.3.2.min.js
65
+ - doc/api/js/main.js
66
+ - doc/api/files/LICENSE.html
67
+ - doc/api/files/lib/ember_rb.html
68
+ - doc/api/files/lib/ember/template_rb.html
69
+ - doc/api/css/main.css
70
+ - doc/api/css/reset.css
71
+ - doc/api/css/panel.css
72
+ - doc/api/i/arrows.png
73
+ - doc/api/i/tree_bg.png
74
+ - doc/api/i/results_bg.png
75
+ - doc/api/created.rid
76
+ - doc/api/index.html
77
+ - doc/usage.erb
78
+ - doc/history.erb
79
+ - doc/index.erb
80
+ has_rdoc: true
81
+ homepage: http://snk.tuxfamily.org/lib/ember
82
+ licenses: []
83
+
84
+ post_install_message:
85
+ rdoc_options: []
86
+
87
+ require_paths:
88
+ - lib
89
+ required_ruby_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: "0"
94
+ version:
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: "0"
100
+ version:
101
+ requirements: []
102
+
103
+ rubyforge_project: sunaku
104
+ rubygems_version: 1.3.2
105
+ signing_key:
106
+ specification_version: 3
107
+ summary: eRuby template processor
108
+ test_files: []
109
+