browserio 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|