cmdr 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/cmdr.rb +125 -0
  2. metadata +74 -0
data/lib/cmdr.rb ADDED
@@ -0,0 +1,125 @@
1
+ #!/uar/bin/ruby
2
+
3
+ #file: cmdr.rb
4
+
5
+ require 'builder'
6
+ require 'rscript'
7
+ require 'rexml/document'
8
+ include REXML
9
+
10
+ class Cmdr
11
+
12
+ def initialize(opt={})
13
+ @v = opt[:public]
14
+ o = {bottom_up_display: true}.merge(opt[:config])
15
+ bottom_up_display = o[:bottom_up_display]
16
+ super()
17
+ end
18
+
19
+ def run_cmd(raw_command, user_id='-1')
20
+
21
+ input_string = raw_command.clone
22
+
23
+ command, options_string = raw_command[/\w+/], ($').strip
24
+
25
+ aliasx = @v[:alias]
26
+ if aliasx.has_key? command then
27
+ command, options_string2 = aliasx[command][/\w+/], ($').strip
28
+ options_string = options_string2 + ' '+ options_string
29
+ end
30
+
31
+ # save the command to history
32
+ unless raw_command[/arrowup|arrowdown/] then
33
+ @v[:user][user_id][:history][:list] << raw_command
34
+ @v[:user][user_id][:history][:index] = -1
35
+ end
36
+
37
+ raw_args = options_string.gsub(/\".[^\|\'"]+["']/) {|x| x.gsub(/\s/,'%20')}.split(/\s/)\
38
+ .map {|x| x.gsub(/%20/,' ').sub(/\"(.*)\"/,'\1')}
39
+ rs = RScript.new()
40
+ code, args = rs.read(raw_args)
41
+
42
+ @user_id = user_id unless user_id == '-1'
43
+ doc = Document.new eval(code)
44
+
45
+ node = XPath.first(doc.root, 'summary/javascript')
46
+ job_with_js = ''
47
+
48
+ if node then
49
+ job_with_js = node.text.to_s
50
+ node.parent.delete node
51
+ end
52
+
53
+ if XPath.first(doc.root, "records/*") then
54
+ r = XPath.match(doc.root, 'records/*').map do |node|
55
+ nodes = XPath.match(node, '*')
56
+ if nodes.length > 1 then
57
+ item_details = nodes.map do |x|
58
+ t = x.cdatas.length > 0 ? x.cdatas.join.strip : x.text.to_s.strip
59
+ "<strong>%s</strong>: %s" % [x.name, t]
60
+ end
61
+ else
62
+ item_details = nodes.map do |x|
63
+ x.cdatas.length > 0 ? x.cdatas.join.strip : x.text.to_s.strip
64
+ end
65
+ end
66
+ "<ul><li>%s</li></ul>" % item_details.join("</li><li>")
67
+ end
68
+ out = "<ul><li>%s</li></ul>" % r.join("</li><li>")
69
+ else
70
+ text1 = XPath.first(doc.root, 'summary/title/text() | summary/to_s/text()')
71
+ out = REXML::Text::unnormalize(text1.to_s).gsub(/"/,'&#34;')
72
+ end
73
+
74
+ javascript = []
75
+ javascript << bottom_up_display == true ? listmite(out) : listite(out)
76
+ javascript << job_with_js
77
+
78
+ xml = Builder::XmlMarkup.new( :target => buffer='', :indent => 2 )
79
+ xml.instruct! :xml, :version => "1.0", :encoding => "UTF-8"
80
+ xml.result do
81
+ xml.summary do
82
+ xml.status 'success'
83
+ xml.script {xml.cdata!(javascript.join("\n"))}
84
+ xml.output r.to_s
85
+ end
86
+ xml.records
87
+ end
88
+
89
+ buffer
90
+
91
+ end
92
+
93
+ protected
94
+
95
+ def listite(out)
96
+ "
97
+ olist = document.getElementById('list');
98
+ ocontent = document.getElementById('content');
99
+ oli = document.createElement('li');
100
+
101
+ oli.innerHTML = \"#{out.gsub(/\r|\n/,"").gsub(/"/,'&#34;')}\";
102
+ ocontent.insertBefore(oli, ocontent.firstChild);
103
+
104
+ olist.scrollTop = olist.scrollHeight;
105
+
106
+ ocommandInput = document.getElementById('user_input');
107
+ ocommandInput.value = '';
108
+ "
109
+ end
110
+
111
+ def listmite(out)
112
+ "
113
+ ocontent = document.getElementById('content');
114
+ oli = document.createElement('li');
115
+
116
+ oli.innerHTML = \"#{out.gsub(/\r|\n/,"").gsub(/"/,'&#34;')}\";
117
+ ocontent.appendChild(oli);
118
+ olist.scrollTop = olist.scrollHeight;
119
+
120
+ ocommandInput = document.getElementById('user_input');
121
+ ocommandInput.value = '';
122
+ "
123
+ end
124
+ end
125
+
metadata ADDED
@@ -0,0 +1,74 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cmdr
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: 2010-08-10 00:00:00 +01:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: builder
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: rscript
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ description:
36
+ email:
37
+ executables: []
38
+
39
+ extensions: []
40
+
41
+ extra_rdoc_files: []
42
+
43
+ files:
44
+ - lib/cmdr.rb
45
+ has_rdoc: true
46
+ homepage:
47
+ licenses: []
48
+
49
+ post_install_message:
50
+ rdoc_options: []
51
+
52
+ require_paths:
53
+ - lib
54
+ required_ruby_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: "0"
59
+ version:
60
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: "0"
65
+ version:
66
+ requirements: []
67
+
68
+ rubyforge_project:
69
+ rubygems_version: 1.3.5
70
+ signing_key:
71
+ specification_version: 3
72
+ summary: cmdr
73
+ test_files: []
74
+