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 +4 -4
- data/README.md +9 -7
- data/lib/wunderbar/builder.rb +16 -4
- data/lib/wunderbar/environment.rb +15 -2
- data/lib/wunderbar/rack.rb +15 -1
- data/lib/wunderbar/rails.rb +2 -2
- data/lib/wunderbar/react.rb +6 -0
- data/lib/wunderbar/render.rb +1 -1
- data/lib/wunderbar/version.rb +2 -2
- data/lib/wunderbar/vue.rb +15 -2
- data/wunderbar.gemspec +6 -4
- metadata +3 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: faf3ed56159ea9aae14376907dd0c17efabb7560f08b886b1f4f781be5b630af
         | 
| 4 | 
            +
              data.tar.gz: f0a40ec22da2f77faf6b97c6a156198430a4afe12d96baacd37c8c489bcc037b
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 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  | 
| 375 | 
            -
             | 
| 376 | 
            -
             | 
| 377 | 
            -
             | 
| 378 | 
            -
            [` | 
| 379 | 
            -
             | 
| 380 | 
            -
             | 
| 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
         | 
    
        data/lib/wunderbar/builder.rb
    CHANGED
    
    | @@ -461,8 +461,14 @@ module Wunderbar | |
| 461 461 | 
             
                  output_prefix = opts[:prefix] || {}
         | 
| 462 462 | 
             
                  output_prefix[:stdin]  ||= '$ '
         | 
| 463 463 |  | 
| 464 | 
            -
                   | 
| 465 | 
            -
                     | 
| 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 | 
            -
                   | 
| 591 | 
            -
                     | 
| 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 | 
            -
               | 
| 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 | 
| 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 | 
             
              #
         | 
    
        data/lib/wunderbar/rack.rb
    CHANGED
    
    | @@ -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 | 
            -
                   | 
| 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 |  | 
    
        data/lib/wunderbar/rails.rb
    CHANGED
    
    | @@ -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);
         | 
    
        data/lib/wunderbar/react.rb
    CHANGED
    
    | @@ -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
         | 
    
        data/lib/wunderbar/render.rb
    CHANGED
    
    
    
        data/lib/wunderbar/version.rb
    CHANGED
    
    
    
        data/lib/wunderbar/vue.rb
    CHANGED
    
    | @@ -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) { | 
| 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(', ')}}},  | 
| 40 | 
            +
                  "#{name}: #{value.inspect}"}.join(', ')}}}, #{common})"
         | 
| 28 41 | 
             
                "new Vue({el: #{element}, render: function($h) {return #{wrap}}})"
         | 
| 29 42 | 
             
              end
         | 
| 30 43 |  | 
    
        data/wunderbar.gemspec
    CHANGED
    
    | @@ -1,21 +1,23 @@ | |
| 1 1 | 
             
            # -*- encoding: utf-8 -*-
         | 
| 2 | 
            -
             | 
| 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 =  | 
| 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 = " | 
| 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 = " | 
| 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. | 
| 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:  | 
| 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 | 
            -
             | 
| 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
         |