slim 5.1.1 → 5.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/test.yml +27 -4
- data/CHANGES +7 -1
- data/Gemfile +6 -7
- data/README.jp.md +9 -19
- data/README.md +8 -17
- data/Rakefile +1 -1
- data/lib/slim/code_attributes.rb +1 -1
- data/lib/slim/command.rb +1 -1
- data/lib/slim/do_inserter.rb +2 -2
- data/lib/slim/embedded.rb +3 -5
- data/lib/slim/logic_less/context.rb +4 -6
- data/lib/slim/parser.rb +6 -6
- data/lib/slim/railtie.rb +2 -1
- data/lib/slim/smart/escaper.rb +0 -1
- data/lib/slim/smart/filter.rb +2 -2
- data/lib/slim/smart/parser.rb +3 -3
- data/lib/slim/splat/builder.rb +8 -7
- data/lib/slim/splat/filter.rb +3 -3
- data/lib/slim/translator.rb +1 -1
- data/lib/slim/version.rb +1 -1
- data/test/core/helper.rb +2 -10
- data/test/core/test_commands.rb +11 -15
- data/test/core/test_ruby_errors.rb +19 -0
- data/test/literate/helper.rb +1 -1
- data/test/logic_less/test_logic_less.rb +15 -0
- data/test/rails/app/controllers/slim_controller.rb +5 -0
- data/test/rails/app/views/layouts/application.html+testvariant.slim +10 -0
- data/test/rails/app/views/slim/splat_with_delimiter.slim +1 -0
- data/test/rails/config/application.rb +1 -1
- data/test/rails/test/test_slim.rb +13 -0
- metadata +8 -6
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: d9008a7eaa7a19ae0ada9b2a6789ff073a43fceaea9e24fe284ebf698fd5b02c
         | 
| 4 | 
            +
              data.tar.gz: 2c79bf7dc50662e04fb711ba4a1c334265c3a5b2186a111b932a04f02ae16680
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 1c4aa87d3b5a20242328258c6cfe8b436af5f92b437076bb185926764e5168959087aca53e5c0face78bde9b6670b6c4023f4893f98f58c6db97d730961ed93a
         | 
| 7 | 
            +
              data.tar.gz: 178427ae03b2c8e2918c4114376a5dd3955ac20ef393d5a355ca441617a39f3b66101ff00bbb7c0c6e8b12aee338db2914c37910712c1ada5aa5814f9e3cdd79
         | 
    
        data/.github/workflows/test.yml
    CHANGED
    
    | @@ -16,9 +16,9 @@ jobs: | |
| 16 16 | 
             
                strategy:
         | 
| 17 17 | 
             
                  fail-fast: false
         | 
| 18 18 | 
             
                  matrix:
         | 
| 19 | 
            -
                    ruby: ['2.5', '2.6', '2.7', '3.0', '3.1']
         | 
| 19 | 
            +
                    ruby: ['2.5', '2.6', '2.7', '3.0', '3.1', '3.2']
         | 
| 20 20 | 
             
                steps:
         | 
| 21 | 
            -
                  - uses: actions/checkout@ | 
| 21 | 
            +
                  - uses: actions/checkout@v4
         | 
| 22 22 | 
             
                  - name: Set up Ruby
         | 
| 23 23 | 
             
                    uses: ruby/setup-ruby@v1
         | 
| 24 24 | 
             
                    with:
         | 
| @@ -29,23 +29,46 @@ jobs: | |
| 29 29 | 
             
                      SINATRA: 2.2.4
         | 
| 30 30 | 
             
                  - run: bundle install && bundle exec rake test:sinatra
         | 
| 31 31 | 
             
                    env:
         | 
| 32 | 
            -
                      SINATRA: 3.0. | 
| 32 | 
            +
                      SINATRA: 3.0.6
         | 
| 33 | 
            +
                  - run: bundle install && bundle exec rake test:sinatra
         | 
| 34 | 
            +
                    if: ${{ matrix.ruby != '2.5' }}
         | 
| 35 | 
            +
                    env:
         | 
| 36 | 
            +
                      SINATRA: 3.1.0
         | 
| 37 | 
            +
                  - run: bundle install && bundle exec rake test:sinatra
         | 
| 38 | 
            +
                    if: ${{ matrix.ruby != '2.5' }}
         | 
| 39 | 
            +
                    env:
         | 
| 40 | 
            +
                      SINATRA: main
         | 
| 33 41 | 
             
              rails:
         | 
| 34 42 | 
             
                runs-on: ubuntu-latest
         | 
| 35 43 | 
             
                strategy:
         | 
| 36 44 | 
             
                  fail-fast: false
         | 
| 37 45 | 
             
                steps:
         | 
| 38 | 
            -
                  - uses: actions/checkout@ | 
| 46 | 
            +
                  - uses: actions/checkout@v4
         | 
| 39 47 | 
             
                  - name: Set up Ruby
         | 
| 40 48 | 
             
                    uses: ruby/setup-ruby@v1
         | 
| 41 49 | 
             
                    with:
         | 
| 42 50 | 
             
                      ruby-version: 2.7
         | 
| 43 51 | 
             
                  - run: bundle install && bundle exec rake test:rails
         | 
| 52 | 
            +
                    name: "rake test:rails RAILS=5.2.8"
         | 
| 44 53 | 
             
                    env:
         | 
| 45 54 | 
             
                      RAILS: 5.2.8
         | 
| 46 55 | 
             
                  - run: bundle install && bundle exec rake test:rails
         | 
| 56 | 
            +
                    name: "rake test:rails RAILS=6.0.6"
         | 
| 47 57 | 
             
                    env:
         | 
| 48 58 | 
             
                      RAILS: 6.0.6
         | 
| 49 59 | 
             
                  - run: bundle install && bundle exec rake test:rails
         | 
| 60 | 
            +
                    name: "rake test:rails RAILS=6.1.7"
         | 
| 50 61 | 
             
                    env:
         | 
| 51 62 | 
             
                      RAILS: 6.1.7
         | 
| 63 | 
            +
                  - run: bundle install && bundle exec rake test:rails
         | 
| 64 | 
            +
                    name: "rake test:rails RAILS=7.0.7"
         | 
| 65 | 
            +
                    env:
         | 
| 66 | 
            +
                      RAILS: 7.0.8
         | 
| 67 | 
            +
                  - run: bundle install && bundle exec rake test:rails
         | 
| 68 | 
            +
                    name: "rake test:rails RAILS=7.1.0"
         | 
| 69 | 
            +
                    env:
         | 
| 70 | 
            +
                      RAILS: 7.1.2
         | 
| 71 | 
            +
                  - run: bundle install && bundle exec rake test:rails
         | 
| 72 | 
            +
                    name: "rake test:rails RAILS=main"
         | 
| 73 | 
            +
                    env:
         | 
| 74 | 
            +
                      RAILS: main
         | 
    
        data/CHANGES
    CHANGED
    
    | @@ -1,3 +1,9 @@ | |
| 1 | 
            +
            5.2.0 (2023-11-11)
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              * Fix logic less bug - #783
         | 
| 4 | 
            +
              * Support Rails 7.1 - #936
         | 
| 5 | 
            +
              * Fix splat arguments on Rails 7.1 - #942
         | 
| 6 | 
            +
             | 
| 1 7 | 
             
            5.1.1 (2023-05-16)
         | 
| 2 8 |  | 
| 3 9 | 
             
              * Support lambda functions as shortcuts - #677 #813 #903
         | 
| @@ -243,7 +249,7 @@ | |
| 243 249 | 
             
              * BACKWARD INCOMPATIBLE CHANGE -  Dynamic attributes which return empty value "" are not removed anymore
         | 
| 244 250 | 
             
                (this means "" is now interpreted as true), whereas false and nil are still removed.
         | 
| 245 251 | 
             
                This corresponds to the definition of boolean attributes in XHTML and HTML5.
         | 
| 246 | 
            -
              * Deprecated option :remove_empty_attrs | 
| 252 | 
            +
              * Deprecated option :remove_empty_attrs
         | 
| 247 253 | 
             
              * Add option :escape_quoted_attrs to escape quoted attributes, use == if you don't want that.
         | 
| 248 254 | 
             
                The default is false to stay backward compatible.
         | 
| 249 255 | 
             
              * Use Temple::FilterError exception
         | 
    
        data/Gemfile
    CHANGED
    
    | @@ -2,7 +2,6 @@ source 'https://rubygems.org/' | |
| 2 2 |  | 
| 3 3 | 
             
            gemspec
         | 
| 4 4 |  | 
| 5 | 
            -
            gem 'test-unit', '~> 3.5'
         | 
| 6 5 | 
             
            gem 'minitest', '~> 5.15'
         | 
| 7 6 | 
             
            gem 'rake', '~> 13.0'
         | 
| 8 7 | 
             
            gem 'kramdown', '~> 2.4'
         | 
| @@ -11,12 +10,12 @@ if ENV['TEMPLE'] && ENV['TEMPLE'] != 'master' | |
| 11 10 | 
             
              gem 'temple', "= #{ENV['TEMPLE']}"
         | 
| 12 11 | 
             
            else
         | 
| 13 12 | 
             
              # Test against temple master by default
         | 
| 14 | 
            -
              gem 'temple', : | 
| 13 | 
            +
              gem 'temple', github: 'judofyr/temple'
         | 
| 15 14 | 
             
            end
         | 
| 16 15 |  | 
| 17 16 | 
             
            if ENV['TILT']
         | 
| 18 17 | 
             
              if ENV['TILT'] == 'master'
         | 
| 19 | 
            -
                gem 'tilt', : | 
| 18 | 
            +
                gem 'tilt', github: 'jeremyevans/tilt'
         | 
| 20 19 | 
             
              else
         | 
| 21 20 | 
             
                gem 'tilt', "= #{ENV['TILT']}"
         | 
| 22 21 | 
             
              end
         | 
| @@ -27,7 +26,7 @@ if ENV['RAILS'] | |
| 27 26 |  | 
| 28 27 | 
             
              # we need some smarter test logic for the different Rails versions
         | 
| 29 28 | 
             
              if ENV['RAILS'] == 'main'
         | 
| 30 | 
            -
                gem 'rails', : | 
| 29 | 
            +
                gem 'rails', github: 'rails/rails', branch: 'main'
         | 
| 31 30 | 
             
              else
         | 
| 32 31 | 
             
                gem 'rails', "= #{ENV['RAILS']}"
         | 
| 33 32 | 
             
              end
         | 
| @@ -36,9 +35,9 @@ end | |
| 36 35 | 
             
            if ENV['SINATRA']
         | 
| 37 36 | 
             
              gem 'rack-test'
         | 
| 38 37 |  | 
| 39 | 
            -
              if ENV['SINATRA'] == ' | 
| 40 | 
            -
                gem 'sinatra', : | 
| 38 | 
            +
              if ENV['SINATRA'] == 'main'
         | 
| 39 | 
            +
                gem 'sinatra', github: 'sinatra/sinatra'
         | 
| 41 40 | 
             
              else
         | 
| 42 | 
            -
                gem 'sinatra', : | 
| 41 | 
            +
                gem 'sinatra', tag: "v#{ENV['SINATRA']}"
         | 
| 43 42 | 
             
              end
         | 
| 44 43 | 
             
            end
         | 
    
        data/README.jp.md
    CHANGED
    
    | @@ -32,23 +32,22 @@ Slim は 不可解にならない程度に view の構文を本質的な部品 | |
| 32 32 | 
             
            * ホームページ: <https://slim-template.github.io>
         | 
| 33 33 | 
             
            * ソース: <https://github.com/slim-template/slim>
         | 
| 34 34 | 
             
            * バグ:   <https://github.com/slim-template/slim/issues>
         | 
| 35 | 
            -
            * リスト:   <https://groups.google.com/group/slim-template>
         | 
| 36 35 | 
             
            * API ドキュメント:
         | 
| 37 | 
            -
                * 最新の Gem: <https://rubydoc.info/gems/slim/frames> | 
| 38 | 
            -
                * GitHub  | 
| 36 | 
            +
                * 最新の Gem: <https://rubydoc.info/gems/slim/frames>
         | 
| 37 | 
            +
                * GitHub main: <https://rubydoc.info/github/slim-template/slim/main/frames>
         | 
| 39 38 |  | 
| 40 39 | 
             
            ## イントロダクション
         | 
| 41 40 |  | 
| 42 41 | 
             
            ### Slim とは?
         | 
| 43 42 |  | 
| 44 43 | 
             
            Slim は __Rails5 以降__ に対応した高速, 軽量なテンプレートエンジンです。主要な Ruby の実装全てでしっかりテストされています。
         | 
| 45 | 
            -
            私たちは継続的インテグレーションを採用しています。( | 
| 44 | 
            +
            私たちは継続的インテグレーションを採用しています。(github actions)
         | 
| 46 45 |  | 
| 47 46 | 
             
            Slim の核となる構文は1つの考えによって導かれています: "この動作を行うために最低限必要なものは何か。"
         | 
| 48 47 |  | 
| 49 48 | 
             
            多くの人々の Slim への貢献によって, 彼らが使う [Haml](https://github.com/haml/haml) や [Jade](https://github.com/visionmedia/jade) の影響を受け構文の追加が行われています。 Slim の開発チームは美は見る人の目の中にあることを分っているので、こういった追加にオープンです。
         | 
| 50 49 |  | 
| 51 | 
            -
            Slim は 構文解析/コンパイルに [Temple](https://github.com/judofyr/temple) を使い [Tilt](https://github.com/ | 
| 50 | 
            +
            Slim は 構文解析/コンパイルに [Temple](https://github.com/judofyr/temple) を使い [Tilt](https://github.com/jeremyevans/tilt) に組み込まれます。これにより [Sinatra](https://github.com/sinatra/sinatra) やプレーンな [Rack](https://github.com/rack/rack) とも一緒に使えます。
         | 
| 52 51 |  | 
| 53 52 | 
             
            Temple のアーキテクチャはとても柔軟で, モンキーパッチなしで構文解析とコンパイルのプロセスの拡張が可能です。これはロジックレスのプラグインや I18n が提供する翻訳プラグインに
         | 
| 54 53 | 
             
            使用されます。ロジックレスモードでは HTML をビルドするために Slim の構文を使いたいが, テンプレートの中で Ruby を書きたくない場合にも Slim を使うことができます。
         | 
| @@ -60,7 +59,6 @@ Temple のアーキテクチャはとても柔軟で, モンキーパッチな | |
| 60 59 | 
             
            * Slim のアーキテクチャは非常に柔軟なので, 構文の拡張やプラグインを書くことができます。
         | 
| 61 60 |  | 
| 62 61 | 
             
            ___そう, Slim は速い!___ Slim は開発当初からパフォーマンスに注意して開発されてきました。
         | 
| 63 | 
            -
            ベンチマークはコミット毎に <http://travis-ci.org/slim-template/slim> で取られています。
         | 
| 64 62 | 
             
            この数字が信じられませんか? それは仕方ないことです。是非 rake タスクを使って自分でベンチマークを取ってみてください!
         | 
| 65 63 |  | 
| 66 64 | 
             
            私たちの考えでは, あなたは Slim の機能と構文を使うべきです。Slim はあなたのアプリケーションのパフォーマンスに悪影響を与えないことを保証します。
         | 
| @@ -843,7 +841,7 @@ body | |
| 843 841 |  | 
| 844 842 | 
             
            ## 埋め込みエンジン (Markdown, ...)
         | 
| 845 843 |  | 
| 846 | 
            -
            [Tilt](https://github.com/ | 
| 844 | 
            +
            [Tilt](https://github.com/jeremyevans/tilt)のおかげで, Slim は他のテンプレートエンジンの埋め込みに見事に対応しています。
         | 
| 847 845 |  | 
| 848 846 | 
             
            例:
         | 
| 849 847 |  | 
| @@ -866,8 +864,8 @@ p: markdown: Tag with **inline** markdown! | |
| 866 864 | 
             
            | ruby: | なし | ショートカット | Ruby コードを埋め込むショートカット |
         | 
| 867 865 | 
             
            | javascript: | なし | ショートカット | javascript コードを埋め込み、script タグで囲む |
         | 
| 868 866 | 
             
            | css: | なし | ショートカット | css コードを埋め込み、style タグで囲む |
         | 
| 869 | 
            -
            | sass: | sass | コンパイル時 | sass コードを埋め込み、style タグで囲む |
         | 
| 870 | 
            -
            | scss: | sass | コンパイル時 | scss コードを埋め込み、style タグで囲む |
         | 
| 867 | 
            +
            | sass: | sass-embedded または sassc または sass | コンパイル時 | sass コードを埋め込み、style タグで囲む |
         | 
| 868 | 
            +
            | scss: | sass-embedded または sassc または sass | コンパイル時 | scss コードを埋め込み、style タグで囲む |
         | 
| 871 869 | 
             
            | less: | less | コンパイル時 | less コードを埋め込み、style タグで囲む |
         | 
| 872 870 | 
             
            | coffee: | coffee-script | コンパイル時 | CoffeeScript をコンパイルし、 script タグで囲む |
         | 
| 873 871 | 
             
            | markdown: | redcarpet/rdiscount/kramdown | コンパイル時 + 展開 | Markdown をコンパイルし、テキスト中の # \{variables} を展開 |
         | 
| @@ -906,7 +904,7 @@ scss class="myClass": | |
| 906 904 | 
             
            ## Slim の設定
         | 
| 907 905 |  | 
| 908 906 | 
             
            Slim とその基礎となる [Temple](https://github.com/judofyr/temple) は非常に柔軟に設定可能です。
         | 
| 909 | 
            -
            Slim を設定する方法はコンパイル機構に少し依存します。(Rails や [Tilt](https://github.com/ | 
| 907 | 
            +
            Slim を設定する方法はコンパイル機構に少し依存します。(Rails や [Tilt](https://github.com/jeremyevans/tilt))。デフォルトオプションの設定は `Slim::Engine` クラスでいつでも可能です。Rails の 環境設定ファイルで設定可能です。例えば, config/environments/developers.rb で設定したいとします:
         | 
| 910 908 |  | 
| 911 909 | 
             
            ### デフォルトオプション
         | 
| 912 910 |  | 
| @@ -1021,7 +1019,7 @@ Slim はロジックレスモードと I18n, インクルードプラグイン | |
| 1021 1019 |  | 
| 1022 1020 | 
             
            ### Tilt
         | 
| 1023 1021 |  | 
| 1024 | 
            -
            Slim は生成されたコードをコンパイルするために [Tilt](https://github.com/ | 
| 1022 | 
            +
            Slim は生成されたコードをコンパイルするために [Tilt](https://github.com/jeremyevans/tilt) を使用します。Slim テンプレートを直接使いたい場合, Tilt インターフェイスが使用できます。
         | 
| 1025 1023 |  | 
| 1026 1024 | 
             
            ~~~ ruby
         | 
| 1027 1025 | 
             
            Tilt.new['template.slim'].render(scope)
         | 
| @@ -1186,8 +1184,6 @@ markdown: | |
| 1186 1184 | 
             
            rake bench slow=1 iterations=1000
         | 
| 1187 1185 | 
             
            ~~~
         | 
| 1188 1186 |  | 
| 1189 | 
            -
            私たちはコミット毎に Travis-CI でベンチマークをとっています。最新のベンチマーク結果はこちらです: <http://travis-ci.org/slim-template/slim>
         | 
| 1190 | 
            -
             | 
| 1191 1187 | 
             
            ### テストスイートと継続的インテグレーション
         | 
| 1192 1188 |  | 
| 1193 1189 | 
             
            Slim は minitest ベースの拡張性のあるテストスイートを提供します。テストは 'rake test' または
         | 
| @@ -1195,8 +1191,6 @@ rails のインテグレーションテストの場合 'rake test:rails' で実 | |
| 1195 1191 |  | 
| 1196 1192 | 
             
            私たちは現在 markdown ファイルで書かれ, 人間が読み書きしやすいテストを試しています: [TESTS.md](test/literate/TESTS.md)
         | 
| 1197 1193 |  | 
| 1198 | 
            -
            Travis-CI は継続的インテグレーションテストに利用されています: <http://travis-ci.org/slim-template/slim>
         | 
| 1199 | 
            -
             | 
| 1200 1194 | 
             
            Slim は主要な Ruby 実装全てで動作します:
         | 
| 1201 1195 |  | 
| 1202 1196 | 
             
            * Ruby 2.5
         | 
| @@ -1232,10 +1226,6 @@ Slim は [MIT license](http://www.opensource.org/licenses/MIT) に基づいて | |
| 1232 1226 |  | 
| 1233 1227 | 
             
            [](https://github.com/sponsors/slim-template)
         | 
| 1234 1228 |  | 
| 1235 | 
            -
            ## 議論
         | 
| 1236 | 
            -
             | 
| 1237 | 
            -
            * [Google Group](http://groups.google.com/group/slim-template)
         | 
| 1238 | 
            -
             | 
| 1239 1229 | 
             
            ## 関連プロジェクト
         | 
| 1240 1230 |  | 
| 1241 1231 | 
             
            テンプレートのコンパイルフレームワーク:
         | 
    
        data/README.md
    CHANGED
    
    | @@ -32,23 +32,22 @@ A short list of the features... | |
| 32 32 | 
             
            * Homepage: <https://slim-template.github.io>
         | 
| 33 33 | 
             
            * Source: <https://github.com/slim-template/slim>
         | 
| 34 34 | 
             
            * Bugs:   <https://github.com/slim-template/slim/issues>
         | 
| 35 | 
            -
            * List:   <https://groups.google.com/group/slim-template>
         | 
| 36 35 | 
             
            * API documentation:
         | 
| 37 | 
            -
                * Latest Gem: <https://rubydoc.info/gems/slim/frames> | 
| 38 | 
            -
                * GitHub  | 
| 36 | 
            +
                * Latest Gem: <https://rubydoc.info/gems/slim/frames>
         | 
| 37 | 
            +
                * GitHub main: <https://rubydoc.info/github/slim-template/slim/main/frames>
         | 
| 39 38 |  | 
| 40 39 | 
             
            ## Introduction
         | 
| 41 40 |  | 
| 42 41 | 
             
            ### What is Slim?
         | 
| 43 42 |  | 
| 44 43 | 
             
            Slim is a fast, lightweight templating engine with support for __Rails 5 and later__. It has been heavily tested on all major ruby implementations. We use
         | 
| 45 | 
            -
            continuous integration ( | 
| 44 | 
            +
            continuous integration (github actions).
         | 
| 46 45 |  | 
| 47 46 | 
             
            Slim's core syntax is guided by one thought: "What's the minimum required to make this work".
         | 
| 48 47 |  | 
| 49 48 | 
             
            As more people have contributed to Slim, there have been syntax additions influenced from their use of [Haml](https://github.com/haml/haml) and [Jade](https://github.com/visionmedia/jade).  The Slim team is open to these additions because we know beauty is in the eye of the beholder.
         | 
| 50 49 |  | 
| 51 | 
            -
            Slim uses [Temple](https://github.com/judofyr/temple) for parsing/compilation and is also integrated into [Tilt](https://github.com/ | 
| 50 | 
            +
            Slim uses [Temple](https://github.com/judofyr/temple) for parsing/compilation and is also integrated into [Tilt](https://github.com/jeremyevans/tilt), so it can be used together with [Sinatra](https://github.com/sinatra/sinatra) or plain [Rack](https://github.com/rack/rack).
         | 
| 52 51 |  | 
| 53 52 | 
             
            The architecture of Temple is very flexible and allows the extension of the parsing and compilation process without monkey-patching. This is used
         | 
| 54 53 | 
             
            by the logic less plugin and the translator plugin which provides I18n. In logic-less mode you can use Slim if you like the Slim syntax to build your HTML but don't want to write Ruby in your templates.
         | 
| @@ -878,7 +877,7 @@ body | |
| 878 877 |  | 
| 879 878 | 
             
            ## Embedded engines (Markdown, ...)
         | 
| 880 879 |  | 
| 881 | 
            -
            Thanks to [Tilt](https://github.com/ | 
| 880 | 
            +
            Thanks to [Tilt](https://github.com/jeremyevans/tilt), Slim has extensive support for embedding other template engines.
         | 
| 882 881 |  | 
| 883 882 | 
             
            Examples:
         | 
| 884 883 |  | 
| @@ -901,8 +900,8 @@ Supported engines: | |
| 901 900 | 
             
            | ruby: | none | Shortcut | Shortcut to embed ruby code |
         | 
| 902 901 | 
             
            | javascript: | none | Shortcut | Shortcut to embed javascript code and wrap in script tag |
         | 
| 903 902 | 
             
            | css: | none | Shortcut | Shortcut to embed css code and wrap in style tag |
         | 
| 904 | 
            -
            | sass: | sass | Compile time | Embed sass code and wrap in style tag |
         | 
| 905 | 
            -
            | scss: | sass | Compile time | Embed scss code and wrap in style tag |
         | 
| 903 | 
            +
            | sass: | sass-embedded or sassc or sass | Compile time | Embed sass code and wrap in style tag |
         | 
| 904 | 
            +
            | scss: | sass-embedded or sassc or sass | Compile time | Embed scss code and wrap in style tag |
         | 
| 906 905 | 
             
            | less: | less | Compile time | Embed less css code and wrap in style tag |
         | 
| 907 906 | 
             
            | coffee: | coffee-script | Compile time | Compile coffee script code and wrap in script tag |
         | 
| 908 907 | 
             
            | markdown: | redcarpet/rdiscount/kramdown | Compile time + Interpolation | Compile markdown code and interpolate #\{variables} in text |
         | 
| @@ -1056,7 +1055,7 @@ Slim currently provides plugins for logic less mode, includes and I18n. See the | |
| 1056 1055 |  | 
| 1057 1056 | 
             
            ### Tilt
         | 
| 1058 1057 |  | 
| 1059 | 
            -
            Slim uses [Tilt](https://github.com/ | 
| 1058 | 
            +
            Slim uses [Tilt](https://github.com/jeremyevans/tilt) to compile the generated code. If you want to use the Slim template directly, you can use the Tilt interface.
         | 
| 1060 1059 |  | 
| 1061 1060 | 
             
            ~~~ ruby
         | 
| 1062 1061 | 
             
            Tilt.new['template.slim'].render(scope)
         | 
| @@ -1222,8 +1221,6 @@ run the slow parsing benchmark which needs more time. You can also increase the | |
| 1222 1221 | 
             
            $ rake bench slow=1 iterations=1000
         | 
| 1223 1222 | 
             
            ~~~
         | 
| 1224 1223 |  | 
| 1225 | 
            -
            We run the benchmarks for every commit on Travis-CI. Take a look at the newest benchmarking results: <http://travis-ci.org/slim-template/slim>
         | 
| 1226 | 
            -
             | 
| 1227 1224 | 
             
            ### Test suite and continuous integration
         | 
| 1228 1225 |  | 
| 1229 1226 | 
             
            Slim provides an extensive test-suite based on minitest. You can run the tests
         | 
| @@ -1231,8 +1228,6 @@ with 'rake test' and the rails integration tests with 'rake test:rails'. | |
| 1231 1228 |  | 
| 1232 1229 | 
             
            We are currently experimenting with human-readable literate tests which are written as markdown files: [TESTS.md](test/literate/TESTS.md)
         | 
| 1233 1230 |  | 
| 1234 | 
            -
            Travis-CI is used for continuous integration testing: <http://travis-ci.org/slim-template/slim>
         | 
| 1235 | 
            -
             | 
| 1236 1231 | 
             
            Slim is working well on all major Ruby implementations:
         | 
| 1237 1232 |  | 
| 1238 1233 | 
             
            * Ruby 2.5 and newer
         | 
| @@ -1268,10 +1263,6 @@ If you want to support this project please visit the GitHub sponsors page. | |
| 1268 1263 |  | 
| 1269 1264 | 
             
            [](https://github.com/sponsors/slim-template)
         | 
| 1270 1265 |  | 
| 1271 | 
            -
            ## Discuss
         | 
| 1272 | 
            -
             | 
| 1273 | 
            -
            * [Google Group](http://groups.google.com/group/slim-template)
         | 
| 1274 | 
            -
             | 
| 1275 1266 | 
             
            ## Related projects
         | 
| 1276 1267 |  | 
| 1277 1268 | 
             
            Template compilation framework:
         | 
    
        data/Rakefile
    CHANGED
    
    
    
        data/lib/slim/code_attributes.rb
    CHANGED
    
    | @@ -9,7 +9,7 @@ module Slim | |
| 9 9 | 
             
                # @param [Array] attrs Array of temple expressions
         | 
| 10 10 | 
             
                # @return [Array] Compiled temple expression
         | 
| 11 11 | 
             
                def on_html_attrs(*attrs)
         | 
| 12 | 
            -
                  [:multi, *attrs.map {|a| compile(a) }]
         | 
| 12 | 
            +
                  [:multi, *attrs.map { |a| compile(a) }]
         | 
| 13 13 | 
             
                end
         | 
| 14 14 |  | 
| 15 15 | 
             
                # Handle attribute expression `[:html, :attr, name, value]`
         | 
    
        data/lib/slim/command.rb
    CHANGED
    
    | @@ -45,7 +45,7 @@ module Slim | |
| 45 45 | 
             
                    @options[:compile] = true
         | 
| 46 46 | 
             
                  end
         | 
| 47 47 |  | 
| 48 | 
            -
                  opts.on('-r', '--require library',  | 
| 48 | 
            +
                  opts.on('-r', '--require library', 'Load library or plugin with -r slim/plugin') do |lib|
         | 
| 49 49 | 
             
                    require lib.strip
         | 
| 50 50 | 
             
                  end
         | 
| 51 51 |  | 
    
        data/lib/slim/do_inserter.rb
    CHANGED
    
    | @@ -16,7 +16,7 @@ module Slim | |
| 16 16 | 
             
                # @param [Array] content Temple expression
         | 
| 17 17 | 
             
                # @return [Array] Compiled temple expression
         | 
| 18 18 | 
             
                def on_slim_control(code, content)
         | 
| 19 | 
            -
                  code  | 
| 19 | 
            +
                  code += ' do' unless code =~ BLOCK_REGEX || empty_exp?(content)
         | 
| 20 20 | 
             
                  [:slim, :control, code, compile(content)]
         | 
| 21 21 | 
             
                end
         | 
| 22 22 |  | 
| @@ -27,7 +27,7 @@ module Slim | |
| 27 27 | 
             
                # @param [Array] content Temple expression
         | 
| 28 28 | 
             
                # @return [Array] Compiled temple expression
         | 
| 29 29 | 
             
                def on_slim_output(escape, code, content)
         | 
| 30 | 
            -
                  code  | 
| 30 | 
            +
                  code += ' do' unless code =~ BLOCK_REGEX || empty_exp?(content)
         | 
| 31 31 | 
             
                  [:slim, :output, escape, code, compile(content)]
         | 
| 32 32 | 
             
                end
         | 
| 33 33 | 
             
              end
         | 
    
        data/lib/slim/embedded.rb
    CHANGED
    
    | @@ -154,8 +154,8 @@ module Slim | |
| 154 154 |  | 
| 155 155 | 
             
                  def tilt_render(tilt_engine, tilt_options, text)
         | 
| 156 156 | 
             
                    text = tilt_engine.new(tilt_options.merge(
         | 
| 157 | 
            -
                      style: options[:pretty] ? :expanded : :compressed | 
| 158 | 
            -
             | 
| 157 | 
            +
                      style: options[:pretty] ? :expanded : :compressed
         | 
| 158 | 
            +
                    )) { text }.render
         | 
| 159 159 | 
             
                    text = text.chomp
         | 
| 160 160 | 
             
                    [:static, text]
         | 
| 161 161 | 
             
                  end
         | 
| @@ -189,9 +189,8 @@ module Slim | |
| 189 189 | 
             
                  set_options attributes: {}
         | 
| 190 190 |  | 
| 191 191 | 
             
                  def on_slim_embedded(engine, body, attrs)
         | 
| 192 | 
            -
             | 
| 193 192 | 
             
                    unless options[:attributes].empty?
         | 
| 194 | 
            -
                      options[:attributes].map do|k, v|
         | 
| 193 | 
            +
                      options[:attributes].map do |k, v|
         | 
| 195 194 | 
             
                        attrs << [:html, :attr, k, [:static, v]]
         | 
| 196 195 | 
             
                      end
         | 
| 197 196 | 
             
                    end
         | 
| @@ -207,7 +206,6 @@ module Slim | |
| 207 206 |  | 
| 208 207 | 
             
                    [:html, :tag, options[:tag], attrs, body]
         | 
| 209 208 | 
             
                  end
         | 
| 210 | 
            -
             | 
| 211 209 | 
             
                end
         | 
| 212 210 |  | 
| 213 211 | 
             
                # Javascript wrapper engine.
         | 
| @@ -74,7 +74,7 @@ module Slim | |
| 74 74 | 
             
                          return @dict.instance_variable_get(var_name).call(&block) if instance_variable?(var_name)
         | 
| 75 75 | 
             
                        end
         | 
| 76 76 | 
             
                      end
         | 
| 77 | 
            -
                      @parent.lambda(name) if @parent
         | 
| 77 | 
            +
                      @parent.lambda(name, &block) if @parent
         | 
| 78 78 | 
             
                    end
         | 
| 79 79 |  | 
| 80 80 | 
             
                    def [](name)
         | 
| @@ -105,11 +105,9 @@ module Slim | |
| 105 105 | 
             
                    end
         | 
| 106 106 |  | 
| 107 107 | 
             
                    def instance_variable?(name)
         | 
| 108 | 
            -
                       | 
| 109 | 
            -
             | 
| 110 | 
            -
                       | 
| 111 | 
            -
                        false
         | 
| 112 | 
            -
                      end
         | 
| 108 | 
            +
                      @dict.instance_variable_defined?(name)
         | 
| 109 | 
            +
                    rescue NameError
         | 
| 110 | 
            +
                      false
         | 
| 113 111 | 
             
                    end
         | 
| 114 112 | 
             
                  end
         | 
| 115 113 |  | 
    
        data/lib/slim/parser.rb
    CHANGED
    
    | @@ -50,7 +50,7 @@ module Slim | |
| 50 50 | 
             
                  @code_attr_delims = options[:code_attr_delims]
         | 
| 51 51 | 
             
                  tabsize = options[:tabsize]
         | 
| 52 52 | 
             
                  if tabsize > 1
         | 
| 53 | 
            -
                    @tab_re = /\G((?: {#{tabsize}})*) {0,#{tabsize-1}}\t/
         | 
| 53 | 
            +
                    @tab_re = /\G((?: {#{tabsize}})*) {0,#{tabsize - 1}}\t/
         | 
| 54 54 | 
             
                    @tab = '\1' + ' ' * tabsize
         | 
| 55 55 | 
             
                  else
         | 
| 56 56 | 
             
                    @tab_re = "\t"
         | 
| @@ -70,9 +70,9 @@ module Slim | |
| 70 70 | 
             
                      @additional_attrs[k] = v[:additional_attrs]
         | 
| 71 71 | 
             
                    end
         | 
| 72 72 | 
             
                  end
         | 
| 73 | 
            -
                  keys = Regexp.union @attr_shortcut.keys.sort_by {|k| -k.size }
         | 
| 73 | 
            +
                  keys = Regexp.union @attr_shortcut.keys.sort_by { |k| -k.size }
         | 
| 74 74 | 
             
                  @attr_shortcut_re = /\A(#{keys}+)((?:\p{Word}|-|\/\d+|:(\w|-)+)*)/
         | 
| 75 | 
            -
                  keys = Regexp.union @tag_shortcut.keys.sort_by {|k| -k.size }
         | 
| 75 | 
            +
                  keys = Regexp.union @tag_shortcut.keys.sort_by { |k| -k.size }
         | 
| 76 76 | 
             
                  @tag_re = /\A(?:#{keys}|\*(?=[^\s]+)|(\p{Word}(?:\p{Word}|:|-)*\p{Word}|\p{Word}+))/
         | 
| 77 77 | 
             
                  keys = Regexp.escape @code_attr_delims.keys.join
         | 
| 78 78 | 
             
                  @code_attr_delims_re = /\A[#{keys}]/
         | 
| @@ -338,7 +338,7 @@ module Slim | |
| 338 338 | 
             
                    syntax_error!('Illegal shortcut') unless shortcut = @attr_shortcut[$1]
         | 
| 339 339 |  | 
| 340 340 | 
             
                    if shortcut.is_a?(Proc)
         | 
| 341 | 
            -
                      shortcut.call($2).each {|a, v| attributes << [:html, :attr, a, [:static, v]] }
         | 
| 341 | 
            +
                      shortcut.call($2).each { |a, v| attributes << [:html, :attr, a, [:static, v]] }
         | 
| 342 342 | 
             
                    else
         | 
| 343 343 | 
             
                      shortcut.each {|a| attributes << [:html, :attr, a, [:static, $2]] }
         | 
| 344 344 | 
             
                    end
         | 
| @@ -503,9 +503,9 @@ module Slim | |
| 503 503 | 
             
                      value << ($1 ? ' ' : "\n")
         | 
| 504 504 | 
             
                      expect_next_line
         | 
| 505 505 | 
             
                    else
         | 
| 506 | 
            -
                      if @line[0] ==  | 
| 506 | 
            +
                      if @line[0] == '{'
         | 
| 507 507 | 
             
                        count += 1
         | 
| 508 | 
            -
                      elsif @line[0] ==  | 
| 508 | 
            +
                      elsif @line[0] == '}'
         | 
| 509 509 | 
             
                        count -= 1
         | 
| 510 510 | 
             
                      end
         | 
| 511 511 | 
             
                      value << @line.slice!(0)
         | 
    
        data/lib/slim/railtie.rb
    CHANGED
    
    | @@ -1,7 +1,8 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 2 3 | 
             
            module Slim
         | 
| 3 4 | 
             
              class Railtie < ::Rails::Railtie
         | 
| 4 | 
            -
                initializer  | 
| 5 | 
            +
                initializer 'initialize slim template handler' do
         | 
| 5 6 | 
             
                  ActiveSupport.on_load(:action_view) do
         | 
| 6 7 | 
             
                    Slim::RailsTemplate = Temple::Templates::Rails(Slim::Engine,
         | 
| 7 8 | 
             
                                                                   register_as: :slim,
         | 
    
        data/lib/slim/smart/escaper.rb
    CHANGED
    
    
    
        data/lib/slim/smart/filter.rb
    CHANGED
    
    | @@ -51,13 +51,13 @@ module Slim | |
| 51 51 | 
             
                    # so we don't have to worry about that at all.
         | 
| 52 52 | 
             
                    block = [:multi]
         | 
| 53 53 | 
             
                    prev = nil
         | 
| 54 | 
            -
                    last_exp = exps.reject{ |exp| exp.first == :newline }.last unless @active && @append
         | 
| 54 | 
            +
                    last_exp = exps.reject { |exp| exp.first == :newline }.last unless @active && @append
         | 
| 55 55 | 
             
                    exps.each do |exp|
         | 
| 56 56 | 
             
                      @append = exp.equal?(last_exp)
         | 
| 57 57 | 
             
                      if @active
         | 
| 58 58 | 
             
                        @prepend = false if prev
         | 
| 59 59 | 
             
                      else
         | 
| 60 | 
            -
                        @prepend = prev && ( | 
| 60 | 
            +
                        @prepend = prev && (prev.first != :slim || prev[1] != :text)
         | 
| 61 61 | 
             
                      end
         | 
| 62 62 | 
             
                      block << compile(exp)
         | 
| 63 63 | 
             
                      prev = exp unless exp.first == :newline
         | 
    
        data/lib/slim/smart/parser.rb
    CHANGED
    
    | @@ -8,9 +8,9 @@ module Slim | |
| 8 8 | 
             
                  def initialize(opts = {})
         | 
| 9 9 | 
             
                    super
         | 
| 10 10 | 
             
                    word_re = options[:implicit_text] ? '[_a-z0-9]' : '\p{Word}'
         | 
| 11 | 
            -
                    attr_keys = Regexp.union(@attr_shortcut.keys.sort_by {|k| -k.size } | 
| 11 | 
            +
                    attr_keys = Regexp.union(@attr_shortcut.keys.sort_by { |k| -k.size })
         | 
| 12 12 | 
             
                    @attr_shortcut_re = /\A(#{attr_keys}+)((?:\p{Word}|-)*)/
         | 
| 13 | 
            -
                    tag_keys = Regexp.union((@tag_shortcut.keys - @attr_shortcut.keys).sort_by {|k| -k.size } | 
| 13 | 
            +
                    tag_keys = Regexp.union((@tag_shortcut.keys - @attr_shortcut.keys).sort_by { |k| -k.size })
         | 
| 14 14 | 
             
                    @tag_re = /\A(?:#{attr_keys}(?=-*\p{Word})|#{tag_keys}|\*(?=[^\s]+)|(#{word_re}(?:#{word_re}|:|-)*#{word_re}|#{word_re}+))/
         | 
| 15 15 | 
             
                  end
         | 
| 16 16 |  | 
| @@ -25,7 +25,7 @@ module Slim | |
| 25 25 | 
             
                      end
         | 
| 26 26 | 
             
                      # Found implicit smart text block.
         | 
| 27 27 | 
             
                      if line = @lines.first
         | 
| 28 | 
            -
                        indent = ( | 
| 28 | 
            +
                        indent = (line =~ /\A\s*\Z/ ? @indents.last + 1 : get_indent(line))
         | 
| 29 29 | 
             
                      end
         | 
| 30 30 | 
             
                      @stacks.last << [:slim, :text, :implicit, parse_text_block(@line, indent)]
         | 
| 31 31 | 
             
                    end
         | 
    
        data/lib/slim/splat/builder.rb
    CHANGED
    
    | @@ -4,8 +4,9 @@ module Slim | |
| 4 4 | 
             
              module Splat
         | 
| 5 5 | 
             
                # @api private
         | 
| 6 6 | 
             
                class Builder
         | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 7 | 
            +
                  # https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
         | 
| 8 | 
            +
                  INVALID_ATTRIBUTE_NAME_REGEX = /[ \0"'>\/=]/
         | 
| 9 | 
            +
             | 
| 9 10 | 
             
                  def initialize(options)
         | 
| 10 11 | 
             
                    @options = options
         | 
| 11 12 | 
             
                    @attrs = {}
         | 
| @@ -18,7 +19,7 @@ module Slim | |
| 18 19 | 
             
                    elsif @options[:hyphen_attrs].include?(name) && Hash === value
         | 
| 19 20 | 
             
                      hyphen_attr(name, escape, value)
         | 
| 20 21 | 
             
                    elsif value != false && value != nil
         | 
| 21 | 
            -
                      attr(name, escape_html( | 
| 22 | 
            +
                      attr(name, escape_html(escape, value))
         | 
| 22 23 | 
             
                    end
         | 
| 23 24 | 
             
                  end
         | 
| 24 25 |  | 
| @@ -34,7 +35,7 @@ module Slim | |
| 34 35 | 
             
                    end
         | 
| 35 36 | 
             
                    if @attrs[name]
         | 
| 36 37 | 
             
                      if delim = @options[:merge_attrs][name]
         | 
| 37 | 
            -
                        @attrs[name]  | 
| 38 | 
            +
                        @attrs[name] = @attrs[name].to_s + delim + value.to_s
         | 
| 38 39 | 
             
                      else
         | 
| 39 40 | 
             
                        raise("Multiple #{name} attributes specified")
         | 
| 40 41 | 
             
                      end
         | 
| @@ -93,7 +94,7 @@ module Slim | |
| 93 94 | 
             
                    if Hash === value
         | 
| 94 95 | 
             
                      if @options[:hyphen_underscore_attrs]
         | 
| 95 96 | 
             
                        value.each do |n, v|
         | 
| 96 | 
            -
                          hyphen_attr("#{name}-#{n.to_s. | 
| 97 | 
            +
                          hyphen_attr("#{name}-#{n.to_s.tr('_', '-')}", escape, v)
         | 
| 97 98 | 
             
                        end
         | 
| 98 99 | 
             
                      else
         | 
| 99 100 | 
             
                        value.each do |n, v|
         | 
| @@ -101,12 +102,12 @@ module Slim | |
| 101 102 | 
             
                        end
         | 
| 102 103 | 
             
                      end
         | 
| 103 104 | 
             
                    else
         | 
| 104 | 
            -
                      attr(name, escape_html( | 
| 105 | 
            +
                      attr(name, escape_html(escape, value))
         | 
| 105 106 | 
             
                    end
         | 
| 106 107 | 
             
                  end
         | 
| 107 108 |  | 
| 108 109 | 
             
                  def escape_html(escape, value)
         | 
| 109 | 
            -
                    return value  | 
| 110 | 
            +
                    return value if !escape || value == true
         | 
| 110 111 | 
             
                    @options[:use_html_safe] ? Temple::Utils.escape_html_safe(value) : Temple::Utils.escape_html(value)
         | 
| 111 112 | 
             
                  end
         | 
| 112 113 | 
             
                end
         | 
    
        data/lib/slim/splat/filter.rb
    CHANGED
    
    | @@ -11,7 +11,7 @@ module Slim | |
| 11 11 | 
             
                    @splat_options = nil
         | 
| 12 12 | 
             
                    exp = compile(exp)
         | 
| 13 13 | 
             
                    if @splat_options
         | 
| 14 | 
            -
                      opts = options.to_hash.reject {|k,v| !Filter.options.valid_key?(k) }.inspect
         | 
| 14 | 
            +
                      opts = options.to_hash.reject { |k, v| !Filter.options.valid_key?(k) }.inspect
         | 
| 15 15 | 
             
                      [:multi, [:code, "#{@splat_options} = #{opts}"], exp]
         | 
| 16 16 | 
             
                    else
         | 
| 17 17 | 
             
                      exp
         | 
| @@ -45,7 +45,7 @@ module Slim | |
| 45 45 | 
             
                  # @param [Array] attrs Array of temple expressions
         | 
| 46 46 | 
             
                  # @return [Array] Compiled temple expression
         | 
| 47 47 | 
             
                  def on_html_attrs(*attrs)
         | 
| 48 | 
            -
                    if attrs.any? {|attr| splat?(attr) }
         | 
| 48 | 
            +
                    if attrs.any? { |attr| splat?(attr) }
         | 
| 49 49 | 
             
                      builder, block = make_builder(attrs)
         | 
| 50 50 | 
             
                      [:multi,
         | 
| 51 51 | 
             
                       block,
         | 
| @@ -86,7 +86,7 @@ module Slim | |
| 86 86 | 
             
                          attr
         | 
| 87 87 | 
             
                        end
         | 
| 88 88 | 
             
                    end
         | 
| 89 | 
            -
                     | 
| 89 | 
            +
                    [builder, result]
         | 
| 90 90 | 
             
                  end
         | 
| 91 91 | 
             
                end
         | 
| 92 92 | 
             
              end
         | 
    
        data/lib/slim/translator.rb
    CHANGED
    
    | @@ -110,7 +110,7 @@ module Slim | |
| 110 110 | 
             
                  def on_slim_output(escape, code, content)
         | 
| 111 111 | 
             
                    @captures_count += 1
         | 
| 112 112 | 
             
                    @text << "%#{@captures_count}"
         | 
| 113 | 
            -
                    [:capture, "#{@captures_var}[#{@captures_count-1}]", [:slim, :output, escape, code, content]]
         | 
| 113 | 
            +
                    [:capture, "#{@captures_var}[#{@captures_count - 1}]", [:slim, :output, escape, code, content]]
         | 
| 114 114 | 
             
                  end
         | 
| 115 115 | 
             
                end
         | 
| 116 116 | 
             
              end
         | 
    
        data/lib/slim/version.rb
    CHANGED
    
    
    
        data/test/core/helper.rb
    CHANGED
    
    | @@ -62,16 +62,8 @@ class TestSlim < Minitest::Test | |
| 62 62 | 
             
              end
         | 
| 63 63 |  | 
| 64 64 | 
             
              def assert_backtrace(ex, from)
         | 
| 65 | 
            -
                 | 
| 66 | 
            -
             | 
| 67 | 
            -
                  if ex.backtrace[0] !~ /^#{Regexp.escape from}/
         | 
| 68 | 
            -
                    ex.backtrace[1] =~ /([^\s]+:\d+)/
         | 
| 69 | 
            -
                    assert_equal from, $1
         | 
| 70 | 
            -
                  end
         | 
| 71 | 
            -
                else
         | 
| 72 | 
            -
                  ex.backtrace[0] =~ /([^\s]+:\d+)/
         | 
| 73 | 
            -
                  assert_equal from, $1
         | 
| 74 | 
            -
                end
         | 
| 65 | 
            +
                ex.backtrace[0] =~ /([^\s]+:\d+)/
         | 
| 66 | 
            +
                assert_equal from, $1
         | 
| 75 67 | 
             
              end
         | 
| 76 68 |  | 
| 77 69 | 
             
              def assert_ruby_syntax_error(from, source, options = {})
         | 
    
        data/test/core/test_commands.rb
    CHANGED
    
    | @@ -73,23 +73,19 @@ class TestSlimCommands < Minitest::Test | |
| 73 73 | 
             
                end
         | 
| 74 74 | 
             
              end
         | 
| 75 75 |  | 
| 76 | 
            -
               | 
| 77 | 
            -
             | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
                   | 
| 81 | 
            -
                  prepare_common_test DYNAMIC_TEMPLATE, '--locals', data do |out, err|
         | 
| 82 | 
            -
                    assert err.empty?
         | 
| 83 | 
            -
                    assert_equal "<p>Hello from slim!</p>\n", out
         | 
| 84 | 
            -
                  end
         | 
| 76 | 
            +
              def test_locals_json
         | 
| 77 | 
            +
                data = '{"name":"from slim"}'
         | 
| 78 | 
            +
                prepare_common_test DYNAMIC_TEMPLATE, '--locals', data do |out, err|
         | 
| 79 | 
            +
                  assert err.empty?
         | 
| 80 | 
            +
                  assert_equal "<p>Hello from slim!</p>\n", out
         | 
| 85 81 | 
             
                end
         | 
| 82 | 
            +
              end
         | 
| 86 83 |  | 
| 87 | 
            -
             | 
| 88 | 
            -
             | 
| 89 | 
            -
             | 
| 90 | 
            -
             | 
| 91 | 
            -
             | 
| 92 | 
            -
                  end
         | 
| 84 | 
            +
              def test_locals_yaml
         | 
| 85 | 
            +
                data = "name: from slim"
         | 
| 86 | 
            +
                prepare_common_test DYNAMIC_TEMPLATE, '--locals', data do |out, err|
         | 
| 87 | 
            +
                  assert err.empty?
         | 
| 88 | 
            +
                  assert_equal "<p>Hello from slim!</p>\n", out
         | 
| 93 89 | 
             
                end
         | 
| 94 90 | 
             
              end
         | 
| 95 91 |  | 
| @@ -106,6 +106,25 @@ ruby: | |
| 106 106 | 
             
                assert_ruby_error NameError,"(__TEMPLATE__):4", source
         | 
| 107 107 | 
             
              end
         | 
| 108 108 |  | 
| 109 | 
            +
              def test_embedded_ruby3
         | 
| 110 | 
            +
                source = %q{
         | 
| 111 | 
            +
            h1 before
         | 
| 112 | 
            +
            ruby:
         | 
| 113 | 
            +
              a = 1
         | 
| 114 | 
            +
             | 
| 115 | 
            +
            h1 between
         | 
| 116 | 
            +
            ruby:
         | 
| 117 | 
            +
              b = a + 1
         | 
| 118 | 
            +
             | 
| 119 | 
            +
              unknown_ruby_method
         | 
| 120 | 
            +
             | 
| 121 | 
            +
              c = 3
         | 
| 122 | 
            +
            h1 third
         | 
| 123 | 
            +
            }
         | 
| 124 | 
            +
             | 
| 125 | 
            +
                assert_ruby_error NameError,"(__TEMPLATE__):10", source
         | 
| 126 | 
            +
              end
         | 
| 127 | 
            +
             | 
| 109 128 | 
             
              def test_embedded_markdown
         | 
| 110 129 | 
             
                source = %q{
         | 
| 111 130 | 
             
            markdown:
         | 
    
        data/test/literate/helper.rb
    CHANGED
    
    | @@ -8,7 +8,7 @@ Slim::Engine.after  Slim::Parser, Temple::Filters::Validator, grammar: Slim::Gra | |
| 8 8 | 
             
            Slim::Engine.before :Pretty, Temple::Filters::Validator
         | 
| 9 9 | 
             
            Slim::Engine.set_options tr: false, logic_less: false
         | 
| 10 10 |  | 
| 11 | 
            -
            class  | 
| 11 | 
            +
            class Minitest::Spec
         | 
| 12 12 | 
             
              def render(source, options = {}, &block)
         | 
| 13 13 | 
             
                Slim::Template.new(options) { source }.render(self, &block)
         | 
| 14 14 | 
             
              end
         | 
| @@ -312,4 +312,19 @@ div | |
| 312 312 | 
             
                  'This is the menu'
         | 
| 313 313 | 
             
                end
         | 
| 314 314 | 
             
              end
         | 
| 315 | 
            +
             | 
| 316 | 
            +
              def test_render_parent_lambda
         | 
| 317 | 
            +
                source = %q{
         | 
| 318 | 
            +
            - list
         | 
| 319 | 
            +
              == fn
         | 
| 320 | 
            +
                p = string
         | 
| 321 | 
            +
            }
         | 
| 322 | 
            +
             | 
| 323 | 
            +
                assert_html '<fn><p>str</p></fn><fn><p>str</p></fn><fn><p>str</p></fn>',
         | 
| 324 | 
            +
                            source, scope: {
         | 
| 325 | 
            +
                              fn: ->(&block) { "<fn>#{block.call}</fn>" },
         | 
| 326 | 
            +
                              list: [ "item1", "item2", "item3" ],
         | 
| 327 | 
            +
                              string: "str"
         | 
| 328 | 
            +
                            }
         | 
| 329 | 
            +
              end
         | 
| 315 330 | 
             
            end
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            .cute *{class: "nice"} Hello
         | 
| @@ -9,6 +9,14 @@ class TestSlim < ActionDispatch::IntegrationTest | |
| 9 9 | 
             
                assert_html "<h1>Hello Slim!</h1>"
         | 
| 10 10 | 
             
              end
         | 
| 11 11 |  | 
| 12 | 
            +
              test "variant" do
         | 
| 13 | 
            +
                get "/slim/variant"
         | 
| 14 | 
            +
                assert_response :success
         | 
| 15 | 
            +
                assert_template "slim/normal"
         | 
| 16 | 
            +
                assert_template "layouts/application"
         | 
| 17 | 
            +
                assert_equal @response.body, "<!DOCTYPE html><html><head><title>Variant</title></head><body><div class=\"content\"><h1>Hello Slim!</h1></div></body></html>"
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
             | 
| 12 20 | 
             
              test "xml view" do
         | 
| 13 21 | 
             
                get "/slim/xml"
         | 
| 14 22 | 
             
                assert_response :success
         | 
| @@ -86,4 +94,9 @@ class TestSlim < ActionDispatch::IntegrationTest | |
| 86 94 | 
             
                get "/slim/splat"
         | 
| 87 95 | 
             
                assert_html "<div id=\"splat\"><splat>Hello</splat></div>"
         | 
| 88 96 | 
             
              end
         | 
| 97 | 
            +
             | 
| 98 | 
            +
              test "splat with delimiter" do
         | 
| 99 | 
            +
                get "/slim/splat_with_delimiter"
         | 
| 100 | 
            +
                assert_html "<div class=\"cute nice\">Hello</div>"
         | 
| 101 | 
            +
              end
         | 
| 89 102 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,16 +1,16 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: slim
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 5. | 
| 4 | 
            +
              version: 5.2.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Daniel Mendler
         | 
| 8 8 | 
             
            - Andrew Stone
         | 
| 9 9 | 
             
            - Fred Wu
         | 
| 10 | 
            -
            autorequire: | 
| 10 | 
            +
            autorequire:
         | 
| 11 11 | 
             
            bindir: bin
         | 
| 12 12 | 
             
            cert_chain: []
         | 
| 13 | 
            -
            date: 2023- | 
| 13 | 
            +
            date: 2023-11-11 00:00:00.000000000 Z
         | 
| 14 14 | 
             
            dependencies:
         | 
| 15 15 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 16 16 | 
             
              name: temple
         | 
| @@ -136,6 +136,7 @@ files: | |
| 136 136 | 
             
            - test/rails/app/helpers/application_helper.rb
         | 
| 137 137 | 
             
            - test/rails/app/models/entry.rb
         | 
| 138 138 | 
             
            - test/rails/app/views/entries/edit.html.slim
         | 
| 139 | 
            +
            - test/rails/app/views/layouts/application.html+testvariant.slim
         | 
| 139 140 | 
             
            - test/rails/app/views/layouts/application.html.slim
         | 
| 140 141 | 
             
            - test/rails/app/views/slim/_partial.html.slim
         | 
| 141 142 | 
             
            - test/rails/app/views/slim/attributes.html.slim
         | 
| @@ -148,6 +149,7 @@ files: | |
| 148 149 | 
             
            - test/rails/app/views/slim/normal.html.slim
         | 
| 149 150 | 
             
            - test/rails/app/views/slim/partial.html.slim
         | 
| 150 151 | 
             
            - test/rails/app/views/slim/splat.html.slim
         | 
| 152 | 
            +
            - test/rails/app/views/slim/splat_with_delimiter.slim
         | 
| 151 153 | 
             
            - test/rails/app/views/slim/thread_options.html.slim
         | 
| 152 154 | 
             
            - test/rails/app/views/slim/variables.html.slim
         | 
| 153 155 | 
             
            - test/rails/app/views/slim/xml.slim
         | 
| @@ -180,7 +182,7 @@ homepage: http://github.com/slim-template/slim/ | |
| 180 182 | 
             
            licenses:
         | 
| 181 183 | 
             
            - MIT
         | 
| 182 184 | 
             
            metadata: {}
         | 
| 183 | 
            -
            post_install_message: | 
| 185 | 
            +
            post_install_message:
         | 
| 184 186 | 
             
            rdoc_options: []
         | 
| 185 187 | 
             
            require_paths:
         | 
| 186 188 | 
             
            - lib
         | 
| @@ -195,8 +197,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 195 197 | 
             
                - !ruby/object:Gem::Version
         | 
| 196 198 | 
             
                  version: '0'
         | 
| 197 199 | 
             
            requirements: []
         | 
| 198 | 
            -
            rubygems_version: 3. | 
| 199 | 
            -
            signing_key: | 
| 200 | 
            +
            rubygems_version: 3.4.20
         | 
| 201 | 
            +
            signing_key:
         | 
| 200 202 | 
             
            specification_version: 4
         | 
| 201 203 | 
             
            summary: Slim is a template language.
         | 
| 202 204 | 
             
            test_files: []
         |