brakeman 4.6.1 → 4.7.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of brakeman might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGES.md +11 -0
- data/bundle/load.rb +7 -7
- data/bundle/ruby/2.6.0/gems/{haml-4.0.7 → haml-5.1.2}/CHANGELOG.md +122 -4
- data/bundle/ruby/2.6.0/gems/{haml-4.0.7 → haml-5.1.2}/FAQ.md +4 -14
- data/bundle/ruby/2.6.0/gems/haml-5.1.2/Gemfile +19 -0
- data/bundle/ruby/2.6.0/gems/{haml-4.0.7 → haml-5.1.2}/MIT-LICENSE +2 -2
- data/bundle/ruby/2.6.0/gems/{haml-4.0.7 → haml-5.1.2}/README.md +80 -42
- data/bundle/ruby/2.6.0/gems/{haml-4.0.7 → haml-5.1.2}/REFERENCE.md +121 -64
- data/bundle/ruby/2.6.0/gems/haml-5.1.2/TODO +24 -0
- data/bundle/ruby/2.6.0/gems/haml-5.1.2/haml.gemspec +44 -0
- data/bundle/ruby/2.6.0/gems/{haml-4.0.7 → haml-5.1.2}/lib/haml.rb +2 -0
- data/bundle/ruby/2.6.0/gems/haml-5.1.2/lib/haml/attribute_builder.rb +164 -0
- data/bundle/ruby/2.6.0/gems/haml-5.1.2/lib/haml/attribute_compiler.rb +224 -0
- data/bundle/ruby/2.6.0/gems/haml-5.1.2/lib/haml/attribute_parser.rb +150 -0
- data/bundle/ruby/2.6.0/gems/{haml-4.0.7 → haml-5.1.2}/lib/haml/buffer.rb +25 -132
- data/bundle/ruby/2.6.0/gems/haml-5.1.2/lib/haml/compiler.rb +330 -0
- data/bundle/ruby/2.6.0/gems/{haml-4.0.7 → haml-5.1.2}/lib/haml/engine.rb +34 -41
- data/bundle/ruby/2.6.0/gems/haml-5.1.2/lib/haml/error.rb +65 -0
- data/bundle/ruby/2.6.0/gems/haml-5.1.2/lib/haml/escapable.rb +50 -0
- data/bundle/ruby/2.6.0/gems/{haml-4.0.7 → haml-5.1.2}/lib/haml/exec.rb +38 -20
- data/bundle/ruby/2.6.0/gems/{haml-4.0.7 → haml-5.1.2}/lib/haml/filters.rb +22 -27
- data/bundle/ruby/2.6.0/gems/haml-5.1.2/lib/haml/generator.rb +42 -0
- data/bundle/ruby/2.6.0/gems/{haml-4.0.7 → haml-5.1.2}/lib/haml/helpers.rb +129 -90
- data/bundle/ruby/2.6.0/gems/{haml-4.0.7 → haml-5.1.2}/lib/haml/helpers/action_view_extensions.rb +4 -2
- data/bundle/ruby/2.6.0/gems/{haml-4.0.7 → haml-5.1.2}/lib/haml/helpers/action_view_mods.rb +45 -60
- data/bundle/ruby/2.6.0/gems/{haml-4.0.7 → haml-5.1.2}/lib/haml/helpers/action_view_xss_mods.rb +2 -0
- data/bundle/ruby/2.6.0/gems/haml-5.1.2/lib/haml/helpers/safe_erubi_template.rb +20 -0
- data/bundle/ruby/2.6.0/gems/{haml-4.0.7 → haml-5.1.2}/lib/haml/helpers/safe_erubis_template.rb +5 -1
- data/bundle/ruby/2.6.0/gems/{haml-4.0.7 → haml-5.1.2}/lib/haml/helpers/xss_mods.rb +19 -12
- data/bundle/ruby/2.6.0/gems/{haml-4.0.7 → haml-5.1.2}/lib/haml/options.rb +63 -69
- data/bundle/ruby/2.6.0/gems/{haml-4.0.7 → haml-5.1.2}/lib/haml/parser.rb +292 -228
- data/bundle/ruby/2.6.0/gems/haml-5.1.2/lib/haml/plugin.rb +37 -0
- data/bundle/ruby/2.6.0/gems/haml-5.1.2/lib/haml/railtie.rb +48 -0
- data/bundle/ruby/2.6.0/gems/{haml-4.0.7 → haml-5.1.2}/lib/haml/sass_rails_filter.rb +18 -4
- data/bundle/ruby/2.6.0/gems/{haml-4.0.7 → haml-5.1.2}/lib/haml/template.rb +13 -6
- data/bundle/ruby/2.6.0/gems/{haml-4.0.7 → haml-5.1.2}/lib/haml/template/options.rb +13 -2
- data/bundle/ruby/2.6.0/gems/haml-5.1.2/lib/haml/temple_engine.rb +123 -0
- data/bundle/ruby/2.6.0/gems/haml-5.1.2/lib/haml/temple_line_counter.rb +30 -0
- data/bundle/ruby/2.6.0/gems/haml-5.1.2/lib/haml/util.rb +258 -0
- data/bundle/ruby/2.6.0/gems/haml-5.1.2/lib/haml/version.rb +5 -0
- data/bundle/ruby/2.6.0/gems/haml-5.1.2/yard/default/fulldoc/html/css/common.sass +15 -0
- data/bundle/ruby/2.6.0/gems/haml-5.1.2/yard/default/layout/html/footer.erb +12 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/AUTHORS +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/COPYING +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/Changelog.md +3 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/Gemfile +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/LICENSE +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/README.md +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/TODO +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/appveyor.yml +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/highline.gemspec +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/lib/highline.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/lib/highline/builtin_styles.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/lib/highline/color_scheme.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/lib/highline/compatibility.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/lib/highline/custom_errors.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/lib/highline/import.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/lib/highline/io_console_compatible.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/lib/highline/list.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/lib/highline/list_renderer.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/lib/highline/menu.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/lib/highline/menu/item.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/lib/highline/paginator.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/lib/highline/question.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/lib/highline/question/answer_converter.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/lib/highline/question_asker.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/lib/highline/simulate.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/lib/highline/statement.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/lib/highline/string.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/lib/highline/string_extensions.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/lib/highline/style.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/lib/highline/template_renderer.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/lib/highline/terminal.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/lib/highline/terminal/io_console.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/lib/highline/terminal/ncurses.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/lib/highline/terminal/unix_stty.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/lib/highline/version.rb +1 -1
- data/bundle/ruby/2.6.0/gems/{highline-2.0.2 → highline-2.0.3}/lib/highline/wrapper.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{ruby2ruby-2.4.3 → ruby2ruby-2.4.4}/History.rdoc +6 -0
- data/bundle/ruby/2.6.0/gems/{ruby2ruby-2.4.3 → ruby2ruby-2.4.4}/Manifest.txt +0 -0
- data/bundle/ruby/2.6.0/gems/{ruby2ruby-2.4.3 → ruby2ruby-2.4.4}/README.rdoc +0 -0
- data/bundle/ruby/2.6.0/gems/{ruby2ruby-2.4.3 → ruby2ruby-2.4.4}/lib/ruby2ruby.rb +3 -3
- data/bundle/ruby/2.6.0/gems/{ruby_parser-3.13.1 → ruby_parser-3.14.0}/History.rdoc +38 -0
- data/bundle/ruby/2.6.0/gems/{ruby_parser-3.13.1 → ruby_parser-3.14.0}/Manifest.txt +0 -0
- data/bundle/ruby/2.6.0/gems/{ruby_parser-3.13.1 → ruby_parser-3.14.0}/README.rdoc +3 -3
- data/bundle/ruby/2.6.0/gems/{ruby_parser-3.13.1 → ruby_parser-3.14.0}/compare/normalize.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{ruby_parser-3.13.1 → ruby_parser-3.14.0}/debugging.md +0 -0
- data/bundle/ruby/2.6.0/gems/{ruby_parser-3.13.1 → ruby_parser-3.14.0}/lib/rp_extensions.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{ruby_parser-3.13.1 → ruby_parser-3.14.0}/lib/rp_stringscanner.rb +0 -0
- data/bundle/ruby/2.6.0/gems/ruby_parser-3.14.0/lib/ruby20_parser.rb +7045 -0
- data/bundle/ruby/2.6.0/gems/{ruby_parser-3.13.1/lib/ruby_parser.yy → ruby_parser-3.14.0/lib/ruby20_parser.y} +390 -397
- data/bundle/ruby/2.6.0/gems/ruby_parser-3.14.0/lib/ruby21_parser.rb +7116 -0
- data/bundle/ruby/2.6.0/gems/{ruby_parser-3.13.1 → ruby_parser-3.14.0}/lib/ruby21_parser.y +399 -254
- data/bundle/ruby/2.6.0/gems/ruby_parser-3.14.0/lib/ruby22_parser.rb +7149 -0
- data/bundle/ruby/2.6.0/gems/{ruby_parser-3.13.1 → ruby_parser-3.14.0}/lib/ruby22_parser.y +400 -255
- data/bundle/ruby/2.6.0/gems/ruby_parser-3.14.0/lib/ruby23_parser.rb +7166 -0
- data/bundle/ruby/2.6.0/gems/{ruby_parser-3.13.1 → ruby_parser-3.14.0}/lib/ruby23_parser.y +400 -255
- data/bundle/ruby/2.6.0/gems/ruby_parser-3.14.0/lib/ruby24_parser.rb +7178 -0
- data/bundle/ruby/2.6.0/gems/{ruby_parser-3.13.1 → ruby_parser-3.14.0}/lib/ruby24_parser.y +404 -257
- data/bundle/ruby/2.6.0/gems/ruby_parser-3.14.0/lib/ruby25_parser.rb +7178 -0
- data/bundle/ruby/2.6.0/gems/{ruby_parser-3.13.1 → ruby_parser-3.14.0}/lib/ruby25_parser.y +404 -257
- data/bundle/ruby/2.6.0/gems/ruby_parser-3.14.0/lib/ruby26_parser.rb +7198 -0
- data/bundle/ruby/2.6.0/gems/{ruby_parser-3.13.1 → ruby_parser-3.14.0}/lib/ruby26_parser.y +410 -261
- data/bundle/ruby/2.6.0/gems/{ruby_parser-3.13.1 → ruby_parser-3.14.0}/lib/ruby_lexer.rb +424 -432
- data/bundle/ruby/2.6.0/gems/{ruby_parser-3.13.1 → ruby_parser-3.14.0}/lib/ruby_lexer.rex +0 -0
- data/bundle/ruby/2.6.0/gems/{ruby_parser-3.13.1 → ruby_parser-3.14.0}/lib/ruby_lexer.rex.rb +1 -1
- data/bundle/ruby/2.6.0/gems/{ruby_parser-3.13.1 → ruby_parser-3.14.0}/lib/ruby_parser.rb +27 -27
- data/bundle/ruby/2.6.0/gems/ruby_parser-3.14.0/lib/ruby_parser.yy +2732 -0
- data/bundle/ruby/2.6.0/gems/{ruby_parser-3.13.1 → ruby_parser-3.14.0}/lib/ruby_parser_extras.rb +627 -406
- data/bundle/ruby/2.6.0/gems/{ruby_parser-3.13.1 → ruby_parser-3.14.0}/tools/munge.rb +1 -1
- data/bundle/ruby/2.6.0/gems/{ruby_parser-3.13.1 → ruby_parser-3.14.0}/tools/ripper.rb +13 -2
- data/bundle/ruby/2.6.0/gems/{sexp_processor-4.12.1 → sexp_processor-4.13.0}/History.rdoc +13 -0
- data/bundle/ruby/2.6.0/gems/{sexp_processor-4.12.1 → sexp_processor-4.13.0}/Manifest.txt +1 -0
- data/bundle/ruby/2.6.0/gems/{sexp_processor-4.12.1 → sexp_processor-4.13.0}/README.rdoc +0 -0
- data/bundle/ruby/2.6.0/gems/{sexp_processor-4.12.1 → sexp_processor-4.13.0}/lib/composite_sexp_processor.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{sexp_processor-4.12.1 → sexp_processor-4.13.0}/lib/pt_testcase.rb +0 -0
- data/bundle/ruby/2.6.0/gems/sexp_processor-4.13.0/lib/sexp.rb +381 -0
- data/bundle/ruby/2.6.0/gems/{sexp_processor-4.12.1/lib/sexp.rb → sexp_processor-4.13.0/lib/sexp_matcher.rb} +25 -385
- data/bundle/ruby/2.6.0/gems/{sexp_processor-4.12.1 → sexp_processor-4.13.0}/lib/sexp_processor.rb +1 -1
- data/bundle/ruby/2.6.0/gems/{sexp_processor-4.12.1 → sexp_processor-4.13.0}/lib/strict_sexp.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{sexp_processor-4.12.1 → sexp_processor-4.13.0}/lib/unique.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/CHANGES +5 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/EXPRESSIONS.md +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/Gemfile +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/LICENSE +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/README.md +1 -1
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/engine.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/erb/engine.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/erb/parser.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/erb/template.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/erb/trimming.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/exceptions.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/filter.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/filters/code_merger.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/filters/control_flow.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/filters/dynamic_inliner.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/filters/encoding.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/filters/eraser.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/filters/escapable.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/filters/multi_flattener.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/filters/remove_bom.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/filters/static_analyzer.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/filters/static_merger.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/filters/string_splitter.rb +1 -1
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/filters/validator.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/generator.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/generators/array.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/generators/array_buffer.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/generators/erb.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/generators/rails_output_buffer.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/generators/string_buffer.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/grammar.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/html/attribute_merger.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/html/attribute_remover.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/html/attribute_sorter.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/html/dispatcher.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/html/fast.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/html/filter.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/html/pretty.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/html/safe.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/map.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/mixins/dispatcher.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/mixins/engine_dsl.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/mixins/grammar_dsl.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/mixins/options.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/mixins/template.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/parser.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/static_analyzer.rb +1 -1
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/templates.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/templates/rails.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/templates/tilt.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/lib/temple/utils.rb +0 -0
- data/bundle/ruby/2.6.0/gems/temple-0.8.2/lib/temple/version.rb +3 -0
- data/bundle/ruby/2.6.0/gems/{temple-0.8.1 → temple-0.8.2}/temple.gemspec +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/COPYING +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt.rb +1 -1
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/asciidoc.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/babel.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/bluecloth.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/builder.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/coffee.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/commonmarker.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/creole.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/csv.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/dummy.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/erb.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/erubi.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/erubis.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/etanni.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/haml.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/kramdown.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/less.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/liquid.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/livescript.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/mapping.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/markaby.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/maruku.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/nokogiri.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/pandoc.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/plain.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/prawn.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/radius.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/rdiscount.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/rdoc.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/redcarpet.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/redcloth.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/rst-pandoc.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/sass.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/sigil.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/string.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/template.rb +7 -12
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/typescript.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/wikicloth.rb +0 -0
- data/bundle/ruby/2.6.0/gems/{tilt-2.0.9 → tilt-2.0.10}/lib/tilt/yajl.rb +0 -0
- data/lib/brakeman/checks/base_check.rb +23 -1
- data/lib/brakeman/checks/check_cookie_serialization.rb +1 -1
- data/lib/brakeman/checks/check_cross_site_scripting.rb +1 -1
- data/lib/brakeman/checks/check_execute.rb +26 -1
- data/lib/brakeman/differ.rb +16 -28
- data/lib/brakeman/parsers/haml_embedded.rb +1 -1
- data/lib/brakeman/parsers/template_parser.rb +3 -1
- data/lib/brakeman/processors/alias_processor.rb +10 -0
- data/lib/brakeman/processors/base_processor.rb +2 -0
- data/lib/brakeman/processors/haml_template_processor.rb +86 -122
- data/lib/brakeman/processors/lib/rails2_config_processor.rb +1 -1
- data/lib/brakeman/processors/template_alias_processor.rb +28 -0
- data/lib/brakeman/tracker/config.rb +33 -92
- data/lib/brakeman/version.rb +1 -1
- metadata +215 -206
- data/bundle/ruby/2.6.0/gems/haml-4.0.7/lib/haml/compiler.rb +0 -540
- data/bundle/ruby/2.6.0/gems/haml-4.0.7/lib/haml/error.rb +0 -61
- data/bundle/ruby/2.6.0/gems/haml-4.0.7/lib/haml/railtie.rb +0 -22
- data/bundle/ruby/2.6.0/gems/haml-4.0.7/lib/haml/template/plugin.rb +0 -41
- data/bundle/ruby/2.6.0/gems/haml-4.0.7/lib/haml/util.rb +0 -377
- data/bundle/ruby/2.6.0/gems/haml-4.0.7/lib/haml/version.rb +0 -3
- data/bundle/ruby/2.6.0/gems/ruby_parser-3.13.1/lib/ruby20_parser.rb +0 -6869
- data/bundle/ruby/2.6.0/gems/ruby_parser-3.13.1/lib/ruby20_parser.y +0 -2431
- data/bundle/ruby/2.6.0/gems/ruby_parser-3.13.1/lib/ruby21_parser.rb +0 -6944
- data/bundle/ruby/2.6.0/gems/ruby_parser-3.13.1/lib/ruby22_parser.rb +0 -6968
- data/bundle/ruby/2.6.0/gems/ruby_parser-3.13.1/lib/ruby23_parser.rb +0 -6987
- data/bundle/ruby/2.6.0/gems/ruby_parser-3.13.1/lib/ruby24_parser.rb +0 -6994
- data/bundle/ruby/2.6.0/gems/ruby_parser-3.13.1/lib/ruby25_parser.rb +0 -6994
- data/bundle/ruby/2.6.0/gems/ruby_parser-3.13.1/lib/ruby26_parser.rb +0 -7012
- data/bundle/ruby/2.6.0/gems/temple-0.8.1/lib/temple/version.rb +0 -3
- data/bundle/ruby/2.6.0/gems/tilt-2.0.9/CHANGELOG.md +0 -132
- data/bundle/ruby/2.6.0/gems/tilt-2.0.9/Gemfile +0 -70
- data/bundle/ruby/2.6.0/gems/tilt-2.0.9/HACKING +0 -16
- data/bundle/ruby/2.6.0/gems/tilt-2.0.9/README.md +0 -233
- data/bundle/ruby/2.6.0/gems/tilt-2.0.9/tilt.gemspec +0 -130
@@ -1,61 +0,0 @@
|
|
1
|
-
module Haml
|
2
|
-
# An exception raised by Haml code.
|
3
|
-
class Error < StandardError
|
4
|
-
|
5
|
-
MESSAGES = {
|
6
|
-
:bad_script_indent => '"%s" is indented at wrong level: expected %d, but was at %d.',
|
7
|
-
:cant_run_filter => 'Can\'t run "%s" filter; you must require its dependencies first',
|
8
|
-
:cant_use_tabs_and_spaces => "Indentation can't use both tabs and spaces.",
|
9
|
-
:deeper_indenting => "The line was indented %d levels deeper than the previous line.",
|
10
|
-
:filter_not_defined => 'Filter "%s" is not defined.',
|
11
|
-
:gem_install_filter_deps => '"%s" filter\'s %s dependency missing: try installing it or adding it to your Gemfile',
|
12
|
-
:illegal_element => "Illegal element: classes and ids must have values.",
|
13
|
-
:illegal_nesting_content => "Illegal nesting: nesting within a tag that already has content is illegal.",
|
14
|
-
:illegal_nesting_header => "Illegal nesting: nesting within a header command is illegal.",
|
15
|
-
:illegal_nesting_line => "Illegal nesting: content can't be both given on the same line as %%%s and nested within it.",
|
16
|
-
:illegal_nesting_plain => "Illegal nesting: nesting within plain text is illegal.",
|
17
|
-
:illegal_nesting_self_closing => "Illegal nesting: nesting within a self-closing tag is illegal.",
|
18
|
-
:inconsistent_indentation => "Inconsistent indentation: %s used for indentation, but the rest of the document was indented using %s.",
|
19
|
-
:indenting_at_start => "Indenting at the beginning of the document is illegal.",
|
20
|
-
:install_haml_contrib => 'To use the "%s" filter, please install the haml-contrib gem.',
|
21
|
-
:invalid_attribute_list => 'Invalid attribute list: %s.',
|
22
|
-
:invalid_filter_name => 'Invalid filter name ":%s".',
|
23
|
-
:invalid_tag => 'Invalid tag: "%s".',
|
24
|
-
:missing_if => 'Got "%s" with no preceding "if"',
|
25
|
-
:no_ruby_code => "There's no Ruby code for %s to evaluate.",
|
26
|
-
:self_closing_content => "Self-closing tags can't have content.",
|
27
|
-
:unbalanced_brackets => 'Unbalanced brackets.',
|
28
|
-
:no_end => <<-END
|
29
|
-
You don't need to use "- end" in Haml. Un-indent to close a block:
|
30
|
-
- if foo?
|
31
|
-
%strong Foo!
|
32
|
-
- else
|
33
|
-
Not foo.
|
34
|
-
%p This line is un-indented, so it isn't part of the "if" block
|
35
|
-
END
|
36
|
-
}
|
37
|
-
|
38
|
-
def self.message(key, *args)
|
39
|
-
string = MESSAGES[key] or raise "[HAML BUG] No error messages for #{key}"
|
40
|
-
(args.empty? ? string : string % args).rstrip
|
41
|
-
end
|
42
|
-
|
43
|
-
# The line of the template on which the error occurred.
|
44
|
-
#
|
45
|
-
# @return [Fixnum]
|
46
|
-
attr_reader :line
|
47
|
-
|
48
|
-
# @param message [String] The error message
|
49
|
-
# @param line [Fixnum] See \{#line}
|
50
|
-
def initialize(message = nil, line = nil)
|
51
|
-
super(message)
|
52
|
-
@line = line
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
# SyntaxError is the type of exception raised when Haml encounters an
|
57
|
-
# ill-formatted document.
|
58
|
-
# It's not particularly interesting,
|
59
|
-
# except in that it's a subclass of {Haml::Error}.
|
60
|
-
class SyntaxError < Error; end
|
61
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
if defined?(ActiveSupport)
|
2
|
-
require 'haml/template/options'
|
3
|
-
ActiveSupport.on_load(:before_initialize) do
|
4
|
-
ActiveSupport.on_load(:action_view) do
|
5
|
-
require "haml/template"
|
6
|
-
end
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
module Haml
|
11
|
-
class Railtie < ::Rails::Railtie
|
12
|
-
initializer :haml do |app|
|
13
|
-
require "haml/template"
|
14
|
-
if defined?(::Sass::Rails::SassTemplate) && app.config.assets.enabled
|
15
|
-
require "haml/sass_rails_filter"
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
require "haml/helpers/safe_erubis_template"
|
22
|
-
Haml::Filters::Erb.template_class = Haml::SafeErubisTemplate
|
@@ -1,41 +0,0 @@
|
|
1
|
-
module Haml
|
2
|
-
|
3
|
-
# This module makes Haml work with Rails using the template handler API.
|
4
|
-
class Plugin < ActionView::Template::Handlers::ERB.superclass
|
5
|
-
|
6
|
-
# Rails 3.1+, template handlers don't inherit from anything. In <= 3.0, they
|
7
|
-
# do. To avoid messy logic figuring this out, we just inherit from whatever
|
8
|
-
# the ERB handler does.
|
9
|
-
|
10
|
-
# In Rails 3.1+, we don't need to include Compilable.
|
11
|
-
if (ActionPack::VERSION::MAJOR == 3) && (ActionPack::VERSION::MINOR < 1)
|
12
|
-
include ActionView::Template::Handlers::Compilable
|
13
|
-
end
|
14
|
-
|
15
|
-
def handles_encoding?; true; end
|
16
|
-
|
17
|
-
def compile(template)
|
18
|
-
options = Haml::Template.options.dup
|
19
|
-
if (ActionPack::VERSION::MAJOR >= 4) && template.respond_to?(:type)
|
20
|
-
options[:mime_type] = template.type
|
21
|
-
elsif template.respond_to? :mime_type
|
22
|
-
options[:mime_type] = template.mime_type
|
23
|
-
end
|
24
|
-
options[:filename] = template.identifier
|
25
|
-
Haml::Engine.new(template.source, options).compiler.precompiled_with_ambles([])
|
26
|
-
end
|
27
|
-
|
28
|
-
# In Rails 3.1+, #call takes the place of #compile
|
29
|
-
def self.call(template)
|
30
|
-
new.compile(template)
|
31
|
-
end
|
32
|
-
|
33
|
-
def cache_fragment(block, name = {}, options = nil)
|
34
|
-
@view.fragment_for(block, name, options) do
|
35
|
-
eval("_hamlout.buffer", block.binding)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
ActionView::Template.register_template_handler(:haml, Haml::Plugin)
|
@@ -1,377 +0,0 @@
|
|
1
|
-
begin
|
2
|
-
require 'erubis/tiny'
|
3
|
-
rescue LoadError
|
4
|
-
require 'erb'
|
5
|
-
end
|
6
|
-
require 'set'
|
7
|
-
require 'stringio'
|
8
|
-
require 'strscan'
|
9
|
-
|
10
|
-
module Haml
|
11
|
-
# A module containing various useful functions.
|
12
|
-
module Util
|
13
|
-
extend self
|
14
|
-
|
15
|
-
# Computes the powerset of the given array.
|
16
|
-
# This is the set of all subsets of the array.
|
17
|
-
#
|
18
|
-
# @example
|
19
|
-
# powerset([1, 2, 3]) #=>
|
20
|
-
# Set[Set[], Set[1], Set[2], Set[3], Set[1, 2], Set[2, 3], Set[1, 3], Set[1, 2, 3]]
|
21
|
-
# @param arr [Enumerable]
|
22
|
-
# @return [Set<Set>] The subsets of `arr`
|
23
|
-
def powerset(arr)
|
24
|
-
arr.inject([Set.new].to_set) do |powerset, el|
|
25
|
-
new_powerset = Set.new
|
26
|
-
powerset.each do |subset|
|
27
|
-
new_powerset << subset
|
28
|
-
new_powerset << subset + [el]
|
29
|
-
end
|
30
|
-
new_powerset
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
# Returns information about the caller of the previous method.
|
35
|
-
#
|
36
|
-
# @param entry [String] An entry in the `#caller` list, or a similarly formatted string
|
37
|
-
# @return [[String, Fixnum, (String, nil)]] An array containing the filename, line, and method name of the caller.
|
38
|
-
# The method name may be nil
|
39
|
-
def caller_info(entry = caller[1])
|
40
|
-
info = entry.scan(/^(.*?):(-?.*?)(?::.*`(.+)')?$/).first
|
41
|
-
info[1] = info[1].to_i
|
42
|
-
# This is added by Rubinius to designate a block, but we don't care about it.
|
43
|
-
info[2].sub!(/ \{\}\Z/, '') if info[2]
|
44
|
-
info
|
45
|
-
end
|
46
|
-
|
47
|
-
# Silence all output to STDERR within a block.
|
48
|
-
#
|
49
|
-
# @yield A block in which no output will be printed to STDERR
|
50
|
-
def silence_warnings
|
51
|
-
the_real_stderr, $stderr = $stderr, StringIO.new
|
52
|
-
yield
|
53
|
-
ensure
|
54
|
-
$stderr = the_real_stderr
|
55
|
-
end
|
56
|
-
|
57
|
-
# Returns an ActionView::Template* class.
|
58
|
-
# In pre-3.0 versions of Rails, most of these classes
|
59
|
-
# were of the form `ActionView::TemplateFoo`,
|
60
|
-
# while afterwards they were of the form `ActionView;:Template::Foo`.
|
61
|
-
#
|
62
|
-
# @param name [#to_s] The name of the class to get.
|
63
|
-
# For example, `:Error` will return `ActionView::TemplateError`
|
64
|
-
# or `ActionView::Template::Error`.
|
65
|
-
def av_template_class(name)
|
66
|
-
return ActionView.const_get("Template#{name}") if ActionView.const_defined?("Template#{name}")
|
67
|
-
return ActionView::Template.const_get(name.to_s)
|
68
|
-
end
|
69
|
-
|
70
|
-
## Rails XSS Safety
|
71
|
-
|
72
|
-
# Whether or not ActionView's XSS protection is available and enabled,
|
73
|
-
# as is the default for Rails 3.0+, and optional for version 2.3.5+.
|
74
|
-
# Overridden in haml/template.rb if this is the case.
|
75
|
-
#
|
76
|
-
# @return [Boolean]
|
77
|
-
def rails_xss_safe?
|
78
|
-
false
|
79
|
-
end
|
80
|
-
|
81
|
-
# Returns the given text, marked as being HTML-safe.
|
82
|
-
# With older versions of the Rails XSS-safety mechanism,
|
83
|
-
# this destructively modifies the HTML-safety of `text`.
|
84
|
-
#
|
85
|
-
# @param text [String, nil]
|
86
|
-
# @return [String, nil] `text`, marked as HTML-safe
|
87
|
-
def html_safe(text)
|
88
|
-
return unless text
|
89
|
-
text.html_safe
|
90
|
-
end
|
91
|
-
|
92
|
-
# Checks that the encoding of a string is valid in Ruby 1.9
|
93
|
-
# and cleans up potential encoding gotchas like the UTF-8 BOM.
|
94
|
-
# If it's not, yields an error string describing the invalid character
|
95
|
-
# and the line on which it occurrs.
|
96
|
-
#
|
97
|
-
# @param str [String] The string of which to check the encoding
|
98
|
-
# @yield [msg] A block in which an encoding error can be raised.
|
99
|
-
# Only yields if there is an encoding error
|
100
|
-
# @yieldparam msg [String] The error message to be raised
|
101
|
-
# @return [String] `str`, potentially with encoding gotchas like BOMs removed
|
102
|
-
if RUBY_VERSION < "1.9"
|
103
|
-
def check_encoding(str)
|
104
|
-
str.gsub(/\A\xEF\xBB\xBF/, '') # Get rid of the UTF-8 BOM
|
105
|
-
end
|
106
|
-
else
|
107
|
-
|
108
|
-
def check_encoding(str)
|
109
|
-
if str.valid_encoding?
|
110
|
-
# Get rid of the Unicode BOM if possible
|
111
|
-
if str.encoding.name =~ /^UTF-(8|16|32)(BE|LE)?$/
|
112
|
-
return str.gsub(Regexp.new("\\A\uFEFF".encode(str.encoding.name)), '')
|
113
|
-
else
|
114
|
-
return str
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
encoding = str.encoding
|
119
|
-
newlines = Regexp.new("\r\n|\r|\n".encode(encoding).force_encoding("binary"))
|
120
|
-
str.force_encoding("binary").split(newlines).each_with_index do |line, i|
|
121
|
-
begin
|
122
|
-
line.encode(encoding)
|
123
|
-
rescue Encoding::UndefinedConversionError => e
|
124
|
-
yield <<MSG.rstrip, i + 1
|
125
|
-
Invalid #{encoding.name} character #{e.error_char.dump}
|
126
|
-
MSG
|
127
|
-
end
|
128
|
-
end
|
129
|
-
return str
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
if RUBY_VERSION < "1.9"
|
134
|
-
# Like {\#check\_encoding}, but also checks for a Ruby-style `-# coding:` comment
|
135
|
-
# at the beginning of the template and uses that encoding if it exists.
|
136
|
-
#
|
137
|
-
# The Haml encoding rules are simple.
|
138
|
-
# If a `-# coding:` comment exists,
|
139
|
-
# we assume that that's the original encoding of the document.
|
140
|
-
# Otherwise, we use whatever encoding Ruby has.
|
141
|
-
#
|
142
|
-
# Haml uses the same rules for parsing coding comments as Ruby.
|
143
|
-
# This means that it can understand Emacs-style comments
|
144
|
-
# (e.g. `-*- encoding: "utf-8" -*-`),
|
145
|
-
# and also that it cannot understand non-ASCII-compatible encodings
|
146
|
-
# such as `UTF-16` and `UTF-32`.
|
147
|
-
#
|
148
|
-
# @param str [String] The Haml template of which to check the encoding
|
149
|
-
# @yield [msg] A block in which an encoding error can be raised.
|
150
|
-
# Only yields if there is an encoding error
|
151
|
-
# @yieldparam msg [String] The error message to be raised
|
152
|
-
# @return [String] The original string encoded properly
|
153
|
-
# @raise [ArgumentError] if the document declares an unknown encoding
|
154
|
-
def check_haml_encoding(str, &block)
|
155
|
-
check_encoding(str, &block)
|
156
|
-
end
|
157
|
-
else
|
158
|
-
def check_haml_encoding(str, &block)
|
159
|
-
str = str.dup if str.frozen?
|
160
|
-
|
161
|
-
bom, encoding = parse_haml_magic_comment(str)
|
162
|
-
if encoding; str.force_encoding(encoding)
|
163
|
-
elsif bom; str.force_encoding("UTF-8")
|
164
|
-
end
|
165
|
-
|
166
|
-
return check_encoding(str, &block)
|
167
|
-
end
|
168
|
-
end
|
169
|
-
|
170
|
-
if RUBY_VERSION < "1.9.2"
|
171
|
-
def inspect_obj(obj)
|
172
|
-
return obj.inspect
|
173
|
-
end
|
174
|
-
else
|
175
|
-
# Like `Object#inspect`, but preserves non-ASCII characters rather than escaping them under Ruby 1.9.2.
|
176
|
-
# This is necessary so that the precompiled Haml template can be `#encode`d into `@options[:encoding]`
|
177
|
-
# before being evaluated.
|
178
|
-
#
|
179
|
-
# @param obj {Object}
|
180
|
-
# @return {String}
|
181
|
-
def inspect_obj(obj)
|
182
|
-
return ':' + inspect_obj(obj.to_s) if obj.is_a?(Symbol)
|
183
|
-
return obj.inspect unless obj.is_a?(String)
|
184
|
-
'"' + obj.gsub(/[\x00-\x7F]+/) {|s| s.inspect[1...-1]} + '"'
|
185
|
-
end
|
186
|
-
end
|
187
|
-
|
188
|
-
## Static Method Stuff
|
189
|
-
|
190
|
-
# The context in which the ERB for \{#def\_static\_method} will be run.
|
191
|
-
class StaticConditionalContext
|
192
|
-
# @param set [#include?] The set of variables that are defined for this context.
|
193
|
-
def initialize(set)
|
194
|
-
@set = set
|
195
|
-
end
|
196
|
-
|
197
|
-
# Checks whether or not a variable is defined for this context.
|
198
|
-
#
|
199
|
-
# @param name [Symbol] The name of the variable
|
200
|
-
# @return [Boolean]
|
201
|
-
def method_missing(name, *args, &block)
|
202
|
-
super unless args.empty? && block.nil?
|
203
|
-
@set.include?(name)
|
204
|
-
end
|
205
|
-
end
|
206
|
-
|
207
|
-
# This is used for methods in {Haml::Buffer} that need to be very fast,
|
208
|
-
# and take a lot of boolean parameters
|
209
|
-
# that are known at compile-time.
|
210
|
-
# Instead of passing the parameters in normally,
|
211
|
-
# a separate method is defined for every possible combination of those parameters;
|
212
|
-
# these are then called using \{#static\_method\_name}.
|
213
|
-
#
|
214
|
-
# To define a static method, an ERB template for the method is provided.
|
215
|
-
# All conditionals based on the static parameters
|
216
|
-
# are done as embedded Ruby within this template.
|
217
|
-
# For example:
|
218
|
-
#
|
219
|
-
# def_static_method(Foo, :my_static_method, [:foo, :bar], :baz, :bang, <<RUBY)
|
220
|
-
# <% if baz && bang %>
|
221
|
-
# return foo + bar
|
222
|
-
# <% elsif baz || bang %>
|
223
|
-
# return foo - bar
|
224
|
-
# <% else %>
|
225
|
-
# return 17
|
226
|
-
# <% end %>
|
227
|
-
# RUBY
|
228
|
-
#
|
229
|
-
# \{#static\_method\_name} can be used to call static methods.
|
230
|
-
#
|
231
|
-
# @overload def_static_method(klass, name, args, *vars, erb)
|
232
|
-
# @param klass [Module] The class on which to define the static method
|
233
|
-
# @param name [#to_s] The (base) name of the static method
|
234
|
-
# @param args [Array<Symbol>] The names of the arguments to the defined methods
|
235
|
-
# (**not** to the ERB template)
|
236
|
-
# @param vars [Array<Symbol>] The names of the static boolean variables
|
237
|
-
# to be made available to the ERB template
|
238
|
-
def def_static_method(klass, name, args, *vars)
|
239
|
-
erb = vars.pop
|
240
|
-
info = caller_info
|
241
|
-
powerset(vars).each do |set|
|
242
|
-
context = StaticConditionalContext.new(set).instance_eval {binding}
|
243
|
-
method_content = (defined?(Erubis::TinyEruby) && Erubis::TinyEruby || ERB).new(erb).result(context)
|
244
|
-
|
245
|
-
klass.class_eval(<<METHOD, info[0], info[1])
|
246
|
-
def #{static_method_name(name, *vars.map {|v| set.include?(v)})}(#{args.join(', ')})
|
247
|
-
#{method_content}
|
248
|
-
end
|
249
|
-
METHOD
|
250
|
-
end
|
251
|
-
end
|
252
|
-
|
253
|
-
# Computes the name for a method defined via \{#def\_static\_method}.
|
254
|
-
#
|
255
|
-
# @param name [String] The base name of the static method
|
256
|
-
# @param vars [Array<Boolean>] The static variable assignment
|
257
|
-
# @return [String] The real name of the static method
|
258
|
-
def static_method_name(name, *vars)
|
259
|
-
:"#{name}_#{vars.map {|v| !!v}.join('_')}"
|
260
|
-
end
|
261
|
-
|
262
|
-
# Scans through a string looking for the interoplation-opening `#{`
|
263
|
-
# and, when it's found, yields the scanner to the calling code
|
264
|
-
# so it can handle it properly.
|
265
|
-
#
|
266
|
-
# The scanner will have any backslashes immediately in front of the `#{`
|
267
|
-
# as the second capture group (`scan[2]`),
|
268
|
-
# and the text prior to that as the first (`scan[1]`).
|
269
|
-
#
|
270
|
-
# @yieldparam scan [StringScanner] The scanner scanning through the string
|
271
|
-
# @return [String] The text remaining in the scanner after all `#{`s have been processed
|
272
|
-
def handle_interpolation(str)
|
273
|
-
scan = StringScanner.new(str)
|
274
|
-
yield scan while scan.scan(/(.*?)(\\*)\#\{/)
|
275
|
-
scan.rest
|
276
|
-
end
|
277
|
-
|
278
|
-
# Moves a scanner through a balanced pair of characters.
|
279
|
-
# For example:
|
280
|
-
#
|
281
|
-
# Foo (Bar (Baz bang) bop) (Bang (bop bip))
|
282
|
-
# ^ ^
|
283
|
-
# from to
|
284
|
-
#
|
285
|
-
# @param scanner [StringScanner] The string scanner to move
|
286
|
-
# @param start [Character] The character opening the balanced pair.
|
287
|
-
# A `Fixnum` in 1.8, a `String` in 1.9
|
288
|
-
# @param finish [Character] The character closing the balanced pair.
|
289
|
-
# A `Fixnum` in 1.8, a `String` in 1.9
|
290
|
-
# @param count [Fixnum] The number of opening characters matched
|
291
|
-
# before calling this method
|
292
|
-
# @return [(String, String)] The string matched within the balanced pair
|
293
|
-
# and the rest of the string.
|
294
|
-
# `["Foo (Bar (Baz bang) bop)", " (Bang (bop bip))"]` in the example above.
|
295
|
-
def balance(scanner, start, finish, count = 0)
|
296
|
-
str = ''
|
297
|
-
scanner = StringScanner.new(scanner) unless scanner.is_a? StringScanner
|
298
|
-
regexp = Regexp.new("(.*?)[\\#{start.chr}\\#{finish.chr}]", Regexp::MULTILINE)
|
299
|
-
while scanner.scan(regexp)
|
300
|
-
str << scanner.matched
|
301
|
-
count += 1 if scanner.matched[-1] == start
|
302
|
-
count -= 1 if scanner.matched[-1] == finish
|
303
|
-
return [str.strip, scanner.rest] if count == 0
|
304
|
-
end
|
305
|
-
end
|
306
|
-
|
307
|
-
# Formats a string for use in error messages about indentation.
|
308
|
-
#
|
309
|
-
# @param indentation [String] The string used for indentation
|
310
|
-
# @return [String] The name of the indentation (e.g. `"12 spaces"`, `"1 tab"`)
|
311
|
-
def human_indentation(indentation)
|
312
|
-
if !indentation.include?(?\t)
|
313
|
-
noun = 'space'
|
314
|
-
elsif !indentation.include?(?\s)
|
315
|
-
noun = 'tab'
|
316
|
-
else
|
317
|
-
return indentation.inspect
|
318
|
-
end
|
319
|
-
|
320
|
-
singular = indentation.length == 1
|
321
|
-
"#{indentation.length} #{noun}#{'s' unless singular}"
|
322
|
-
end
|
323
|
-
|
324
|
-
def contains_interpolation?(str)
|
325
|
-
str.include?('#{')
|
326
|
-
end
|
327
|
-
|
328
|
-
def unescape_interpolation(str, escape_html = nil)
|
329
|
-
res = ''
|
330
|
-
rest = Haml::Util.handle_interpolation str.dump do |scan|
|
331
|
-
escapes = (scan[2].size - 1) / 2
|
332
|
-
res << scan.matched[0...-3 - escapes]
|
333
|
-
if escapes % 2 == 1
|
334
|
-
res << '#{'
|
335
|
-
else
|
336
|
-
content = eval('"' + balance(scan, ?{, ?}, 1)[0][0...-1] + '"')
|
337
|
-
content = "Haml::Helpers.html_escape((#{content}))" if escape_html
|
338
|
-
res << '#{' + content + "}"# Use eval to get rid of string escapes
|
339
|
-
end
|
340
|
-
end
|
341
|
-
res + rest
|
342
|
-
end
|
343
|
-
|
344
|
-
private
|
345
|
-
|
346
|
-
# Parses a magic comment at the beginning of a Haml file.
|
347
|
-
# The parsing rules are basically the same as Ruby's.
|
348
|
-
#
|
349
|
-
# @return [(Boolean, String or nil)]
|
350
|
-
# Whether the document begins with a UTF-8 BOM,
|
351
|
-
# and the declared encoding of the document (or nil if none is declared)
|
352
|
-
def parse_haml_magic_comment(str)
|
353
|
-
scanner = StringScanner.new(str.dup.force_encoding("BINARY"))
|
354
|
-
bom = scanner.scan(/\xEF\xBB\xBF/n)
|
355
|
-
return bom unless scanner.scan(/-\s*#\s*/n)
|
356
|
-
if coding = try_parse_haml_emacs_magic_comment(scanner)
|
357
|
-
return bom, coding
|
358
|
-
end
|
359
|
-
|
360
|
-
return bom unless scanner.scan(/.*?coding[=:]\s*([\w-]+)/in)
|
361
|
-
return bom, scanner[1]
|
362
|
-
end
|
363
|
-
|
364
|
-
def try_parse_haml_emacs_magic_comment(scanner)
|
365
|
-
pos = scanner.pos
|
366
|
-
return unless scanner.scan(/.*?-\*-\s*/n)
|
367
|
-
# From Ruby's parse.y
|
368
|
-
return unless scanner.scan(/([^\s'":;]+)\s*:\s*("(?:\\.|[^"])*"|[^"\s;]+?)[\s;]*-\*-/n)
|
369
|
-
name, val = scanner[1], scanner[2]
|
370
|
-
return unless name =~ /(en)?coding/in
|
371
|
-
val = $1 if val =~ /^"(.*)"$/n
|
372
|
-
return val
|
373
|
-
ensure
|
374
|
-
scanner.pos = pos
|
375
|
-
end
|
376
|
-
end
|
377
|
-
end
|