cgi-spa 0.6.0 → 0.7.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
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "cgi-spa"
5
- s.version = "0.6.0"
5
+ s.version = "0.7.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Sam Ruby"]
9
- s.date = "2012-01-07"
9
+ s.date = "2012-01-10"
10
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
11
  s.email = "rubys@intertwingly.net"
12
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"]
@@ -11,7 +11,7 @@ rescue Exception => exception
11
11
  ensure
12
12
  if $XHR_JSON
13
13
  Kernel.print "Status: 404 Not Found\r\n" unless output
14
- $cgi.out 'type' => 'application/json', 'Cache-Control' => 'no-cache' do
14
+ $cgi.out? 'type' => 'application/json', 'Cache-Control' => 'no-cache' do
15
15
  begin
16
16
  JSON.pretty_generate(output)+ "\n"
17
17
  rescue
@@ -51,7 +51,7 @@ ensure
51
51
  end
52
52
  if $TEXT
53
53
  Kernel.print "Status: 404 Not Found\r\n" if @output.empty?
54
- $cgi.out 'type' => 'text/plain', 'Cache-Control' => 'no-cache' do
54
+ $cgi.out? 'type' => 'text/plain', 'Cache-Control' => 'no-cache' do
55
55
  @output.join
56
56
  end
57
57
  @output = nil
@@ -65,18 +65,33 @@ def $cgi.text! &block
65
65
  Process.exit
66
66
  end
67
67
 
68
+ # Conditionally provide output, based on ETAG
69
+ def $cgi.out?(headers, &block)
70
+ content = block.call
71
+ require 'digest/md5'
72
+ etag = Digest::MD5.hexdigest(content)
73
+
74
+ if ENV['HTTP_IF_NONE_MATCH'] == etag.inspect
75
+ print "Status: 304 Not Modified\r\n\r\n"
76
+ else
77
+ $cgi.out headers.merge('Etag' => etag.inspect) do
78
+ content
79
+ end
80
+ end
81
+ end
82
+
68
83
  # produce html/xhtml
69
84
  def $cgi.html
70
85
  return if $XHR_JSON or $TEXT
71
86
  if $XHTML
72
- $cgi.out 'type' => 'application/xhtml+xml', 'charset' => 'UTF-8' do
87
+ $cgi.out? 'type' => 'application/xhtml+xml', 'charset' => 'UTF-8' do
73
88
  $x.declare! :DOCTYPE, :html
74
89
  $x.html :xmlns => 'http://www.w3.org/1999/xhtml' do
75
90
  yield $x
76
91
  end
77
92
  end
78
93
  else
79
- $cgi.out 'type' => 'text/html', 'charset' => 'UTF-8' do
94
+ $cgi.out? 'type' => 'text/html', 'charset' => 'UTF-8' do
80
95
  $x.declare! :DOCTYPE, :html
81
96
  $x.html do
82
97
  yield $x
@@ -1,7 +1,7 @@
1
1
  module CgiSpa
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
- MINOR = 6
4
+ MINOR = 7
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: 7
4
+ hash: 3
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 6
8
+ - 7
9
9
  - 0
10
- version: 0.6.0
10
+ version: 0.7.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: 2012-01-07 00:00:00 Z
18
+ date: 2012-01-10 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: builder