rscript-server 0.1.0

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.
Files changed (2) hide show
  1. data/lib/rscript-server.rb +111 -0
  2. metadata +56 -0
@@ -0,0 +1,111 @@
1
+ #!/usr/bin/env ruby[4~
2
+
3
+ # file: rscript-server.rb[4~
4
+
5
+ require 'socket'
6
+ require 'app-routes'
7
+ require 'rscript'
8
+ require 'rexml/document'
9
+
10
+ class RScriptServer
11
+ include REXML
12
+
13
+ def initialize(raw_opts={})
14
+ opts = {ip: '0.0.0.0', port: 4446, pkg_url: ''}.merge(raw_opts)
15
+ @ip, @port, @url_base = opts[:ip], opts[:port], opts[:pkg_url]
16
+
17
+ super()
18
+ params = {}
19
+ @app = AppRoutes.new(params)
20
+ application(params)
21
+
22
+ @content_type = 'text/html'
23
+
24
+ end
25
+
26
+ def start
27
+
28
+ server = TCPServer.new(@ip, @port)
29
+
30
+ while (session = server.accept)
31
+
32
+ raw_request = session.gets
33
+ request = raw_request[/.[^\s]+(?= HTTP\/1\.\d)/].strip
34
+ puts "%s %s" % [Time.now,request]
35
+
36
+ result = @app.run(request)
37
+
38
+ result ||= "404: page not found"
39
+
40
+ session.print "HTTP/1.1 200/OK\r\nContent-type: #{@content_type}; charset=utf-8\r\n\r\n"
41
+ session.print result
42
+ session.close
43
+ end
44
+ end
45
+
46
+ private
47
+
48
+ def application(params)
49
+
50
+ @app.routes do
51
+
52
+ get '/do/:package/:job' do |package,job|
53
+
54
+ jobs = "//job:" + job
55
+ url = "%s%s.rsf" % [@url_base, package]
56
+
57
+ run(url, jobs, params)
58
+ end
59
+
60
+ get '/do/:package/:job/*' do |package, job|
61
+
62
+ jobs = "//job:" + job
63
+ raw_args = params[:splat]
64
+ args = raw_args.join.split('/')[1..-1]
65
+ url = "%s%s.rsf" % [@url_base, package]
66
+
67
+ run(url, jobs, params, args)
68
+ end
69
+
70
+ get '/source/:package' do |package|
71
+
72
+ url = "%s%s.rsf" % [@url_base, package]
73
+ @content_type = 'text/plain'
74
+ open(url, "UserAgent" => 'RscriptServer').read
75
+ end
76
+
77
+ get '/source/:package/:job' do |package, job|
78
+
79
+ url = "%s%s.rsf" % [@url_base, package]
80
+ buffer = open(url, "UserAgent" => 'RscriptServer').read
81
+ doc = Document.new(buffer)
82
+
83
+ @content_type = 'text/plain'
84
+ XPath.first(doc.root, "//job[@id='#{job}']").to_s
85
+ end
86
+
87
+ end
88
+ end
89
+
90
+ def get(arg,&block)
91
+ @app.get(arg, &block)
92
+ end
93
+
94
+ def run_rcscript(rsf_url, jobs, arg='')
95
+ ajobs = jobs.split(/\s/)
96
+ args = [rsf_url, ajobs, arg].flatten
97
+ rs = RScript.new()
98
+ rs.run(args)
99
+ end
100
+
101
+ def run(url, jobs, params={}, qargs=[])
102
+ result, args = run_rcscript(url, jobs, qargs)
103
+
104
+ begin
105
+ eval(result)
106
+ rescue
107
+ "rws error: " + ($!).to_s
108
+ end
109
+ end
110
+
111
+ end
metadata ADDED
@@ -0,0 +1,56 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rscript-server
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.1.0
6
+ platform: ruby
7
+ authors: []
8
+
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-03-13 00:00:00 +00:00
14
+ default_executable:
15
+ dependencies: []
16
+
17
+ description:
18
+ email:
19
+ executables: []
20
+
21
+ extensions: []
22
+
23
+ extra_rdoc_files: []
24
+
25
+ files:
26
+ - lib/rscript-server.rb
27
+ has_rdoc: true
28
+ homepage:
29
+ licenses: []
30
+
31
+ post_install_message:
32
+ rdoc_options: []
33
+
34
+ require_paths:
35
+ - lib
36
+ required_ruby_version: !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: "0"
42
+ required_rubygems_version: !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: "0"
48
+ requirements: []
49
+
50
+ rubyforge_project:
51
+ rubygems_version: 1.5.2
52
+ signing_key:
53
+ specification_version: 3
54
+ summary: rscript-server
55
+ test_files: []
56
+