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,60 +0,0 @@
|
|
1
|
-
require 'orange-core/core'
|
2
|
-
require 'orange-core/middleware/base'
|
3
|
-
|
4
|
-
module Orange::Middleware
|
5
|
-
|
6
|
-
class Template < Base
|
7
|
-
def init(*args)
|
8
|
-
@core.add_pulp(Orange::Pulp::Template)
|
9
|
-
@core.mixin(Orange::Mixins::Template)
|
10
|
-
|
11
|
-
end
|
12
|
-
|
13
|
-
def packet_call(packet)
|
14
|
-
packet['template.file'] = orange.template_for packet
|
15
|
-
status, headers, content = pass packet
|
16
|
-
if needs_wrapped?(packet)
|
17
|
-
content = wrap(packet, content)
|
18
|
-
packet[:content] = content.first
|
19
|
-
orange.fire(:wrapped, packet)
|
20
|
-
end
|
21
|
-
orange.fire(:after_wrap, packet)
|
22
|
-
packet.finish
|
23
|
-
end
|
24
|
-
|
25
|
-
def needs_wrapped?(packet)
|
26
|
-
return false if packet.request.xhr? && !packet['template.enable'] # don't wrap xhr unless specifically asked to
|
27
|
-
packet['template.file'] && !packet['template.disable']
|
28
|
-
end
|
29
|
-
|
30
|
-
def wrap(packet, content = false)
|
31
|
-
content = packet.content unless content
|
32
|
-
content = content.join
|
33
|
-
content = orange[:parser].haml(packet['template.file'], packet, :wrapped_content => content, :template => true) do
|
34
|
-
content
|
35
|
-
end
|
36
|
-
[content]
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
module Orange::Pulp::Template
|
42
|
-
def wrap
|
43
|
-
packet[:content] = orange[:parser].haml(packet['template.file'], packet, :wrapped_content => packet[:content], :template => true) do
|
44
|
-
content
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
module Orange::Mixins::Template
|
50
|
-
def template_for(packet)
|
51
|
-
template_chooser.call(packet)
|
52
|
-
end
|
53
|
-
def template_chooser(&block)
|
54
|
-
if block_given?
|
55
|
-
@template_chooser = Proc.new
|
56
|
-
else
|
57
|
-
@template_chooser ||= Proc.new {|packet| false}
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
data/lib/orange-core/packet.rb
DELETED
@@ -1,232 +0,0 @@
|
|
1
|
-
module Orange
|
2
|
-
# Orange::Packet is a wrapper for Rack's basic env variable.
|
3
|
-
# It acts somewhat like Rack::Request, except with more functionality.
|
4
|
-
# For each request a unique Packet is generated, and this packet is
|
5
|
-
# used to by middleware to create the response.
|
6
|
-
#
|
7
|
-
# All orange enhanced middleware has a packet_call method that
|
8
|
-
# automatically turns the generic rack call(env) into a call
|
9
|
-
# that has a packet instead, so all functions for the packet should
|
10
|
-
# be available for the request.
|
11
|
-
#
|
12
|
-
# Pulps are modules that are mixed into the Packet, allowing
|
13
|
-
# additional functionality to be used by the packet.
|
14
|
-
#
|
15
|
-
# By default, haml files are parsed in the context of their
|
16
|
-
# packet. This means all of instance variables and functions should
|
17
|
-
# be available to the haml parser.
|
18
|
-
class Packet
|
19
|
-
# By default, header will be content-type
|
20
|
-
DEFAULT_HEADERS = {"Content-Type" => 'text/html'} unless defined?(DEFAULT_HEADERS)
|
21
|
-
|
22
|
-
# We override the instantiation to only create one packet per env
|
23
|
-
# @param [Orange::Core] orange a pointer to the orange core
|
24
|
-
# @param [Hash] env a standard Rack hash
|
25
|
-
def self.new(orange, env)
|
26
|
-
return env['orange.packet'] if env['orange.packet']
|
27
|
-
super(orange, env)
|
28
|
-
end
|
29
|
-
|
30
|
-
# Allows tying in to the method_missing method without redefining it
|
31
|
-
# elsewhere. This lets dynamic methods be defined on the packet.
|
32
|
-
# Regexes are defined to match method names. #method_missing will
|
33
|
-
# loop through and try to find a match, executing the proc defined in
|
34
|
-
# the block.
|
35
|
-
# @param [Regexp] regex the regex to match
|
36
|
-
# @yield [Orange::Packet, MatchData, args] the block to execute if matched
|
37
|
-
# (passed instance, match data and args)
|
38
|
-
def self.meta_methods(regex, &block)
|
39
|
-
return unless block_given?
|
40
|
-
proc = block
|
41
|
-
@@matchers ||= {}
|
42
|
-
@@matchers[regex] = proc
|
43
|
-
end
|
44
|
-
|
45
|
-
# Allows access to the matchers added via the #meta_methods method
|
46
|
-
# @return [Hash] the matchers hash
|
47
|
-
def matchers
|
48
|
-
@@matchers || {}
|
49
|
-
end
|
50
|
-
|
51
|
-
# Initialize is only called if a packet hasn't already been called for
|
52
|
-
# this env. Sets up the basic env, creating a pointer back to self
|
53
|
-
# and a Rack::Request object.
|
54
|
-
# @param [Orange::Core] orange a pointer to the orange core
|
55
|
-
# @param [Hash] env a standard Rack hash
|
56
|
-
def initialize(orange, env)
|
57
|
-
@orange = orange
|
58
|
-
@env = env
|
59
|
-
@env['orange.packet'] = self
|
60
|
-
@env['orange.env'] = {} unless @env['orange.env']
|
61
|
-
@env['orange.env'][:request] = Rack::Request.new(env)
|
62
|
-
@env['orange.env'][:headers] = {}
|
63
|
-
end
|
64
|
-
|
65
|
-
# Gives access to the orange.env key in the env, optionally
|
66
|
-
# including a default if key isn't involved.
|
67
|
-
# @param [Symbol, String] key the key to be found
|
68
|
-
# @param [optional, Object] default the return value if key doesn't exist (default is false)
|
69
|
-
# @return [Object] any value stored in the env
|
70
|
-
def [](key, default = false)
|
71
|
-
@env['orange.env'].has_key?(key) ? @env['orange.env'][key] : default
|
72
|
-
end
|
73
|
-
|
74
|
-
# Lets user set a value in the orange.env
|
75
|
-
# @param [Symbol, String] key the key to be set
|
76
|
-
# @param [Object] val the value to be set
|
77
|
-
def []=(key, val)
|
78
|
-
@env['orange.env'][key] = val
|
79
|
-
end
|
80
|
-
|
81
|
-
# Access to the main env (orange env is stored within the main env)
|
82
|
-
# @return [Hash] the request's env hash
|
83
|
-
def env
|
84
|
-
@env
|
85
|
-
end
|
86
|
-
|
87
|
-
# Access to the rack session
|
88
|
-
# @return [Hash] the session information made available by Rack
|
89
|
-
def session
|
90
|
-
env['rack.session']["flash"] ||= {}
|
91
|
-
env['rack.session']
|
92
|
-
end
|
93
|
-
|
94
|
-
# Access to the rack session flash
|
95
|
-
# @return [String] the string stored in the flash
|
96
|
-
def flash(key = nil, val = nil)
|
97
|
-
env['rack.session']["flash"] ||= {}
|
98
|
-
if key.nil? && val.nil?
|
99
|
-
env['rack.session']["flash"]
|
100
|
-
elsif val.nil?
|
101
|
-
env['rack.session']["flash"].delete(key)
|
102
|
-
else
|
103
|
-
env['rack.session']["flash"][key] = val
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
# Generate headers for finalization
|
108
|
-
# @return [Hash] the header information stored in the orange.env, combined with the defaults
|
109
|
-
# set as DEFAULT_HEADERS
|
110
|
-
def headers
|
111
|
-
packet[:headers, {}].with_defaults(DEFAULT_HEADERS)
|
112
|
-
end
|
113
|
-
|
114
|
-
# Set a header
|
115
|
-
# @param [String] key the key to be set
|
116
|
-
# @param [Object] val the value to be set
|
117
|
-
def header(key, val)
|
118
|
-
@env['orange.env'][:headers][key] = val
|
119
|
-
end
|
120
|
-
|
121
|
-
# Set a header (same as #header)
|
122
|
-
# @param [String] key the key to be set
|
123
|
-
# @param [Object] val the value to be set
|
124
|
-
def add_header(key, val)
|
125
|
-
header key, val
|
126
|
-
end
|
127
|
-
|
128
|
-
# Returns the content ready to be used by Rack (wrapped in an array)
|
129
|
-
# @return [Array] array of strings to be rendered
|
130
|
-
def content
|
131
|
-
# Stringify content if it isn't a string for some weird reason.
|
132
|
-
packet[:content] = packet[:content].to_s unless packet[:content].is_a? String
|
133
|
-
return [packet[:content]] if packet[:content]
|
134
|
-
return ['']
|
135
|
-
end
|
136
|
-
|
137
|
-
# Returns the request object generated by Rack::Request(packet.env)
|
138
|
-
# @return [Rack::Request] the request object
|
139
|
-
def request
|
140
|
-
packet[:request]
|
141
|
-
end
|
142
|
-
|
143
|
-
# A pointer to the Orange::Core instance
|
144
|
-
# @return [Orange::Core] the orange core run by the application
|
145
|
-
def orange
|
146
|
-
@orange
|
147
|
-
end
|
148
|
-
|
149
|
-
# Returns the array of [status, headers, content] Rack expects
|
150
|
-
# @return [Array] the triple array expected by Rack at the end
|
151
|
-
# of a call
|
152
|
-
def finish
|
153
|
-
headers = packet.headers
|
154
|
-
status = packet[:status, 200]
|
155
|
-
content = packet.content
|
156
|
-
if content.respond_to?(:to_ary)
|
157
|
-
headers["Content-Length"] = content.to_ary.
|
158
|
-
inject(0) { |len, part| len + Rack::Utils.bytesize(part) }.to_s
|
159
|
-
end
|
160
|
-
[status, headers, content]
|
161
|
-
end
|
162
|
-
|
163
|
-
# Returns self
|
164
|
-
# @return [Orange::Packet] self
|
165
|
-
def packet
|
166
|
-
self
|
167
|
-
end
|
168
|
-
|
169
|
-
# Includes the module passed
|
170
|
-
# @param [Module] inc the module to be mixed into the class
|
171
|
-
def self.mixin(inc)
|
172
|
-
include inc
|
173
|
-
end
|
174
|
-
|
175
|
-
# Route calls the router object set in the packet
|
176
|
-
# @return [void] route doesn't return anything directly, the
|
177
|
-
# main application calls packet.route then returns packet.finish.
|
178
|
-
# Routers set content, headers and status if necessary.
|
179
|
-
# They can also raise redirect errors to circumvent the process.
|
180
|
-
def route
|
181
|
-
router = packet['route.router']
|
182
|
-
raise 'Router not found' unless router
|
183
|
-
router.route(self)
|
184
|
-
end
|
185
|
-
|
186
|
-
# Pulls options set out of the packet and places them into
|
187
|
-
# a hash. Options are retrieved from POST, GET, and route.resource_path
|
188
|
-
# and take that order of precedence (POST overrides GET, etc)
|
189
|
-
# @param [Array] key_list an array of keys to retrieve and merge together
|
190
|
-
# in order of precedence. :GET and :POST for request vars, the rest
|
191
|
-
# are keys directly available on packet
|
192
|
-
# @return [Hash] A hash of options set in the packet
|
193
|
-
def extract_opts(key_list = [:POST, :GET, 'route.resource_path'])
|
194
|
-
opts = {}
|
195
|
-
key_list.reverse.each do |key|
|
196
|
-
case key
|
197
|
-
when :GET then opts.merge! packet.request.GET
|
198
|
-
when :POST then opts.merge! packet.request.POST
|
199
|
-
else
|
200
|
-
opts.merge!(packet[key, {}].kind_of?(String) ? url_to_hash(packet[key]) : packet[key, {}])
|
201
|
-
end
|
202
|
-
end
|
203
|
-
opts
|
204
|
-
end
|
205
|
-
|
206
|
-
# Converts a url path to a hash with symbol keys. URL must
|
207
|
-
# be in /key/val/key/val/etc format
|
208
|
-
def url_to_hash(url)
|
209
|
-
parts = url.split('/')
|
210
|
-
hash = {}
|
211
|
-
while !parts.blank?
|
212
|
-
key = parts.shift
|
213
|
-
key = parts.shift if key.blank?
|
214
|
-
val = parts.shift
|
215
|
-
hash[key.to_sym] = val unless key.blank? or val.blank?
|
216
|
-
end
|
217
|
-
hash
|
218
|
-
end
|
219
|
-
|
220
|
-
# Method Missing allows defining custom methods
|
221
|
-
def method_missing(id, *args)
|
222
|
-
matched = false
|
223
|
-
id = id.to_s
|
224
|
-
@@matchers.each_key do |k|
|
225
|
-
matched = k if id =~ k
|
226
|
-
break if matched
|
227
|
-
end
|
228
|
-
return @@matchers[matched].call(packet, matched.match(id), args) if matched
|
229
|
-
raise NoMethodError.new("No method ##{id} found", id)
|
230
|
-
end
|
231
|
-
end
|
232
|
-
end
|
data/lib/orange-core/plugin.rb
DELETED
@@ -1,172 +0,0 @@
|
|
1
|
-
require 'orange-core/magick'
|
2
|
-
require 'orange-core/core'
|
3
|
-
module Orange::Plugins
|
4
|
-
# This class defines a basic Orange plugin. A plugin simply defines
|
5
|
-
# a bunch of possible classes/files that can be called up by the main
|
6
|
-
# orange system.
|
7
|
-
#
|
8
|
-
# The plugins are used in several places. When the core is initialized,
|
9
|
-
# it will ask all plugins if they have any resources that should be added,
|
10
|
-
# and load those resources if they exist.
|
11
|
-
#
|
12
|
-
# The stack will call the list of plugins several times in building a stack
|
13
|
-
# once for each possible middleware location.
|
14
|
-
class Base
|
15
|
-
extend ClassInheritableAttributes
|
16
|
-
cattr_accessor :prerouting_middleware, :routing_middleware,
|
17
|
-
:responder_middleware, :postrouting_middleware, :has_middleware
|
18
|
-
cattr_accessor :assets, :assets_name
|
19
|
-
cattr_accessor :resources
|
20
|
-
cattr_accessor :views
|
21
|
-
cattr_accessor :templates
|
22
|
-
|
23
|
-
# Adds a single prerouting middleware class to list of prerouting middleware
|
24
|
-
def self.prerouter(r)
|
25
|
-
prerouters(r)
|
26
|
-
end
|
27
|
-
|
28
|
-
# Adds several prerouting middleware classes to list of prerouting middleware
|
29
|
-
def self.prerouters(*routers)
|
30
|
-
self.has_middleware = true
|
31
|
-
routers.each do |prerouter|
|
32
|
-
self.prerouting_middleware << prerouter
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
# Adds a single postrouting middleware class to list of postrouting middleware
|
37
|
-
def self.postrouter(r)
|
38
|
-
postrouters(r)
|
39
|
-
end
|
40
|
-
|
41
|
-
# Adds several postrouting middleware classes to list of postrouting middleware
|
42
|
-
def self.postrouters(*routers)
|
43
|
-
self.has_middleware = true
|
44
|
-
routers.each do |postrouter|
|
45
|
-
self.postrouting_middleware << postrouter
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
# Adds a router middleware class to the list of routing middleware
|
50
|
-
def self.router(r)
|
51
|
-
routers(r)
|
52
|
-
end
|
53
|
-
# Adds several router middleware classes
|
54
|
-
def self.routers(*routers)
|
55
|
-
self.has_middleware = true
|
56
|
-
routers.each do |router|
|
57
|
-
self.routing_middleware << router
|
58
|
-
end
|
59
|
-
end
|
60
|
-
# Adds a responder middleware class
|
61
|
-
def self.responder(r)
|
62
|
-
responders(r)
|
63
|
-
end
|
64
|
-
# Adds several responder middleware classes
|
65
|
-
def self.responders(*respones)
|
66
|
-
self.has_middleware = true
|
67
|
-
respones.each do |response|
|
68
|
-
self.responder_middleware << response
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
# Returns the list of prerouting_middleware defined or
|
73
|
-
# an empty array if none defined
|
74
|
-
def self.prerouting_middleware
|
75
|
-
super || self.prerouting_middleware = []
|
76
|
-
end
|
77
|
-
|
78
|
-
# Returns the list of prerouting_middleware defined or
|
79
|
-
# an empty array if none defined
|
80
|
-
def self.postrouting_middleware
|
81
|
-
super || self.postrouting_middleware = []
|
82
|
-
end
|
83
|
-
|
84
|
-
# Returns the list of routing_middleware defined or
|
85
|
-
# an empty array if none defined
|
86
|
-
def self.routing_middleware
|
87
|
-
super || self.routing_middleware = []
|
88
|
-
end
|
89
|
-
|
90
|
-
# Returns the list of responder_middleware defined or
|
91
|
-
# an empty array if none defined
|
92
|
-
def self.responder_middleware
|
93
|
-
super || self.responder_middleware = []
|
94
|
-
end
|
95
|
-
|
96
|
-
def self.templates_dir(arg)
|
97
|
-
self.templates = arg
|
98
|
-
end
|
99
|
-
|
100
|
-
def self.views_dir(arg)
|
101
|
-
self.views = arg
|
102
|
-
end
|
103
|
-
|
104
|
-
def self.assets_dir(arg)
|
105
|
-
self.assets = arg
|
106
|
-
end
|
107
|
-
|
108
|
-
def self.resource(instance, name = false)
|
109
|
-
self.resources << [instance, name]
|
110
|
-
end
|
111
|
-
|
112
|
-
def self.resources
|
113
|
-
super || self.resources = []
|
114
|
-
end
|
115
|
-
|
116
|
-
# Returns the assigned asset dir name,
|
117
|
-
# or Plugin class name formatted like this: PluginClass -> _pluginclass_
|
118
|
-
def assets_name
|
119
|
-
self.class.assets_name || '_'+self.class.to_s.gsub(/Orange::Plugins::/, '').gsub(/::/, '_').downcase+'_'
|
120
|
-
end
|
121
|
-
|
122
|
-
# Returns the assets directory for this plugin
|
123
|
-
def assets
|
124
|
-
self.class.assets
|
125
|
-
end
|
126
|
-
|
127
|
-
# Whether this plugin has assets for the static middleware to worry
|
128
|
-
# about
|
129
|
-
def has_assets?
|
130
|
-
!assets.blank?
|
131
|
-
end
|
132
|
-
|
133
|
-
def resources
|
134
|
-
self.class.resources
|
135
|
-
end
|
136
|
-
|
137
|
-
def has_resources?
|
138
|
-
!resources.blank?
|
139
|
-
end
|
140
|
-
|
141
|
-
def views
|
142
|
-
self.class.views
|
143
|
-
end
|
144
|
-
|
145
|
-
def has_views?
|
146
|
-
!views.blank?
|
147
|
-
end
|
148
|
-
|
149
|
-
def templates
|
150
|
-
self.class.templates
|
151
|
-
end
|
152
|
-
|
153
|
-
def has_templates?
|
154
|
-
!templates.blank?
|
155
|
-
end
|
156
|
-
|
157
|
-
def middleware(type = :has)
|
158
|
-
case type
|
159
|
-
when :responders then self.class.responder_middleware
|
160
|
-
when :routing then self.class.routing_middleware
|
161
|
-
when :prerouting then self.class.prerouting_middleware
|
162
|
-
when :postrouting then self.class.postrouting_middleware
|
163
|
-
when :has then self.class.has_middleware
|
164
|
-
else nil
|
165
|
-
end
|
166
|
-
end
|
167
|
-
|
168
|
-
def has_middleware?
|
169
|
-
!middleware.blank?
|
170
|
-
end
|
171
|
-
end
|
172
|
-
end
|