wunderbar 1.2.10 → 1.3.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
  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