rubyrest 0.0.1 → 0.0.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.
- data/CHANGELOG +9 -1
- data/README +11 -1
- data/Rakefile +5 -5
- data/bin/rubyrest +15 -56
- data/lib/rubyrest/atom.rb +6 -3
- data/lib/rubyrest/engine.rb +43 -18
- data/lib/rubyrest/servlets.rb +1 -2
- metadata +3 -3
data/CHANGELOG
CHANGED
@@ -1,4 +1,12 @@
|
|
1
|
-
|
1
|
+
== Release 0.0.2
|
2
|
+
|
3
|
+
|
4
|
+
* The engine now starts a daemonized server by default
|
5
|
+
* The engine is now embeddable in ruby code, thanks to RubyRest::Engine new implementation.
|
6
|
+
* Better HTTP response codes for DELETE and POST
|
7
|
+
* Atom formatting now more robust against nil values
|
8
|
+
|
9
|
+
== Release 0.0.1
|
2
10
|
|
3
11
|
* Initial release with very basic CRUD facilities
|
4
12
|
* Hello sample application included
|
data/README
CHANGED
@@ -14,7 +14,7 @@ lets you create new REST services without too much effort.
|
|
14
14
|
|
15
15
|
To check out the source code:
|
16
16
|
|
17
|
-
svn checkout
|
17
|
+
svn checkout svn://rubyforge.org/var/svn/rubyrest/trunk
|
18
18
|
|
19
19
|
=== Contact
|
20
20
|
|
@@ -36,6 +36,16 @@ Ruby-on-Rest provides a shell command. Open your console, and type the following
|
|
36
36
|
|
37
37
|
rubyrest start|stop <my_service> [<my_service_module>]
|
38
38
|
|
39
|
+
Ruby-on-Rest can also be embedded in ruby code. This is useful for testing purposes:
|
40
|
+
|
41
|
+
engine = RubyRest::Engine.new( <my_service>, <my_service_module> )
|
42
|
+
engine.start
|
43
|
+
# ...
|
44
|
+
# do some http calls here
|
45
|
+
# ...
|
46
|
+
engine.stop
|
47
|
+
|
48
|
+
|
39
49
|
=== Configuring your service
|
40
50
|
|
41
51
|
Ruby-on-Rest will try to load a file name <my_service>.rb which must provide access to
|
data/Rakefile
CHANGED
@@ -6,7 +6,7 @@ require 'fileutils'
|
|
6
6
|
include FileUtils
|
7
7
|
|
8
8
|
NAME = "rubyrest"
|
9
|
-
VERS = "0.0.
|
9
|
+
VERS = "0.0.2"
|
10
10
|
CLEAN.include ['**/.*.sw?', 'pkg/*', '.config', 'doc/*', 'coverage/*']
|
11
11
|
RDOC_OPTS = ['--quiet', '--title', "Ruby-on-Rest: A simple REST framework for Ruby",
|
12
12
|
"--opname", "index.html",
|
@@ -25,7 +25,7 @@ Rake::RDocTask.new do |rdoc|
|
|
25
25
|
rdoc.options += RDOC_OPTS
|
26
26
|
rdoc.main = "README"
|
27
27
|
rdoc.title = "Ruby-on-Rest Documentation"
|
28
|
-
rdoc.rdoc_files.add ['README', 'COPYING', 'lib/rubyrest.rb', 'lib/rubyrest/**/*.rb', 'examples/**/*.rb' ]
|
28
|
+
rdoc.rdoc_files.add ['README', 'COPYING', "CHANGELOG", 'lib/rubyrest.rb', 'lib/rubyrest/**/*.rb', 'examples/**/*.rb' ]
|
29
29
|
end
|
30
30
|
|
31
31
|
spec = Gem::Specification.new do |s|
|
@@ -45,7 +45,7 @@ spec = Gem::Specification.new do |s|
|
|
45
45
|
s.add_dependency('metaid')
|
46
46
|
s.required_ruby_version = '>= 1.8.2'
|
47
47
|
|
48
|
-
s.files = %w(COPYING README Rakefile) + Dir.glob("{bin,doc,lib}/**/*")
|
48
|
+
s.files = %w(COPYING README CHANGELOG Rakefile) + Dir.glob("{bin,doc,lib}/**/*")
|
49
49
|
|
50
50
|
s.require_path = "lib"
|
51
51
|
s.bindir = "bin"
|
@@ -75,9 +75,9 @@ end
|
|
75
75
|
desc 'Make a release in Rubyforge'
|
76
76
|
task :release => [:clean, :package, :doc_rforge ] do
|
77
77
|
# create a svn tag
|
78
|
-
sh %{svn copy svn+ssh://rubyforge.org/var/svn/rubyrest/trunk svn+ssh://rubyforge.org/var/svn/rubyrest/tags/#{VERS}}
|
78
|
+
sh %{svn copy -m 'TAG: #{VERS}' svn+ssh://rubyforge.org/var/svn/rubyrest/trunk svn+ssh://rubyforge.org/var/svn/rubyrest/tags/#{VERS}}
|
79
79
|
# upload the gem
|
80
|
-
sh %{scp pkg/#{NAME}-#{VERS}.gem sicozu@rubyforge.org:/var/www/gforge-projects/rubyrest/}
|
80
|
+
#sh %{scp pkg/#{NAME}-#{VERS}.gem sicozu@rubyforge.org:/var/www/gforge-projects/rubyrest/}
|
81
81
|
end
|
82
82
|
|
83
83
|
require 'spec/rake/spectask'
|
data/bin/rubyrest
CHANGED
@@ -6,62 +6,21 @@
|
|
6
6
|
require 'rubygems'
|
7
7
|
require 'rubyrest'
|
8
8
|
|
9
|
+
service = ARGV[1]
|
10
|
+
prefix = ARGV[2]
|
11
|
+
action = ARGV[0]
|
9
12
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
@option = option
|
24
|
-
@service = service
|
25
|
-
@service_prefix = prefix
|
26
|
-
|
27
|
-
#begin
|
28
|
-
self.method( @option ).call
|
29
|
-
#rescue => e
|
30
|
-
# puts "ERROR #{e.message}"
|
31
|
-
#end
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
def help_and_exit
|
36
|
-
puts "Usage: rubyrest start|stop <your_service> "
|
37
|
-
puts "Ruby-on-Rest: Simple REST for Ruby."
|
38
|
-
puts
|
39
|
-
puts "Examples:"
|
40
|
-
puts " rubyrest start grape"
|
41
|
-
puts " rubyrest stop grape"
|
42
|
-
puts
|
43
|
-
puts "For more information see http://rubyrest.rubyforge.org"
|
44
|
-
end
|
45
|
-
|
46
|
-
def start
|
47
|
-
service_module = to_module_name( @service_prefix, @service )
|
48
|
-
require @service
|
49
|
-
puts "=> Starting service '#{@service}' in module '#{service_module}'"
|
50
|
-
config = to_class( service_module, "config" ).new
|
51
|
-
config[ :servicemodule ] = service_module
|
52
|
-
RubyRest::Engine.new( config ).start
|
53
|
-
puts "=> Service #{@service} running!"
|
54
|
-
end
|
55
|
-
|
56
|
-
|
57
|
-
def stop
|
58
|
-
puts "=> Stopping service #{@service}..."
|
59
|
-
|
60
|
-
|
61
|
-
puts "=> Service #{@service} stopped!"
|
62
|
-
end
|
63
|
-
|
64
|
-
end
|
13
|
+
if action == nil or ( action != "start" and action != "stop" ) or service == nil
|
14
|
+
puts "Usage: rubyrest start|stop <your_service> "
|
15
|
+
puts "Ruby-on-Rest: Simple REST for Ruby."
|
16
|
+
puts
|
17
|
+
puts "Examples:"
|
18
|
+
puts " rubyrest start grape"
|
19
|
+
puts " rubyrest stop grape"
|
20
|
+
puts
|
21
|
+
puts "For more information see http://rubyrest.rubyforge.org"
|
22
|
+
else
|
23
|
+
engine = RubyRest::Engine.new( service, prefix )
|
24
|
+
engine.method( action ).call
|
65
25
|
end
|
66
26
|
|
67
|
-
RubyRest::RubyRestBoot.new( ARGV[0], ARGV[1], ARGV[2] )
|
data/lib/rubyrest/atom.rb
CHANGED
@@ -92,10 +92,13 @@ module RubyRest
|
|
92
92
|
builder.summary object.atom_summary
|
93
93
|
builder.link( "rel" => "alternate", "href" => entry_link )
|
94
94
|
|
95
|
-
if object.respond_to? :atom_related
|
96
|
-
object.atom_related
|
95
|
+
if object.respond_to?( :atom_related )
|
96
|
+
related_entities = object.atom_related
|
97
|
+
if related_entities.respond_to?( :each )
|
98
|
+
related_entities.each{ |related|
|
97
99
|
builder.link( "rel" => "related", "href" => "#{entry_link}/#{related}", "title" => "#{related}", "type" => ATOM_TYPE )
|
98
|
-
|
100
|
+
}
|
101
|
+
end
|
99
102
|
end
|
100
103
|
|
101
104
|
builder.moodisland :content do
|
data/lib/rubyrest/engine.rb
CHANGED
@@ -8,27 +8,43 @@ module RubyRest
|
|
8
8
|
# Objects of this class take a configuration as argument
|
9
9
|
# then launch a new server instance.
|
10
10
|
class Engine
|
11
|
+
include Tools
|
11
12
|
|
12
13
|
# Enables external objects to read the
|
13
14
|
# engine configuration
|
14
15
|
attr_reader :config
|
15
16
|
|
16
|
-
# Creates a new RubyRest engine, for the
|
17
|
-
#
|
18
|
-
def initialize(
|
19
|
-
@
|
17
|
+
# Creates a new RubyRest engine, for the service
|
18
|
+
# and service prefix
|
19
|
+
def initialize( service, prefix = nil )
|
20
|
+
@service = service
|
21
|
+
@prefix = prefix
|
22
|
+
service_module = to_module_name( @prefix, @service )
|
23
|
+
require @service
|
24
|
+
@config = to_class( service_module, "config" ).new
|
25
|
+
@config[ :servicemodule ] = service_module
|
20
26
|
end
|
21
27
|
|
22
|
-
# Starts the engine.
|
23
|
-
# The following operations are accomplished:
|
28
|
+
# Starts the engine. The following operations are accomplished:
|
24
29
|
#
|
25
|
-
# 1.
|
26
|
-
# 2.
|
27
|
-
#
|
28
|
-
#
|
30
|
+
# 1. configure the database
|
31
|
+
# 2. launch the webserver, in daemon mode unless false is
|
32
|
+
# specified in the configuration
|
29
33
|
def start
|
30
34
|
configure_database if @config.has( :dbadapter )
|
31
|
-
|
35
|
+
@server = RubyRest::Server.new( @config )
|
36
|
+
@server.mount "/", CRUDServlet
|
37
|
+
if @config.has( :daemon ) and @config[ :daemon ] == false
|
38
|
+
start_server
|
39
|
+
else start_daemon end
|
40
|
+
end
|
41
|
+
|
42
|
+
# Shutdowns the current server, if existing.
|
43
|
+
# This is only useful when working in daemon mode.
|
44
|
+
def stop
|
45
|
+
return if @pid == nil
|
46
|
+
Process.kill( 9, @pid )
|
47
|
+
puts "#{self.to_s}: killed process with pid=#{@pid}"
|
32
48
|
end
|
33
49
|
|
34
50
|
# Configures the database connectivity
|
@@ -41,16 +57,25 @@ module RubyRest
|
|
41
57
|
end
|
42
58
|
end
|
43
59
|
|
44
|
-
#
|
45
|
-
|
46
|
-
|
60
|
+
# Starts the server in another process
|
61
|
+
def start_daemon
|
62
|
+
@pid = fork do
|
63
|
+
start_server
|
64
|
+
end
|
65
|
+
puts "#{self.to_s}: started process with pid=#{@pid}"
|
66
|
+
end
|
67
|
+
|
68
|
+
# Starts the server
|
47
69
|
def start_server
|
48
|
-
server = RubyRest::Server.new( @config )
|
49
70
|
[ "INT", "TERM" ].each { |signal|
|
50
|
-
trap( signal ) { server.shutdown }
|
71
|
+
trap( signal ) { @server.shutdown }
|
51
72
|
}
|
52
|
-
server.
|
53
|
-
|
73
|
+
@server.start
|
74
|
+
end
|
75
|
+
|
76
|
+
# Returns the service name
|
77
|
+
def to_s
|
78
|
+
"rubyrest: #{@service}"
|
54
79
|
end
|
55
80
|
|
56
81
|
end
|
data/lib/rubyrest/servlets.rb
CHANGED
@@ -72,7 +72,6 @@ module RubyRest
|
|
72
72
|
else
|
73
73
|
response.status = @success_code
|
74
74
|
format_response( request, response ) if @result != nil
|
75
|
-
raise WEBrick::HTTPStatus::OK
|
76
75
|
end
|
77
76
|
end
|
78
77
|
|
@@ -114,7 +113,7 @@ module RubyRest
|
|
114
113
|
resolve_params( request )
|
115
114
|
incompatible_path( request ) if @id == nil
|
116
115
|
@generic_method = :delete
|
117
|
-
@success_code =
|
116
|
+
@success_code = 410
|
118
117
|
dispatch( request, response )
|
119
118
|
end
|
120
119
|
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.1
|
|
3
3
|
specification_version: 1
|
4
4
|
name: rubyrest
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0.
|
7
|
-
date: 2007-03-
|
6
|
+
version: 0.0.2
|
7
|
+
date: 2007-03-30 00:00:00 +02:00
|
8
8
|
summary: REST framework for Ruby.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -31,6 +31,7 @@ authors:
|
|
31
31
|
files:
|
32
32
|
- COPYING
|
33
33
|
- README
|
34
|
+
- CHANGELOG
|
34
35
|
- Rakefile
|
35
36
|
- bin/rubyrest
|
36
37
|
- doc/rdoc
|
@@ -41,7 +42,6 @@ files:
|
|
41
42
|
- lib/rubyrest/engine.rb
|
42
43
|
- lib/rubyrest/servlets.rb
|
43
44
|
- lib/rubyrest/tools.rb
|
44
|
-
- CHANGELOG
|
45
45
|
- examples/hello.rb
|
46
46
|
test_files: []
|
47
47
|
|