ladybug 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b73479c1e9523e9a0f5798daed1707ed24baf74c
4
- data.tar.gz: d046e7c87d246a2e3a156ad1bf71c23fc256789c
3
+ metadata.gz: e754a38c616bafe8c321316d63c69761918f2a78
4
+ data.tar.gz: 504e0c72215d472c93a17d3d5c780ef16d1bc7d4
5
5
  SHA512:
6
- metadata.gz: c79d7443d7cebedbb3174fe5a340aa21d2c23d201df2fab87aa6294326c839b3371e187f46eb7d351f4c7c8ad8bf103197882ded9dfb588284f1ae3422eca4ed
7
- data.tar.gz: 58f696d4d5dc454c68215c0a3780f9ea2c45d070db1e168f915f2be26bf7ec5e567a02c110439291962f8db88f4e481a4d70978e669f0d7f01c0129c8f8893b4
6
+ metadata.gz: 1c4a8090f910deb746e64a1e292f2dd95f857932e714ed0525a6db00672d9d1890cfc4246911c6eec2b0472969bd17e24cc76eb9c3d43e207e1f1973ca3a0f40
7
+ data.tar.gz: 7cec420eae32d21ed0cc51713fe49f8b414205615806beb41ef7750034317b1f84f9bbdcc2fb1b41da08ca7a7cb3131a8d1e4dec5bd4a94ed605956b668a781e
data/README.md CHANGED
@@ -6,11 +6,11 @@ Chrome Devtools as a user interface.
6
6
  It aims to provide a rich backend debugging experience in a UI that many
7
7
  web developers are already familiar with for debugging frontend Javascript.
8
8
 
9
- **This project is currently in an early experimental phase.** Expect many limitations and bugs. If you try it out, please file
9
+ **This project is currently in an experimental phase.** Expect many limitations and bugs. If you try it out, please file
10
10
  Github issues or [email me](mailto:gklitt@gmail.com) to help make this a
11
11
  more useful tool.
12
12
 
13
- ![screenshot](screenshots/demo.png)
13
+ ![screenshot](screenshots/ladybug-demo.gif)
14
14
 
15
15
  ## Get started
16
16
 
@@ -53,7 +53,7 @@ execute code on your server without authenticating.
53
53
 
54
54
  ## Development status
55
55
 
56
- * So far, ladybug has only been tested with simple Rails applications running on
56
+ * So far, ladybug has been tested with simple Rails applications running on
57
57
  Rails 5 with the puma web server. Eventually it aims to support more Rack
58
58
  applications and web servers (and perhaps even non-Rack applications).
59
59
  * inspecting primtive objects like strings and numbers works okay; support for more complex objects is in development.
@@ -82,6 +82,8 @@ module Ladybug
82
82
  end
83
83
 
84
84
  def evaluate(expression)
85
+ raise InvalidExpressionError if !parseable?(expression)
86
+
85
87
  @to_main_thread.push({
86
88
  command: 'eval',
87
89
  arguments: {
@@ -144,6 +146,17 @@ module Ladybug
144
146
 
145
147
  private
146
148
 
149
+ # Try parsing an expression to see if we can safely eval it
150
+ def parseable?(expression)
151
+ begin
152
+ Parser::CurrentRuby.parse(expression)
153
+ rescue Parser::SyntaxError
154
+ return false
155
+ end
156
+
157
+ return true
158
+ end
159
+
147
160
  # remove ladybug code from a callstack and prepare it for comparison
148
161
  # this is a hack implemenetation for now, can be made better
149
162
  def clean(callstack)
@@ -317,5 +330,6 @@ module Ladybug
317
330
  memoize :deep_child_node_types
318
331
 
319
332
  class InvalidBreakpointLocationError < StandardError; end
333
+ class InvalidExpressionError < StandardError; end
320
334
  end
321
335
  end
@@ -39,6 +39,13 @@ module Ladybug
39
39
 
40
40
  private
41
41
 
42
+ # Avoid eval'ing weird expressions that Chrome sends us,
43
+ # like Javascript functions and other things.
44
+ # This is an initial hack implementation, could be better.
45
+ def sanitize_expression(expression)
46
+ expression
47
+ end
48
+
42
49
  def create_websocket(env)
43
50
  ws = Faye::WebSocket.new(env)
44
51
 
@@ -155,7 +162,17 @@ module Ladybug
155
162
  @debugger.step_out
156
163
  result = {}
157
164
  elsif data["method"] == "Debugger.evaluateOnCallFrame"
158
- evaluated = @debugger.evaluate(data["params"]["expression"])
165
+ expression = data["params"]["expression"]
166
+
167
+ begin
168
+ evaluated = @debugger.evaluate(expression)
169
+ rescue Debugger::InvalidExpressionError
170
+ # A better thing to do would be to throw the syntax error
171
+ # back to the user, but for now we just return nil if
172
+ # given invalid input
173
+ evaluated = nil
174
+ end
175
+
159
176
  result = {
160
177
  result: @object_manager.serialize(evaluated)
161
178
  }
@@ -197,6 +214,26 @@ module Ladybug
197
214
 
198
215
  ws.send(message)
199
216
  end
217
+
218
+ # Create a runtime context so Chrome can
219
+ # accept user input in the console
220
+
221
+ message = {
222
+ method: "Runtime.executionContextCreated",
223
+ params: {
224
+ context: {
225
+ id: 12, # random number for now
226
+ name: "",
227
+ origin: "http://localhost:3000" ,
228
+ auxData: {
229
+ isDefault: true,
230
+ frameId: SecureRandom.uuid
231
+ }
232
+ }
233
+ }
234
+ }.to_json
235
+
236
+ ws.send(message)
200
237
  end
201
238
  rescue => e
202
239
  puts e.message
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ladybug
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Geoffrey Litt
@@ -16,42 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.10.7
19
+ version: '0.10'
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: 0.10.7
26
+ version: '0.10'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: parser
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 2.4.0.2
33
+ version: '2.4'
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: 2.4.0.2
40
+ version: '2.4'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: memoist
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.14.0
47
+ version: '0.14'
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: 0.14.0
54
+ version: '0.14'
55
55
  description: Debug Ruby code using Chrome Devtools
56
56
  email: gklitt@gmail.com
57
57
  executables: []