wedge 0.1.24 → 0.1.26
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/Gemfile +1 -1
- data/Rakefile +24 -22
- data/lib/wedge.rb +82 -21
- data/lib/wedge/component.rb +0 -1
- data/lib/wedge/config.rb +2 -1
- data/lib/wedge/middleware.rb +13 -6
- data/lib/wedge/plugins/current_user.rb +1 -2
- data/lib/wedge/version.rb +1 -1
- data/playground/app/components/layout.rb +1 -1
- data/wedge.gemspec +2 -3
- metadata +10 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 78f40ecf9915213fae0d4d1e04a9b540d2d3478d
|
4
|
+
data.tar.gz: a14f6a410247c07a2622382cd7f0167286b13fab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 863fe684a8d673637de4a47553bac75278a8343d875bd84bca7223709885d5c4617cc4ab936e9da639e08cf12b44f07860938c1b872f37e2c3fb2d533e7fbb05
|
7
|
+
data.tar.gz: 397aea986f9d2f14da80e80988d51a2ae3f02cb167435c6d2c51502bba822a57e2de0bbf02b78691ada2c64983f9777356bddda313c0987a9eb70c50611ff137
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -9,26 +9,28 @@ require 'bundler'
|
|
9
9
|
require 'bundler/gem_tasks'
|
10
10
|
require 'bundler/setup'
|
11
11
|
|
12
|
-
|
13
|
-
require '
|
14
|
-
require '
|
15
|
-
|
16
|
-
|
17
|
-
Opal.append_path File.expand_path('../
|
18
|
-
Opal.append_path File.expand_path('../playground/
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
12
|
+
if current_task['default'] || current_task['test'] || current_task[/:rspec/]
|
13
|
+
require 'config/boot'
|
14
|
+
require 'tilt/erubis'
|
15
|
+
require 'opal/rspec/rake_task'
|
16
|
+
|
17
|
+
Opal.append_path File.expand_path('../lib', __FILE__)
|
18
|
+
Opal.append_path File.expand_path('../playground/app', __FILE__)
|
19
|
+
Opal.append_path File.expand_path('../playground/public', __FILE__)
|
20
|
+
|
21
|
+
Opal::RSpec::RakeTask.new('opal:rspec', Playground) do |s|
|
22
|
+
s.index_path = 'spec/index.html.erb'
|
23
|
+
end
|
24
|
+
|
25
|
+
task default: [:test]
|
26
|
+
|
27
|
+
require 'rspec/core/rake_task'
|
28
|
+
RSpec::Core::RakeTask.new('ruby:rspec')
|
29
|
+
|
30
|
+
task :test do
|
31
|
+
puts "--------------------------\nRun specs in Ruby\n--------------------------"
|
32
|
+
Rake::Task['ruby:rspec'].invoke
|
33
|
+
puts "--------------------------\nRun specs in Opal\n--------------------------"
|
34
|
+
Rake::Task['opal:rspec'].invoke
|
35
|
+
end
|
34
36
|
end
|
data/lib/wedge.rb
CHANGED
@@ -60,11 +60,46 @@ class Wedge
|
|
60
60
|
DOM.new html
|
61
61
|
end
|
62
62
|
|
63
|
-
def script_tag
|
64
|
-
"<script src='#{assets_url_with_host}/wedge.js'></script>"
|
65
|
-
end
|
66
|
-
|
67
63
|
unless RUBY_ENGINE == 'opal'
|
64
|
+
# def script_tag
|
65
|
+
# # note: ?body=1 is a hack for sprockets to make source maps work # correctly.
|
66
|
+
# "<script src='#{assets_url_with_host}/wedge.js#{Wedge.config.debug ? '?body=1' : ''}' type='text/javascript'></script>"
|
67
|
+
# end
|
68
|
+
|
69
|
+
def script_tag name = 'wedge'
|
70
|
+
sprockets = Wedge.config.opal[:server].sprockets
|
71
|
+
prefix = Wedge.config.opal[:server].prefix
|
72
|
+
asset = sprockets[name]
|
73
|
+
raise "Cannot find asset: #{name}" if asset.nil?
|
74
|
+
scripts = []
|
75
|
+
|
76
|
+
get_asset_urls(name).each do |url|
|
77
|
+
scripts << %{<script src="#{url}"></script>}
|
78
|
+
end
|
79
|
+
|
80
|
+
scripts << %{<script>#{Wedge::Opal::Processor.load_asset_code(sprockets, name)}</script>}
|
81
|
+
|
82
|
+
scripts.join "\n"
|
83
|
+
end
|
84
|
+
|
85
|
+
def get_asset_urls name
|
86
|
+
sprockets = Wedge.config.opal[:server].sprockets
|
87
|
+
prefix = Wedge.config.opal[:server].prefix
|
88
|
+
asset = sprockets[name]
|
89
|
+
raise "Cannot find asset: #{name}" if asset.nil?
|
90
|
+
urls = []
|
91
|
+
|
92
|
+
if Wedge.config.opal[:server].debug
|
93
|
+
asset.to_a.map do |dependency|
|
94
|
+
urls << %{#{prefix}/#{dependency.logical_path}?body=1}
|
95
|
+
end
|
96
|
+
else
|
97
|
+
urls << %{#{prefix}/#{name}.js}
|
98
|
+
end
|
99
|
+
|
100
|
+
urls
|
101
|
+
end
|
102
|
+
|
68
103
|
def javascript_cache
|
69
104
|
@javascript_cache ||= IndifferentHash.new
|
70
105
|
end
|
@@ -146,31 +181,57 @@ class Wedge
|
|
146
181
|
build(path_name, options).to_s
|
147
182
|
end
|
148
183
|
else
|
149
|
-
|
184
|
+
# note: ?body=1 is a hack for sprockets to make source maps work # correctly.
|
185
|
+
# url = "#{url}?body=1" if Wedge.config.debug
|
150
186
|
cache = options[:cache_assets]
|
151
187
|
|
152
|
-
|
153
|
-
#
|
154
|
-
# store for whatever method it calls. we need to think of a better idea
|
155
|
-
# for global and local data store.
|
156
|
-
Wedge.config.component_class[options[:name]].config.store = options[:store].indifferent
|
188
|
+
if !Wedge.config.debug
|
189
|
+
url = "#{Wedge.assets_url_with_host}/#{options[:path]}.js"
|
157
190
|
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
191
|
+
`jQuery.ajax({ url: url, dataType: "script", cache: cache }).done(function() {`
|
192
|
+
trigger_javascript_loaded path_name, options
|
193
|
+
`}).fail(function(jqxhr, settings, exception){ window.console.log(exception); })`
|
194
|
+
else
|
195
|
+
url = "#{Wedge.assets_url_with_host}/wedge/list_assets.call"
|
196
|
+
payload = { path_name: path_name}
|
197
|
+
headers = {
|
198
|
+
'X-CSRF-TOKEN' => Element.find('meta[name=_csrf]').attr('content'),
|
199
|
+
}
|
200
|
+
HTTP.post(url, dataType: 'json', headers: headers, payload: payload) do |response|
|
201
|
+
res = JSON.from_object(`response`)
|
202
|
+
|
203
|
+
res[:body][:urls].each do |url|
|
204
|
+
`jQuery.ajax({url: url, dataType: "script", cache: cache, async: false})`
|
205
|
+
end
|
163
206
|
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
207
|
+
code = res[:body][:code]
|
208
|
+
`jQuery.globalEval(code);`
|
209
|
+
|
210
|
+
trigger_javascript_loaded path_name, options
|
168
211
|
end
|
212
|
+
end
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
def trigger_javascript_loaded path_name, options
|
217
|
+
# fix: at the moment to_js called from the server will set the class
|
218
|
+
# store for whatever method it calls. we need to think of a better idea
|
219
|
+
# for global and local data store.
|
220
|
+
Wedge.config.component_class[options[:name]].config.store = options[:store].indifferent
|
169
221
|
|
170
|
-
|
222
|
+
if initialize_args = options.delete(:initialize_args)
|
223
|
+
comp = Wedge[options[:name], *initialize_args]
|
224
|
+
else
|
225
|
+
comp = Wedge[options[:name]]
|
226
|
+
end
|
171
227
|
|
172
|
-
|
228
|
+
if options[:method_args].any?
|
229
|
+
comp.send(options[:method_called], options[:method_args])
|
230
|
+
else
|
231
|
+
comp.send(options[:method_called])
|
173
232
|
end
|
233
|
+
|
234
|
+
Wedge.trigger_browser_events
|
174
235
|
end
|
175
236
|
|
176
237
|
def config
|
data/lib/wedge/component.rb
CHANGED
data/lib/wedge/config.rb
CHANGED
@@ -36,7 +36,8 @@ class Wedge
|
|
36
36
|
server_methods: [],
|
37
37
|
initialize_args: [],
|
38
38
|
plugins: [],
|
39
|
-
|
39
|
+
opal: {},
|
40
|
+
allowed_client_data: %w(debug name path method_args method_called store tmpl key cache_assets assets_key assets_url assets_url_with_host)
|
40
41
|
}.merge(opts))
|
41
42
|
end
|
42
43
|
|
data/lib/wedge/middleware.rb
CHANGED
@@ -11,24 +11,25 @@ class Wedge
|
|
11
11
|
settings.each { |k, v| Wedge.config.send "#{k}=", v }
|
12
12
|
end
|
13
13
|
|
14
|
-
|
14
|
+
Wedge.config.opal = { server: Wedge::Opal::Server.new { |s|
|
15
15
|
s.prefix = Wedge.config.assets_url
|
16
16
|
s.debug = Wedge.config.debug
|
17
17
|
s.append_path "#{Dir.pwd}/#{Wedge.config.app_dir}"
|
18
18
|
}}
|
19
19
|
|
20
20
|
if Wedge.config.debug
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
Wedge.config.opal[:sprockets] = Wedge.config.opal[:server].sprockets
|
22
|
+
Wedge.config.opal[:maps_prefix] = "#{Wedge.config.assets_url}/__OPAL_SOURCE_MAPS__"
|
23
|
+
Wedge.config.opal[:maps_app] = Opal::SourceMapServer.new Wedge.config.opal[:sprockets], Wedge.config.opal[:maps_prefix]
|
24
24
|
|
25
|
-
Wedge::Opal::Sprockets::SourceMapHeaderPatch.inject!
|
25
|
+
Wedge::Opal::Sprockets::SourceMapHeaderPatch.inject! Wedge.config.opal[:maps_prefix]
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
29
|
@app = app
|
30
30
|
@scope = self.class.scope
|
31
31
|
@skip_call = !self.class.skip_call.nil?? self.class.skip_call : Wedge.config.skip_call_middleware
|
32
|
+
@opal = Wedge.config.opal
|
32
33
|
end
|
33
34
|
|
34
35
|
def call(env)
|
@@ -88,7 +89,13 @@ class Wedge
|
|
88
89
|
method_called = data.delete(:__wedge_method__)
|
89
90
|
method_args = data.delete(:__wedge_args__)
|
90
91
|
|
91
|
-
|
92
|
+
|
93
|
+
if wedge_path == 'wedge/list_assets'
|
94
|
+
res = {
|
95
|
+
urls: Wedge.get_asset_urls(data[:path_name]),
|
96
|
+
code: Wedge::Opal::Processor.load_asset_code(Wedge.config.opal[:server].sprockets, data[:path_name])
|
97
|
+
}
|
98
|
+
elsif method_args == '__wedge_data__' && data
|
92
99
|
method_args = [data]
|
93
100
|
res = Wedge.scope!(scope, method_called)[name].send(method_called, *method_args) || ''
|
94
101
|
else
|
@@ -14,8 +14,7 @@ class Wedge
|
|
14
14
|
%w'ability_list current_user'.each do |type|
|
15
15
|
config.compile_str ||= ''
|
16
16
|
path = Wedge.config.component_class[:"#{type}"].config.path
|
17
|
-
|
18
|
-
config.compile_str << Opal.original_compile("require 'wedge/plugins/#{type}'; #{code}")
|
17
|
+
config.compile_str << Wedge.javascript(path)
|
19
18
|
end if for_client
|
20
19
|
end
|
21
20
|
|
data/lib/wedge/version.rb
CHANGED
data/wedge.gemspec
CHANGED
@@ -18,8 +18,8 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_runtime_dependency "opal"
|
22
|
-
spec.add_runtime_dependency "opal-jquery"
|
21
|
+
spec.add_runtime_dependency "opal", '~> 0.8.0.rc1'
|
22
|
+
spec.add_runtime_dependency "opal-jquery", '~> 0.3.0'
|
23
23
|
spec.add_runtime_dependency "nokogiri"
|
24
24
|
|
25
25
|
spec.add_development_dependency 'rspec'
|
@@ -27,7 +27,6 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.add_development_dependency "rake"
|
28
28
|
spec.add_development_dependency "awesome_print"
|
29
29
|
spec.add_development_dependency "yard"
|
30
|
-
spec.add_development_dependency "phantomjs.rb"
|
31
30
|
spec.add_development_dependency 'roda'
|
32
31
|
|
33
32
|
end
|
metadata
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wedge
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.26
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- cj
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: opal
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 0.8.0.rc1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 0.8.0.rc1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: opal-jquery
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 0.3.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 0.3.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: nokogiri
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,20 +122,6 @@ dependencies:
|
|
122
122
|
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: phantomjs.rb
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - ">="
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '0'
|
132
|
-
type: :development
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - ">="
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '0'
|
139
125
|
- !ruby/object:Gem::Dependency
|
140
126
|
name: roda
|
141
127
|
requirement: !ruby/object:Gem::Requirement
|