slim 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. data/.gitignore +3 -3
  2. data/.travis.yml +17 -0
  3. data/CHANGES +7 -0
  4. data/Gemfile +9 -9
  5. data/README.md +17 -3
  6. data/Rakefile +15 -11
  7. data/benchmarks/{src/complex.erb → complex.erb} +0 -0
  8. data/benchmarks/{src/complex.haml → complex.haml} +0 -0
  9. data/benchmarks/{src/complex.slim → complex.slim} +0 -0
  10. data/benchmarks/{src/complex_view.rb → complex_view.rb} +0 -0
  11. data/benchmarks/run.rb +6 -6
  12. data/lib/slim/compiler.rb +1 -1
  13. data/lib/slim/engine.rb +11 -8
  14. data/lib/slim/parser.rb +28 -10
  15. data/lib/slim/template.rb +5 -3
  16. data/lib/slim/version.rb +1 -1
  17. data/slim.gemspec +6 -3
  18. data/test/{integration/rails/dummy → rails}/Rakefile +0 -0
  19. data/test/{integration/rails/dummy → rails}/app/controllers/application_controller.rb +0 -0
  20. data/test/{integration/rails/dummy → rails}/app/controllers/parents_controller.rb +0 -0
  21. data/test/{integration/rails/dummy → rails}/app/controllers/slim_controller.rb +0 -0
  22. data/test/{integration/rails/dummy → rails}/app/helpers/application_helper.rb +0 -0
  23. data/test/{integration/rails/dummy → rails}/app/models/child.rb +1 -3
  24. data/test/{integration/rails/dummy → rails}/app/models/parent.rb +1 -3
  25. data/test/{integration/rails/dummy → rails}/app/views/layouts/application.html.slim +0 -0
  26. data/test/{integration/rails/dummy → rails}/app/views/parents/_form.html.slim +0 -1
  27. data/test/{integration/rails/dummy → rails}/app/views/parents/edit.html.slim +0 -0
  28. data/test/{integration/rails/dummy → rails}/app/views/parents/new.html.slim +0 -0
  29. data/test/{integration/rails/dummy → rails}/app/views/parents/show.html.slim +0 -0
  30. data/test/{integration/rails/dummy → rails}/app/views/slim/_partial.html.slim +0 -0
  31. data/test/{integration/rails/dummy → rails}/app/views/slim/content_for.html.slim +0 -0
  32. data/test/{integration/rails/dummy → rails}/app/views/slim/erb.html.erb +0 -0
  33. data/test/{integration/rails/dummy → rails}/app/views/slim/integers.html.slim +0 -0
  34. data/test/{integration/rails/dummy → rails}/app/views/slim/nil.html.slim +0 -0
  35. data/test/{integration/rails/dummy → rails}/app/views/slim/no_layout.html.slim +0 -0
  36. data/test/{integration/rails/dummy → rails}/app/views/slim/normal.html.slim +0 -0
  37. data/test/{integration/rails/dummy → rails}/app/views/slim/partial.html.slim +0 -0
  38. data/test/{integration/rails/dummy → rails}/app/views/slim/variables.html.slim +0 -0
  39. data/test/{integration/rails/dummy → rails}/config.ru +0 -0
  40. data/test/{integration/rails/dummy → rails}/config/application.rb +0 -0
  41. data/test/{integration/rails/dummy → rails}/config/boot.rb +0 -0
  42. data/test/{integration/rails/dummy → rails}/config/database.yml +0 -0
  43. data/test/{integration/rails/dummy → rails}/config/environment.rb +0 -0
  44. data/test/{integration/rails/dummy → rails}/config/environments/development.rb +0 -0
  45. data/test/{integration/rails/dummy → rails}/config/environments/production.rb +0 -0
  46. data/test/{integration/rails/dummy → rails}/config/environments/test.rb +0 -0
  47. data/test/{integration/rails/dummy → rails}/config/initializers/backtrace_silencers.rb +0 -0
  48. data/test/{integration/rails/dummy → rails}/config/initializers/inflections.rb +0 -0
  49. data/test/{integration/rails/dummy → rails}/config/initializers/mime_types.rb +0 -0
  50. data/test/{integration/rails/dummy → rails}/config/initializers/secret_token.rb +0 -0
  51. data/test/{integration/rails/dummy → rails}/config/initializers/session_store.rb +0 -0
  52. data/test/{integration/rails/dummy → rails}/config/locales/en.yml +0 -0
  53. data/test/{integration/rails/dummy → rails}/config/routes.rb +0 -0
  54. data/test/{integration/rails/dummy → rails}/db/migrate/20101220223037_parents_and_children.rb +0 -0
  55. data/test/{integration/rails/dummy → rails}/script/rails +0 -0
  56. data/test/{integration/rails/test_helper.rb → rails/test/helper.rb} +2 -2
  57. data/test/{integration/rails → rails/test}/test_slim_rails.rb +2 -2
  58. data/test/{helper.rb → slim/helper.rb} +2 -2
  59. data/test/slim/test_html_structure.rb +9 -0
  60. data/test/slim/test_ruby_errors.rb +11 -1
  61. data/test/slim/test_text_interpolation.rb +8 -0
  62. metadata +77 -76
data/.gitignore CHANGED
@@ -13,6 +13,6 @@ doc
13
13
  coverage
14
14
  pkg
15
15
 
16
- test/integration/rails/dummy/log/
17
- test/integration/rails/dummy/tmp/
18
- test/integration/rails/dummy/db/*.sqlite3
16
+ test/rails/log/
17
+ test/rails/tmp/
18
+ test/rails/db/*.sqlite3
data/.travis.yml ADDED
@@ -0,0 +1,17 @@
1
+ rvm:
2
+ - 1.8.7
3
+ - 1.9.2
4
+ - 1.9.3
5
+ - ruby-head
6
+ - jruby
7
+ - rbx-2.0
8
+ env:
9
+ - "TASK=test"
10
+ - "TASK=test TEMPLE=master"
11
+ - "TASK=test:rails TEMPLE=master RAILS=master"
12
+ - "TASK=test:rails RAILS=3.0.10"
13
+ script: "bundle exec rake test:ci"
14
+ notifications:
15
+ email: false
16
+ irc:
17
+ - "irc.freenode.org#slim-lang"
data/CHANGES CHANGED
@@ -1,5 +1,12 @@
1
1
  master
2
2
 
3
+ 1.0.2
4
+
5
+ * Support for Rails 3.1 streaming (Temple > 0.3.2 required)
6
+ * Switch to default format xhtml (supports all doctypes, including html5)
7
+ * Improve parsing of #{interpolation} in quoted attributes (issue #159)
8
+ * Use travis-ci for continous integration testing
9
+
3
10
  1.0.1
4
11
 
5
12
  * Only delimiting brackets must be balanced in ruby attributes
data/Gemfile CHANGED
@@ -2,15 +2,15 @@ source :rubygems
2
2
 
3
3
  gemspec
4
4
 
5
- if path = ENV['SLIM_USE_TEMPLE']
6
- if path == 'edge'
7
- gem 'temple', :git => 'git://github.com/judofyr/temple.git'
8
- else
9
- gem 'temple', :path => path
10
- end
5
+ if ENV['TEMPLE'] == 'master'
6
+ gem 'temple', :git => 'git://github.com/judofyr/temple.git'
11
7
  end
12
8
 
13
- group :integration do
14
- gem 'rails', '~> 3.0.3'
9
+ if ENV['RAILS']
10
+ if ENV['RAILS'] == 'master'
11
+ gem 'rails', :git => 'git://github.com/rails/rails.git'
12
+ else
13
+ gem 'rails', "= #{ENV['RAILS']}"
14
+ end
15
15
  gem 'sqlite3-ruby'
16
- end
16
+ end
data/README.md CHANGED
@@ -155,7 +155,7 @@ Here's a quick example to demonstrate what a Slim template looks like:
155
155
 
156
156
  If you wrap the attributes, you can spread them across multiple lines:
157
157
 
158
- h2[ id="tagline"
158
+ h2[ id="tagline"
159
159
  class="small tagline"] = page_tagline
160
160
 
161
161
  ### Add content to a tag
@@ -290,8 +290,8 @@ Here's a quick example to demonstrate what a Slim template looks like:
290
290
  ## Benchmarks
291
291
 
292
292
  *The benchmarks are only to demonstrate that Slim's speed should not
293
- be a determining factor in your template choice. Even if we don't
294
- agree, we'd prefer you to use any other reason for choosing another
293
+ be a determining factor in your template choice. Even if we don't
294
+ agree, we'd prefer you to use any other reason for choosing another
295
295
  template language.*
296
296
 
297
297
  # Linux + Ruby 1.9.2, 1000 iterations
@@ -338,6 +338,20 @@ Here's a quick example to demonstrate what a Slim template looks like:
338
338
  Sinatra, Ramaze and Camping. (Rails still uses its own template
339
339
  compilation.)
340
340
 
341
+ ## Tests
342
+
343
+ Slim provides an extensive test-suite based on minitest. You can run the tests
344
+ with 'rake test' and the rails integration tests with 'rake test:rails'.
345
+
346
+ Travis-CI is used for continous integration testing: http://travis-ci.org/#!/stonean/slim
347
+
348
+ Slim is working well on the following ruby implementations:
349
+
350
+ * Ruby 1.8.7
351
+ * Ruby 1.9.2
352
+ * Ruby EE
353
+ * JRuby
354
+
341
355
  ## License
342
356
 
343
357
  This project is released under the MIT license.
data/Rakefile CHANGED
@@ -6,28 +6,32 @@ end
6
6
 
7
7
  require 'rake/testtask'
8
8
 
9
- desc 'Run Slim benchmarks! (Default :iterations is 1000)'
10
- task :bench, :iterations, :slow do |t, args|
11
- ruby("benchmarks/run.rb #{args[:slow]} #{args[:iterations]}")
9
+ desc 'Run Slim benchmarks! (default parameters slow=false iterations=1000)'
10
+ task :bench, :iterations, :slow do
11
+ ruby('benchmarks/run.rb')
12
12
  end
13
13
 
14
- Rake::TestTask.new(:test) do |t|
15
- t.libs << 'lib' << 'test'
16
- t.pattern = 'test/slim/**/test_*.rb'
14
+ Rake::TestTask.new('test') do |t|
15
+ t.libs << 'lib' << 'test/slim'
16
+ t.test_files = FileList['test/slim/test_*.rb']
17
17
  t.verbose = true
18
18
  end
19
19
 
20
- Rake::TestTask.new(:integration) do |t|
21
- t.libs << 'lib' << 'test'
22
- t.pattern = 'test/integration/**/test_*.rb'
20
+ Rake::TestTask.new('test:rails') do |t|
21
+ t.libs << 'lib'
22
+ t.test_files = FileList['test/rails/test/test_*.rb']
23
23
  t.verbose = true
24
24
  end
25
25
 
26
+ task 'test:ci' do |t|
27
+ Rake::Task[ENV['TASK']].execute
28
+ end
29
+
26
30
  begin
27
31
  require 'rcov/rcovtask'
28
32
  Rcov::RcovTask.new do |t|
29
- t.libs << 'lib' << 'test'
30
- t.pattern = 'test/**/test_*.rb'
33
+ t.libs << 'lib' << 'test/slim'
34
+ t.test_files = FileList['test/slim/test_*.rb']
31
35
  t.verbose = true
32
36
  end
33
37
  rescue LoadError
File without changes
File without changes
File without changes
File without changes
data/benchmarks/run.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'), File.join(File.dirname(__FILE__), 'src'))
3
+ $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'), File.dirname(__FILE__))
4
4
 
5
5
  require 'slim'
6
6
  require 'complex_view'
@@ -17,9 +17,9 @@ class SlimBenchmarks
17
17
  @iterations = (iterations || 1000).to_i
18
18
  @benches = []
19
19
 
20
- tpl_erb = File.read(File.dirname(__FILE__) + '/src/complex.erb')
21
- tpl_haml = File.read(File.dirname(__FILE__) + '/src/complex.haml')
22
- tpl_slim = File.read(File.dirname(__FILE__) + '/src/complex.slim')
20
+ tpl_erb = File.read(File.dirname(__FILE__) + '/complex.erb')
21
+ tpl_haml = File.read(File.dirname(__FILE__) + '/complex.haml')
22
+ tpl_slim = File.read(File.dirname(__FILE__) + '/complex.slim')
23
23
 
24
24
  view = ComplexView.new
25
25
  eview = OpenStruct.new(:header => view.header, :item => view.item).instance_eval{ binding }
@@ -87,7 +87,7 @@ class SlimBenchmarks
87
87
  end
88
88
  puts "
89
89
  1. Uncached benchmark. Template is parsed every time.
90
- Activate this benchmark with slow=1.
90
+ Activate this benchmark with 'rake bench slow=1'.
91
91
 
92
92
  2. Cached benchmark. Template is parsed before the benchmark.
93
93
  The ruby code generated by the template engine might be evaluated every time.
@@ -111,4 +111,4 @@ class SlimBenchmarks
111
111
  end
112
112
  end
113
113
 
114
- SlimBenchmarks.new(ARGV[0], ARGV[1]).run
114
+ SlimBenchmarks.new(ENV['slow'], ENV['iterations']).run
data/lib/slim/compiler.rb CHANGED
@@ -83,7 +83,7 @@ module Slim
83
83
  end
84
84
  ]]]]
85
85
  end
86
- [:html, :attr, name, [:escape, escape, value]]
86
+ [:html, :attr, name, [:escape, escape, value]]
87
87
  end
88
88
  end
89
89
  end
data/lib/slim/engine.rb CHANGED
@@ -10,7 +10,6 @@ module Slim
10
10
  # This overwrites some temple default options.
11
11
  set_default_options :pretty => false,
12
12
  :attr_wrapper => '"',
13
- :format => :html5,
14
13
  :attr_delimiter => {'class' => ' '},
15
14
  :generator => Temple::Generators::ArrayBuffer
16
15
 
@@ -21,19 +20,21 @@ module Slim
21
20
  # --------------------------------------------------------------------------------------------------------------------------------------------
22
21
  # String | :file | nil | Name of parsed file, set automatically by Slim::Template
23
22
  # Integer | :tabsize | 4 | Number of whitespaces per tab (used by the parser)
24
- # String | :encoding | utf-8 | Set encoding of template
23
+ # String | :encoding | "utf-8" | Set encoding of template
24
+ # String | :default_tag | "div" | Default tag to be used if tag name is omitted
25
25
  # String list | :enable_engines | All enabled | List of enabled embedded engines (whitelist)
26
26
  # String list | :disable_engines | None disabled | List of disabled embedded engines (blacklist)
27
27
  # Boolean | :sections | false | Enable sections mode (logic-less)
28
28
  # String | :dictionary | "self" | Name of dictionary variable in sections mode
29
29
  # Symbol | :dictionary_access | :wrapped | Access mode of dictionary variable (:wrapped, :symbol, :string)
30
- # Boolean | :disable_capture | false (true in Rails) | Disable capturing in blocks (blocks write to the default buffer then)
30
+ # Boolean | :disable_capture | false (true in Rails) | Disable capturing in blocks (blocks write to the default buffer
31
31
  # Boolean | :disable_escape | false | Disable automatic escaping of strings
32
32
  # Boolean | :use_html_safe | false (true in Rails) | Use String#html_safe? from ActiveSupport (Works together with :disable_escape)
33
- # Symbol | :format | :html5 | HTML output format
33
+ # Symbol | :format | :xhtml | HTML output format
34
34
  # String | :attr_wrapper | '"' | Character to wrap attributes in html (can be ' or ")
35
35
  # Hash | :attr_delimiter | {'class' => ' '} | Joining character used if multiple html attributes are supplied (e.g. id1_id2)
36
36
  # Boolean | :pretty | false | Pretty html indenting (This is slower!)
37
+ # Boolean | :streaming | false (true in Rails > 3.1) | Enable output streaming
37
38
  # Class | :generator | ArrayBuffer/RailsOutputBuffer | Temple code generator (default generator generates array buffer)
38
39
  #
39
40
  # It is also possible to set all options supported by the generator (option :generator). The standard generators
@@ -52,17 +53,19 @@ module Slim
52
53
  # It is recommended to set the default settings only once in the code and avoid duplication. Only use
53
54
  # `set_default_options` when you have to override some default settings.
54
55
  #
55
- use Slim::Parser, :file, :tabsize, :encoding
56
+ use Slim::Parser, :file, :tabsize, :encoding, :default_tag
56
57
  use Slim::EmbeddedEngine, :enable_engines, :disable_engines, :pretty
57
58
  use Slim::Interpolation
58
59
  use Slim::Sections, :sections, :dictionary, :dictionary_access
59
60
  use Slim::EndInserter
60
61
  use Slim::Compiler, :disable_capture, :attr_delimiter
61
- use Temple::HTML::Pretty, :format, :attr_wrapper, :attr_delimiter, :pretty
62
+ use Temple::HTML::AttributeMerger, :attr_delimiter
63
+ use Temple::HTML::Pretty, :format, :attr_wrapper, :pretty
62
64
  filter :Escapable, :use_html_safe, :disable_escape
63
65
  filter :ControlFlow
64
66
  filter :MultiFlattener
65
- filter :DynamicInliner
66
- use(:Generator) {|exp| options[:generator].new(options).call(exp) }
67
+ wildcard(:Optimizer) { (options[:streaming] ? Temple::Filters::StaticMerger :
68
+ Temple::Filters::DynamicInliner).new }
69
+ wildcard(:Generator) { options[:generator].new(options) }
67
70
  end
68
71
  end
data/lib/slim/parser.rb CHANGED
@@ -5,7 +5,8 @@ module Slim
5
5
  include Temple::Mixins::Options
6
6
 
7
7
  set_default_options :tabsize => 4,
8
- :encoding => 'utf-8'
8
+ :encoding => 'utf-8',
9
+ :default_tag => 'div'
9
10
 
10
11
  class SyntaxError < StandardError
11
12
  attr_reader :error, :file, :line, :lineno, :column
@@ -72,7 +73,6 @@ module Slim
72
73
 
73
74
  DELIMITER_REGEX = /\A[\(\[\{]/
74
75
  ATTR_NAME_REGEX = '\A\s*(\w[:\w-]*)'
75
- QUOTED_VALUE_REGEX = /\A("[^"]*"|'[^']*')/
76
76
 
77
77
  if RUBY_VERSION > '1.9'
78
78
  CLASS_ID_REGEX = /\A(#|\.)([\w\u00c0-\uFFFF][\w:\u00c0-\uFFFF-]*)/
@@ -283,7 +283,7 @@ module Slim
283
283
 
284
284
  def parse_tag(tag)
285
285
  if tag == '#' || tag == '.'
286
- tag = 'div'
286
+ tag = options[:default_tag]
287
287
  else
288
288
  @line.slice!(0, tag.size)
289
289
  end
@@ -343,10 +343,10 @@ module Slim
343
343
  name = $1
344
344
  if delimiter && $2 != '='
345
345
  attributes << [:slim, :attr, name, false, 'true']
346
- elsif @line =~ QUOTED_VALUE_REGEX
346
+ elsif @line =~ /\A["']/
347
347
  # Value is quoted (static)
348
348
  @line = $'
349
- attributes << [:html, :attr, name, [:slim, :interpolate, $1[1..-2]]]
349
+ attributes << [:html, :attr, name, [:slim, :interpolate, parse_quoted_attribute($&)]]
350
350
  else
351
351
  # Value is ruby code
352
352
  escape = @line[0] != ?=
@@ -380,11 +380,7 @@ module Slim
380
380
  end
381
381
 
382
382
  def parse_ruby_attribute(outer_delimiter)
383
- # Delimiter count
384
- count, delimiter, close_delimiter = 0, nil, nil
385
-
386
- # Attribute value buffer
387
- value = ''
383
+ value, count, delimiter, close_delimiter = '', 0, nil, nil
388
384
 
389
385
  # Attribute ends with space or attribute delimiter
390
386
  end_regex = /\A[\s#{Regexp.escape outer_delimiter.to_s}]/
@@ -414,6 +410,28 @@ module Slim
414
410
  value
415
411
  end
416
412
 
413
+ def parse_quoted_attribute(quote)
414
+ value, count = '', 0
415
+
416
+ until @line.empty? || (count == 0 && @line[0] == quote[0])
417
+ if count > 0
418
+ if @line[0] == ?{
419
+ count += 1
420
+ elsif @line[0] == ?}
421
+ count -= 1
422
+ end
423
+ elsif @line =~ /\A#\{/
424
+ value << @line.slice!(0)
425
+ count = 1
426
+ end
427
+ value << @line.slice!(0)
428
+ end
429
+
430
+ syntax_error!("Expected closing brace }") if count != 0
431
+ @line.slice!(0)
432
+ value
433
+ end
434
+
417
435
  # Helper for raising exceptions
418
436
  def syntax_error!(message, args = {})
419
437
  args[:orig_line] ||= @orig_line
data/lib/slim/template.rb CHANGED
@@ -9,9 +9,11 @@ module Slim
9
9
  RailsTemplate = Temple::Templates::Rails(Slim::Engine,
10
10
  :register_as => :slim,
11
11
  # Use rails-specific generator. This is necessary
12
- # to support block capturing. Disable the internal slim capturing.
13
- # Rails takes care of the capturing by itself.
12
+ # to support block capturing and streaming.
14
13
  :generator => Temple::Generators::RailsOutputBuffer,
15
- :disable_capture => true)
14
+ # Disable the internal slim capturing.
15
+ # Rails takes care of the capturing by itself.
16
+ :disable_capture => true,
17
+ :streaming => true)
16
18
  end
17
19
  end
data/lib/slim/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Slim
2
2
  # Slim version string
3
3
  # @api public
4
- VERSION = '1.0.1'
4
+ VERSION = '1.0.2'
5
5
  end
data/slim.gemspec CHANGED
@@ -19,16 +19,19 @@ Gem::Specification.new do |s|
19
19
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
20
  s.require_paths = %w(lib)
21
21
 
22
- s.add_runtime_dependency('temple', ['~> 0.3.0']) unless ENV['SLIM_USE_TEMPLE']
23
- s.add_runtime_dependency('tilt', ['~> 1.2'])
22
+ s.add_runtime_dependency('temple', ['~> 0.3.3'])
23
+ s.add_runtime_dependency('tilt', ['~> 1.3.2'])
24
24
 
25
25
  s.add_development_dependency('rake', ['>= 0.8.7'])
26
26
  s.add_development_dependency('haml', ['>= 3.1.0'])
27
27
  s.add_development_dependency('sass', ['>= 3.1.0'])
28
28
  s.add_development_dependency('minitest', ['>= 0'])
29
- s.add_development_dependency('rcov', ['>= 0'])
30
29
  s.add_development_dependency('rdiscount', ['>= 0'])
31
30
  s.add_development_dependency('liquid', ['>= 0'])
32
31
  s.add_development_dependency('yard', ['>= 0'])
33
32
  s.add_development_dependency('creole', ['>= 0'])
33
+
34
+ unless defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
35
+ s.add_development_dependency('rcov', ['>= 0'])
36
+ end
34
37
  end
File without changes
@@ -1,5 +1,3 @@
1
1
  class Child < ActiveRecord::Base
2
-
3
2
  belongs_to :parent
4
-
5
- end
3
+ end
@@ -1,6 +1,4 @@
1
1
  class Parent < ActiveRecord::Base
2
-
3
2
  has_many :children
4
3
  accepts_nested_attributes_for :children, :allow_destroy => true
5
-
6
- end
4
+ end
@@ -5,4 +5,3 @@
5
5
  ul
6
6
  = f.fields_for :children do |c|
7
7
  li= c.text_field :name
8
- = f.submit
File without changes
@@ -1,10 +1,10 @@
1
1
  # Configure Rails Envinronment
2
2
  ENV["RAILS_ENV"] = "test"
3
3
 
4
- require File.expand_path("../dummy/config/environment.rb", __FILE__)
4
+ require File.expand_path("../../config/environment.rb", __FILE__)
5
5
  require "rails/test_help"
6
6
 
7
7
  Rails.backtrace_cleaner.remove_silencers!
8
8
 
9
9
  # Run any available migration
10
- ActiveRecord::Migrator.migrate File.expand_path("../dummy/db/migrate/", __FILE__)
10
+ ActiveRecord::Migrator.migrate File.expand_path("../../db/migrate/", __FILE__)
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/test_helper')
1
+ require File.expand_path('../helper', __FILE__)
2
2
 
3
3
  class TestSlimRails < ActionController::IntegrationTest
4
4
  test "normal view" do
@@ -54,7 +54,7 @@ class TestSlimRails < ActionController::IntegrationTest
54
54
  '<h2>Children</h2>'+
55
55
  '<ul><li><input id="parent_children_attributes_0_name" name="parent[children_attributes][0][name]" size="30" type="text" value="c1" /></li>'+
56
56
  '<input id="parent_children_attributes_0_id" name="parent[children_attributes][0][id]" type="hidden" value="1" /></ul>'+
57
- '<input id="parent_submit" name="commit" type="submit" value="Update Parent" /></form>'
57
+ '</form>'
58
58
  end
59
59
 
60
60
  protected
@@ -62,13 +62,13 @@ end
62
62
  class Env
63
63
  attr_reader :var
64
64
 
65
- class HtmlSafeString < String
65
+ class ::HtmlSafeString < String
66
66
  def html_safe?
67
67
  true
68
68
  end
69
69
  end
70
70
 
71
- class HtmlUnsafeString < String
71
+ class ::HtmlUnsafeString < String
72
72
  def html_safe?
73
73
  false
74
74
  end
@@ -71,6 +71,15 @@ h1#title This is my title
71
71
  assert_html '<h1 id="title">This is my title</h1><div class="hello world" id="notice">Hello World from @env</div>', source
72
72
  end
73
73
 
74
+ def test_render_with_overwritten_default_tag
75
+ source = %q{
76
+ #notice.hello.world
77
+ = hello_world
78
+ }
79
+
80
+ assert_html '<section class="hello world" id="notice">Hello World from @env</section>', source, :default_tag => 'section'
81
+ end
82
+
74
83
  def test_render_with_text_block
75
84
  source = %q{
76
85
  p
@@ -19,7 +19,17 @@ p = hello_world + \
19
19
  unknown_ruby_method
20
20
  }
21
21
 
22
- assert_ruby_error NameError, "test.slim:4", source, :file => 'test.slim'
22
+ # FIXME: Remove this hack!
23
+ # This is actually a jruby issue. Jruby reports a wrong
24
+ # line number 1 in this case:
25
+ #
26
+ # test = 1+\
27
+ # unknown_variable
28
+ if RUBY_PLATFORM == "java"
29
+ assert_ruby_error NameError, "test.slim:2", source, :file => 'test.slim'
30
+ else
31
+ assert_ruby_error NameError, "test.slim:4", source, :file => 'test.slim'
32
+ end
23
33
  end
24
34
 
25
35
  def test_broken_output_line2
@@ -9,6 +9,14 @@ p id="a#{id_helper}b" = hello_world
9
9
  assert_html '<p id="anoticeb">Hello World from @env</p>', source
10
10
  end
11
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
+
12
20
  def test_interpolation_in_text
13
21
  source = %q{
14
22
  p
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slim
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,34 +11,34 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2011-08-07 00:00:00.000000000 -04:00
14
+ date: 2011-08-26 00:00:00.000000000 -04:00
15
15
  default_executable:
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: temple
19
- requirement: &2153659280 !ruby/object:Gem::Requirement
19
+ requirement: &2161719440 !ruby/object:Gem::Requirement
20
20
  none: false
21
21
  requirements:
22
22
  - - ~>
23
23
  - !ruby/object:Gem::Version
24
- version: 0.3.0
24
+ version: 0.3.3
25
25
  type: :runtime
26
26
  prerelease: false
27
- version_requirements: *2153659280
27
+ version_requirements: *2161719440
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: tilt
30
- requirement: &2153658760 !ruby/object:Gem::Requirement
30
+ requirement: &2161718920 !ruby/object:Gem::Requirement
31
31
  none: false
32
32
  requirements:
33
33
  - - ~>
34
34
  - !ruby/object:Gem::Version
35
- version: '1.2'
35
+ version: 1.3.2
36
36
  type: :runtime
37
37
  prerelease: false
38
- version_requirements: *2153658760
38
+ version_requirements: *2161718920
39
39
  - !ruby/object:Gem::Dependency
40
40
  name: rake
41
- requirement: &2153658280 !ruby/object:Gem::Requirement
41
+ requirement: &2161718440 !ruby/object:Gem::Requirement
42
42
  none: false
43
43
  requirements:
44
44
  - - ! '>='
@@ -46,10 +46,10 @@ dependencies:
46
46
  version: 0.8.7
47
47
  type: :development
48
48
  prerelease: false
49
- version_requirements: *2153658280
49
+ version_requirements: *2161718440
50
50
  - !ruby/object:Gem::Dependency
51
51
  name: haml
52
- requirement: &2153657800 !ruby/object:Gem::Requirement
52
+ requirement: &2161717960 !ruby/object:Gem::Requirement
53
53
  none: false
54
54
  requirements:
55
55
  - - ! '>='
@@ -57,10 +57,10 @@ dependencies:
57
57
  version: 3.1.0
58
58
  type: :development
59
59
  prerelease: false
60
- version_requirements: *2153657800
60
+ version_requirements: *2161717960
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: sass
63
- requirement: &2153657320 !ruby/object:Gem::Requirement
63
+ requirement: &2152313300 !ruby/object:Gem::Requirement
64
64
  none: false
65
65
  requirements:
66
66
  - - ! '>='
@@ -68,10 +68,10 @@ dependencies:
68
68
  version: 3.1.0
69
69
  type: :development
70
70
  prerelease: false
71
- version_requirements: *2153657320
71
+ version_requirements: *2152313300
72
72
  - !ruby/object:Gem::Dependency
73
73
  name: minitest
74
- requirement: &2153656840 !ruby/object:Gem::Requirement
74
+ requirement: &2152312820 !ruby/object:Gem::Requirement
75
75
  none: false
76
76
  requirements:
77
77
  - - ! '>='
@@ -79,10 +79,10 @@ dependencies:
79
79
  version: '0'
80
80
  type: :development
81
81
  prerelease: false
82
- version_requirements: *2153656840
82
+ version_requirements: *2152312820
83
83
  - !ruby/object:Gem::Dependency
84
- name: rcov
85
- requirement: &2153656360 !ruby/object:Gem::Requirement
84
+ name: rdiscount
85
+ requirement: &2152312340 !ruby/object:Gem::Requirement
86
86
  none: false
87
87
  requirements:
88
88
  - - ! '>='
@@ -90,10 +90,10 @@ dependencies:
90
90
  version: '0'
91
91
  type: :development
92
92
  prerelease: false
93
- version_requirements: *2153656360
93
+ version_requirements: *2152312340
94
94
  - !ruby/object:Gem::Dependency
95
- name: rdiscount
96
- requirement: &2153655880 !ruby/object:Gem::Requirement
95
+ name: liquid
96
+ requirement: &2152311860 !ruby/object:Gem::Requirement
97
97
  none: false
98
98
  requirements:
99
99
  - - ! '>='
@@ -101,10 +101,10 @@ dependencies:
101
101
  version: '0'
102
102
  type: :development
103
103
  prerelease: false
104
- version_requirements: *2153655880
104
+ version_requirements: *2152311860
105
105
  - !ruby/object:Gem::Dependency
106
- name: liquid
107
- requirement: &2153655400 !ruby/object:Gem::Requirement
106
+ name: yard
107
+ requirement: &2152311380 !ruby/object:Gem::Requirement
108
108
  none: false
109
109
  requirements:
110
110
  - - ! '>='
@@ -112,10 +112,10 @@ dependencies:
112
112
  version: '0'
113
113
  type: :development
114
114
  prerelease: false
115
- version_requirements: *2153655400
115
+ version_requirements: *2152311380
116
116
  - !ruby/object:Gem::Dependency
117
- name: yard
118
- requirement: &2153654920 !ruby/object:Gem::Requirement
117
+ name: creole
118
+ requirement: &2152310900 !ruby/object:Gem::Requirement
119
119
  none: false
120
120
  requirements:
121
121
  - - ! '>='
@@ -123,10 +123,10 @@ dependencies:
123
123
  version: '0'
124
124
  type: :development
125
125
  prerelease: false
126
- version_requirements: *2153654920
126
+ version_requirements: *2152310900
127
127
  - !ruby/object:Gem::Dependency
128
- name: creole
129
- requirement: &2153654440 !ruby/object:Gem::Requirement
128
+ name: rcov
129
+ requirement: &2152310380 !ruby/object:Gem::Requirement
130
130
  none: false
131
131
  requirements:
132
132
  - - ! '>='
@@ -134,7 +134,7 @@ dependencies:
134
134
  version: '0'
135
135
  type: :development
136
136
  prerelease: false
137
- version_requirements: *2153654440
137
+ version_requirements: *2152310380
138
138
  description: Slim is a template language whose goal is reduce the syntax to the essential
139
139
  parts without becoming cryptic.
140
140
  email:
@@ -149,17 +149,18 @@ extra_rdoc_files:
149
149
  files:
150
150
  - .gemtest
151
151
  - .gitignore
152
+ - .travis.yml
152
153
  - .yardopts
153
154
  - CHANGES
154
155
  - Gemfile
155
156
  - LICENSE
156
157
  - README.md
157
158
  - Rakefile
159
+ - benchmarks/complex.erb
160
+ - benchmarks/complex.haml
161
+ - benchmarks/complex.slim
162
+ - benchmarks/complex_view.rb
158
163
  - benchmarks/run.rb
159
- - benchmarks/src/complex.erb
160
- - benchmarks/src/complex.haml
161
- - benchmarks/src/complex.slim
162
- - benchmarks/src/complex_view.rb
163
164
  - bin/slimrb
164
165
  - extra/slim-mode.el
165
166
  - extra/test.slim
@@ -178,47 +179,47 @@ files:
178
179
  - lib/slim/version.rb
179
180
  - lib/slim/wrapper.rb
180
181
  - slim.gemspec
181
- - test/helper.rb
182
- - test/integration/rails/dummy/Rakefile
183
- - test/integration/rails/dummy/app/controllers/application_controller.rb
184
- - test/integration/rails/dummy/app/controllers/parents_controller.rb
185
- - test/integration/rails/dummy/app/controllers/slim_controller.rb
186
- - test/integration/rails/dummy/app/helpers/application_helper.rb
187
- - test/integration/rails/dummy/app/models/child.rb
188
- - test/integration/rails/dummy/app/models/parent.rb
189
- - test/integration/rails/dummy/app/views/layouts/application.html.slim
190
- - test/integration/rails/dummy/app/views/parents/_form.html.slim
191
- - test/integration/rails/dummy/app/views/parents/edit.html.slim
192
- - test/integration/rails/dummy/app/views/parents/new.html.slim
193
- - test/integration/rails/dummy/app/views/parents/show.html.slim
194
- - test/integration/rails/dummy/app/views/slim/_partial.html.slim
195
- - test/integration/rails/dummy/app/views/slim/content_for.html.slim
196
- - test/integration/rails/dummy/app/views/slim/erb.html.erb
197
- - test/integration/rails/dummy/app/views/slim/integers.html.slim
198
- - test/integration/rails/dummy/app/views/slim/nil.html.slim
199
- - test/integration/rails/dummy/app/views/slim/no_layout.html.slim
200
- - test/integration/rails/dummy/app/views/slim/normal.html.slim
201
- - test/integration/rails/dummy/app/views/slim/partial.html.slim
202
- - test/integration/rails/dummy/app/views/slim/variables.html.slim
203
- - test/integration/rails/dummy/config.ru
204
- - test/integration/rails/dummy/config/application.rb
205
- - test/integration/rails/dummy/config/boot.rb
206
- - test/integration/rails/dummy/config/database.yml
207
- - test/integration/rails/dummy/config/environment.rb
208
- - test/integration/rails/dummy/config/environments/development.rb
209
- - test/integration/rails/dummy/config/environments/production.rb
210
- - test/integration/rails/dummy/config/environments/test.rb
211
- - test/integration/rails/dummy/config/initializers/backtrace_silencers.rb
212
- - test/integration/rails/dummy/config/initializers/inflections.rb
213
- - test/integration/rails/dummy/config/initializers/mime_types.rb
214
- - test/integration/rails/dummy/config/initializers/secret_token.rb
215
- - test/integration/rails/dummy/config/initializers/session_store.rb
216
- - test/integration/rails/dummy/config/locales/en.yml
217
- - test/integration/rails/dummy/config/routes.rb
218
- - test/integration/rails/dummy/db/migrate/20101220223037_parents_and_children.rb
219
- - test/integration/rails/dummy/script/rails
220
- - test/integration/rails/test_helper.rb
221
- - test/integration/rails/test_slim_rails.rb
182
+ - test/rails/Rakefile
183
+ - test/rails/app/controllers/application_controller.rb
184
+ - test/rails/app/controllers/parents_controller.rb
185
+ - test/rails/app/controllers/slim_controller.rb
186
+ - test/rails/app/helpers/application_helper.rb
187
+ - test/rails/app/models/child.rb
188
+ - test/rails/app/models/parent.rb
189
+ - test/rails/app/views/layouts/application.html.slim
190
+ - test/rails/app/views/parents/_form.html.slim
191
+ - test/rails/app/views/parents/edit.html.slim
192
+ - test/rails/app/views/parents/new.html.slim
193
+ - test/rails/app/views/parents/show.html.slim
194
+ - test/rails/app/views/slim/_partial.html.slim
195
+ - test/rails/app/views/slim/content_for.html.slim
196
+ - test/rails/app/views/slim/erb.html.erb
197
+ - test/rails/app/views/slim/integers.html.slim
198
+ - test/rails/app/views/slim/nil.html.slim
199
+ - test/rails/app/views/slim/no_layout.html.slim
200
+ - test/rails/app/views/slim/normal.html.slim
201
+ - test/rails/app/views/slim/partial.html.slim
202
+ - test/rails/app/views/slim/variables.html.slim
203
+ - test/rails/config.ru
204
+ - test/rails/config/application.rb
205
+ - test/rails/config/boot.rb
206
+ - test/rails/config/database.yml
207
+ - test/rails/config/environment.rb
208
+ - test/rails/config/environments/development.rb
209
+ - test/rails/config/environments/production.rb
210
+ - test/rails/config/environments/test.rb
211
+ - test/rails/config/initializers/backtrace_silencers.rb
212
+ - test/rails/config/initializers/inflections.rb
213
+ - test/rails/config/initializers/mime_types.rb
214
+ - test/rails/config/initializers/secret_token.rb
215
+ - test/rails/config/initializers/session_store.rb
216
+ - test/rails/config/locales/en.yml
217
+ - test/rails/config/routes.rb
218
+ - test/rails/db/migrate/20101220223037_parents_and_children.rb
219
+ - test/rails/script/rails
220
+ - test/rails/test/helper.rb
221
+ - test/rails/test/test_slim_rails.rb
222
+ - test/slim/helper.rb
222
223
  - test/slim/test_chain_manipulation.rb
223
224
  - test/slim/test_code_blocks.rb
224
225
  - test/slim/test_code_escaping.rb