dommy 0.7.0 → 0.8.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.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/lib/dommy/animation.rb +9 -1
  3. data/lib/dommy/attr.rb +192 -39
  4. data/lib/dommy/backend/nokogiri_adapter.rb +76 -0
  5. data/lib/dommy/backend/nokolexbor_adapter.rb +37 -0
  6. data/lib/dommy/backend.rb +46 -0
  7. data/lib/dommy/blob.rb +28 -9
  8. data/lib/dommy/bridge/constructor_registry.rb +28 -0
  9. data/lib/dommy/bridge/methods.rb +57 -0
  10. data/lib/dommy/bridge.rb +97 -0
  11. data/lib/dommy/callable_invoker.rb +36 -0
  12. data/lib/dommy/cookie_store.rb +3 -1
  13. data/lib/dommy/crypto.rb +7 -1
  14. data/lib/dommy/css.rb +46 -0
  15. data/lib/dommy/custom_elements.rb +27 -3
  16. data/lib/dommy/data_transfer.rb +4 -0
  17. data/lib/dommy/document.rb +615 -48
  18. data/lib/dommy/dom_parser.rb +28 -15
  19. data/lib/dommy/element.rb +999 -471
  20. data/lib/dommy/event.rb +260 -96
  21. data/lib/dommy/event_source.rb +6 -2
  22. data/lib/dommy/fetch.rb +505 -43
  23. data/lib/dommy/file_reader.rb +11 -3
  24. data/lib/dommy/form_data.rb +2 -0
  25. data/lib/dommy/history.rb +43 -8
  26. data/lib/dommy/html_collection.rb +55 -2
  27. data/lib/dommy/html_elements.rb +102 -1519
  28. data/lib/dommy/internal/css_pseudo_handlers.rb +109 -0
  29. data/lib/dommy/internal/global_functions.rb +26 -0
  30. data/lib/dommy/internal/idna.rb +16 -7
  31. data/lib/dommy/internal/ipv4_parser.rb +22 -7
  32. data/lib/dommy/internal/mutation_coordinator.rb +11 -2
  33. data/lib/dommy/internal/namespaces.rb +70 -0
  34. data/lib/dommy/internal/node_equality.rb +86 -0
  35. data/lib/dommy/internal/node_wrapper_cache.rb +62 -27
  36. data/lib/dommy/internal/observable_callback.rb +1 -5
  37. data/lib/dommy/internal/parent_node.rb +126 -0
  38. data/lib/dommy/internal/reflected_attributes.rb +103 -13
  39. data/lib/dommy/internal/selector_parser.rb +664 -0
  40. data/lib/dommy/internal/url_parser.rb +677 -0
  41. data/lib/dommy/intersection_observer.rb +2 -0
  42. data/lib/dommy/location.rb +2 -0
  43. data/lib/dommy/media_query_list.rb +7 -1
  44. data/lib/dommy/message_channel.rb +32 -2
  45. data/lib/dommy/mutation_observer.rb +55 -12
  46. data/lib/dommy/navigator.rb +26 -12
  47. data/lib/dommy/node.rb +158 -28
  48. data/lib/dommy/notification.rb +3 -1
  49. data/lib/dommy/performance.rb +4 -0
  50. data/lib/dommy/performance_observer.rb +2 -0
  51. data/lib/dommy/promise.rb +14 -14
  52. data/lib/dommy/range.rb +74 -5
  53. data/lib/dommy/resize_observer.rb +2 -0
  54. data/lib/dommy/scheduler.rb +34 -13
  55. data/lib/dommy/shadow_root.rb +23 -54
  56. data/lib/dommy/storage.rb +2 -0
  57. data/lib/dommy/streams.rb +18 -27
  58. data/lib/dommy/svg_elements.rb +204 -3606
  59. data/lib/dommy/text_codec.rb +174 -21
  60. data/lib/dommy/tree_walker.rb +255 -66
  61. data/lib/dommy/url.rb +287 -449
  62. data/lib/dommy/url_pattern.rb +2 -0
  63. data/lib/dommy/version.rb +1 -1
  64. data/lib/dommy/web_socket.rb +37 -7
  65. data/lib/dommy/window.rb +202 -213
  66. data/lib/dommy/worker.rb +7 -7
  67. data/lib/dommy/xml_http_request.rb +15 -5
  68. data/lib/dommy.rb +7 -0
  69. metadata +12 -3
@@ -210,12 +210,19 @@ module Dommy
210
210
  @with_credentials = !!value
211
211
  else
212
212
  event = inline_event_for(key)
213
- set_inline_handler(event, value) if event
213
+ return Bridge::UNHANDLED unless event
214
+
215
+ set_inline_handler(event, value)
214
216
  end
215
217
 
216
218
  nil
217
219
  end
218
220
 
221
+ include Bridge::Methods
222
+ js_methods %w[
223
+ open send setRequestHeader abort getResponseHeader getAllResponseHeaders overrideMimeType
224
+ addEventListener removeEventListener dispatchEvent
225
+ ]
219
226
  def __js_call__(method, args)
220
227
  case method
221
228
  when "open"
@@ -235,7 +242,7 @@ module Dommy
235
242
  when "addEventListener"
236
243
  add_event_listener(args[0], args[1], args[2])
237
244
  when "removeEventListener"
238
- remove_event_listener(args[0], args[1])
245
+ remove_event_listener(args[0], args[1], args[2])
239
246
  when "dispatchEvent"
240
247
  dispatch_event(args[0])
241
248
  end
@@ -366,9 +373,10 @@ module Dommy
366
373
  end
367
374
 
368
375
  when "arraybuffer"
369
- body.bytes
376
+ # responseType "arraybuffer" yields a real ArrayBuffer.
377
+ Bridge::ArrayBuffer.new(body.bytes)
370
378
  when "blob"
371
- Blob.new([body], "type" => response_content_type)
379
+ Blob.new([body], {"type" => response_content_type}, @window)
372
380
  when "document"
373
381
  parse_document(body)
374
382
  else
@@ -420,12 +428,14 @@ module Dommy
420
428
  class XMLHttpRequestUpload
421
429
  include EventTarget
422
430
 
431
+ include Bridge::Methods
432
+ js_methods %w[addEventListener removeEventListener dispatchEvent]
423
433
  def __js_call__(method, args)
424
434
  case method
425
435
  when "addEventListener"
426
436
  add_event_listener(args[0], args[1], args[2])
427
437
  when "removeEventListener"
428
- remove_event_listener(args[0], args[1])
438
+ remove_event_listener(args[0], args[1], args[2])
429
439
  when "dispatchEvent"
430
440
  dispatch_event(args[0])
431
441
  end
data/lib/dommy.rb CHANGED
@@ -5,6 +5,10 @@ require "set"
5
5
  require_relative "dommy/version"
6
6
  require_relative "dommy/backend"
7
7
  require_relative "dommy/dom_exception"
8
+ require_relative "dommy/internal/namespaces"
9
+ require_relative "dommy/internal/global_functions"
10
+ require_relative "dommy/callable_invoker"
11
+ require_relative "dommy/bridge/methods"
8
12
  require_relative "dommy/node"
9
13
  require_relative "dommy/html_collection"
10
14
  require_relative "dommy/event"
@@ -17,6 +21,7 @@ require_relative "dommy/crypto"
17
21
  require_relative "dommy/text_codec"
18
22
  require_relative "dommy/internal/observable_callback"
19
23
  require_relative "dommy/internal/css_pseudo_handlers"
24
+ require_relative "dommy/internal/selector_parser"
20
25
  require_relative "dommy/internal/punycode"
21
26
  require_relative "dommy/internal/idna"
22
27
  require_relative "dommy/internal/ipv4_parser"
@@ -27,6 +32,7 @@ require_relative "dommy/internal/range_text_serializer"
27
32
  require_relative "dommy/range"
28
33
  require_relative "dommy/animation"
29
34
  require_relative "dommy/bridge"
35
+ require_relative "dommy/bridge/constructor_registry"
30
36
  require_relative "dommy/storage"
31
37
  require_relative "dommy/fetch"
32
38
  require_relative "dommy/xml_http_request"
@@ -49,6 +55,7 @@ require_relative "dommy/parser"
49
55
  require_relative "dommy/attr"
50
56
  require_relative "dommy/window"
51
57
  require_relative "dommy/document"
58
+ require_relative "dommy/internal/parent_node"
52
59
  require_relative "dommy/element"
53
60
  require_relative "dommy/internal/reflected_attributes"
54
61
  require_relative "dommy/html_elements"
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dommy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - takahashim
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2026-05-29 00:00:00.000000000 Z
10
+ date: 2026-05-31 00:00:00.000000000 Z
11
11
  dependencies: []
12
12
  description: 'A pure Ruby DOM polyfill built on Nokogiri::HTML5, inspired by happy-dom
13
13
  and jsdom. It gives Ruby tests a browser style DOM with events, MutationObserver,
@@ -30,6 +30,9 @@ files:
30
30
  - lib/dommy/backend/nokolexbor_adapter.rb
31
31
  - lib/dommy/blob.rb
32
32
  - lib/dommy/bridge.rb
33
+ - lib/dommy/bridge/constructor_registry.rb
34
+ - lib/dommy/bridge/methods.rb
35
+ - lib/dommy/callable_invoker.rb
33
36
  - lib/dommy/compression_streams.rb
34
37
  - lib/dommy/cookie_store.rb
35
38
  - lib/dommy/crypto.rb
@@ -51,21 +54,27 @@ files:
51
54
  - lib/dommy/internal/cookie_jar.rb
52
55
  - lib/dommy/internal/css_pseudo_handlers.rb
53
56
  - lib/dommy/internal/dom_matching.rb
57
+ - lib/dommy/internal/global_functions.rb
54
58
  - lib/dommy/internal/idna.rb
55
59
  - lib/dommy/internal/idna_data.rb
56
60
  - lib/dommy/internal/ipv4_parser.rb
57
61
  - lib/dommy/internal/mutation_coordinator.rb
62
+ - lib/dommy/internal/namespaces.rb
63
+ - lib/dommy/internal/node_equality.rb
58
64
  - lib/dommy/internal/node_traversal.rb
59
65
  - lib/dommy/internal/node_wrapper_cache.rb
60
66
  - lib/dommy/internal/observable_callback.rb
61
67
  - lib/dommy/internal/observer_manager.rb
62
68
  - lib/dommy/internal/observer_matcher.rb
69
+ - lib/dommy/internal/parent_node.rb
63
70
  - lib/dommy/internal/punycode.rb
64
71
  - lib/dommy/internal/range_text_serializer.rb
65
72
  - lib/dommy/internal/reflected_attributes.rb
66
73
  - lib/dommy/internal/scope_resolution.rb
74
+ - lib/dommy/internal/selector_parser.rb
67
75
  - lib/dommy/internal/shadow_root_registry.rb
68
76
  - lib/dommy/internal/template_content_registry.rb
77
+ - lib/dommy/internal/url_parser.rb
69
78
  - lib/dommy/intersection_observer.rb
70
79
  - lib/dommy/location.rb
71
80
  - lib/dommy/media_query_list.rb
@@ -112,7 +121,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
112
121
  requirements:
113
122
  - - ">="
114
123
  - !ruby/object:Gem::Version
115
- version: '3.0'
124
+ version: '3.2'
116
125
  required_rubygems_version: !ruby/object:Gem::Requirement
117
126
  requirements:
118
127
  - - ">="