wunderbar 1.2.10 → 1.3.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
  SHA256:
3
- metadata.gz: 25300e523256c215058ba7101daf53cedac48945284e5d0e1fa9edfebe1eb284
4
- data.tar.gz: e363a0d5ded5ea339136b8177b86908d3c206469250ecede8167a299b8070695
3
+ metadata.gz: faf3ed56159ea9aae14376907dd0c17efabb7560f08b886b1f4f781be5b630af
4
+ data.tar.gz: f0a40ec22da2f77faf6b97c6a156198430a4afe12d96baacd37c8c489bcc037b
5
5
  SHA512:
6
- metadata.gz: 357d98b67e760a7edb05952363eb00793b8d60a4242e366b60eb265af1690520c4fa48c2f16a44a1a53e5d3646338308b870a2aef236a0636ebb53ad4b0ff32d
7
- data.tar.gz: 3ca9b2345ac95e0d3c34561b549276c705be04d4ae2916812a286151a94ddd30258c02b86451b608e0aa684fe6f35d0adf4c045182e85c8f256c1d5b38c7344b
6
+ metadata.gz: fba3b4c3676b35938fc132792a5fb8d73ea949fe3d76b9a4a05a2b83a2d24e3b933ce993b45e36717dc9877c8a2a429af80dceab4313dfaa3ef8eb63cdba4380
7
+ data.tar.gz: f9d3f47d1f81627649f98ebfeda570f84dadb9f33e9839a06584f31c52da587b98ca9be027f411a805f82c09979bb96e92882be0a8907dd743193fbf4c51f8ee
data/README.md CHANGED
@@ -371,13 +371,15 @@ dependencies](#optional-dependencies) below), calls to insert markup
371
371
  (`_{...}`) will escape the markup if the input is `tainted` and not explicitly
372
372
  marked as `html-safe?` (when using Rails).
373
373
 
374
- For all environments other than Rails, unless you call `Wunderbar.unsafe!` at
375
- the top of your script, Wunderbar will also set
376
- [`$SAFE=1`](http://www.ruby-doc.org/docs/ProgrammingRuby/html/taint.html)
377
- before processing requests. This means that you will need to
378
- [`untaint`](ruby-doc.org/core/Object.html#method-i-untaint) all inputs
379
- received from external sources before you make system calls or access the file
380
- system.
374
+ For Ruby version < 2.6.0:
375
+
376
+ > For all environments other than Rails, unless you call `Wunderbar.unsafe!` at
377
+ > the top of your script, Wunderbar will also set
378
+ > [`$SAFE=1`](http://www.ruby-doc.org/docs/ProgrammingRuby/html/taint.html)
379
+ > before processing requests. This means that you will need to
380
+ > [`untaint`](ruby-doc.org/core/Object.html#method-i-untaint) all inputs
381
+ > received from external sources before you make system calls or access the file
382
+ > system.
381
383
 
382
384
  A special feature that effectively is only available in the Rails environment:
383
385
  if the first argument to call that creates an element is `html_safe?`, then
@@ -461,8 +461,14 @@ module Wunderbar
461
461
  output_prefix = opts[:prefix] || {}
462
462
  output_prefix[:stdin] ||= '$ '
463
463
 
464
- super do |kind, line|
465
- @_target.puts "#{output_prefix[kind]}#{line}"
464
+ if Hash === args.last # support original code which needed two hashes
465
+ super do |kind, line|
466
+ @_target.puts "#{output_prefix[kind]}#{line}"
467
+ end
468
+ else
469
+ super(*args, opts) do |kind, line|
470
+ @_target.puts "#{output_prefix[kind]}#{line}"
471
+ end
466
472
  end
467
473
  end
468
474
 
@@ -587,8 +593,14 @@ module Wunderbar
587
593
  @_target[transcript] = []
588
594
  end
589
595
 
590
- super do |kind, line|
591
- @_target[transcript] << "#{output_prefix[kind]}#{line}"
596
+ if Hash === args.last # support original code which needed two hashes
597
+ super do |kind, line|
598
+ @_target[transcript] << "#{output_prefix[kind]}#{line}"
599
+ end
600
+ else
601
+ super(*args, opts) do |kind, line|
602
+ @_target[transcript] << "#{output_prefix[kind]}#{line}"
603
+ end
592
604
  end
593
605
  end
594
606
 
@@ -5,14 +5,17 @@ module Wunderbar
5
5
  TEXT = ARGV.delete('--text')
6
6
  end
7
7
 
8
- @@unsafe = false
8
+ # Ruby 2.6.0 gets rid of $SAFE > 1; unfortunately in the process it
9
+ # treats $SAFE = 1 as a higher level; @FAFE = 1 no longer is limited
10
+ # to taintness checks, it not treats all File operations as unsafe
11
+ @@unsafe = (RUBY_VERSION.split('.').map(&:to_i) <=> [2, 6, 0]) == 1
9
12
 
10
13
  def self.unsafe!(mode=true)
11
14
  @@unsafe=mode
12
15
  end
13
16
 
14
17
  def self.safe?
15
- if $SAFE == 0 and not @@unsafe
18
+ if not @@unsafe and $SAFE == 0
16
19
  # some gems (e.g. em-websocket-0.3.6) insert unsafe entries into the
17
20
  # path, and that prevents requires from succeeding. If it looks like
18
21
  # we are about to make a transition to $SAFE=1, clean up that mess
@@ -44,11 +47,16 @@ module Wunderbar
44
47
  end
45
48
 
46
49
  @@templates = {}
50
+ @@files = {}
47
51
 
48
52
  def self.templates
49
53
  @@templates
50
54
  end
51
55
 
56
+ def self.files
57
+ @@files
58
+ end
59
+
52
60
  module API
53
61
  def _html(*args, &block)
54
62
  Wunderbar.html(*args, &block)
@@ -74,6 +82,11 @@ module Wunderbar
74
82
  def _template(name, &block)
75
83
  Wunderbar.templates[name.to_s.gsub('_','-')] = block
76
84
  end
85
+
86
+ def _file(name, options={}, &block)
87
+ options[:source] = block if block
88
+ Wunderbar.files[name] = options
89
+ end
77
90
  end
78
91
 
79
92
  #
@@ -1,5 +1,6 @@
1
1
  require 'wunderbar'
2
2
  require 'rack'
3
+ require 'rack/media_type'
3
4
 
4
5
  module Wunderbar
5
6
  class RackApp
@@ -9,7 +10,14 @@ module Wunderbar
9
10
  @_request = Rack::Request.new(env)
10
11
  @_response = Rack::Response.new
11
12
  Wunderbar.logger = @_request.logger
12
- if Wunderbar.safe? and $SAFE==0
13
+ file = Wunderbar.files[env['PATH_INFO']]
14
+
15
+ if file
16
+ mime = file[:mime] ||
17
+ Rack::Mime::MIME_TYPES[File.extname(env['PATH_INFO'])]
18
+ @_response.set_header('Content-Type', mime) if mime
19
+ @_response.write(file[:content] || file[:source].call)
20
+ elsif Wunderbar.safe? and $SAFE==0
13
21
  Proc.new { $SAFE=1; Wunderbar::CGI.call(self) }.call
14
22
  else
15
23
  Wunderbar::CGI.call(self)
@@ -43,6 +51,12 @@ module Wunderbar
43
51
  def response
44
52
  @_response
45
53
  end
54
+
55
+ %w(delete get head options post put trace).each do |http_method|
56
+ define_method "#{http_method}?" do
57
+ @_env['REQUEST_METHOD'].to_s.downcase == http_method
58
+ end
59
+ end
46
60
  end
47
61
  end
48
62
 
@@ -7,7 +7,7 @@ module Wunderbar
7
7
  cattr_accessor :default_format
8
8
  self.default_format = Mime[:html]
9
9
 
10
- def self.call(template)
10
+ def self.call(template, source=nil)
11
11
  %{
12
12
  compiled = Proc.new {#{template.source}}
13
13
  x = Wunderbar::HtmlMarkup.new(self);
@@ -24,7 +24,7 @@ module Wunderbar
24
24
  cattr_accessor :default_format
25
25
  self.default_format = Mime[:json]
26
26
 
27
- def self.call(template)
27
+ def self.call(template, source=nil)
28
28
  %{
29
29
  compiled = Proc.new {#{template.source}}
30
30
  x = Wunderbar::JsonBuilder.new(self);
@@ -16,6 +16,12 @@ class Wunderbar::Render
16
16
  "ReactDOMServer.renderToString(#{common})"
17
17
  end
18
18
 
19
+ # return all nodes on server rendering, as there is no wrapper element
20
+ # like there is for vue
21
+ def self.extract(nodes)
22
+ nodes
23
+ end
24
+
19
25
  def self.client(common, element, target)
20
26
  "ReactDOM.render(#{common}, #{element})"
21
27
  end
@@ -131,7 +131,7 @@ class Wunderbar::XmlMarkup
131
131
  html = Wunderbar::Render.eval(scripts, server)
132
132
 
133
133
  # insert results into target
134
- nodes = builder._ { html }
134
+ nodes = Wunderbar::Render.extract(builder._ { html })
135
135
 
136
136
  begin
137
137
  if nodes.length == 1
@@ -1,8 +1,8 @@
1
1
  module Wunderbar
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 1
4
- MINOR = 2
5
- TINY = 10
4
+ MINOR = 3
5
+ TINY = 4
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -18,13 +18,26 @@ class Wunderbar::Render
18
18
  end
19
19
 
20
20
  def self.server(common)
21
- "VueServer.renderToString(new Vue({render: function($h) {return #{common}}}))"
21
+ "VueServer.renderToString(new Vue({render: function($h) {
22
+ return $h('div', #{common})}}))"
23
+ end
24
+
25
+ # unwrap children from div wrapper inserted by self.server
26
+ def self.extract(nodes)
27
+ if
28
+ nodes.length == 1 and nodes.first.name == 'div' and
29
+ nodes.first.attrs['data-server-rendered'].to_s == 'true'
30
+ then
31
+ nodes.first.children
32
+ else
33
+ nodes
34
+ end
22
35
  end
23
36
 
24
37
  def self.client(common, element, target)
25
38
  wrap = "$h(#{target.name.inspect}, " +
26
39
  "{attrs: {#{target.attrs.map {|name, value|
27
- "#{name}: #{value.inspect}"}.join(', ')}}}, [#{common}])"
40
+ "#{name}: #{value.inspect}"}.join(', ')}}}, #{common})"
28
41
  "new Vue({el: #{element}, render: function($h) {return #{wrap}}})"
29
42
  end
30
43
 
@@ -1,21 +1,23 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: wunderbar 1.2.10 ruby lib
2
+ lib = File.expand_path('../lib/', __FILE__)
3
+ $:.unshift lib unless $:.include?(lib)
4
+ require 'wunderbar/version'
3
5
 
4
6
  Gem::Specification.new do |s|
5
7
  s.name = "wunderbar".freeze
6
- s.version = "1.2.10"
8
+ s.version = Wunderbar::VERSION::STRING
7
9
 
8
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
9
11
  s.require_paths = ["lib".freeze]
10
12
  s.authors = ["Sam Ruby".freeze]
11
- s.date = "2018-01-27"
13
+ s.date = "2019-06-07"
12
14
  s.description = " Wunderbar makes it easy to produce valid HTML5, wellformed XHTML, Unicode\n (utf-8), consistently indented, readable applications.'\n".freeze
13
15
  s.email = "rubys@intertwingly.net".freeze
14
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]
15
17
  s.homepage = "http://github.com/rubys/wunderbar".freeze
16
18
  s.licenses = ["MIT".freeze]
17
19
  s.required_ruby_version = Gem::Requirement.new(">= 1.9.3".freeze)
18
- s.rubygems_version = "2.7.4".freeze
20
+ s.rubygems_version = "3.0.6".freeze
19
21
  s.summary = "HTML Generator and CGI application support".freeze
20
22
 
21
23
  if s.respond_to? :specification_version then
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wunderbar
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.10
4
+ version: 1.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Ruby
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-01-27 00:00:00.000000000 Z
11
+ date: 2019-06-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -105,8 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
105
  - !ruby/object:Gem::Version
106
106
  version: '0'
107
107
  requirements: []
108
- rubyforge_project:
109
- rubygems_version: 2.7.4
108
+ rubygems_version: 3.1.2
110
109
  signing_key:
111
110
  specification_version: 4
112
111
  summary: HTML Generator and CGI application support