orange 0.5.5 → 0.5.7
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/orange.rb +2 -5
- data/spec/orange_spec.rb +5 -0
- data/spec/{orange-core/spec_helper.rb → spec_helper.rb} +0 -0
- metadata +28 -235
- data/lib/orange-core.rb +0 -8
- data/lib/orange-core/application.rb +0 -132
- data/lib/orange-core/assets/css/exceptions.css +0 -50
- data/lib/orange-core/assets/js/exceptions.js +0 -44
- data/lib/orange-core/carton.rb +0 -178
- data/lib/orange-core/core.rb +0 -266
- data/lib/orange-core/magick.rb +0 -270
- data/lib/orange-core/middleware/base.rb +0 -96
- data/lib/orange-core/middleware/database.rb +0 -45
- data/lib/orange-core/middleware/four_oh_four.rb +0 -45
- data/lib/orange-core/middleware/globals.rb +0 -17
- data/lib/orange-core/middleware/loader.rb +0 -13
- data/lib/orange-core/middleware/rerouter.rb +0 -53
- data/lib/orange-core/middleware/restful_router.rb +0 -99
- data/lib/orange-core/middleware/route_context.rb +0 -39
- data/lib/orange-core/middleware/route_site.rb +0 -51
- data/lib/orange-core/middleware/show_exceptions.rb +0 -80
- data/lib/orange-core/middleware/static.rb +0 -67
- data/lib/orange-core/middleware/static_file.rb +0 -32
- data/lib/orange-core/middleware/template.rb +0 -60
- data/lib/orange-core/packet.rb +0 -232
- data/lib/orange-core/plugin.rb +0 -172
- data/lib/orange-core/resource.rb +0 -96
- data/lib/orange-core/resources/mapper.rb +0 -36
- data/lib/orange-core/resources/model_resource.rb +0 -228
- data/lib/orange-core/resources/not_found.rb +0 -10
- data/lib/orange-core/resources/page_parts.rb +0 -68
- data/lib/orange-core/resources/parser.rb +0 -113
- data/lib/orange-core/resources/routable_resource.rb +0 -16
- data/lib/orange-core/resources/scaffold.rb +0 -106
- data/lib/orange-core/stack.rb +0 -226
- data/lib/orange-core/templates/exceptions.haml +0 -111
- data/lib/orange-core/views/default_resource/create.haml +0 -4
- data/lib/orange-core/views/default_resource/edit.haml +0 -9
- data/lib/orange-core/views/default_resource/list.haml +0 -10
- data/lib/orange-core/views/default_resource/show.haml +0 -4
- data/lib/orange-core/views/default_resource/table_row.haml +0 -7
- data/lib/orange-core/views/not_found/404.haml +0 -2
- data/lib/orange-more.rb +0 -23
- data/lib/orange-more/administration.rb +0 -1
- data/lib/orange-more/administration/assets/css/admin.css +0 -286
- data/lib/orange-more/administration/assets/css/blueprint-ie.css +0 -35
- data/lib/orange-more/administration/assets/css/blueprint-print.css +0 -29
- data/lib/orange-more/administration/assets/css/blueprint.css +0 -257
- data/lib/orange-more/administration/assets/js/jquery.js +0 -152
- data/lib/orange-more/administration/cartons/site.rb +0 -7
- data/lib/orange-more/administration/cartons/site_carton.rb +0 -12
- data/lib/orange-more/administration/cartons/user.rb +0 -27
- data/lib/orange-more/administration/middleware/access_control.rb +0 -156
- data/lib/orange-more/administration/middleware/site_load.rb +0 -25
- data/lib/orange-more/administration/plugin.rb +0 -23
- data/lib/orange-more/administration/resources/admin_resource.rb +0 -27
- data/lib/orange-more/administration/resources/site_resource.rb +0 -10
- data/lib/orange-more/administration/resources/user_resource.rb +0 -40
- data/lib/orange-more/administration/templates/admin.haml +0 -25
- data/lib/orange-more/administration/views/openid_login.haml +0 -14
- data/lib/orange-more/administration/views/users/create.haml +0 -10
- data/lib/orange-more/administration/views/users/edit.haml +0 -15
- data/lib/orange-more/adverts.rb +0 -1
- data/lib/orange-more/adverts/cartons/adverts_carton.rb +0 -14
- data/lib/orange-more/adverts/plugin.rb +0 -13
- data/lib/orange-more/adverts/resources/adverts_resource.rb +0 -27
- data/lib/orange-more/adverts/views/adverts/adverts.haml +0 -2
- data/lib/orange-more/analytics.rb +0 -1
- data/lib/orange-more/analytics/middleware/analytics.rb +0 -30
- data/lib/orange-more/analytics/plugin.rb +0 -11
- data/lib/orange-more/analytics/resources/analytics_resource.rb +0 -42
- data/lib/orange-more/assets.rb +0 -1
- data/lib/orange-more/assets/cartons/asset_carton.rb +0 -27
- data/lib/orange-more/assets/plugin.rb +0 -13
- data/lib/orange-more/assets/resources/asset_resource.rb +0 -115
- data/lib/orange-more/assets/views/assets/change.haml +0 -1
- data/lib/orange-more/assets/views/assets/create.haml +0 -13
- data/lib/orange-more/assets/views/assets/insert.haml +0 -1
- data/lib/orange-more/blog.rb +0 -1
- data/lib/orange-more/blog/cartons/blog.rb +0 -8
- data/lib/orange-more/blog/cartons/blog_post.rb +0 -60
- data/lib/orange-more/blog/plugin.rb +0 -14
- data/lib/orange-more/blog/resources/blog_post_resource.rb +0 -53
- data/lib/orange-more/blog/resources/blog_resource.rb +0 -104
- data/lib/orange-more/blog/views/blog/blog_archive_view.haml +0 -6
- data/lib/orange-more/blog/views/blog/blog_offset_list_view.haml +0 -12
- data/lib/orange-more/blog/views/blog/blog_post_view.haml +0 -4
- data/lib/orange-more/blog/views/blog/sitemap_row.haml +0 -14
- data/lib/orange-more/blog/views/blog_posts/edit.haml +0 -8
- data/lib/orange-more/blog/views/blog_posts/show.haml +0 -4
- data/lib/orange-more/cloud.rb +0 -1
- data/lib/orange-more/cloud/plugin.rb +0 -10
- data/lib/orange-more/cloud/resources/cloud_resource.rb +0 -21
- data/lib/orange-more/contactforms.rb +0 -1
- data/lib/orange-more/contactforms/assets/js/jquery.validate.pack.js +0 -15
- data/lib/orange-more/contactforms/assets/js/lib/jquery-1.4.2.js +0 -6240
- data/lib/orange-more/contactforms/assets/js/lib/jquery.form.js +0 -660
- data/lib/orange-more/contactforms/assets/js/lib/jquery.js +0 -4376
- data/lib/orange-more/contactforms/assets/js/lib/jquery.metadata.js +0 -122
- data/lib/orange-more/contactforms/cartons/contactforms_carton.rb +0 -12
- data/lib/orange-more/contactforms/plugin.rb +0 -13
- data/lib/orange-more/contactforms/resources/contactforms_resource.rb +0 -56
- data/lib/orange-more/contactforms/views/contactforms/contactform.haml +0 -20
- data/lib/orange-more/debugger.rb +0 -1
- data/lib/orange-more/debugger/assets/css/debug_bar.css +0 -46
- data/lib/orange-more/debugger/middleware/debugger.rb +0 -50
- data/lib/orange-more/debugger/plugin.rb +0 -12
- data/lib/orange-more/debugger/views/debug_bar.haml +0 -87
- data/lib/orange-more/disqus.rb +0 -1
- data/lib/orange-more/disqus/plugin.rb +0 -11
- data/lib/orange-more/disqus/resources/disqus_resource.rb +0 -9
- data/lib/orange-more/disqus/views/disqus/comment_thread.haml +0 -7
- data/lib/orange-more/donations.rb +0 -1
- data/lib/orange-more/donations/cartons/donation_carton.rb +0 -9
- data/lib/orange-more/donations/plugin.rb +0 -12
- data/lib/orange-more/donations/resources/donations_resource.rb +0 -51
- data/lib/orange-more/donations/views/donations/donate_form.haml +0 -21
- data/lib/orange-more/donations/views/donations/donate_thanks.haml +0 -2
- data/lib/orange-more/donations/views/donations/paypal_form.haml +0 -13
- data/lib/orange-more/events.rb +0 -1
- data/lib/orange-more/events/assets/js/events.js +0 -55
- data/lib/orange-more/events/cartons/orange_calendar.rb +0 -8
- data/lib/orange-more/events/cartons/orange_event.rb +0 -60
- data/lib/orange-more/events/plugin.rb +0 -14
- data/lib/orange-more/events/resources/calendar_resource.rb +0 -33
- data/lib/orange-more/events/resources/event_resource.rb +0 -147
- data/lib/orange-more/events/views/calendar/calendar.haml +0 -8
- data/lib/orange-more/events/views/events/create.haml +0 -55
- data/lib/orange-more/events/views/events/edit.haml +0 -59
- data/lib/orange-more/events/views/events/list.haml +0 -13
- data/lib/orange-more/events/views/events/show.haml +0 -4
- data/lib/orange-more/events/views/events/table_row.haml +0 -17
- data/lib/orange-more/members.rb +0 -1
- data/lib/orange-more/members/cartons/member_carton.rb +0 -38
- data/lib/orange-more/members/plugin.rb +0 -13
- data/lib/orange-more/members/resources/members_resource.rb +0 -327
- data/lib/orange-more/members/views/members/create.haml +0 -12
- data/lib/orange-more/members/views/members/edit.haml +0 -15
- data/lib/orange-more/members/views/members/live.show.haml +0 -1
- data/lib/orange-more/members/views/members/login.haml +0 -17
- data/lib/orange-more/members/views/members/logout.haml +0 -1
- data/lib/orange-more/members/views/members/profile.haml +0 -50
- data/lib/orange-more/members/views/members/register.haml +0 -37
- data/lib/orange-more/news.rb +0 -1
- data/lib/orange-more/news/cartons/news.rb +0 -12
- data/lib/orange-more/news/plugin.rb +0 -13
- data/lib/orange-more/news/resources/news_resource.rb +0 -82
- data/lib/orange-more/news/views/news/archive.haml +0 -14
- data/lib/orange-more/news/views/news/edit.haml +0 -7
- data/lib/orange-more/news/views/news/latest.haml +0 -8
- data/lib/orange-more/news/views/news/sitemap_row.haml +0 -14
- data/lib/orange-more/pages.rb +0 -1
- data/lib/orange-more/pages/cartons/page_carton.rb +0 -14
- data/lib/orange-more/pages/cartons/page_version_carton.rb +0 -12
- data/lib/orange-more/pages/plugin.rb +0 -13
- data/lib/orange-more/pages/resources/page_resource.rb +0 -179
- data/lib/orange-more/pages/views/pages/edit.haml +0 -34
- data/lib/orange-more/pages/views/pages/show.haml +0 -6
- data/lib/orange-more/sitemap.rb +0 -1
- data/lib/orange-more/sitemap/assets/img/sitemap_down.png +0 -0
- data/lib/orange-more/sitemap/assets/img/sitemap_down_d.png +0 -0
- data/lib/orange-more/sitemap/assets/img/sitemap_indent.png +0 -0
- data/lib/orange-more/sitemap/assets/img/sitemap_indent_d.png +0 -0
- data/lib/orange-more/sitemap/assets/img/sitemap_outdent.png +0 -0
- data/lib/orange-more/sitemap/assets/img/sitemap_outdent_d.png +0 -0
- data/lib/orange-more/sitemap/assets/img/sitemap_up.png +0 -0
- data/lib/orange-more/sitemap/assets/img/sitemap_up_d.png +0 -0
- data/lib/orange-more/sitemap/assets/js/sitemap.js +0 -11
- data/lib/orange-more/sitemap/cartons/route.rb +0 -43
- data/lib/orange-more/sitemap/middleware/flex_router.rb +0 -25
- data/lib/orange-more/sitemap/plugin.rb +0 -17
- data/lib/orange-more/sitemap/resources/sitemap_resource.rb +0 -295
- data/lib/orange-more/sitemap/views/default_resource/sitemap_row.haml +0 -30
- data/lib/orange-more/sitemap/views/sitemap/breadcrumb.haml +0 -12
- data/lib/orange-more/sitemap/views/sitemap/list.haml +0 -4
- data/lib/orange-more/sitemap/views/sitemap/one_level.haml +0 -7
- data/lib/orange-more/sitemap/views/sitemap/route_actions.haml +0 -15
- data/lib/orange-more/sitemap/views/sitemap/sitemap_links.haml +0 -14
- data/lib/orange-more/sitemap/views/sitemap/table_row.haml +0 -30
- data/lib/orange-more/sitemap/views/sitemap/two_level.haml +0 -13
- data/lib/orange-more/slices.rb +0 -1
- data/lib/orange-more/slices/middleware/radius_parser.rb +0 -24
- data/lib/orange-more/slices/plugin.rb +0 -15
- data/lib/orange-more/slices/resources/radius.rb +0 -117
- data/lib/orange-more/slices/resources/slices.rb +0 -35
- data/lib/orange-more/subsites.rb +0 -1
- data/lib/orange-more/subsites/cartons/subsite.rb +0 -8
- data/lib/orange-more/subsites/middleware/subsite_load.rb +0 -29
- data/lib/orange-more/subsites/plugin.rb +0 -17
- data/lib/orange-more/subsites/resources/subsite_resource.rb +0 -54
- data/lib/orange-more/subsites/views/subsites/index.haml +0 -2
- data/lib/orange-more/testimonials.rb +0 -1
- data/lib/orange-more/testimonials/cartons/testimonials_carton.rb +0 -15
- data/lib/orange-more/testimonials/plugin.rb +0 -13
- data/lib/orange-more/testimonials/resources/testimonials_resource.rb +0 -42
- data/lib/orange-more/testimonials/views/testimonials/testimonials.haml +0 -4
- data/spec/orange-core/application_spec.rb +0 -183
- data/spec/orange-core/carton_spec.rb +0 -136
- data/spec/orange-core/core_spec.rb +0 -248
- data/spec/orange-core/magick_spec.rb +0 -96
- data/spec/orange-core/middleware/base_spec.rb +0 -38
- data/spec/orange-core/middleware/globals_spec.rb +0 -3
- data/spec/orange-core/middleware/rerouter_spec.rb +0 -3
- data/spec/orange-core/middleware/restful_router_spec.rb +0 -3
- data/spec/orange-core/middleware/route_context_spec.rb +0 -3
- data/spec/orange-core/middleware/route_site_spec.rb +0 -3
- data/spec/orange-core/middleware/show_exceptions_spec.rb +0 -3
- data/spec/orange-core/middleware/static_file_spec.rb +0 -3
- data/spec/orange-core/middleware/static_spec.rb +0 -3
- data/spec/orange-core/mock/mock_app.rb +0 -16
- data/spec/orange-core/mock/mock_carton.rb +0 -43
- data/spec/orange-core/mock/mock_core.rb +0 -2
- data/spec/orange-core/mock/mock_middleware.rb +0 -25
- data/spec/orange-core/mock/mock_mixins.rb +0 -19
- data/spec/orange-core/mock/mock_model_resource.rb +0 -47
- data/spec/orange-core/mock/mock_pulp.rb +0 -24
- data/spec/orange-core/mock/mock_resource.rb +0 -26
- data/spec/orange-core/mock/mock_router.rb +0 -10
- data/spec/orange-core/orange_spec.rb +0 -19
- data/spec/orange-core/packet_spec.rb +0 -203
- data/spec/orange-core/resource_spec.rb +0 -96
- data/spec/orange-core/resources/mapper_spec.rb +0 -5
- data/spec/orange-core/resources/model_resource_spec.rb +0 -246
- data/spec/orange-core/resources/parser_spec.rb +0 -5
- data/spec/orange-core/resources/routable_resource_spec.rb +0 -5
- data/spec/orange-core/stack_spec.rb +0 -232
@@ -1,17 +0,0 @@
|
|
1
|
-
require 'orange-core/middleware/base'
|
2
|
-
module Orange::Middleware
|
3
|
-
|
4
|
-
class Globals < Base
|
5
|
-
def init(opts = {})
|
6
|
-
opts = opts.with_defaults(:file => "__ORANGE__/config.yml")
|
7
|
-
@file = opts[:file].gsub('__ORANGE__', orange.app_dir)
|
8
|
-
@globals = orange[:parser].yaml(@file) || {}
|
9
|
-
@globals.each{|k,v| orange.options[k] = v}
|
10
|
-
end
|
11
|
-
def packet_call(packet)
|
12
|
-
packet['orange.globals'] ||= orange.options
|
13
|
-
pass packet
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
17
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
require 'orange-core/middleware/base'
|
2
|
-
module Orange::Middleware
|
3
|
-
class Loader < Base
|
4
|
-
def init(*args)
|
5
|
-
Dir.glob(File.join(orange.app_dir, 'resources', '*.rb')).each do |f|
|
6
|
-
require f
|
7
|
-
orange.load Orange::Inflector.constantize(Orange::Inflector.camelize(File.basename(f, '.rb'))).new
|
8
|
-
end
|
9
|
-
Dir.glob(File.join(orange.app_dir, 'cartons', '*.rb')).each { |f| require f }
|
10
|
-
Dir.glob(File.join(orange.app_dir, 'middleware', '*.rb')).each { |f| require f }
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
require 'orange-core/middleware/base'
|
2
|
-
module Orange::Middleware
|
3
|
-
|
4
|
-
class Rerouter < Base
|
5
|
-
def init(*args)
|
6
|
-
orange.add_pulp Orange::Pulp::Packet_Reroute
|
7
|
-
end
|
8
|
-
|
9
|
-
def packet_call(packet)
|
10
|
-
begin
|
11
|
-
pass packet
|
12
|
-
rescue Orange::Reroute
|
13
|
-
packet.finish
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
module Orange
|
20
|
-
|
21
|
-
module Pulp::Packet_Reroute
|
22
|
-
def reroute(url, type = :real, *args)
|
23
|
-
packet['reroute.to'] = url
|
24
|
-
packet['reroute.type'] = type
|
25
|
-
packet['reroute.args'] = *args if args
|
26
|
-
raise Reroute.new(self), 'Unhandled reroute'
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
class Reroute < Exception
|
31
|
-
def initialize(packet)
|
32
|
-
@packet = packet
|
33
|
-
@packet[:headers] = {"Content-Type" => 'text/html', "Location" => self.url}
|
34
|
-
@packet[:status] = 302
|
35
|
-
end
|
36
|
-
|
37
|
-
def url
|
38
|
-
case packet['reroute.type']
|
39
|
-
when :real
|
40
|
-
packet['reroute.to']
|
41
|
-
# Parsing for orange urls or something
|
42
|
-
when :orange
|
43
|
-
packet.route_to(packet['reroute.to'], *packet['reroute.args', []])
|
44
|
-
else
|
45
|
-
packet['reroute.to']
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def packet
|
50
|
-
@packet
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
@@ -1,99 +0,0 @@
|
|
1
|
-
require 'orange-core/middleware/base'
|
2
|
-
|
3
|
-
module Orange::Middleware
|
4
|
-
class RestfulRouter < Base
|
5
|
-
def init(*args)
|
6
|
-
opts = args.extract_options!.with_defaults(:restful_contexts => [:admin, :orange], :not_found => false, :exposed_actions => {:admin => :all, :orange => :all})
|
7
|
-
@exposed = opts[:exposed_actions]
|
8
|
-
@contexts = opts[:restful_contexts]
|
9
|
-
@not_found = opts[:not_found]
|
10
|
-
end
|
11
|
-
|
12
|
-
# sets resource, resource_id, resource_action and resource_path
|
13
|
-
# /resource/id/action/[resource/path/if/any]
|
14
|
-
# /resource/action/[resource/path/if/any]
|
15
|
-
#
|
16
|
-
# In future - support for nested resources
|
17
|
-
def packet_call(packet)
|
18
|
-
return (pass packet) if packet['route.router'] # Don't route if other middleware
|
19
|
-
# already has
|
20
|
-
parts = route_parts(packet)
|
21
|
-
if(should_route?(packet, parts))
|
22
|
-
# Take parts of route and set packet info
|
23
|
-
packet['route.resource'] = parts[:resource] if parts[:resource]
|
24
|
-
packet['route.resource_id'] = parts[:resource_id] if parts[:resource_id]
|
25
|
-
packet['route.resource_action'] = parts[:resource_action] if parts[:resource_action]
|
26
|
-
|
27
|
-
# Take remainder and set to resource_path
|
28
|
-
packet['route.resource_path'] = parts[:remainder]
|
29
|
-
|
30
|
-
# Set self as router if resource was found
|
31
|
-
if(packet['route.resource', false])
|
32
|
-
packet['route.router'] = self
|
33
|
-
elsif(@not_found)
|
34
|
-
packet['route.resource'] = @not_found
|
35
|
-
packet['route.router'] = self
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
pass packet
|
40
|
-
end
|
41
|
-
|
42
|
-
def route_parts(packet)
|
43
|
-
return_parts = {}
|
44
|
-
path = packet['route.path'] || packet.request.path_info
|
45
|
-
parts = path.split('/')
|
46
|
-
pad = parts.shift
|
47
|
-
if !parts.empty?
|
48
|
-
resource = parts.shift
|
49
|
-
if orange.loaded?(resource.to_sym)
|
50
|
-
return_parts[:resource] = resource.to_sym
|
51
|
-
if !parts.empty?
|
52
|
-
second = parts.shift
|
53
|
-
if second =~ /^\d+$/
|
54
|
-
return_parts[:resource_id] = second
|
55
|
-
if !parts.empty?
|
56
|
-
return_parts[:resource_action] = parts.shift.to_sym
|
57
|
-
else
|
58
|
-
return_parts[:resource_action] = :show
|
59
|
-
end
|
60
|
-
else
|
61
|
-
return_parts[:resource_action] = second.to_sym
|
62
|
-
end
|
63
|
-
else
|
64
|
-
return_parts[:resource_action] = :list
|
65
|
-
end # end check for second part
|
66
|
-
else
|
67
|
-
parts.unshift(resource)
|
68
|
-
end # end check for loaded resource
|
69
|
-
end # end check for nonempty route
|
70
|
-
return_parts[:remainder] = parts.unshift(pad).join('/')
|
71
|
-
return_parts
|
72
|
-
end
|
73
|
-
|
74
|
-
def should_route?(packet, parts)
|
75
|
-
return false unless @exposed.has_key?(packet['route.context'])
|
76
|
-
action_exposed?(@exposed[packet['route.context']], parts)
|
77
|
-
end
|
78
|
-
|
79
|
-
def action_exposed?(list, route_parts)
|
80
|
-
return true if list == :all
|
81
|
-
return true if list == route_parts[:resource_action]
|
82
|
-
return true if list.is_a?(Array) && list.include?(route_parts[:resource_action])
|
83
|
-
if list.is_a?(Hash)
|
84
|
-
all = list.has_key?(:all) ? action_exposed?(list[:all], route_parts) : false
|
85
|
-
one = list.has_key?(route_parts[:resource]) ? action_exposed?(list[route_parts[:resource]], route_parts) : false
|
86
|
-
return all || one
|
87
|
-
end
|
88
|
-
false
|
89
|
-
end
|
90
|
-
|
91
|
-
def route(packet)
|
92
|
-
resource = packet['route.resource']
|
93
|
-
raise 'resource not found' unless orange.loaded? resource
|
94
|
-
mode = packet['route.resource_action'] ||
|
95
|
-
(packet['route.resource_id'] ? :show : :list)
|
96
|
-
packet[:content] = orange[resource].view packet
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
require 'orange-core/middleware/base'
|
2
|
-
|
3
|
-
module Orange::Middleware
|
4
|
-
# This middleware handles setting orange.env['route.context']
|
5
|
-
# to a value based on the route, if any. The route is then
|
6
|
-
# trimmed before continuing on.
|
7
|
-
class RouteContext < Base
|
8
|
-
def initialize(app, core, *args)
|
9
|
-
opts = args.extract_options!
|
10
|
-
opts.with_defaults!(:contexts => [:preview, :live, :admin, :orange],
|
11
|
-
:default => :live,
|
12
|
-
:urls => {})
|
13
|
-
@app = app
|
14
|
-
@core = core
|
15
|
-
@contexts = opts[:contexts]
|
16
|
-
@default = opts[:default]
|
17
|
-
@urls = opts[:urls]
|
18
|
-
end
|
19
|
-
def packet_call(packet)
|
20
|
-
path_info = packet['route.path'] || packet.env['PATH_INFO']
|
21
|
-
path = path_info.split('/')
|
22
|
-
pad = path.shift # Shift off empty first part
|
23
|
-
if @urls[packet.request.host]
|
24
|
-
packet['route.context'] = urls[packet.request.host]
|
25
|
-
elsif path.empty?
|
26
|
-
packet['route.context'] = @default
|
27
|
-
else
|
28
|
-
if(@contexts.include?(path.first.to_sym))
|
29
|
-
packet['route.context'] = path.shift.to_sym
|
30
|
-
path.unshift(pad)
|
31
|
-
packet['route.path'] = path.join('/')
|
32
|
-
else
|
33
|
-
packet['route.context'] = @default
|
34
|
-
end
|
35
|
-
end
|
36
|
-
pass packet
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
require 'orange-core/middleware/base'
|
2
|
-
|
3
|
-
module Orange::Middleware
|
4
|
-
# This middleware handles setting orange.env['route.site_url']
|
5
|
-
# to a value based on the route, if any. The route is then
|
6
|
-
# trimmed before continuing on.
|
7
|
-
#
|
8
|
-
# Options -
|
9
|
-
# :multi - does Orange need to handle multiple urls
|
10
|
-
# :fake_it - host url(s) that Orange will fake requests on
|
11
|
-
# ex: :multi => true, :fake_it => 'localhost'
|
12
|
-
# will fake hostnames as first component of url
|
13
|
-
# only on localhost
|
14
|
-
class RouteSite < Base
|
15
|
-
def initialize(app, core, *args)
|
16
|
-
opts = args.extract_options!
|
17
|
-
opts.with_defaults!(:multi => false, :fake_it => ['localhost'])
|
18
|
-
@app = app
|
19
|
-
@core = core
|
20
|
-
@multi = opts[:multi]
|
21
|
-
# Put fake_it into an array, if necessary
|
22
|
-
@fake_it = opts[:fake_it].respond_to?(:include?) ?
|
23
|
-
opts[:fake_it] : [opts[:fake_it]]
|
24
|
-
end
|
25
|
-
|
26
|
-
def packet_call(packet)
|
27
|
-
request = packet.request
|
28
|
-
path_info = packet['route.path'] || packet.env['PATH_INFO']
|
29
|
-
path = path_info.split('/')
|
30
|
-
pad = path.shift # Shift off empty first part
|
31
|
-
packet['route.faked_site'] = false
|
32
|
-
if @multi
|
33
|
-
if path.empty?
|
34
|
-
packet['route.site_url'] = request.host
|
35
|
-
else
|
36
|
-
if @fake_it.include?(request.host)
|
37
|
-
packet['route.site_url'] = path.shift
|
38
|
-
packet['route.faked_site'] = true
|
39
|
-
else
|
40
|
-
packet['route.site_url'] = request.host
|
41
|
-
end
|
42
|
-
path.unshift(pad)
|
43
|
-
packet['route.path'] = path.join('/')
|
44
|
-
end
|
45
|
-
else
|
46
|
-
packet['route.site_url'] = request.host
|
47
|
-
end
|
48
|
-
pass packet
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
@@ -1,80 +0,0 @@
|
|
1
|
-
require 'ostruct'
|
2
|
-
require 'rack/request'
|
3
|
-
require 'rack/utils'
|
4
|
-
require 'orange-core/middleware/base'
|
5
|
-
|
6
|
-
module Orange::Middleware
|
7
|
-
# Rack::ShowExceptions catches all exceptions raised from the app it
|
8
|
-
# wraps. It shows a useful backtrace with the sourcefile and
|
9
|
-
# clickable context, the whole Rack environment and the request
|
10
|
-
# data.
|
11
|
-
#
|
12
|
-
# Be careful when you use this on public-facing sites as it could
|
13
|
-
# reveal information helpful to attackers.
|
14
|
-
#
|
15
|
-
# Orange::Middleware::ShowExceptions is a slightly modified
|
16
|
-
# version of Rack::ShowExceptions
|
17
|
-
class ShowExceptions < Base
|
18
|
-
CONTEXT = 7
|
19
|
-
|
20
|
-
def call(env)
|
21
|
-
@app.call(env)
|
22
|
-
rescue Exception => e
|
23
|
-
backtrace = pretty(env, e)
|
24
|
-
|
25
|
-
[500,
|
26
|
-
{"Content-Type" => "text/html",
|
27
|
-
"Content-Length" => backtrace.join.size.to_s},
|
28
|
-
backtrace]
|
29
|
-
end
|
30
|
-
|
31
|
-
def packet_call(packet)
|
32
|
-
backtrace = pretty()
|
33
|
-
end
|
34
|
-
|
35
|
-
def pretty(env, exception)
|
36
|
-
req = Rack::Request.new(env)
|
37
|
-
path = (req.script_name + req.path_info).squeeze("/")
|
38
|
-
|
39
|
-
frames = exception.backtrace.map { |line|
|
40
|
-
frame = OpenStruct.new
|
41
|
-
if line =~ /(.*?):(\d+)(:in `(.*)')?/
|
42
|
-
frame.filename = $1
|
43
|
-
frame.lineno = $2.to_i
|
44
|
-
frame.function = $4
|
45
|
-
|
46
|
-
begin
|
47
|
-
lineno = frame.lineno-1
|
48
|
-
lines = ::File.readlines(frame.filename)
|
49
|
-
frame.pre_context_lineno = [lineno-CONTEXT, 0].max
|
50
|
-
frame.pre_context = lines[frame.pre_context_lineno...lineno]
|
51
|
-
frame.context_line = lines[lineno].chomp
|
52
|
-
frame.post_context_lineno = [lineno+CONTEXT, lines.size].min
|
53
|
-
frame.post_context = lines[lineno+1..frame.post_context_lineno]
|
54
|
-
rescue
|
55
|
-
end
|
56
|
-
|
57
|
-
frame
|
58
|
-
else
|
59
|
-
nil
|
60
|
-
end
|
61
|
-
}.compact
|
62
|
-
|
63
|
-
env["rack.errors"].puts "#{exception.class}: #{exception.message}"
|
64
|
-
env["rack.errors"].puts exception.backtrace.map { |l| "\t" + l }
|
65
|
-
env["rack.errors"].flush
|
66
|
-
orange_env = env["orange.env"]
|
67
|
-
parse = orange[:parser].haml("exceptions.haml", binding, :template => true)
|
68
|
-
[parse]
|
69
|
-
end
|
70
|
-
|
71
|
-
def h(obj) # :nodoc:
|
72
|
-
case obj
|
73
|
-
when String
|
74
|
-
Rack::Utils.escape_html(obj)
|
75
|
-
else
|
76
|
-
Rack::Utils.escape_html(obj.inspect)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
@@ -1,67 +0,0 @@
|
|
1
|
-
require 'orange-core/middleware/base'
|
2
|
-
require 'orange-core/middleware/static_file'
|
3
|
-
|
4
|
-
module Orange::Middleware
|
5
|
-
# The Orange::Middleware::Static middleware intercepts requests for static files
|
6
|
-
# (javascript files, images, stylesheets, etc) based on the url prefixes
|
7
|
-
# passed in the options, and serves them using a Rack::File object.
|
8
|
-
#
|
9
|
-
# This differs from Rack::Static in that it can serve from multiple roots
|
10
|
-
# to accommodate both Orange static files and site specific ones.
|
11
|
-
# urls and root act the same as they do for Rack::Static. Only :libs option acts
|
12
|
-
# specially.
|
13
|
-
#
|
14
|
-
# Each lib is responsible for responding to static_url and static_dir
|
15
|
-
#
|
16
|
-
# Examples:
|
17
|
-
# use Orange::Middleware::Static :libs => [Orange::Core, AwesomeMod]
|
18
|
-
# use Orange::Middleware::Static :libs => [Orange::Core, AwesomeMod],
|
19
|
-
# :urls => ["/favicon.ico"]
|
20
|
-
#
|
21
|
-
# => Example 1 would load a file root for Orange::Core and Awesome Mod
|
22
|
-
# Orange::Core static_url is _orange_, and dir is the
|
23
|
-
# orange lib/assets folder
|
24
|
-
# => Example 2 would also redirect favicon.ico to the assets dir
|
25
|
-
#
|
26
|
-
#
|
27
|
-
# Note that as a general rule, Orange will assume everything static to be in an
|
28
|
-
# /assets/ subfolder, therefore, '/assets' will be prepended to the url given
|
29
|
-
# by static_url
|
30
|
-
# Also note, that since this is the case - setting up a match for general '/assets'
|
31
|
-
# could yield unpredictable results
|
32
|
-
#
|
33
|
-
# a static_url corresponds to the :module => in the add_css and add_js helpers
|
34
|
-
class Static < Base
|
35
|
-
|
36
|
-
def initialize(app, core, options={})
|
37
|
-
@lib_urls = {'_orange_' => File.join(core.core_dir, 'assets') }
|
38
|
-
Orange.plugins.each{|p| @lib_urls[p.assets_name] = p.assets if p.has_assets?}
|
39
|
-
|
40
|
-
@app = app
|
41
|
-
@core = core
|
42
|
-
@urls = options[:urls] || ["/favicon.ico", "/assets/public", "/assets/uploaded"]
|
43
|
-
@root = options[:root] || File.join(orange.app_dir, 'assets')
|
44
|
-
@file_server = Orange::Middleware::StaticFile.new(@root)
|
45
|
-
end
|
46
|
-
|
47
|
-
def packet_call(packet)
|
48
|
-
path = packet.env["PATH_INFO"]
|
49
|
-
can_serve_lib = @lib_urls.select { |url, server|
|
50
|
-
path.index(File.join('', 'assets', url)) == 0
|
51
|
-
}.first
|
52
|
-
can_serve = @urls.any?{|url| path.index(url) == 0 }
|
53
|
-
if can_serve_lib
|
54
|
-
lib_url = can_serve_lib.first
|
55
|
-
packet['file.root'] = can_serve_lib.last
|
56
|
-
packet['route.path'] = path.split(lib_url, 2).last
|
57
|
-
@file_server.call(packet.env)
|
58
|
-
elsif can_serve
|
59
|
-
packet['route.path'] = path.gsub(/^\/assets/, '')
|
60
|
-
@file_server.call(packet.env)
|
61
|
-
else
|
62
|
-
pass packet
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
end
|
67
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
require 'rack'
|
2
|
-
require 'rack/utils'
|
3
|
-
|
4
|
-
module Orange::Middleware
|
5
|
-
# Rack::File serves files below the +root+ given, according to the
|
6
|
-
# path info of the Rack request.
|
7
|
-
# Orange::Middleware::StaticFile acts the same as Rack::File, but acts on
|
8
|
-
# the orange specific path if available. (So site url would be ignored, etc.)
|
9
|
-
#
|
10
|
-
# Handlers can detect if bodies are a Rack::File, and use mechanisms
|
11
|
-
# like sendfile on the +path+.
|
12
|
-
|
13
|
-
class StaticFile < Rack::File
|
14
|
-
def _call(env)
|
15
|
-
@path_info = Rack::Utils.unescape(env['orange.env']["route.path"]) || Rack::Utils.unescape(env["PATH_INFO"])
|
16
|
-
@root = env['orange.env']['file.root'] || @root
|
17
|
-
return forbidden if @path_info.include? ".."
|
18
|
-
|
19
|
-
@path = F.join(@root, @path_info)
|
20
|
-
|
21
|
-
begin
|
22
|
-
if F.file?(@path) && F.readable?(@path)
|
23
|
-
serving
|
24
|
-
else
|
25
|
-
raise Errno::EPERM
|
26
|
-
end
|
27
|
-
rescue SystemCallError
|
28
|
-
not_found
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|