rcscript-client 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/rcscript-client.rb +82 -0
  2. metadata +55 -0
@@ -0,0 +1,82 @@
1
+ require 'open-uri'
2
+ require 'rexml/document'
3
+
4
+ class RScriptClient
5
+ include REXML
6
+
7
+ attr_reader :doc, :result, :text
8
+ attr_accessor :package
9
+
10
+ def initialize(opts={})
11
+
12
+ o = {:hostname => 'rscript.heroku.com', :package => ''}.merge(opts)
13
+ @hostname = o[:hostname]
14
+ @package = o[:package]
15
+
16
+ if @package.length > 0 then
17
+ jobs_to_methods(@package)
18
+ init_content_types
19
+ end
20
+
21
+ end
22
+
23
+ def package=(s)
24
+ if s then
25
+ @package = s
26
+ jobs_to_methods(@package)
27
+ init_content_types
28
+ end
29
+ end
30
+
31
+ private
32
+
33
+ def jobs_to_methods(package)
34
+ url = "http://rorbuilder.info/r/heroku/%s.rsf" % package
35
+ puts 'url : ' + url
36
+ doc = Document.new(open(url, 'UserAgent' => 'ClientRscript').read)
37
+ a = XPath.match(doc.root, 'job/attribute::id')
38
+ a.each do |attr|
39
+ method_name = attr.value.to_s.gsub('-','_')
40
+ method = "def %s(param={}); query_method('%s', param); end" % [method_name, method_name]
41
+ self.instance_eval(method)
42
+ end
43
+ end
44
+
45
+ def init_content_types
46
+
47
+ @return_type = {}
48
+
49
+ xmlproc = Proc.new {
50
+ @doc = Document.new(@result.sub(/xmlns=["']http:\/\/www.w3.org\/1999\/xhtml["']/,''))
51
+ summary_node = XPath.match(@doc.root, 'summary/*')
52
+ if summary_node then
53
+ summary_node.each do |node|
54
+ method = "def %s(); '%s'; end" % [node.name, node.text.to_s]
55
+ self.instance_eval(method)
56
+ end
57
+ records = XPath.match(@doc.root, 'records/*/text()')
58
+ method = "def %s(); %s; end" % [@doc.root.name, records.inspect] if records
59
+ self.instance_eval(method)
60
+ end
61
+ }
62
+
63
+ textproc = Proc.new {@text = @result}
64
+ @return_type['text/plain'] = textproc
65
+ @return_type['text/html'] = textproc
66
+ @return_type['text/xml'] = xmlproc
67
+ @return_type['application/xml'] = xmlproc
68
+ @return_type['application/rss+xml'] = xmlproc
69
+
70
+ end
71
+
72
+ def query_method(method, params={})
73
+ base_url = "http://#{@hostname}/do/#{@package}/"
74
+ param_list = params.to_a.map{|x| x.join('=')}.join('&')
75
+ url = "%s%s?%s" % [base_url, method.gsub('_','-'), param_list]
76
+ response = open(url, 'UserAgent' => 'RScriptClient')
77
+ @result = response.read
78
+ @return_type[response.content_type].call
79
+ return self
80
+ end
81
+
82
+ end
metadata ADDED
@@ -0,0 +1,55 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rcscript-client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors: []
7
+
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-12-17 00:00:00 +00:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description:
17
+ email:
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - lib/rcscript-client.rb
26
+ has_rdoc: true
27
+ homepage:
28
+ licenses: []
29
+
30
+ post_install_message:
31
+ rdoc_options: []
32
+
33
+ require_paths:
34
+ - lib
35
+ required_ruby_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: "0"
40
+ version:
41
+ required_rubygems_version: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: "0"
46
+ version:
47
+ requirements: []
48
+
49
+ rubyforge_project:
50
+ rubygems_version: 1.3.5
51
+ signing_key:
52
+ specification_version: 3
53
+ summary: RCscript-client is a utility for remotely executing Ruby Scripting File (RSF)
54
+ test_files: []
55
+