wunderbar 0.10.3 → 0.10.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,9 +6,11 @@ module Wunderbar
6
6
  indented_data!(text) {|data| text! data}
7
7
  end
8
8
 
9
- def indented_data!(data, &block)
9
+ def indented_data!(data, pre=nil, post=nil, &block)
10
10
  return if data.strip.length == 0
11
11
 
12
+ self << pre + target!.pop if pre
13
+
12
14
  if @indent > 0
13
15
  data.sub! /\n\s*\Z/, ''
14
16
  data.sub! /\A\s*\n/, ''
@@ -31,6 +33,8 @@ module Wunderbar
31
33
  end
32
34
 
33
35
  _newline unless data =~ /\n\Z/
36
+
37
+ self << post if post
34
38
  end
35
39
 
36
40
  def disable_indendation!(&block)
@@ -189,8 +193,30 @@ module Wunderbar
189
193
 
190
194
  # insert verbatim
191
195
  def <<(string)
192
- require 'nokogiri'
193
- @_builder << Nokogiri::HTML::fragment(string).to_xml
196
+ if not String === string or string.include? '<' or string.include? '&'
197
+ require 'nokogiri'
198
+ string = Nokogiri::HTML::fragment(string.to_s).to_xml
199
+ end
200
+
201
+ # fix CDATA in most cases (notably scripts)
202
+ string.gsub!(/<!\[CDATA\[(.*?)\]\]>/m) do |cdata|
203
+ if $1.include? '<' or $1.include? '&'
204
+ "//<![CDATA[\n#{$1}\n//]]>"
205
+ else
206
+ $1
207
+ end
208
+ end
209
+
210
+ # fix CDATA for style elements
211
+ string.gsub!(/<style>\/\/<!\[CDATA\[\n(.*?)\s+\/\/\]\]>/m) do |cdata|
212
+ if $1.include? '<' or $1.include? '&'
213
+ "<style>/*<![CDATA[*/\n#{$1.gsub("\n\Z",'')}\n/*]]>*/"
214
+ else
215
+ $1
216
+ end
217
+ end
218
+
219
+ @_builder << string.to_s
194
220
  rescue LoadError
195
221
  @_builder << string
196
222
  end
@@ -49,5 +49,9 @@ if self.to_s == 'main'
49
49
  def _text(*args, &block)
50
50
  Wunderbar.text(*args, &block)
51
51
  end
52
+
53
+ def env
54
+ ENV
55
+ end
52
56
  end
53
57
  end
@@ -62,10 +62,18 @@ class HtmlMarkup < Wunderbar::BuilderBase
62
62
  if %w(script style).include?(name)
63
63
  if String === args.first and not block
64
64
  text = args.shift
65
- if @xhtml
66
- block = Proc.new {@x.indented_text! text}
65
+ if !text.include? '&' and !text.include? '<'
66
+ block = Proc.new do
67
+ @x.indented_data!(text)
68
+ end
69
+ elsif name == 'style'
70
+ block = Proc.new do
71
+ @x.indented_data!(text, "/*<![CDATA[*/", "/*]]>*/")
72
+ end
67
73
  else
68
- block = Proc.new {@x.indented_data! text}
74
+ block = Proc.new do
75
+ @x.indented_data!(text, "//<![CDATA[", "//]]>")
76
+ end
69
77
  end
70
78
  end
71
79
 
@@ -106,20 +114,14 @@ class HtmlMarkup < Wunderbar::BuilderBase
106
114
  end
107
115
  end
108
116
  else
109
- @x.tag! name, *args, &block
110
- end
111
- end
112
-
113
- def <<(string)
114
- STDERR.puts @xhtml
115
- if @xhtml
116
- begin
117
- require 'nokogiri'
118
- string = Nokogiri::HTML::fragment(string).to_xml
119
- rescue LoadError
117
+ target = @x.tag! name, *args, &block
118
+ if block and %w(script style).include?(name)
119
+ if %w{//]]> /*]]>*/}.include? target[-4]
120
+ target[-4], target[-3] = target[-3], target[-4]
121
+ end
120
122
  end
123
+ target
121
124
  end
122
- super(string)
123
125
  end
124
126
 
125
127
  def _exception(*args)
@@ -12,70 +12,74 @@ module Wunderbar
12
12
 
13
13
  end
14
14
 
15
- at_exit do
16
- port = ARGV.find {|arg| arg =~ /--port=(.*)/}
17
- if port and ARGV.delete(port)
18
- port = $1.to_i
15
+ port = ARGV.find {|arg| arg =~ /--port=(.*)/}
16
+ if port and ARGV.delete(port)
17
+ port = $1.to_i
19
18
 
20
- # Evaluate optional data from the script (after __END__)
21
- eval Wunderbar.data if Object.const_defined? :DATA
19
+ # Evaluate optional data from the script (after __END__)
20
+ eval Wunderbar.data if Object.const_defined? :DATA
22
21
 
23
- # Allow optional environment override
24
- environment = ARGV.find {|arg| arg =~ /--environment=(.*)/}
25
- ENV['RACK_ENV'] = environment if environment and ARGV.delete(environment)
22
+ # Allow optional environment override
23
+ environment = ARGV.find {|arg| arg =~ /--environment=(.*)/}
24
+ ENV['RACK_ENV'] = environment if environment and ARGV.delete(environment)
26
25
 
26
+ at_exit do
27
27
  # start the server
28
28
  require 'rack'
29
29
  require 'wunderbar/rack'
30
30
  Rack::Server.start :app => Wunderbar::RackApp.new, :Port => port,
31
31
  :environment => (ENV['RACK_ENV'] || 'development')
32
+ end
32
33
 
33
- elsif defined? Sinatra
34
+ elsif defined? Sinatra
34
35
 
35
- require 'wunderbar/sinatra'
36
+ require 'wunderbar/sinatra'
36
37
 
37
- elsif Wunderbar.queue.length > 0
38
+ else
38
39
 
39
- # Only prompt if explicitly asked for
40
- ARGV.push '' if ARGV.empty?
41
- ARGV.delete('--prompt') or ARGV.delete('--offline')
40
+ require 'etc'
41
+ $USER = ENV['REMOTE_USER'] ||= ENV['USER'] || Etc.getlogin
42
+ if $USER.nil?
43
+ if RUBY_PLATFORM =~ /darwin/i
44
+ $USER = `dscl . -search /Users UniqueID #{Process.uid}`.split.first
45
+ elsif RUBY_PLATFORM =~ /linux/i
46
+ $USER = `getent passwd #{Process.uid}`.split(':').first
47
+ end
42
48
 
43
- cgi = CGI.new
44
- cgi.instance_variable_set '@env', ENV
45
- class << cgi
46
- attr_accessor :env
49
+ ENV['USER'] ||= $USER
50
+ end
47
51
 
48
- # was this invoked via HTTP POST?
49
- %w(delete get head options post put trace).each do |http_method|
50
- define_method "#{http_method}?" do
51
- env['REQUEST_METHOD'].to_s.downcase == http_method
52
+ ENV['HOME'] ||= Dir.home($USER) rescue nil
53
+ ENV['HOME'] = ENV['DOCUMENT_ROOT'] if not File.exist? ENV['HOME'].to_s
54
+
55
+ at_exit do
56
+ if Wunderbar.queue.length > 0
57
+ # Only prompt if explicitly asked for
58
+ ARGV.push '' if ARGV.empty?
59
+ ARGV.delete('--prompt') or ARGV.delete('--offline')
60
+
61
+ cgi = CGI.new
62
+ cgi.instance_variable_set '@env', ENV
63
+ class << cgi
64
+ attr_accessor :env
65
+
66
+ # was this invoked via HTTP POST?
67
+ %w(delete get head options post put trace).each do |http_method|
68
+ define_method "#{http_method}?" do
69
+ env['REQUEST_METHOD'].to_s.downcase == http_method
70
+ end
52
71
  end
53
72
  end
54
- end
55
73
 
56
- # get arguments if CGI couldn't find any...
57
- cgi.params.merge!(CGI.parse(ARGV.join('&'))) if cgi.params.empty?
74
+ # get arguments if CGI couldn't find any...
75
+ cgi.params.merge!(CGI.parse(ARGV.join('&'))) if cgi.params.empty?
58
76
 
59
- require 'etc'
60
- $USER = ENV['REMOTE_USER'] ||= ENV['USER'] || Etc.getlogin
61
- if $USER.nil?
62
- if RUBY_PLATFORM =~ /darwin/i
63
- $USER = `dscl . -search /Users UniqueID #{Process.uid}`.split.first
64
- elsif RUBY_PLATFORM =~ /linux/i
65
- $USER = `getent passwd #{Process.uid}`.split(':').first
66
- end
77
+ # allow the REQUEST_METHOD to be set for command line invocations
78
+ ENV['REQUEST_METHOD'] ||= 'POST' if ARGV.delete('--post')
79
+ ENV['REQUEST_METHOD'] ||= 'GET' if ARGV.delete('--get')
67
80
 
68
- ENV['USER'] ||= $USER
81
+ # CGI or command line
82
+ Wunderbar::CGI.call(cgi)
69
83
  end
70
-
71
- ENV['HOME'] ||= Dir.home($USER) rescue nil
72
- ENV['HOME'] = ENV['DOCUMENT_ROOT'] if not File.exist? ENV['HOME'].to_s
73
-
74
- # allow the REQUEST_METHOD to be set for command line invocations
75
- ENV['REQUEST_METHOD'] ||= 'POST' if ARGV.delete('--post')
76
- ENV['REQUEST_METHOD'] ||= 'GET' if ARGV.delete('--get')
77
-
78
- # CGI or command line
79
- Wunderbar::CGI.call(cgi)
80
84
  end
81
85
  end
@@ -2,7 +2,7 @@ module Wunderbar
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 10
5
- TINY = 3
5
+ TINY = 4
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
data/wunderbar.gemspec CHANGED
@@ -2,17 +2,17 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "wunderbar"
5
- s.version = "0.10.3"
5
+ s.version = "0.10.4"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Sam Ruby"]
9
- s.date = "2012-04-13"
9
+ s.date = "2012-04-15"
10
10
  s.description = " Wunderbar makes it easy to produce valid HTML5, wellformed XHTML, Unicode\n (utf-8), consistently indented, readable applications. This includes\n output that conforms to the Polyglot specification and the emerging\n results from the XML Error Recovery Community Group.\n"
11
11
  s.email = "rubys@intertwingly.net"
12
12
  s.files = ["wunderbar.gemspec", "README.md", "COPYING", "lib/wunderbar.rb", "lib/wunderbar", "lib/wunderbar/installation.rb", "lib/wunderbar/html-methods.rb", "lib/wunderbar/job-control.rb", "lib/wunderbar/server.rb", "lib/wunderbar/logger.rb", "lib/wunderbar/rack.rb", "lib/wunderbar/builder.rb", "lib/wunderbar/sinatra.rb", "lib/wunderbar/environment.rb", "lib/wunderbar/cgi-methods.rb", "lib/wunderbar/cssproxy.rb", "lib/wunderbar/version.rb"]
13
13
  s.homepage = "http://github.com/rubys/wunderbar"
14
14
  s.require_paths = ["lib"]
15
- s.rubygems_version = "1.8.21"
15
+ s.rubygems_version = "1.8.15"
16
16
  s.summary = "HTML Generator and CGI application support"
17
17
 
18
18
  if s.respond_to? :specification_version then
metadata CHANGED
@@ -1,60 +1,47 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: wunderbar
3
- version: !ruby/object:Gem::Version
4
- hash: 49
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.10.4
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 10
9
- - 3
10
- version: 0.10.3
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Sam Ruby
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-04-13 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-04-15 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: builder
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &13584540 !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 7
29
- segments:
30
- - 3
31
- - 0
32
- version: "3.0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '3.0'
33
22
  type: :runtime
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
36
- name: json
37
23
  prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *13584540
25
+ - !ruby/object:Gem::Dependency
26
+ name: json
27
+ requirement: &13583500 !ruby/object:Gem::Requirement
39
28
  none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- hash: 3
44
- segments:
45
- - 0
46
- version: "0"
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
47
33
  type: :runtime
48
- version_requirements: *id002
49
- description: " Wunderbar makes it easy to produce valid HTML5, wellformed XHTML, Unicode\n (utf-8), consistently indented, readable applications. This includes\n output that conforms to the Polyglot specification and the emerging\n results from the XML Error Recovery Community Group.\n"
34
+ prerelease: false
35
+ version_requirements: *13583500
36
+ description: ! " Wunderbar makes it easy to produce valid HTML5, wellformed XHTML,
37
+ Unicode\n (utf-8), consistently indented, readable applications. This includes\n
38
+ \ output that conforms to the Polyglot specification and the emerging\n results
39
+ from the XML Error Recovery Community Group.\n"
50
40
  email: rubys@intertwingly.net
51
41
  executables: []
52
-
53
42
  extensions: []
54
-
55
43
  extra_rdoc_files: []
56
-
57
- files:
44
+ files:
58
45
  - wunderbar.gemspec
59
46
  - README.md
60
47
  - COPYING
@@ -73,36 +60,26 @@ files:
73
60
  - lib/wunderbar/version.rb
74
61
  homepage: http://github.com/rubys/wunderbar
75
62
  licenses: []
76
-
77
63
  post_install_message:
78
64
  rdoc_options: []
79
-
80
- require_paths:
65
+ require_paths:
81
66
  - lib
82
- required_ruby_version: !ruby/object:Gem::Requirement
67
+ required_ruby_version: !ruby/object:Gem::Requirement
83
68
  none: false
84
- requirements:
85
- - - ">="
86
- - !ruby/object:Gem::Version
87
- hash: 3
88
- segments:
89
- - 0
90
- version: "0"
91
- required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ! '>='
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ required_rubygems_version: !ruby/object:Gem::Requirement
92
74
  none: false
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- hash: 3
97
- segments:
98
- - 0
99
- version: "0"
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
100
79
  requirements: []
101
-
102
80
  rubyforge_project:
103
- rubygems_version: 1.8.21
81
+ rubygems_version: 1.8.15
104
82
  signing_key:
105
83
  specification_version: 3
106
84
  summary: HTML Generator and CGI application support
107
85
  test_files: []
108
-