glimmer 0.3.5 → 0.4.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.
- checksums.yaml +4 -4
- data/README.markdown +94 -32
- data/lib/glimmer.rb +4 -6
- data/lib/glimmer/command_handler.rb +10 -0
- data/lib/glimmer/command_handler_chain_factory.rb +32 -0
- data/lib/glimmer/command_handler_chain_link.rb +21 -0
- data/lib/{command_handlers.rb → glimmer/command_handlers.rb} +21 -17
- data/lib/glimmer/command_handlers/bind_command_handler.rb +51 -0
- data/lib/glimmer/command_handlers/color_command_handler.rb +26 -0
- data/lib/glimmer/command_handlers/combo_selection_data_binding_command_handler.rb +40 -0
- data/lib/glimmer/command_handlers/data_binding_command_handler.rb +69 -0
- data/lib/glimmer/command_handlers/display_command_handler.rb +16 -0
- data/lib/glimmer/command_handlers/list_selection_data_binding_command_handler.rb +45 -0
- data/lib/glimmer/command_handlers/models/g_color.rb +34 -0
- data/lib/glimmer/command_handlers/models/g_display.rb +26 -0
- data/lib/glimmer/command_handlers/models/g_font.rb +62 -0
- data/lib/glimmer/command_handlers/models/g_runnable.rb +13 -0
- data/lib/glimmer/command_handlers/models/g_shell.rb +27 -0
- data/lib/glimmer/command_handlers/models/g_swt.rb +22 -0
- data/lib/glimmer/command_handlers/models/g_tab_item_composite.rb +33 -0
- data/lib/glimmer/command_handlers/models/g_widget.rb +199 -0
- data/lib/glimmer/command_handlers/models/g_widget_listener.rb +11 -0
- data/lib/glimmer/command_handlers/models/list_selection_binding.rb +47 -0
- data/lib/glimmer/command_handlers/models/model_binding.rb +206 -0
- data/lib/glimmer/command_handlers/models/observable.rb +11 -0
- data/lib/glimmer/command_handlers/models/observable_array.rb +104 -0
- data/lib/glimmer/command_handlers/models/observable_model.rb +105 -0
- data/lib/glimmer/command_handlers/models/observer.rb +115 -0
- data/lib/glimmer/command_handlers/models/table_items_binding.rb +45 -0
- data/lib/glimmer/command_handlers/models/tree_items_binding.rb +49 -0
- data/lib/glimmer/command_handlers/models/widget_binding.rb +29 -0
- data/lib/glimmer/command_handlers/shell_command_handler.rb +17 -0
- data/lib/glimmer/command_handlers/tab_item_command_handler.rb +21 -0
- data/lib/glimmer/command_handlers/table_column_properties_data_binding_command_handler.rb +25 -0
- data/lib/glimmer/command_handlers/table_items_data_binding_command_handler.rb +30 -0
- data/lib/glimmer/command_handlers/tree_items_data_binding_command_handler.rb +29 -0
- data/lib/glimmer/command_handlers/tree_properties_data_binding_command_handler.rb +25 -0
- data/lib/glimmer/command_handlers/widget_command_handler.rb +22 -0
- data/lib/glimmer/command_handlers/widget_listener_command_handler.rb +39 -0
- data/lib/glimmer/command_handlers/widget_method_command_handler.rb +21 -0
- data/lib/glimmer/parent.rb +7 -0
- data/lib/{shine.rb → glimmer/shine.rb} +1 -1
- data/lib/glimmer/swt_packages.rb +13 -0
- data/lib/{xml_command_handlers.rb → glimmer/xml_command_handlers.rb} +10 -8
- data/lib/glimmer/xml_command_handlers/html_command_handler.rb +47 -0
- data/lib/glimmer/xml_command_handlers/models/depth_first_search_iterator.rb +19 -0
- data/lib/glimmer/xml_command_handlers/models/name_space_visitor.rb +20 -0
- data/lib/glimmer/xml_command_handlers/models/node.rb +82 -0
- data/lib/glimmer/xml_command_handlers/models/node_visitor.rb +11 -0
- data/lib/glimmer/xml_command_handlers/models/xml_visitor.rb +61 -0
- data/lib/glimmer/xml_command_handlers/xml_command_handler.rb +20 -0
- data/lib/glimmer/xml_command_handlers/xml_name_space_command_handler.rb +33 -0
- data/lib/glimmer/xml_command_handlers/xml_tag_command_handler.rb +25 -0
- data/lib/glimmer/xml_command_handlers/xml_text_command_handler.rb +21 -0
- metadata +53 -54
- data/lib/command_handler.rb +0 -8
- data/lib/command_handler_chain_factory.rb +0 -30
- data/lib/command_handler_chain_link.rb +0 -19
- data/lib/command_handlers/bind_command_handler.rb +0 -49
- data/lib/command_handlers/color_command_handler.rb +0 -24
- data/lib/command_handlers/combo_selection_data_binding_command_handler.rb +0 -38
- data/lib/command_handlers/data_binding_command_handler.rb +0 -67
- data/lib/command_handlers/list_selection_data_binding_command_handler.rb +0 -43
- data/lib/command_handlers/models/block_observer.rb +0 -14
- data/lib/command_handlers/models/list_selection_binding.rb +0 -45
- data/lib/command_handlers/models/model_binding.rb +0 -205
- data/lib/command_handlers/models/observable.rb +0 -9
- data/lib/command_handlers/models/observable_array.rb +0 -102
- data/lib/command_handlers/models/observable_model.rb +0 -103
- data/lib/command_handlers/models/observer.rb +0 -88
- data/lib/command_handlers/models/r_color.rb +0 -32
- data/lib/command_handlers/models/r_font.rb +0 -60
- data/lib/command_handlers/models/r_runnable.rb +0 -11
- data/lib/command_handlers/models/r_shell.rb +0 -24
- data/lib/command_handlers/models/r_swt.rb +0 -18
- data/lib/command_handlers/models/r_tab_item_composite.rb +0 -31
- data/lib/command_handlers/models/r_widget.rb +0 -183
- data/lib/command_handlers/models/r_widget_listener.rb +0 -9
- data/lib/command_handlers/models/table_items_binding.rb +0 -43
- data/lib/command_handlers/models/tree_items_binding.rb +0 -47
- data/lib/command_handlers/models/widget_binding.rb +0 -27
- data/lib/command_handlers/shell_command_handler.rb +0 -15
- data/lib/command_handlers/tab_item_command_handler.rb +0 -19
- data/lib/command_handlers/table_column_properties_data_binding_command_handler.rb +0 -23
- data/lib/command_handlers/table_items_data_binding_command_handler.rb +0 -28
- data/lib/command_handlers/tree_items_data_binding_command_handler.rb +0 -27
- data/lib/command_handlers/tree_properties_data_binding_command_handler.rb +0 -23
- data/lib/command_handlers/widget_command_handler.rb +0 -20
- data/lib/command_handlers/widget_listener_command_handler.rb +0 -37
- data/lib/command_handlers/widget_method_command_handler.rb +0 -19
- data/lib/parent.rb +0 -5
- data/lib/string.rb +0 -8
- data/lib/swt_packages.rb +0 -11
- data/lib/symbol.rb +0 -10
- data/lib/xml_command_handlers/html_command_handler.rb +0 -45
- data/lib/xml_command_handlers/models/depth_first_search_iterator.rb +0 -17
- data/lib/xml_command_handlers/models/name_space_visitor.rb +0 -18
- data/lib/xml_command_handlers/models/node.rb +0 -80
- data/lib/xml_command_handlers/models/node_visitor.rb +0 -9
- data/lib/xml_command_handlers/models/xml_visitor.rb +0 -59
- data/lib/xml_command_handlers/xml_command_handler.rb +0 -18
- data/lib/xml_command_handlers/xml_name_space_command_handler.rb +0 -31
- data/lib/xml_command_handlers/xml_tag_command_handler.rb +0 -23
- data/lib/xml_command_handlers/xml_text_command_handler.rb +0 -19
@@ -1,23 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + "/../command_handler"
|
2
|
-
require File.dirname(__FILE__) + "/models/r_widget"
|
3
|
-
|
4
|
-
# Responsible for providing a readable keyword (command symbol) to capture
|
5
|
-
# and return tree properties for use in TreeItemsDataBindingCommandHandler
|
6
|
-
class TreePropertiesDataBindingCommandHandler
|
7
|
-
include CommandHandler
|
8
|
-
|
9
|
-
include_package 'org.eclipse.swt'
|
10
|
-
include_package 'org.eclipse.swt.widgets'
|
11
|
-
|
12
|
-
def can_handle?(parent, command_symbol, *args, &block)
|
13
|
-
parent.is_a?(RWidget) and
|
14
|
-
parent.widget.is_a?(Tree) and
|
15
|
-
command_symbol.to_s == "tree_properties" and
|
16
|
-
block == nil
|
17
|
-
end
|
18
|
-
|
19
|
-
def do_handle(parent, command_symbol, *args, &block)
|
20
|
-
args
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + "/../command_handler"
|
2
|
-
require File.dirname(__FILE__) + "/models/r_widget"
|
3
|
-
|
4
|
-
class WidgetCommandHandler
|
5
|
-
include CommandHandler
|
6
|
-
|
7
|
-
include_package 'org.eclipse.swt.widgets'
|
8
|
-
|
9
|
-
def can_handle?(parent, command_symbol, *args, &block)
|
10
|
-
parent.is_a?(RWidget) and
|
11
|
-
command_symbol.to_s != "shell" and
|
12
|
-
RWidget.widget_exists?(command_symbol.to_s)
|
13
|
-
end
|
14
|
-
|
15
|
-
def do_handle(parent, command_symbol, *args, &block)
|
16
|
-
Glimmer.logger.debug "widget styles are: " + args.inspect
|
17
|
-
RWidget.new(command_symbol.to_s, parent.widget, args)
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + "/../command_handler"
|
2
|
-
require File.dirname(__FILE__) + "/models/r_widget"
|
3
|
-
|
4
|
-
class WidgetListenerCommandHandler
|
5
|
-
include CommandHandler
|
6
|
-
|
7
|
-
include_package 'org.eclipse.swt.widgets'
|
8
|
-
|
9
|
-
def can_handle?(parent, command_symbol, *args, &block)
|
10
|
-
Glimmer.logger.debug "parent is a widget: " + (parent.is_a?(RWidget)).to_s
|
11
|
-
return unless parent.is_a?(RWidget)
|
12
|
-
Glimmer.logger.debug "on listener?: " + (command_symbol.to_s[0,3] == "on_").to_s
|
13
|
-
return unless command_symbol.to_s[0,3] == "on_"
|
14
|
-
Glimmer.logger.debug "command symbol is longer than 3: " + (command_symbol.to_s.length > 3).to_s
|
15
|
-
return unless command_symbol.to_s.length > 3
|
16
|
-
Glimmer.logger.debug "args are 0?: " + (args.size == 0).to_s
|
17
|
-
return unless args.size == 0
|
18
|
-
Glimmer.logger.debug "can add listener? " + (parent.can_add_listener?(command_symbol.to_s[3, command_symbol.to_s.length])).to_s
|
19
|
-
parent.can_add_listener?(command_symbol.to_s[3, command_symbol.to_s.length])
|
20
|
-
end
|
21
|
-
|
22
|
-
def do_handle(parent, command_symbol, *args, &block)
|
23
|
-
parent.add_listener(command_symbol.to_s[3, command_symbol.to_s.length], &block)
|
24
|
-
ListenerParent.new #TODO refactor and move to models
|
25
|
-
end
|
26
|
-
|
27
|
-
#TODO refactor and move to separate file
|
28
|
-
class ListenerParent
|
29
|
-
include Parent
|
30
|
-
|
31
|
-
def process_block(block)
|
32
|
-
#NOOP
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + "/../command_handler"
|
2
|
-
require File.dirname(__FILE__) + "/models/r_widget"
|
3
|
-
|
4
|
-
class WidgetMethodCommandHandler
|
5
|
-
include CommandHandler
|
6
|
-
|
7
|
-
def can_handle?(parent, command_symbol, *args, &block)
|
8
|
-
parent.is_a?(RWidget) and
|
9
|
-
args.size > 0 and
|
10
|
-
block == nil and
|
11
|
-
parent.has_attribute?(command_symbol, *args)
|
12
|
-
end
|
13
|
-
|
14
|
-
def do_handle(parent, command_symbol, *args, &block)
|
15
|
-
parent.set_attribute(command_symbol, *args)
|
16
|
-
nil
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|
data/lib/parent.rb
DELETED
data/lib/string.rb
DELETED
data/lib/swt_packages.rb
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
# edit to add more packages and support custom widgets
|
2
|
-
module SwtPackages
|
3
|
-
def self.included(klass)
|
4
|
-
klass.class_eval do
|
5
|
-
include_package 'org.eclipse.swt'
|
6
|
-
include_package 'org.eclipse.swt.widgets'
|
7
|
-
include_package 'org.eclipse.swt.layout'
|
8
|
-
include_package 'org.eclipse.swt.graphics'
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
data/lib/symbol.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + "/../command_handler"
|
2
|
-
require File.dirname(__FILE__) + "/models/node"
|
3
|
-
|
4
|
-
class HtmlCommandHandler
|
5
|
-
include CommandHandler
|
6
|
-
|
7
|
-
def can_handle?(parent, command_symbol, *args, &block)
|
8
|
-
(parent == nil or parent.is_a?(Node)) and
|
9
|
-
(args.size == 0 or ((args.size == 1) and ((args[0].is_a?(Hash)) or (args[0].is_a?(Hash)))))
|
10
|
-
end
|
11
|
-
|
12
|
-
def do_handle(parent, command_symbol, *args, &block)
|
13
|
-
attributes = Hash.new
|
14
|
-
attributes = args[0] if (args.size == 1)
|
15
|
-
append_id_and_class_attributes(command_symbol.to_s, attributes)
|
16
|
-
tag_name = parse_tag_name(command_symbol.to_s)
|
17
|
-
Node.new(parent, tag_name, attributes, &block)
|
18
|
-
end
|
19
|
-
|
20
|
-
def parse_tag_name(command)
|
21
|
-
match_data = command.match("_")
|
22
|
-
if (match_data.to_a.size > 0)
|
23
|
-
command.match("_").pre_match
|
24
|
-
else
|
25
|
-
command
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def append_id_and_class_attributes(command, attributes)
|
30
|
-
class_only_match = command.match("__.+").to_s
|
31
|
-
if class_only_match.length > 0
|
32
|
-
class_value = class_only_match[2, class_only_match.length]
|
33
|
-
else
|
34
|
-
match_data = command.match("_[^_]+")
|
35
|
-
return unless match_data
|
36
|
-
match = match_data.to_s
|
37
|
-
id_value = match[1, match.length] if match.length > 0
|
38
|
-
attributes[:id] = id_value if id_value
|
39
|
-
match2 = match_data.post_match.match("_[^_]+").to_s if match_data.post_match
|
40
|
-
class_value = match2[1, match2.length] if match2.length > 0
|
41
|
-
end
|
42
|
-
attributes[:class] = class_value if class_value
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
class DepthFirstSearchIterator
|
2
|
-
def initialize(node, node_visitor)
|
3
|
-
@node = node
|
4
|
-
@node_visitor = node_visitor
|
5
|
-
end
|
6
|
-
|
7
|
-
def iterate
|
8
|
-
process(@node)
|
9
|
-
end
|
10
|
-
|
11
|
-
def process(node)
|
12
|
-
@node_visitor.process_before_children(node)
|
13
|
-
node.children.each { |child| process(child) } unless node.is_a?(String)
|
14
|
-
@node_visitor.process_after_children(node)
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + "/node_visitor"
|
2
|
-
|
3
|
-
class NameSpaceVisitor < NodeVisitor
|
4
|
-
|
5
|
-
def initialize(name_space_name)
|
6
|
-
@name_space_name = name_space_name
|
7
|
-
end
|
8
|
-
|
9
|
-
def process_before_children(node)
|
10
|
-
return if node.is_a?(String)
|
11
|
-
node.name_space = Node.new(nil, @name_space_name, nil) if node and !node.name_space
|
12
|
-
end
|
13
|
-
|
14
|
-
def process_after_children(node)
|
15
|
-
#NOOP
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
@@ -1,80 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + "/depth_first_search_iterator"
|
2
|
-
require File.dirname(__FILE__) + "/xml_visitor"
|
3
|
-
|
4
|
-
class Node
|
5
|
-
include Parent, Glimmer
|
6
|
-
|
7
|
-
attr_accessor :children, :name, :contents, :attributes, :is_name_space, :is_attribute, :name_space, :parent
|
8
|
-
|
9
|
-
def initialize(parent, name, attributes, &contents)
|
10
|
-
@is_name_space = false
|
11
|
-
@children = []
|
12
|
-
@parent = parent
|
13
|
-
if (parent and parent.is_name_space)
|
14
|
-
@name_space = parent
|
15
|
-
@parent = @name_space.parent
|
16
|
-
end
|
17
|
-
@parent.children << self if @parent
|
18
|
-
@name = name
|
19
|
-
@contents = contents
|
20
|
-
@attributes = attributes
|
21
|
-
if @attributes
|
22
|
-
@attributes.each_key do |attribute|
|
23
|
-
if attribute.is_a?(Node)
|
24
|
-
attribute.is_attribute = true
|
25
|
-
attribute.parent.children.delete(attribute) if attribute.parent
|
26
|
-
attribute.parent = nil #attributes do not usually have parents
|
27
|
-
end
|
28
|
-
end
|
29
|
-
Glimmer.logger.debug(attributes)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def method_missing(symbol, *args, &block)
|
34
|
-
@is_name_space = true
|
35
|
-
parent.children.delete(self) if parent
|
36
|
-
Glimmer.add_contents(self) {@tag = super}
|
37
|
-
@tag
|
38
|
-
end
|
39
|
-
|
40
|
-
def to_xml
|
41
|
-
xml_visitor = XmlVisitor.new
|
42
|
-
DepthFirstSearchIterator.new(self, xml_visitor).iterate
|
43
|
-
xml_visitor.document
|
44
|
-
end
|
45
|
-
|
46
|
-
def process_block(block)
|
47
|
-
return_value = block.call(@widget)
|
48
|
-
if return_value.is_a?(String) and !@children.include?(return_value)
|
49
|
-
text = return_value
|
50
|
-
first_match = text.match(/[#][^{]+[{][^}]+[}]/)
|
51
|
-
match = first_match
|
52
|
-
while (match)
|
53
|
-
Glimmer.module_eval(text_command(match.pre_match))
|
54
|
-
tag_text = match.to_s
|
55
|
-
Glimmer.module_eval(rubyize(tag_text))
|
56
|
-
text = tag_text
|
57
|
-
post_match = match.post_match
|
58
|
-
match = text.match(/[#]\w+[{]\w+[}]/)
|
59
|
-
end
|
60
|
-
Glimmer.module_eval(text_command(post_match)) if post_match
|
61
|
-
@children << return_value unless first_match
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
def text_command(text)
|
66
|
-
"text \"#{text}\""
|
67
|
-
end
|
68
|
-
|
69
|
-
def rubyize(text)
|
70
|
-
text = text.gsub(/[}]/, '"}')
|
71
|
-
text = text.gsub(/[{]/, '{"')
|
72
|
-
text = text.gsub(/[#]/, '')
|
73
|
-
end
|
74
|
-
|
75
|
-
#override Object default id method and route it to Glimmer engine
|
76
|
-
def id
|
77
|
-
method_missing(:id)
|
78
|
-
end
|
79
|
-
|
80
|
-
end
|
@@ -1,59 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + "/node_visitor"
|
2
|
-
|
3
|
-
class XmlVisitor < NodeVisitor
|
4
|
-
|
5
|
-
attr_reader :document
|
6
|
-
|
7
|
-
def initialize
|
8
|
-
@document = ""
|
9
|
-
end
|
10
|
-
|
11
|
-
def process_before_children(node)
|
12
|
-
if (node.is_a?(String))
|
13
|
-
@document << node
|
14
|
-
return
|
15
|
-
end
|
16
|
-
begin_open_tag(node)
|
17
|
-
append_attributes(node) if node.attributes
|
18
|
-
end_open_tag(node)
|
19
|
-
end
|
20
|
-
|
21
|
-
def process_after_children(node)
|
22
|
-
return if (node.is_a?(String))
|
23
|
-
append_close_tag(node)
|
24
|
-
end
|
25
|
-
|
26
|
-
def begin_open_tag(node)
|
27
|
-
@document << "<"
|
28
|
-
@document << "#{node.name_space.name}:" if node.name_space
|
29
|
-
@document << node.name
|
30
|
-
end
|
31
|
-
|
32
|
-
def end_open_tag(node)
|
33
|
-
if (node.contents)
|
34
|
-
@document << ">"
|
35
|
-
else
|
36
|
-
@document << " " if node.attributes.keys.size > 0
|
37
|
-
@document << "/>"
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def append_close_tag(node)
|
42
|
-
if (node.contents)
|
43
|
-
@document << "</"
|
44
|
-
@document << "#{node.name_space.name}:" if node.name_space
|
45
|
-
@document << "#{node.name}>"
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def append_attributes(node)
|
50
|
-
Glimmer.logger.debug "Take 3"
|
51
|
-
Glimmer.logger.debug(node.attributes)
|
52
|
-
node.attributes.each_key do |attribute|
|
53
|
-
attribute_name = attribute
|
54
|
-
attribute_name = "#{attribute.name_space.name}:#{attribute.name}" if attribute.is_a?(Node)
|
55
|
-
@document << " #{attribute_name}=\"#{node.attributes[attribute]}\""
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + "/../command_handler"
|
2
|
-
require File.dirname(__FILE__) + "/models/node"
|
3
|
-
|
4
|
-
class XmlCommandHandler
|
5
|
-
include CommandHandler
|
6
|
-
|
7
|
-
def can_handle?(parent, command_symbol, *args, &block)
|
8
|
-
(parent == nil or parent.is_a?(Node)) and
|
9
|
-
(args.size == 0 or ((args.size == 1) and ((args[0].is_a?(Hash)) or (args[0].is_a?(Hash)))))
|
10
|
-
end
|
11
|
-
|
12
|
-
def do_handle(parent, command_symbol, *args, &block)
|
13
|
-
attributes = Hash.new
|
14
|
-
attributes = args[0] if (args.size == 1)
|
15
|
-
Node.new(parent, command_symbol.to_s, attributes, &block)
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + "/../command_handler"
|
2
|
-
require File.dirname(__FILE__) + "/models/node"
|
3
|
-
require File.dirname(__FILE__) + "/models/depth_first_search_iterator"
|
4
|
-
require File.dirname(__FILE__) + "/models/name_space_visitor"
|
5
|
-
|
6
|
-
class XmlNameSpaceCommandHandler
|
7
|
-
include CommandHandler, Glimmer
|
8
|
-
|
9
|
-
def can_handle?(parent, command_symbol, *args, &block)
|
10
|
-
(parent == nil or parent.is_a?(Node)) and
|
11
|
-
(command_symbol.to_s == "name_space")
|
12
|
-
(args.size == 1) and
|
13
|
-
(args[0].is_a?(Symbol)) and
|
14
|
-
block
|
15
|
-
end
|
16
|
-
|
17
|
-
def do_handle(parent, command_symbol, *args, &block)
|
18
|
-
node = block.call
|
19
|
-
unless node.is_a?(String)
|
20
|
-
name_space_visitor = NameSpaceVisitor.new(args[0].to_s)
|
21
|
-
DepthFirstSearchIterator.new(node, name_space_visitor).iterate
|
22
|
-
def node.process_block(block)
|
23
|
-
Glimmer.logger.debug 'block'
|
24
|
-
#NOOP
|
25
|
-
end
|
26
|
-
end
|
27
|
-
parent.children << node if parent and !parent.children.include?(node)
|
28
|
-
node
|
29
|
-
end
|
30
|
-
|
31
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require "facets"
|
2
|
-
require File.dirname(__FILE__) + "/../command_handler"
|
3
|
-
require File.dirname(__FILE__) + "/models/node"
|
4
|
-
|
5
|
-
class XmlTagCommandHandler
|
6
|
-
include CommandHandler
|
7
|
-
|
8
|
-
def can_handle?(parent, command_symbol, *args, &block)
|
9
|
-
(parent == nil or parent.is_a?(Node)) and
|
10
|
-
(command_symbol.to_s == "tag") and
|
11
|
-
((args.size == 1) and ((args[0].is_a?(Hash)) or (args[0].is_a?(Hash)))) and
|
12
|
-
args[0].include?(:_name)
|
13
|
-
end
|
14
|
-
|
15
|
-
def do_handle(parent, command_symbol, *args, &block)
|
16
|
-
attributes = nil
|
17
|
-
attributes = args[0] if (args.size == 1)
|
18
|
-
tag_name = attributes[:_name]
|
19
|
-
attributes.delete(:_name)
|
20
|
-
Node.new(parent, tag_name, attributes, &block)
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|