wunderbar 1.4.0 → 1.5.0

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: 01faf4f44e9f567cf1ab080f8f4a54879c0eb6b5d07e0ad6d265ede2cbd4b86f
4
- data.tar.gz: a0db8a63944a68305a337a1eb5cef8114f5f88034e7a9c451cd37228ad97bc40
3
+ metadata.gz: be770934a7f9d0f34e1d506ae7d27f35c5e2ab1a3e5720f56e85fbebf1a02a71
4
+ data.tar.gz: 63546e1889f0aabaf22cf605d0f415c294368732c018279281be18cb79209500
5
5
  SHA512:
6
- metadata.gz: d104318bd2e0e2ee9cd721c3b49790ede15b4459dbe253bc58b9108b6fc91fcb077e932a399b9194417a5dc31c62500684db424db534b4b72c1c709e2defedc1
7
- data.tar.gz: e2d9ca6b2bec1fdb12a253e1ca9df2f73296388c60ee2b165c63305216a353fc0fe37e3ede10c48b6524b7391e060230ca53fa8f393b4d24b957f225da3363a2
6
+ metadata.gz: d23d1a99ad26576668e673da84c73d7cb1eaf376cb9e407084bbcb2d038efba67d01eda47307b82a6c4f50d77539e6378659d2320b0c0efa140644c04f18e712
7
+ data.tar.gz: 2fca8fbf9bbfd2b765db8d9af73ae6ab16fa99654990bab026c2ca2802aba72fa8a1d63bb679fed65dfd1fbf9da0fa91ad6a2cbed423504343606817eca15363
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/
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'
@@ -157,11 +153,7 @@ else
157
153
  ENV['REQUEST_METHOD'] ||= 'GET' if ARGV.delete('--get')
158
154
 
159
155
  # CGI or command line
160
- if Wunderbar.safe? and $SAFE==0
161
- Proc.new { $SAFE=1; Wunderbar::CGI.call(cgi) }.call
162
- else
163
- Wunderbar::CGI.call(cgi)
164
- end
156
+ Wunderbar::CGI.call(cgi)
165
157
  end
166
158
  end
167
159
  end
@@ -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 = 0
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
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.0
4
+ version: 1.5.0
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