cgi-spa 0.5.0 → 0.6.0

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.
data/cgi-spa.gemspec CHANGED
@@ -1,25 +1,22 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
3
  Gem::Specification.new do |s|
4
- s.name = %q{cgi-spa}
5
- s.version = "0.5.0"
4
+ s.name = "cgi-spa"
5
+ s.version = "0.6.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
- s.authors = [%q{Sam Ruby}]
9
- s.date = %q{2011-12-24}
10
- s.description = %q{ Provides a number of globals, helper methods, and monkey patches which
11
- simplify the development of single page applications in the form of
12
- CGI scripts.
13
- }
14
- s.email = %q{rubys@intertwingly.net}
15
- s.extra_rdoc_files = [%q{COPYING}, %q{README}, %q{lib/cgi-spa.rb}, %q{lib/cgi-spa/builder.rb}, %q{lib/cgi-spa/cgi-methods.rb}, %q{lib/cgi-spa/environment.rb}, %q{lib/cgi-spa/html-methods.rb}, %q{lib/cgi-spa/installation.rb}, %q{lib/cgi-spa/job-control.rb}, %q{lib/cgi-spa/version.rb}]
16
- s.files = [%q{COPYING}, %q{Manifest}, %q{README}, %q{Rakefile}, %q{cgi-spa.gemspec}, %q{lib/cgi-spa.rb}, %q{lib/cgi-spa/builder.rb}, %q{lib/cgi-spa/cgi-methods.rb}, %q{lib/cgi-spa/environment.rb}, %q{lib/cgi-spa/html-methods.rb}, %q{lib/cgi-spa/installation.rb}, %q{lib/cgi-spa/job-control.rb}, %q{lib/cgi-spa/version.rb}]
17
- s.homepage = %q{http://github.com/rubys/cgi-spa}
18
- s.rdoc_options = [%q{--line-numbers}, %q{--inline-source}, %q{--title}, %q{Cgi-spa}, %q{--main}, %q{README}]
19
- s.require_paths = [%q{lib}]
20
- s.rubyforge_project = %q{cgi-spa}
21
- s.rubygems_version = %q{1.8.5}
22
- s.summary = %q{CGI Single Page Applications}
8
+ s.authors = ["Sam Ruby"]
9
+ s.date = "2012-01-07"
10
+ s.description = " Provides a number of globals, helper methods, and monkey patches which\n simplify the development of single page applications in the form of\n CGI scripts.\n"
11
+ s.email = "rubys@intertwingly.net"
12
+ s.extra_rdoc_files = ["COPYING", "README", "lib/cgi-spa.rb", "lib/cgi-spa/builder.rb", "lib/cgi-spa/cgi-methods.rb", "lib/cgi-spa/environment.rb", "lib/cgi-spa/html-methods.rb", "lib/cgi-spa/installation.rb", "lib/cgi-spa/job-control.rb", "lib/cgi-spa/version.rb"]
13
+ s.files = ["COPYING", "Manifest", "README", "Rakefile", "cgi-spa.gemspec", "lib/cgi-spa.rb", "lib/cgi-spa/builder.rb", "lib/cgi-spa/cgi-methods.rb", "lib/cgi-spa/environment.rb", "lib/cgi-spa/html-methods.rb", "lib/cgi-spa/installation.rb", "lib/cgi-spa/job-control.rb", "lib/cgi-spa/version.rb"]
14
+ s.homepage = "http://github.com/rubys/cgi-spa"
15
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Cgi-spa", "--main", "README"]
16
+ s.require_paths = ["lib"]
17
+ s.rubyforge_project = "cgi-spa"
18
+ s.rubygems_version = "1.8.11"
19
+ s.summary = "CGI Single Page Applications"
23
20
 
24
21
  if s.respond_to? :specification_version then
25
22
  s.specification_version = 3
@@ -1,8 +1,23 @@
1
1
  # produce json
2
2
  def $cgi.json
3
3
  return unless $XHR_JSON
4
- $cgi.out 'type' => 'application/json', 'Cache-Control' => 'no-cache' do
5
- JSON.pretty_generate(yield)+ "\n"
4
+ output = yield
5
+ rescue Exception => exception
6
+ Kernel.print "Status: 500 Internal Error\r\n"
7
+ output = {
8
+ :exception => exception.inspect,
9
+ :backtrace => exception.backtrace
10
+ }
11
+ ensure
12
+ if $XHR_JSON
13
+ Kernel.print "Status: 404 Not Found\r\n" unless output
14
+ $cgi.out 'type' => 'application/json', 'Cache-Control' => 'no-cache' do
15
+ begin
16
+ JSON.pretty_generate(output)+ "\n"
17
+ rescue
18
+ output.to_json + "\n"
19
+ end
20
+ end
6
21
  end
7
22
  end
8
23
 
@@ -13,9 +28,46 @@ def $cgi.json! &block
13
28
  Process.exit
14
29
  end
15
30
 
31
+ # produce text
32
+ def $cgi.text &block
33
+ return unless $TEXT
34
+ @output = []
35
+ def $cgi.puts(line='')
36
+ @output << line + "\n"
37
+ end
38
+ def $cgi.print(line=nil)
39
+ @output << line
40
+ end
41
+ self.instance_eval &block
42
+ rescue Exception => exception
43
+ Kernel.print "Status: 500 Internal Error\r\n"
44
+ @output << "\n" unless @output.empty?
45
+ @output << exception.inspect + "\n"
46
+ exception.backtrace.each {|frame| @output << " #{frame}\n"}
47
+ ensure
48
+ class << $cgi
49
+ undef puts
50
+ undef print
51
+ end
52
+ if $TEXT
53
+ Kernel.print "Status: 404 Not Found\r\n" if @output.empty?
54
+ $cgi.out 'type' => 'text/plain', 'Cache-Control' => 'no-cache' do
55
+ @output.join
56
+ end
57
+ @output = nil
58
+ end
59
+ end
60
+
61
+ # produce text and quit
62
+ def $cgi.text! &block
63
+ return unless $TEXT
64
+ json(&block)
65
+ Process.exit
66
+ end
67
+
16
68
  # produce html/xhtml
17
69
  def $cgi.html
18
- return if $XHR_JSON
70
+ return if $XHR_JSON or $TEXT
19
71
  if $XHTML
20
72
  $cgi.out 'type' => 'application/xhtml+xml', 'charset' => 'UTF-8' do
21
73
  $x.declare! :DOCTYPE, :html
@@ -35,7 +87,7 @@ end
35
87
 
36
88
  # produce html and quit
37
89
  def $cgi.html! &block
38
- return if $XHR_JSON
90
+ return if $XHR_JSON or $TEXT
39
91
  html(&block)
40
92
  Process.exit
41
93
  end
@@ -3,6 +3,7 @@ $HTTP_GET = ARGV.delete('--html')
3
3
  $HTTP_POST = ARGV.delete('--post')
4
4
  $XHR_JSON = ARGV.delete('--json')
5
5
  $XHTML = ARGV.delete('--xhtml')
6
+ $TEXT = ARGV.delete('--text')
6
7
 
7
8
  # Only prompt if explicitly asked for
8
9
  ARGV.push '' if ARGV.empty?
@@ -18,6 +19,7 @@ $HTTP_GET ||= ($cgi.request_method == 'GET')
18
19
  $HTTP_POST ||= ($cgi.request_method == 'POST')
19
20
  $XHR_JSON ||= ($cgi.accept.to_s =~ /json/)
20
21
  $XHTML ||= ($cgi.accept.to_s =~ /xhtml/)
22
+ $TEXT ||= ($cgi.accept.to_s =~ /plain/ and $cgi.accept.to_s !~ /html/)
21
23
 
22
24
  # get arguments if CGI couldn't find any...
23
25
  $param.merge!(CGI.parse(ARGV.join('&'))) if $param.empty?
@@ -44,7 +46,7 @@ end
44
46
  $env = {}
45
47
  def $env.method_missing(name)
46
48
  delete name.to_s if ENV[name.to_s] != self[name.to_s]
47
- unless has_key?(name.to_s)
49
+ if ENV[name.to_s] and not has_key?(name.to_s)
48
50
  self[name.to_s]=ENV[name.to_s].dup.extend(CgiSpa::Untaint)
49
51
  end
50
52
  self[name.to_s]
@@ -53,16 +55,26 @@ end
53
55
  # quick access to request_uri
54
56
  SELF = ENV['REQUEST_URI'].to_s
55
57
  def SELF?
56
- SELF + "?" # avoids spoiling the cache
58
+ if SELF.include? '?'
59
+ SELF
60
+ else
61
+ SELF + "?" # avoids spoiling the cache
62
+ end
57
63
  end
58
64
 
59
65
  # environment objects
60
- $USER = ENV['USER'] ||
66
+ $USER = ENV['REMOTE_USER'] || ENV['USER'] ||
61
67
  if RUBY_PLATFORM =~ /darwin/
62
68
  `dscl . -search /Users UniqueID #{Process.uid}`.split.first
63
69
  else
64
70
  `getent passwd #{Process.uid}`.split(':').first
65
71
  end
66
72
 
73
+ ENV['REMOTE_USER'] ||= $USER
74
+
67
75
  $HOME = ENV['HOME'] || File.expand_path('~' + $USER)
68
76
  $SERVER = ENV['HTTP_HOST'] || `hostname`.chomp
77
+
78
+ # more implied request types
79
+ $XHR_JSON ||= ($env.REQUEST_URI.to_s =~ /\?json$/)
80
+ $TEXT ||= ($env.REQUEST_URI.to_s =~ /\?text$/)
@@ -1,7 +1,7 @@
1
1
  module CgiSpa
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
- MINOR = 5
4
+ MINOR = 6
5
5
  TINY = 0
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cgi-spa
3
3
  version: !ruby/object:Gem::Version
4
- hash: 11
4
+ hash: 7
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 5
8
+ - 6
9
9
  - 0
10
- version: 0.5.0
10
+ version: 0.6.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Sam Ruby
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-12-24 00:00:00 Z
18
+ date: 2012-01-07 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: builder
@@ -111,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
111
111
  requirements: []
112
112
 
113
113
  rubyforge_project: cgi-spa
114
- rubygems_version: 1.8.5
114
+ rubygems_version: 1.8.11
115
115
  signing_key:
116
116
  specification_version: 3
117
117
  summary: CGI Single Page Applications