Class: Shoes::DisplayService
- Inherits:
-
Object
- Object
- Shoes::DisplayService
show all
- Extended by:
- Log
- Defined in:
- lacci/lib/shoes/display_service.rb
Constant Summary
Constants included
from Log
Log::DEFAULT_COMPONENT, Log::DEFAULT_DEBUG_LOG_CONFIG, Log::DEFAULT_LOG_CONFIG
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Log
configure_logger, log_init, logger
Class Method Details
.dispatch_event(event_name, event_target, *args, **kwargs) ⇒ Object
An event_target may be nil, to indicate there is no target.
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
# File 'lacci/lib/shoes/display_service.rb', line 36
def dispatch_event(event_name, event_target, *args, **kwargs)
@@display_event_handlers ||= {}
unless @log
log_init("DisplayService")
end
raise "Cannot dispatch on event_name :any!" if event_name == :any
@log.debug("Dispatch event: #{event_name.inspect} T: #{event_target.inspect} A: #{args.inspect} KW: #{kwargs.inspect}")
if ENV["SCARPE_DEBUG"]
args = JSON.parse JSON.dump(args)
new_kw = {}
kwargs.each do |k, v|
new_kw[k] = JSON.parse JSON.dump(v)
end
kwargs = new_kw
end
same_name_handlers = @@display_event_handlers[event_name] || {}
any_name_handlers = @@display_event_handlers[:any] || {}
handlers = [
same_name_handlers[:any],
same_name_handlers[event_target],
any_name_handlers[:any],
any_name_handlers[event_target],
].compact.inject([], &:+)
kwargs[:event_name] = event_name
kwargs[:event_target] = event_target if event_target
handlers.each { |h| h[:handler].call(*args, **kwargs) }
end
|
.display_service ⇒ Object
120
121
122
123
124
125
126
|
# File 'lacci/lib/shoes/display_service.rb', line 120
def display_service
return @service if @service
raise "No display service was set!" unless @display_service_klass
@service = @display_service_klass.new
end
|
.full_reset! ⇒ Object
109
110
111
112
|
# File 'lacci/lib/shoes/display_service.rb', line 109
def full_reset!
@@display_event_handlers = {}
@json_debug_serialize = nil
end
|
.set_display_service_class(klass) ⇒ Object
114
115
116
117
118
|
# File 'lacci/lib/shoes/display_service.rb', line 114
def set_display_service_class(klass)
raise "Can only set a single display service class!" if @display_service_klass
@display_service_klass = klass
end
|
.subscribe_to_event(event_name, event_target, &handler) ⇒ Object
It's permitted to subscribe to event_name :any for all event names, and event_target :any for all targets.
An event_target of nil means "no target", and only matches events dispatched with a nil target.
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
# File 'lacci/lib/shoes/display_service.rb', line 76
def subscribe_to_event(event_name, event_target, &handler)
@@display_event_handlers ||= {}
@@display_event_unsub_id ||= 0
unless handler
raise "Must pass a block as a handler to DisplayService.subscribe_to_event!"
end
unless @log
log_init("DisplayService")
end
@log.debug("Subscribe to event: #{event_name.inspect} T: #{event_target.inspect}")
id = @@display_event_unsub_id
@@display_event_unsub_id += 1
@@display_event_handlers[event_name] ||= {}
@@display_event_handlers[event_name][event_target] ||= []
@@display_event_handlers[event_name][event_target] << { handler:, unsub_id: id }
id
end
|
.unsub_from_events(unsub_id) ⇒ Object
99
100
101
102
103
104
105
106
107
|
# File 'lacci/lib/shoes/display_service.rb', line 99
def unsub_from_events(unsub_id)
raise "Must provide an unsubscribe ID!" if unsub_id.nil?
@@display_event_handlers.each do |_e_name, target_hash|
target_hash.each do |_target, h_list|
h_list.delete_if { |item| item[:unsub_id] == unsub_id }
end
end
end
|
Instance Method Details
These methods are an interface to DisplayService objects.
131
132
133
|
# File 'lacci/lib/shoes/display_service.rb', line 131
def create_display_widget_for(widget_class_name, widget_id, properties)
raise "Override in DisplayService implementation!"
end
|
#destroy ⇒ Object
149
150
151
|
# File 'lacci/lib/shoes/display_service.rb', line 149
def destroy
raise "Override in DisplayService implementation!"
end
|
140
141
142
143
144
145
146
147
|
# File 'lacci/lib/shoes/display_service.rb', line 140
def query_display_widget_for(id, nil_ok: false)
display_widget = @display_widget_for[id]
unless display_widget || nil_ok
raise "Could not find display widget for linkable ID #{id.inspect}!"
end
display_widget
end
|
135
136
137
138
|
# File 'lacci/lib/shoes/display_service.rb', line 135
def set_widget_pairing(id, display_widget)
@display_widget_for ||= {}
@display_widget_for[id] = display_widget
end
|