browserio 0.0.3 → 0.0.4
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/browserio.gemspec +2 -2
- data/lib/browserio.rb +5 -1
- data/lib/browserio/component.rb +74 -17
- data/lib/browserio/config.rb +7 -0
- data/lib/browserio/utilis/element.rb +23 -0
- data/lib/browserio/utilis/nokogiri.rb +44 -0
- data/lib/browserio/version.rb +1 -1
- data/lib/roda/plugins/browserio.rb +27 -0
- metadata +11 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d9e44c21fd854715d112d473a87d24a62062bb5
|
4
|
+
data.tar.gz: da0ab3ae5d7ed26d39d9d8533bea9161470b58d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ccceca5f70fb051ceee6ecdd0491f9b2be081ee0a8033b03f456b889673a0dbe32a1e5abd766ea5da577ad72c1bfac0b407b20f1a62d4899ab2575e074bfee27
|
7
|
+
data.tar.gz: 057efd0d548410512b455250dabe6a3f0403efc6b2d04dda14fc139f8302acf2c10e5ccaeb72285efd9cbac86582401999dd56280dd4877ef65a20535e396ef6
|
data/browserio.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"
|
22
|
+
spec.add_runtime_dependency "opal-jquery"
|
23
23
|
spec.add_runtime_dependency "nokogiri", '~> 1.6.6.2'
|
24
24
|
|
25
25
|
spec.add_development_dependency "pry"
|
data/lib/browserio.rb
CHANGED
@@ -6,8 +6,12 @@ require 'browserio/utilis/blank'
|
|
6
6
|
require 'browserio/utilis/methods'
|
7
7
|
require 'browserio/utilis/try'
|
8
8
|
require 'browserio/utilis/titleize'
|
9
|
+
require 'browserio/utilis/element'
|
9
10
|
require 'base64'
|
10
|
-
|
11
|
+
unless RUBY_ENGINE == 'opal'
|
12
|
+
require 'nokogiri'
|
13
|
+
require 'browserio/utilis/nokogiri'
|
14
|
+
end
|
11
15
|
require 'browserio/html'
|
12
16
|
require 'browserio/dom'
|
13
17
|
require 'browserio/config'
|
data/lib/browserio/component.rb
CHANGED
@@ -2,11 +2,9 @@ module BrowserIO
|
|
2
2
|
class Component
|
3
3
|
include Methods
|
4
4
|
|
5
|
-
REJECTED_CLIENT_OPTS = %i(scope file_path methods_wrapped events klass on added_class_events)
|
5
|
+
REJECTED_CLIENT_OPTS = %i(scope file_path methods_wrapped events klass on on_server_methods added_class_events)
|
6
6
|
|
7
7
|
class << self
|
8
|
-
alias_method :__new__, :new
|
9
|
-
|
10
8
|
# Override the default new behaviour
|
11
9
|
def new(*args, &block)
|
12
10
|
obj = allocate
|
@@ -15,7 +13,7 @@ module BrowserIO
|
|
15
13
|
obj.bio_opts.init = args.delete(:init)
|
16
14
|
|
17
15
|
# Merge other args into opts
|
18
|
-
args.each { |a| a.each {|k, v| obj.bio_opts[k] = v } }
|
16
|
+
args.each { |a| a.each {|k, v| obj.bio_opts[k] = v } } if args.any?
|
19
17
|
|
20
18
|
# Set all the requires
|
21
19
|
unless RUBY_ENGINE == 'opal'
|
@@ -30,8 +28,12 @@ module BrowserIO
|
|
30
28
|
end
|
31
29
|
bio_opts.added_class_events = true
|
32
30
|
|
33
|
-
if obj.bio_opts.init
|
34
|
-
|
31
|
+
if obj.bio_opts.init
|
32
|
+
if obj.bio_opts.init.is_a? Array
|
33
|
+
obj.send :initialize, *obj.bio_opts.init, &block
|
34
|
+
else
|
35
|
+
obj.send :initialize, obj.bio_opts.init, &block
|
36
|
+
end
|
35
37
|
else
|
36
38
|
obj.send :initialize, &block
|
37
39
|
end
|
@@ -41,7 +43,7 @@ module BrowserIO
|
|
41
43
|
|
42
44
|
public_instance_methods(false).each do |meth|
|
43
45
|
alias_method :"bio_original_#{meth}", :"#{meth}"
|
44
|
-
define_method "#{meth}" do |*d_args, &
|
46
|
+
define_method "#{meth}" do |*d_args, &blk|
|
45
47
|
if bio_opts.js
|
46
48
|
bio_opts.method_called = meth
|
47
49
|
bio_opts.method_args = *d_args
|
@@ -50,9 +52,9 @@ module BrowserIO
|
|
50
52
|
o_name = "bio_original_#{meth}"
|
51
53
|
|
52
54
|
if client? || method(o_name).parameters.length > 0
|
53
|
-
result = send(o_name, *d_args, &
|
55
|
+
result = send(o_name, *d_args, &blk)
|
54
56
|
else
|
55
|
-
result = send(o_name, &
|
57
|
+
result = send(o_name, &blk)
|
56
58
|
end
|
57
59
|
|
58
60
|
# Append the initialize javscript
|
@@ -88,7 +90,7 @@ module BrowserIO
|
|
88
90
|
# @example
|
89
91
|
# tmpl :some_name, dom.find('#some-div')
|
90
92
|
# @return dom [DOM]
|
91
|
-
def bio_tmpl(name, dom = false, remove =
|
93
|
+
def bio_tmpl(name, dom = false, remove = true)
|
92
94
|
if dom
|
93
95
|
dom = remove ? dom.remove : dom
|
94
96
|
bio_opts.tmpl[name] = {
|
@@ -130,7 +132,7 @@ module BrowserIO
|
|
130
132
|
@bio_config ||= begin
|
131
133
|
args = BrowserIO.config.opts_dup.merge(klass: self, object_events: {})
|
132
134
|
|
133
|
-
if
|
135
|
+
if server?
|
134
136
|
args[:file_path] = caller.first.gsub(/(?<=\.rb):.*/, '')
|
135
137
|
args[:path_name] = args[:file_path]
|
136
138
|
.gsub(%r{(#{Dir.pwd}/|.*(?=browserio))}, '')
|
@@ -153,12 +155,17 @@ module BrowserIO
|
|
153
155
|
end
|
154
156
|
alias_method :config, :bio_config
|
155
157
|
|
156
|
-
def
|
157
|
-
|
158
|
+
def bio_on(*args, &block)
|
159
|
+
if args.first.to_s != 'server'
|
160
|
+
bio_opts.on << [args, block]
|
161
|
+
else
|
162
|
+
bio_on_server(&block)
|
163
|
+
end
|
158
164
|
end
|
165
|
+
alias_method :on, :bio_on
|
159
166
|
|
160
167
|
def method_missing(method, *args, &block)
|
161
|
-
if
|
168
|
+
if bio_opts.scope.respond_to?(method, true)
|
162
169
|
bio_opts.scope.send method, *args, &block
|
163
170
|
else
|
164
171
|
super
|
@@ -168,6 +175,50 @@ module BrowserIO
|
|
168
175
|
def client_bio_opts
|
169
176
|
bio_config.opts_dup.reject {|k, v| REJECTED_CLIENT_OPTS.include? k }
|
170
177
|
end
|
178
|
+
|
179
|
+
def bio_on_server(&block)
|
180
|
+
if server?
|
181
|
+
yield
|
182
|
+
else
|
183
|
+
m = Module.new(&block)
|
184
|
+
|
185
|
+
m.public_instance_methods(false).each do |meth|
|
186
|
+
bio_opts.on_server_methods << meth.to_s
|
187
|
+
|
188
|
+
define_method "#{meth}" do |*args, &blk|
|
189
|
+
path_name = bio_opts.path_name
|
190
|
+
# event_id = "comp-event-#{$faye.generate_id}"
|
191
|
+
|
192
|
+
payload = client_bio_opts.reject do |k, _|
|
193
|
+
%w(html tmpl requires plugins object_events).include? k
|
194
|
+
end
|
195
|
+
payload[:method_called] = meth
|
196
|
+
payload[:method_args] = args
|
197
|
+
|
198
|
+
HTTP.post("/#{bio_opts.assets_url}/#{path_name}.call",
|
199
|
+
headers: {
|
200
|
+
'X-CSRF-TOKEN' => Element.find('meta[name=_csrf]').attr('content')
|
201
|
+
},
|
202
|
+
payload: payload) do |response|
|
203
|
+
|
204
|
+
# We set the new csrf token
|
205
|
+
xhr = Native(response.xhr)
|
206
|
+
csrf = xhr.getResponseHeader('BIO-CSRF-TOKEN')
|
207
|
+
Element.find('meta[name=_csrf]').attr 'content', csrf
|
208
|
+
###########################
|
209
|
+
|
210
|
+
res = JSON.from_object(`response`)
|
211
|
+
|
212
|
+
blk.call res[:body], res
|
213
|
+
end
|
214
|
+
|
215
|
+
true
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
include m
|
220
|
+
end
|
221
|
+
end
|
171
222
|
end
|
172
223
|
|
173
224
|
# Duplicate of class condig [Config]
|
@@ -253,13 +304,19 @@ module BrowserIO
|
|
253
304
|
end
|
254
305
|
alias_method :client_opts, :client_bio_opts
|
255
306
|
|
256
|
-
def bio_trigger
|
257
|
-
bio_opts.events.trigger
|
307
|
+
def bio_trigger(*args)
|
308
|
+
bio_opts.events.trigger(*args)
|
258
309
|
end
|
259
310
|
alias_method :trigger, :bio_trigger
|
260
311
|
|
312
|
+
if RUBY_ENGINE == 'opal'
|
313
|
+
def bio(*args)
|
314
|
+
BrowserIO[*args]
|
315
|
+
end
|
316
|
+
end
|
317
|
+
|
261
318
|
def method_missing(method, *args, &block)
|
262
|
-
if
|
319
|
+
if bio_opts.scope.respond_to?(method, true)
|
263
320
|
bio_opts.scope.send method, *args, &block
|
264
321
|
else
|
265
322
|
super
|
data/lib/browserio/config.rb
CHANGED
@@ -20,7 +20,9 @@ module BrowserIO
|
|
20
20
|
loaded: false,
|
21
21
|
requires: [],
|
22
22
|
on: [],
|
23
|
+
on_server_methods: [],
|
23
24
|
object_events: {},
|
25
|
+
is_plugin: false,
|
24
26
|
plugins: []
|
25
27
|
}.merge opts
|
26
28
|
|
@@ -32,10 +34,15 @@ module BrowserIO
|
|
32
34
|
# @param name [<String, Symbol>, #to_sym]
|
33
35
|
def name(name)
|
34
36
|
opts.name = name.to_sym
|
37
|
+
opts.is_plugin = true if name.to_s =~ /_plugin$/
|
35
38
|
BrowserIO.components ||= {}
|
36
39
|
BrowserIO.components[opts.name] = opts
|
37
40
|
end
|
38
41
|
|
42
|
+
def is_plugin?
|
43
|
+
opts.is_plugin
|
44
|
+
end
|
45
|
+
|
39
46
|
%w(scope assets_url).each do |m|
|
40
47
|
define_method m do |v|
|
41
48
|
opts[m] = v
|
@@ -0,0 +1,23 @@
|
|
1
|
+
if RUBY_ENGINE == 'opal'
|
2
|
+
class Element
|
3
|
+
alias_native :val
|
4
|
+
alias_native :prepend
|
5
|
+
alias_native :serialize_array, :serializeArray
|
6
|
+
alias_native :has_class, :hasClass
|
7
|
+
alias_native :click
|
8
|
+
|
9
|
+
def get_script url, &block
|
10
|
+
%x{
|
11
|
+
$.getScript(url, function(){
|
12
|
+
#{block.call if block_given?}
|
13
|
+
});
|
14
|
+
}
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class String
|
19
|
+
def is_i?
|
20
|
+
self.to_i.to_s == self
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Nokogiri
|
2
|
+
module XML
|
3
|
+
class NodeSet
|
4
|
+
# fix: this is really shity
|
5
|
+
# alias_method :original_to_html, :to_html
|
6
|
+
# def to_html *args
|
7
|
+
# original_to_html(*args).gsub('%7B', "{").gsub('%7D', "}")
|
8
|
+
# end
|
9
|
+
end
|
10
|
+
class Node
|
11
|
+
# fix: this is really shity
|
12
|
+
# alias_method :original_to_html, :to_html
|
13
|
+
# def to_html *args
|
14
|
+
# original_to_html(*args).gsub('%7B', "{").gsub('%7D', "}")
|
15
|
+
# end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def coerce data # :nodoc:
|
20
|
+
if data.class.to_s == 'BrowserIO::DOM'
|
21
|
+
data = data.dom
|
22
|
+
end
|
23
|
+
|
24
|
+
case data
|
25
|
+
when XML::NodeSet
|
26
|
+
return data
|
27
|
+
when XML::DocumentFragment
|
28
|
+
return data.children
|
29
|
+
when String
|
30
|
+
return fragment(data).children
|
31
|
+
when Document, XML::Attr
|
32
|
+
# unacceptable
|
33
|
+
when XML::Node
|
34
|
+
return data
|
35
|
+
end
|
36
|
+
|
37
|
+
raise ArgumentError, <<-EOERR
|
38
|
+
Requires a Node, NodeSet or String argument, and cannot accept a #{data.class}.
|
39
|
+
(You probably want to select a node from the Document with at() or search(), or create a new Node via Node.new().)
|
40
|
+
EOERR
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/browserio/version.rb
CHANGED
@@ -48,6 +48,33 @@ class Roda
|
|
48
48
|
else
|
49
49
|
File.read("#{ROOT_PATH}/#{component}.rb")
|
50
50
|
end
|
51
|
+
when 'call'
|
52
|
+
body = scope.request.body.read
|
53
|
+
data = scope.request.params
|
54
|
+
|
55
|
+
begin
|
56
|
+
data.merge!(body ? JSON.parse(body) : {})
|
57
|
+
rescue
|
58
|
+
# can't be parsed by json
|
59
|
+
end
|
60
|
+
|
61
|
+
data = data.indifferent
|
62
|
+
name = data.delete(:name)
|
63
|
+
method_called = data.delete(:method_called)
|
64
|
+
method_args = data.delete(:method_args)
|
65
|
+
|
66
|
+
res = scope.bio(name, data).send(method_called, *method_args)
|
67
|
+
|
68
|
+
scope.response.headers["BIO-CSRF-TOKEN"] = scope.csrf_token if scope.methods.include? :csrf_token
|
69
|
+
|
70
|
+
if res.is_a? Hash
|
71
|
+
scope.response.headers["Content-Type"] = 'application/json; charset=UTF-8'
|
72
|
+
res = res.to_json
|
73
|
+
else
|
74
|
+
res = res.to_s
|
75
|
+
end
|
76
|
+
|
77
|
+
res
|
51
78
|
else
|
52
79
|
"#{::BrowserIO.javascript(component)}\n//# sourceMappingURL=/assets/bio/#{component}.map"
|
53
80
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: browserio
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- cj
|
@@ -14,30 +14,30 @@ dependencies:
|
|
14
14
|
name: opal
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0
|
19
|
+
version: '0'
|
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: 0
|
26
|
+
version: '0'
|
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: 0
|
33
|
+
version: '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: 0
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: nokogiri
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -176,9 +176,11 @@ files:
|
|
176
176
|
- lib/browserio/plugins/pjax.rb
|
177
177
|
- lib/browserio/plugins/validations.rb
|
178
178
|
- lib/browserio/utilis/blank.rb
|
179
|
+
- lib/browserio/utilis/element.rb
|
179
180
|
- lib/browserio/utilis/hash.rb
|
180
181
|
- lib/browserio/utilis/indifferent_hash.rb
|
181
182
|
- lib/browserio/utilis/methods.rb
|
183
|
+
- lib/browserio/utilis/nokogiri.rb
|
182
184
|
- lib/browserio/utilis/titleize.rb
|
183
185
|
- lib/browserio/utilis/try.rb
|
184
186
|
- lib/browserio/version.rb
|