playwright-ruby-client 0.6.0 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. checksums.yaml +4 -4
  2. data/documentation/README.md +33 -0
  3. data/documentation/babel.config.js +3 -0
  4. data/documentation/docs/api/accessibility.md +7 -0
  5. data/documentation/docs/api/browser.md +185 -0
  6. data/documentation/docs/api/browser_context.md +398 -0
  7. data/documentation/docs/api/browser_type.md +105 -0
  8. data/documentation/docs/api/cdp_session.md +7 -0
  9. data/documentation/docs/api/console_message.md +41 -0
  10. data/documentation/docs/api/dialog.md +74 -0
  11. data/documentation/docs/api/element_handle.md +640 -0
  12. data/documentation/docs/api/experimental/_category_.yml +3 -0
  13. data/documentation/docs/api/experimental/android.md +25 -0
  14. data/documentation/docs/api/experimental/android_device.md +91 -0
  15. data/documentation/docs/api/experimental/android_input.md +38 -0
  16. data/documentation/docs/api/experimental/android_socket.md +7 -0
  17. data/documentation/docs/api/experimental/android_web_view.md +7 -0
  18. data/documentation/docs/api/file_chooser.md +51 -0
  19. data/documentation/docs/api/frame.md +867 -0
  20. data/documentation/docs/api/js_handle.md +116 -0
  21. data/documentation/docs/api/keyboard.md +157 -0
  22. data/documentation/docs/api/mouse.md +69 -0
  23. data/documentation/docs/api/page.md +1469 -0
  24. data/documentation/docs/api/playwright.md +63 -0
  25. data/documentation/docs/api/request.md +188 -0
  26. data/documentation/docs/api/response.md +97 -0
  27. data/documentation/docs/api/route.md +80 -0
  28. data/documentation/docs/api/selectors.md +23 -0
  29. data/documentation/docs/api/touchscreen.md +8 -0
  30. data/documentation/docs/api/tracing.md +54 -0
  31. data/documentation/docs/api/web_socket.md +7 -0
  32. data/documentation/docs/api/worker.md +7 -0
  33. data/documentation/docs/article/api_coverage.mdx +11 -0
  34. data/documentation/docs/article/getting_started.md +152 -0
  35. data/documentation/docs/article/guides/_category_.yml +3 -0
  36. data/documentation/docs/article/guides/download_playwright_driver.md +49 -0
  37. data/documentation/docs/article/guides/launch_browser.md +119 -0
  38. data/documentation/docs/article/guides/rails_integration.md +51 -0
  39. data/{docs → documentation/docs/include}/api_coverage.md +0 -0
  40. data/documentation/docusaurus.config.js +107 -0
  41. data/documentation/package.json +39 -0
  42. data/documentation/sidebars.js +15 -0
  43. data/documentation/src/components/HomepageFeatures.js +61 -0
  44. data/documentation/src/components/HomepageFeatures.module.css +13 -0
  45. data/documentation/src/css/custom.css +44 -0
  46. data/documentation/src/pages/index.js +50 -0
  47. data/documentation/src/pages/index.module.css +41 -0
  48. data/documentation/src/pages/markdown-page.md +7 -0
  49. data/documentation/static/.nojekyll +0 -0
  50. data/documentation/static/img/playwright-logo.svg +9 -0
  51. data/documentation/static/img/undraw_dropdown_menu.svg +1 -0
  52. data/documentation/static/img/undraw_web_development.svg +1 -0
  53. data/documentation/static/img/undraw_windows.svg +1 -0
  54. data/documentation/yarn.lock +8805 -0
  55. data/lib/playwright/channel_owners/binding_call.rb +33 -0
  56. data/lib/playwright/channel_owners/browser_context.rb +2 -2
  57. data/lib/playwright/channel_owners/element_handle.rb +2 -10
  58. data/lib/playwright/channel_owners/frame.rb +6 -28
  59. data/lib/playwright/channel_owners/js_handle.rb +2 -10
  60. data/lib/playwright/channel_owners/page.rb +10 -1
  61. data/lib/playwright/input_files.rb +0 -8
  62. data/lib/playwright/javascript.rb +0 -10
  63. data/lib/playwright/javascript/expression.rb +2 -7
  64. data/lib/playwright/version.rb +1 -1
  65. data/lib/playwright_api/accessibility.rb +7 -89
  66. data/lib/playwright_api/android.rb +7 -64
  67. data/lib/playwright_api/android_device.rb +8 -8
  68. data/lib/playwright_api/browser.rb +15 -169
  69. data/lib/playwright_api/browser_context.rb +47 -609
  70. data/lib/playwright_api/browser_type.rb +13 -103
  71. data/lib/playwright_api/cdp_session.rb +2 -25
  72. data/lib/playwright_api/console_message.rb +6 -6
  73. data/lib/playwright_api/dialog.rb +11 -92
  74. data/lib/playwright_api/element_handle.rb +60 -362
  75. data/lib/playwright_api/file_chooser.rb +0 -28
  76. data/lib/playwright_api/frame.rb +74 -713
  77. data/lib/playwright_api/js_handle.rb +16 -90
  78. data/lib/playwright_api/keyboard.rb +21 -213
  79. data/lib/playwright_api/mouse.rb +1 -45
  80. data/lib/playwright_api/page.rb +155 -1635
  81. data/lib/playwright_api/playwright.rb +14 -117
  82. data/lib/playwright_api/request.rb +15 -121
  83. data/lib/playwright_api/response.rb +9 -9
  84. data/lib/playwright_api/route.rb +8 -105
  85. data/lib/playwright_api/selectors.rb +6 -97
  86. data/lib/playwright_api/tracing.rb +1 -61
  87. data/lib/playwright_api/web_socket.rb +1 -1
  88. data/lib/playwright_api/worker.rb +6 -42
  89. metadata +55 -4
  90. data/lib/playwright/javascript/function.rb +0 -67
@@ -3,5 +3,38 @@ module Playwright
3
3
  def name
4
4
  @initializer['name']
5
5
  end
6
+
7
+ def call_async(callback)
8
+ Thread.new(callback) { call(callback) }
9
+ end
10
+
11
+ # @param callback [Proc]
12
+ def call(callback)
13
+ frame = ChannelOwners::Frame.from(@initializer['frame'])
14
+ # It is not desired to use PlaywrightApi.wrap directly.
15
+ # However it is a little difficult to define wrapper for `source` parameter in generate_api.
16
+ # Just a workaround...
17
+ source = {
18
+ context: PlaywrightApi.wrap(frame.page.context),
19
+ page: PlaywrightApi.wrap(frame.page),
20
+ frame: PlaywrightApi.wrap(frame),
21
+ }
22
+ args =
23
+ if @initializer['handle']
24
+ handle = ChannelOwners::ElementHandle.from(@initializer['handle'])
25
+ [handle]
26
+ else
27
+ @initializer['args'].map do |arg|
28
+ JavaScript::ValueParser.new(arg).parse
29
+ end
30
+ end
31
+
32
+ begin
33
+ result = callback.call(source, *args)
34
+ @channel.send_message_to_server('resolve', result: JavaScript::ValueSerializer.new(result).serialize)
35
+ rescue => err
36
+ @channel.send_message_to_server('reject', error: { error: { message: err.message, name: 'Error' }})
37
+ end
38
+ end
6
39
  end
7
40
  end
@@ -67,9 +67,9 @@ module Playwright
67
67
  end
68
68
 
69
69
  private def on_binding(binding_call)
70
- func = @binding[binding_call.name]
70
+ func = @bindings[binding_call.name]
71
71
  if func
72
- binding_call.call(func)
72
+ binding_call.call_async(func)
73
73
  end
74
74
  end
75
75
 
@@ -301,19 +301,11 @@ module Playwright
301
301
  end
302
302
 
303
303
  def eval_on_selector(selector, pageFunction, arg: nil)
304
- if JavaScript.function?(pageFunction)
305
- JavaScript::Function.new(pageFunction, arg).eval_on_selector(@channel, selector)
306
- else
307
- JavaScript::Expression.new(pageFunction).eval_on_selector(@channel, selector)
308
- end
304
+ JavaScript::Expression.new(pageFunction, arg).eval_on_selector(@channel, selector)
309
305
  end
310
306
 
311
307
  def eval_on_selector_all(selector, pageFunction, arg: nil)
312
- if JavaScript.function?(pageFunction)
313
- JavaScript::Function.new(pageFunction, arg).eval_on_selector_all(@channel, selector)
314
- else
315
- JavaScript::Expression.new(pageFunction).eval_on_selector_all(@channel, selector)
316
- end
308
+ JavaScript::Expression.new(pageFunction, arg).eval_on_selector_all(@channel, selector)
317
309
  end
318
310
 
319
311
  def wait_for_element_state(state, timeout: nil)
@@ -132,19 +132,11 @@ module Playwright
132
132
  end
133
133
 
134
134
  def evaluate(pageFunction, arg: nil)
135
- if JavaScript.function?(pageFunction)
136
- JavaScript::Function.new(pageFunction, arg).evaluate(@channel)
137
- else
138
- JavaScript::Expression.new(pageFunction).evaluate(@channel)
139
- end
135
+ JavaScript::Expression.new(pageFunction, arg).evaluate(@channel)
140
136
  end
141
137
 
142
138
  def evaluate_handle(pageFunction, arg: nil)
143
- if JavaScript.function?(pageFunction)
144
- JavaScript::Function.new(pageFunction, arg).evaluate_handle(@channel)
145
- else
146
- JavaScript::Expression.new(pageFunction).evaluate_handle(@channel)
147
- end
139
+ JavaScript::Expression.new(pageFunction, arg).evaluate_handle(@channel)
148
140
  end
149
141
 
150
142
  def query_selector(selector)
@@ -208,19 +200,11 @@ module Playwright
208
200
  end
209
201
 
210
202
  def eval_on_selector(selector, pageFunction, arg: nil)
211
- if JavaScript.function?(pageFunction)
212
- JavaScript::Function.new(pageFunction, arg).eval_on_selector(@channel, selector)
213
- else
214
- JavaScript::Expression.new(pageFunction).eval_on_selector(@channel, selector)
215
- end
203
+ JavaScript::Expression.new(pageFunction, arg).eval_on_selector(@channel, selector)
216
204
  end
217
205
 
218
206
  def eval_on_selector_all(selector, pageFunction, arg: nil)
219
- if JavaScript.function?(pageFunction)
220
- JavaScript::Function.new(pageFunction, arg).eval_on_selector_all(@channel, selector)
221
- else
222
- JavaScript::Expression.new(pageFunction).eval_on_selector_all(@channel, selector)
223
- end
207
+ JavaScript::Expression.new(pageFunction, arg).eval_on_selector_all(@channel, selector)
224
208
  end
225
209
 
226
210
  def content
@@ -531,14 +515,8 @@ module Playwright
531
515
  raise ArgumentError.new("Unknown polling option: #{polling}")
532
516
  end
533
517
 
534
- function_or_expression =
535
- if JavaScript.function?(pageFunction)
536
- JavaScript::Function.new(pageFunction, arg)
537
- else
538
- JavaScript::Expression.new(pageFunction)
539
- end
540
-
541
- function_or_expression.wait_for_function(@channel, polling: polling, timeout: timeout)
518
+ expression = JavaScript::Expression.new(pageFunction, arg)
519
+ expression.wait_for_function(@channel, polling: polling, timeout: timeout)
542
520
  end
543
521
 
544
522
  def title
@@ -14,19 +14,11 @@ module Playwright
14
14
  end
15
15
 
16
16
  def evaluate(pageFunction, arg: nil)
17
- if JavaScript.function?(pageFunction)
18
- JavaScript::Function.new(pageFunction, arg).evaluate(@channel)
19
- else
20
- JavaScript::Expression.new(pageFunction).evaluate(@channel)
21
- end
17
+ JavaScript::Expression.new(pageFunction, arg).evaluate(@channel)
22
18
  end
23
19
 
24
20
  def evaluate_handle(pageFunction, arg: nil)
25
- if JavaScript.function?(pageFunction)
26
- JavaScript::Function.new(pageFunction, arg).evaluate_handle(@channel)
27
- else
28
- JavaScript::Expression.new(pageFunction).evaluate_handle(@channel)
29
- end
21
+ JavaScript::Expression.new(pageFunction, arg).evaluate_handle(@channel)
30
22
  end
31
23
 
32
24
  def get_properties
@@ -30,6 +30,7 @@ module Playwright
30
30
  @frames << @main_frame
31
31
  @opener = ChannelOwners::Page.from_nullable(@initializer['opener'])
32
32
 
33
+ @channel.on('bindingCall', ->(params) { on_binding(ChannelOwners::BindingCall.from(params['binding'])) })
33
34
  @channel.once('close', ->(_) { on_close })
34
35
  @channel.on('console', ->(params) {
35
36
  console_message = ChannelOwners::ConsoleMessage.from(params['message'])
@@ -100,6 +101,14 @@ module Playwright
100
101
  end
101
102
  end
102
103
 
104
+ private def on_binding(binding_call)
105
+ func = @bindings[binding_call.name]
106
+ if func
107
+ binding_call.call_async(func)
108
+ end
109
+ @browser_context.send(:on_binding, binding_call)
110
+ end
111
+
103
112
  private def on_close
104
113
  @closed = true
105
114
  @browser_context.send(:remove_page, self)
@@ -306,7 +315,7 @@ module Playwright
306
315
  timeout: timeout,
307
316
  waitUntil: waitUntil,
308
317
  }.compact
309
- resp = @channel.send_message_to_server('reoad', params)
318
+ resp = @channel.send_message_to_server('reload', params)
310
319
  ChannelOwners::Response.from_nullable(resp)
311
320
  end
312
321
 
@@ -1,5 +1,4 @@
1
1
  require 'base64'
2
- require 'mime/types'
3
2
 
4
3
  module Playwright
5
4
  class InputFiles
@@ -19,13 +18,11 @@ module Playwright
19
18
  when String
20
19
  {
21
20
  name: File.basename(file),
22
- mimeType: mime_type_for(file),
23
21
  buffer: Base64.strict_encode64(File.read(file)),
24
22
  }
25
23
  when File
26
24
  {
27
25
  name: File.basename(file.path),
28
- mimeType: mime_type_for(file.path),
29
26
  buffer: Base64.strict_encode64(file.read),
30
27
  }
31
28
  else
@@ -33,10 +30,5 @@ module Playwright
33
30
  end
34
31
  end
35
32
  end
36
-
37
- private def mime_type_for(filepath)
38
- mime_types = MIME::Types.type_for(filepath)
39
- mime_types.first.to_s || 'application/octet-stream'
40
- end
41
33
  end
42
34
  end
@@ -1,13 +1,3 @@
1
1
  require_relative './javascript/expression'
2
- require_relative './javascript/function'
3
2
  require_relative './javascript/value_parser'
4
3
  require_relative './javascript/value_serializer'
5
-
6
- module Playwright
7
- module JavaScript
8
- # Detect if str is likely to be a function
9
- module_function def function?(str)
10
- ['async', 'function'].any? { |key| str.strip.start_with?(key) } || str.include?('=>')
11
- end
12
- end
13
- end
@@ -1,16 +1,15 @@
1
1
  module Playwright
2
2
  module JavaScript
3
3
  class Expression
4
- def initialize(expression)
4
+ def initialize(expression, arg)
5
5
  @expression = expression
6
- @serialized_arg = ValueSerializer.new(nil).serialize
6
+ @serialized_arg = ValueSerializer.new(arg).serialize
7
7
  end
8
8
 
9
9
  def evaluate(channel)
10
10
  value = channel.send_message_to_server(
11
11
  'evaluateExpression',
12
12
  expression: @expression,
13
- isFunction: false,
14
13
  arg: @serialized_arg,
15
14
  )
16
15
  ValueParser.new(value).parse
@@ -20,7 +19,6 @@ module Playwright
20
19
  resp = channel.send_message_to_server(
21
20
  'evaluateExpressionHandle',
22
21
  expression: @expression,
23
- isFunction: false,
24
22
  arg: @serialized_arg,
25
23
  )
26
24
  ::Playwright::ChannelOwner.from(resp)
@@ -31,7 +29,6 @@ module Playwright
31
29
  'evalOnSelector',
32
30
  selector: selector,
33
31
  expression: @expression,
34
- isFunction: false,
35
32
  arg: @serialized_arg,
36
33
  )
37
34
  ValueParser.new(value).parse
@@ -42,7 +39,6 @@ module Playwright
42
39
  'evalOnSelectorAll',
43
40
  selector: selector,
44
41
  expression: @expression,
45
- isFunction: false,
46
42
  arg: @serialized_arg,
47
43
  )
48
44
  ValueParser.new(value).parse
@@ -51,7 +47,6 @@ module Playwright
51
47
  def wait_for_function(channel, polling:, timeout:)
52
48
  params = {
53
49
  expression: @expression,
54
- isFunction: false,
55
50
  arg: @serialized_arg,
56
51
  polling: polling,
57
52
  timeout: timeout,
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Playwright
4
- VERSION = '0.6.0'
4
+ VERSION = '0.6.1'
5
5
  COMPATIBLE_PLAYWRIGHT_VERSION = '1.12.0'
6
6
  end
@@ -2,13 +2,13 @@ module Playwright
2
2
  # The Accessibility class provides methods for inspecting Chromium's accessibility tree. The accessibility tree is used by
3
3
  # assistive technology such as [screen readers](https://en.wikipedia.org/wiki/Screen_reader) or
4
4
  # [switches](https://en.wikipedia.org/wiki/Switch_access).
5
- #
5
+ #
6
6
  # Accessibility is a very platform-specific thing. On different platforms, there are different screen readers that might
7
7
  # have wildly different output.
8
- #
8
+ #
9
9
  # Rendering engines of Chromium, Firefox and WebKit have a concept of "accessibility tree", which is then translated into
10
10
  # different platform-specific APIs. Accessibility namespace gives access to this Accessibility Tree.
11
- #
11
+ #
12
12
  # Most of the accessibility tree gets filtered out when converting from internal browser AX Tree to Platform-specific
13
13
  # AX-Tree or by assistive technologies themselves. By default, Playwright tries to approximate this filtering, exposing
14
14
  # only the "interesting" nodes of the tree.
@@ -16,101 +16,19 @@ module Playwright
16
16
 
17
17
  # Captures the current state of the accessibility tree. The returned object represents the root accessible node of the
18
18
  # page.
19
- #
19
+ #
20
20
  # > NOTE: The Chromium accessibility tree contains nodes that go unused on most platforms and by most screen readers.
21
21
  # Playwright will discard them as well for an easier to process tree, unless `interestingOnly` is set to `false`.
22
- #
22
+ #
23
23
  # An example of dumping the entire accessibility tree:
24
- #
25
24
  #
26
- # ```js
27
- # const snapshot = await page.accessibility.snapshot();
28
- # console.log(snapshot);
29
- # ```
30
- #
31
- # ```java
32
- # String snapshot = page.accessibility().snapshot();
33
- # System.out.println(snapshot);
34
- # ```
35
- #
36
- # ```python async
37
- # snapshot = await page.accessibility.snapshot()
38
- # print(snapshot)
39
- # ```
40
- #
41
25
  # ```python sync
42
26
  # snapshot = page.accessibility.snapshot()
43
27
  # print(snapshot)
44
28
  # ```
45
- #
46
- # ```csharp
47
- # var accessibilitySnapshot = await page.Accessibility.SnapshotAsync();
48
- # Console.WriteLine(System.Text.Json.JsonSerializer.Serialize(accessibilitySnapshot));
49
- # ```
50
- #
29
+ #
51
30
  # An example of logging the focused node's name:
52
- #
53
31
  #
54
- # ```js
55
- # const snapshot = await page.accessibility.snapshot();
56
- # const node = findFocusedNode(snapshot);
57
- # console.log(node && node.name);
58
- #
59
- # function findFocusedNode(node) {
60
- # if (node.focused)
61
- # return node;
62
- # for (const child of node.children || []) {
63
- # const foundNode = findFocusedNode(child);
64
- # return foundNode;
65
- # }
66
- # return null;
67
- # }
68
- # ```
69
- #
70
- # ```csharp
71
- # static AccessibilitySnapshotResult findFocusedNode(AccessibilitySnapshotResult root)
72
- # {
73
- # var nodes = new Stack<AccessibilitySnapshotResult>(new[] { root });
74
- # while (nodes.Count > 0)
75
- # {
76
- # var node = nodes.Pop();
77
- # if (node.Focused) return node;
78
- # foreach (var innerNode in node.Children)
79
- # {
80
- # nodes.Push(innerNode);
81
- # }
82
- # }
83
- #
84
- # return null;
85
- # }
86
- #
87
- # var accessibilitySnapshot = await page.Accessibility.SnapshotAsync();
88
- # Console.WriteLine(System.Text.Json.JsonSerializer.Serialize(accessibilitySnapshot));
89
- # var focusedNode = findFocusedNode(accessibilitySnapshot);
90
- # if (focusedNode != null)
91
- # Console.WriteLine(focusedNode.Name);
92
- # ```
93
- #
94
- # ```java
95
- # // FIXME
96
- # String snapshot = page.accessibility().snapshot();
97
- # ```
98
- #
99
- # ```python async
100
- # def find_focused_node(node):
101
- # if (node.get("focused"))
102
- # return node
103
- # for child in (node.get("children") or []):
104
- # found_node = find_focused_node(child)
105
- # return found_node
106
- # return None
107
- #
108
- # snapshot = await page.accessibility.snapshot()
109
- # node = find_focused_node(snapshot)
110
- # if node:
111
- # print(node["name"])
112
- # ```
113
- #
114
32
  # ```python sync
115
33
  # def find_focused_node(node):
116
34
  # if (node.get("focused"))
@@ -119,7 +37,7 @@ module Playwright
119
37
  # found_node = find_focused_node(child)
120
38
  # return found_node
121
39
  # return None
122
- #
40
+ #
123
41
  # snapshot = page.accessibility.snapshot()
124
42
  # node = find_focused_node(snapshot)
125
43
  # if node:
@@ -1,68 +1,11 @@
1
1
  module Playwright
2
2
  # Playwright has **experimental** support for Android automation. You can access android namespace via:
3
- #
4
3
  #
5
- # ```js
6
- # const { _android: android } = require('playwright');
7
- # ```
8
- #
9
4
  # An example of the Android automation script would be:
10
- #
11
5
  #
12
- # ```js
13
- # const { _android: android } = require('playwright');
14
- #
15
- # (async () => {
16
- # // Connect to the device.
17
- # const [device] = await android.devices();
18
- # console.log(`Model: ${device.model()}`);
19
- # console.log(`Serial: ${device.serial()}`);
20
- # // Take screenshot of the whole device.
21
- # await device.screenshot({ path: 'device.png' });
22
- #
23
- # {
24
- # // --------------------- WebView -----------------------
25
- #
26
- # // Launch an application with WebView.
27
- # await device.shell('am force-stop org.chromium.webview_shell');
28
- # await device.shell('am start org.chromium.webview_shell/.WebViewBrowserActivity');
29
- # // Get the WebView.
30
- # const webview = await device.webView({ pkg: 'org.chromium.webview_shell' });
31
- #
32
- # // Fill the input box.
33
- # await device.fill({ res: 'org.chromium.webview_shell:id/url_field' }, 'github.com/microsoft/playwright');
34
- # await device.press({ res: 'org.chromium.webview_shell:id/url_field' }, 'Enter');
35
- #
36
- # // Work with WebView's page as usual.
37
- # const page = await webview.page();
38
- # await page.waitForNavigation({ url: /.*microsoft\/playwright.*/ });
39
- # console.log(await page.title());
40
- # }
41
- #
42
- # {
43
- # // --------------------- Browser -----------------------
44
- #
45
- # // Launch Chrome browser.
46
- # await device.shell('am force-stop com.android.chrome');
47
- # const context = await device.launchBrowser();
48
- #
49
- # // Use BrowserContext as usual.
50
- # const page = await context.newPage();
51
- # await page.goto('https://webkit.org/');
52
- # console.log(await page.evaluate(() => window.location.href));
53
- # await page.screenshot({ path: 'page.png' });
54
- #
55
- # await context.close();
56
- # }
57
- #
58
- # // Close the device.
59
- # await device.close();
60
- # })();
61
- # ```
62
- #
63
6
  # Note that since you don't need Playwright to install web browsers when testing Android, you can omit browser download
64
7
  # via setting the following environment variable when installing Playwright:
65
- #
8
+ #
66
9
  # ```sh js
67
10
  # PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm i -D playwright
68
11
  # ```
@@ -81,20 +24,20 @@ module Playwright
81
24
 
82
25
  # -- inherited from EventEmitter --
83
26
  # @nodoc
84
- def off(event, callback)
85
- event_emitter_proxy.off(event, callback)
27
+ def on(event, callback)
28
+ event_emitter_proxy.on(event, callback)
86
29
  end
87
30
 
88
31
  # -- inherited from EventEmitter --
89
32
  # @nodoc
90
- def once(event, callback)
91
- event_emitter_proxy.once(event, callback)
33
+ def off(event, callback)
34
+ event_emitter_proxy.off(event, callback)
92
35
  end
93
36
 
94
37
  # -- inherited from EventEmitter --
95
38
  # @nodoc
96
- def on(event, callback)
97
- event_emitter_proxy.on(event, callback)
39
+ def once(event, callback)
40
+ event_emitter_proxy.once(event, callback)
98
41
  end
99
42
 
100
43
  private def event_emitter_proxy