rscript 0.3.0 → 0.3.1
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +1 -1
- data/lib/rscript.rb +145 -2
- data/lib/rscript_base.rb +46 -0
- metadata +2 -1
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dfa743d27a2badb05e6df2a86cd897edde0225b5
|
4
|
+
data.tar.gz: 14414cceedeaffab943afe3f6b5ecb847b477856
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cf60bcd9047d5eaa5bc803fb8cf66339a91f7d1c5f5b1db41663f7e32c7cda4ec2976b3517f8381ef42b0dc38546ef96af4754db2842abdb5834ac15111029fc
|
7
|
+
data.tar.gz: 573e5164bdf8896978ba8b3730f0a2b66771761b569338696086c3107c8a9a2fec9b44da16f9bb066cfd531196f8829099f71c5b5e09315017da3421320b254d
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
��>�l���Aa6}�L�r��c��ʿd2��pV �3��oK�RVLbDjί���hz.�-.8���pj]�<��tW&�ޯ����=��C�"�95�;�=�C�@SΗ�MB��P�]̒w������F1��V�E݇�Ŝ~,/n`��d�2�+jR�J���s���n�&�H�~�|��:n���u�n�E�÷M�O�N���Ü!�8���d���@���Ϙr�[ �����nyfԅ�"6��1�V�����
|
data/lib/rscript.rb
CHANGED
@@ -32,5 +32,148 @@
|
|
32
32
|
# MIT license - basically you can do anything you like with the script.
|
33
33
|
# http://www.opensource.org/licenses/mit-license.php
|
34
34
|
|
35
|
-
|
36
|
-
require '
|
35
|
+
|
36
|
+
require 'rscript_base'
|
37
|
+
require 'hashcache'
|
38
|
+
require 'rexle'
|
39
|
+
|
40
|
+
|
41
|
+
class RScript < RScriptBase
|
42
|
+
|
43
|
+
def initialize(logfile: '', logrotate: 'daily', pkg_src: '', cache: true)
|
44
|
+
|
45
|
+
@logger = Logger.new logfile, logrotate unless logfile.empty?
|
46
|
+
@cache = cache
|
47
|
+
@rsf_cache = HashCache.new({cache: 5}) if cache
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
def read(args=[])
|
52
|
+
|
53
|
+
if @logger then
|
54
|
+
|
55
|
+
@logger.debug 'inside RScript#read'
|
56
|
+
@logger.debug 'RScript -> args: ' + args.inspect
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
threads = []
|
61
|
+
|
62
|
+
if args.to_s[/\/\/job:/] then
|
63
|
+
|
64
|
+
ajob = []
|
65
|
+
|
66
|
+
args.each_index do |i|
|
67
|
+
if args[i][/\/\/job:/] then
|
68
|
+
ajob << "@id='#{$'}'"; args[i] = nil
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
args.compact!
|
73
|
+
|
74
|
+
out = read_rsf(args) do |doc|
|
75
|
+
doc.root.xpath("//job[#{ajob.join(' or ')}]").map do |job|
|
76
|
+
job.xpath('script').map {|s| read_script(s)}.join("\n")
|
77
|
+
end.join("\n")
|
78
|
+
end
|
79
|
+
|
80
|
+
raise "job not found" unless out.length > 0
|
81
|
+
out
|
82
|
+
|
83
|
+
else
|
84
|
+
out = read_rsf(args) {|doc| doc.root.xpath('//script').map {|s| read_script(s)}}.join("\n")
|
85
|
+
end
|
86
|
+
|
87
|
+
@logger.debug 'RScript -> out: ' + out.inspect[0..250] if @logger
|
88
|
+
|
89
|
+
[out, args]
|
90
|
+
end
|
91
|
+
|
92
|
+
def reset()
|
93
|
+
@rsf_cache.reset
|
94
|
+
end
|
95
|
+
|
96
|
+
# note: run() was copied from the development file rscript-wrapper.rb
|
97
|
+
def run(raw_args, params={}, rws=nil)
|
98
|
+
|
99
|
+
if @logger then
|
100
|
+
@logger.debug 'inside RScript#run'
|
101
|
+
@logger.debug 'RScript -> raw_args: ' + raw_args.inspect
|
102
|
+
end
|
103
|
+
|
104
|
+
if params[:splat] then
|
105
|
+
params.each do |k,v|
|
106
|
+
params.delete k unless k == :splat or k == :package or k == :job or k == :captures
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
if params[:splat] and params[:splat].length > 0 then
|
111
|
+
h = params[:splat].first[1..-1].split('&').inject({}) do |r,x|
|
112
|
+
k, v = x.split('=')
|
113
|
+
v ? r.merge(k[/\w+$/].to_sym => v) : r
|
114
|
+
end
|
115
|
+
params.merge! h
|
116
|
+
end
|
117
|
+
|
118
|
+
code2, args = self.read raw_args
|
119
|
+
@logger.debug 'RScript -> code2: ' + code2.inspect[0..250] if @logger
|
120
|
+
|
121
|
+
begin
|
122
|
+
|
123
|
+
=begin
|
124
|
+
thread = Thread.new(code2) do |x|
|
125
|
+
|
126
|
+
begin
|
127
|
+
Thread.current['result'] = eval x
|
128
|
+
rescue
|
129
|
+
@logger.debug('RScript -> eval: ' + ($!).inspect) if @logger
|
130
|
+
end
|
131
|
+
|
132
|
+
end
|
133
|
+
thread.join
|
134
|
+
=end
|
135
|
+
#puts 'code2 :' + code2.inspect
|
136
|
+
r = eval code2
|
137
|
+
#r = thread['result']
|
138
|
+
|
139
|
+
params = {}
|
140
|
+
|
141
|
+
return r
|
142
|
+
|
143
|
+
rescue Exception => e
|
144
|
+
params = {}
|
145
|
+
err_label = e.message.to_s + " :: \n" + e.backtrace.join("\n")
|
146
|
+
return err_label
|
147
|
+
end
|
148
|
+
|
149
|
+
end
|
150
|
+
|
151
|
+
private
|
152
|
+
|
153
|
+
def read_rsf(args=[])
|
154
|
+
|
155
|
+
rsfile = args[0]; args.shift
|
156
|
+
|
157
|
+
$rsfile = rsfile[/[^\/]+(?=\.rsf)/]
|
158
|
+
|
159
|
+
buffer = if @cache then
|
160
|
+
@rsf_cache.read(rsfile) {read_sourcecode(rsfile) }
|
161
|
+
else
|
162
|
+
read_sourcecode(rsfile)
|
163
|
+
end
|
164
|
+
|
165
|
+
@url_base = rsfile[/\w+:\/\/[^\/]+/]
|
166
|
+
|
167
|
+
doc = Rexle.new(buffer)
|
168
|
+
yield(doc)
|
169
|
+
|
170
|
+
end
|
171
|
+
|
172
|
+
end
|
173
|
+
|
174
|
+
if __FILE__ == $0 then
|
175
|
+
raw_args = ARGV
|
176
|
+
rs = RScript.new()
|
177
|
+
code, args = rs.read(raw_args)
|
178
|
+
puts eval(code).join("\n")
|
179
|
+
end
|
data/lib/rscript_base.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# file: rscript_base.rb
|
4
|
+
|
5
|
+
require 'cgi'
|
6
|
+
require 'open-uri'
|
7
|
+
require 'rxfhelper'
|
8
|
+
|
9
|
+
class RScriptBase
|
10
|
+
|
11
|
+
def initialize()
|
12
|
+
end
|
13
|
+
|
14
|
+
def read(doc)
|
15
|
+
doc.root.xpath('//script').map {|s| run_script(s)}.join(';')
|
16
|
+
end
|
17
|
+
|
18
|
+
protected
|
19
|
+
|
20
|
+
def read_script(script)
|
21
|
+
out_buffer = ''
|
22
|
+
|
23
|
+
src = script.attributes[:src]
|
24
|
+
|
25
|
+
out_buffer = if src then
|
26
|
+
read_sourcecode(script.attributes[:src].to_s)
|
27
|
+
else
|
28
|
+
script.texts.join("\n")
|
29
|
+
end
|
30
|
+
|
31
|
+
out_buffer
|
32
|
+
end
|
33
|
+
|
34
|
+
def read_sourcecode(rsf)
|
35
|
+
|
36
|
+
buffer, type = RXFHelper.read rsf
|
37
|
+
|
38
|
+
case type
|
39
|
+
when :url, :file
|
40
|
+
buffer
|
41
|
+
when :relative_url
|
42
|
+
open(@url_base + rsf, "UserAgent" => "rscript"){|x| x.read}
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rscript
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -100,6 +100,7 @@ extensions: []
|
|
100
100
|
extra_rdoc_files: []
|
101
101
|
files:
|
102
102
|
- lib/rscript.rb
|
103
|
+
- lib/rscript_base.rb
|
103
104
|
homepage: https://github.com/jrobertson/rscript
|
104
105
|
licenses:
|
105
106
|
- MIT
|
metadata.gz.sig
CHANGED
Binary file
|