rack-server-pages 0.0.4 → 0.0.5
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/CHANGES.md +16 -0
- data/Gemfile +1 -1
- data/README.md +2 -0
- data/config.ru +8 -1
- data/lib/rack-server-pages.rb +2 -1
- data/lib/rack-server-pages/version.rb +5 -0
- data/lib/rack/server_pages.rb +42 -20
- data/lib/rack/server_pages/{sample_helper.rb → php_helper.rb} +1 -1
- data/rack-server-pages.gemspec +2 -2
- data/spec/spec_helper.rb +1 -1
- metadata +8 -6
data/CHANGES.md
CHANGED
@@ -1,6 +1,22 @@
|
|
1
1
|
CHANGES
|
2
2
|
=======
|
3
3
|
|
4
|
+
### [0.0.5](https://github.com/migrs/rack-server-pages/tree/v0.0.5) / 2012-03-18
|
5
|
+
|
6
|
+
* [Changes](https://github.com/migrs/rack-server-pages/compare/v0.0.4...v0.0.5)
|
7
|
+
|
8
|
+
* Feature
|
9
|
+
- Handle exceptions
|
10
|
+
- Add `config.show_exceptions` option
|
11
|
+
- Invoke `on_error` filter when an exception is caught
|
12
|
+
|
13
|
+
* Enhancement
|
14
|
+
- NotFound with 404 file
|
15
|
+
- Rack::ServerPages::NotFound['404.html']
|
16
|
+
|
17
|
+
* Bugfix
|
18
|
+
- Duplicated filters
|
19
|
+
|
4
20
|
### [0.0.4](https://github.com/migrs/rack-server-pages/tree/v0.0.4) / 2012-01-15
|
5
21
|
|
6
22
|
* [Changes](https://github.com/migrs/rack-server-pages/compare/v0.0.3...v0.0.4)
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -8,6 +8,7 @@ There are no controllers or models, just only views like a jsp, asp and php!
|
|
8
8
|
|
9
9
|
[](http://travis-ci.org/migrs/rack-server-pages)
|
10
10
|
[](https://gemnasium.com/migrs/rack-server-pages)
|
11
|
+
[](http://stillmaintained.com/migrs/rack-server-pages)
|
11
12
|
|
12
13
|
## Features
|
13
14
|
|
@@ -18,6 +19,7 @@ There are no controllers or models, just only views like a jsp, asp and php!
|
|
18
19
|
- Include a partial template
|
19
20
|
- Layout template
|
20
21
|
- Before/After filters
|
22
|
+
- Handle exceptions
|
21
23
|
- Include helpers
|
22
24
|
- Integrate with any rack applications (Rails, Sinatra, etc...)
|
23
25
|
- Extremely simple and easy to use!
|
data/config.ru
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
require 'bundler/setup'
|
3
|
-
|
3
|
+
$:.unshift File.dirname(__FILE__) + '/lib'
|
4
|
+
require 'rack-server-pages'
|
4
5
|
|
5
6
|
# Tilt settings
|
6
7
|
require 'tilt'
|
@@ -25,6 +26,12 @@ module SampleHelper
|
|
25
26
|
end
|
26
27
|
|
27
28
|
run Rack::ServerPages.new { |config|
|
29
|
+
#config.show_exceptions = false
|
30
|
+
|
31
|
+
config.on_error do
|
32
|
+
response.body = ['Error!']
|
33
|
+
end
|
34
|
+
|
28
35
|
config.helpers SampleHelper
|
29
36
|
config.helpers do
|
30
37
|
def sample4
|
data/lib/rack-server-pages.rb
CHANGED
@@ -1 +1,2 @@
|
|
1
|
-
require
|
1
|
+
require 'rack/server_pages'
|
2
|
+
require 'rack-server-pages/version'
|
data/lib/rack/server_pages.rb
CHANGED
@@ -8,7 +8,6 @@ require 'forwardable'
|
|
8
8
|
|
9
9
|
module Rack
|
10
10
|
class ServerPages
|
11
|
-
VERSION = '0.0.4'
|
12
11
|
|
13
12
|
class << self
|
14
13
|
def call(env)
|
@@ -25,8 +24,8 @@ module Rack
|
|
25
24
|
yield @config if block_given?
|
26
25
|
@app = app || @config.failure_app || NotFound
|
27
26
|
|
28
|
-
require ::File.dirname(__FILE__) + "/server_pages/
|
29
|
-
@config.helpers Rack::ServerPages::
|
27
|
+
require ::File.dirname(__FILE__) + "/server_pages/php_helper"
|
28
|
+
@config.helpers Rack::ServerPages::PHPHelper
|
30
29
|
|
31
30
|
@config.filter.merge_from_helpers(@config.helpers)
|
32
31
|
@binding = Binding.extended_class(@config.helpers)
|
@@ -72,21 +71,34 @@ module Rack
|
|
72
71
|
def server_page(template)
|
73
72
|
lambda do |env|
|
74
73
|
@binding.new(env).tap do |scope|
|
75
|
-
catch(:halt)
|
74
|
+
catch(:halt) do
|
75
|
+
begin
|
76
|
+
@config.filter.invoke(scope, :before)
|
77
|
+
build_response(template, scope)
|
78
|
+
rescue
|
79
|
+
if @config.show_exceptions?
|
80
|
+
raise $!
|
81
|
+
else
|
82
|
+
scope.response.status = 500
|
83
|
+
scope.response['Content-Type'] ||= "text/html"
|
84
|
+
@config.filter.invoke(scope, :on_error)
|
85
|
+
end
|
86
|
+
ensure
|
87
|
+
@config.filter.invoke(scope, :after)
|
88
|
+
end
|
89
|
+
end
|
76
90
|
end.response.finish
|
77
91
|
end
|
78
92
|
end
|
79
93
|
|
80
94
|
class Filter
|
81
|
-
TYPES = [:before, :after]
|
82
|
-
DEFAULT = Hash[[TYPES, [[]]*TYPES.size].transpose]
|
83
|
-
|
95
|
+
TYPES = [:before, :after, :on_error]
|
84
96
|
TYPES.each do |type|
|
85
97
|
define_method(type) {|*fn, &block| add(type, *fn, &block) }
|
86
98
|
end
|
87
99
|
|
88
|
-
def initialize
|
89
|
-
@filters =
|
100
|
+
def initialize
|
101
|
+
@filters = Hash[[TYPES, Array.new(TYPES.size) {[]}].transpose]
|
90
102
|
end
|
91
103
|
|
92
104
|
def [] type
|
@@ -94,7 +106,7 @@ module Rack
|
|
94
106
|
end
|
95
107
|
|
96
108
|
def merge(other)
|
97
|
-
TYPES.each { |type|
|
109
|
+
TYPES.each { |type| @filters[type].concat other[type] }
|
98
110
|
end
|
99
111
|
|
100
112
|
def merge_from_helpers(helpers)
|
@@ -102,16 +114,12 @@ module Rack
|
|
102
114
|
end
|
103
115
|
|
104
116
|
def add(type, *args, &block)
|
105
|
-
|
106
|
-
|
117
|
+
@filters[type] << block if block_given?
|
118
|
+
@filters[type].concat args unless args.empty?
|
107
119
|
end
|
108
120
|
|
109
|
-
def invoke(scope, type
|
110
|
-
|
111
|
-
invoke(scope, TYPES.first); yield scope; invoke(scope, TYPES.last)
|
112
|
-
else
|
113
|
-
self[type].each { |f| f.respond_to?(:bind) ? f.bind(scope).call : scope.instance_exec(&f) }
|
114
|
-
end
|
121
|
+
def invoke(scope, type)
|
122
|
+
@filters[type].each { |f| f.respond_to?(:bind) ? f.bind(scope).call : scope.instance_exec(&f) }
|
115
123
|
end
|
116
124
|
|
117
125
|
def self.extract_filters_from_helpers(helpers)
|
@@ -139,8 +147,10 @@ module Rack
|
|
139
147
|
end
|
140
148
|
end
|
141
149
|
|
142
|
-
hash_accessor :view_path, :effective_path, :cache_control, :default_charset, :failure_app
|
150
|
+
hash_accessor :view_path, :effective_path, :cache_control, :default_charset, :failure_app, :show_exceptions
|
151
|
+
|
143
152
|
attr_reader :filter
|
153
|
+
|
144
154
|
def_delegators :filter, *Filter::TYPES
|
145
155
|
|
146
156
|
def initialize
|
@@ -151,6 +161,14 @@ module Rack
|
|
151
161
|
@filter = Filter.new
|
152
162
|
end
|
153
163
|
|
164
|
+
def show_exceptions?
|
165
|
+
if self[:show_exceptions].nil?
|
166
|
+
ENV['RACK_ENV'].nil? or (ENV['RACK_ENV'] == 'development')
|
167
|
+
else
|
168
|
+
self[:show_exceptions]
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
154
172
|
def view_paths
|
155
173
|
(v = self[:view_path]).kind_of?(Enumerable) ? v : [v.to_s]
|
156
174
|
end
|
@@ -259,8 +277,12 @@ module Rack
|
|
259
277
|
end
|
260
278
|
|
261
279
|
class NotFound
|
280
|
+
def self.[](file)
|
281
|
+
::File.file?(file) ? proc { Rack::Response.new([::File.read(file)], 404).finish } : self
|
282
|
+
end
|
283
|
+
|
262
284
|
def self.call(env)
|
263
|
-
Rack::Response.new(["Not Found: #{env['
|
285
|
+
Rack::Response.new(["Not Found: #{env['PATH_INFO']}"], 404).finish
|
264
286
|
end
|
265
287
|
end
|
266
288
|
|
data/rack-server-pages.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
$:.push File.expand_path("../lib", __FILE__)
|
3
|
-
require "rack-server-pages"
|
3
|
+
require "rack-server-pages/version"
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = "rack-server-pages"
|
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.description = %q{Rack middleware and appilcation for serving dynamic pages in very simple way.
|
13
13
|
There are no controllers and no models, just only views like a asp, jsp and php!}
|
14
14
|
|
15
|
-
s.rubyforge_project = "rack-server-pages"
|
15
|
+
#s.rubyforge_project = "rack-server-pages"
|
16
16
|
|
17
17
|
s.files = `git ls-files`.split("\n")
|
18
18
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-server-pages
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-04-17 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rack
|
16
|
-
requirement: &
|
16
|
+
requirement: &70273387486420 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70273387486420
|
25
25
|
description: ! "Rack middleware and appilcation for serving dynamic pages in very
|
26
26
|
simple way.\n There are no controllers and no models, just only
|
27
27
|
views like a asp, jsp and php!"
|
@@ -41,8 +41,9 @@ files:
|
|
41
41
|
- Rakefile
|
42
42
|
- config.ru
|
43
43
|
- lib/rack-server-pages.rb
|
44
|
+
- lib/rack-server-pages/version.rb
|
44
45
|
- lib/rack/server_pages.rb
|
45
|
-
- lib/rack/server_pages/
|
46
|
+
- lib/rack/server_pages/php_helper.rb
|
46
47
|
- public/CHANGES.erb
|
47
48
|
- public/README.erb
|
48
49
|
- public/_layout.html.erb
|
@@ -99,7 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
99
100
|
- !ruby/object:Gem::Version
|
100
101
|
version: '0'
|
101
102
|
requirements: []
|
102
|
-
rubyforge_project:
|
103
|
+
rubyforge_project:
|
103
104
|
rubygems_version: 1.8.10
|
104
105
|
signing_key:
|
105
106
|
specification_version: 3
|
@@ -108,3 +109,4 @@ summary: Rack middleware and appilcation for serving dynamic pages in very simpl
|
|
108
109
|
test_files:
|
109
110
|
- spec/lib/rack/server_pages_spec.rb
|
110
111
|
- spec/spec_helper.rb
|
112
|
+
has_rdoc:
|