dominate 0.6.4 → 0.7.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/dominate.gemspec +1 -0
- data/lib/dominate/version.rb +1 -1
- data/lib/dominate/widget/event.rb +55 -8
- data/lib/dominate/widget/helper.rb +2 -2
- data/lib/dominate/widget.rb +15 -14
- data/test/widget_test.rb +3 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6ca8662354db26898388756f0313d7c2c2966ebd
|
4
|
+
data.tar.gz: e5f26d9caf945d90c0e80e4e809cc4439ef3d62a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 25fd968a2f8c1d1e62b50ce4af62b7c012dbdd99a75c28f78dedbed63423a0f49ec631a8ed016701400b045f3471f301ed378582d6f69018828c0bdfb2e5d6cd
|
7
|
+
data.tar.gz: 5c651fd9fd8f536c53bd5c1c4804a0ad8a24d9f8617b7f0a13ec0f3e4c0bdb947dfdb25e79eb22bdb9ccc9b896dbb7ae61056b2cb8d90ca02db3b30a5abdded2
|
data/dominate.gemspec
CHANGED
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_dependency "nokogiri"
|
22
22
|
spec.add_dependency "tilt"
|
23
23
|
spec.add_dependency "nokogiri-styles"
|
24
|
+
spec.add_dependency "eventable"
|
24
25
|
|
25
26
|
spec.add_development_dependency "bundler", "~> 1.3"
|
26
27
|
spec.add_development_dependency "rake"
|
data/lib/dominate/version.rb
CHANGED
@@ -1,16 +1,63 @@
|
|
1
|
-
require "
|
1
|
+
require "eventable"
|
2
|
+
|
3
|
+
# http://t-a-w.blogspot.com/2010/05/very-simple-parallelization-with-ruby.html
|
4
|
+
class ThreadUtility
|
5
|
+
def self.with_connection(&block)
|
6
|
+
begin
|
7
|
+
yield block
|
8
|
+
rescue Exception => e
|
9
|
+
raise e
|
10
|
+
ensure
|
11
|
+
# Check the connection back in to the connection pool
|
12
|
+
if defined? ActiveRecord
|
13
|
+
ActiveRecord::Base.connection.close if ActiveRecord::Base.connection
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
module Eventable
|
20
|
+
# When the event happens the class where it happens runs this
|
21
|
+
def fire_event(event, *return_value, &block)
|
22
|
+
check_mutex
|
23
|
+
threads = []
|
24
|
+
|
25
|
+
@eventable_mutex.synchronize {
|
26
|
+
|
27
|
+
return false unless @callbacks && @callbacks[event] && !@callbacks[event].empty?
|
28
|
+
|
29
|
+
@callbacks[event].each do |listener_id, callbacks|
|
30
|
+
begin
|
31
|
+
listener = ObjectSpace._id2ref(listener_id)
|
32
|
+
callbacks.each do |callback|
|
33
|
+
threads << Thread.new do
|
34
|
+
ThreadUtility.with_connection do
|
35
|
+
listener.send callback, *return_value, &block
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
rescue RangeError => re
|
40
|
+
# Don't bubble up a missing recycled object, I don't care if it's not there, I just won't call it
|
41
|
+
raise re unless re.message.match(/is recycled object/)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
}
|
45
|
+
|
46
|
+
threads.map(&:join)
|
47
|
+
|
48
|
+
true
|
49
|
+
end
|
50
|
+
end
|
2
51
|
|
3
52
|
module Dominate
|
4
53
|
class Widget
|
5
|
-
class Event
|
6
|
-
include
|
54
|
+
class Event
|
55
|
+
include Eventable
|
7
56
|
|
8
|
-
|
9
|
-
# THIS IS WHAT WILL MAKE SURE EVENTS ARE TRIGGERED
|
10
|
-
changed
|
11
|
-
##################################################
|
57
|
+
event :trigger
|
12
58
|
|
13
|
-
|
59
|
+
def trigger widget_name, widget_event, data = {}
|
60
|
+
fire_event :trigger, widget_name, widget_event, data.to_deep_ostruct
|
14
61
|
end
|
15
62
|
end
|
16
63
|
end
|
@@ -22,7 +22,7 @@ module Dominate
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def render_widget *args
|
25
|
-
Widget.load_all(self, req, res)
|
25
|
+
@dominate_widgets ||= Widget.load_all(self, Event.new, req, res)
|
26
26
|
|
27
27
|
if args.first.kind_of? Hash
|
28
28
|
opts = args.first
|
@@ -61,7 +61,7 @@ module Dominate
|
|
61
61
|
end
|
62
62
|
|
63
63
|
def url_for_event event, options = {}
|
64
|
-
widget_name = options.delete(:widget_name)
|
64
|
+
widget_name = options.delete(:widget_name)
|
65
65
|
"http#{req.env['SERVER_PORT'] == '443' ? 's' : ''}://#{req.env['HTTP_HOST']}#{Dominate.config.widget_url}?widget_event=#{event}&widget_name=#{widget_name}" + (options.any?? '&' + URI.encode_www_form(options) : '')
|
66
66
|
end
|
67
67
|
end
|
data/lib/dominate/widget.rb
CHANGED
@@ -20,8 +20,6 @@ module Dominate
|
|
20
20
|
self.instance_variables.each do |n|
|
21
21
|
app.instance_variable_set n, self.instance_variable_get(n)
|
22
22
|
end
|
23
|
-
|
24
|
-
event.add_observer self, :trigger_event
|
25
23
|
end
|
26
24
|
|
27
25
|
def method_missing method, *args, &block
|
@@ -108,19 +106,16 @@ module Dominate
|
|
108
106
|
|
109
107
|
def trigger widget_event, data = {}
|
110
108
|
data = data.to_h
|
111
|
-
widget_name = data.delete(:for)
|
109
|
+
widget_name = data.delete(:for) || req.params['widget_name']
|
112
110
|
|
113
|
-
|
114
|
-
w.trigger_event (widget_name || req.params['widget_name']), widget_event,
|
115
|
-
data.to_deep_ostruct
|
116
|
-
end
|
111
|
+
event.trigger widget_name, widget_event, data.to_h
|
117
112
|
end
|
118
113
|
|
119
114
|
def trigger_event widget_name, widget_event, data = {}
|
120
115
|
if class_events = self.class.events
|
121
116
|
class_events.each do |class_event, opts|
|
122
117
|
if class_event.to_s == widget_event.to_s && (
|
123
|
-
widget_name.to_s == name or
|
118
|
+
widget_name.to_s == name.to_s or
|
124
119
|
opts[:for].to_s == widget_name.to_s
|
125
120
|
)
|
126
121
|
if not opts[:with]
|
@@ -142,7 +137,7 @@ module Dominate
|
|
142
137
|
# resp.reset_html
|
143
138
|
# res.write resp.html
|
144
139
|
if resp.is_a? String
|
145
|
-
html = "<div id='#{id_for(e)}'>#{
|
140
|
+
html = "<div id='#{id_for(e)}'>#{resp}</div>"
|
146
141
|
res.write html
|
147
142
|
else
|
148
143
|
resp
|
@@ -155,6 +150,11 @@ module Dominate
|
|
155
150
|
end
|
156
151
|
end
|
157
152
|
|
153
|
+
def url_for_event event, options = {}
|
154
|
+
widget_name = options.delete(:widget_name) || name
|
155
|
+
"http#{req.env['SERVER_PORT'] == '443' ? 's' : ''}://#{req.env['HTTP_HOST']}#{Dominate.config.widget_url}?widget_event=#{event}&widget_name=#{widget_name}" + (options.any?? '&' + URI.encode_www_form(options) : '')
|
156
|
+
end
|
157
|
+
|
158
158
|
def render *args
|
159
159
|
if args.first.kind_of? Hash
|
160
160
|
locals = args.first
|
@@ -197,9 +197,7 @@ module Dominate
|
|
197
197
|
class << self
|
198
198
|
attr_accessor :events
|
199
199
|
|
200
|
-
def load_all app, req, res
|
201
|
-
event = Event.new res, req
|
202
|
-
|
200
|
+
def load_all app, event, req, res
|
203
201
|
if widget_event = req.params["widget_event"]
|
204
202
|
widget_name = req.params["widget_name"]
|
205
203
|
end
|
@@ -207,10 +205,13 @@ module Dominate
|
|
207
205
|
unless req.env[:loaded_widgets]
|
208
206
|
req.env[:loaded_widgets] ||= {}
|
209
207
|
|
210
|
-
Dominate.config.widgets.each do |name,
|
211
|
-
|
208
|
+
Dominate.config.widgets.each do |name, widget_class_name|
|
209
|
+
widget = Object.const_get(widget_class_name).new(
|
212
210
|
app, res, req, name, event
|
213
211
|
)
|
212
|
+
event.register_for_event(event: :trigger, listener: widget, callback: :trigger_event)
|
213
|
+
|
214
|
+
req.env[:loaded_widgets][name] = widget
|
214
215
|
end
|
215
216
|
end
|
216
217
|
|
data/test/widget_test.rb
CHANGED
@@ -18,7 +18,9 @@ setup do
|
|
18
18
|
Cuba.define do
|
19
19
|
|
20
20
|
on "widgets" do
|
21
|
-
|
21
|
+
@dominate_event ||= Dominate::Widget::Event.new
|
22
|
+
|
23
|
+
widget_name, widget_event, event = Dominate::Widget.load_all self, @dominate_event, req, res
|
22
24
|
|
23
25
|
event.trigger widget_name, widget_event, req.params
|
24
26
|
# res.write "$('head > meta[name=csrf-token]').attr('content', '#{csrf_token}');"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dominate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- cj
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-06-
|
11
|
+
date: 2014-06-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: eventable
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: bundler
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|