roda-component 0.1.33 → 0.1.34
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/lib/roda/component.rb +32 -11
- data/lib/roda/component/version.rb +1 -1
- data/lib/roda/plugins/component.rb +33 -19
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9619f6a2faccd6bdc5c5807da80281688b65fb7b
|
4
|
+
data.tar.gz: 41c4d0675c13804033f5827b28371d92d4a3959f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a908cb1261aad8d41fd009fd1564c687d08f53643da59ac0beb5d1026bdb365f45e31c0257f33767c662123cdc8f14a89a7cde852a28f6d99d6b9d1bee0c8b6
|
7
|
+
data.tar.gz: 2bd4aadf95c10e0604b7e6bbe60b1b6bf6e1d954ac7f6740c7f97547c859ae074a94f24232f3e205cde14fb63d6d52c4f83abf0046d05c937029be44fe7246eb
|
data/lib/roda/component.rb
CHANGED
@@ -105,10 +105,11 @@ class Roda
|
|
105
105
|
end
|
106
106
|
|
107
107
|
class Component
|
108
|
-
|
108
|
+
def initialize(data = false)
|
109
|
+
end
|
109
110
|
|
110
|
-
def
|
111
|
-
@
|
111
|
+
def _initialize(scope = false)
|
112
|
+
@_scope = scope
|
112
113
|
|
113
114
|
if client? && !$component_opts[:faye][:"#{self.class._name}"]
|
114
115
|
$component_opts[:faye][:"#{self.class._name}"] = true
|
@@ -135,11 +136,19 @@ class Roda
|
|
135
136
|
trigger :disconnect
|
136
137
|
end
|
137
138
|
end
|
139
|
+
|
138
140
|
end
|
139
141
|
|
140
142
|
class << self
|
141
143
|
attr_accessor :_name
|
142
144
|
|
145
|
+
def new(*args, &block)
|
146
|
+
obj = self.allocate
|
147
|
+
obj.instance_variable_set :@_scope, args.shift
|
148
|
+
obj.send :initialize, *args, &block
|
149
|
+
obj
|
150
|
+
end
|
151
|
+
|
143
152
|
if RUBY_ENGINE == 'ruby'
|
144
153
|
def inherited(subclass)
|
145
154
|
super
|
@@ -396,13 +405,13 @@ class Roda
|
|
396
405
|
|
397
406
|
if RUBY_ENGINE == 'opal'
|
398
407
|
def component name, options = {}, &block
|
399
|
-
|
400
|
-
|
401
|
-
action = options.delete(:call) || :display
|
402
|
-
trigger = options.delete(:trigger) || false
|
408
|
+
action = options.delete(:call)
|
409
|
+
trigger = options.delete(:trigger)
|
403
410
|
js = options.delete(:js)
|
404
411
|
args = options.delete(:args)
|
405
412
|
|
413
|
+
comp = load_component name, options
|
414
|
+
|
406
415
|
# call action
|
407
416
|
# TODO: make sure the single method parameter isn't a block
|
408
417
|
if trigger
|
@@ -411,7 +420,7 @@ class Roda
|
|
411
420
|
else
|
412
421
|
comp_response = comp.trigger trigger, options
|
413
422
|
end
|
414
|
-
|
423
|
+
elsif action
|
415
424
|
# We want to make sure it's not a method that already exists in ruba
|
416
425
|
# otherwise that would give us a false positive.
|
417
426
|
if comp.methods.include? action
|
@@ -421,12 +430,16 @@ class Roda
|
|
421
430
|
end
|
422
431
|
end
|
423
432
|
|
424
|
-
|
433
|
+
if trigger || action
|
434
|
+
comp_response
|
435
|
+
else
|
436
|
+
comp
|
437
|
+
end
|
425
438
|
end
|
426
439
|
end
|
427
440
|
|
428
|
-
def load_component name
|
429
|
-
component_opts[:class_name][name].split('::').inject(Object) {|o,c| o.const_get(c)}.new self
|
441
|
+
def load_component name, options = {}
|
442
|
+
component_opts[:class_name][name].split('::').inject(Object) {|o,c| o.const_get(c)}.new self. options
|
430
443
|
end
|
431
444
|
|
432
445
|
def render_fields data, options = {}
|
@@ -531,8 +544,16 @@ class Roda
|
|
531
544
|
end
|
532
545
|
end
|
533
546
|
|
547
|
+
def render *args, &block
|
548
|
+
display *args, &block
|
549
|
+
end
|
550
|
+
|
534
551
|
private
|
535
552
|
|
553
|
+
def scope
|
554
|
+
@_scope
|
555
|
+
end
|
556
|
+
|
536
557
|
def from_server?
|
537
558
|
if request
|
538
559
|
!request.env.include?('HTTP_X_RODA_COMPONENT_ON_SERVER')
|
@@ -63,13 +63,15 @@ class Roda
|
|
63
63
|
request.env['loaded_component_js'] ||= []
|
64
64
|
end
|
65
65
|
|
66
|
-
def load_component name
|
67
|
-
Object.const_get(
|
66
|
+
def load_component name, options = {}
|
67
|
+
c = Object.const_get(
|
68
68
|
component_opts[:class_name][name.to_s]
|
69
|
-
)
|
69
|
+
)
|
70
|
+
|
71
|
+
c.new self, options
|
70
72
|
end
|
71
73
|
|
72
|
-
def load_component_js comp, action =
|
74
|
+
def load_component_js comp, action = false, options = {}
|
73
75
|
# grab a copy of the cache
|
74
76
|
cache = comp.class.cache.dup
|
75
77
|
# remove html and dom cache as we don't need that for the client
|
@@ -87,6 +89,8 @@ class Roda
|
|
87
89
|
}.uniq.first.gsub("#{Dir.pwd}/#{component_opts[:path]}", '').gsub(/\.rb\Z/, '.js')
|
88
90
|
|
89
91
|
js = <<-EOF
|
92
|
+
action = '#{action || 'false'}'
|
93
|
+
|
90
94
|
unless $faye
|
91
95
|
$faye = Roda::Component::Faye.new('/faye')
|
92
96
|
end
|
@@ -100,10 +104,14 @@ class Roda
|
|
100
104
|
$component_opts[:comp][:"#{comp_name}"] = true
|
101
105
|
`$.getScript("/#{component_opts[:assets_route]}#{file_path}", function(){`
|
102
106
|
Document.ready? do
|
103
|
-
|
107
|
+
if action != 'false'
|
108
|
+
c = $component_opts[:comp][:"#{comp_name}"] = #{comp.class}.new
|
109
|
+
else
|
110
|
+
c = $component_opts[:comp][:"#{comp_name}"] = #{comp.class}.new(JSON.parse(Base64.decode64('#{options}')))
|
111
|
+
end
|
104
112
|
c.instance_variable_set(:@_cache, JSON.parse(Base64.decode64('#{cache}')))
|
105
113
|
c.events.trigger_jquery_events
|
106
|
-
c.#{action}(JSON.parse(Base64.decode64('#{options}')))
|
114
|
+
c.#{action}(JSON.parse(Base64.decode64('#{options}'))) if action != 'false'
|
107
115
|
end
|
108
116
|
`});`
|
109
117
|
end
|
@@ -113,13 +121,15 @@ class Roda
|
|
113
121
|
end
|
114
122
|
|
115
123
|
def component name, options = {}, &block
|
116
|
-
|
117
|
-
|
118
|
-
action = options.delete(:call) || :display
|
119
|
-
trigger = options.delete(:trigger) || false
|
124
|
+
action = options.delete(:call)
|
125
|
+
trigger = options.delete(:trigger)
|
120
126
|
js = options.delete(:js)
|
121
127
|
args = options.delete(:args)
|
122
128
|
|
129
|
+
action = :display if js && !action
|
130
|
+
|
131
|
+
comp = load_component name, options
|
132
|
+
|
123
133
|
# call action
|
124
134
|
# TODO: make sure the single method parameter isn't a block
|
125
135
|
if trigger
|
@@ -128,7 +138,7 @@ class Roda
|
|
128
138
|
else
|
129
139
|
comp_response = comp.trigger trigger, options
|
130
140
|
end
|
131
|
-
|
141
|
+
elsif action
|
132
142
|
# We want to make sure it's not a method that already exists in ruba
|
133
143
|
# otherwise that would give us a false positive.
|
134
144
|
if comp.respond_to?(action) && !"#{comp.method(action)}"[/\(Kernel\)/]
|
@@ -146,17 +156,21 @@ class Roda
|
|
146
156
|
end
|
147
157
|
end
|
148
158
|
|
149
|
-
|
159
|
+
if trigger || action
|
160
|
+
load_component_js comp, action, options
|
150
161
|
|
151
|
-
|
152
|
-
|
153
|
-
|
162
|
+
if js && comp_response.is_a?(Roda::Component::DOM)
|
163
|
+
comp_response = comp_response.to_xml
|
164
|
+
end
|
154
165
|
|
155
|
-
|
156
|
-
|
157
|
-
|
166
|
+
if comp_response.is_a?(String) && js
|
167
|
+
comp_response << component_js
|
168
|
+
end
|
158
169
|
|
159
|
-
|
170
|
+
comp_response
|
171
|
+
else
|
172
|
+
comp
|
173
|
+
end
|
160
174
|
end
|
161
175
|
alias :comp :component
|
162
176
|
alias :roda_component :component
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: roda-component
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.34
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- cj
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: opal
|