silk 0.0.4 → 0.0.5
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.
- data/Gemfile +17 -0
- data/Gemfile.lock +48 -0
- data/README.rdoc +26 -6
- data/Rakefile +29 -38
- data/VERSION +1 -1
- data/lib/silk.rb +7 -1
- data/lib/silk/exceptions/task_not_found.rb +6 -0
- data/lib/silk/options.rb +19 -1
- data/lib/silk/runner.rb +48 -0
- data/lib/silk/server.rb +34 -35
- data/silk.gemspec +51 -45
- data/test/bin/failure +1 -1
- data/test/bin/successful +1 -1
- data/test/helper.rb +8 -0
- data/test/test_dsl.rb +1 -1
- data/test/test_helper.rb +0 -1
- data/test/test_options.rb +49 -0
- data/test/test_runner.rb +32 -0
- data/test/test_server.rb +10 -4
- data/test/test_silk.rb +9 -0
- metadata +96 -65
- data/.gitignore +0 -21
data/Gemfile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
source 'http://rubygems.org'
|
2
|
+
|
3
|
+
gem 'daemons', '>= 0'
|
4
|
+
gem 'json', '>= 0'
|
5
|
+
gem 'sinatra', '>= 0'
|
6
|
+
gem 'SyslogLogger', '>= 0'
|
7
|
+
gem 'rdoc'
|
8
|
+
|
9
|
+
group :development, :test do
|
10
|
+
gem 'shoulda', '>= 0'
|
11
|
+
gem 'mocha', '>= 0'
|
12
|
+
gem 'bundler', '~> 1.0.0'
|
13
|
+
gem 'jeweler', '~> 1.6.4'
|
14
|
+
gem 'rcov', '>= 0'
|
15
|
+
gem 'rack-test', '>= 0'
|
16
|
+
gem 'redgreen', '1.2.2'
|
17
|
+
end
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
SyslogLogger (1.4.0)
|
5
|
+
hoe (>= 1.2.0)
|
6
|
+
daemons (1.1.0)
|
7
|
+
git (1.2.5)
|
8
|
+
hoe (2.6.1)
|
9
|
+
rake (>= 0.8.7)
|
10
|
+
rubyforge (>= 2.0.4)
|
11
|
+
jeweler (1.6.4)
|
12
|
+
bundler (~> 1.0)
|
13
|
+
git (>= 1.2.5)
|
14
|
+
rake
|
15
|
+
json (1.4.6)
|
16
|
+
json_pure (1.4.6)
|
17
|
+
mocha (0.9.12)
|
18
|
+
rack (1.2.3)
|
19
|
+
rack-test (0.5.7)
|
20
|
+
rack (>= 1.0)
|
21
|
+
rake (0.9.2)
|
22
|
+
rcov (0.9.8)
|
23
|
+
rdoc (3.8)
|
24
|
+
redgreen (1.2.2)
|
25
|
+
rubyforge (2.0.4)
|
26
|
+
json_pure (>= 1.1.7)
|
27
|
+
shoulda (2.11.3)
|
28
|
+
sinatra (1.2.6)
|
29
|
+
rack (~> 1.1)
|
30
|
+
tilt (>= 1.2.2, < 2.0)
|
31
|
+
tilt (1.3)
|
32
|
+
|
33
|
+
PLATFORMS
|
34
|
+
ruby
|
35
|
+
|
36
|
+
DEPENDENCIES
|
37
|
+
SyslogLogger
|
38
|
+
bundler (~> 1.0.0)
|
39
|
+
daemons
|
40
|
+
jeweler (~> 1.6.4)
|
41
|
+
json
|
42
|
+
mocha
|
43
|
+
rack-test
|
44
|
+
rcov
|
45
|
+
rdoc
|
46
|
+
redgreen (= 1.2.2)
|
47
|
+
shoulda
|
48
|
+
sinatra
|
data/README.rdoc
CHANGED
@@ -58,15 +58,35 @@ By default it runs on port 8888 and will probably need to be run as root to make
|
|
58
58
|
|
59
59
|
Eventually it'll support SSL certificates etc, but until then, I suggest you either use SSH tunnels, and/or (at the very least) lock down via a firewall. You could also build a rack.up file, and run it behind a web server that gives you more control (Rack.up file is on the todo list).
|
60
60
|
|
61
|
-
== Testing
|
61
|
+
== Testing your recipes
|
62
62
|
|
63
|
-
There
|
63
|
+
There are two ways to test your recipes - you can chose to just run them on the command line, using the -t switch
|
64
64
|
|
65
|
-
|
65
|
+
silk -t --param user=joe --param email=joe@blogs.com --format json
|
66
|
+
|
67
|
+
or via unit tests.
|
68
|
+
|
69
|
+
require 'silk'
|
70
|
+
|
71
|
+
class TestDSL < Test::Unit::TestCase
|
72
|
+
results = Runner.execute('task:name', { 'user' => 'joe', 'email' => 'joe@blogs.com' })
|
73
|
+
end
|
74
|
+
|
75
|
+
the results hash will have three elements: stdout, stderr and a process result object
|
66
76
|
|
67
|
-
|
77
|
+
results[:stdout]
|
78
|
+
results[:stderr]
|
79
|
+
results[:status]
|
68
80
|
|
69
|
-
|
81
|
+
To get the exit status of the task:
|
82
|
+
|
83
|
+
status = results[:status].exitstatus
|
84
|
+
|
85
|
+
== Testing Silk
|
86
|
+
|
87
|
+
There is a test suite. It uses shoulda + mocha + test::rack
|
88
|
+
|
89
|
+
If you are going to submit patches, please try to make sure the tests pass, and that you have created a test covering the changes you have made
|
70
90
|
|
71
91
|
== Note on Patches/Pull Requests
|
72
92
|
|
@@ -81,4 +101,4 @@ This is a really early release, that still needs more testing (This is so far mo
|
|
81
101
|
|
82
102
|
== Copyright
|
83
103
|
|
84
|
-
Copyright (c) 2010 Myles Eftos. See LICENSE for details.
|
104
|
+
Copyright (c) 2010,2011 Myles Eftos. See LICENSE for details.
|
data/Rakefile
CHANGED
@@ -1,31 +1,28 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
require 'rubygems'
|
4
|
+
require 'bundler'
|
5
|
+
begin
|
6
|
+
Bundler.setup(:default, :development)
|
7
|
+
rescue Bundler::BundlerError => e
|
8
|
+
$stderr.puts e.message
|
9
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
+
exit e.status_code
|
11
|
+
end
|
2
12
|
require 'rake'
|
3
13
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
gem.add_dependency 'daemons'
|
16
|
-
gem.add_dependency 'json'
|
17
|
-
gem.add_dependency 'sinatra'
|
18
|
-
gem.add_dependency 'SyslogLogger'
|
19
|
-
|
20
|
-
gem.add_development_dependency "shoulda"
|
21
|
-
gem.add_development_dependency "rack-test"
|
22
|
-
gem.add_development_dependency "redgreen"
|
23
|
-
gem.add_development_dependency "mocha"
|
24
|
-
end
|
25
|
-
Jeweler::GemcutterTasks.new
|
26
|
-
rescue LoadError
|
27
|
-
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
14
|
+
require 'jeweler'
|
15
|
+
Jeweler::Tasks.new do |gem|
|
16
|
+
# dependencies defined in Gemfile
|
17
|
+
gem.name = "silk"
|
18
|
+
gem.executables = "silk"
|
19
|
+
gem.summary = %Q{A framework for creating a hosting console}
|
20
|
+
gem.description = %Q{It allows you to write rake tasks to do common tasks, such as creating email addresses, adding users etc. Silk provides a HTTP wrapper the the rake tasks, and allows communication via JSON objects, which makes it dead easy for them to be called from a web app.}
|
21
|
+
gem.email = "myles@madpilot.com.au"
|
22
|
+
gem.homepage = "http://github.com/madpilot/silk"
|
23
|
+
gem.authors = ["Myles Eftos"]
|
28
24
|
end
|
25
|
+
Jeweler::RubygemsDotOrgTasks.new
|
29
26
|
|
30
27
|
require 'rake/testtask'
|
31
28
|
Rake::TestTask.new(:test) do |test|
|
@@ -34,24 +31,18 @@ Rake::TestTask.new(:test) do |test|
|
|
34
31
|
test.verbose = true
|
35
32
|
end
|
36
33
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
end
|
44
|
-
rescue LoadError
|
45
|
-
task :rcov do
|
46
|
-
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
47
|
-
end
|
34
|
+
require 'rcov/rcovtask'
|
35
|
+
Rcov::RcovTask.new do |test|
|
36
|
+
test.libs << 'test'
|
37
|
+
test.pattern = 'test/**/test_*.rb'
|
38
|
+
test.verbose = true
|
39
|
+
test.rcov_opts << '--exclude "gems/*"'
|
48
40
|
end
|
49
41
|
|
50
|
-
task :test => :check_dependencies
|
51
42
|
task :default => :test
|
52
43
|
|
53
|
-
require '
|
54
|
-
|
44
|
+
require 'rdoc/task'
|
45
|
+
RDoc::Task.new do |rdoc|
|
55
46
|
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
56
47
|
|
57
48
|
rdoc.rdoc_dir = 'rdoc'
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.5
|
data/lib/silk.rb
CHANGED
@@ -5,6 +5,8 @@ require 'rake'
|
|
5
5
|
require 'syslog_logger'
|
6
6
|
require 'daemons'
|
7
7
|
require 'options'
|
8
|
+
require 'runner'
|
9
|
+
require 'exceptions/task_not_found'
|
8
10
|
require 'server'
|
9
11
|
require 'tasks'
|
10
12
|
|
@@ -25,7 +27,11 @@ module Silk
|
|
25
27
|
Daemons.call(options) do
|
26
28
|
$0 = old_proc_name
|
27
29
|
Dir.chdir pwd
|
28
|
-
|
30
|
+
if options[:test]
|
31
|
+
puts Runner.test(options[:test_task], options[:test_params])
|
32
|
+
else
|
33
|
+
Server.run! :host => options[:bind], :port => options[:port], :environment => :production
|
34
|
+
end
|
29
35
|
end
|
30
36
|
end
|
31
37
|
|
data/lib/silk/options.rb
CHANGED
@@ -50,7 +50,25 @@ class Options
|
|
50
50
|
opts.on('-s [server list]', '--server', /.+/, 'handler used for built-in web server') do |server|
|
51
51
|
options[:server] = [ server ]
|
52
52
|
end
|
53
|
-
|
53
|
+
|
54
|
+
options[:test] = false
|
55
|
+
options[:test_task] = nil
|
56
|
+
opts.on('-t [task]', '--test', /.+/, 'Test the supplied rake task on the command line') do |test|
|
57
|
+
options[:test] = true
|
58
|
+
options[:test_task] = test
|
59
|
+
options[:ontop] = true
|
60
|
+
end
|
61
|
+
|
62
|
+
options[:test_params] = {}
|
63
|
+
opts.on('--param [param]', '--parameter', /.+/, 'Parameters to pass in to the test task. Enter as key/value pairs, ie user=joe') do |param|
|
64
|
+
k, v = param.split('=')
|
65
|
+
options[:test_params][k] = v
|
66
|
+
end
|
67
|
+
|
68
|
+
opts.on('--format [format]', /.+/, 'Output format') do |format|
|
69
|
+
ENV['format'] = format
|
70
|
+
end
|
71
|
+
|
54
72
|
opts.on('-v', '--version') do
|
55
73
|
File.open(File.join(File.dirname(__FILE__), '..', '..', 'VERSION')) do |fh|
|
56
74
|
puts fh.read
|
data/lib/silk/runner.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
module Silk
|
2
|
+
class Runner
|
3
|
+
def self.execute(task, params)
|
4
|
+
tasks = Silk::Tasks.new
|
5
|
+
raise Silk::Exceptions::TaskNotFound unless tasks.list.include?(task)
|
6
|
+
|
7
|
+
results = { :stdout => '', :stderr => '', :status => nil }
|
8
|
+
params.delete("captures")
|
9
|
+
|
10
|
+
stdout_read, stdout_write = IO.pipe
|
11
|
+
stderr_read, stderr_write = IO.pipe
|
12
|
+
pid = Process.fork do
|
13
|
+
$stdout.reopen stdout_write
|
14
|
+
$stderr.reopen stderr_write
|
15
|
+
stdout_read.close
|
16
|
+
stderr_read.close
|
17
|
+
tasks.run(task, params)
|
18
|
+
end
|
19
|
+
|
20
|
+
stdout_write.close
|
21
|
+
stderr_write.close
|
22
|
+
|
23
|
+
stdout_read.each do |line|
|
24
|
+
results[:stdout] += line
|
25
|
+
end
|
26
|
+
stderr_read.each do |line|
|
27
|
+
results[:stderr] += line
|
28
|
+
end
|
29
|
+
|
30
|
+
pid, status = Process.waitpid2(pid)
|
31
|
+
results[:status] = status
|
32
|
+
results[:stdout].strip!
|
33
|
+
results[:stderr].strip!
|
34
|
+
|
35
|
+
return results
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.test(task, params)
|
39
|
+
results = self.execute(task, params)
|
40
|
+
|
41
|
+
if results[:status].exitstatus != 0
|
42
|
+
"Error: #{results[:stderr]}"
|
43
|
+
else
|
44
|
+
"Success: #{results[:stdout]}"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/silk/server.rb
CHANGED
@@ -3,12 +3,12 @@ require 'sinatra/base'
|
|
3
3
|
|
4
4
|
module Silk
|
5
5
|
class Server < Sinatra::Base
|
6
|
-
|
6
|
+
def process(context, params)
|
7
7
|
options = Silk.options
|
8
8
|
task = nil
|
9
9
|
format = 'text'
|
10
10
|
|
11
|
-
query =
|
11
|
+
query = context.split('.')
|
12
12
|
format = query.pop if query.size > 1
|
13
13
|
task = query.join('.').gsub("/", ":")
|
14
14
|
|
@@ -20,43 +20,42 @@ module Silk
|
|
20
20
|
else
|
21
21
|
content_type('text/plain')
|
22
22
|
end
|
23
|
-
|
24
|
-
tasks = Silk::Tasks.new
|
25
|
-
unless tasks.list.include?(task)
|
26
|
-
not_found("Not Found")
|
27
|
-
end
|
28
|
-
|
29
|
-
results = { :stdout => '', :stderr => '' }
|
30
|
-
params.delete("captures")
|
23
|
+
|
31
24
|
ENV['format'] = format
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
25
|
+
|
26
|
+
begin
|
27
|
+
results = Runner.execute(task, params)
|
28
|
+
headers('X_PROCESS_EXIT_STATUS' => results[:status].exitstatus.to_s)
|
29
|
+
|
30
|
+
if results[:status].exitstatus != 0
|
31
|
+
error(500, results[:stderr])
|
32
|
+
else
|
33
|
+
results[:stdout]
|
34
|
+
end
|
42
35
|
|
43
|
-
|
44
|
-
|
45
|
-
stdout_read.each do |line|
|
46
|
-
results[:stdout] += line
|
47
|
-
end
|
48
|
-
stderr_read.each do |line|
|
49
|
-
results[:stderr] += line
|
36
|
+
rescue Silk::Exceptions::TaskNotFound
|
37
|
+
not_found("Not found")
|
50
38
|
end
|
51
|
-
|
39
|
+
end
|
40
|
+
|
41
|
+
get %r{\/(.+)} do |context|
|
42
|
+
process context, params
|
43
|
+
end
|
44
|
+
|
45
|
+
post %r{\/(.+)} do |context|
|
46
|
+
process context, params
|
47
|
+
end
|
52
48
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
49
|
+
put %r{\/(.+)} do |context|
|
50
|
+
process context, params
|
51
|
+
end
|
52
|
+
|
53
|
+
delete %r{\/(.+)} do |context|
|
54
|
+
process context, params
|
55
|
+
end
|
56
|
+
|
57
|
+
not_found do
|
58
|
+
'Not found'
|
60
59
|
end
|
61
60
|
end
|
62
61
|
end
|
data/silk.gemspec
CHANGED
@@ -1,96 +1,102 @@
|
|
1
1
|
# Generated by jeweler
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{silk}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Myles Eftos"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2011-07-30}
|
13
13
|
s.default_executable = %q{silk}
|
14
14
|
s.description = %q{It allows you to write rake tasks to do common tasks, such as creating email addresses, adding users etc. Silk provides a HTTP wrapper the the rake tasks, and allows communication via JSON objects, which makes it dead easy for them to be called from a web app.}
|
15
15
|
s.email = %q{myles@madpilot.com.au}
|
16
16
|
s.executables = ["silk"]
|
17
17
|
s.extra_rdoc_files = [
|
18
18
|
"LICENSE",
|
19
|
-
|
19
|
+
"README.rdoc"
|
20
20
|
]
|
21
21
|
s.files = [
|
22
22
|
".document",
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
23
|
+
"Gemfile",
|
24
|
+
"Gemfile.lock",
|
25
|
+
"LICENSE",
|
26
|
+
"README.rdoc",
|
27
|
+
"Rakefile",
|
28
|
+
"VERSION",
|
29
|
+
"bin/silk",
|
30
|
+
"install.rb",
|
31
|
+
"lib/silk.rb",
|
32
|
+
"lib/silk/dsl.rake",
|
33
|
+
"lib/silk/exceptions/task_not_found.rb",
|
34
|
+
"lib/silk/options.rb",
|
35
|
+
"lib/silk/runner.rb",
|
36
|
+
"lib/silk/server.rb",
|
37
|
+
"lib/silk/tasks.rb",
|
38
|
+
"silk.gemspec",
|
39
|
+
"test/bin/failure",
|
40
|
+
"test/bin/successful",
|
41
|
+
"test/helper.rb",
|
42
|
+
"test/rakefiles/test.rake",
|
43
|
+
"test/test_dsl.rb",
|
44
|
+
"test/test_helper.rb",
|
45
|
+
"test/test_options.rb",
|
46
|
+
"test/test_runner.rb",
|
47
|
+
"test/test_server.rb",
|
48
|
+
"test/test_silk.rb",
|
49
|
+
"test/test_tasks.rb"
|
46
50
|
]
|
47
51
|
s.homepage = %q{http://github.com/madpilot/silk}
|
48
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
49
52
|
s.require_paths = ["lib"]
|
50
|
-
s.rubygems_version = %q{1.3.
|
53
|
+
s.rubygems_version = %q{1.3.6}
|
51
54
|
s.summary = %q{A framework for creating a hosting console}
|
52
|
-
s.test_files = [
|
53
|
-
"test/helper.rb",
|
54
|
-
"test/test_dsl.rb",
|
55
|
-
"test/test_helper.rb",
|
56
|
-
"test/test_options.rb",
|
57
|
-
"test/test_server.rb",
|
58
|
-
"test/test_silk.rb",
|
59
|
-
"test/test_tasks.rb"
|
60
|
-
]
|
61
55
|
|
62
56
|
if s.respond_to? :specification_version then
|
63
57
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
64
58
|
s.specification_version = 3
|
65
59
|
|
66
|
-
if Gem::Version.new(Gem::
|
60
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
67
61
|
s.add_runtime_dependency(%q<daemons>, [">= 0"])
|
68
62
|
s.add_runtime_dependency(%q<json>, [">= 0"])
|
69
63
|
s.add_runtime_dependency(%q<sinatra>, [">= 0"])
|
70
64
|
s.add_runtime_dependency(%q<SyslogLogger>, [">= 0"])
|
65
|
+
s.add_runtime_dependency(%q<rdoc>, [">= 0"])
|
71
66
|
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
72
|
-
s.add_development_dependency(%q<rack-test>, [">= 0"])
|
73
|
-
s.add_development_dependency(%q<redgreen>, [">= 0"])
|
74
67
|
s.add_development_dependency(%q<mocha>, [">= 0"])
|
68
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
69
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
|
70
|
+
s.add_development_dependency(%q<rcov>, [">= 0"])
|
71
|
+
s.add_development_dependency(%q<rack-test>, [">= 0"])
|
72
|
+
s.add_development_dependency(%q<redgreen>, ["= 1.2.2"])
|
75
73
|
else
|
76
74
|
s.add_dependency(%q<daemons>, [">= 0"])
|
77
75
|
s.add_dependency(%q<json>, [">= 0"])
|
78
76
|
s.add_dependency(%q<sinatra>, [">= 0"])
|
79
77
|
s.add_dependency(%q<SyslogLogger>, [">= 0"])
|
78
|
+
s.add_dependency(%q<rdoc>, [">= 0"])
|
80
79
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
81
|
-
s.add_dependency(%q<rack-test>, [">= 0"])
|
82
|
-
s.add_dependency(%q<redgreen>, [">= 0"])
|
83
80
|
s.add_dependency(%q<mocha>, [">= 0"])
|
81
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
82
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
83
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
84
|
+
s.add_dependency(%q<rack-test>, [">= 0"])
|
85
|
+
s.add_dependency(%q<redgreen>, ["= 1.2.2"])
|
84
86
|
end
|
85
87
|
else
|
86
88
|
s.add_dependency(%q<daemons>, [">= 0"])
|
87
89
|
s.add_dependency(%q<json>, [">= 0"])
|
88
90
|
s.add_dependency(%q<sinatra>, [">= 0"])
|
89
91
|
s.add_dependency(%q<SyslogLogger>, [">= 0"])
|
92
|
+
s.add_dependency(%q<rdoc>, [">= 0"])
|
90
93
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
91
|
-
s.add_dependency(%q<rack-test>, [">= 0"])
|
92
|
-
s.add_dependency(%q<redgreen>, [">= 0"])
|
93
94
|
s.add_dependency(%q<mocha>, [">= 0"])
|
95
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
96
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
97
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
98
|
+
s.add_dependency(%q<rack-test>, [">= 0"])
|
99
|
+
s.add_dependency(%q<redgreen>, ["= 1.2.2"])
|
94
100
|
end
|
95
101
|
end
|
96
102
|
|
data/test/bin/failure
CHANGED
data/test/bin/successful
CHANGED
data/test/helper.rb
CHANGED
@@ -1,4 +1,12 @@
|
|
1
1
|
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
begin
|
4
|
+
Bundler.setup(:default, :development)
|
5
|
+
rescue Bundler::BundlerError => e
|
6
|
+
$stderr.puts e.message
|
7
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
+
exit e.status_code
|
9
|
+
end
|
2
10
|
require 'test/unit'
|
3
11
|
require 'shoulda'
|
4
12
|
|
data/test/test_dsl.rb
CHANGED
@@ -209,7 +209,7 @@ class TestDSL < Test::Unit::TestCase
|
|
209
209
|
assert_equal 'Success!', result.stdout.strip
|
210
210
|
end
|
211
211
|
|
212
|
-
should 'set the
|
212
|
+
should 'set the stderr value' do
|
213
213
|
result = @context.run File.join(File.dirname(__FILE__), '..', 'test', 'bin', 'failure')
|
214
214
|
assert_equal 'Fail :(', result.stderr.strip
|
215
215
|
end
|
data/test/test_helper.rb
CHANGED
data/test/test_options.rb
CHANGED
@@ -158,6 +158,55 @@ class TestOptions < Test::Unit::TestCase
|
|
158
158
|
assert_equal [ 'iis' ], options[:server]
|
159
159
|
end
|
160
160
|
|
161
|
+
should 'set the test flag if -t is set' do
|
162
|
+
ARGV << '-t'
|
163
|
+
options = Options.parse
|
164
|
+
assert options[:test]
|
165
|
+
end
|
166
|
+
|
167
|
+
should 'set the test flag if --test is set' do
|
168
|
+
ARGV << '--test'
|
169
|
+
ARGV << "test:task"
|
170
|
+
options = Options.parse
|
171
|
+
assert options[:test]
|
172
|
+
assert_equal "test:task", options[:test_task]
|
173
|
+
end
|
174
|
+
|
175
|
+
should 'set the ontop flag if -t is set' do
|
176
|
+
ARGV << '-t'
|
177
|
+
ARGV << "test:task"
|
178
|
+
options = Options.parse
|
179
|
+
assert_equal true, options[:ontop]
|
180
|
+
assert_equal "test:task", options[:test_task]
|
181
|
+
end
|
182
|
+
|
183
|
+
should 'set the optop flag if --test is set' do
|
184
|
+
ARGV << '--test'
|
185
|
+
options = Options.parse
|
186
|
+
assert_equal true, options[:ontop]
|
187
|
+
end
|
188
|
+
|
189
|
+
should 'add params to the test_params array if --param is set' do
|
190
|
+
ARGV << '--param'
|
191
|
+
ARGV << 'user=joe'
|
192
|
+
options = Options.parse
|
193
|
+
assert_equal 'joe', options[:test_params]['user']
|
194
|
+
end
|
195
|
+
|
196
|
+
should 'add params to the test_params array if --paramaters is set' do
|
197
|
+
ARGV << '--parameter'
|
198
|
+
ARGV << 'user=joe'
|
199
|
+
options = Options.parse
|
200
|
+
assert_equal 'joe', options[:test_params]['user']
|
201
|
+
end
|
202
|
+
|
203
|
+
should 'set the format environment variable if --format is set' do
|
204
|
+
ARGV << '--format'
|
205
|
+
ARGV << 'json'
|
206
|
+
options = Options.parse
|
207
|
+
assert_equal 'json', ENV['format']
|
208
|
+
end
|
209
|
+
|
161
210
|
should 'display the VERSION of -v is set' do
|
162
211
|
ARGV << '-v'
|
163
212
|
|
data/test/test_runner.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestRunner < Test::Unit::TestCase
|
4
|
+
context 'TestRunner' do
|
5
|
+
setup do
|
6
|
+
Silk.options = { :recipe_paths => File.join(File.dirname(File.expand_path(__FILE__)), 'rakefiles') }
|
7
|
+
ENV['format'] = nil
|
8
|
+
end
|
9
|
+
|
10
|
+
should "raise TaskNotFound exception if the task isn't found" do
|
11
|
+
assert_raise Silk::Exceptions::TaskNotFound do
|
12
|
+
Silk::Runner.execute('task:does:not:exist', {})
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
should 'fill the stdout on success' do
|
17
|
+
assert_nothing_raised do
|
18
|
+
results = Silk::Runner.execute('level_1:level_2', {})
|
19
|
+
assert_equal 'text', results[:stdout].strip
|
20
|
+
assert_equal 0, results[:status].exitstatus
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
should 'fill the stderr on error' do
|
25
|
+
assert_nothing_raised do
|
26
|
+
results = Silk::Runner.execute('errors:return', {})
|
27
|
+
assert_equal 'Error', results[:stderr].strip
|
28
|
+
assert_equal 1, results[:status].exitstatus
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/test/test_server.rb
CHANGED
@@ -12,32 +12,38 @@ class TestServer < Test::Unit::TestCase
|
|
12
12
|
Silk.options = { :recipe_paths => File.join(File.dirname(File.expand_path(__FILE__)), 'rakefiles') }
|
13
13
|
end
|
14
14
|
|
15
|
+
should 'return simple 404 if the task is not found' do
|
16
|
+
get '/'
|
17
|
+
assert last_response.not_found?
|
18
|
+
assert_match "Not found", last_response.body
|
19
|
+
end
|
20
|
+
|
15
21
|
context 'mime_types' do
|
16
22
|
should "return 'text/plain' if there is no format" do
|
17
23
|
get '/level_1/level_2'
|
18
24
|
assert last_response.ok?
|
19
|
-
|
25
|
+
assert_match /text\/plain/, last_response.headers['Content-Type']
|
20
26
|
assert_equal "text", last_response.body
|
21
27
|
end
|
22
28
|
|
23
29
|
should "return 'text/plain' if the format isn't recognised" do
|
24
30
|
get '/level_1/level_2.csv'
|
25
31
|
assert last_response.ok?
|
26
|
-
|
32
|
+
assert_match /text\/plain/, last_response.headers['Content-Type']
|
27
33
|
assert_equal "text", last_response.body
|
28
34
|
end
|
29
35
|
|
30
36
|
should "return 'application/json' if there is no format" do
|
31
37
|
get '/level_1/level_2.json'
|
32
38
|
assert last_response.ok?
|
33
|
-
|
39
|
+
assert_match /application\/json/, last_response.headers['Content-Type']
|
34
40
|
assert_equal "json".to_json, last_response.body
|
35
41
|
end
|
36
42
|
|
37
43
|
should "return 'application/xml' if there is no format" do
|
38
44
|
get '/level_1/level_2.xml'
|
39
45
|
assert last_response.ok?
|
40
|
-
|
46
|
+
assert_match /application\/xml/, last_response.headers['Content-Type']
|
41
47
|
assert_equal "<xml>xml</xml>", last_response.body
|
42
48
|
end
|
43
49
|
end
|
data/test/test_silk.rb
CHANGED
@@ -44,6 +44,15 @@ class TestSilk < Test::Unit::TestCase
|
|
44
44
|
Silk::Server.expects(:run!).with({ :host => '1.2.3.4', :port => 80, :environment => :production })
|
45
45
|
Silk.run
|
46
46
|
end
|
47
|
+
|
48
|
+
should 'use run the test runner if in test mode' do
|
49
|
+
logger_mock = mock
|
50
|
+
options = { :test => true, :test_task => 'test:task', :test_params => { 'test' => 'param' } }
|
51
|
+
Options.stubs(:parse).returns(options)
|
52
|
+
Logger.stubs(:new).returns(logger_mock)
|
53
|
+
Silk::Runner.expects(:test).with('test:task', { 'test' => 'param' })
|
54
|
+
Silk.run
|
55
|
+
end
|
47
56
|
end
|
48
57
|
end
|
49
58
|
end
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: silk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 23
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
7
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
8
|
+
- 5
|
9
|
+
version: 0.0.5
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Myles Eftos
|
@@ -15,121 +14,159 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date:
|
17
|
+
date: 2011-07-30 00:00:00 +08:00
|
19
18
|
default_executable: silk
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
22
|
-
|
23
|
-
prerelease: false
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
21
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
26
22
|
requirements:
|
27
23
|
- - ">="
|
28
24
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 3
|
30
25
|
segments:
|
31
26
|
- 0
|
32
27
|
version: "0"
|
28
|
+
requirement: *id001
|
29
|
+
name: daemons
|
30
|
+
prerelease: false
|
33
31
|
type: :runtime
|
34
|
-
version_requirements: *id001
|
35
32
|
- !ruby/object:Gem::Dependency
|
36
|
-
|
37
|
-
prerelease: false
|
38
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
-
none: false
|
33
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
40
34
|
requirements:
|
41
35
|
- - ">="
|
42
36
|
- !ruby/object:Gem::Version
|
43
|
-
hash: 3
|
44
37
|
segments:
|
45
38
|
- 0
|
46
39
|
version: "0"
|
40
|
+
requirement: *id002
|
41
|
+
name: json
|
42
|
+
prerelease: false
|
47
43
|
type: :runtime
|
48
|
-
version_requirements: *id002
|
49
44
|
- !ruby/object:Gem::Dependency
|
50
|
-
|
51
|
-
prerelease: false
|
52
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
53
|
-
none: false
|
45
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
54
46
|
requirements:
|
55
47
|
- - ">="
|
56
48
|
- !ruby/object:Gem::Version
|
57
|
-
hash: 3
|
58
49
|
segments:
|
59
50
|
- 0
|
60
51
|
version: "0"
|
52
|
+
requirement: *id003
|
53
|
+
name: sinatra
|
54
|
+
prerelease: false
|
61
55
|
type: :runtime
|
62
|
-
version_requirements: *id003
|
63
56
|
- !ruby/object:Gem::Dependency
|
57
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
segments:
|
62
|
+
- 0
|
63
|
+
version: "0"
|
64
|
+
requirement: *id004
|
64
65
|
name: SyslogLogger
|
65
66
|
prerelease: false
|
66
|
-
|
67
|
-
|
67
|
+
type: :runtime
|
68
|
+
- !ruby/object:Gem::Dependency
|
69
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
68
70
|
requirements:
|
69
71
|
- - ">="
|
70
72
|
- !ruby/object:Gem::Version
|
71
|
-
hash: 3
|
72
73
|
segments:
|
73
74
|
- 0
|
74
75
|
version: "0"
|
76
|
+
requirement: *id005
|
77
|
+
name: rdoc
|
78
|
+
prerelease: false
|
75
79
|
type: :runtime
|
76
|
-
version_requirements: *id004
|
77
80
|
- !ruby/object:Gem::Dependency
|
78
|
-
|
79
|
-
prerelease: false
|
80
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
81
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
82
82
|
requirements:
|
83
83
|
- - ">="
|
84
84
|
- !ruby/object:Gem::Version
|
85
|
-
hash: 3
|
86
85
|
segments:
|
87
86
|
- 0
|
88
87
|
version: "0"
|
88
|
+
requirement: *id006
|
89
|
+
name: shoulda
|
90
|
+
prerelease: false
|
89
91
|
type: :development
|
90
|
-
version_requirements: *id005
|
91
92
|
- !ruby/object:Gem::Dependency
|
92
|
-
|
93
|
-
prerelease: false
|
94
|
-
requirement: &id006 !ruby/object:Gem::Requirement
|
95
|
-
none: false
|
93
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
96
94
|
requirements:
|
97
95
|
- - ">="
|
98
96
|
- !ruby/object:Gem::Version
|
99
|
-
hash: 3
|
100
97
|
segments:
|
101
98
|
- 0
|
102
99
|
version: "0"
|
100
|
+
requirement: *id007
|
101
|
+
name: mocha
|
102
|
+
prerelease: false
|
103
103
|
type: :development
|
104
|
-
version_requirements: *id006
|
105
104
|
- !ruby/object:Gem::Dependency
|
106
|
-
|
105
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
segments:
|
110
|
+
- 1
|
111
|
+
- 0
|
112
|
+
- 0
|
113
|
+
version: 1.0.0
|
114
|
+
requirement: *id008
|
115
|
+
name: bundler
|
116
|
+
prerelease: false
|
117
|
+
type: :development
|
118
|
+
- !ruby/object:Gem::Dependency
|
119
|
+
version_requirements: &id009 !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ~>
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
segments:
|
124
|
+
- 1
|
125
|
+
- 6
|
126
|
+
- 4
|
127
|
+
version: 1.6.4
|
128
|
+
requirement: *id009
|
129
|
+
name: jeweler
|
107
130
|
prerelease: false
|
108
|
-
|
109
|
-
|
131
|
+
type: :development
|
132
|
+
- !ruby/object:Gem::Dependency
|
133
|
+
version_requirements: &id010 !ruby/object:Gem::Requirement
|
110
134
|
requirements:
|
111
135
|
- - ">="
|
112
136
|
- !ruby/object:Gem::Version
|
113
|
-
hash: 3
|
114
137
|
segments:
|
115
138
|
- 0
|
116
139
|
version: "0"
|
140
|
+
requirement: *id010
|
141
|
+
name: rcov
|
142
|
+
prerelease: false
|
117
143
|
type: :development
|
118
|
-
version_requirements: *id007
|
119
144
|
- !ruby/object:Gem::Dependency
|
120
|
-
|
121
|
-
prerelease: false
|
122
|
-
requirement: &id008 !ruby/object:Gem::Requirement
|
123
|
-
none: false
|
145
|
+
version_requirements: &id011 !ruby/object:Gem::Requirement
|
124
146
|
requirements:
|
125
147
|
- - ">="
|
126
148
|
- !ruby/object:Gem::Version
|
127
|
-
hash: 3
|
128
149
|
segments:
|
129
150
|
- 0
|
130
151
|
version: "0"
|
152
|
+
requirement: *id011
|
153
|
+
name: rack-test
|
154
|
+
prerelease: false
|
155
|
+
type: :development
|
156
|
+
- !ruby/object:Gem::Dependency
|
157
|
+
version_requirements: &id012 !ruby/object:Gem::Requirement
|
158
|
+
requirements:
|
159
|
+
- - "="
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
segments:
|
162
|
+
- 1
|
163
|
+
- 2
|
164
|
+
- 2
|
165
|
+
version: 1.2.2
|
166
|
+
requirement: *id012
|
167
|
+
name: redgreen
|
168
|
+
prerelease: false
|
131
169
|
type: :development
|
132
|
-
version_requirements: *id008
|
133
170
|
description: It allows you to write rake tasks to do common tasks, such as creating email addresses, adding users etc. Silk provides a HTTP wrapper the the rake tasks, and allows communication via JSON objects, which makes it dead easy for them to be called from a web app.
|
134
171
|
email: myles@madpilot.com.au
|
135
172
|
executables:
|
@@ -141,7 +178,8 @@ extra_rdoc_files:
|
|
141
178
|
- README.rdoc
|
142
179
|
files:
|
143
180
|
- .document
|
144
|
-
-
|
181
|
+
- Gemfile
|
182
|
+
- Gemfile.lock
|
145
183
|
- LICENSE
|
146
184
|
- README.rdoc
|
147
185
|
- Rakefile
|
@@ -150,7 +188,9 @@ files:
|
|
150
188
|
- install.rb
|
151
189
|
- lib/silk.rb
|
152
190
|
- lib/silk/dsl.rake
|
191
|
+
- lib/silk/exceptions/task_not_found.rb
|
153
192
|
- lib/silk/options.rb
|
193
|
+
- lib/silk/runner.rb
|
154
194
|
- lib/silk/server.rb
|
155
195
|
- lib/silk/tasks.rb
|
156
196
|
- silk.gemspec
|
@@ -161,6 +201,7 @@ files:
|
|
161
201
|
- test/test_dsl.rb
|
162
202
|
- test/test_helper.rb
|
163
203
|
- test/test_options.rb
|
204
|
+
- test/test_runner.rb
|
164
205
|
- test/test_server.rb
|
165
206
|
- test/test_silk.rb
|
166
207
|
- test/test_tasks.rb
|
@@ -169,40 +210,30 @@ homepage: http://github.com/madpilot/silk
|
|
169
210
|
licenses: []
|
170
211
|
|
171
212
|
post_install_message:
|
172
|
-
rdoc_options:
|
173
|
-
|
213
|
+
rdoc_options: []
|
214
|
+
|
174
215
|
require_paths:
|
175
216
|
- lib
|
176
217
|
required_ruby_version: !ruby/object:Gem::Requirement
|
177
|
-
none: false
|
178
218
|
requirements:
|
179
219
|
- - ">="
|
180
220
|
- !ruby/object:Gem::Version
|
181
|
-
hash: 3
|
182
221
|
segments:
|
183
222
|
- 0
|
184
223
|
version: "0"
|
185
224
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
186
|
-
none: false
|
187
225
|
requirements:
|
188
226
|
- - ">="
|
189
227
|
- !ruby/object:Gem::Version
|
190
|
-
hash: 3
|
191
228
|
segments:
|
192
229
|
- 0
|
193
230
|
version: "0"
|
194
231
|
requirements: []
|
195
232
|
|
196
233
|
rubyforge_project:
|
197
|
-
rubygems_version: 1.3.
|
234
|
+
rubygems_version: 1.3.6
|
198
235
|
signing_key:
|
199
236
|
specification_version: 3
|
200
237
|
summary: A framework for creating a hosting console
|
201
|
-
test_files:
|
202
|
-
|
203
|
-
- test/test_dsl.rb
|
204
|
-
- test/test_helper.rb
|
205
|
-
- test/test_options.rb
|
206
|
-
- test/test_server.rb
|
207
|
-
- test/test_silk.rb
|
208
|
-
- test/test_tasks.rb
|
238
|
+
test_files: []
|
239
|
+
|