rsense 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +22 -0
- data/Gemfile +14 -0
- data/Guardfile +5 -0
- data/LICENSE.txt +1 -0
- data/README.md +100 -0
- data/Rakefile +9 -0
- data/bin/rsense +21 -0
- data/lib/rsense/client/daemon.rb +67 -0
- data/lib/rsense/client/runner.rb +114 -0
- data/lib/rsense/client.rb +31 -0
- data/lib/rsense/version.rb +3 -0
- data/lib/rsense.rb +5 -0
- data/rsense.gemspec +36 -0
- data/spec/fixtures/find_def_sample.json +10 -0
- data/spec/fixtures/sample.json +10 -0
- data/spec/rsense/client/daemon_spec.rb +99 -0
- data/spec/spec_helper.rb +5 -0
- metadata +265 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a946a54354e0bc2c91c3893b0641fed936d20ab4
|
4
|
+
data.tar.gz: b77fa6452ec1b13e8883177aff38e9ff439df96a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: bcd973ec1d5d75f7e9aa449dd66f6d8f0ec9e7ee06e93384325b7b25ae3062dea5d8378ebdd1f6baaed4b7d4961abf547202caf849aab8c0ceec83e8da433e76
|
7
|
+
data.tar.gz: 0ae020d232d88b47ce5973612b1ea119f1439c304aaf29fd0048b9a8b5a902a1405a2e22cc89cc97e7bfd26ad10a7b6c55a8585b4edcacb96405e36bfc50be42
|
data/.gitignore
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
.yardoc
|
6
|
+
Gemfile.lock
|
7
|
+
InstalledFiles
|
8
|
+
_yardoc
|
9
|
+
coverage
|
10
|
+
doc/
|
11
|
+
lib/bundler/man
|
12
|
+
pkg
|
13
|
+
rdoc
|
14
|
+
spec/reports
|
15
|
+
test/tmp
|
16
|
+
test/version_tmp
|
17
|
+
tmp
|
18
|
+
*.bundle
|
19
|
+
*.so
|
20
|
+
*.o
|
21
|
+
*.a
|
22
|
+
mkmf.log
|
data/Gemfile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
# Specify your gem's dependencies in rsense.gemspec
|
4
|
+
gemspec
|
5
|
+
|
6
|
+
gem 'rsense-server', :github => 'rsense/rsense-server', :branch => 'master'
|
7
|
+
|
8
|
+
group :linux do
|
9
|
+
gem 'libnotify'
|
10
|
+
end
|
11
|
+
|
12
|
+
group :darwin do
|
13
|
+
gem 'terminal-notifier-guard'
|
14
|
+
end
|
data/Guardfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
RSense is distributed under the term of GPLv3+(http://gplv3.fsf.org/).
|
data/README.md
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
![rsense](https://cloud.githubusercontent.com/assets/1395968/2978144/51565ee2-dbb5-11e3-9b94-e97a37739d03.png)
|
2
|
+
|
3
|
+
# Rsense Can See All
|
4
|
+
|
5
|
+
[![Gitter chat](https://badges.gitter.im/rsense/rsense.png)](https://gitter.im/rsense/rsense)
|
6
|
+
|
7
|
+
RSense is a tool for doing static analysis of Ruby source code. Rsense is used in conjunction with an editor plugin.
|
8
|
+
|
9
|
+
RSense is currently under heavy development and ready for testing. Currently we need to improve the homepage and develop plugins for code_completion. In the near future we'll also be ready to implement some of the other basic features like `find-definition`. After that, there's plenty to do in the long term. See the waffle link below to find out where you can pitch in. It would be awesome if you helped get things done.
|
10
|
+
|
11
|
+
[![Stories in Ready](https://badge.waffle.io/rsense/rsense.png?label=ready&title=Ready)](https://waffle.io/rsense/rsense)
|
12
|
+
|
13
|
+
|
14
|
+
## Installation
|
15
|
+
|
16
|
+
Add this line to your application's Gemfile:
|
17
|
+
|
18
|
+
gem 'rsense'
|
19
|
+
|
20
|
+
And then execute:
|
21
|
+
|
22
|
+
$ bundle
|
23
|
+
|
24
|
+
Or install it yourself as:
|
25
|
+
|
26
|
+
$ gem install rsense
|
27
|
+
|
28
|
+
## Usage
|
29
|
+
|
30
|
+
Install one of these plugins:
|
31
|
+
|
32
|
+
## Plugin Authors
|
33
|
+
|
34
|
+
Rsense plugins are easy to implement. First your plugin will need to ensure the Rsense server has been started. It can do this by shelling out to the command line with `rsense start`. The server can optionally take a port number like this: `rsense server --port 12345`. The default port is `47367`. It also takes a project path, in case the user has a `.rsense` config file there. For now, this config file is not very useful, but it may become so in the future.
|
35
|
+
|
36
|
+
The rsense server will be running at `http://localhost:47367` (or an alternate port if you specify one). It communicates via json. You need to send it json like the following example:
|
37
|
+
|
38
|
+
```json
|
39
|
+
{
|
40
|
+
"command": "code_completion",
|
41
|
+
"project": "/Users/home/test_gem",
|
42
|
+
"file": "/Users/home/test_gem/lib/sample.rb",
|
43
|
+
"code": "require \"sample/version\"\n\nmodule Sample\n attr_accessor :simple\n\n def initialize\n @simple = \"simple\"\n end\n\n def another\n \"another\"\n end\nend\n\nsample = Sample.new\nsample\n",
|
44
|
+
"location": {
|
45
|
+
"row": 16,
|
46
|
+
"column": 7
|
47
|
+
}
|
48
|
+
}
|
49
|
+
```
|
50
|
+
|
51
|
+
For now, `code_completion` is the only command available, but this will change in the future. Project is the root dir of the user's project. This is needed for finding information about project dependencies. Code is the text from the file where a completion is being triggered. Location should be obvious.
|
52
|
+
|
53
|
+
Rsense will return json that looks like the below:
|
54
|
+
|
55
|
+
```json
|
56
|
+
{"completions":
|
57
|
+
[
|
58
|
+
{
|
59
|
+
"taint":
|
60
|
+
{
|
61
|
+
"qualified_name":"Object#taint",
|
62
|
+
"base_name":"Object",
|
63
|
+
"kind":"METHOD"
|
64
|
+
}
|
65
|
+
},
|
66
|
+
{
|
67
|
+
"methods":
|
68
|
+
{
|
69
|
+
"qualified_name":"Object#methods",
|
70
|
+
"base_name":"Object",
|
71
|
+
"kind":"METHOD"
|
72
|
+
}
|
73
|
+
}
|
74
|
+
]
|
75
|
+
}
|
76
|
+
|
77
|
+
```
|
78
|
+
|
79
|
+
## Contributing
|
80
|
+
|
81
|
+
Contributions can only be accepted if they include tests.
|
82
|
+
|
83
|
+
1. Fork it ( https://github.com/[my-github-username]/rsense/fork )
|
84
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
85
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
86
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
87
|
+
5. Create a new Pull Request
|
88
|
+
|
89
|
+
## License
|
90
|
+
|
91
|
+
RSense is distributed under the term of
|
92
|
+
[GPLv3+](http://gplv3.fsf.org/).
|
93
|
+
|
94
|
+
## Credits
|
95
|
+
|
96
|
+
Rsense was originally designed and implemented by [Matsuyama Tomohiro(@m2ym)](https://github.com/m2ym/), and his hard work is still at the core of rsense today. All of the algorithms for type-detection were implemented by him, with inspiration from multiple places. You can read about his original version at [Rsense: A Ruby Development tools for Emacs, Vim and Others](http://cx4a.org/software/rsense/)
|
97
|
+
|
98
|
+
In 2013, a major undertaking by @edubkendo to bring it current and improve its usefullness to rubyists was sponsored by the @jruby organization as a Google Summer of Code project.
|
99
|
+
|
100
|
+
Special thanks belongs to [Tom Enebo (@enebo)](https://github.com/enebo) who provided excellent mentorship, code, architectural suggestions and more throughout the course of the update.
|
data/Rakefile
ADDED
data/bin/rsense
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rsense/client/daemon'
|
4
|
+
require "jruby-jars"
|
5
|
+
require "pathname"
|
6
|
+
|
7
|
+
daemon = Rsense::Client::Daemon.new(ARGV[1..-1])
|
8
|
+
|
9
|
+
if ARGV[0] == 'start'
|
10
|
+
daemon.start
|
11
|
+
exit!
|
12
|
+
elsif ARGV[0] == 'stop'
|
13
|
+
daemon.stop
|
14
|
+
elsif ARGV[0] == 'restart'
|
15
|
+
daemon.stop
|
16
|
+
daemon.start
|
17
|
+
exit!
|
18
|
+
else
|
19
|
+
STDERR.puts "Usage: rsense <start|stop|restart>"
|
20
|
+
exit!
|
21
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require "forwardable"
|
2
|
+
require "jruby-jars"
|
3
|
+
require "filetree"
|
4
|
+
require "rsense/server/path_info"
|
5
|
+
require_relative "./runner"
|
6
|
+
|
7
|
+
module Rsense
|
8
|
+
module Client
|
9
|
+
class Daemon
|
10
|
+
extend Forwardable
|
11
|
+
attr_accessor :classpath, :external_args, :argslist, :rsense_home, :rsense_lib, :rsense_bin, :runner
|
12
|
+
|
13
|
+
def_delegators :@runner, :start, :stop, :restart
|
14
|
+
|
15
|
+
def initialize(args=[])
|
16
|
+
@external_args = args
|
17
|
+
@rsense_home = rsense_home
|
18
|
+
@rsense_lib = rsense_lib
|
19
|
+
@rsense_bin = rsense_bin
|
20
|
+
@argslist = build_argslist()
|
21
|
+
@runner = Rsense::Client::Runner.new(@argslist)
|
22
|
+
set_gem_path_env(gem_path)
|
23
|
+
end
|
24
|
+
|
25
|
+
def build_argslist
|
26
|
+
java_args + jruby_args(@external_args)
|
27
|
+
end
|
28
|
+
|
29
|
+
def classpath
|
30
|
+
@classpath ||= [
|
31
|
+
JRubyJars.core_jar_path,
|
32
|
+
JRubyJars.stdlib_jar_path
|
33
|
+
].join(File::PATH_SEPARATOR)
|
34
|
+
end
|
35
|
+
|
36
|
+
def rsense_home
|
37
|
+
Rsense::Server::PathInfo::RSENSE_SERVER_HOME
|
38
|
+
end
|
39
|
+
|
40
|
+
def rsense_lib
|
41
|
+
@rsense_home.join("lib").to_s
|
42
|
+
end
|
43
|
+
|
44
|
+
def rsense_bin
|
45
|
+
Rsense::Server::PathInfo.bin_path.to_s
|
46
|
+
end
|
47
|
+
|
48
|
+
def gem_path
|
49
|
+
Gem.path.join(File::PATH_SEPARATOR)
|
50
|
+
end
|
51
|
+
|
52
|
+
def set_gem_path_env(gp)
|
53
|
+
ENV["GEM_PATH"] = gp
|
54
|
+
end
|
55
|
+
|
56
|
+
def java_args
|
57
|
+
["env", "java", "-cp", classpath, "org.jruby.Main"]
|
58
|
+
end
|
59
|
+
|
60
|
+
def jruby_args(cli_args=[])
|
61
|
+
cli_args ||= [""]
|
62
|
+
["-I#{@rsense_lib}", @rsense_bin] + cli_args
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'spoon'
|
3
|
+
|
4
|
+
module Rsense
|
5
|
+
module Client
|
6
|
+
class Runner
|
7
|
+
attr_accessor :args
|
8
|
+
|
9
|
+
APPNAME = 'rsense'
|
10
|
+
WORK_PATH = Dir.pwd
|
11
|
+
PID_PATH = '/tmp/exec.pid'
|
12
|
+
OUT_PATH = '/tmp/rsense.log'
|
13
|
+
EXEC = "/usr/bin/env"
|
14
|
+
|
15
|
+
def initialize(args)
|
16
|
+
@args = args
|
17
|
+
end
|
18
|
+
|
19
|
+
def create_pid(pid)
|
20
|
+
begin
|
21
|
+
open(PID_PATH, 'w') do |f|
|
22
|
+
f.puts pid
|
23
|
+
end
|
24
|
+
rescue => e
|
25
|
+
STDERR.puts "Error: Unable to open #{PID_PATH} for writing:\n\t" +
|
26
|
+
"(#{e.class}) #{e.message}"
|
27
|
+
exit!
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def get_pid
|
32
|
+
pid = false
|
33
|
+
begin
|
34
|
+
open(PID_PATH, 'r') do |f|
|
35
|
+
pid = f.readline
|
36
|
+
pid = pid.to_s.gsub(/[^0-9]/,'')
|
37
|
+
end
|
38
|
+
rescue => e
|
39
|
+
STDERR.puts "Error: Unable to open #{PID_PATH} for reading:\n\t" +
|
40
|
+
"(#{e.class}) #{e.message}"
|
41
|
+
exit
|
42
|
+
end
|
43
|
+
|
44
|
+
pid.to_i
|
45
|
+
end
|
46
|
+
|
47
|
+
def remove_pidfile
|
48
|
+
begin
|
49
|
+
File.unlink(PID_PATH)
|
50
|
+
rescue => e
|
51
|
+
STDERR.puts "ERROR: Unable to unlink #{path}:\n\t" +
|
52
|
+
"(#{e.class}) #{e.message}"
|
53
|
+
exit
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def process_exists?
|
58
|
+
begin
|
59
|
+
pid = get_pid
|
60
|
+
return false unless pid
|
61
|
+
Process.kill(0, pid)
|
62
|
+
true
|
63
|
+
rescue Errno::ESRCH, TypeError
|
64
|
+
STDERR.puts "PID #{pid} is NOT running or is zombied!";
|
65
|
+
false
|
66
|
+
rescue Errno::EPERM
|
67
|
+
STDERR.puts "No permission to query #{pid}!";
|
68
|
+
rescue => e
|
69
|
+
STDERR.puts "(#{e.class}) #{e.message}:\n\t" +
|
70
|
+
"Unable to determine status for #{pid}."
|
71
|
+
false
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def stop
|
76
|
+
begin
|
77
|
+
pid = get_pid
|
78
|
+
STDERR.puts "pid : #{pid}"
|
79
|
+
while true do
|
80
|
+
Process.kill("TERM", pid)
|
81
|
+
Process.wait(pid)
|
82
|
+
sleep(0.1)
|
83
|
+
end
|
84
|
+
puts "here"
|
85
|
+
rescue Errno::ESRCH, Errno::ECHILD # no more process to kill
|
86
|
+
remove_pidfile
|
87
|
+
STDOUT.puts 'Stopped the process'
|
88
|
+
rescue => e
|
89
|
+
STDERR.puts "unable to terminate process: (#{e.class}) #{e.message}"
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def restart
|
94
|
+
if process_exists?
|
95
|
+
STDERR.puts "The process #{EXEC} already running. Restarting the process"
|
96
|
+
stop
|
97
|
+
end
|
98
|
+
start
|
99
|
+
end
|
100
|
+
|
101
|
+
def start
|
102
|
+
Dir::chdir(WORK_PATH)
|
103
|
+
file_actions = Spoon::FileActions.new
|
104
|
+
file_actions.close(1)
|
105
|
+
file_actions.open(1, OUT_PATH, File::WRONLY | File::TRUNC | File::CREAT, 0600)
|
106
|
+
file_actions.close(2)
|
107
|
+
file_actions.open(2, OUT_PATH, File::WRONLY | File::TRUNC | File::CREAT, 0600)
|
108
|
+
spawn_attr = Spoon::SpawnAttributes.new
|
109
|
+
pid = Spoon.posix_spawn EXEC, file_actions, spawn_attr, @args
|
110
|
+
create_pid(pid)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require_relative "client/daemon"
|
2
|
+
|
3
|
+
module Rsense
|
4
|
+
module Client
|
5
|
+
class Client
|
6
|
+
attr_accessor :config
|
7
|
+
|
8
|
+
Config = Struct.new(
|
9
|
+
:gem_home,
|
10
|
+
:gem_path,
|
11
|
+
:load_path
|
12
|
+
)
|
13
|
+
|
14
|
+
def gather_info
|
15
|
+
@config = Config.new(gem_home, gem_path, $:.join(File::PATH_SEPARATOR))
|
16
|
+
end
|
17
|
+
|
18
|
+
def gem_home
|
19
|
+
ENV["GEM_HOME"]
|
20
|
+
end
|
21
|
+
|
22
|
+
def gem_path
|
23
|
+
gem_pth = []
|
24
|
+
gem_pth << ENV["GEM_PATH"]
|
25
|
+
gem_pth << Gem.path
|
26
|
+
gem_pth.join(File::PATH_SEPARATOR)
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/rsense.rb
ADDED
data/rsense.gemspec
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'rsense/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "rsense"
|
8
|
+
spec.version = Rsense::VERSION
|
9
|
+
spec.authors = ["Eric West", "Tomohiro Matsuyama"]
|
10
|
+
spec.email = ["esw9999@gmail.com", "tomo@cx4a.org"]
|
11
|
+
spec.summary = %q{RSense knows your code.}
|
12
|
+
spec.description = %q{RSense is a tool for doing static analysis of Ruby source code. Rsense is used in conjunction with an editor plugin.}
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "GPL"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency "rsense-core", "~> 0.5.1"
|
22
|
+
spec.add_dependency "rsense-server", "~> 0.5.0"
|
23
|
+
spec.add_dependency "spoon", "~> 0.0.4"
|
24
|
+
spec.add_dependency "jruby-jars", "~> 1.7.4"
|
25
|
+
spec.add_dependency "jruby-parser", "~> 0.5.4"
|
26
|
+
spec.add_dependency "thor", "~> 0.18.1"
|
27
|
+
spec.add_dependency "filetree", "~> 1.0.0"
|
28
|
+
spec.add_dependency "bundler", "~> 1.6"
|
29
|
+
|
30
|
+
spec.add_development_dependency 'guard'
|
31
|
+
spec.add_development_dependency 'guard-minitest'
|
32
|
+
spec.add_development_dependency 'minitest-reporters'
|
33
|
+
spec.add_development_dependency 'minitest'
|
34
|
+
spec.add_development_dependency 'pry'
|
35
|
+
spec.add_development_dependency "rake"
|
36
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
{
|
2
|
+
"command": "find_definition",
|
3
|
+
"project": "~/code/rsense/rsense",
|
4
|
+
"file": "~/code/rsense/rsense/lib/rsense.rb",
|
5
|
+
"code": "module TestStuff\n class TestThings\n def junk\n 'junk'\n end\n end\nend\n\nTestStuff::TestThings",
|
6
|
+
"location": {
|
7
|
+
"row": 9,
|
8
|
+
"column": 22
|
9
|
+
}
|
10
|
+
}
|
@@ -0,0 +1,99 @@
|
|
1
|
+
require_relative "../../spec_helper"
|
2
|
+
|
3
|
+
describe Rsense::Client::Daemon do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@daemon = Rsense::Client::Daemon.new
|
7
|
+
end
|
8
|
+
|
9
|
+
it "returns the paths to the JRuby Jars" do
|
10
|
+
cp = @daemon.classpath
|
11
|
+
cp.must_match(/jruby-core-complete/)
|
12
|
+
cp.must_match(/jruby-stdlib-complete/)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "knows where home is" do
|
16
|
+
mhome = @daemon.rsense_home
|
17
|
+
mhome.to_s.must_match(/rsense-server$/)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "knows where the lib dir is" do
|
21
|
+
@daemon.rsense_lib.to_s.must_match(/rsense.*\/lib/)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "passes args to the JVM" do
|
25
|
+
@daemon.java_args.last.must_match(/Main/)
|
26
|
+
end
|
27
|
+
|
28
|
+
it "passes args to JRuby" do
|
29
|
+
@daemon.jruby_args(["foo", "bar"]).last.must_match(/bar/)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "knows where the GEM_PATH is" do
|
33
|
+
@daemon.gem_path.must_match(/gem/)
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "with args passed on init" do
|
37
|
+
before do
|
38
|
+
@daemon = Rsense::Client::Daemon.new(["foo", "bar"])
|
39
|
+
end
|
40
|
+
|
41
|
+
it "combines args for the JVM and JRuby" do
|
42
|
+
@daemon.build_argslist.must_include("java")
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
it "sets the GEM_PATH env" do
|
47
|
+
gp = @daemon.gem_path
|
48
|
+
@daemon.set_gem_path_env(gp)
|
49
|
+
ENV["GEM_PATH"].must_equal gp
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "Runner" do
|
53
|
+
class RunnerStub
|
54
|
+
attr_accessor :exec_cmd, :false
|
55
|
+
|
56
|
+
def initialize(exec_cmd)
|
57
|
+
@exec_cmd = exec_cmd
|
58
|
+
@called = false
|
59
|
+
end
|
60
|
+
|
61
|
+
def start
|
62
|
+
@called = true
|
63
|
+
end
|
64
|
+
|
65
|
+
def stop
|
66
|
+
@called = true
|
67
|
+
end
|
68
|
+
|
69
|
+
def restart
|
70
|
+
@called = true
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should initialize a runner" do
|
75
|
+
daemon = Rsense::Client::Daemon.new(["foo", "bar"])
|
76
|
+
daemon.runner.class::PID_PATH.must_match(/tmp\/exec\.pid/)
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should delegate start method to runner" do
|
80
|
+
daemon = Rsense::Client::Daemon.new(["foo", "bar"])
|
81
|
+
daemon.runner = RunnerStub.new(daemon.argslist)
|
82
|
+
daemon.start.must_equal(true)
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should delegate stop method to runner" do
|
86
|
+
daemon = Rsense::Client::Daemon.new(["foo", "bar"])
|
87
|
+
daemon.runner = RunnerStub.new(daemon.argslist)
|
88
|
+
daemon.stop.must_equal(true)
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should delegate restart method to runner" do
|
92
|
+
daemon = Rsense::Client::Daemon.new(["foo", "bar"])
|
93
|
+
daemon.runner = RunnerStub.new(daemon.argslist)
|
94
|
+
daemon.restart.must_equal(true)
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,265 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rsense
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.5.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Eric West
|
8
|
+
- Tomohiro Matsuyama
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-06-09 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rsense-core
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - "~>"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: 0.5.1
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - "~>"
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: 0.5.1
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: rsense-server
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - "~>"
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 0.5.0
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - "~>"
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: 0.5.0
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: spoon
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - "~>"
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: 0.0.4
|
49
|
+
type: :runtime
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - "~>"
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 0.0.4
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: jruby-jars
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - "~>"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 1.7.4
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 1.7.4
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: jruby-parser
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - "~>"
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 0.5.4
|
77
|
+
type: :runtime
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - "~>"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 0.5.4
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: thor
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - "~>"
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: 0.18.1
|
91
|
+
type: :runtime
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - "~>"
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: 0.18.1
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: filetree
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - "~>"
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: 1.0.0
|
105
|
+
type: :runtime
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - "~>"
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: 1.0.0
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: bundler
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - "~>"
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '1.6'
|
119
|
+
type: :runtime
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - "~>"
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '1.6'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: guard
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0'
|
133
|
+
type: :development
|
134
|
+
prerelease: false
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0'
|
140
|
+
- !ruby/object:Gem::Dependency
|
141
|
+
name: guard-minitest
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0'
|
147
|
+
type: :development
|
148
|
+
prerelease: false
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - ">="
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
154
|
+
- !ruby/object:Gem::Dependency
|
155
|
+
name: minitest-reporters
|
156
|
+
requirement: !ruby/object:Gem::Requirement
|
157
|
+
requirements:
|
158
|
+
- - ">="
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: '0'
|
161
|
+
type: :development
|
162
|
+
prerelease: false
|
163
|
+
version_requirements: !ruby/object:Gem::Requirement
|
164
|
+
requirements:
|
165
|
+
- - ">="
|
166
|
+
- !ruby/object:Gem::Version
|
167
|
+
version: '0'
|
168
|
+
- !ruby/object:Gem::Dependency
|
169
|
+
name: minitest
|
170
|
+
requirement: !ruby/object:Gem::Requirement
|
171
|
+
requirements:
|
172
|
+
- - ">="
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: '0'
|
175
|
+
type: :development
|
176
|
+
prerelease: false
|
177
|
+
version_requirements: !ruby/object:Gem::Requirement
|
178
|
+
requirements:
|
179
|
+
- - ">="
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: '0'
|
182
|
+
- !ruby/object:Gem::Dependency
|
183
|
+
name: pry
|
184
|
+
requirement: !ruby/object:Gem::Requirement
|
185
|
+
requirements:
|
186
|
+
- - ">="
|
187
|
+
- !ruby/object:Gem::Version
|
188
|
+
version: '0'
|
189
|
+
type: :development
|
190
|
+
prerelease: false
|
191
|
+
version_requirements: !ruby/object:Gem::Requirement
|
192
|
+
requirements:
|
193
|
+
- - ">="
|
194
|
+
- !ruby/object:Gem::Version
|
195
|
+
version: '0'
|
196
|
+
- !ruby/object:Gem::Dependency
|
197
|
+
name: rake
|
198
|
+
requirement: !ruby/object:Gem::Requirement
|
199
|
+
requirements:
|
200
|
+
- - ">="
|
201
|
+
- !ruby/object:Gem::Version
|
202
|
+
version: '0'
|
203
|
+
type: :development
|
204
|
+
prerelease: false
|
205
|
+
version_requirements: !ruby/object:Gem::Requirement
|
206
|
+
requirements:
|
207
|
+
- - ">="
|
208
|
+
- !ruby/object:Gem::Version
|
209
|
+
version: '0'
|
210
|
+
description: RSense is a tool for doing static analysis of Ruby source code. Rsense
|
211
|
+
is used in conjunction with an editor plugin.
|
212
|
+
email:
|
213
|
+
- esw9999@gmail.com
|
214
|
+
- tomo@cx4a.org
|
215
|
+
executables:
|
216
|
+
- rsense
|
217
|
+
extensions: []
|
218
|
+
extra_rdoc_files: []
|
219
|
+
files:
|
220
|
+
- ".gitignore"
|
221
|
+
- Gemfile
|
222
|
+
- Guardfile
|
223
|
+
- LICENSE.txt
|
224
|
+
- README.md
|
225
|
+
- Rakefile
|
226
|
+
- bin/rsense
|
227
|
+
- lib/rsense.rb
|
228
|
+
- lib/rsense/client.rb
|
229
|
+
- lib/rsense/client/daemon.rb
|
230
|
+
- lib/rsense/client/runner.rb
|
231
|
+
- lib/rsense/version.rb
|
232
|
+
- rsense.gemspec
|
233
|
+
- spec/fixtures/find_def_sample.json
|
234
|
+
- spec/fixtures/sample.json
|
235
|
+
- spec/rsense/client/daemon_spec.rb
|
236
|
+
- spec/spec_helper.rb
|
237
|
+
homepage: ''
|
238
|
+
licenses:
|
239
|
+
- GPL
|
240
|
+
metadata: {}
|
241
|
+
post_install_message:
|
242
|
+
rdoc_options: []
|
243
|
+
require_paths:
|
244
|
+
- lib
|
245
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
246
|
+
requirements:
|
247
|
+
- - ">="
|
248
|
+
- !ruby/object:Gem::Version
|
249
|
+
version: '0'
|
250
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
251
|
+
requirements:
|
252
|
+
- - ">="
|
253
|
+
- !ruby/object:Gem::Version
|
254
|
+
version: '0'
|
255
|
+
requirements: []
|
256
|
+
rubyforge_project:
|
257
|
+
rubygems_version: 2.2.2
|
258
|
+
signing_key:
|
259
|
+
specification_version: 4
|
260
|
+
summary: RSense knows your code.
|
261
|
+
test_files:
|
262
|
+
- spec/fixtures/find_def_sample.json
|
263
|
+
- spec/fixtures/sample.json
|
264
|
+
- spec/rsense/client/daemon_spec.rb
|
265
|
+
- spec/spec_helper.rb
|