brakeman 6.0.0 → 7.1.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/CHANGES.md +92 -0
- data/README.md +6 -3
- data/bundle/load.rb +16 -14
- data/bundle/ruby/3.2.0/gems/csv-3.3.5/LICENSE.txt +33 -0
- data/bundle/ruby/3.2.0/gems/csv-3.3.5/NEWS.md +1009 -0
- data/bundle/ruby/3.2.0/gems/csv-3.3.5/README.md +55 -0
- data/bundle/ruby/3.2.0/gems/csv-3.3.5/lib/csv/core_ext/array.rb +9 -0
- data/bundle/ruby/3.2.0/gems/csv-3.3.5/lib/csv/core_ext/string.rb +9 -0
- data/bundle/ruby/3.2.0/gems/csv-3.3.5/lib/csv/fields_converter.rb +96 -0
- data/bundle/ruby/3.2.0/gems/csv-3.3.5/lib/csv/input_record_separator.rb +18 -0
- data/bundle/ruby/3.2.0/gems/csv-3.3.5/lib/csv/parser.rb +1302 -0
- data/bundle/ruby/3.2.0/gems/csv-3.3.5/lib/csv/row.rb +757 -0
- data/bundle/ruby/3.2.0/gems/csv-3.3.5/lib/csv/table.rb +1055 -0
- data/bundle/ruby/3.2.0/gems/csv-3.3.5/lib/csv/version.rb +6 -0
- data/bundle/ruby/3.2.0/gems/csv-3.3.5/lib/csv/writer.rb +209 -0
- data/bundle/ruby/3.2.0/gems/csv-3.3.5/lib/csv.rb +3017 -0
- data/bundle/ruby/{3.0.0/gems/haml-5.2.2 → 3.2.0/gems/haml-6.3.0}/CHANGELOG.md +168 -4
- data/bundle/ruby/{3.0.0/gems/haml-5.2.2 → 3.2.0/gems/haml-6.3.0}/FAQ.md +1 -1
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/Gemfile +27 -0
- data/bundle/ruby/{3.0.0/gems/haml-5.2.2 → 3.2.0/gems/haml-6.3.0}/MIT-LICENSE +1 -1
- data/bundle/ruby/{3.0.0/gems/haml-5.2.2 → 3.2.0/gems/haml-6.3.0}/README.md +22 -34
- data/bundle/ruby/{3.0.0/gems/haml-5.2.2 → 3.2.0/gems/haml-6.3.0}/REFERENCE.md +95 -159
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/exe/haml +6 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/haml.gemspec +43 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/ambles.rb +20 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/attribute_builder.rb +162 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/attribute_compiler.rb +133 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/attribute_parser.rb +116 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/cli.rb +154 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/compiler/children_compiler.rb +155 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/compiler/comment_compiler.rb +51 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/compiler/doctype_compiler.rb +52 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/compiler/script_compiler.rb +114 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/compiler/silent_script_compiler.rb +24 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/compiler/tag_compiler.rb +76 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/compiler.rb +97 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/dynamic_merger.rb +67 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/engine.rb +59 -0
- data/bundle/ruby/{3.0.0/gems/haml-5.2.2 → 3.2.0/gems/haml-6.3.0}/lib/haml/error.rb +5 -4
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/escape.rb +13 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/escape_any.rb +21 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/base.rb +12 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/cdata.rb +20 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/coffee.rb +17 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/css.rb +33 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/erb.rb +10 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/escaped.rb +22 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/javascript.rb +33 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/less.rb +20 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/markdown.rb +11 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/plain.rb +29 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/preserve.rb +22 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/ruby.rb +10 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/sass.rb +15 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/scss.rb +15 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/text_base.rb +25 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/tilt_base.rb +59 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters.rb +75 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/force_escape.rb +29 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/helpers.rb +15 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/html.rb +22 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/identity.rb +13 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/object_ref.rb +35 -0
- data/bundle/ruby/{3.0.0/gems/haml-5.2.2 → 3.2.0/gems/haml-6.3.0}/lib/haml/parser.rb +158 -23
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/rails_helpers.rb +53 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/rails_template.rb +62 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/railtie.rb +10 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/ruby_expression.rb +32 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/string_splitter.rb +140 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/template.rb +20 -0
- data/bundle/ruby/{3.0.0/gems/haml-5.2.2 → 3.2.0/gems/haml-6.3.0}/lib/haml/temple_line_counter.rb +2 -1
- data/bundle/ruby/{3.0.0/gems/haml-5.2.2 → 3.2.0/gems/haml-6.3.0}/lib/haml/util.rb +19 -15
- data/bundle/ruby/{3.0.0/gems/haml-5.2.2 → 3.2.0/gems/haml-6.3.0}/lib/haml/version.rb +1 -2
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/whitespace.rb +8 -0
- data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml.rb +13 -0
- data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/Changelog.md +32 -0
- data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/Gemfile +2 -0
- data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/README.md +40 -1
- data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/highline.gemspec +6 -1
- data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/lib/highline/io_console_compatible.rb +1 -1
- data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/lib/highline/list_renderer.rb +2 -2
- data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/lib/highline/menu.rb +7 -5
- data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/lib/highline/question/answer_converter.rb +2 -5
- data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/lib/highline/question.rb +23 -13
- data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/lib/highline/question_asker.rb +3 -1
- data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/lib/highline/terminal/io_console.rb +1 -1
- data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/lib/highline/terminal/unix_stty.rb +6 -4
- data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/lib/highline/terminal.rb +8 -6
- data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/lib/highline/version.rb +1 -1
- data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/lib/highline.rb +42 -16
- data/bundle/ruby/3.2.0/gems/parallel-1.27.0/lib/parallel/version.rb +4 -0
- data/bundle/ruby/{3.0.0/gems/parallel-1.23.0 → 3.2.0/gems/parallel-1.27.0}/lib/parallel.rb +77 -21
- data/bundle/ruby/3.2.0/gems/reline-0.6.1/COPYING +56 -0
- data/bundle/ruby/3.2.0/gems/reline-0.6.1/README.md +94 -0
- data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/config.rb +373 -0
- data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/face.rb +199 -0
- data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/history.rb +76 -0
- data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/io/ansi.rb +318 -0
- data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/io/dumb.rb +120 -0
- data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/io/windows.rb +530 -0
- data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/io.rb +55 -0
- data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/key_actor/base.rb +37 -0
- data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/key_actor/composite.rb +17 -0
- data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/key_actor/emacs.rb +517 -0
- data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/key_actor/vi_command.rb +518 -0
- data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/key_actor/vi_insert.rb +517 -0
- data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/key_actor.rb +8 -0
- data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/key_stroke.rb +119 -0
- data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/kill_ring.rb +125 -0
- data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/line_editor.rb +2354 -0
- data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/unicode/east_asian_width.rb +1293 -0
- data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/unicode.rb +415 -0
- data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/version.rb +3 -0
- data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline.rb +528 -0
- data/bundle/ruby/3.2.0/gems/reline-0.6.1/license_of_rb-readline +25 -0
- data/bundle/ruby/3.2.0/gems/rexml-3.4.1/LICENSE.txt +22 -0
- data/bundle/ruby/3.2.0/gems/rexml-3.4.1/NEWS.md +699 -0
- data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/README.md +10 -1
- data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/attribute.rb +17 -11
- data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/document.rb +6 -2
- data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/element.rb +19 -34
- data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/entity.rb +9 -38
- data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/formatters/pretty.rb +3 -3
- data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/functions.rb +1 -2
- data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/namespace.rb +8 -4
- data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/node.rb +8 -4
- data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/parseexception.rb +1 -0
- data/bundle/ruby/3.2.0/gems/rexml-3.4.1/lib/rexml/parsers/baseparser.rb +887 -0
- data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/parsers/pullparser.rb +16 -0
- data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/parsers/sax2parser.rb +16 -19
- data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/parsers/streamparser.rb +16 -10
- data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/parsers/treeparser.rb +9 -21
- data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/parsers/xpathparser.rb +136 -86
- data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/rexml.rb +3 -1
- data/bundle/ruby/3.2.0/gems/rexml-3.4.1/lib/rexml/source.rb +383 -0
- data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/text.rb +60 -61
- data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/xpath_parser.rb +7 -3
- data/bundle/ruby/{3.0.0/gems/ruby2ruby-2.4.4 → 3.2.0/gems/ruby2ruby-2.5.2}/History.rdoc +28 -0
- data/bundle/ruby/{3.0.0/gems/ruby2ruby-2.4.4 → 3.2.0/gems/ruby2ruby-2.5.2}/lib/ruby2ruby.rb +166 -27
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/History.rdoc +18 -0
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/compare/normalize.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/ruby20_parser.rb +4220 -4273
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/ruby20_parser.y +0 -10
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/ruby21_parser.rb +4203 -4238
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/ruby21_parser.y +0 -10
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/ruby22_parser.rb +4239 -4276
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/ruby22_parser.y +0 -10
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/ruby23_parser.rb +4235 -4240
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1/lib/ruby24_parser.y → 3.2.0/gems/ruby_parser-3.20.3/lib/ruby23_parser.y} +1 -19
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/ruby24_parser.rb +4229 -4284
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1/lib/ruby23_parser.y → 3.2.0/gems/ruby_parser-3.20.3/lib/ruby24_parser.y} +9 -11
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/ruby25_parser.rb +4220 -4275
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/ruby25_parser.y +0 -10
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/ruby26_parser.rb +4221 -4276
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/ruby26_parser.y +0 -10
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/ruby27_parser.rb +4138 -4207
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/ruby27_parser.y +0 -10
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/ruby30_parser.rb +5989 -5957
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/ruby30_parser.y +95 -72
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/ruby31_parser.rb +6157 -6172
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/ruby31_parser.y +96 -73
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/ruby32_parser.rb +6251 -6314
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/ruby32_parser.y +117 -93
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/ruby3_parser.yy +132 -73
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/ruby_lexer.rb +15 -7
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/ruby_lexer.rex.rb +1 -1
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/ruby_lexer_strings.rb +2 -2
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/ruby_parser.yy +0 -10
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/ruby_parser_extras.rb +9 -9
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/tools/munge.rb +8 -2
- data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/tools/ripper.rb +14 -12
- data/bundle/ruby/{3.0.0/gems/sexp_processor-4.17.0 → 3.2.0/gems/sexp_processor-4.17.3}/History.rdoc +18 -0
- data/bundle/ruby/{3.0.0/gems/sexp_processor-4.17.0 → 3.2.0/gems/sexp_processor-4.17.3}/lib/pt_testcase.rb +1 -1
- data/bundle/ruby/{3.0.0/gems/sexp_processor-4.17.0 → 3.2.0/gems/sexp_processor-4.17.3}/lib/sexp.rb +1 -1
- data/bundle/ruby/{3.0.0/gems/sexp_processor-4.17.0 → 3.2.0/gems/sexp_processor-4.17.3}/lib/sexp_matcher.rb +1 -1
- data/bundle/ruby/{3.0.0/gems/sexp_processor-4.17.0 → 3.2.0/gems/sexp_processor-4.17.3}/lib/sexp_processor.rb +1 -1
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/CHANGES +44 -8
- data/bundle/ruby/3.2.0/gems/slim-5.2.1/Gemfile +43 -0
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/LICENSE +1 -1
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/README.jp.md +28 -41
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/README.md +66 -43
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/code_attributes.rb +2 -1
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/command.rb +2 -8
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/controls.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/do_inserter.rb +4 -3
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/embedded.rb +17 -17
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/end_inserter.rb +3 -2
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/engine.rb +3 -0
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/erb_converter.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/filter.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/grammar.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/include.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/interpolation.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/logic_less/context.rb +6 -7
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/logic_less/filter.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/logic_less.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/parser.rb +26 -39
- data/bundle/ruby/3.2.0/gems/slim-5.2.1/lib/slim/railtie.rb +19 -0
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/smart/escaper.rb +1 -1
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/smart/filter.rb +3 -2
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/smart/parser.rb +4 -3
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/smart.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/splat/builder.rb +16 -8
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/splat/filter.rb +6 -4
- data/bundle/ruby/3.2.0/gems/slim-5.2.1/lib/slim/template.rb +6 -0
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/translator.rb +4 -3
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/version.rb +2 -1
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim.rb +2 -0
- data/bundle/ruby/{3.0.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/slim.gemspec +14 -5
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/CHANGES +39 -1
- data/bundle/ruby/3.2.0/gems/temple-0.10.3/Gemfile +2 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/README.md +1 -1
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/engine.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/erb/engine.rb +3 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/erb/parser.rb +2 -1
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/erb/template.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/erb/trimming.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/exceptions.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/filter.rb +1 -0
- data/bundle/ruby/3.2.0/gems/temple-0.10.3/lib/temple/filters/ambles.rb +22 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/filters/code_merger.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/filters/control_flow.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/filters/dynamic_inliner.rb +2 -1
- data/bundle/ruby/3.2.0/gems/temple-0.10.3/lib/temple/filters/dynamic_merger.rb +69 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/filters/encoding.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/filters/eraser.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/filters/escapable.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/filters/multi_flattener.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/filters/remove_bom.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/filters/static_analyzer.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/filters/static_merger.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/filters/string_splitter.rb +13 -1
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/filters/validator.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/generator.rb +5 -2
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/generators/array.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/generators/array_buffer.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/generators/erb.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/generators/rails_output_buffer.rb +4 -4
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/generators/string_buffer.rb +2 -1
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/grammar.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/html/attribute_merger.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/html/attribute_remover.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/html/attribute_sorter.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/html/dispatcher.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/html/fast.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/html/filter.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/html/pretty.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/html/safe.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/map.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/mixins/dispatcher.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/mixins/engine_dsl.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/mixins/grammar_dsl.rb +4 -2
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/mixins/options.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/mixins/template.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/parser.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/static_analyzer.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/templates/rails.rb +7 -2
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/templates/tilt.rb +2 -9
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/templates.rb +1 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/utils.rb +5 -15
- data/bundle/ruby/3.2.0/gems/temple-0.10.3/lib/temple/version.rb +4 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple.rb +3 -0
- data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/temple.gemspec +4 -6
- data/bundle/ruby/3.2.0/gems/terminal-table-4.0.0/History.rdoc +149 -0
- data/bundle/ruby/3.2.0/gems/terminal-table-4.0.0/README.md +417 -0
- data/bundle/ruby/{3.0.0/gems/terminal-table-1.8.0 → 3.2.0/gems/terminal-table-4.0.0}/lib/terminal-table/cell.rb +9 -9
- data/bundle/ruby/{3.0.0/gems/terminal-table-1.8.0 → 3.2.0/gems/terminal-table-4.0.0}/lib/terminal-table/row.rb +18 -4
- data/bundle/ruby/3.2.0/gems/terminal-table-4.0.0/lib/terminal-table/separator.rb +66 -0
- data/bundle/ruby/3.2.0/gems/terminal-table-4.0.0/lib/terminal-table/style.rb +284 -0
- data/bundle/ruby/{3.0.0/gems/terminal-table-1.8.0 → 3.2.0/gems/terminal-table-4.0.0}/lib/terminal-table/table.rb +49 -18
- data/bundle/ruby/3.2.0/gems/terminal-table-4.0.0/lib/terminal-table/util.rb +13 -0
- data/bundle/ruby/{3.0.0/gems/terminal-table-1.8.0 → 3.2.0/gems/terminal-table-4.0.0}/lib/terminal-table/version.rb +1 -1
- data/bundle/ruby/{3.0.0/gems/terminal-table-1.8.0 → 3.2.0/gems/terminal-table-4.0.0}/lib/terminal-table.rb +2 -2
- data/bundle/ruby/{3.0.0/gems/terminal-table-1.8.0 → 3.2.0/gems/terminal-table-4.0.0}/terminal-table.gemspec +3 -4
- data/bundle/ruby/{3.0.0/gems/tilt-2.0.11 → 3.2.0/gems/tilt-2.6.1}/COPYING +1 -0
- data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/_emacs_org.rb +2 -0
- data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/_handlebars.rb +2 -0
- data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/_jbuilder.rb +2 -0
- data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/_org.rb +2 -0
- data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/asciidoc.rb +15 -0
- data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/babel.rb +8 -0
- data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/builder.rb +42 -0
- data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/cli.rb +134 -0
- data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/coffee.rb +39 -0
- data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/commonmarker.rb +95 -0
- data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/creole.rb +16 -0
- data/bundle/ruby/{3.0.0/gems/tilt-2.0.11 → 3.2.0/gems/tilt-2.6.1}/lib/tilt/csv.rb +6 -18
- data/bundle/ruby/{3.0.0/gems/tilt-2.0.11 → 3.2.0/gems/tilt-2.6.1}/lib/tilt/erb.rb +23 -21
- data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/erubi.rb +55 -0
- data/bundle/ruby/{3.0.0/gems/tilt-2.0.11 → 3.2.0/gems/tilt-2.6.1}/lib/tilt/etanni.rb +5 -4
- data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/haml.rb +94 -0
- data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/kramdown.rb +13 -0
- data/bundle/ruby/{3.0.0/gems/tilt-2.0.11 → 3.2.0/gems/tilt-2.6.1}/lib/tilt/liquid.rb +10 -17
- data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/livescript.rb +11 -0
- data/bundle/ruby/{3.0.0/gems/tilt-2.0.11 → 3.2.0/gems/tilt-2.6.1}/lib/tilt/mapping.rb +228 -109
- data/bundle/ruby/{3.0.0/gems/tilt-2.0.11 → 3.2.0/gems/tilt-2.6.1}/lib/tilt/markaby.rb +5 -7
- data/bundle/ruby/{3.0.0/gems/tilt-2.0.11 → 3.2.0/gems/tilt-2.6.1}/lib/tilt/nokogiri.rb +11 -10
- data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/pandoc.rb +39 -0
- data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/pipeline.rb +19 -0
- data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/plain.rb +5 -0
- data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/prawn.rb +28 -0
- data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/radius.rb +41 -0
- data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/rdiscount.rb +23 -0
- data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/rdoc.rb +11 -0
- data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/redcarpet.rb +31 -0
- data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/redcloth.rb +13 -0
- data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/rst-pandoc.rb +10 -0
- data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/sass.rb +78 -0
- data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/slim.rb +5 -0
- data/bundle/ruby/{3.0.0/gems/tilt-2.0.11 → 3.2.0/gems/tilt-2.6.1}/lib/tilt/string.rb +9 -3
- data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/template.rb +611 -0
- data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/typescript.rb +19 -0
- data/bundle/ruby/{3.0.0/gems/tilt-2.0.11 → 3.2.0/gems/tilt-2.6.1}/lib/tilt/yajl.rb +5 -11
- data/bundle/ruby/{3.0.0/gems/tilt-2.0.11 → 3.2.0/gems/tilt-2.6.1}/lib/tilt.rb +68 -43
- data/bundle/ruby/3.2.0/gems/unicode-display_width-3.1.4/CHANGELOG.md +291 -0
- data/bundle/ruby/{3.0.0/gems/unicode-display_width-1.8.0 → 3.2.0/gems/unicode-display_width-3.1.4}/MIT-LICENSE.txt +1 -1
- data/bundle/ruby/3.2.0/gems/unicode-display_width-3.1.4/README.md +194 -0
- data/bundle/ruby/3.2.0/gems/unicode-display_width-3.1.4/data/display_width.marshal.gz +0 -0
- data/bundle/ruby/3.2.0/gems/unicode-display_width-3.1.4/lib/unicode/display_width/constants.rb +10 -0
- data/bundle/ruby/3.2.0/gems/unicode-display_width-3.1.4/lib/unicode/display_width/emoji_support.rb +52 -0
- data/bundle/ruby/3.2.0/gems/unicode-display_width-3.1.4/lib/unicode/display_width/index.rb +34 -0
- data/bundle/ruby/3.2.0/gems/unicode-display_width-3.1.4/lib/unicode/display_width/no_string_ext.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-display_width-3.1.4/lib/unicode/display_width/reline_ext.rb +14 -0
- data/bundle/ruby/3.2.0/gems/unicode-display_width-3.1.4/lib/unicode/display_width/string_ext.rb +9 -0
- data/bundle/ruby/3.2.0/gems/unicode-display_width-3.1.4/lib/unicode/display_width.rb +247 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/CHANGELOG.md +191 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/CODE_OF_CONDUCT.md +74 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/Gemfile +7 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/Gemfile.lock +33 -0
- data/bundle/ruby/{3.0.0/gems/safe_yaml-1.0.5/LICENSE.txt → 3.2.0/gems/unicode-emoji-4.0.4/MIT-LICENSE.txt} +1 -3
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/README.md +205 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/data/emoji.marshal.gz +0 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/data/generate_constants.rb +344 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/constants.rb +49 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_basic.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_emoji_keycap.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_include_mqe.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_include_mqe_uqe.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_include_text.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_picto.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_picto_no_emoji.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_possible.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_prop_component.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_prop_emoji.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_prop_modifier.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_prop_modifier_base.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_prop_presentation.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_text.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_text_presentation.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_valid.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_valid_include_text.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_well_formed.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_well_formed_include_text.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_basic.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_emoji_keycap.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_include_mqe.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_include_mqe_uqe.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_include_text.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_picto.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_picto_no_emoji.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_possible.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_prop_component.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_prop_emoji.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_prop_modifier.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_prop_modifier_base.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_prop_presentation.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_text.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_text_presentation.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_valid.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_valid_include_text.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_well_formed.rb +8 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_well_formed_include_text.rb +8 -0
- data/bundle/ruby/{3.0.0/gems/unicode-display_width-1.8.0/lib/unicode/display_width → 3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji}/index.rb +5 -3
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/lazy_constants.rb +56 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/list.rb +13 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji.rb +111 -0
- data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/unicode-emoji.gemspec +22 -0
- data/lib/brakeman/app_tree.rb +50 -13
- data/lib/brakeman/checks/check_deserialize.rb +4 -1
- data/lib/brakeman/checks/check_eol_rails.rb +7 -0
- data/lib/brakeman/checks/check_eol_ruby.rb +2 -0
- data/lib/brakeman/checks/check_evaluation.rb +45 -8
- data/lib/brakeman/checks/check_execute.rb +28 -0
- data/lib/brakeman/checks/check_model_attr_accessible.rb +1 -0
- data/lib/brakeman/checks/check_ransack.rb +53 -0
- data/lib/brakeman/checks/check_render.rb +6 -1
- data/lib/brakeman/checks/check_session_settings.rb +2 -3
- data/lib/brakeman/checks/check_sql.rb +1 -1
- data/lib/brakeman/checks/check_unscoped_find.rb +1 -1
- data/lib/brakeman/checks/check_weak_rsa_key.rb +1 -1
- data/lib/brakeman/commandline.rb +5 -0
- data/lib/brakeman/file_parser.rb +35 -2
- data/lib/brakeman/messages.rb +1 -1
- data/lib/brakeman/options.rb +49 -4
- data/lib/brakeman/parsers/erubis_patch.rb +11 -0
- data/lib/brakeman/parsers/haml6_embedded.rb +23 -0
- data/lib/brakeman/parsers/rails2_erubis.rb +3 -0
- data/lib/brakeman/parsers/rails2_xss_plugin_erubis.rb +4 -0
- data/lib/brakeman/parsers/rails3_erubis.rb +5 -1
- data/lib/brakeman/parsers/slim_embedded.rb +2 -0
- data/lib/brakeman/parsers/template_parser.rb +32 -7
- data/lib/brakeman/processor.rb +2 -0
- data/lib/brakeman/processors/alias_processor.rb +51 -21
- data/lib/brakeman/processors/base_processor.rb +2 -0
- data/lib/brakeman/processors/haml6_template_processor.rb +92 -0
- data/lib/brakeman/processors/haml_template_processor.rb +7 -1
- data/lib/brakeman/processors/lib/file_type_detector.rb +9 -7
- data/lib/brakeman/processors/lib/module_helper.rb +31 -1
- data/lib/brakeman/processors/lib/render_helper.rb +38 -1
- data/lib/brakeman/processors/library_processor.rb +6 -0
- data/lib/brakeman/processors/template_processor.rb +1 -1
- data/lib/brakeman/report/ignore/config.rb +0 -1
- data/lib/brakeman/report/pager.rb +1 -1
- data/lib/brakeman/report/report_html.rb +1 -1
- data/lib/brakeman/report/report_junit.rb +4 -57
- data/lib/brakeman/report/report_markdown.rb +1 -1
- data/lib/brakeman/report/report_sarif.rb +122 -2
- data/lib/brakeman/report/report_table.rb +2 -2
- data/lib/brakeman/report/report_tabs.rb +0 -1
- data/lib/brakeman/report/report_text.rb +8 -1
- data/lib/brakeman/report/templates/header.html.erb +7 -2
- data/lib/brakeman/report/templates/ignored_warnings.html.erb +3 -3
- data/lib/brakeman/rescanner.rb +40 -390
- data/lib/brakeman/scanner.rb +181 -86
- data/lib/brakeman/tracker/config.rb +22 -8
- data/lib/brakeman/tracker/controller.rb +14 -10
- data/lib/brakeman/tracker/file_cache.rb +83 -0
- data/lib/brakeman/tracker.rb +26 -3
- data/lib/brakeman/util.rb +1 -3
- data/lib/brakeman/version.rb +1 -1
- data/lib/brakeman/warning.rb +1 -1
- data/lib/brakeman/warning_codes.rb +1 -0
- data/lib/brakeman.rb +27 -5
- data/lib/ruby_parser/bm_sexp.rb +5 -1
- metadata +509 -406
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/Gemfile +0 -16
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/TODO +0 -24
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/haml.gemspec +0 -45
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/lib/haml/attribute_builder.rb +0 -219
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/lib/haml/attribute_compiler.rb +0 -237
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/lib/haml/attribute_parser.rb +0 -150
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/lib/haml/buffer.rb +0 -182
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/lib/haml/compiler.rb +0 -330
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/lib/haml/engine.rb +0 -238
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/lib/haml/escapable.rb +0 -77
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/lib/haml/exec.rb +0 -347
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/lib/haml/filters.rb +0 -399
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/lib/haml/generator.rb +0 -42
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/lib/haml/helpers/action_view_extensions.rb +0 -60
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/lib/haml/helpers/action_view_mods.rb +0 -132
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/lib/haml/helpers/action_view_xss_mods.rb +0 -60
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/lib/haml/helpers/safe_erubi_template.rb +0 -20
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/lib/haml/helpers/safe_erubis_template.rb +0 -33
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/lib/haml/helpers/xss_mods.rb +0 -114
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/lib/haml/helpers.rb +0 -709
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/lib/haml/options.rb +0 -273
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/lib/haml/plugin.rb +0 -54
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/lib/haml/railtie.rb +0 -53
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/lib/haml/sass_rails_filter.rb +0 -47
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/lib/haml/template/options.rb +0 -27
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/lib/haml/template.rb +0 -39
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/lib/haml/temple_engine.rb +0 -124
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/lib/haml.rb +0 -25
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/yard/default/fulldoc/html/css/common.sass +0 -15
- data/bundle/ruby/3.0.0/gems/haml-5.2.2/yard/default/layout/html/footer.erb +0 -12
- data/bundle/ruby/3.0.0/gems/parallel-1.23.0/lib/parallel/version.rb +0 -4
- data/bundle/ruby/3.0.0/gems/rexml-3.2.5/NEWS.md +0 -178
- data/bundle/ruby/3.0.0/gems/rexml-3.2.5/lib/rexml/parsers/baseparser.rb +0 -694
- data/bundle/ruby/3.0.0/gems/rexml-3.2.5/lib/rexml/source.rb +0 -298
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/CHANGES.md +0 -154
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/Gemfile +0 -11
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/README.md +0 -191
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/bundle_install_all_ruby_versions.sh +0 -11
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/lib/safe_yaml/deep.rb +0 -34
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/lib/safe_yaml/libyaml_checker.rb +0 -36
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/lib/safe_yaml/load.rb +0 -181
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/lib/safe_yaml/parse/date.rb +0 -37
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/lib/safe_yaml/parse/hexadecimal.rb +0 -12
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/lib/safe_yaml/parse/sexagesimal.rb +0 -26
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/lib/safe_yaml/psych_handler.rb +0 -99
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/lib/safe_yaml/psych_resolver.rb +0 -52
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/lib/safe_yaml/resolver.rb +0 -94
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/lib/safe_yaml/safe_to_ruby_visitor.rb +0 -29
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/lib/safe_yaml/store.rb +0 -39
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/lib/safe_yaml/syck_hack.rb +0 -36
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/lib/safe_yaml/syck_node_monkeypatch.rb +0 -43
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/lib/safe_yaml/syck_resolver.rb +0 -38
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/lib/safe_yaml/transform/to_boolean.rb +0 -21
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/lib/safe_yaml/transform/to_date.rb +0 -13
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/lib/safe_yaml/transform/to_float.rb +0 -33
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/lib/safe_yaml/transform/to_integer.rb +0 -26
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/lib/safe_yaml/transform/to_nil.rb +0 -18
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/lib/safe_yaml/transform/to_symbol.rb +0 -17
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/lib/safe_yaml/transform/transformation_map.rb +0 -47
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/lib/safe_yaml/transform.rb +0 -41
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/lib/safe_yaml/version.rb +0 -3
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/lib/safe_yaml.rb +0 -94
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/run_specs_all_ruby_versions.sh +0 -38
- data/bundle/ruby/3.0.0/gems/safe_yaml-1.0.5/safe_yaml.gemspec +0 -19
- data/bundle/ruby/3.0.0/gems/slim-4.1.0/Gemfile +0 -70
- data/bundle/ruby/3.0.0/gems/slim-4.1.0/lib/slim/template.rb +0 -19
- data/bundle/ruby/3.0.0/gems/temple-0.8.2/Gemfile +0 -3
- data/bundle/ruby/3.0.0/gems/temple-0.8.2/lib/temple/version.rb +0 -3
- data/bundle/ruby/3.0.0/gems/terminal-table-1.8.0/History.rdoc +0 -85
- data/bundle/ruby/3.0.0/gems/terminal-table-1.8.0/README.rdoc +0 -247
- data/bundle/ruby/3.0.0/gems/terminal-table-1.8.0/lib/terminal-table/separator.rb +0 -14
- data/bundle/ruby/3.0.0/gems/terminal-table-1.8.0/lib/terminal-table/style.rb +0 -79
- data/bundle/ruby/3.0.0/gems/tilt-2.0.11/lib/tilt/asciidoc.rb +0 -27
- data/bundle/ruby/3.0.0/gems/tilt-2.0.11/lib/tilt/babel.rb +0 -16
- data/bundle/ruby/3.0.0/gems/tilt-2.0.11/lib/tilt/bluecloth.rb +0 -24
- data/bundle/ruby/3.0.0/gems/tilt-2.0.11/lib/tilt/builder.rb +0 -37
- data/bundle/ruby/3.0.0/gems/tilt-2.0.11/lib/tilt/coffee.rb +0 -58
- data/bundle/ruby/3.0.0/gems/tilt-2.0.11/lib/tilt/commonmarker.rb +0 -88
- data/bundle/ruby/3.0.0/gems/tilt-2.0.11/lib/tilt/creole.rb +0 -25
- data/bundle/ruby/3.0.0/gems/tilt-2.0.11/lib/tilt/dummy.rb +0 -3
- data/bundle/ruby/3.0.0/gems/tilt-2.0.11/lib/tilt/erubi.rb +0 -32
- data/bundle/ruby/3.0.0/gems/tilt-2.0.11/lib/tilt/erubis.rb +0 -43
- data/bundle/ruby/3.0.0/gems/tilt-2.0.11/lib/tilt/haml.rb +0 -86
- data/bundle/ruby/3.0.0/gems/tilt-2.0.11/lib/tilt/kramdown.rb +0 -25
- data/bundle/ruby/3.0.0/gems/tilt-2.0.11/lib/tilt/less.rb +0 -30
- data/bundle/ruby/3.0.0/gems/tilt-2.0.11/lib/tilt/livescript.rb +0 -23
- data/bundle/ruby/3.0.0/gems/tilt-2.0.11/lib/tilt/maruku.rb +0 -22
- data/bundle/ruby/3.0.0/gems/tilt-2.0.11/lib/tilt/pandoc.rb +0 -57
- data/bundle/ruby/3.0.0/gems/tilt-2.0.11/lib/tilt/plain.rb +0 -16
- data/bundle/ruby/3.0.0/gems/tilt-2.0.11/lib/tilt/prawn.rb +0 -43
- data/bundle/ruby/3.0.0/gems/tilt-2.0.11/lib/tilt/radius.rb +0 -48
- data/bundle/ruby/3.0.0/gems/tilt-2.0.11/lib/tilt/rdiscount.rb +0 -39
- data/bundle/ruby/3.0.0/gems/tilt-2.0.11/lib/tilt/rdoc.rb +0 -40
- data/bundle/ruby/3.0.0/gems/tilt-2.0.11/lib/tilt/redcarpet.rb +0 -86
- data/bundle/ruby/3.0.0/gems/tilt-2.0.11/lib/tilt/redcloth.rb +0 -23
- data/bundle/ruby/3.0.0/gems/tilt-2.0.11/lib/tilt/rst-pandoc.rb +0 -23
- data/bundle/ruby/3.0.0/gems/tilt-2.0.11/lib/tilt/sass.rb +0 -78
- data/bundle/ruby/3.0.0/gems/tilt-2.0.11/lib/tilt/sigil.rb +0 -34
- data/bundle/ruby/3.0.0/gems/tilt-2.0.11/lib/tilt/template.rb +0 -308
- data/bundle/ruby/3.0.0/gems/tilt-2.0.11/lib/tilt/typescript.rb +0 -26
- data/bundle/ruby/3.0.0/gems/tilt-2.0.11/lib/tilt/wikicloth.rb +0 -22
- data/bundle/ruby/3.0.0/gems/unicode-display_width-1.8.0/CHANGELOG.md +0 -137
- data/bundle/ruby/3.0.0/gems/unicode-display_width-1.8.0/README.md +0 -124
- data/bundle/ruby/3.0.0/gems/unicode-display_width-1.8.0/data/display_width.marshal.gz +0 -0
- data/bundle/ruby/3.0.0/gems/unicode-display_width-1.8.0/lib/unicode/display_width/constants.rb +0 -8
- data/bundle/ruby/3.0.0/gems/unicode-display_width-1.8.0/lib/unicode/display_width/no_string_ext.rb +0 -7
- data/bundle/ruby/3.0.0/gems/unicode-display_width-1.8.0/lib/unicode/display_width/string_ext.rb +0 -17
- data/bundle/ruby/3.0.0/gems/unicode-display_width-1.8.0/lib/unicode/display_width.rb +0 -51
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/CHANGES.txt +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/MIT-LICENSE +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/README.txt +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/contrib/erubis +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/contrib/erubis-run.rb +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/contrib/inline-require +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/context.rb +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/converter.rb +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/engine/ec.rb +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/engine/ecpp.rb +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/engine/ejava.rb +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/engine/ejavascript.rb +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/engine/enhanced.rb +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/engine/eperl.rb +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/engine/ephp.rb +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/engine/eruby.rb +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/engine/escheme.rb +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/engine/optimized.rb +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/engine.rb +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/enhancer.rb +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/error.rb +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/evaluator.rb +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/generator.rb +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/helper.rb +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/helpers/rails_form_helper.rb +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/helpers/rails_helper.rb +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/local-setting.rb +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/main.rb +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/preprocessing.rb +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/tiny.rb +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/util.rb +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis.rb +0 -0
- /data/bundle/ruby/{3.0.0 → 3.2.0}/gems/erubis-2.7.0/setup.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/AUTHORS +0 -0
- /data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/COPYING +0 -0
- /data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/LICENSE +0 -0
- /data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/TODO +0 -0
- /data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/lib/highline/builtin_styles.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/lib/highline/color_scheme.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/lib/highline/compatibility.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/lib/highline/custom_errors.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/lib/highline/import.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/lib/highline/list.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/lib/highline/menu/item.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/lib/highline/paginator.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/lib/highline/simulate.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/lib/highline/statement.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/lib/highline/string.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/lib/highline/string_extensions.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/lib/highline/style.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/lib/highline/template_renderer.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/lib/highline/terminal/ncurses.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/highline-2.1.0 → 3.2.0/gems/highline-3.1.2}/lib/highline/wrapper.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/parallel-1.23.0 → 3.2.0/gems/parallel-1.27.0}/MIT-LICENSE.txt +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5/LICENSE.txt → 3.2.0/gems/reline-0.6.1/BSDL} +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/attlistdecl.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/cdata.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/child.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/comment.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/doctype.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/dtd/attlistdecl.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/dtd/dtd.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/dtd/elementdecl.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/dtd/entitydecl.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/dtd/notationdecl.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/encoding.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/formatters/default.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/formatters/transitive.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/instruction.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/light/node.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/output.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/parent.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/parsers/lightparser.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/parsers/ultralightparser.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/quickpath.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/sax2listener.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/security.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/streamlistener.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/undefinednamespaceexception.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/validation/relaxng.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/validation/validation.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/validation/validationexception.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/xmldecl.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/xmltokens.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/xpath.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/rexml-3.2.5 → 3.2.0/gems/rexml-3.4.1}/lib/rexml.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/ruby2ruby-2.4.4 → 3.2.0/gems/ruby2ruby-2.5.2}/Manifest.txt +0 -0
- /data/bundle/ruby/{3.0.0/gems/ruby2ruby-2.4.4 → 3.2.0/gems/ruby2ruby-2.5.2}/README.rdoc +0 -0
- /data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/Manifest.txt +0 -0
- /data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/README.rdoc +0 -0
- /data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/debugging.md +0 -0
- /data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/gauntlet.md +0 -0
- /data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/rp_extensions.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/rp_stringscanner.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/ruby_lexer.rex +0 -0
- /data/bundle/ruby/{3.0.0/gems/ruby_parser-3.20.1 → 3.2.0/gems/ruby_parser-3.20.3}/lib/ruby_parser.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/sexp_processor-4.17.0 → 3.2.0/gems/sexp_processor-4.17.3}/Manifest.txt +0 -0
- /data/bundle/ruby/{3.0.0/gems/sexp_processor-4.17.0 → 3.2.0/gems/sexp_processor-4.17.3}/README.rdoc +0 -0
- /data/bundle/ruby/{3.0.0/gems/sexp_processor-4.17.0 → 3.2.0/gems/sexp_processor-4.17.3}/lib/composite_sexp_processor.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/sexp_processor-4.17.0 → 3.2.0/gems/sexp_processor-4.17.3}/lib/strict_sexp.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/sexp_processor-4.17.0 → 3.2.0/gems/sexp_processor-4.17.3}/lib/unique.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/EXPRESSIONS.md +0 -0
- /data/bundle/ruby/{3.0.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/LICENSE +0 -0
- /data/bundle/ruby/{3.0.0/gems/terminal-table-1.8.0 → 3.2.0/gems/terminal-table-4.0.0}/Gemfile +0 -0
- /data/bundle/ruby/{3.0.0/gems/terminal-table-1.8.0 → 3.2.0/gems/terminal-table-4.0.0}/LICENSE.txt +0 -0
- /data/bundle/ruby/{3.0.0/gems/terminal-table-1.8.0 → 3.2.0/gems/terminal-table-4.0.0}/Manifest +0 -0
- /data/bundle/ruby/{3.0.0/gems/terminal-table-1.8.0 → 3.2.0/gems/terminal-table-4.0.0}/Todo.rdoc +0 -0
- /data/bundle/ruby/{3.0.0/gems/terminal-table-1.8.0 → 3.2.0/gems/terminal-table-4.0.0}/lib/terminal-table/import.rb +0 -0
- /data/bundle/ruby/{3.0.0/gems/terminal-table-1.8.0 → 3.2.0/gems/terminal-table-4.0.0}/lib/terminal-table/table_helper.rb +0 -0
@@ -1,298 +0,0 @@
|
|
1
|
-
# coding: US-ASCII
|
2
|
-
# frozen_string_literal: false
|
3
|
-
require_relative 'encoding'
|
4
|
-
|
5
|
-
module REXML
|
6
|
-
# Generates Source-s. USE THIS CLASS.
|
7
|
-
class SourceFactory
|
8
|
-
# Generates a Source object
|
9
|
-
# @param arg Either a String, or an IO
|
10
|
-
# @return a Source, or nil if a bad argument was given
|
11
|
-
def SourceFactory::create_from(arg)
|
12
|
-
if arg.respond_to? :read and
|
13
|
-
arg.respond_to? :readline and
|
14
|
-
arg.respond_to? :nil? and
|
15
|
-
arg.respond_to? :eof?
|
16
|
-
IOSource.new(arg)
|
17
|
-
elsif arg.respond_to? :to_str
|
18
|
-
require 'stringio'
|
19
|
-
IOSource.new(StringIO.new(arg))
|
20
|
-
elsif arg.kind_of? Source
|
21
|
-
arg
|
22
|
-
else
|
23
|
-
raise "#{arg.class} is not a valid input stream. It must walk \n"+
|
24
|
-
"like either a String, an IO, or a Source."
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
# A Source can be searched for patterns, and wraps buffers and other
|
30
|
-
# objects and provides consumption of text
|
31
|
-
class Source
|
32
|
-
include Encoding
|
33
|
-
# The current buffer (what we're going to read next)
|
34
|
-
attr_reader :buffer
|
35
|
-
# The line number of the last consumed text
|
36
|
-
attr_reader :line
|
37
|
-
attr_reader :encoding
|
38
|
-
|
39
|
-
# Constructor
|
40
|
-
# @param arg must be a String, and should be a valid XML document
|
41
|
-
# @param encoding if non-null, sets the encoding of the source to this
|
42
|
-
# value, overriding all encoding detection
|
43
|
-
def initialize(arg, encoding=nil)
|
44
|
-
@orig = @buffer = arg
|
45
|
-
if encoding
|
46
|
-
self.encoding = encoding
|
47
|
-
else
|
48
|
-
detect_encoding
|
49
|
-
end
|
50
|
-
@line = 0
|
51
|
-
end
|
52
|
-
|
53
|
-
|
54
|
-
# Inherited from Encoding
|
55
|
-
# Overridden to support optimized en/decoding
|
56
|
-
def encoding=(enc)
|
57
|
-
return unless super
|
58
|
-
encoding_updated
|
59
|
-
end
|
60
|
-
|
61
|
-
# Scans the source for a given pattern. Note, that this is not your
|
62
|
-
# usual scan() method. For one thing, the pattern argument has some
|
63
|
-
# requirements; for another, the source can be consumed. You can easily
|
64
|
-
# confuse this method. Originally, the patterns were easier
|
65
|
-
# to construct and this method more robust, because this method
|
66
|
-
# generated search regexps on the fly; however, this was
|
67
|
-
# computationally expensive and slowed down the entire REXML package
|
68
|
-
# considerably, since this is by far the most commonly called method.
|
69
|
-
# @param pattern must be a Regexp, and must be in the form of
|
70
|
-
# /^\s*(#{your pattern, with no groups})(.*)/. The first group
|
71
|
-
# will be returned; the second group is used if the consume flag is
|
72
|
-
# set.
|
73
|
-
# @param consume if true, the pattern returned will be consumed, leaving
|
74
|
-
# everything after it in the Source.
|
75
|
-
# @return the pattern, if found, or nil if the Source is empty or the
|
76
|
-
# pattern is not found.
|
77
|
-
def scan(pattern, cons=false)
|
78
|
-
return nil if @buffer.nil?
|
79
|
-
rv = @buffer.scan(pattern)
|
80
|
-
@buffer = $' if cons and rv.size>0
|
81
|
-
rv
|
82
|
-
end
|
83
|
-
|
84
|
-
def read
|
85
|
-
end
|
86
|
-
|
87
|
-
def consume( pattern )
|
88
|
-
@buffer = $' if pattern.match( @buffer )
|
89
|
-
end
|
90
|
-
|
91
|
-
def match_to( char, pattern )
|
92
|
-
return pattern.match(@buffer)
|
93
|
-
end
|
94
|
-
|
95
|
-
def match_to_consume( char, pattern )
|
96
|
-
md = pattern.match(@buffer)
|
97
|
-
@buffer = $'
|
98
|
-
return md
|
99
|
-
end
|
100
|
-
|
101
|
-
def match(pattern, cons=false)
|
102
|
-
md = pattern.match(@buffer)
|
103
|
-
@buffer = $' if cons and md
|
104
|
-
return md
|
105
|
-
end
|
106
|
-
|
107
|
-
# @return true if the Source is exhausted
|
108
|
-
def empty?
|
109
|
-
@buffer == ""
|
110
|
-
end
|
111
|
-
|
112
|
-
def position
|
113
|
-
@orig.index( @buffer )
|
114
|
-
end
|
115
|
-
|
116
|
-
# @return the current line in the source
|
117
|
-
def current_line
|
118
|
-
lines = @orig.split
|
119
|
-
res = lines.grep @buffer[0..30]
|
120
|
-
res = res[-1] if res.kind_of? Array
|
121
|
-
lines.index( res ) if res
|
122
|
-
end
|
123
|
-
|
124
|
-
private
|
125
|
-
def detect_encoding
|
126
|
-
buffer_encoding = @buffer.encoding
|
127
|
-
detected_encoding = "UTF-8"
|
128
|
-
begin
|
129
|
-
@buffer.force_encoding("ASCII-8BIT")
|
130
|
-
if @buffer[0, 2] == "\xfe\xff"
|
131
|
-
@buffer[0, 2] = ""
|
132
|
-
detected_encoding = "UTF-16BE"
|
133
|
-
elsif @buffer[0, 2] == "\xff\xfe"
|
134
|
-
@buffer[0, 2] = ""
|
135
|
-
detected_encoding = "UTF-16LE"
|
136
|
-
elsif @buffer[0, 3] == "\xef\xbb\xbf"
|
137
|
-
@buffer[0, 3] = ""
|
138
|
-
detected_encoding = "UTF-8"
|
139
|
-
end
|
140
|
-
ensure
|
141
|
-
@buffer.force_encoding(buffer_encoding)
|
142
|
-
end
|
143
|
-
self.encoding = detected_encoding
|
144
|
-
end
|
145
|
-
|
146
|
-
def encoding_updated
|
147
|
-
if @encoding != 'UTF-8'
|
148
|
-
@buffer = decode(@buffer)
|
149
|
-
@to_utf = true
|
150
|
-
else
|
151
|
-
@to_utf = false
|
152
|
-
@buffer.force_encoding ::Encoding::UTF_8
|
153
|
-
end
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
# A Source that wraps an IO. See the Source class for method
|
158
|
-
# documentation
|
159
|
-
class IOSource < Source
|
160
|
-
#attr_reader :block_size
|
161
|
-
|
162
|
-
# block_size has been deprecated
|
163
|
-
def initialize(arg, block_size=500, encoding=nil)
|
164
|
-
@er_source = @source = arg
|
165
|
-
@to_utf = false
|
166
|
-
@pending_buffer = nil
|
167
|
-
|
168
|
-
if encoding
|
169
|
-
super("", encoding)
|
170
|
-
else
|
171
|
-
super(@source.read(3) || "")
|
172
|
-
end
|
173
|
-
|
174
|
-
if !@to_utf and
|
175
|
-
@buffer.respond_to?(:force_encoding) and
|
176
|
-
@source.respond_to?(:external_encoding) and
|
177
|
-
@source.external_encoding != ::Encoding::UTF_8
|
178
|
-
@force_utf8 = true
|
179
|
-
else
|
180
|
-
@force_utf8 = false
|
181
|
-
end
|
182
|
-
end
|
183
|
-
|
184
|
-
def scan(pattern, cons=false)
|
185
|
-
rv = super
|
186
|
-
# You'll notice that this next section is very similar to the same
|
187
|
-
# section in match(), but just a liiittle different. This is
|
188
|
-
# because it is a touch faster to do it this way with scan()
|
189
|
-
# than the way match() does it; enough faster to warrant duplicating
|
190
|
-
# some code
|
191
|
-
if rv.size == 0
|
192
|
-
until @buffer =~ pattern or @source.nil?
|
193
|
-
begin
|
194
|
-
@buffer << readline
|
195
|
-
rescue Iconv::IllegalSequence
|
196
|
-
raise
|
197
|
-
rescue
|
198
|
-
@source = nil
|
199
|
-
end
|
200
|
-
end
|
201
|
-
rv = super
|
202
|
-
end
|
203
|
-
rv.taint if RUBY_VERSION < '2.7'
|
204
|
-
rv
|
205
|
-
end
|
206
|
-
|
207
|
-
def read
|
208
|
-
begin
|
209
|
-
@buffer << readline
|
210
|
-
rescue Exception, NameError
|
211
|
-
@source = nil
|
212
|
-
end
|
213
|
-
end
|
214
|
-
|
215
|
-
def consume( pattern )
|
216
|
-
match( pattern, true )
|
217
|
-
end
|
218
|
-
|
219
|
-
def match( pattern, cons=false )
|
220
|
-
rv = pattern.match(@buffer)
|
221
|
-
@buffer = $' if cons and rv
|
222
|
-
while !rv and @source
|
223
|
-
begin
|
224
|
-
@buffer << readline
|
225
|
-
rv = pattern.match(@buffer)
|
226
|
-
@buffer = $' if cons and rv
|
227
|
-
rescue
|
228
|
-
@source = nil
|
229
|
-
end
|
230
|
-
end
|
231
|
-
rv.taint if RUBY_VERSION < '2.7'
|
232
|
-
rv
|
233
|
-
end
|
234
|
-
|
235
|
-
def empty?
|
236
|
-
super and ( @source.nil? || @source.eof? )
|
237
|
-
end
|
238
|
-
|
239
|
-
def position
|
240
|
-
@er_source.pos rescue 0
|
241
|
-
end
|
242
|
-
|
243
|
-
# @return the current line in the source
|
244
|
-
def current_line
|
245
|
-
begin
|
246
|
-
pos = @er_source.pos # The byte position in the source
|
247
|
-
lineno = @er_source.lineno # The XML < position in the source
|
248
|
-
@er_source.rewind
|
249
|
-
line = 0 # The \r\n position in the source
|
250
|
-
begin
|
251
|
-
while @er_source.pos < pos
|
252
|
-
@er_source.readline
|
253
|
-
line += 1
|
254
|
-
end
|
255
|
-
rescue
|
256
|
-
end
|
257
|
-
@er_source.seek(pos)
|
258
|
-
rescue IOError
|
259
|
-
pos = -1
|
260
|
-
line = -1
|
261
|
-
end
|
262
|
-
[pos, lineno, line]
|
263
|
-
end
|
264
|
-
|
265
|
-
private
|
266
|
-
def readline
|
267
|
-
str = @source.readline(@line_break)
|
268
|
-
if @pending_buffer
|
269
|
-
if str.nil?
|
270
|
-
str = @pending_buffer
|
271
|
-
else
|
272
|
-
str = @pending_buffer + str
|
273
|
-
end
|
274
|
-
@pending_buffer = nil
|
275
|
-
end
|
276
|
-
return nil if str.nil?
|
277
|
-
|
278
|
-
if @to_utf
|
279
|
-
decode(str)
|
280
|
-
else
|
281
|
-
str.force_encoding(::Encoding::UTF_8) if @force_utf8
|
282
|
-
str
|
283
|
-
end
|
284
|
-
end
|
285
|
-
|
286
|
-
def encoding_updated
|
287
|
-
case @encoding
|
288
|
-
when "UTF-16BE", "UTF-16LE"
|
289
|
-
@source.binmode
|
290
|
-
@source.set_encoding(@encoding, @encoding)
|
291
|
-
end
|
292
|
-
@line_break = encode(">")
|
293
|
-
@pending_buffer, @buffer = @buffer, ""
|
294
|
-
@pending_buffer.force_encoding(@encoding)
|
295
|
-
super
|
296
|
-
end
|
297
|
-
end
|
298
|
-
end
|
@@ -1,154 +0,0 @@
|
|
1
|
-
1.0.5
|
2
|
-
-----
|
3
|
-
|
4
|
-
- fixed [#80](https://github.com/dtao/safe_yaml/issues/80): uninitialized constant DateTime
|
5
|
-
|
6
|
-
1.0.2
|
7
|
-
-----
|
8
|
-
|
9
|
-
- added warning when using Psych + an older version of libyaml
|
10
|
-
|
11
|
-
1.0.1
|
12
|
-
-----
|
13
|
-
|
14
|
-
- fixed handling for strings that look like (invalid) dates
|
15
|
-
|
16
|
-
1.0.0
|
17
|
-
-----
|
18
|
-
|
19
|
-
- updated date parsing to use local timezone
|
20
|
-
- **now requiring "safe_yaml/load" provides `SafeYAML.load` without clobbering `YAML`**
|
21
|
-
- fixed handling of empty files
|
22
|
-
- fixed some (edge case) integer parsing bugs
|
23
|
-
- fixed some JRuby-specific issues
|
24
|
-
|
25
|
-
0.9.7
|
26
|
-
-----
|
27
|
-
|
28
|
-
- made handling of document frontmatter more robust
|
29
|
-
- added more descriptive message to the warning for omitting the :safe option
|
30
|
-
|
31
|
-
0.9.6
|
32
|
-
-----
|
33
|
-
|
34
|
-
- fixed handling of files with trailing content (after closing `---`)
|
35
|
-
|
36
|
-
0.9.5
|
37
|
-
-----
|
38
|
-
|
39
|
-
- fixed permissions AGAIN
|
40
|
-
|
41
|
-
0.9.4
|
42
|
-
-----
|
43
|
-
|
44
|
-
- corrected handling of symbols
|
45
|
-
|
46
|
-
0.9.3
|
47
|
-
-----
|
48
|
-
|
49
|
-
- fixed permissions :(
|
50
|
-
|
51
|
-
0.9.2
|
52
|
-
-----
|
53
|
-
|
54
|
-
- fixed error w/ parsing "!" when whitelisting tags
|
55
|
-
- fixed parsing of the number 0 (d'oh!)
|
56
|
-
|
57
|
-
0.9.1
|
58
|
-
-----
|
59
|
-
|
60
|
-
- added Yecht support (JRuby)
|
61
|
-
- more bug fixes
|
62
|
-
|
63
|
-
0.9.0
|
64
|
-
-----
|
65
|
-
|
66
|
-
- added `whitelist!` method for easily whitelisting tags
|
67
|
-
- added support for call-specific options
|
68
|
-
- removed deprecated methods
|
69
|
-
|
70
|
-
0.8.6
|
71
|
-
-----
|
72
|
-
|
73
|
-
- fixed bug in float matcher
|
74
|
-
|
75
|
-
0.8.5
|
76
|
-
-----
|
77
|
-
|
78
|
-
- performance improvements
|
79
|
-
- made less verbose by default
|
80
|
-
- bug fixes
|
81
|
-
|
82
|
-
0.8.4
|
83
|
-
-----
|
84
|
-
|
85
|
-
- enhancements to parsing of integers, floats, and dates
|
86
|
-
- updated built-in whitelist
|
87
|
-
- more bug fixes
|
88
|
-
|
89
|
-
0.8.3
|
90
|
-
-----
|
91
|
-
|
92
|
-
- fixed exception on parsing empty document
|
93
|
-
- fixed handling of octal & hexadecimal numbers
|
94
|
-
|
95
|
-
0.8.2
|
96
|
-
-----
|
97
|
-
|
98
|
-
- bug fixes
|
99
|
-
|
100
|
-
0.8.1
|
101
|
-
-----
|
102
|
-
|
103
|
-
- added `:raise_on_unknown_tag` option
|
104
|
-
- renamed `reset_defaults!` to `restore_defaults!`
|
105
|
-
|
106
|
-
0.8
|
107
|
-
---
|
108
|
-
|
109
|
-
- added tag whitelisting
|
110
|
-
- more API changes
|
111
|
-
|
112
|
-
0.7
|
113
|
-
---
|
114
|
-
|
115
|
-
- separated YAML engine support from Ruby version
|
116
|
-
- added support for binary scalars
|
117
|
-
- numerous bug fixes and enhancements
|
118
|
-
|
119
|
-
0.6
|
120
|
-
---
|
121
|
-
|
122
|
-
- several API changes
|
123
|
-
- added `SafeYAML::OPTIONS` for specifying default behavior
|
124
|
-
|
125
|
-
0.5
|
126
|
-
---
|
127
|
-
|
128
|
-
Added support for dates
|
129
|
-
|
130
|
-
0.4
|
131
|
-
---
|
132
|
-
|
133
|
-
- efficiency improvements
|
134
|
-
- made `YAML.load` use `YAML.safe_load` by default
|
135
|
-
- made symbol deserialization optional
|
136
|
-
|
137
|
-
0.3
|
138
|
-
---
|
139
|
-
|
140
|
-
Added Syck support
|
141
|
-
|
142
|
-
0.2
|
143
|
-
---
|
144
|
-
|
145
|
-
Added support for:
|
146
|
-
|
147
|
-
- anchors & aliases
|
148
|
-
- booleans
|
149
|
-
- nils
|
150
|
-
|
151
|
-
0.1
|
152
|
-
---
|
153
|
-
|
154
|
-
Initial release
|
@@ -1,191 +0,0 @@
|
|
1
|
-
SafeYAML
|
2
|
-
========
|
3
|
-
|
4
|
-
[](http://travis-ci.org/dtao/safe_yaml)
|
5
|
-
[](http://badge.fury.io/rb/safe_yaml)
|
6
|
-
|
7
|
-
The **SafeYAML** gem provides an alternative implementation of `YAML.load` suitable for accepting user input in Ruby applications. Unlike Ruby's built-in implementation of `YAML.load`, SafeYAML's version will not expose apps to arbitrary code execution exploits (such as [the ones discovered](http://www.reddit.com/r/netsec/comments/167c11/serious_vulnerability_in_ruby_on_rails_allowing/) [in Rails in early 2013](http://www.h-online.com/open/news/item/Rails-developers-close-another-extremely-critical-flaw-1793511.html)).
|
8
|
-
|
9
|
-
**If you encounter any issues with SafeYAML, check out the 'Common Issues' section below.** If you don't see anything that addresses the problem you're experiencing, by all means, [create an issue](https://github.com/dtao/safe_yaml/issues/new)!
|
10
|
-
|
11
|
-
Installation
|
12
|
-
------------
|
13
|
-
|
14
|
-
Add this line to your application's Gemfile:
|
15
|
-
|
16
|
-
```ruby
|
17
|
-
gem "safe_yaml"
|
18
|
-
```
|
19
|
-
|
20
|
-
Configuration
|
21
|
-
-------------
|
22
|
-
|
23
|
-
If *all you do* is add SafeYAML to your project, then `YAML.load` will operate in "safe" mode, which means it won't deserialize arbitrary objects. However, it will issue a warning the first time you call it because you haven't explicitly specified whether you want safe or unsafe behavior by default. To specify this behavior (e.g., in a Rails initializer):
|
24
|
-
|
25
|
-
```ruby
|
26
|
-
SafeYAML::OPTIONS[:default_mode] = :safe # or :unsafe
|
27
|
-
```
|
28
|
-
|
29
|
-
Another important option you might want to specify on startup is whether or not to allow *symbols* to be deserialized. The default setting is `false`, since symbols are not garbage collected in Ruby and so deserializing them from YAML may render your application vulnerable to a DOS (denial of service) attack. To allow symbol deserialization by default:
|
30
|
-
|
31
|
-
```ruby
|
32
|
-
SafeYAML::OPTIONS[:deserialize_symbols] = true
|
33
|
-
```
|
34
|
-
|
35
|
-
For more information on these and other options, see the "Usage" section down below.
|
36
|
-
|
37
|
-
What is this gem for, exactly?
|
38
|
-
------------------------------
|
39
|
-
|
40
|
-
Suppose your application were to use a popular open source library which contained code like this:
|
41
|
-
|
42
|
-
```ruby
|
43
|
-
class ClassBuilder
|
44
|
-
def []=(key, value)
|
45
|
-
@class ||= Class.new
|
46
|
-
|
47
|
-
@class.class_eval <<-EOS
|
48
|
-
def #{key}
|
49
|
-
#{value}
|
50
|
-
end
|
51
|
-
EOS
|
52
|
-
end
|
53
|
-
|
54
|
-
def create
|
55
|
-
@class.new
|
56
|
-
end
|
57
|
-
end
|
58
|
-
```
|
59
|
-
|
60
|
-
Now, if you were to use `YAML.load` on user input anywhere in your application without the SafeYAML gem installed, an attacker who suspected you were using this library could send a request with a carefully-crafted YAML string to execute arbitrary code (yes, including `system("unix command")`) on your servers.
|
61
|
-
|
62
|
-
This simple example demonstrates the vulnerability:
|
63
|
-
|
64
|
-
```ruby
|
65
|
-
yaml = <<-EOYAML
|
66
|
-
--- !ruby/hash:ClassBuilder
|
67
|
-
"foo; end; puts %(I'm in yr system!); def bar": "baz"
|
68
|
-
EOYAML
|
69
|
-
```
|
70
|
-
|
71
|
-
> YAML.load(yaml)
|
72
|
-
I'm in yr system!
|
73
|
-
=> #<ClassBuilder:0x007fdbbe2e25d8 @class=#<Class:0x007fdbbe2e2510>>
|
74
|
-
|
75
|
-
With SafeYAML, the same attacker would be thwarted:
|
76
|
-
|
77
|
-
> require "safe_yaml"
|
78
|
-
=> true
|
79
|
-
> YAML.load(yaml, :safe => true)
|
80
|
-
=> {"foo; end; puts %(I'm in yr system!); def bar"=>"baz"}
|
81
|
-
|
82
|
-
Usage
|
83
|
-
-----
|
84
|
-
|
85
|
-
When you require the safe_yaml gem in your project, `YAML.load` is patched to accept one additional (optional) `options` parameter. This changes the method signature as follows:
|
86
|
-
|
87
|
-
- for Syck and Psych prior to Ruby 1.9.3: `YAML.load(yaml, options={})`
|
88
|
-
- for Psych in 1.9.3 and later: `YAML.load(yaml, filename=nil, options={})`
|
89
|
-
|
90
|
-
The most important option is the `:safe` option (default: `true`), which controls whether or not to deserialize arbitrary objects when parsing a YAML document. The other options, along with explanations, are as follows.
|
91
|
-
|
92
|
-
- `:deserialize_symbols` (default: `false`): Controls whether or not YAML will deserialize symbols. It is probably best to only enable this option where necessary, e.g. to make trusted libraries work. Symbols receive special treatment in Ruby and are not garbage collected, which means deserializing them indiscriminately may render your site vulnerable to a DOS attack.
|
93
|
-
|
94
|
-
- `:whitelisted_tags`: Accepts an array of YAML tags that designate trusted types, e.g., ones that can be deserialized without worrying about any resulting security vulnerabilities. When any of the given tags are encountered in a YAML document, the associated data will be parsed by the underlying YAML engine (Syck or Psych) for the version of Ruby you are using. See the "Whitelisting Trusted Types" section below for more information.
|
95
|
-
|
96
|
-
- `:custom_initializers`: Similar to the `:whitelisted_tags` option, but allows you to provide your own initializers for specified tags rather than using Syck or Psyck. Accepts a hash with string tags for keys and lambdas for values.
|
97
|
-
|
98
|
-
- `:raise_on_unknown_tag` (default: `false`): Represents the highest possible level of paranoia. If the YAML engine encounters any tag other than ones that are automatically trusted by SafeYAML or that you've explicitly whitelisted, it will raise an exception. This may be a good choice if you expect to always be dealing with perfectly safe YAML and want your application to fail loudly upon encountering questionable data.
|
99
|
-
|
100
|
-
All of the above options can be set at the global level via `SafeYAML::OPTIONS`. You can also set each one individually per call to `YAML.load`; an option explicitly passed to `load` will take precedence over an option specified globally.
|
101
|
-
|
102
|
-
What if I don't *want* to patch `YAML`?
|
103
|
-
---------------------------------------
|
104
|
-
|
105
|
-
[Excellent question](https://github.com/dtao/safe_yaml/issues/47)! You can also get the methods `SafeYAML.load` and `SafeYAML.load_file` without touching the `YAML` module at all like this:
|
106
|
-
|
107
|
-
```ruby
|
108
|
-
require "safe_yaml/load" # instead of require "safe_yaml"
|
109
|
-
```
|
110
|
-
|
111
|
-
This way, you can use `SafeYAML.load` to parse YAML that *you* don't trust, without affecting the rest of an application (if you're developing a library, for example).
|
112
|
-
|
113
|
-
Supported Types
|
114
|
-
---------------
|
115
|
-
|
116
|
-
The way that SafeYAML works is by restricting the kinds of objects that can be deserialized via `YAML.load`. More specifically, only the following types of objects can be deserialized by default:
|
117
|
-
|
118
|
-
- Hashes
|
119
|
-
- Arrays
|
120
|
-
- Strings
|
121
|
-
- Numbers
|
122
|
-
- Dates
|
123
|
-
- Times
|
124
|
-
- Booleans
|
125
|
-
- Nils
|
126
|
-
|
127
|
-
Again, deserialization of symbols can be enabled globally by setting `SafeYAML::OPTIONS[:deserialize_symbols] = true`, or in a specific call to `YAML.load([some yaml], :deserialize_symbols => true)`.
|
128
|
-
|
129
|
-
Whitelisting Trusted Types
|
130
|
-
--------------------------
|
131
|
-
|
132
|
-
SafeYAML supports whitelisting certain YAML tags for trusted types. This is handy when your application uses YAML to serialize and deserialize certain types not listed above, which you know to be free of any deserialization-related vulnerabilities.
|
133
|
-
|
134
|
-
The easiest way to whitelist types is by calling `SafeYAML.whitelist!`, which can accept a variable number of safe types, e.g.:
|
135
|
-
|
136
|
-
```ruby
|
137
|
-
SafeYAML.whitelist!(Foo, Bar)
|
138
|
-
```
|
139
|
-
|
140
|
-
You can also whitelist YAML *tags* via the `:whitelisted_tags` option:
|
141
|
-
|
142
|
-
```ruby
|
143
|
-
# Using Syck
|
144
|
-
SafeYAML::OPTIONS[:whitelisted_tags] = ["tag:ruby.yaml.org,2002:object:OpenStruct"]
|
145
|
-
|
146
|
-
# Using Psych
|
147
|
-
SafeYAML::OPTIONS[:whitelisted_tags] = ["!ruby/object:OpenStruct"]
|
148
|
-
```
|
149
|
-
|
150
|
-
And in case you were wondering: no, this feature will *not* allow would-be attackers to embed untrusted types within trusted types:
|
151
|
-
|
152
|
-
```ruby
|
153
|
-
yaml = <<-EOYAML
|
154
|
-
--- !ruby/object:OpenStruct
|
155
|
-
table:
|
156
|
-
:backdoor: !ruby/hash:ClassBuilder
|
157
|
-
"foo; end; puts %(I'm in yr system!); def bar": "baz"
|
158
|
-
EOYAML
|
159
|
-
```
|
160
|
-
|
161
|
-
> YAML.safe_load(yaml)
|
162
|
-
=> #<OpenStruct :backdoor={"foo; end; puts %(I'm in yr system!); def bar"=>"baz"}>
|
163
|
-
|
164
|
-
Known Issues
|
165
|
-
------------
|
166
|
-
|
167
|
-
If you add SafeYAML to your project and start seeing any errors about missing keys, or you notice mysterious strings that look like `":foo"` (i.e., start with a colon), it's likely you're seeing errors from symbols being saved in YAML format. If you are able to modify the offending code, you might want to consider changing your YAML content to use plain vanilla strings instead of symbols. If not, you may need to set the `:deserialize_symbols` option to `true`, either in calls to `YAML.load` or---as a last resort---globally, with `SafeYAML::OPTIONS[:deserialize_symbols]`.
|
168
|
-
|
169
|
-
Also be aware that some Ruby libraries, particularly those requiring inter-process communication, leverage YAML's object deserialization functionality and therefore may break or otherwise be impacted by SafeYAML. The following list includes known instances of SafeYAML's interaction with other Ruby gems:
|
170
|
-
|
171
|
-
- [**ActiveRecord**](https://github.com/rails/rails/tree/master/activerecord): uses YAML to control serialization of model objects using the `serialize` class method. If you find that accessing serialized properties on your ActiveRecord models is causing errors, chances are you may need to:
|
172
|
-
1. set the `:deserialize_symbols` option to `true`,
|
173
|
-
2. whitelist some of the types in your serialized data via `SafeYAML.whitelist!` or the `:whitelisted_tags` option, or
|
174
|
-
3. both
|
175
|
-
- [**delayed_job**](https://github.com/collectiveidea/delayed_job): Uses YAML to serialize the objects on which delayed methods are invoked (with `delay`). The safest solution in this case is to use `SafeYAML.whitelist!` to whitelist the types you need to serialize.
|
176
|
-
- [**Guard**](https://github.com/guard/guard): Uses YAML as a serialization format for notifications. The data serialized uses symbolic keys, so setting `SafeYAML::OPTIONS[:deserialize_symbols] = true` is necessary to allow Guard to work.
|
177
|
-
- [**sidekiq**](https://github.com/mperham/sidekiq): Uses a YAML configiuration file with symbolic keys, so setting `SafeYAML::OPTIONS[:deserialize_symbols] = true` should allow it to work.
|
178
|
-
|
179
|
-
The above list will grow over time, as more issues are discovered.
|
180
|
-
|
181
|
-
Versioning
|
182
|
-
----------
|
183
|
-
|
184
|
-
SafeYAML will follow [semantic versioning](http://semver.org/) so any updates to the first major version will maintain backwards compatability. So expect primarily bug fixes and feature enhancements (if anything!) from here on out... unless it makes sense to break the interface at some point and introduce a version 2.0, which I honestly think is unlikely.
|
185
|
-
|
186
|
-
Requirements
|
187
|
-
------------
|
188
|
-
|
189
|
-
SafeYAML requires Ruby 1.8.7 or newer and works with both [Syck](http://www.ruby-doc.org/stdlib-1.8.7/libdoc/yaml/rdoc/YAML.html) and [Psych](http://github.com/tenderlove/psych).
|
190
|
-
|
191
|
-
If you are using a version of Ruby where Psych is the default YAML engine (e.g., 1.9.3) but you want to use Syck, be sure to set `YAML::ENGINE.yamler = "syck"` **before** requiring the safe_yaml gem.
|
@@ -1,34 +0,0 @@
|
|
1
|
-
module SafeYAML
|
2
|
-
class Deep
|
3
|
-
def self.freeze(object)
|
4
|
-
object.each do |*entry|
|
5
|
-
value = entry.last
|
6
|
-
case value
|
7
|
-
when String, Regexp
|
8
|
-
value.freeze
|
9
|
-
when Enumerable
|
10
|
-
Deep.freeze(value)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
return object.freeze
|
15
|
-
end
|
16
|
-
|
17
|
-
def self.copy(object)
|
18
|
-
duplicate = object.dup rescue object
|
19
|
-
|
20
|
-
case object
|
21
|
-
when Array
|
22
|
-
(0...duplicate.count).each do |i|
|
23
|
-
duplicate[i] = Deep.copy(duplicate[i])
|
24
|
-
end
|
25
|
-
when Hash
|
26
|
-
duplicate.keys.each do |key|
|
27
|
-
duplicate[key] = Deep.copy(duplicate[key])
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
duplicate
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|