better_html 1.0.16 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE +1 -0
  3. data/Rakefile +19 -14
  4. data/ext/better_html_ext/better_html.h +1 -0
  5. data/ext/better_html_ext/extconf.rb +16 -0
  6. data/ext/better_html_ext/html_tokenizer.c +12 -0
  7. data/ext/better_html_ext/html_tokenizer.h +7 -0
  8. data/ext/better_html_ext/parser.c +793 -0
  9. data/ext/better_html_ext/parser.h +93 -0
  10. data/ext/better_html_ext/tokenizer.c +717 -0
  11. data/ext/better_html_ext/tokenizer.h +80 -0
  12. data/lib/better_html/ast/iterator.rb +14 -9
  13. data/lib/better_html/ast/node.rb +4 -2
  14. data/lib/better_html/better_erb/erubi_implementation.rb +43 -39
  15. data/lib/better_html/better_erb/runtime_checks.rb +140 -133
  16. data/lib/better_html/better_erb/validated_output_buffer.rb +30 -22
  17. data/lib/better_html/better_erb.rb +58 -54
  18. data/lib/better_html/config.rb +7 -4
  19. data/lib/better_html/errors.rb +4 -2
  20. data/lib/better_html/helpers.rb +7 -3
  21. data/lib/better_html/html_attributes.rb +6 -2
  22. data/lib/better_html/parser.rb +21 -14
  23. data/lib/better_html/railtie.rb +8 -4
  24. data/lib/better_html/test_helper/ruby_node.rb +15 -10
  25. data/lib/better_html/test_helper/safe_erb/allowed_script_type.rb +8 -4
  26. data/lib/better_html/test_helper/safe_erb/base.rb +12 -9
  27. data/lib/better_html/test_helper/safe_erb/no_javascript_tag_helper.rb +7 -3
  28. data/lib/better_html/test_helper/safe_erb/no_statements.rb +7 -3
  29. data/lib/better_html/test_helper/safe_erb/script_interpolation.rb +9 -4
  30. data/lib/better_html/test_helper/safe_erb/tag_interpolation.rb +23 -20
  31. data/lib/better_html/test_helper/safe_erb_tester.rb +33 -31
  32. data/lib/better_html/test_helper/safe_lodash_tester.rb +36 -35
  33. data/lib/better_html/test_helper/safety_error.rb +2 -0
  34. data/lib/better_html/tokenizer/base_erb.rb +14 -10
  35. data/lib/better_html/tokenizer/html_erb.rb +3 -2
  36. data/lib/better_html/tokenizer/html_lodash.rb +22 -14
  37. data/lib/better_html/tokenizer/javascript_erb.rb +3 -1
  38. data/lib/better_html/tokenizer/location.rb +17 -6
  39. data/lib/better_html/tokenizer/token.rb +2 -0
  40. data/lib/better_html/tokenizer/token_array.rb +8 -8
  41. data/lib/better_html/tree/attribute.rb +10 -6
  42. data/lib/better_html/tree/attributes_list.rb +9 -5
  43. data/lib/better_html/tree/tag.rb +10 -6
  44. data/lib/better_html/version.rb +3 -1
  45. data/lib/better_html.rb +19 -17
  46. data/lib/tasks/better_html_tasks.rake +1 -0
  47. metadata +39 -147
  48. data/lib/better_html/better_erb/erubis_implementation.rb +0 -44
  49. data/test/better_html/better_erb/implementation_test.rb +0 -406
  50. data/test/better_html/errors_test.rb +0 -13
  51. data/test/better_html/helpers_test.rb +0 -49
  52. data/test/better_html/parser_test.rb +0 -314
  53. data/test/better_html/test_helper/ruby_node_test.rb +0 -288
  54. data/test/better_html/test_helper/safe_erb/allowed_script_type_test.rb +0 -46
  55. data/test/better_html/test_helper/safe_erb/no_javascript_tag_helper_test.rb +0 -37
  56. data/test/better_html/test_helper/safe_erb/no_statements_test.rb +0 -129
  57. data/test/better_html/test_helper/safe_erb/script_interpolation_test.rb +0 -149
  58. data/test/better_html/test_helper/safe_erb/tag_interpolation_test.rb +0 -303
  59. data/test/better_html/test_helper/safe_lodash_tester_test.rb +0 -90
  60. data/test/better_html/tokenizer/html_erb_test.rb +0 -180
  61. data/test/better_html/tokenizer/html_lodash_test.rb +0 -98
  62. data/test/better_html/tokenizer/location_test.rb +0 -75
  63. data/test/better_html/tokenizer/token_array_test.rb +0 -146
  64. data/test/better_html/tokenizer/token_test.rb +0 -15
  65. data/test/dummy/README.rdoc +0 -28
  66. data/test/dummy/Rakefile +0 -6
  67. data/test/dummy/app/assets/javascripts/application.js +0 -13
  68. data/test/dummy/app/assets/stylesheets/application.css +0 -15
  69. data/test/dummy/app/controllers/application_controller.rb +0 -5
  70. data/test/dummy/app/helpers/application_helper.rb +0 -2
  71. data/test/dummy/app/views/layouts/application.html.erb +0 -14
  72. data/test/dummy/bin/bundle +0 -3
  73. data/test/dummy/bin/rails +0 -4
  74. data/test/dummy/bin/rake +0 -4
  75. data/test/dummy/bin/setup +0 -29
  76. data/test/dummy/config/application.rb +0 -26
  77. data/test/dummy/config/boot.rb +0 -5
  78. data/test/dummy/config/database.yml +0 -25
  79. data/test/dummy/config/environment.rb +0 -5
  80. data/test/dummy/config/environments/development.rb +0 -41
  81. data/test/dummy/config/environments/production.rb +0 -79
  82. data/test/dummy/config/environments/test.rb +0 -42
  83. data/test/dummy/config/initializers/assets.rb +0 -11
  84. data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
  85. data/test/dummy/config/initializers/cookies_serializer.rb +0 -3
  86. data/test/dummy/config/initializers/filter_parameter_logging.rb +0 -4
  87. data/test/dummy/config/initializers/inflections.rb +0 -16
  88. data/test/dummy/config/initializers/mime_types.rb +0 -4
  89. data/test/dummy/config/initializers/session_store.rb +0 -3
  90. data/test/dummy/config/initializers/wrap_parameters.rb +0 -14
  91. data/test/dummy/config/locales/en.yml +0 -23
  92. data/test/dummy/config/routes.rb +0 -56
  93. data/test/dummy/config/secrets.yml +0 -22
  94. data/test/dummy/config.ru +0 -4
  95. data/test/dummy/public/404.html +0 -67
  96. data/test/dummy/public/422.html +0 -67
  97. data/test/dummy/public/500.html +0 -66
  98. data/test/dummy/public/favicon.ico +0 -0
  99. data/test/test_helper.rb +0 -29
@@ -1,20 +1,24 @@
1
- require 'better_html/tree/attributes_list'
2
- require 'better_html/ast/iterator'
1
+ # frozen_string_literal: true
2
+
3
+ require "better_html/tree/attributes_list"
4
+ require "better_html/ast/iterator"
3
5
 
4
6
  module BetterHtml
5
7
  module Tree
6
8
  class Tag
7
9
  attr_reader :node, :start_solidus, :name_node, :attributes_node, :end_solidus
8
10
 
11
+ class << self
12
+ def from_node(node)
13
+ new(node)
14
+ end
15
+ end
16
+
9
17
  def initialize(node)
10
18
  @node = node
11
19
  @start_solidus, @name_node, @attributes_node, @end_solidus = *node
12
20
  end
13
21
 
14
- def self.from_node(node)
15
- new(node)
16
- end
17
-
18
22
  def loc
19
23
  @node.loc
20
24
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BetterHtml
2
- VERSION = "1.0.16"
4
+ VERSION = "2.0.0"
3
5
  end
data/lib/better_html.rb CHANGED
@@ -1,25 +1,27 @@
1
- require 'active_support/core_ext/hash/keys'
2
- require 'active_support/core_ext/module/delegation'
3
- require 'active_support/core_ext/class/attribute_accessors'
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/core_ext/hash/keys"
4
+ require "active_support/core_ext/module/delegation"
5
+ require "active_support/core_ext/class/attribute_accessors"
4
6
 
5
7
  module BetterHtml
6
- def self.configure
7
- yield config if block_given?
8
- end
8
+ class << self
9
+ attr_writer :config
9
10
 
10
- def self.config
11
- @config ||= Config.new
12
- end
11
+ def config
12
+ @config ||= Config.new
13
+ end
13
14
 
14
- def self.config=(new_config)
15
- @config = new_config
15
+ def configure
16
+ yield config if block_given?
17
+ end
16
18
  end
17
19
  end
18
20
 
19
- require 'better_html/version'
20
- require 'better_html/config'
21
- require 'better_html/helpers'
22
- require 'better_html/errors'
23
- require 'better_html/html_attributes'
21
+ require "better_html/version"
22
+ require "better_html/config"
23
+ require "better_html/helpers"
24
+ require "better_html/errors"
25
+ require "better_html/html_attributes"
24
26
 
25
- require 'better_html/railtie' if defined?(Rails)
27
+ require "better_html/railtie" if defined?(Rails)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # desc "Explaining what the task does"
2
3
  # task :better_html do
3
4
  # # Task goes here
metadata CHANGED
@@ -1,71 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: better_html
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.16
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Francois Chagnon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-28 00:00:00.000000000 Z
11
+ date: 2022-08-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: ast
14
+ name: actionview
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '2.0'
19
+ version: '6.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '2.0'
26
+ version: '6.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: erubi
28
+ name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.4'
33
+ version: '6.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '1.4'
40
+ version: '6.0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: activesupport
42
+ name: ast
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '4.0'
47
+ version: '2.0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '4.0'
54
+ version: '2.0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: actionview
56
+ name: erubi
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '4.0'
61
+ version: '1.4'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '4.0'
68
+ version: '1.4'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: parser
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -94,50 +94,44 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: html_tokenizer
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: 0.0.6
104
- type: :runtime
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: 0.0.6
111
97
  - !ruby/object:Gem::Dependency
112
98
  name: rake
113
99
  requirement: !ruby/object:Gem::Requirement
114
100
  requirements:
115
101
  - - "~>"
116
102
  - !ruby/object:Gem::Version
117
- version: '0'
103
+ version: '13'
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
107
  requirements:
122
108
  - - "~>"
123
109
  - !ruby/object:Gem::Version
124
- version: '0'
110
+ version: '13'
125
111
  description: Better HTML for Rails. Provides sane html helpers that make it easier
126
112
  to do the right thing.
127
113
  email:
128
- - francois.chagnon@shopify.com
114
+ - ruby@shopify.com
129
115
  executables: []
130
- extensions: []
116
+ extensions:
117
+ - ext/better_html_ext/extconf.rb
131
118
  extra_rdoc_files: []
132
119
  files:
133
120
  - MIT-LICENSE
134
121
  - Rakefile
122
+ - ext/better_html_ext/better_html.h
123
+ - ext/better_html_ext/extconf.rb
124
+ - ext/better_html_ext/html_tokenizer.c
125
+ - ext/better_html_ext/html_tokenizer.h
126
+ - ext/better_html_ext/parser.c
127
+ - ext/better_html_ext/parser.h
128
+ - ext/better_html_ext/tokenizer.c
129
+ - ext/better_html_ext/tokenizer.h
135
130
  - lib/better_html.rb
136
131
  - lib/better_html/ast/iterator.rb
137
132
  - lib/better_html/ast/node.rb
138
133
  - lib/better_html/better_erb.rb
139
134
  - lib/better_html/better_erb/erubi_implementation.rb
140
- - lib/better_html/better_erb/erubis_implementation.rb
141
135
  - lib/better_html/better_erb/runtime_checks.rb
142
136
  - lib/better_html/better_erb/validated_output_buffer.rb
143
137
  - lib/better_html/config.rb
@@ -168,64 +162,13 @@ files:
168
162
  - lib/better_html/tree/tag.rb
169
163
  - lib/better_html/version.rb
170
164
  - lib/tasks/better_html_tasks.rake
171
- - test/better_html/better_erb/implementation_test.rb
172
- - test/better_html/errors_test.rb
173
- - test/better_html/helpers_test.rb
174
- - test/better_html/parser_test.rb
175
- - test/better_html/test_helper/ruby_node_test.rb
176
- - test/better_html/test_helper/safe_erb/allowed_script_type_test.rb
177
- - test/better_html/test_helper/safe_erb/no_javascript_tag_helper_test.rb
178
- - test/better_html/test_helper/safe_erb/no_statements_test.rb
179
- - test/better_html/test_helper/safe_erb/script_interpolation_test.rb
180
- - test/better_html/test_helper/safe_erb/tag_interpolation_test.rb
181
- - test/better_html/test_helper/safe_lodash_tester_test.rb
182
- - test/better_html/tokenizer/html_erb_test.rb
183
- - test/better_html/tokenizer/html_lodash_test.rb
184
- - test/better_html/tokenizer/location_test.rb
185
- - test/better_html/tokenizer/token_array_test.rb
186
- - test/better_html/tokenizer/token_test.rb
187
- - test/dummy/README.rdoc
188
- - test/dummy/Rakefile
189
- - test/dummy/app/assets/javascripts/application.js
190
- - test/dummy/app/assets/stylesheets/application.css
191
- - test/dummy/app/controllers/application_controller.rb
192
- - test/dummy/app/helpers/application_helper.rb
193
- - test/dummy/app/views/layouts/application.html.erb
194
- - test/dummy/bin/bundle
195
- - test/dummy/bin/rails
196
- - test/dummy/bin/rake
197
- - test/dummy/bin/setup
198
- - test/dummy/config.ru
199
- - test/dummy/config/application.rb
200
- - test/dummy/config/boot.rb
201
- - test/dummy/config/database.yml
202
- - test/dummy/config/environment.rb
203
- - test/dummy/config/environments/development.rb
204
- - test/dummy/config/environments/production.rb
205
- - test/dummy/config/environments/test.rb
206
- - test/dummy/config/initializers/assets.rb
207
- - test/dummy/config/initializers/backtrace_silencers.rb
208
- - test/dummy/config/initializers/cookies_serializer.rb
209
- - test/dummy/config/initializers/filter_parameter_logging.rb
210
- - test/dummy/config/initializers/inflections.rb
211
- - test/dummy/config/initializers/mime_types.rb
212
- - test/dummy/config/initializers/session_store.rb
213
- - test/dummy/config/initializers/wrap_parameters.rb
214
- - test/dummy/config/locales/en.yml
215
- - test/dummy/config/routes.rb
216
- - test/dummy/config/secrets.yml
217
- - test/dummy/public/404.html
218
- - test/dummy/public/422.html
219
- - test/dummy/public/500.html
220
- - test/dummy/public/favicon.ico
221
- - test/test_helper.rb
222
165
  homepage: https://github.com/Shopify/better-html
223
166
  licenses:
224
167
  - MIT
225
168
  metadata:
226
169
  bug_tracker_uri: https://github.com/Shopify/better-html/issues
227
170
  changelog_uri: https://github.com/Shopify/better-html/releases
228
- source_code_uri: https://github.com/Shopify/better-html/tree/v1.0.16
171
+ source_code_uri: https://github.com/Shopify/better-html/tree/v2.0.0
229
172
  allowed_push_host: https://rubygems.org
230
173
  post_install_message:
231
174
  rdoc_options: []
@@ -235,66 +178,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
235
178
  requirements:
236
179
  - - ">="
237
180
  - !ruby/object:Gem::Version
238
- version: '0'
181
+ version: 2.7.0
239
182
  required_rubygems_version: !ruby/object:Gem::Requirement
240
183
  requirements:
241
184
  - - ">="
242
185
  - !ruby/object:Gem::Version
243
186
  version: '0'
244
187
  requirements: []
245
- rubygems_version: 3.0.3
188
+ rubygems_version: 3.3.3
246
189
  signing_key:
247
190
  specification_version: 4
248
191
  summary: Better HTML for Rails.
249
- test_files:
250
- - test/better_html/errors_test.rb
251
- - test/better_html/test_helper/ruby_node_test.rb
252
- - test/better_html/test_helper/safe_erb/allowed_script_type_test.rb
253
- - test/better_html/test_helper/safe_erb/no_javascript_tag_helper_test.rb
254
- - test/better_html/test_helper/safe_erb/script_interpolation_test.rb
255
- - test/better_html/test_helper/safe_erb/tag_interpolation_test.rb
256
- - test/better_html/test_helper/safe_erb/no_statements_test.rb
257
- - test/better_html/test_helper/safe_lodash_tester_test.rb
258
- - test/better_html/better_erb/implementation_test.rb
259
- - test/better_html/tokenizer/location_test.rb
260
- - test/better_html/tokenizer/token_test.rb
261
- - test/better_html/tokenizer/token_array_test.rb
262
- - test/better_html/tokenizer/html_lodash_test.rb
263
- - test/better_html/tokenizer/html_erb_test.rb
264
- - test/better_html/parser_test.rb
265
- - test/better_html/helpers_test.rb
266
- - test/test_helper.rb
267
- - test/dummy/app/assets/stylesheets/application.css
268
- - test/dummy/app/assets/javascripts/application.js
269
- - test/dummy/app/controllers/application_controller.rb
270
- - test/dummy/app/helpers/application_helper.rb
271
- - test/dummy/app/views/layouts/application.html.erb
272
- - test/dummy/config/secrets.yml
273
- - test/dummy/config/initializers/cookies_serializer.rb
274
- - test/dummy/config/initializers/backtrace_silencers.rb
275
- - test/dummy/config/initializers/mime_types.rb
276
- - test/dummy/config/initializers/filter_parameter_logging.rb
277
- - test/dummy/config/initializers/wrap_parameters.rb
278
- - test/dummy/config/initializers/inflections.rb
279
- - test/dummy/config/initializers/session_store.rb
280
- - test/dummy/config/initializers/assets.rb
281
- - test/dummy/config/routes.rb
282
- - test/dummy/config/database.yml
283
- - test/dummy/config/environment.rb
284
- - test/dummy/config/locales/en.yml
285
- - test/dummy/config/environments/development.rb
286
- - test/dummy/config/environments/test.rb
287
- - test/dummy/config/environments/production.rb
288
- - test/dummy/config/boot.rb
289
- - test/dummy/config/application.rb
290
- - test/dummy/config.ru
291
- - test/dummy/bin/rails
292
- - test/dummy/bin/rake
293
- - test/dummy/bin/setup
294
- - test/dummy/bin/bundle
295
- - test/dummy/Rakefile
296
- - test/dummy/public/404.html
297
- - test/dummy/public/422.html
298
- - test/dummy/public/favicon.ico
299
- - test/dummy/public/500.html
300
- - test/dummy/README.rdoc
192
+ test_files: []
@@ -1,44 +0,0 @@
1
- require 'action_view'
2
- require_relative 'runtime_checks'
3
-
4
- class BetterHtml::BetterErb
5
- class ErubisImplementation < ActionView::Template::Handlers::Erubis
6
- include RuntimeChecks
7
-
8
- def add_text(src, text)
9
- return if text.empty?
10
-
11
- if text == "\n"
12
- @parser.parse("\n")
13
- @newline_pending += 1
14
- else
15
- src << "@output_buffer.safe_append='"
16
- src << "\n" * @newline_pending if @newline_pending > 0
17
- src << escape_text(text)
18
- src << "'.freeze;"
19
-
20
- @parser.parse(text) do |*args|
21
- check_token(*args)
22
- end
23
-
24
- @newline_pending = 0
25
- end
26
- end
27
-
28
- def add_expr_literal(src, code)
29
- add_expr_auto_escaped(src, code, true)
30
- end
31
-
32
- def add_expr_escaped(src, code)
33
- add_expr_auto_escaped(src, code, false)
34
- end
35
-
36
- def add_stmt(src, code)
37
- flush_newline_if_pending(src)
38
-
39
- block_check(src, "<%#{code}%>")
40
- @parser.append_placeholder(code)
41
- super
42
- end
43
- end
44
- end