slim 2.1.0 → 3.0.0.beta.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.
- checksums.yaml +4 -4
- data/.travis.yml +10 -24
- data/CHANGES +8 -0
- data/Gemfile +5 -7
- data/README.jp.md +29 -31
- data/README.md +34 -34
- data/Rakefile +9 -7
- data/benchmarks/context.rb +3 -3
- data/benchmarks/run-benchmarks.rb +9 -9
- data/benchmarks/view.slim +1 -1
- data/doc/jp/logic_less.md +7 -7
- data/doc/logic_less.md +7 -7
- data/lib/slim/command.rb +6 -16
- data/lib/slim/embedded.rb +10 -13
- data/lib/slim/engine.rb +21 -23
- data/lib/slim/erb_converter.rb +2 -1
- data/lib/slim/include.rb +2 -2
- data/lib/slim/logic_less.rb +1 -2
- data/lib/slim/logic_less/filter.rb +3 -3
- data/lib/slim/parser.rb +43 -19
- data/lib/slim/smart.rb +3 -3
- data/lib/slim/smart/escaper.rb +1 -1
- data/lib/slim/smart/filter.rb +3 -3
- data/lib/slim/smart/parser.rb +6 -4
- data/lib/slim/splat/builder.rb +9 -4
- data/lib/slim/splat/filter.rb +3 -4
- data/lib/slim/template.rb +5 -5
- data/lib/slim/translator.rb +12 -13
- data/lib/slim/version.rb +1 -1
- data/slim.gemspec +3 -1
- data/test/core/helper.rb +3 -3
- data/test/core/test_code_escaping.rb +14 -14
- data/test/core/test_code_evaluation.rb +1 -1
- data/test/core/test_code_output.rb +1 -1
- data/test/core/test_embedded_engines.rb +16 -16
- data/test/core/test_encoding.rb +4 -4
- data/test/core/test_html_attributes.rb +9 -9
- data/test/core/test_html_structure.rb +20 -20
- data/test/core/test_parser_errors.rb +1 -1
- data/test/core/test_pretty.rb +4 -4
- data/test/core/test_ruby_errors.rb +5 -5
- data/test/core/test_slim_template.rb +2 -2
- data/test/core/test_tabs.rb +5 -5
- data/test/core/test_thread_options.rb +4 -4
- data/test/core/test_unicode.rb +11 -13
- data/test/include/test_include.rb +2 -2
- data/test/literate/TESTS.md +37 -8
- data/test/literate/helper.rb +2 -2
- data/test/logic_less/test_logic_less.rb +37 -37
- data/test/rails/app/controllers/slim_controller.rb +3 -3
- data/test/rails/config/initializers/session_store.rb +1 -1
- data/test/rails/config/routes.rb +4 -4
- data/test/rails/test/test_slim.rb +9 -15
- data/test/smart/test_smart_text.rb +5 -9
- data/test/translator/test_translator.rb +14 -14
- metadata +7 -7
    
        data/test/literate/TESTS.md
    CHANGED
    
    | @@ -259,7 +259,7 @@ Hello, World! | |
| 259 259 | 
             
            You can also write loops like this
         | 
| 260 260 |  | 
| 261 261 | 
             
            ~~~ slim
         | 
| 262 | 
            -
            - items = [{: | 
| 262 | 
            +
            - items = [{name: 'table', price: 10}, {name: 'chair', price: 5}]
         | 
| 263 263 | 
             
            table#items
         | 
| 264 264 | 
             
              - for item in items do
         | 
| 265 265 | 
             
                tr
         | 
| @@ -293,7 +293,7 @@ which renders as | |
| 293 293 | 
             
            The `do` keyword can be omitted.
         | 
| 294 294 |  | 
| 295 295 | 
             
            ~~~ slim
         | 
| 296 | 
            -
            - items = [{: | 
| 296 | 
            +
            - items = [{name: 'table', price: 10}, {name: 'chair', price: 5}]
         | 
| 297 297 | 
             
            table#items
         | 
| 298 298 | 
             
              - for item in items
         | 
| 299 299 | 
             
                tr
         | 
| @@ -1099,7 +1099,7 @@ with the :tag key. | |
| 1099 1099 | 
             
            ~~~ slim
         | 
| 1100 1100 | 
             
            ruby:
         | 
| 1101 1101 | 
             
              def a_unless_current
         | 
| 1102 | 
            -
                @page_current ? {: | 
| 1102 | 
            +
                @page_current ? {tag: 'span'} : {tag: 'a', href: 'http://slim-lang.com/'}
         | 
| 1103 1103 | 
             
              end
         | 
| 1104 1104 | 
             
            - @page_current = true
         | 
| 1105 1105 | 
             
            *a_unless_current Link
         | 
| @@ -1120,7 +1120,7 @@ renders as | |
| 1120 1120 | 
             
            We add tag shortcuts by setting the option `:shortcut`.
         | 
| 1121 1121 |  | 
| 1122 1122 | 
             
            ~~~ options
         | 
| 1123 | 
            -
            :shortcut => {'c' => {: | 
| 1123 | 
            +
            :shortcut => {'c' => {tag: 'container'}, 'sec' => {tag:'section'}, '#' => {attr: 'id'}, '.' => {attr: 'class'} }
         | 
| 1124 1124 | 
             
            ~~~
         | 
| 1125 1125 |  | 
| 1126 1126 | 
             
            ~~~ slim
         | 
| @@ -1140,7 +1140,7 @@ renders to | |
| 1140 1140 | 
             
            We add `&` to create a shortcut for the input elements with type attribute by setting the option `:shortcut`.
         | 
| 1141 1141 |  | 
| 1142 1142 | 
             
            ~~~ options
         | 
| 1143 | 
            -
            :shortcut => {'&' => {: | 
| 1143 | 
            +
            :shortcut => {'&' => {tag: 'input', attr: 'type'}, '#' => {attr: 'id'}, '.' => {attr: 'class'} }
         | 
| 1144 1144 | 
             
            ~~~
         | 
| 1145 1145 |  | 
| 1146 1146 | 
             
            ~~~ slim
         | 
| @@ -1158,7 +1158,7 @@ renders to | |
| 1158 1158 | 
             
            This is stupid, but you can also use multiple character shortcuts.
         | 
| 1159 1159 |  | 
| 1160 1160 | 
             
            ~~~ options
         | 
| 1161 | 
            -
            :shortcut => {'&' => {: | 
| 1161 | 
            +
            :shortcut => {'&' => {tag: 'input', attr: 'type'}, '#<' => {attr: 'id'}, '#>' => {attr: 'class'} }
         | 
| 1162 1162 | 
             
            ~~~
         | 
| 1163 1163 |  | 
| 1164 1164 | 
             
            ~~~ slim
         | 
| @@ -1176,7 +1176,7 @@ renders to | |
| 1176 1176 | 
             
            You can also set multiple attributes per shortcut.
         | 
| 1177 1177 |  | 
| 1178 1178 | 
             
            ~~~ options
         | 
| 1179 | 
            -
            :shortcut => {'.' => {: | 
| 1179 | 
            +
            :shortcut => {'.' => {attr: %w(id class)} }
         | 
| 1180 1180 | 
             
            ~~~
         | 
| 1181 1181 |  | 
| 1182 1182 | 
             
            ~~~ slim
         | 
| @@ -1192,7 +1192,7 @@ renders to | |
| 1192 1192 | 
             
            Shortcuts can also have multiple characters.
         | 
| 1193 1193 |  | 
| 1194 1194 | 
             
            ~~~ options
         | 
| 1195 | 
            -
            :shortcut => {'.' => {: | 
| 1195 | 
            +
            :shortcut => {'.' => {attr: 'class'}, '#' => {attr: 'id'}, '.#' => {attr: %w(class id)} }
         | 
| 1196 1196 | 
             
            ~~~
         | 
| 1197 1197 |  | 
| 1198 1198 | 
             
            ~~~ slim
         | 
| @@ -1254,6 +1254,35 @@ renders as | |
| 1254 1254 | 
             
            </h1>
         | 
| 1255 1255 | 
             
            ~~~
         | 
| 1256 1256 |  | 
| 1257 | 
            +
            ## Pretty printing of XML
         | 
| 1258 | 
            +
             | 
| 1259 | 
            +
            We can enable XML mode with
         | 
| 1260 | 
            +
             | 
| 1261 | 
            +
            ~~~ options
         | 
| 1262 | 
            +
            :format => :xml
         | 
| 1263 | 
            +
            ~~~
         | 
| 1264 | 
            +
             | 
| 1265 | 
            +
            ~~~ slim
         | 
| 1266 | 
            +
            doctype xml
         | 
| 1267 | 
            +
            document
         | 
| 1268 | 
            +
              closed-element/
         | 
| 1269 | 
            +
              element(boolean-attribute)
         | 
| 1270 | 
            +
                child attribute="value"
         | 
| 1271 | 
            +
                  | content
         | 
| 1272 | 
            +
            ~~~
         | 
| 1273 | 
            +
             | 
| 1274 | 
            +
            ~~~ html
         | 
| 1275 | 
            +
            <?xml version="1.0" encoding="utf-8" ?>
         | 
| 1276 | 
            +
            <document>
         | 
| 1277 | 
            +
              <closed-element />
         | 
| 1278 | 
            +
              <element boolean-attribute="">
         | 
| 1279 | 
            +
                <child attribute="value">
         | 
| 1280 | 
            +
                  content
         | 
| 1281 | 
            +
                </child>
         | 
| 1282 | 
            +
              </element>
         | 
| 1283 | 
            +
            </document>
         | 
| 1284 | 
            +
            ~~~
         | 
| 1285 | 
            +
             | 
| 1257 1286 | 
             
            ## Embedded engines
         | 
| 1258 1287 |  | 
| 1259 1288 | 
             
            ## Configuring Slim
         | 
    
        data/test/literate/helper.rb
    CHANGED
    
    | @@ -4,9 +4,9 @@ require 'slim/translator' | |
| 4 4 | 
             
            require 'slim/grammar'
         | 
| 5 5 | 
             
            require 'minitest/autorun'
         | 
| 6 6 |  | 
| 7 | 
            -
            Slim::Engine.after  Slim::Parser, Temple::Filters::Validator, : | 
| 7 | 
            +
            Slim::Engine.after  Slim::Parser, Temple::Filters::Validator, grammar: Slim::Grammar
         | 
| 8 8 | 
             
            Slim::Engine.before :Pretty, Temple::Filters::Validator
         | 
| 9 | 
            -
            Slim::Engine. | 
| 9 | 
            +
            Slim::Engine.set_options tr: false, logic_less: false
         | 
| 10 10 |  | 
| 11 11 | 
             
            class MiniTest::Spec
         | 
| 12 12 | 
             
              def render(source, options = {}, &block)
         | 
| @@ -5,9 +5,9 @@ class TestSlimLogicLess < TestSlim | |
| 5 5 | 
             
              class Scope
         | 
| 6 6 | 
             
                def initialize
         | 
| 7 7 | 
             
                  @hash = {
         | 
| 8 | 
            -
                    : | 
| 9 | 
            -
                                { : | 
| 10 | 
            -
                                { : | 
| 8 | 
            +
                    person: [
         | 
| 9 | 
            +
                                { name: 'Joe', age: 1, selected: true },
         | 
| 10 | 
            +
                                { name: 'Jack', age: 2 }
         | 
| 11 11 | 
             
                               ]
         | 
| 12 12 | 
             
                  }
         | 
| 13 13 | 
             
                end
         | 
| @@ -25,22 +25,22 @@ p | |
| 25 25 | 
             
            }
         | 
| 26 26 |  | 
| 27 27 | 
             
                hash = {
         | 
| 28 | 
            -
                  : | 
| 29 | 
            -
                  : | 
| 28 | 
            +
                  hello: 'Hello!',
         | 
| 29 | 
            +
                  person: lambda do |&block|
         | 
| 30 30 | 
             
                    %w(Joe Jack).map do |name|
         | 
| 31 | 
            -
                      "<b>#{block.call(: | 
| 31 | 
            +
                      "<b>#{block.call(name: name)}</b>"
         | 
| 32 32 | 
             
                    end.join
         | 
| 33 33 | 
             
                  end,
         | 
| 34 | 
            -
                  : | 
| 34 | 
            +
                  simple: lambda do |&block|
         | 
| 35 35 | 
             
                    "<div class=\"simple\">#{block.call}</div>"
         | 
| 36 36 | 
             
                  end,
         | 
| 37 | 
            -
                  : | 
| 38 | 
            -
                    list = [{: | 
| 37 | 
            +
                  list: lambda do |&block|
         | 
| 38 | 
            +
                    list = [{key: 'First'}, {key: 'Second'}]
         | 
| 39 39 | 
             
                    "<ul>#{block.call(*list)}</ul>"
         | 
| 40 40 | 
             
                  end
         | 
| 41 41 | 
             
                }
         | 
| 42 42 |  | 
| 43 | 
            -
                assert_html '<p><b><div class="name">Joe</div></b><b><div class="name">Jack</div></b><div class="simple"><div class="hello">Hello!</div></div><ul><li>First</li><li>Second</li></ul></p>', source, : | 
| 43 | 
            +
                assert_html '<p><b><div class="name">Joe</div></b><b><div class="name">Jack</div></b><div class="simple"><div class="hello">Hello!</div></div><ul><li>First</li><li>Second</li></ul></p>', source, scope: hash
         | 
| 44 44 | 
             
              end
         | 
| 45 45 |  | 
| 46 46 | 
             
              def test_symbol_hash
         | 
| @@ -51,13 +51,13 @@ p | |
| 51 51 | 
             
            }
         | 
| 52 52 |  | 
| 53 53 | 
             
                hash = {
         | 
| 54 | 
            -
                  : | 
| 55 | 
            -
                    { : | 
| 56 | 
            -
                    { : | 
| 54 | 
            +
                  person: [
         | 
| 55 | 
            +
                    { name: 'Joe', },
         | 
| 56 | 
            +
                    { name: 'Jack', }
         | 
| 57 57 | 
             
                  ]
         | 
| 58 58 | 
             
                }
         | 
| 59 59 |  | 
| 60 | 
            -
                assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, : | 
| 60 | 
            +
                assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, scope: hash
         | 
| 61 61 | 
             
              end
         | 
| 62 62 |  | 
| 63 63 | 
             
              def test_string_access
         | 
| @@ -74,7 +74,7 @@ p | |
| 74 74 | 
             
                  ]
         | 
| 75 75 | 
             
                }
         | 
| 76 76 |  | 
| 77 | 
            -
                assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, : | 
| 77 | 
            +
                assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, scope: hash, dictionary_access: :string
         | 
| 78 78 | 
             
              end
         | 
| 79 79 |  | 
| 80 80 | 
             
              def test_symbol_access
         | 
| @@ -85,13 +85,13 @@ p | |
| 85 85 | 
             
            }
         | 
| 86 86 |  | 
| 87 87 | 
             
                hash = {
         | 
| 88 | 
            -
                  : | 
| 89 | 
            -
                    { : | 
| 90 | 
            -
                    { : | 
| 88 | 
            +
                  person: [
         | 
| 89 | 
            +
                    { name: 'Joe', },
         | 
| 90 | 
            +
                    { name: 'Jack', }
         | 
| 91 91 | 
             
                  ]
         | 
| 92 92 | 
             
                }
         | 
| 93 93 |  | 
| 94 | 
            -
                assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, : | 
| 94 | 
            +
                assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, scope: hash, dictionary_access: :symbol
         | 
| 95 95 | 
             
              end
         | 
| 96 96 |  | 
| 97 97 | 
             
              def test_method_access
         | 
| @@ -113,7 +113,7 @@ p | |
| 113 113 | 
             
                  end
         | 
| 114 114 | 
             
                end
         | 
| 115 115 |  | 
| 116 | 
            -
                assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, : | 
| 116 | 
            +
                assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, scope: object, dictionary_access: :method
         | 
| 117 117 | 
             
              end
         | 
| 118 118 |  | 
| 119 119 | 
             
              def test_instance_variable_access
         | 
| @@ -130,7 +130,7 @@ p | |
| 130 130 | 
             
                                               person
         | 
| 131 131 | 
             
                                             end)
         | 
| 132 132 |  | 
| 133 | 
            -
                assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, : | 
| 133 | 
            +
                assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, scope: object, dictionary_access: :instance_variable
         | 
| 134 134 | 
             
              end
         | 
| 135 135 |  | 
| 136 136 | 
             
              def test_to_s_access
         | 
| @@ -141,13 +141,13 @@ p | |
| 141 141 | 
             
            }
         | 
| 142 142 |  | 
| 143 143 | 
             
                hash = {
         | 
| 144 | 
            -
                  : | 
| 144 | 
            +
                  people: [
         | 
| 145 145 | 
             
                    'Joe',
         | 
| 146 146 | 
             
                    'Jack'
         | 
| 147 147 | 
             
                  ]
         | 
| 148 148 | 
             
                }
         | 
| 149 149 |  | 
| 150 | 
            -
                assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, : | 
| 150 | 
            +
                assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, scope: hash, dictionary_access: :symbol
         | 
| 151 151 | 
             
              end
         | 
| 152 152 |  | 
| 153 153 | 
             
              def test_string_hash
         | 
| @@ -164,7 +164,7 @@ p | |
| 164 164 | 
             
                  ]
         | 
| 165 165 | 
             
                }
         | 
| 166 166 |  | 
| 167 | 
            -
                assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, : | 
| 167 | 
            +
                assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, scope: hash
         | 
| 168 168 | 
             
              end
         | 
| 169 169 |  | 
| 170 170 | 
             
              def test_dictionary_option
         | 
| @@ -174,7 +174,7 @@ p | |
| 174 174 | 
             
              .name = name
         | 
| 175 175 | 
             
            }
         | 
| 176 176 |  | 
| 177 | 
            -
                assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, : | 
| 177 | 
            +
                assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, scope: Scope.new, dictionary: '@hash'
         | 
| 178 178 | 
             
              end
         | 
| 179 179 |  | 
| 180 180 | 
             
              def test_flag_section
         | 
| @@ -188,14 +188,14 @@ p | |
| 188 188 | 
             
            }
         | 
| 189 189 |  | 
| 190 190 | 
             
                hash = {
         | 
| 191 | 
            -
                  : | 
| 192 | 
            -
                  : | 
| 193 | 
            -
                    { : | 
| 194 | 
            -
                    { : | 
| 191 | 
            +
                  show_person: true,
         | 
| 192 | 
            +
                  person: [
         | 
| 193 | 
            +
                    { name: 'Joe', },
         | 
| 194 | 
            +
                    { name: 'Jack', }
         | 
| 195 195 | 
             
                  ]
         | 
| 196 196 | 
             
                }
         | 
| 197 197 |  | 
| 198 | 
            -
                assert_html '<p><div class="name">Joe</div><div class="name">Jack</div>shown</p>', source, : | 
| 198 | 
            +
                assert_html '<p><div class="name">Joe</div><div class="name">Jack</div>shown</p>', source, scope: hash
         | 
| 199 199 | 
             
              end
         | 
| 200 200 |  | 
| 201 201 | 
             
              def test_inverted_section
         | 
| @@ -211,7 +211,7 @@ p | |
| 211 211 |  | 
| 212 212 | 
             
                hash = {}
         | 
| 213 213 |  | 
| 214 | 
            -
                assert_html '<p>No person No person 2</p>', source, : | 
| 214 | 
            +
                assert_html '<p>No person No person 2</p>', source, scope: hash
         | 
| 215 215 | 
             
              end
         | 
| 216 216 |  | 
| 217 217 | 
             
              def test_escaped_interpolation
         | 
| @@ -232,7 +232,7 @@ p | |
| 232 232 | 
             
                Person
         | 
| 233 233 | 
             
            }
         | 
| 234 234 |  | 
| 235 | 
            -
                assert_html '<p><b name="Joe">Person</b><a id="Joe">1</a><span class="Joe"><Person></Person></span><b name="Jack">Person</b><a id="Jack">2</a><span class="Jack"><Person></Person></span></p>', source, : | 
| 235 | 
            +
                assert_html '<p><b name="Joe">Person</b><a id="Joe">1</a><span class="Joe"><Person></Person></span><b name="Jack">Person</b><a id="Jack">2</a><span class="Jack"><Person></Person></span></p>', source, scope: Scope.new, dictionary: '@hash'
         | 
| 236 236 | 
             
              end
         | 
| 237 237 |  | 
| 238 238 | 
             
              def test_boolean_attributes
         | 
| @@ -242,7 +242,7 @@ p | |
| 242 242 | 
             
               input checked=selected = name
         | 
| 243 243 | 
             
            }
         | 
| 244 244 |  | 
| 245 | 
            -
                assert_html '<p><input checked="">Joe</input><input>Jack</input></p>', source, : | 
| 245 | 
            +
                assert_html '<p><input checked="">Joe</input><input>Jack</input></p>', source, scope: Scope.new, dictionary: '@hash'
         | 
| 246 246 | 
             
              end
         | 
| 247 247 |  | 
| 248 248 | 
             
              def test_sections
         | 
| @@ -251,7 +251,7 @@ p | |
| 251 251 | 
             
             - person
         | 
| 252 252 | 
             
              .name = name
         | 
| 253 253 | 
             
            }
         | 
| 254 | 
            -
                assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, : | 
| 254 | 
            +
                assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, dictionary: 'ViewEnv.new'
         | 
| 255 255 | 
             
              end
         | 
| 256 256 |  | 
| 257 257 | 
             
              def test_with_array
         | 
| @@ -261,14 +261,14 @@ ul | |
| 261 261 | 
             
              li = name
         | 
| 262 262 | 
             
              li = city
         | 
| 263 263 | 
             
            }
         | 
| 264 | 
            -
                assert_html '<ul><li>Andy</li><li>Atlanta</li><li>Fred</li><li>Melbourne</li><li>Daniel</li><li>Karlsruhe</li></ul>', source, : | 
| 264 | 
            +
                assert_html '<ul><li>Andy</li><li>Atlanta</li><li>Fred</li><li>Melbourne</li><li>Daniel</li><li>Karlsruhe</li></ul>', source, dictionary: 'ViewEnv.new'
         | 
| 265 265 | 
             
              end
         | 
| 266 266 |  | 
| 267 267 | 
             
              def test_method
         | 
| 268 268 | 
             
                source = %q{
         | 
| 269 269 | 
             
            a href=output_number Link
         | 
| 270 270 | 
             
            }
         | 
| 271 | 
            -
                assert_html '<a href="1337">Link</a>', source, : | 
| 271 | 
            +
                assert_html '<a href="1337">Link</a>', source, dictionary: 'ViewEnv.new'
         | 
| 272 272 | 
             
              end
         | 
| 273 273 |  | 
| 274 274 | 
             
              def test_conditional_parent
         | 
| @@ -279,7 +279,7 @@ a href=output_number Link | |
| 279 279 | 
             
            - next_page
         | 
| 280 280 | 
             
              li.next
         | 
| 281 281 | 
             
                a href=next_page Newer}
         | 
| 282 | 
            -
                assert_html'<li class="previous"><a href="prev">Older</a></li><li class="next"><a href="next">Newer</a></li>', source, : | 
| 282 | 
            +
                assert_html'<li class="previous"><a href="prev">Older</a></li><li class="next"><a href="next">Newer</a></li>', source, scope: {prev_page: 'prev', next_page: 'next'}
         | 
| 283 283 | 
             
              end
         | 
| 284 284 |  | 
| 285 285 | 
             
              def test_render_with_yield
         | 
| @@ -6,7 +6,7 @@ class SlimController < ApplicationController | |
| 6 6 | 
             
              end
         | 
| 7 7 |  | 
| 8 8 | 
             
              def no_layout
         | 
| 9 | 
            -
                render : | 
| 9 | 
            +
                render layout: false
         | 
| 10 10 | 
             
              end
         | 
| 11 11 |  | 
| 12 12 | 
             
              def variables
         | 
| @@ -18,7 +18,7 @@ class SlimController < ApplicationController | |
| 18 18 |  | 
| 19 19 | 
             
              def streaming
         | 
| 20 20 | 
             
                @hello = "Hello Streaming!"
         | 
| 21 | 
            -
                render :content_for, : | 
| 21 | 
            +
                render :content_for, stream: true
         | 
| 22 22 | 
             
              end
         | 
| 23 23 |  | 
| 24 24 | 
             
              def integers
         | 
| @@ -26,7 +26,7 @@ class SlimController < ApplicationController | |
| 26 26 | 
             
              end
         | 
| 27 27 |  | 
| 28 28 | 
             
              def thread_options
         | 
| 29 | 
            -
                Slim::Engine.with_options(: | 
| 29 | 
            +
                Slim::Engine.with_options(shortcut: {'@' => { attr: params[:attr] }}) do
         | 
| 30 30 | 
             
                  render
         | 
| 31 31 | 
             
                end
         | 
| 32 32 | 
             
              end
         | 
| @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            # Be sure to restart your server when you modify this file.
         | 
| 2 2 |  | 
| 3 | 
            -
            Dummy::Application.config.session_store :cookie_store, : | 
| 3 | 
            +
            Dummy::Application.config.session_store :cookie_store, key: '_dummy_session'
         | 
| 4 4 |  | 
| 5 5 | 
             
            # Use the database for sessions instead of the cookie-based default,
         | 
| 6 6 | 
             
            # which shouldn't be used to store highly confidential information
         | 
    
        data/test/rails/config/routes.rb
    CHANGED
    
    | @@ -9,8 +9,8 @@ Dummy::Application.routes.draw do | |
| 9 9 | 
             
              # Keep in mind you can assign values other than :controller and :action
         | 
| 10 10 |  | 
| 11 11 | 
             
              # Sample of named route:
         | 
| 12 | 
            -
              #   match 'products/:id/purchase' => 'catalog#purchase', : | 
| 13 | 
            -
              # This route can be invoked with purchase_url(: | 
| 12 | 
            +
              #   match 'products/:id/purchase' => 'catalog#purchase', as: :purchase
         | 
| 13 | 
            +
              # This route can be invoked with purchase_url(id: product.id)
         | 
| 14 14 |  | 
| 15 15 | 
             
              # Sample resource route (maps HTTP verbs to controller actions automatically):
         | 
| 16 16 | 
             
              #   resources :products
         | 
| @@ -37,7 +37,7 @@ Dummy::Application.routes.draw do | |
| 37 37 | 
             
              #   resources :products do
         | 
| 38 38 | 
             
              #     resources :comments
         | 
| 39 39 | 
             
              #     resources :sales do
         | 
| 40 | 
            -
              #       get 'recent', : | 
| 40 | 
            +
              #       get 'recent', on: :collection
         | 
| 41 41 | 
             
              #     end
         | 
| 42 42 | 
             
              #   end
         | 
| 43 43 |  | 
| @@ -50,7 +50,7 @@ Dummy::Application.routes.draw do | |
| 50 50 |  | 
| 51 51 | 
             
              # You can have the root of your site routed with "root"
         | 
| 52 52 | 
             
              # just remember to delete public/index.html.
         | 
| 53 | 
            -
              # root : | 
| 53 | 
            +
              # root to: "welcome#index"
         | 
| 54 54 |  | 
| 55 55 | 
             
              # See how all your routes lay out with "rake routes"
         | 
| 56 56 |  | 
| @@ -33,7 +33,7 @@ class TestSlim < ActionDispatch::IntegrationTest | |
| 33 33 | 
             
              test "view without a layout" do
         | 
| 34 34 | 
             
                get "slim/no_layout"
         | 
| 35 35 | 
             
                assert_template "slim/no_layout"
         | 
| 36 | 
            -
                assert_html "<h1>Hello Slim without a layout!</h1>", : | 
| 36 | 
            +
                assert_html "<h1>Hello Slim without a layout!</h1>", skip_layout: true
         | 
| 37 37 | 
             
              end
         | 
| 38 38 |  | 
| 39 39 | 
             
              test "view with variables" do
         | 
| @@ -46,17 +46,11 @@ class TestSlim < ActionDispatch::IntegrationTest | |
| 46 46 | 
             
                assert_html "<h1>Hello Slim!</h1><p>With a partial!</p>"
         | 
| 47 47 | 
             
              end
         | 
| 48 48 |  | 
| 49 | 
            -
               | 
| 50 | 
            -
               | 
| 51 | 
            -
             | 
| 52 | 
            -
                 | 
| 53 | 
            -
                 | 
| 54 | 
            -
                  get "slim/streaming"
         | 
| 55 | 
            -
                  output = "2f\r\n<!DOCTYPE html><html><head><title>Dummy</title>\r\nd\r\n</head><body>\r\n17\r\nHeading set from a view\r\n15\r\n<div class=\"content\">\r\n53\r\n<p>Page content</p><h1><p>Hello Streaming!</p></h1><h2><p>Hello Streaming!</p></h2>\r\n14\r\n</div></body></html>\r\n0\r\n\r\n"
         | 
| 56 | 
            -
                  assert_equal output, @response.body
         | 
| 57 | 
            -
                end
         | 
| 58 | 
            -
              else
         | 
| 59 | 
            -
                puts 'Streaming test disabled'
         | 
| 49 | 
            +
              puts 'Streaming test enabled'
         | 
| 50 | 
            +
              test "streaming" do
         | 
| 51 | 
            +
                get "slim/streaming"
         | 
| 52 | 
            +
                output = "2f\r\n<!DOCTYPE html><html><head><title>Dummy</title>\r\nd\r\n</head><body>\r\n17\r\nHeading set from a view\r\n15\r\n<div class=\"content\">\r\n53\r\n<p>Page content</p><h1><p>Hello Streaming!</p></h1><h2><p>Hello Streaming!</p></h2>\r\n14\r\n</div></body></html>\r\n0\r\n\r\n"
         | 
| 53 | 
            +
                assert_equal output, @response.body
         | 
| 60 54 | 
             
              end
         | 
| 61 55 |  | 
| 62 56 | 
             
              test "render integers" do
         | 
| @@ -65,15 +59,15 @@ class TestSlim < ActionDispatch::IntegrationTest | |
| 65 59 | 
             
              end
         | 
| 66 60 |  | 
| 67 61 | 
             
              test "render thread_options" do
         | 
| 68 | 
            -
                get "slim/thread_options", : | 
| 62 | 
            +
                get "slim/thread_options", attr: 'role'
         | 
| 69 63 | 
             
                assert_html '<p role="empty">Test</p>'
         | 
| 70 | 
            -
                get "slim/thread_options", : | 
| 64 | 
            +
                get "slim/thread_options", attr: 'id' # Overwriting doesn't work because of caching
         | 
| 71 65 | 
             
                assert_html '<p role="empty">Test</p>'
         | 
| 72 66 | 
             
              end
         | 
| 73 67 |  | 
| 74 68 | 
             
              test "content_for" do
         | 
| 75 69 | 
             
                get "slim/content_for"
         | 
| 76 | 
            -
                assert_html "<p>Page content</p><h1><p>Hello Slim!</p></h1><h2><p>Hello Slim!</p></h2>", : | 
| 70 | 
            +
                assert_html "<p>Page content</p><h1><p>Hello Slim!</p></h1><h2><p>Hello Slim!</p></h2>", heading: 'Heading set from a view'
         | 
| 77 71 | 
             
              end
         | 
| 78 72 |  | 
| 79 73 | 
             
              test "form_for" do
         | 
| @@ -112,7 +112,7 @@ Escaped &#xx; &#1f; &;.</p>} | |
| 112 112 | 
             
              end
         | 
| 113 113 |  | 
| 114 114 | 
             
              def test_smart_text_disabled_escaping
         | 
| 115 | 
            -
                Slim::Engine.with_options( : | 
| 115 | 
            +
                Slim::Engine.with_options( smart_text_escaping: false ) do
         | 
| 116 116 | 
             
                  source = %q{
         | 
| 117 117 | 
             
            p Not escaped <&>.
         | 
| 118 118 | 
             
            | Not escaped <&>.
         | 
| @@ -250,7 +250,7 @@ which stops | |
| 250 250 |  | 
| 251 251 | 
             
                assert_html result, source
         | 
| 252 252 | 
             
              end
         | 
| 253 | 
            -
             | 
| 253 | 
            +
             | 
| 254 254 | 
             
              # Without unicode support, we can't distinguish uppercase and lowercase
         | 
| 255 255 | 
             
              # unicode characters reliably. So we only test the basic text, not tag names.
         | 
| 256 256 | 
             
              def test_basic_unicode_smart_text
         | 
| @@ -272,11 +272,8 @@ p | |
| 272 272 | 
             
                assert_html result, source
         | 
| 273 273 | 
             
              end
         | 
| 274 274 |  | 
| 275 | 
            -
               | 
| 276 | 
            -
             | 
| 277 | 
            -
                def test_unicode_smart_text
         | 
| 278 | 
            -
                
         | 
| 279 | 
            -
                  source = %q{
         | 
| 275 | 
            +
              def test_unicode_smart_text
         | 
| 276 | 
            +
                source = %q{
         | 
| 280 277 | 
             
            p
         | 
| 281 278 | 
             
              是
         | 
| 282 279 | 
             
              čip
         | 
| @@ -294,7 +291,6 @@ p | |
| 294 291 | 
             
            šíp
         | 
| 295 292 | 
             
            <div class="řek">.</div></p>}
         | 
| 296 293 |  | 
| 297 | 
            -
             | 
| 298 | 
            -
                end
         | 
| 294 | 
            +
                assert_html result, source
         | 
| 299 295 | 
             
              end
         | 
| 300 296 | 
             
            end
         |