rider-server 0.1.0 → 0.1.2
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/.build.yml +3 -3
- data/CHANGELOG.md +23 -1
- data/COPYING +20 -0
- data/README.rdoc +39 -0
- data/Rakefile +5 -0
- data/exe/rider-server +3 -3
- data/lib/rider_server/config.rb +76 -0
- data/lib/rider_server/core_ext/array.rb +3 -1
- data/lib/rider_server/core_ext/class.rb +5 -0
- data/lib/rider_server/core_ext/env.rb +14 -0
- data/lib/rider_server/core_ext/hash.rb +3 -1
- data/lib/rider_server/core_ext/kernel.rb +5 -0
- data/lib/rider_server/core_ext/module.rb +18 -0
- data/lib/rider_server/core_ext/object.rb +7 -1
- data/lib/rider_server/core_ext/string.rb +3 -1
- data/lib/rider_server/core_ext/symbol.rb +3 -1
- data/lib/rider_server/exception_extension.rb +2 -0
- data/lib/rider_server/inspect.rb +115 -43
- data/lib/rider_server/logger.rb +11 -4
- data/lib/rider_server/operation.rb +39 -20
- data/lib/rider_server/{ops → operations}/clone.rb +3 -2
- data/lib/rider_server/{ops → operations}/close.rb +3 -2
- data/lib/rider_server/operations/completions.rb +146 -0
- data/lib/rider_server/operations/lookup.rb +102 -0
- data/lib/rider_server/operations/ls_sessions.rb +51 -0
- data/lib/rider_server/operations/toggle_catch_all_exceptions.rb +24 -0
- data/lib/rider_server/operations.rb +43 -69
- data/lib/rider_server/request.rb +61 -0
- data/lib/rider_server/response.rb +10 -2
- data/lib/rider_server/server.rb +29 -17
- data/lib/rider_server/services/capture_exceptions.rb +18 -2
- data/lib/rider_server/services/rails.rb +1 -1
- data/lib/rider_server/session.rb +77 -34
- data/lib/rider_server/session_operation.rb +17 -0
- data/lib/rider_server/session_operations/eval.rb +61 -0
- data/lib/rider_server/session_operations/inspect.rb +123 -0
- data/lib/rider_server/session_operations/inspect_exception.rb +46 -0
- data/lib/rider_server/session_operations/interrupt.rb +29 -0
- data/lib/rider_server/session_operations/load_path.rb +19 -0
- data/lib/rider_server/session_operations/ls_exceptions.rb +28 -0
- data/lib/rider_server/session_operations/ls_services.rb +18 -0
- data/lib/rider_server/session_operations/service.rb +42 -0
- data/lib/rider_server/session_operations/set_namespace.rb +82 -0
- data/lib/rider_server/session_operations/set_namespace_variable.rb +81 -0
- data/lib/rider_server/session_operations/stdin.rb +19 -0
- data/lib/rider_server/utils.rb +7 -7
- data/lib/rider_server/validate/array.rb +32 -0
- data/lib/rider_server/validate/base.rb +28 -0
- data/lib/rider_server/validate/boolean.rb +47 -0
- data/lib/rider_server/validate/hash.rb +32 -0
- data/lib/rider_server/validate/integer.rb +56 -0
- data/lib/rider_server/validate/predicates.rb +30 -0
- data/lib/rider_server/validate/string.rb +60 -0
- data/lib/rider_server/validate/symbol.rb +90 -0
- data/lib/rider_server/validate.rb +15 -0
- data/lib/rider_server/version.rb +1 -1
- data/lib/rider_server/workspace.rb +1 -1
- data/lib/rider_server.rb +3 -1
- metadata +55 -24
- data/README.md +0 -44
- data/lib/rider_server/ops/completions.rb +0 -100
- data/lib/rider_server/ops/eval.rb +0 -62
- data/lib/rider_server/ops/inspect.rb +0 -121
- data/lib/rider_server/ops/inspect_exception.rb +0 -47
- data/lib/rider_server/ops/interrupt.rb +0 -30
- data/lib/rider_server/ops/load_path.rb +0 -20
- data/lib/rider_server/ops/lookup.rb +0 -83
- data/lib/rider_server/ops/ls_exceptions.rb +0 -29
- data/lib/rider_server/ops/ls_services.rb +0 -19
- data/lib/rider_server/ops/ls_sessions.rb +0 -52
- data/lib/rider_server/ops/service.rb +0 -43
- data/lib/rider_server/ops/set_namespace.rb +0 -79
- data/lib/rider_server/ops/set_namespace_variable.rb +0 -80
- data/lib/rider_server/ops/stdin.rb +0 -20
- data/lib/rider_server/ops/toggle_catch_all_exceptions.rb +0 -27
@@ -1,19 +0,0 @@
|
|
1
|
-
require "rider_server/operation"
|
2
|
-
require "rider_server/response"
|
3
|
-
|
4
|
-
module RiderServer
|
5
|
-
module Ops
|
6
|
-
class LsServices < Operation
|
7
|
-
documentation "List all services."
|
8
|
-
|
9
|
-
argument :id, :string, "The request id", required: true
|
10
|
-
|
11
|
-
def handle(session, operation)
|
12
|
-
response = Response.new(operation)
|
13
|
-
response.set("services", session.list_services)
|
14
|
-
response.status("done")
|
15
|
-
response
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,52 +0,0 @@
|
|
1
|
-
require "rider_server/operation"
|
2
|
-
require "rider_server/response"
|
3
|
-
|
4
|
-
module RiderServer
|
5
|
-
module Ops
|
6
|
-
class LsSessions < Operation
|
7
|
-
documentation "List all sessions"
|
8
|
-
|
9
|
-
argument :id, :string, "The request id", required: true
|
10
|
-
|
11
|
-
def handle(session, operation)
|
12
|
-
response = Response.new(operation)
|
13
|
-
response.set("sessions", controller.sessions.map { |k, v| k })
|
14
|
-
response.set("rider/session-headings",
|
15
|
-
[
|
16
|
-
{
|
17
|
-
"id" => "id",
|
18
|
-
"name" => "ID",
|
19
|
-
"length" => 36
|
20
|
-
},
|
21
|
-
{
|
22
|
-
"id" => "namespace_name",
|
23
|
-
"name" => "Namespace",
|
24
|
-
"length" => 25
|
25
|
-
},
|
26
|
-
{
|
27
|
-
"id" => "history_items",
|
28
|
-
"name" => "History Items",
|
29
|
-
"length" => 5
|
30
|
-
},
|
31
|
-
{
|
32
|
-
"id" => "exceptions",
|
33
|
-
"name" => "Exceptions",
|
34
|
-
"length" => 5
|
35
|
-
}
|
36
|
-
])
|
37
|
-
response.set("rider/sessions", controller.sessions.map { |k, v| session_summary(v) })
|
38
|
-
response.status("done")
|
39
|
-
response
|
40
|
-
end
|
41
|
-
|
42
|
-
def session_summary(session)
|
43
|
-
{
|
44
|
-
"id" => session.id,
|
45
|
-
"namespace_name" => session.workspace.namespace_name,
|
46
|
-
"history_items" => session.history.length.to_s,
|
47
|
-
"exceptions" => session.exceptions.length.to_s
|
48
|
-
}
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
require "rider_server/operation"
|
2
|
-
require "rider_server/response"
|
3
|
-
|
4
|
-
module RiderServer
|
5
|
-
module Ops
|
6
|
-
class Service < Operation
|
7
|
-
documentation "Control a Ruby service integration"
|
8
|
-
|
9
|
-
argument :id, :string, "The request id", required: true
|
10
|
-
argument :service, :string, "The name of the Ruby service to control", required: true
|
11
|
-
argument :state, :string, "The desired state of the service", required: true
|
12
|
-
|
13
|
-
def handle(session, operation)
|
14
|
-
response = Response.new(operation)
|
15
|
-
|
16
|
-
service = operation["service"]
|
17
|
-
state = operation["state"]
|
18
|
-
|
19
|
-
current_state = session.service_state(service)
|
20
|
-
|
21
|
-
case state
|
22
|
-
when "start"
|
23
|
-
raise "Service already running" if current_state == "running"
|
24
|
-
session.start_service(service, response.id)
|
25
|
-
response.set("rider/stream", "true")
|
26
|
-
when "stop"
|
27
|
-
raise "Can't stop service #{service}. It's not running." if current_state == "stopped"
|
28
|
-
session.stop_service(service)
|
29
|
-
response.status("done")
|
30
|
-
else
|
31
|
-
# TODO: throwing this exception will caues a "done" response
|
32
|
-
# to be sent, which will implicitly close the stream. It
|
33
|
-
# might make sense to handle this more gracefully here.
|
34
|
-
raise "Unknown state #{state}"
|
35
|
-
end
|
36
|
-
|
37
|
-
response.set("service", service)
|
38
|
-
response.set("state", session.service_state(service).to_s)
|
39
|
-
response
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,79 +0,0 @@
|
|
1
|
-
require "rider_server/operation"
|
2
|
-
require "rider_server/response"
|
3
|
-
|
4
|
-
module RiderServer
|
5
|
-
module Ops
|
6
|
-
class SetNamespace < Operation
|
7
|
-
documentation "Set the namespace to the given location."
|
8
|
-
|
9
|
-
argument :id, :string, "The request id", required: true
|
10
|
-
argument :location, :array, "The location to set the namespace to", required: true
|
11
|
-
|
12
|
-
def handle(session, operation)
|
13
|
-
response = Response.new(operation)
|
14
|
-
location = operation["location"]
|
15
|
-
|
16
|
-
value = traverse_location(location, nil, session)
|
17
|
-
session.workspace.set_namespace(value)
|
18
|
-
response.set("ns", session.workspace.namespace_name)
|
19
|
-
response.set("location", location)
|
20
|
-
response.status("done")
|
21
|
-
response
|
22
|
-
end
|
23
|
-
|
24
|
-
def traverse_location(location, ctx, session)
|
25
|
-
loc = location.first
|
26
|
-
locs = location.drop(1)
|
27
|
-
|
28
|
-
if locs.empty?
|
29
|
-
lookup_object(loc, ctx, session)
|
30
|
-
else
|
31
|
-
traverse_location(locs, lookup_object(loc, ctx, session), session)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def lookup_object(loc, ctx, session)
|
36
|
-
lookup, identifier = loc.split(":", 2)
|
37
|
-
|
38
|
-
case lookup
|
39
|
-
when "rider_main"
|
40
|
-
"main"
|
41
|
-
when "rider_history"
|
42
|
-
rider_history(identifier, nil, session)
|
43
|
-
when "rider_exception"
|
44
|
-
rider_exception(identifier, nil, session)
|
45
|
-
when "rider_stackframe"
|
46
|
-
ctx.__rider_bindings_stack[identifier.to_i]
|
47
|
-
when "rider_stackframe_variable"
|
48
|
-
frame_id, local_var = identifier.split(":", 2)
|
49
|
-
ctx.__rider_bindings_stack[frame_id.to_i].local_variable_get(local_var)
|
50
|
-
when "rider_hash_key"
|
51
|
-
hash = identifier.to_i
|
52
|
-
ctx.keys.find { |key| key.hash == hash }
|
53
|
-
when "rider_hash_value"
|
54
|
-
hash = identifier.to_i
|
55
|
-
key = ctx.keys.find { |key| key.hash == hash }
|
56
|
-
ctx.fetch(key)
|
57
|
-
when "toplevel_const_get"
|
58
|
-
Object.const_get(identifier)
|
59
|
-
when "instance_variable_get"
|
60
|
-
ctx.instance_variable_get(identifier)
|
61
|
-
when "const_get"
|
62
|
-
ctx.const_get(identifier)
|
63
|
-
when "ancestor_find"
|
64
|
-
ctx.class.ancestors.find { |item| item.to_s == identifier }
|
65
|
-
else
|
66
|
-
raise "Unknown inspect function: #{lookup}"
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
def rider_history(value, ctx, session)
|
71
|
-
session.get_result(value)
|
72
|
-
end
|
73
|
-
|
74
|
-
def rider_exception(id, ctx, session)
|
75
|
-
session.get_exception(id)["exception"]
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
@@ -1,80 +0,0 @@
|
|
1
|
-
require "rider_server/operation"
|
2
|
-
require "rider_server/response"
|
3
|
-
|
4
|
-
module RiderServer
|
5
|
-
module Ops
|
6
|
-
class SetNamespaceVariable < Operation
|
7
|
-
documentation "Set a variable in the current REPL binding."
|
8
|
-
|
9
|
-
argument :id, :string, "The request id", required: true
|
10
|
-
argument :name, :string, "The name of the local variable to set", required: true
|
11
|
-
argument :location, :array, "The location to set the namespace to", required: true
|
12
|
-
|
13
|
-
def handle(session, operation)
|
14
|
-
response = Response.new(operation)
|
15
|
-
name = operation["name"]
|
16
|
-
raise "Name must be a valid Ruby identifier" unless name =~ /\A[a-zA-Z_]\w*\z/
|
17
|
-
location = operation["location"]
|
18
|
-
|
19
|
-
value = traverse_location(location, nil, session)
|
20
|
-
session.workspace.binding_local_variable_set(name, value)
|
21
|
-
response.status("done")
|
22
|
-
response
|
23
|
-
end
|
24
|
-
|
25
|
-
def traverse_location(location, ctx, session)
|
26
|
-
loc = location.first
|
27
|
-
locs = location.drop(1)
|
28
|
-
|
29
|
-
if locs.empty?
|
30
|
-
lookup_object(loc, ctx, session)
|
31
|
-
else
|
32
|
-
traverse_location(locs, lookup_object(loc, ctx, session), session)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def lookup_object(loc, ctx, session)
|
37
|
-
lookup, identifier = loc.split(":", 2)
|
38
|
-
|
39
|
-
case lookup
|
40
|
-
when "rider_main"
|
41
|
-
"main"
|
42
|
-
when "rider_history"
|
43
|
-
rider_history(identifier, nil, session)
|
44
|
-
when "rider_exception"
|
45
|
-
rider_exception(identifier, nil, session)
|
46
|
-
when "rider_stackframe"
|
47
|
-
ctx.__rider_bindings_stack[identifier.to_i]
|
48
|
-
when "rider_stackframe_variable"
|
49
|
-
frame_id, local_var = identifier.split(":", 2)
|
50
|
-
ctx.__rider_bindings_stack[frame_id.to_i].local_variable_get(local_var)
|
51
|
-
when "rider_hash_key"
|
52
|
-
hash = identifier.to_i
|
53
|
-
ctx.keys.find { |key| key.hash == hash }
|
54
|
-
when "rider_hash_value"
|
55
|
-
hash = identifier.to_i
|
56
|
-
key = ctx.keys.find { |key| key.hash == hash }
|
57
|
-
ctx.fetch(key)
|
58
|
-
when "toplevel_const_get"
|
59
|
-
Object.const_get(identifier)
|
60
|
-
when "instance_variable_get"
|
61
|
-
ctx.instance_variable_get(identifier)
|
62
|
-
when "const_get"
|
63
|
-
ctx.const_get(identifier)
|
64
|
-
when "ancestor_find"
|
65
|
-
ctx.class.ancestors.find { |item| item.to_s == identifier }
|
66
|
-
else
|
67
|
-
raise "Unknown inspect function: #{lookup}"
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
def rider_history(value, ctx, session)
|
72
|
-
session.get_result(value)
|
73
|
-
end
|
74
|
-
|
75
|
-
def rider_exception(id, ctx, session)
|
76
|
-
session.get_exception(id)["exception"]
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require "rider_server/operation"
|
2
|
-
require "rider_server/response"
|
3
|
-
|
4
|
-
module RiderServer
|
5
|
-
module Ops
|
6
|
-
class Stdin < Operation
|
7
|
-
documentation "List all exceptions that have occurred in the session."
|
8
|
-
|
9
|
-
argument :id, :string, "The request id", required: true
|
10
|
-
argument :stdin, :string, "The input to write to the stdin of the process", required: true
|
11
|
-
|
12
|
-
def handle(session, operation)
|
13
|
-
controller.stdin.write(operation["stdin"])
|
14
|
-
response = Response.new(operation)
|
15
|
-
response.status("done")
|
16
|
-
response
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require "rider_server/operation"
|
2
|
-
require "rider_server/response"
|
3
|
-
|
4
|
-
module RiderServer
|
5
|
-
module Ops
|
6
|
-
class ToggleCatchAllExceptions < Operation
|
7
|
-
documentation "Enable catching all exceptions. Not just the ones with a session."
|
8
|
-
|
9
|
-
argument :id, :string, "The request id", required: true
|
10
|
-
|
11
|
-
def handle(session, operation)
|
12
|
-
if @controller.sessions_catching_exceptions.member?(session.id)
|
13
|
-
@controller.sessions_catching_exceptions.delete(session.id)
|
14
|
-
value = "disabled"
|
15
|
-
else
|
16
|
-
@controller.sessions_catching_exceptions.push(session.id)
|
17
|
-
value = "enabled"
|
18
|
-
end
|
19
|
-
|
20
|
-
response = Response.new(operation)
|
21
|
-
response.status("done")
|
22
|
-
response.set("value", value)
|
23
|
-
response
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|