wunderbar 1.4.1 → 1.5.1

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
  SHA256:
3
- metadata.gz: 1781f56d68599526c5094eaba70dd8193e8f973b6c63f8d2e005a0b21e76e86e
4
- data.tar.gz: 45211ba6f05a8df925bf3ffefb6c8f41df7f37978f4465b15edb8f0bcdf6b607
3
+ metadata.gz: 2633787e3fe5370fb9c661d09f7774f01e0bd8343d6f67e03ff0798827c7b19f
4
+ data.tar.gz: 39ca7d33dae070f59192b525c318c485f2e931a21c0b375be21ae350be65169a
5
5
  SHA512:
6
- metadata.gz: ad3dbe900b2e2f1cc42b6bd095d73cec26454cccc60c424bb2e58eea96d843dd7254aa5ff3e2b3a1d9d224ce4924c9069e966614a61e5663316f2b55a701fbef
7
- data.tar.gz: 61167b0ce4901bda14e5435a03283f33ee64bf593ef65d51337a4309557750ca6ab0a983d0bb0b1fd0f0207481655e8ee40dde185a99d05d3469ebd5862b3e4d
6
+ metadata.gz: b44d6101629179c0ec3048b118a2bd2246bc3faf439452202b44dfa22ec09be3457db421b98a8713be47c4c0c68a5b21dfed86d092b0f90a50476172c267f542
7
+ data.tar.gz: cad6637488679332c98a498f6ef60a0fb288faa735bd3b0851c495b386534b2add7dd9eb38dab1457c4174c6e7576e5a3538261c7cedcddcfe812c28bdf71721
data/README.md CHANGED
@@ -226,7 +226,12 @@ convenience methods are defined:
226
226
  * `_.submit` -- runs command (or block) as a deamon process
227
227
  * `_.xhtml?` -- output as XHTML?
228
228
 
229
- Access to all of the builder _defined_ methods (typically these end in an esclamation mark) and all of the Wunderbar module methods can be accessed in this way. Examples:
229
+ The `_.system` method takes an optional hash as its last parameter. This can be used to provide settings for the underlying
230
+ [Process.spawn](https://www.rubydoc.info/stdlib/core/Process.spawn) method.
231
+ For example: `._system('pwd',{ system_opts: { chdir: dir } , system_env: { 'FOO' => 'BAR' } })`
232
+ Note that environment variable names must be provided as strings, not symbols.
233
+
234
+ Access to all of the builder _defined_ methods (typically these end in an exclamation mark) and all of the Wunderbar module methods can be accessed in this way. Examples:
230
235
 
231
236
  * `_.tag! :foo`: insert elements where the name can be dynamic
232
237
  * `_.comment! "text"`: add a comment
@@ -366,7 +371,9 @@ Secure by default
366
371
 
367
372
  Wunderbar will properly escape all HTML and JSON output, eliminating problems
368
373
  of HTML or JavaScript injection. This includes calls to `_` to insert text
369
- directly.
374
+ directly. Unless `nokogiri` was previously required (see [optional
375
+ dependencies](#optional-dependencies) below), calls to insert markup
376
+ (`_{...}`) will escape the markup.
370
377
 
371
378
  Globals provided
372
379
  ---
@@ -426,7 +433,6 @@ The following gems are required by extensions of the same name:
426
433
  * `coderay` - syntax highlighting
427
434
  * `opal` - ruby to javascript compiler
428
435
  * `rack` - webserver interface
429
- * `rails` - web application framework
430
436
  * `sinatra` - DSL for creating web applications
431
437
 
432
438
  The following gems, if installed, will produce cleaner and prettier output:
@@ -1,6 +1,5 @@
1
1
  require 'shellwords'
2
2
  require 'open3'
3
- require 'thread'
4
3
 
5
4
  module Wunderbar
6
5
  @@options = {indent: 2}
@@ -74,7 +73,10 @@ module Wunderbar
74
73
 
75
74
  semaphore = Mutex.new
76
75
  env = {'LC_CTYPE' => 'en_US.UTF-8'}
77
- Open3.popen3(env, *command) do |pin, pout, perr, wait|
76
+ sys_env = opts[:system_env] || {}
77
+ env.merge! sys_env unless sys_env.empty?
78
+ sys_opts = opts[:system_opts] || {}
79
+ Open3.popen3(env, *command, sys_opts) do |pin, pout, perr, wait|
78
80
  [
79
81
  Thread.new do
80
82
  until pout.eof?
@@ -357,8 +359,8 @@ module Wunderbar
357
359
  end
358
360
 
359
361
  # remove leading and trailing space
360
- if children.first.text? and children.first.text.strip.empty?
361
- children.shift
362
+ if not children.empty?
363
+ children.shift if children.first.text? and children.first.text.strip.empty?
362
364
  end
363
365
 
364
366
  if not children.empty?
@@ -188,15 +188,6 @@ module Wunderbar
188
188
 
189
189
  name = name.to_s.gsub('_', '-')
190
190
 
191
- if flag != '!'
192
- if String === args.first
193
- if not block and args.first =~ /[>&]/
194
- markup = args.shift
195
- block = Proc.new {_ {markup}}
196
- end
197
- end
198
- end
199
-
200
191
  if flag == '!'
201
192
  @_x.compact! { tag! name, *args, &block }
202
193
  elsif flag == '?'
@@ -362,7 +353,7 @@ module Wunderbar
362
353
  def _(text=nil, &block)
363
354
  unless block
364
355
  if text
365
- _ {text}
356
+ @_x.indented_text! text.to_s
366
357
  end
367
358
  return @_x
368
359
  end
@@ -370,7 +361,9 @@ module Wunderbar
370
361
  children = instance_eval(&block)
371
362
 
372
363
  if String === children
373
- if children.include? '<' or children.include? '&'
364
+ ok = defined? Nokogiri
365
+
366
+ if ok and (children.include? '<' or children.include? '&')
374
367
  if defined? Nokogiri::HTML5.fragment
375
368
  doc = Nokogiri::HTML5.fragment(children.to_s)
376
369
  else
@@ -1,7 +1,6 @@
1
1
  require 'wunderbar'
2
2
  require 'kramdown'
3
3
  require 'nokogiri'
4
- require 'sanitize'
5
4
 
6
5
  module Wunderbar
7
6
  class HtmlMarkup
@@ -6,7 +6,12 @@ end
6
6
 
7
7
  require 'wunderbar/sinatra'
8
8
  require 'wunderbar/script'
9
- require 'nokogumbo'
9
+
10
+ if RUBY_VERSION =~ /^1|^2\.[0-4]/
11
+ require 'nokogumbo'
12
+ else
13
+ require 'nokogiri'
14
+ end
10
15
 
11
16
  class Wunderbar::Asset
12
17
  @@cached_scripts = {}
@@ -13,7 +13,9 @@ module Wunderbar
13
13
  if @block and @children.empty? and not @text
14
14
  width = options[:width]
15
15
  width -= indent.to_s.length if width
16
- @text = Ruby2JS.convert(@block, binding: @binding, width: width).to_s
16
+ opts = {binding: @binding, width: width}
17
+ opts = {**@attrs.delete(:options), **opts} if @attrs[:options]
18
+ @text = Ruby2JS.convert(@block, opts).to_s
17
19
  end
18
20
  super
19
21
  end
@@ -60,10 +60,6 @@ elsif defined? Sinatra
60
60
 
61
61
  require 'wunderbar/sinatra'
62
62
 
63
- elsif defined? ActionView::Template
64
-
65
- require 'wunderbar/rails'
66
-
67
63
  elsif defined? Rack
68
64
 
69
65
  require 'wunderbar/rack'
@@ -695,7 +695,7 @@ else
695
695
 
696
696
  function attributeEncode(text) {
697
697
  // unconditionally replace angle brackets here -- what ends up in an attribute (e.g. alt or title)
698
- // never makes sense to have verbatim HTML in it (and the sanitizer would totally break it)
698
+ // never makes sense to have verbatim HTML in it
699
699
  return text.replace(/>/g, "&gt;").replace(/</g, "&lt;").replace(/"/g, "&quot;");
700
700
  }
701
701
 
@@ -1,7 +1,7 @@
1
1
  module Wunderbar
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 1
4
- MINOR = 4
4
+ MINOR = 5
5
5
  TINY = 1
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
@@ -183,25 +183,25 @@ module Wunderbar
183
183
 
184
184
  proc = Proc.new do
185
185
  begin
186
- channel = Wunderbar::Channel.new(port, buffer, opts[:locals])
187
- if sock1
188
- sock1.send('x',0)
189
- sock1.close
190
- end
191
- channel.instance_eval(&block)
186
+ channel = Wunderbar::Channel.new(port, buffer, opts[:locals])
187
+ if sock1
188
+ sock1.send('x',0)
189
+ sock1.close
190
+ end
191
+ channel.instance_eval(&block)
192
192
  rescue Exception => exception
193
- channel._ :type=>:stderr, :line=>exception.inspect
194
- exception.backtrace.each do |frame|
195
- next if Wunderbar::CALLERS_TO_IGNORE.any? {|re| frame =~ re}
196
- channel._ :type=>:stderr, :line=>" #{frame}"
197
- end
193
+ channel._ :type=>:stderr, :line=>exception.inspect
194
+ exception.backtrace.each do |frame|
195
+ next if Wunderbar::CALLERS_TO_IGNORE.any? {|re| frame =~ re}
196
+ channel._ :type=>:stderr, :line=>" #{frame}"
197
+ end
198
198
  ensure
199
- if channel
200
- channel.complete = true
201
- sleep 5
202
- sleep 60 unless channel.connected or opts[:sync]
203
- channel.close
204
- end
199
+ if channel
200
+ channel.complete = true
201
+ sleep 5
202
+ sleep 60 unless channel.connected or opts[:sync]
203
+ channel.close
204
+ end
205
205
  end
206
206
  end
207
207
 
data/wunderbar.gemspec CHANGED
@@ -13,7 +13,7 @@ Gem::Specification.new do |s|
13
13
  s.date = "2019-06-07"
14
14
  s.description = " Wunderbar makes it easy to produce valid HTML5, wellformed XHTML, Unicode\n (utf-8), consistently indented, readable applications.'\n".freeze
15
15
  s.email = "rubys@intertwingly.net".freeze
16
- s.files = ["COPYING".freeze, "README.md".freeze, "lib/wunderbar".freeze, "lib/wunderbar.rb".freeze, "lib/wunderbar/asset.rb".freeze, "lib/wunderbar/backtick.rb".freeze, "lib/wunderbar/bootstrap".freeze, "lib/wunderbar/bootstrap.rb".freeze, "lib/wunderbar/bootstrap/theme.rb".freeze, "lib/wunderbar/builder.rb".freeze, "lib/wunderbar/cgi-methods.rb".freeze, "lib/wunderbar/coderay.rb".freeze, "lib/wunderbar/coffeescript.rb".freeze, "lib/wunderbar/cssproxy.rb".freeze, "lib/wunderbar/environment.rb".freeze, "lib/wunderbar/eventsource.rb".freeze, "lib/wunderbar/html-methods.rb".freeze, "lib/wunderbar/installation.rb".freeze, "lib/wunderbar/job-control.rb".freeze, "lib/wunderbar/jquery".freeze, "lib/wunderbar/jquery.rb".freeze, "lib/wunderbar/jquery/filter.rb".freeze, "lib/wunderbar/jquery/stupidtable.rb".freeze, "lib/wunderbar/listen.rb".freeze, "lib/wunderbar/logger.rb".freeze, "lib/wunderbar/markdown.rb".freeze, "lib/wunderbar/marked.rb".freeze, "lib/wunderbar/node.rb".freeze, "lib/wunderbar/pagedown.rb".freeze, "lib/wunderbar/polymer.rb".freeze, "lib/wunderbar/rack.rb".freeze, "lib/wunderbar/rails.rb".freeze, "lib/wunderbar/react.rb".freeze, "lib/wunderbar/render.rb".freeze, "lib/wunderbar/script.rb".freeze, "lib/wunderbar/server.rb".freeze, "lib/wunderbar/sinatra.rb".freeze, "lib/wunderbar/underscore.rb".freeze, "lib/wunderbar/vendor".freeze, "lib/wunderbar/vendor/Markdown.Converter.js".freeze, "lib/wunderbar/vendor/bootstrap-theme.min.css".freeze, "lib/wunderbar/vendor/bootstrap.min.css".freeze, "lib/wunderbar/vendor/bootstrap.min.js".freeze, "lib/wunderbar/vendor/eventsource.min.js".freeze, "lib/wunderbar/vendor/jquery-3.2.1.min.js".freeze, "lib/wunderbar/vendor/marked.min.js".freeze, "lib/wunderbar/vendor/polymer-v0.0.20131003.min.js".freeze, "lib/wunderbar/vendor/react-dom-server.min.js".freeze, "lib/wunderbar/vendor/react-dom.min.js".freeze, "lib/wunderbar/vendor/react-with-addons.min.js".freeze, "lib/wunderbar/vendor/stupidtable.min.js".freeze, "lib/wunderbar/vendor/underscore-min.js".freeze, "lib/wunderbar/vendor/vue-server.min.js".freeze, "lib/wunderbar/vendor/vue.min.js".freeze, "lib/wunderbar/version.rb".freeze, "lib/wunderbar/vue.rb".freeze, "lib/wunderbar/websocket.rb".freeze, "wunderbar.gemspec".freeze]
16
+ s.files = ["COPYING".freeze, "README.md".freeze, "lib/wunderbar".freeze, "lib/wunderbar.rb".freeze, "lib/wunderbar/asset.rb".freeze, "lib/wunderbar/backtick.rb".freeze, "lib/wunderbar/bootstrap".freeze, "lib/wunderbar/bootstrap.rb".freeze, "lib/wunderbar/bootstrap/theme.rb".freeze, "lib/wunderbar/builder.rb".freeze, "lib/wunderbar/cgi-methods.rb".freeze, "lib/wunderbar/coderay.rb".freeze, "lib/wunderbar/coffeescript.rb".freeze, "lib/wunderbar/cssproxy.rb".freeze, "lib/wunderbar/environment.rb".freeze, "lib/wunderbar/eventsource.rb".freeze, "lib/wunderbar/html-methods.rb".freeze, "lib/wunderbar/installation.rb".freeze, "lib/wunderbar/job-control.rb".freeze, "lib/wunderbar/jquery".freeze, "lib/wunderbar/jquery.rb".freeze, "lib/wunderbar/jquery/filter.rb".freeze, "lib/wunderbar/jquery/stupidtable.rb".freeze, "lib/wunderbar/listen.rb".freeze, "lib/wunderbar/logger.rb".freeze, "lib/wunderbar/markdown.rb".freeze, "lib/wunderbar/marked.rb".freeze, "lib/wunderbar/node.rb".freeze, "lib/wunderbar/pagedown.rb".freeze, "lib/wunderbar/polymer.rb".freeze, "lib/wunderbar/rack.rb".freeze, "lib/wunderbar/react.rb".freeze, "lib/wunderbar/render.rb".freeze, "lib/wunderbar/script.rb".freeze, "lib/wunderbar/server.rb".freeze, "lib/wunderbar/sinatra.rb".freeze, "lib/wunderbar/underscore.rb".freeze, "lib/wunderbar/vendor".freeze, "lib/wunderbar/vendor/Markdown.Converter.js".freeze, "lib/wunderbar/vendor/bootstrap-theme.min.css".freeze, "lib/wunderbar/vendor/bootstrap.min.css".freeze, "lib/wunderbar/vendor/bootstrap.min.js".freeze, "lib/wunderbar/vendor/eventsource.min.js".freeze, "lib/wunderbar/vendor/jquery-3.2.1.min.js".freeze, "lib/wunderbar/vendor/marked.min.js".freeze, "lib/wunderbar/vendor/polymer-v0.0.20131003.min.js".freeze, "lib/wunderbar/vendor/react-dom-server.min.js".freeze, "lib/wunderbar/vendor/react-dom.min.js".freeze, "lib/wunderbar/vendor/react-with-addons.min.js".freeze, "lib/wunderbar/vendor/stupidtable.min.js".freeze, "lib/wunderbar/vendor/underscore-min.js".freeze, "lib/wunderbar/vendor/vue-server.min.js".freeze, "lib/wunderbar/vendor/vue.min.js".freeze, "lib/wunderbar/version.rb".freeze, "lib/wunderbar/vue.rb".freeze, "lib/wunderbar/websocket.rb".freeze, "wunderbar.gemspec".freeze]
17
17
  s.homepage = "http://github.com/rubys/wunderbar".freeze
18
18
  s.licenses = ["MIT".freeze]
19
19
  s.required_ruby_version = Gem::Requirement.new(">= 1.9.3".freeze)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wunderbar
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.1
4
+ version: 1.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Ruby
@@ -60,7 +60,6 @@ files:
60
60
  - lib/wunderbar/pagedown.rb
61
61
  - lib/wunderbar/polymer.rb
62
62
  - lib/wunderbar/rack.rb
63
- - lib/wunderbar/rails.rb
64
63
  - lib/wunderbar/react.rb
65
64
  - lib/wunderbar/render.rb
66
65
  - lib/wunderbar/script.rb
@@ -1,43 +0,0 @@
1
- require 'active_support/core_ext'
2
- require 'action_view'
3
-
4
- module Wunderbar
5
- module Rails
6
- class HtmlHandler
7
- cattr_accessor :default_format
8
- self.default_format = Mime[:html]
9
-
10
- def self.call(template, source=nil)
11
- %{
12
- compiled = Proc.new {#{template.source}}
13
- x = Wunderbar::HtmlMarkup.new(self);
14
- instance_variables.each do |var|
15
- x.instance_variable_set var, instance_variable_get(var)
16
- end
17
- x.instance_eval(&compiled)
18
- x._.target!
19
- }.strip # take care to preserve line numbers in original source
20
- end
21
- end
22
-
23
- class JsonHandler
24
- cattr_accessor :default_format
25
- self.default_format = Mime[:json]
26
-
27
- def self.call(template, source=nil)
28
- %{
29
- compiled = Proc.new {#{template.source}}
30
- x = Wunderbar::JsonBuilder.new(self);
31
- instance_variables.each do |var|
32
- x.instance_variable_set var, instance_variable_get(var)
33
- end
34
- x.instance_eval(&compiled)
35
- x.target!
36
- }.strip # take care to preserve line numbers in original source
37
- end
38
- end
39
-
40
- ActionView::Template.register_template_handler :_html, HtmlHandler
41
- ActionView::Template.register_template_handler :_json, JsonHandler
42
- end
43
- end