skim 0.8.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,157 @@
1
+ require 'helper'
2
+
3
+ class TestSkimLogicLess < TestSkim
4
+ def test_sections
5
+ source = %q{
6
+ p
7
+ - person
8
+ .name = name
9
+ }
10
+
11
+ hash = {
12
+ :person => [
13
+ { :name => 'Joe', },
14
+ { :name => 'Jack', }
15
+ ]
16
+ }
17
+
18
+ assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, :context => hash, :sections => true
19
+ end
20
+
21
+ def test_flag_section
22
+ source = %q{
23
+ p
24
+ - show_person
25
+ - person
26
+ .name = name
27
+ - show_person
28
+ | shown
29
+ }
30
+
31
+ hash = {
32
+ :show_person => true,
33
+ :person => [
34
+ { :name => 'Joe', },
35
+ { :name => 'Jack', }
36
+ ]
37
+ }
38
+
39
+ assert_html '<p><div class="name">Joe</div><div class="name">Jack</div>shown</p>', source, :context => hash, :sections => true
40
+ end
41
+
42
+ def test_inverted_section
43
+ source = %q{
44
+ p
45
+ - person
46
+ .name = name
47
+ -! person
48
+ | No person
49
+ - !person
50
+ | No person 2
51
+ }
52
+
53
+ hash = {}
54
+
55
+ assert_html '<p>No person No person 2</p>', source, :context => hash, :sections => true
56
+ end
57
+
58
+ def test_output_with_content
59
+ source = %{
60
+ p = method_with_block do
61
+ block
62
+ }
63
+ assert_runtime_error 'Output statements with content are forbidden in sections mode', source, :sections => true
64
+ end
65
+
66
+ def test_sections2
67
+ source = %q{
68
+ p
69
+ - person
70
+ .name = name
71
+ }
72
+ assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, :sections => true
73
+ end
74
+
75
+ def test_with_array
76
+ source = %q{
77
+ ul
78
+ - people_with_locations
79
+ li = name
80
+ li = city
81
+ }
82
+ assert_html '<ul><li>Andy</li><li>Atlanta</li><li>Fred</li><li>Melbourne</li><li>Daniel</li><li>Karlsruhe</li></ul>', source, :sections => true
83
+ end
84
+
85
+ def test_method
86
+ source = %q{
87
+ a href=output_number Link
88
+ }
89
+ assert_html '<a href="1337">Link</a>', source, :sections => true
90
+ end
91
+
92
+ SECTION = <<-SRC
93
+ - test
94
+ | Test
95
+ SRC
96
+
97
+ INVERTED_SECTION = <<-SRC
98
+ -! test
99
+ | Test
100
+ SRC
101
+
102
+ def test_undefined_section
103
+ assert_html "", SECTION, :context => {}, :sections => true
104
+ end
105
+
106
+ def test_null_section
107
+ assert_html "", SECTION, :context => {:test => nil}, :sections => true
108
+ end
109
+
110
+ def test_false_section
111
+ assert_html "", SECTION, :context => {:test => false}, :sections => true
112
+ end
113
+
114
+ def test_empty_string_section
115
+ assert_html "Test", SECTION, :context => {:test => ""}, :sections => true
116
+ end
117
+
118
+ def test_empty_array_section
119
+ assert_html "", SECTION, :context => {:test => []}, :sections => true
120
+ end
121
+
122
+ def test_empty_object_section
123
+ assert_html "Test", SECTION, :context => {:test => {}}, :sections => true
124
+ end
125
+
126
+ def test_undefined_inverted_section
127
+ assert_html "Test", INVERTED_SECTION, :context => {}, :sections => true
128
+ end
129
+
130
+ def test_null_inverted_section
131
+ assert_html "Test", INVERTED_SECTION, :context => {:test => nil}, :sections => true
132
+ end
133
+
134
+ def test_false_inverted_section
135
+ assert_html "Test", INVERTED_SECTION, :context => {:test => false}, :sections => true
136
+ end
137
+
138
+ def test_empty_string_inverted_section
139
+ assert_html "", INVERTED_SECTION, :context => {:test => ""}, :sections => true
140
+ end
141
+
142
+ def test_empty_array_inverted_section
143
+ assert_html "Test", INVERTED_SECTION, :context => {:test => []}, :sections => true
144
+ end
145
+
146
+ def test_empty_object_inverted_section
147
+ assert_html "", INVERTED_SECTION, :context => {:test => {}}, :sections => true
148
+ end
149
+
150
+ def test_doesnt_modify_context
151
+ source = %q{
152
+ - constant_object
153
+ = constant_object_size
154
+ }
155
+ assert_html '2', source, :sections => true
156
+ end
157
+ end
@@ -0,0 +1,7 @@
1
+ require 'helper'
2
+
3
+ class TestSlimTemplate < TestSkim
4
+ def test_registered_extension
5
+ assert_equal Skim::Template, Tilt['test.skim']
6
+ end
7
+ end
@@ -0,0 +1,78 @@
1
+ require 'helper'
2
+
3
+ class TestSkimTextInterpolation < TestSkim
4
+ def test_interpolation_in_attribute
5
+ source = %q{
6
+ p id="a#{@id_helper()}b" = @hello_world()
7
+ }
8
+
9
+ assert_html '<p id="anoticeb">Hello World from @env</p>', source
10
+ end
11
+
12
+ def test_nested_interpolation_in_attribute
13
+ source = %q{
14
+ p id="#{"abc#{1+1}" + "("}" = @hello_world()
15
+ }
16
+
17
+ assert_html '<p id="abc2(">Hello World from @env</p>', source
18
+ end
19
+
20
+ def test_interpolation_in_text
21
+ source = %q{
22
+ p
23
+ | #{@hello_world()} with "quotes"
24
+ p
25
+ |
26
+ A message from the compiler: #{@hello_world()}
27
+ }
28
+
29
+ assert_html '<p>Hello World from @env with "quotes"</p><p>A message from the compiler: Hello World from @env</p>', source
30
+ end
31
+
32
+ def test_interpolation_in_tag
33
+ source = %q{
34
+ p #{@hello_world()}
35
+ }
36
+
37
+ assert_html '<p>Hello World from @env</p>', source
38
+ end
39
+
40
+ def test_escape_interpolation
41
+ source = %q{
42
+ p \\#{@hello_world()}
43
+ }
44
+
45
+ assert_html '<p>#{@hello_world()}</p>', source
46
+ end
47
+
48
+ def test_complex_interpolation
49
+ source = %q{
50
+ p Message: #{@message('hello', "user #{@output_number()}")}
51
+ }
52
+
53
+ assert_html '<p>Message: hello user 1337</p>', source
54
+ end
55
+
56
+ def test_interpolation_with_escaping
57
+ source = %q{
58
+ | #{@evil_method()}
59
+ }
60
+
61
+ assert_html '&lt;script&gt;do_something_evil();&lt;&#47;script&gt;', source
62
+ end
63
+
64
+ def test_interpolation_without_escaping
65
+ source = %q{
66
+ | #{{@evil_method()}}
67
+ }
68
+
69
+ assert_html '<script>do_something_evil();</script>', source
70
+ end
71
+
72
+ def test_interpolation_with_escaping_and_delimiter
73
+ source = %q{
74
+ | #{(@evil_method())}
75
+ }
76
+ assert_html '&lt;script&gt;do_something_evil();&lt;&#47;script&gt;', source
77
+ end
78
+ end
@@ -0,0 +1,35 @@
1
+ this.Skim =
2
+ access: (name) ->
3
+ value = @[name]
4
+ value = value.call(@) if typeof value == "function"
5
+ return [@] if value == true
6
+ return false if value == false or !value?
7
+ return [value] if Object.prototype.toString.call(value) != "[object Array]"
8
+ return false if value.length == 0
9
+ return value
10
+
11
+ withContext: (context, block) ->
12
+ create = (o) ->
13
+ F = ->
14
+ F.prototype = o
15
+ new F
16
+
17
+ context = create(context)
18
+
19
+ context.safe ||= @safe || (value) ->
20
+ return value if value?.skimSafe
21
+ result = new String(value ? '')
22
+ result.skimSafe = true
23
+ result
24
+
25
+ context.escape ||= @escape || (string) ->
26
+ return '' unless string?
27
+ return string if string.skimSafe
28
+ @safe (''+string)
29
+ .replace(/&/g, '&amp;')
30
+ .replace(/</g, '&lt;')
31
+ .replace(/>/g, '&gt;')
32
+ .replace(/"/g, '&quot;')
33
+ .replace(/\//g,'&#47;')
34
+
35
+ block.call(context)
metadata ADDED
@@ -0,0 +1,195 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: skim
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.8.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - John Firebaugh
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-03-02 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: slim
16
+ requirement: &70156571721740 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 1.1.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70156571721740
25
+ - !ruby/object:Gem::Dependency
26
+ name: temple
27
+ requirement: &70156571720500 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: 0.4.0
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70156571720500
36
+ - !ruby/object:Gem::Dependency
37
+ name: coffee-script
38
+ requirement: &70156571718440 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70156571718440
47
+ - !ruby/object:Gem::Dependency
48
+ name: multi_json
49
+ requirement: &70156571717360 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *70156571717360
58
+ - !ruby/object:Gem::Dependency
59
+ name: sprockets
60
+ requirement: &70156571715140 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *70156571715140
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: &70156571713420 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *70156571713420
80
+ - !ruby/object:Gem::Dependency
81
+ name: execjs
82
+ requirement: &70156571711700 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *70156571711700
91
+ - !ruby/object:Gem::Dependency
92
+ name: minitest-reporters
93
+ requirement: &70156571709720 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: *70156571709720
102
+ - !ruby/object:Gem::Dependency
103
+ name: therubyracer
104
+ requirement: &70156571709000 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: *70156571709000
113
+ description: Fat-free client-side templates with Slim and CoffeeScript
114
+ email:
115
+ - john.firebaugh@gmail.com
116
+ executables: []
117
+ extensions: []
118
+ extra_rdoc_files: []
119
+ files:
120
+ - .gitignore
121
+ - .travis.yml
122
+ - Gemfile
123
+ - LICENSE
124
+ - README.md
125
+ - Rakefile
126
+ - lib/skim.rb
127
+ - lib/skim/compiler.rb
128
+ - lib/skim/engine.rb
129
+ - lib/skim/rails.rb
130
+ - lib/skim/sections.rb
131
+ - lib/skim/template.rb
132
+ - lib/skim/version.rb
133
+ - lib/temple/coffee_script.rb
134
+ - lib/temple/coffee_script/filters.rb
135
+ - lib/temple/coffee_script/filters/attribute_merger.rb
136
+ - lib/temple/coffee_script/filters/attribute_remover.rb
137
+ - lib/temple/coffee_script/filters/control_flow.rb
138
+ - lib/temple/coffee_script/filters/escapable.rb
139
+ - lib/temple/coffee_script/generators.rb
140
+ - lib/temple/mixins/indent_dispatcher.rb
141
+ - skim.gemspec
142
+ - test/context.coffee
143
+ - test/helper.rb
144
+ - test/test_attribute_merger.rb
145
+ - test/test_code_blocks.rb
146
+ - test/test_code_escaping.rb
147
+ - test/test_code_evaluation.rb
148
+ - test/test_code_output.rb
149
+ - test/test_code_structure.rb
150
+ - test/test_html_escaping.rb
151
+ - test/test_html_structure.rb
152
+ - test/test_sections.rb
153
+ - test/test_skim_template.rb
154
+ - test/test_text_interpolation.rb
155
+ - vendor/assets/javascripts/skim.js.coffee
156
+ homepage: ''
157
+ licenses: []
158
+ post_install_message:
159
+ rdoc_options: []
160
+ require_paths:
161
+ - lib
162
+ required_ruby_version: !ruby/object:Gem::Requirement
163
+ none: false
164
+ requirements:
165
+ - - ! '>='
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ required_rubygems_version: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ! '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ requirements: []
175
+ rubyforge_project:
176
+ rubygems_version: 1.8.17
177
+ signing_key:
178
+ specification_version: 3
179
+ summary: Take the fat out of your client-side templates with Skim. Skim is the Slim
180
+ templating engine with embedded CoffeeScript. It compiles to JavaScript templates
181
+ (.jst), which can then be served by Rails or any other Sprockets-based asset pipeline.
182
+ test_files:
183
+ - test/context.coffee
184
+ - test/helper.rb
185
+ - test/test_attribute_merger.rb
186
+ - test/test_code_blocks.rb
187
+ - test/test_code_escaping.rb
188
+ - test/test_code_evaluation.rb
189
+ - test/test_code_output.rb
190
+ - test/test_code_structure.rb
191
+ - test/test_html_escaping.rb
192
+ - test/test_html_structure.rb
193
+ - test/test_sections.rb
194
+ - test/test_skim_template.rb
195
+ - test/test_text_interpolation.rb