picombo 0.2.5 → 0.3.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/lib/classes/router.rb +1 -1
- data/lib/core/core.rb +1 -15
- data/lib/hooks/profiler.rb +1 -1
- metadata +33 -12
- data/lib/classes/security.rb +0 -46
- data/lib/classes/view/stache.rb +0 -18
- data/lib/classes/view/xml.rb +0 -18
- data/lib/classes/view.rb +0 -83
- data/lib/views/bench/footer.rhtml +0 -22
- data/lib/views/tests/test.rhtml +0 -1
data/lib/classes/router.rb
CHANGED
@@ -86,7 +86,7 @@ module Picombo
|
|
86
86
|
# Try and load the controller class
|
87
87
|
begin
|
88
88
|
controller = Picombo::Controllers::const_get(uri[:controller].capitalize!).new
|
89
|
-
rescue LoadError
|
89
|
+
rescue LoadError, NameError
|
90
90
|
return Picombo::Controllers::Error_404.new.run_error(@@req.path)
|
91
91
|
end
|
92
92
|
|
data/lib/core/core.rb
CHANGED
@@ -13,7 +13,6 @@ module Picombo
|
|
13
13
|
#
|
14
14
|
# The core class for Picombo. Handles system initialization and other core functionality.
|
15
15
|
class Core
|
16
|
-
@@extension = 'html'
|
17
16
|
@@cli = false
|
18
17
|
|
19
18
|
# Determines if the request was made on the CLI or not
|
@@ -21,15 +20,6 @@ module Picombo
|
|
21
20
|
@@cli
|
22
21
|
end
|
23
22
|
|
24
|
-
# Gets the extension of the request
|
25
|
-
def self.extension
|
26
|
-
@@extension
|
27
|
-
end
|
28
|
-
# Assigns the extension of the request
|
29
|
-
def self.extension=(extension)
|
30
|
-
@@extension = extension
|
31
|
-
end
|
32
|
-
|
33
23
|
# Standard call function that gets invoked by Rack
|
34
24
|
def call(env)
|
35
25
|
# start system benchmark
|
@@ -41,11 +31,7 @@ module Picombo
|
|
41
31
|
@@env = env
|
42
32
|
@@req = Rack::Request.new(env)
|
43
33
|
|
44
|
-
@@extension = File.extname(@@req.path)[1..-1]
|
45
|
-
@@extension = 'html' if @@extension.nil?
|
46
|
-
|
47
34
|
@@response = Rack::Response.new
|
48
|
-
#@@response['Content-Type'] = Picombo::Config.load('mimes.'+@@extension)[0]
|
49
35
|
@@response['Content-Type'] = 'text/html'
|
50
36
|
@@response.status = 200
|
51
37
|
@@redirect = []
|
@@ -60,7 +46,7 @@ module Picombo
|
|
60
46
|
# Load hooks
|
61
47
|
Picombo::Config.get('config.hooks').each do |hook|
|
62
48
|
Picombo::Core.find_file('hooks', hook).each do |file|
|
63
|
-
|
49
|
+
load file
|
64
50
|
end
|
65
51
|
end
|
66
52
|
|
data/lib/hooks/profiler.rb
CHANGED
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 3
|
8
|
+
- 0
|
9
|
+
version: 0.3.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Jeremy Bush
|
@@ -14,10 +14,37 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-06-
|
17
|
+
date: 2010-06-15 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
|
-
dependencies:
|
20
|
-
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: rack
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 1
|
29
|
+
- 0
|
30
|
+
- 0
|
31
|
+
version: 1.0.0
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: mustache
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 0
|
43
|
+
- 10
|
44
|
+
- 0
|
45
|
+
version: 0.10.0
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id002
|
21
48
|
description: Picombo is a lightweight MVC web framework that enables you to create websites quickly.
|
22
49
|
email: contractfrombelow@gmail.com
|
23
50
|
executables: []
|
@@ -38,12 +65,8 @@ files:
|
|
38
65
|
- ./lib/classes/input.rb
|
39
66
|
- ./lib/classes/log.rb
|
40
67
|
- ./lib/classes/router.rb
|
41
|
-
- ./lib/classes/security.rb
|
42
68
|
- ./lib/classes/session.rb
|
43
69
|
- ./lib/classes/url.rb
|
44
|
-
- ./lib/classes/view/stache.rb
|
45
|
-
- ./lib/classes/view/xml.rb
|
46
|
-
- ./lib/classes/view.rb
|
47
70
|
- ./lib/config/cache.yaml
|
48
71
|
- ./lib/config/log.yaml
|
49
72
|
- ./lib/config/mimes.yaml
|
@@ -55,10 +78,8 @@ files:
|
|
55
78
|
- ./lib/hooks/mustache.rb
|
56
79
|
- ./lib/hooks/profiler.rb
|
57
80
|
- ./lib/picombo.rb
|
58
|
-
- ./lib/views/bench/footer.rhtml
|
59
81
|
- ./lib/views/error/404.mustache
|
60
82
|
- ./lib/views/error/404.rb
|
61
|
-
- ./lib/views/tests/test.rhtml
|
62
83
|
has_rdoc: true
|
63
84
|
homepage: http://www.picombo.net/
|
64
85
|
licenses: []
|
data/lib/classes/security.rb
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
module Picombo
|
2
|
-
# Helper class for security things like xss
|
3
|
-
class Security
|
4
|
-
# Returns the base URL for use with any internal links.
|
5
|
-
def self.xss_clean(str, driver = nil)
|
6
|
-
driver = 'default' if driver.nil? or driver == true
|
7
|
-
|
8
|
-
Security.send(driver, str)
|
9
|
-
end
|
10
|
-
|
11
|
-
#This is a blacklist method, so ensure this is what you really want
|
12
|
-
def self.bitkeeper(str)
|
13
|
-
# clean any control characters
|
14
|
-
str.gsub!(/[\x00-\x20]*/, '')
|
15
|
-
# clean null byte
|
16
|
-
str.gsub!(/[\0]/, '')
|
17
|
-
|
18
|
-
# Remove javascript: and vbscript: protocols
|
19
|
-
str.gsub!(/([a-z]*)=([`"]*)javascript:/iu, '\1=\2nojavascript....')
|
20
|
-
str.gsub!(/([a-z]*)=([`"]*)vbscript:/iu, '\1=\2novbscript....')
|
21
|
-
str.gsub!(/#([a-z]*)=(["]*)-moz-binding:/u, '\1=\2nomozbinding...')
|
22
|
-
|
23
|
-
# Only works in IE: <span style="width: expression(alert('Ping!'));"></span>
|
24
|
-
str.gsub!(/(<[^>]+?)style=[`"]*.*?expression\([^>]*>/i, '\1>')
|
25
|
-
str.gsub!(/(<[^>]+?)style=[`"]*.*?behaviour\([^>]*>/i, '\1>')
|
26
|
-
str.gsub!(/(<[^>]+?)style=[`"]*.*?script:*[^>]*>/iu, '\1>')
|
27
|
-
|
28
|
-
# Remove namespaced elements (we do not need them)
|
29
|
-
data = str.gsub(/<\/*\w+:\w[^>]*>/i, '')
|
30
|
-
|
31
|
-
begin
|
32
|
-
old_data = data
|
33
|
-
data.gsub!(/<\/*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|i(?:frame|layer)|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|title|xml)[^>]*>/i, '')
|
34
|
-
end until old_data == data
|
35
|
-
|
36
|
-
data
|
37
|
-
end
|
38
|
-
|
39
|
-
#default cleaner. encodes the strign to prevent xss
|
40
|
-
def self.default(str)
|
41
|
-
require 'htmlentities'
|
42
|
-
|
43
|
-
HTMLEntities.new.encode(str)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
data/lib/classes/view/stache.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
module Picombo
|
2
|
-
module View
|
3
|
-
# == XML View
|
4
|
-
#
|
5
|
-
# The core view renders XML to the browser
|
6
|
-
#
|
7
|
-
# See the View documentation for usage specifics
|
8
|
-
class Stache < Mustache
|
9
|
-
# Standard constructor
|
10
|
-
def initialize(filename)
|
11
|
-
super(filename)
|
12
|
-
|
13
|
-
# Changes the content type to xml for the application
|
14
|
-
Picombo::Core.raw_response()['Content-Type'] = 'text/xml'
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
data/lib/classes/view/xml.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
module Picombo
|
2
|
-
module View
|
3
|
-
# == XML View
|
4
|
-
#
|
5
|
-
# The core view renders XML to the browser
|
6
|
-
#
|
7
|
-
# See the View documentation for usage specifics
|
8
|
-
class XML < Picombo::View::Core
|
9
|
-
# Standard constructor
|
10
|
-
def initialize(filename)
|
11
|
-
super(filename)
|
12
|
-
|
13
|
-
# Changes the content type to xml for the application
|
14
|
-
Picombo::Core.raw_response()['Content-Type'] = 'text/xml'
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
data/lib/classes/view.rb
DELETED
@@ -1,83 +0,0 @@
|
|
1
|
-
module Picombo
|
2
|
-
# == View Class
|
3
|
-
#
|
4
|
-
# The Picombo::View class allows for template files to be rendered and displayed in the browser.
|
5
|
-
#
|
6
|
-
# By default, only ERB templating is currently supported.
|
7
|
-
# === Examples
|
8
|
-
#
|
9
|
-
# foobar = Picombo::View::Core.new('template')
|
10
|
-
# # Sets a view variable
|
11
|
-
# foobar.set('bar', 'baz')
|
12
|
-
# # Renders the view to the output buffer
|
13
|
-
# foobar.render
|
14
|
-
#
|
15
|
-
# You can also nest views like so:
|
16
|
-
#
|
17
|
-
# body = Picombo::View::Core.new('page/body')
|
18
|
-
# body.set('content', 'Hello World!')
|
19
|
-
# template = Picombo::View::Core.new('template')
|
20
|
-
# template.set('body', body.render(true))
|
21
|
-
# template.render
|
22
|
-
#
|
23
|
-
# This will render a body subview inside of your template view file
|
24
|
-
module View
|
25
|
-
# == Core View
|
26
|
-
#
|
27
|
-
# The core view renders HTML to the browser using ERB
|
28
|
-
#
|
29
|
-
# See the View documentation for usage specifics
|
30
|
-
class Core
|
31
|
-
require 'erb'
|
32
|
-
|
33
|
-
@view_file = ''
|
34
|
-
@view_data = []
|
35
|
-
|
36
|
-
# Creates a new view object and sets the filename. Raises an IOError exception if the view file is not found
|
37
|
-
def initialize(filename)
|
38
|
-
@view_data = {}
|
39
|
-
view_location = Picombo::Core.find_file('views', filename, false, 'rhtml').shift
|
40
|
-
|
41
|
-
if view_location.nil?
|
42
|
-
raise IOError
|
43
|
-
end
|
44
|
-
|
45
|
-
@view_file = view_location
|
46
|
-
end
|
47
|
-
|
48
|
-
# Support templating of member data.
|
49
|
-
def get_binding
|
50
|
-
binding
|
51
|
-
end
|
52
|
-
|
53
|
-
# Sets a view variable
|
54
|
-
def set(key, val)
|
55
|
-
instance_variable_set "@#{key}", val
|
56
|
-
end
|
57
|
-
|
58
|
-
# Renders the view to the output buffer, or optionally simply returns it if echo is true
|
59
|
-
def render(return_output = false)
|
60
|
-
view = ERB::new(File.read(@view_file))
|
61
|
-
|
62
|
-
if return_output
|
63
|
-
return view.result(get_binding())
|
64
|
-
else
|
65
|
-
Picombo::Core.response view.result(get_binding())
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
# Autoloader for missing view constants. Used to load non-standard view classes like XML.
|
71
|
-
def View.const_missing(name)
|
72
|
-
filename = name.to_s
|
73
|
-
|
74
|
-
require 'classes/view/'+filename.downcase
|
75
|
-
|
76
|
-
raise name.to_s+' not found!' if ! const_defined?(name)
|
77
|
-
|
78
|
-
klass = const_get(name)
|
79
|
-
return klass if klass
|
80
|
-
raise klass+" not found!"
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
<table style="width: 100%">
|
2
|
-
<tr>
|
3
|
-
<th align="left">System Benchmarks</th>
|
4
|
-
<th align="right">Time</th>
|
5
|
-
</tr>
|
6
|
-
<tr>
|
7
|
-
<td>Picombo Setup</td>
|
8
|
-
<td align="right"><%= Picombo::Bench.instance.get('loading') %></td>
|
9
|
-
</tr>
|
10
|
-
<tr>
|
11
|
-
<td>Environment Setup</td>
|
12
|
-
<td align="right"><%= Picombo::Bench.instance.get('setup') %></td>
|
13
|
-
</tr>
|
14
|
-
<tr>
|
15
|
-
<td>Controller Execution</td>
|
16
|
-
<td align="right"><%= Picombo::Bench.instance.get('controller_execution') %></td>
|
17
|
-
</tr>
|
18
|
-
<tr>
|
19
|
-
<td>Total Execution</td>
|
20
|
-
<td align="right"><%= Picombo::Bench.instance.get('application') %></td>
|
21
|
-
</tr>
|
22
|
-
</table>
|
data/lib/views/tests/test.rhtml
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
Test <%= @test %>
|