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 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