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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 65263f95668ebcadb417c1a5ed22eca4cb8e0abc
4
- data.tar.gz: 1ed66b53e9bf24c26e5bfe60750814cd4825f3a1
3
+ metadata.gz: 3d9e44c21fd854715d112d473a87d24a62062bb5
4
+ data.tar.gz: da0ab3ae5d7ed26d39d9d8533bea9161470b58d4
5
5
  SHA512:
6
- metadata.gz: 1946bc54bc94b2ec67d44b4191d1a48ae9cd145eb0fb18749ac43efb80bb555aa291582661efb7f346647657b07874f4c47af598c380c8f0533f0493c6421af9
7
- data.tar.gz: 1900e69f3e53d2363c31dd0f94986b56ffb38c1864aa414b5a6d3b5e9cf6e7504466b192fcfb9a97edd5f236c5ee3f17c757f688f59d679059bba79faedb0d09
6
+ metadata.gz: ccceca5f70fb051ceee6ecdd0491f9b2be081ee0a8033b03f456b889673a0dbe32a1e5abd766ea5da577ad72c1bfac0b407b20f1a62d4899ab2575e074bfee27
7
+ data.tar.gz: 057efd0d548410512b455250dabe6a3f0403efc6b2d04dda14fc139f8302acf2c10e5ccaeb72285efd9cbac86582401999dd56280dd4877ef65a20535e396ef6
@@ -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", "~> 0.7.1"
22
- spec.add_runtime_dependency "opal-jquery", "~> 0.3.0"
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"
@@ -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
- require 'nokogiri' unless RUBY_ENGINE == 'opal'
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'
@@ -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 && obj.method(:initialize).parameters.length > 0
34
- obj.send :initialize, *obj.bio_opts.init, &block
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, &block|
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, &block)
55
+ result = send(o_name, *d_args, &blk)
54
56
  else
55
- result = send(o_name, &block)
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 = false)
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 RUBY_ENGINE == 'ruby'
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 on(*args, &block)
157
- bio_opts.on << [args, block]
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 server? && bio_opts.scope.respond_to?(method, true)
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 *args
257
- bio_opts.events.trigger *args
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 server? && bio_opts.scope.respond_to?(method, true)
319
+ if bio_opts.scope.respond_to?(method, true)
263
320
  bio_opts.scope.send method, *args, &block
264
321
  else
265
322
  super
@@ -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
@@ -1,3 +1,3 @@
1
1
  module BrowserIO
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -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.3
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.7.1
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.7.1
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.3.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.3.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