utopia 0.10.0 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +17 -0
- data/.travis.yml +9 -0
- data/Gemfile +8 -0
- data/README.md +72 -0
- data/Rakefile +9 -0
- data/bin/utopia +42 -13
- data/lib/utopia/extensions/array.rb +19 -3
- data/lib/utopia/extensions/date.rb +19 -3
- data/lib/utopia/extensions/hash.rb +19 -3
- data/lib/utopia/extensions/maybe.rb +19 -0
- data/lib/utopia/extensions/rack.rb +21 -3
- data/lib/utopia/extensions/regexp.rb +19 -3
- data/lib/utopia/extensions/string.rb +19 -3
- data/lib/utopia/http.rb +56 -0
- data/lib/utopia/link.rb +19 -3
- data/lib/utopia/middleware/all.rb +19 -3
- data/lib/utopia/middleware/content/node.rb +21 -5
- data/lib/utopia/middleware/content/processor.rb +118 -0
- data/lib/utopia/middleware/content.rb +22 -7
- data/lib/utopia/middleware/controller.rb +19 -7
- data/lib/utopia/middleware/directory_index.rb +19 -3
- data/lib/utopia/middleware/localization/name.rb +19 -3
- data/lib/utopia/middleware/localization.rb +19 -3
- data/lib/utopia/middleware/logger.rb +19 -3
- data/lib/utopia/middleware/redirector.rb +19 -5
- data/lib/utopia/middleware/requester.rb +19 -3
- data/lib/utopia/middleware/static.rb +20 -6
- data/lib/utopia/middleware.rb +22 -5
- data/lib/utopia/path.rb +26 -6
- data/lib/utopia/session/encrypted_cookie.rb +19 -3
- data/lib/utopia/setup/Gemfile +8 -0
- data/lib/utopia/setup/config.ru +4 -13
- data/lib/utopia/setup.rb +25 -4
- data/lib/utopia/tag.rb +45 -24
- data/lib/utopia/tags/all.rb +19 -3
- data/lib/utopia/tags/deferred.rb +19 -3
- data/lib/utopia/tags/environment.rb +29 -0
- data/lib/utopia/tags/node.rb +19 -3
- data/lib/utopia/tags/override.rb +19 -3
- data/lib/utopia/tags.rb +19 -3
- data/lib/utopia/time_store.rb +19 -3
- data/lib/utopia/version.rb +20 -10
- data/lib/utopia.rb +20 -17
- data/test/content_root/_heading.xnode +1 -0
- data/test/content_root/index.xnode +1 -0
- data/test/test_content_middleware.rb +86 -0
- data/test/test_path.rb +32 -0
- data/utopia.gemspec +31 -0
- metadata +56 -42
- data/ext/utopia/xnode/fast_scanner/extconf.rb +0 -6
- data/ext/utopia/xnode/fast_scanner/parser.c +0 -289
- data/lib/utopia/http_status_codes.rb +0 -39
- data/lib/utopia/middleware/benchmark.rb +0 -29
- data/lib/utopia/middleware/filter.rb +0 -35
- data/lib/utopia/tags/env.rb +0 -13
- data/lib/utopia/tags/fortune.rb +0 -9
- data/lib/utopia/tags/gallery.rb +0 -275
- data/lib/utopia/tags/google_analytics.rb +0 -21
- data/lib/utopia/trenni.rb +0 -149
- data/lib/utopia/xnode/processor.rb +0 -86
- data/lib/utopia/xnode/scanner.rb +0 -159
- data/lib/utopia/xnode.rb +0 -6
@@ -1,6 +1,22 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
#
|
1
|
+
# Copyright, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
4
20
|
|
5
21
|
require 'utopia/middleware'
|
6
22
|
require 'utopia/link'
|
@@ -8,7 +24,8 @@ require 'utopia/path'
|
|
8
24
|
require 'utopia/tags'
|
9
25
|
|
10
26
|
require 'utopia/middleware/content/node'
|
11
|
-
require 'utopia/
|
27
|
+
require 'utopia/middleware/content/processor'
|
28
|
+
require 'trenni/template'
|
12
29
|
|
13
30
|
module Utopia
|
14
31
|
module Middleware
|
@@ -18,8 +35,6 @@ module Utopia
|
|
18
35
|
@app = app
|
19
36
|
|
20
37
|
@root = File.expand_path(options[:root] || Utopia::Middleware::default_root)
|
21
|
-
|
22
|
-
LOG.info "** #{self.class.name}: Running in #{@root}"
|
23
38
|
|
24
39
|
# Set to hash to enable caching
|
25
40
|
@nodes = {}
|
@@ -32,7 +47,7 @@ module Utopia
|
|
32
47
|
attr :passthrough
|
33
48
|
|
34
49
|
def fetch_xml(path)
|
35
|
-
read_file = lambda { Trenni.
|
50
|
+
read_file = lambda { Trenni::Template.load(path) }
|
36
51
|
|
37
52
|
if @files
|
38
53
|
@files.fetch(path) do |key|
|
@@ -1,10 +1,25 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
#
|
1
|
+
# Copyright, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
4
20
|
|
5
21
|
require 'utopia/middleware'
|
6
22
|
require 'utopia/path'
|
7
|
-
require 'utopia/http_status_codes'
|
8
23
|
|
9
24
|
class Rack::Request
|
10
25
|
def controller(&block)
|
@@ -18,7 +33,6 @@ end
|
|
18
33
|
|
19
34
|
module Utopia
|
20
35
|
module Middleware
|
21
|
-
|
22
36
|
class Controller
|
23
37
|
module Direct
|
24
38
|
def process!(path, request)
|
@@ -227,8 +241,6 @@ module Utopia
|
|
227
241
|
@app = app
|
228
242
|
@root = options[:root] || Utopia::Middleware::default_root
|
229
243
|
|
230
|
-
LOG.info "** #{self.class.name}: Running in #{@root}"
|
231
|
-
|
232
244
|
@controllers = {}
|
233
245
|
@cache_controllers = (UTOPIA_ENV == :production)
|
234
246
|
|
@@ -1,6 +1,22 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
#
|
1
|
+
# Copyright, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
4
20
|
|
5
21
|
require 'utopia/middleware'
|
6
22
|
require 'utopia/path'
|
@@ -1,6 +1,22 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
#
|
1
|
+
# Copyright, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
4
20
|
|
5
21
|
module Utopia
|
6
22
|
module Middleware
|
@@ -1,6 +1,22 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
#
|
1
|
+
# Copyright, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
4
20
|
|
5
21
|
require 'utopia/middleware'
|
6
22
|
require 'utopia/middleware/localization/name'
|
@@ -1,6 +1,22 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
#
|
1
|
+
# Copyright, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
4
20
|
|
5
21
|
require 'utopia/middleware'
|
6
22
|
require 'utopia/time_store'
|
@@ -1,6 +1,22 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
#
|
1
|
+
# Copyright, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
4
20
|
|
5
21
|
require 'utopia/middleware'
|
6
22
|
require 'utopia/extensions/regexp'
|
@@ -139,8 +155,6 @@ module Utopia
|
|
139
155
|
@patterns = normalize_patterns(@patterns)
|
140
156
|
|
141
157
|
@errors = options[:errors]
|
142
|
-
|
143
|
-
LOG.info "** #{self.class.name}: Running with #{@strings.size + @patterns.size} rules"
|
144
158
|
end
|
145
159
|
|
146
160
|
def redirect(uri, match_data)
|
@@ -1,6 +1,22 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
#
|
1
|
+
# Copyright, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
4
20
|
|
5
21
|
require 'utopia/middleware'
|
6
22
|
|
@@ -1,6 +1,22 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
#
|
1
|
+
# Copyright, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
4
20
|
|
5
21
|
require 'utopia/middleware'
|
6
22
|
require 'utopia/path'
|
@@ -184,6 +200,7 @@ module Utopia
|
|
184
200
|
end
|
185
201
|
|
186
202
|
public
|
203
|
+
|
187
204
|
def initialize(app, options = {})
|
188
205
|
@app = app
|
189
206
|
@root = options[:root] || Utopia::Middleware::default_root
|
@@ -195,9 +212,6 @@ module Utopia
|
|
195
212
|
end
|
196
213
|
|
197
214
|
@cache_control = options[:cache_control] || "public, max-age=3600"
|
198
|
-
|
199
|
-
LOG.info "** #{self.class.name}: Running in #{@root} with #{extensions.size} filetypes"
|
200
|
-
# LOG.info @extensions.inspect
|
201
215
|
end
|
202
216
|
|
203
217
|
def fetch_file(path)
|
data/lib/utopia/middleware.rb
CHANGED
@@ -1,11 +1,28 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
#
|
1
|
+
# Copyright, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
4
20
|
|
5
21
|
require 'pathname'
|
6
22
|
require 'logger'
|
7
23
|
|
8
|
-
require 'utopia/
|
24
|
+
require 'utopia/http'
|
25
|
+
|
9
26
|
require 'utopia/extensions/rack'
|
10
27
|
|
11
28
|
module Utopia
|
@@ -18,7 +35,7 @@ module Utopia
|
|
18
35
|
end
|
19
36
|
|
20
37
|
def self.failure(status = 500, message = "Non-specific error")
|
21
|
-
body = "#{
|
38
|
+
body = "#{HTTP::STATUS_DESCRIPTIONS[status] || status.to_s}: #{message}"
|
22
39
|
|
23
40
|
return [status, {
|
24
41
|
"Content-Type" => "text/plain",
|
data/lib/utopia/path.rb
CHANGED
@@ -1,8 +1,22 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
#
|
4
|
-
|
5
|
-
|
1
|
+
# Copyright, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
6
20
|
|
7
21
|
module Utopia
|
8
22
|
|
@@ -21,6 +35,12 @@ module Utopia
|
|
21
35
|
create(path)
|
22
36
|
end
|
23
37
|
|
38
|
+
def self.unescape(string)
|
39
|
+
string.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n) {
|
40
|
+
[$1.delete('%')].pack('H*')
|
41
|
+
}
|
42
|
+
end
|
43
|
+
|
24
44
|
def self.create(path)
|
25
45
|
case path
|
26
46
|
when Path
|
@@ -28,7 +48,7 @@ module Utopia
|
|
28
48
|
when Array
|
29
49
|
return Path.new(path)
|
30
50
|
when String
|
31
|
-
path =
|
51
|
+
path = unescape(path)
|
32
52
|
# Ends with SEPARATOR
|
33
53
|
if path[-1,1] == SEPARATOR
|
34
54
|
return Path.new(path.split(SEPARATOR) << "")
|
@@ -1,6 +1,22 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
#
|
1
|
+
# Copyright, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
4
20
|
|
5
21
|
require 'openssl'
|
6
22
|
require 'digest/sha2'
|
data/lib/utopia/setup/config.ru
CHANGED
@@ -4,14 +4,11 @@ UTOPIA_ENV = (ENV['UTOPIA_ENV'] || ENV['RACK_ENV'] || :development).to_sym
|
|
4
4
|
$LOAD_PATH << File.join(File.dirname(__FILE__), "lib")
|
5
5
|
|
6
6
|
# It is recommended that you always explicity specify the version of the gem you are using.
|
7
|
-
gem 'utopia', $UTOPIA_VERSION
|
7
|
+
gem 'utopia', "= $UTOPIA_VERSION"
|
8
8
|
require 'utopia/middleware/all'
|
9
9
|
require 'utopia/tags/env'
|
10
10
|
|
11
|
-
|
12
|
-
require 'rack/contrib'
|
13
|
-
|
14
|
-
# Utopia relies heavily on accurately caching resources
|
11
|
+
# Utopia relies on effectively caching resources:
|
15
12
|
gem 'rack-cache'
|
16
13
|
require 'rack/cache'
|
17
14
|
|
@@ -19,13 +16,8 @@ if UTOPIA_ENV == :development
|
|
19
16
|
use Rack::ShowExceptions
|
20
17
|
else
|
21
18
|
use Utopia::Middleware::ExceptionHandler, "/errors/exception"
|
22
|
-
|
23
|
-
#
|
24
|
-
# use Rack::MailExceptions do |mail|
|
25
|
-
# mail.from $MAIL_EXCEPTIONS_FROM
|
26
|
-
# mail.to $MAIL_EXCEPTIONS_TO
|
27
|
-
# mail.subject "Website Error: %s"
|
28
|
-
# end
|
19
|
+
|
20
|
+
# You might want to use the Rack::MailExceptions middleware to get notifications about problems.
|
29
21
|
end
|
30
22
|
|
31
23
|
use Rack::ContentLength
|
@@ -34,7 +26,6 @@ use Utopia::Middleware::Logger
|
|
34
26
|
use Utopia::Middleware::Redirector, {
|
35
27
|
:strings => {
|
36
28
|
'/' => '/welcome/index',
|
37
|
-
'/utopia' => 'http://www.oriontransfer.co.nz/software/utopia/demo'
|
38
29
|
},
|
39
30
|
:errors => {
|
40
31
|
404 => "/errors/file-not-found"
|
data/lib/utopia/setup.rb
CHANGED
@@ -1,3 +1,22 @@
|
|
1
|
+
# Copyright, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
1
20
|
|
2
21
|
require 'utopia/version'
|
3
22
|
require 'fileutils'
|
@@ -30,10 +49,12 @@ module Utopia
|
|
30
49
|
FileUtils.mkdir_p(File.join(to, path))
|
31
50
|
end
|
32
51
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
52
|
+
['config.ru', 'Gemfile'].each do |configuration_file|
|
53
|
+
$stderr.puts "Updating #{configuration_file}..."
|
54
|
+
path = File.join(to, configuration_file)
|
55
|
+
buffer = File.read(path).gsub('$UTOPIA_VERSION', Utopia::VERSION)
|
56
|
+
File.open(path, "w") { |file| file.write(buffer) }
|
57
|
+
end
|
37
58
|
end
|
38
59
|
end
|
39
60
|
end
|
data/lib/utopia/tag.rb
CHANGED
@@ -1,10 +1,31 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
#
|
1
|
+
# Copyright, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
4
20
|
|
5
21
|
module Utopia
|
6
|
-
|
7
22
|
class Tag
|
23
|
+
def == other
|
24
|
+
if Tag === other
|
25
|
+
[@name, @attributes, @closed] == [other.name, other.attributes, other.closed]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
8
29
|
def self.closed(name, attributes = {})
|
9
30
|
tag = Tag.new(name, attributes)
|
10
31
|
tag.closed = true
|
@@ -31,10 +52,10 @@ module Utopia
|
|
31
52
|
@content.write text
|
32
53
|
end
|
33
54
|
|
34
|
-
def to_html(content = nil,
|
35
|
-
write_full_html(
|
55
|
+
def to_html(content = nil, buffer = StringIO.new)
|
56
|
+
write_full_html(buffer, content)
|
36
57
|
|
37
|
-
return
|
58
|
+
return buffer.string
|
38
59
|
end
|
39
60
|
|
40
61
|
def to_hash
|
@@ -42,41 +63,41 @@ module Utopia
|
|
42
63
|
end
|
43
64
|
|
44
65
|
def to_s
|
45
|
-
|
46
|
-
|
47
|
-
return
|
66
|
+
buffer = StringIO.new
|
67
|
+
write_full_html(buffer)
|
68
|
+
return buffer.string
|
48
69
|
end
|
49
70
|
|
50
|
-
def write_open_html(
|
51
|
-
|
52
|
-
|
71
|
+
def write_open_html(buffer, terminate = false)
|
72
|
+
buffer ||= StringIO.new
|
73
|
+
buffer.write "<#{name}"
|
53
74
|
|
54
75
|
@attributes.each do |key, value|
|
55
76
|
if value
|
56
|
-
|
77
|
+
buffer.write " #{key}=\"#{value}\""
|
57
78
|
else
|
58
|
-
|
79
|
+
buffer.write " #{key}"
|
59
80
|
end
|
60
81
|
end
|
61
82
|
|
62
83
|
if terminate
|
63
|
-
|
84
|
+
buffer.write "/>"
|
64
85
|
else
|
65
|
-
|
86
|
+
buffer.write ">"
|
66
87
|
end
|
67
88
|
end
|
68
89
|
|
69
|
-
def write_close_html(
|
70
|
-
|
90
|
+
def write_close_html(buffer)
|
91
|
+
buffer.write "</#{name}>"
|
71
92
|
end
|
72
93
|
|
73
|
-
def write_full_html(
|
94
|
+
def write_full_html(buffer, content = nil)
|
74
95
|
if @closed && content == nil
|
75
|
-
write_open_html(
|
96
|
+
write_open_html(buffer, true)
|
76
97
|
else
|
77
|
-
write_open_html(
|
78
|
-
|
79
|
-
write_close_html(
|
98
|
+
write_open_html(buffer)
|
99
|
+
buffer.write(content)
|
100
|
+
write_close_html(buffer)
|
80
101
|
end
|
81
102
|
end
|
82
103
|
end
|