rumx 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. data/History.md +6 -0
  2. data/LICENSE.txt +201 -0
  3. data/README.md +107 -0
  4. data/Rakefile +23 -0
  5. data/examples/bean_list/README +2 -0
  6. data/examples/bean_list/config.ru +9 -0
  7. data/examples/bean_list/my_bean.rb +35 -0
  8. data/examples/embedded/README +2 -0
  9. data/examples/embedded/config.ru +9 -0
  10. data/examples/embedded/my_bean.rb +23 -0
  11. data/examples/embedded/my_embedded_bean.rb +22 -0
  12. data/examples/list/README +2 -0
  13. data/examples/list/config.ru +9 -0
  14. data/examples/list/my_bean.rb +28 -0
  15. data/examples/simple/README +2 -0
  16. data/examples/simple/config.ru +11 -0
  17. data/examples/simple/my_bean.rb +36 -0
  18. data/examples/timer/README +7 -0
  19. data/examples/timer/config.ru +9 -0
  20. data/examples/timer/my_bean.rb +28 -0
  21. data/lib/rumx/argument.rb +11 -0
  22. data/lib/rumx/attribute.rb +38 -0
  23. data/lib/rumx/bean.rb +484 -0
  24. data/lib/rumx/beans/folder.rb +9 -0
  25. data/lib/rumx/beans/message.rb +16 -0
  26. data/lib/rumx/beans/timer.rb +75 -0
  27. data/lib/rumx/beans.rb +3 -0
  28. data/lib/rumx/operation.rb +26 -0
  29. data/lib/rumx/server/public/_lib/jquery.cookie.js +96 -0
  30. data/lib/rumx/server/public/_lib/jquery.hotkeys.js +99 -0
  31. data/lib/rumx/server/public/_lib/jquery.js +18 -0
  32. data/lib/rumx/server/public/attribute_test.html +148 -0
  33. data/lib/rumx/server/public/jquery-ui-1.8.16.custom.min.js +132 -0
  34. data/lib/rumx/server/public/jquery.jstree.js +4551 -0
  35. data/lib/rumx/server/public/jquery.layout.min-1.2.0.js +80 -0
  36. data/lib/rumx/server/public/themes/apple/bg.jpg +0 -0
  37. data/lib/rumx/server/public/themes/apple/d.png +0 -0
  38. data/lib/rumx/server/public/themes/apple/dot_for_ie.gif +0 -0
  39. data/lib/rumx/server/public/themes/apple/style.css +61 -0
  40. data/lib/rumx/server/public/themes/apple/throbber.gif +0 -0
  41. data/lib/rumx/server/public/themes/classic/d.gif +0 -0
  42. data/lib/rumx/server/public/themes/classic/d.png +0 -0
  43. data/lib/rumx/server/public/themes/classic/dot_for_ie.gif +0 -0
  44. data/lib/rumx/server/public/themes/classic/style.css +77 -0
  45. data/lib/rumx/server/public/themes/classic/throbber.gif +0 -0
  46. data/lib/rumx/server/public/themes/default/d.gif +0 -0
  47. data/lib/rumx/server/public/themes/default/d.png +0 -0
  48. data/lib/rumx/server/public/themes/default/style.css +74 -0
  49. data/lib/rumx/server/public/themes/default/throbber.gif +0 -0
  50. data/lib/rumx/server/public/themes/default-rtl/d.gif +0 -0
  51. data/lib/rumx/server/public/themes/default-rtl/d.png +0 -0
  52. data/lib/rumx/server/public/themes/default-rtl/dots.gif +0 -0
  53. data/lib/rumx/server/public/themes/default-rtl/style.css +84 -0
  54. data/lib/rumx/server/public/themes/default-rtl/throbber.gif +0 -0
  55. data/lib/rumx/server/views/attribute_value_tag.haml +4 -0
  56. data/lib/rumx/server/views/content_attribute.haml +35 -0
  57. data/lib/rumx/server/views/content_attributes.haml +31 -0
  58. data/lib/rumx/server/views/content_operation.haml +39 -0
  59. data/lib/rumx/server/views/content_operations.haml +36 -0
  60. data/lib/rumx/server/views/index.haml +1 -0
  61. data/lib/rumx/server/views/layout.haml +18 -0
  62. data/lib/rumx/server/views/link_to_content.haml +1 -0
  63. data/lib/rumx/server/views/tree.haml +11 -0
  64. data/lib/rumx/server/views/tree_bean.haml +6 -0
  65. data/lib/rumx/server/views/tree_bean_attributes.haml +6 -0
  66. data/lib/rumx/server/views/tree_bean_operations.haml +6 -0
  67. data/lib/rumx/server.rb +185 -0
  68. data/lib/rumx/type.rb +36 -0
  69. data/lib/rumx.rb +7 -0
  70. metadata +123 -0
@@ -0,0 +1,36 @@
1
+ %h3= path[1..-1]
2
+ %h4 Operations
3
+ %table{:width => '100%'}
4
+ %thead
5
+ %tr
6
+ %td Name
7
+ %td Description
8
+ %td Returns
9
+ %td{:colspan => 4} Arguments
10
+ %tr
11
+ %td  
12
+ %td  
13
+ %td  
14
+ %td Index
15
+ %td Name
16
+ %td Description
17
+ %td Type
18
+ %tbody
19
+ - bean.bean_each_operation do |operation, rel_path|
20
+ %tr
21
+ %td= link_to_operation(path, rel_path)
22
+ %td= operation.description
23
+ %td= operation.type.to_s
24
+ %td  
25
+ %td  
26
+ %td  
27
+ %td  
28
+ - operation.arguments.each_with_index do |arg, i|
29
+ %tr
30
+ %td  
31
+ %td  
32
+ %td  
33
+ %td= i+1
34
+ %td= arg.name
35
+ %td= arg.description
36
+ %td= arg.type
@@ -0,0 +1 @@
1
+ - # Intentionally left blank
@@ -0,0 +1,18 @@
1
+ !!!XML
2
+ !!!1.1
3
+ %html{"xml:lang" => "en", :xmlns => "http://www.w3.org/1999/xhtml"}
4
+ %head
5
+ %script{:type => 'text/javascript', :src => url('/_lib/jquery.js')}
6
+ %script{:type => 'text/javascript', :src => url('/jquery.jstree.js')}
7
+ %script{:type => 'text/javascript', :src => url('/jquery.layout.min-1.2.0.js')}
8
+ %script{:type => 'text/javascript', :src => url('/jquery-ui-1.8.16.custom.min.js')}
9
+ :javascript
10
+ $(document).ready(function () {
11
+ $('body').layout({ applyDefaultStyles: true });
12
+ });
13
+ %title Rumx Console
14
+ %body
15
+ .ui-layout-west
16
+ = partial :tree
17
+ .ui-layout-center#content
18
+ = yield
@@ -0,0 +1 @@
1
+ %a{ :href => href, :onclick => "$('#content').load('#{href}'); return false" }= name
@@ -0,0 +1,11 @@
1
+ #tree
2
+ %ul
3
+ = render_tree_bean_children('', ::Rumx::Bean.root)
4
+ :javascript
5
+ $(function () {
6
+ jQuery("#tree")
7
+ .jstree({
8
+ core : { /* core options go here */ },
9
+ plugins : [ "themes", "html_data" ]
10
+ });
11
+ });
@@ -0,0 +1,6 @@
1
+ %li.tree-bean
2
+ %a= name
3
+ %ul
4
+ = render_tree_bean_attributes(path, bean)
5
+ = render_tree_bean_operations(path, bean)
6
+ = render_tree_bean_children(path, bean)
@@ -0,0 +1,6 @@
1
+ %li.tree-bean-attributes
2
+ = link_to_attributes(path)
3
+ %ul
4
+ - bean.bean_get_attributes do |attribute, value, rel_path, param_name|
5
+ %li
6
+ = link_to_attribute(path, rel_path)
@@ -0,0 +1,6 @@
1
+ %li.tree-bean-operations
2
+ = link_to_operations(path)
3
+ %ul
4
+ - bean.bean_each_operation do |operation, rel_path|
5
+ %li
6
+ = link_to_operation(path, rel_path)
@@ -0,0 +1,185 @@
1
+ require 'sinatra/base'
2
+ require 'json'
3
+ require 'haml'
4
+ require 'uri'
5
+
6
+ module Rumx
7
+ class Server < Sinatra::Base
8
+ configure do
9
+ enable :logging
10
+ end
11
+
12
+ set :root, File.join(File.dirname(__FILE__), 'server')
13
+
14
+ helpers do
15
+ def render_tree_bean_attributes(path, bean)
16
+ return '' unless bean.bean_has_attributes?
17
+ partial :tree_bean_attributes, :locals => {:path => path, :bean => bean}
18
+ end
19
+
20
+ def render_tree_bean_operations(path, bean)
21
+ return '' unless bean.bean_has_operations?
22
+ partial :tree_bean_operations, :locals => {:path => path, :bean => bean}
23
+ end
24
+
25
+ def render_tree_bean_children(parent_path, parent_bean)
26
+ val = ''
27
+ parent_bean.bean_children.each do |name, bean|
28
+ #puts "in child name=#{name} bean=#{bean}"
29
+ path = "#{parent_path}/#{name}"
30
+ val << partial(:tree_bean, :locals => {:path => path, :name =>name, :bean => bean})
31
+ end
32
+ val
33
+ end
34
+
35
+ def attributes_path(path)
36
+ URI.escape(path + '/attributes')
37
+ end
38
+
39
+ def attribute_path(path)
40
+ URI.escape(path + '/attribute')
41
+ end
42
+
43
+ def operations_path(path)
44
+ URI.escape(path + '/operations')
45
+ end
46
+
47
+ def operation_path(path)
48
+ URI.escape(path + '/operation')
49
+ end
50
+
51
+ # http://sinatra-book.gittr.com/#implementation_of_rails_style_partials but extract_options! part of ActiveSupport
52
+ # Also look at http://stackoverflow.com/questions/3974878/rendering-a-partial-from-a-haml-file
53
+ def partial(template, options={})
54
+ options.merge!(:layout => false)
55
+ if collection = options.delete(:collection) then
56
+ collection.inject([]) do |buffer, member|
57
+ buffer << haml(template, options.merge(
58
+ :layout => false,
59
+ :locals => {template.to_sym => member}
60
+ )
61
+ )
62
+ end.join("\n")
63
+ else
64
+ haml(template, options)
65
+ end
66
+ end
67
+
68
+ def haml_for_ajax(template, options={})
69
+ layout = request.xhr? ? false : :layout
70
+ options = options.merge(:layout => layout)
71
+ haml template, options
72
+ end
73
+
74
+ def link_to_attributes(path)
75
+ partial :link_to_content, :locals => {:href => attributes_path(path), :name => 'Attributes'}
76
+ end
77
+
78
+ def link_to_attribute(parent_path, rel_path)
79
+ partial :link_to_content, :locals => {:href => attribute_path(parent_path+'/'+rel_path), :name => rel_path}
80
+ end
81
+
82
+ def link_to_operations(path)
83
+ partial :link_to_content, :locals => {:href => operations_path(path), :name => 'Operations'}
84
+ end
85
+
86
+ def link_to_operation(parent_path, rel_path)
87
+ partial :link_to_content, :locals => {:href => operation_path(parent_path+'/'+rel_path), :name => rel_path}
88
+ end
89
+
90
+ def attribute_value_tag(attribute, param_name, value)
91
+ partial :attribute_value_tag, :locals => {:attribute => attribute, :param_name => param_name, :value => value}
92
+ end
93
+
94
+ def name_value_hash(attribute_value_hash)
95
+ hash = {}
96
+ attribute_value_hash.each do |attribute, value|
97
+ if attribute.kind_of?(Rumx::Attribute)
98
+ hash[attribute.name] = value
99
+ elsif attribute.kind_of?(String)
100
+ # It's an embedded bean, attribute is actually the bean name and value is the hash of Attribute/values
101
+ hash[attribute] = name_value_hash(value)
102
+ end
103
+ end
104
+ hash
105
+ end
106
+ end
107
+
108
+ get '/' do
109
+ haml :index
110
+ end
111
+
112
+ get '/*/attributes.?:format?' do
113
+ path = params[:splat][0]
114
+ bean = Bean.find(path.split('/'))
115
+ return 404 unless bean
116
+ # For get we read, then write. post is the other way around.
117
+ if params[:format] == 'json'
118
+ bean.bean_get_and_set_attributes(params).to_json
119
+ else
120
+ haml_for_ajax :content_attributes, :locals => {:get_set_method => :bean_get_and_set_attributes, :params => params, :path => path, :bean => bean}
121
+ end
122
+ end
123
+
124
+ post '/*/attributes.?:format?' do
125
+ path = params[:splat][0]
126
+ bean = Bean.find(path.split('/'))
127
+ return 404 unless bean
128
+ #puts "params=#{params.inspect}"
129
+ # For post we write, then read. get is the other way around.
130
+ if params[:format] == 'json'
131
+ bean.bean_set_and_get_attributes(params).to_json
132
+ else
133
+ haml_for_ajax :content_attributes, :locals => {:get_set_method => :bean_set_and_get_attributes, :params => params, :path => path, :bean => bean}
134
+ end
135
+ end
136
+
137
+ get '/*/attribute.?:format?' do
138
+ path = params[:splat][0]
139
+ bean, attribute, param_name, value = Bean.find_attribute(path.split('/'))
140
+ return 404 unless bean
141
+ if params[:format] == 'json'
142
+ else
143
+ haml_for_ajax :content_attribute, :locals => {:path => '/' + path, :bean => bean, :attribute => attribute, :param_name => param_name, :value => value}
144
+ end
145
+ end
146
+
147
+ post '/*/attribute.?:format?' do
148
+ path = params[:splat][0]
149
+ bean, attribute, param_name, value = Bean.find_attribute(path.split('/'))
150
+ return 404 unless bean
151
+ bean.bean_set_attributes(params)
152
+ # Do it again to get the updated value
153
+ bean, attribute, param_name, value = Bean.find_attribute(path.split('/'))
154
+ if params[:format] == 'json'
155
+ else
156
+ haml_for_ajax :content_attribute, :locals => {:path => '/' + path, :bean => bean, :attribute => attribute, :param_name => param_name, :value => value}
157
+ end
158
+ end
159
+
160
+ get '/*/operations' do
161
+ path = params[:splat][0]
162
+ bean = Bean.find(path.split('/'))
163
+ return 404 unless bean
164
+ haml_for_ajax :content_operations, :locals => {:path => '/' + path, :bean => bean}
165
+ end
166
+
167
+ get '/*/operation.?:format?' do
168
+ path = params[:splat][0]
169
+ bean, operation = Bean.find_operation(path.split('/'))
170
+ return 404 unless bean
171
+ if params[:format] == 'json'
172
+ else
173
+ haml_for_ajax :content_operation, :locals => {:path => '/' + path, :bean => bean, :operation => operation}
174
+ end
175
+ end
176
+
177
+ post '/*/operation.?:format?' do
178
+ path = params[:splat][0]
179
+ bean, operation = Bean.find_operation(path.split('/'))
180
+ return 404 unless bean
181
+ operation.run(bean, params).to_json
182
+ end
183
+
184
+ end
185
+ end
data/lib/rumx/type.rb ADDED
@@ -0,0 +1,36 @@
1
+ module Rumx
2
+ class Type
3
+ attr_reader :name
4
+
5
+ def self.find(type_name)
6
+ type = @@allowed_types[type_name.to_sym]
7
+ raise "No such type=#{type_name} in Rumx::Type" unless type
8
+ type
9
+ end
10
+
11
+ def initialize(name, string_to_value_proc, value_to_string_proc=lambda{|v| v.to_s})
12
+ @name = name
13
+ @string_to_value_proc = string_to_value_proc
14
+ @value_to_string_proc = value_to_string_proc
15
+ end
16
+
17
+ def string_to_value(string)
18
+ @string_to_value_proc.call(string)
19
+ end
20
+
21
+ def to_s
22
+ @name.to_s
23
+ end
24
+
25
+ @@allowed_types = {
26
+ :integer => new(:integer, lambda {|s| s.to_i}),
27
+ :float => new(:float, lambda {|s| s.to_f}),
28
+ :string => new(:string, lambda {|s| s.to_s}),
29
+ :boolean => new(:boolean, lambda {|s| s.to_s == 'true'}),
30
+ :void => new(:void, lambda {|s| nil}, lambda {|v| ''})
31
+ }
32
+
33
+ # We've created all the instances we need
34
+ private_class_method :new
35
+ end
36
+ end
data/lib/rumx.rb ADDED
@@ -0,0 +1,7 @@
1
+ require 'rumx/argument'
2
+ require 'rumx/attribute'
3
+ require 'rumx/operation'
4
+ require 'rumx/bean'
5
+ require 'rumx/type'
6
+ require 'rumx/server'
7
+ require 'rumx/beans'
metadata ADDED
@@ -0,0 +1,123 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rumx
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Brad Pardee
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-11-15 00:00:00 Z
14
+ dependencies: []
15
+
16
+ description: A Ruby version of JMX
17
+ email:
18
+ - bradpardee@gmail.com
19
+ executables: []
20
+
21
+ extensions: []
22
+
23
+ extra_rdoc_files: []
24
+
25
+ files:
26
+ - examples/bean_list/config.ru
27
+ - examples/bean_list/my_bean.rb
28
+ - examples/bean_list/README
29
+ - examples/embedded/config.ru
30
+ - examples/embedded/my_bean.rb
31
+ - examples/embedded/my_embedded_bean.rb
32
+ - examples/embedded/README
33
+ - examples/list/config.ru
34
+ - examples/list/my_bean.rb
35
+ - examples/list/README
36
+ - examples/simple/config.ru
37
+ - examples/simple/my_bean.rb
38
+ - examples/simple/README
39
+ - examples/timer/config.ru
40
+ - examples/timer/my_bean.rb
41
+ - examples/timer/README
42
+ - lib/rumx.rb
43
+ - lib/rumx/argument.rb
44
+ - lib/rumx/attribute.rb
45
+ - lib/rumx/bean.rb
46
+ - lib/rumx/beans.rb
47
+ - lib/rumx/operation.rb
48
+ - lib/rumx/server.rb
49
+ - lib/rumx/type.rb
50
+ - lib/rumx/beans/folder.rb
51
+ - lib/rumx/beans/message.rb
52
+ - lib/rumx/beans/timer.rb
53
+ - lib/rumx/server/public/attribute_test.html
54
+ - lib/rumx/server/public/jquery-ui-1.8.16.custom.min.js
55
+ - lib/rumx/server/public/jquery.jstree.js
56
+ - lib/rumx/server/public/jquery.layout.min-1.2.0.js
57
+ - lib/rumx/server/public/_lib/jquery.cookie.js
58
+ - lib/rumx/server/public/_lib/jquery.hotkeys.js
59
+ - lib/rumx/server/public/_lib/jquery.js
60
+ - lib/rumx/server/public/themes/apple/bg.jpg
61
+ - lib/rumx/server/public/themes/apple/d.png
62
+ - lib/rumx/server/public/themes/apple/dot_for_ie.gif
63
+ - lib/rumx/server/public/themes/apple/style.css
64
+ - lib/rumx/server/public/themes/apple/throbber.gif
65
+ - lib/rumx/server/public/themes/classic/d.gif
66
+ - lib/rumx/server/public/themes/classic/d.png
67
+ - lib/rumx/server/public/themes/classic/dot_for_ie.gif
68
+ - lib/rumx/server/public/themes/classic/style.css
69
+ - lib/rumx/server/public/themes/classic/throbber.gif
70
+ - lib/rumx/server/public/themes/default/d.gif
71
+ - lib/rumx/server/public/themes/default/d.png
72
+ - lib/rumx/server/public/themes/default/style.css
73
+ - lib/rumx/server/public/themes/default/throbber.gif
74
+ - lib/rumx/server/public/themes/default-rtl/d.gif
75
+ - lib/rumx/server/public/themes/default-rtl/d.png
76
+ - lib/rumx/server/public/themes/default-rtl/dots.gif
77
+ - lib/rumx/server/public/themes/default-rtl/style.css
78
+ - lib/rumx/server/public/themes/default-rtl/throbber.gif
79
+ - lib/rumx/server/views/attribute_value_tag.haml
80
+ - lib/rumx/server/views/content_attribute.haml
81
+ - lib/rumx/server/views/content_attributes.haml
82
+ - lib/rumx/server/views/content_operation.haml
83
+ - lib/rumx/server/views/content_operations.haml
84
+ - lib/rumx/server/views/index.haml
85
+ - lib/rumx/server/views/layout.haml
86
+ - lib/rumx/server/views/link_to_content.haml
87
+ - lib/rumx/server/views/tree.haml
88
+ - lib/rumx/server/views/tree_bean.haml
89
+ - lib/rumx/server/views/tree_bean_attributes.haml
90
+ - lib/rumx/server/views/tree_bean_operations.haml
91
+ - LICENSE.txt
92
+ - Rakefile
93
+ - History.md
94
+ - README.md
95
+ homepage: http://github.com/ClarityServices/rumx
96
+ licenses: []
97
+
98
+ post_install_message:
99
+ rdoc_options: []
100
+
101
+ require_paths:
102
+ - lib
103
+ required_ruby_version: !ruby/object:Gem::Requirement
104
+ none: false
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: "0"
109
+ required_rubygems_version: !ruby/object:Gem::Requirement
110
+ none: false
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ version: "0"
115
+ requirements: []
116
+
117
+ rubyforge_project:
118
+ rubygems_version: 1.8.9
119
+ signing_key:
120
+ specification_version: 3
121
+ summary: Ruby Management Extensions
122
+ test_files: []
123
+