slim 1.0.1 → 1.0.2

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.
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