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,50 +0,0 @@
|
|
1
|
-
html * { padding:0; margin:0; }
|
2
|
-
body * { padding:10px 20px; }
|
3
|
-
body * * { padding:0; }
|
4
|
-
body { font:small sans-serif; }
|
5
|
-
body>div { border-bottom:1px solid #ddd; }
|
6
|
-
h1 { font-weight:normal; }
|
7
|
-
h2 { margin-bottom:.8em; }
|
8
|
-
h2 span { font-size:80%; color:#666; font-weight:normal; }
|
9
|
-
h3 { margin:1em 0 .5em 0; }
|
10
|
-
h4 { margin:0 0 .5em 0; font-weight: normal; }
|
11
|
-
table {
|
12
|
-
border:1px solid #ccc; border-collapse: collapse; background:white; }
|
13
|
-
tbody td, tbody th { vertical-align:top; padding:2px 3px; }
|
14
|
-
thead th {
|
15
|
-
padding:1px 6px 1px 3px; background:#fefefe; text-align:left;
|
16
|
-
font-weight:normal; font-size:11px; border:1px solid #ddd; }
|
17
|
-
tbody th { text-align:right; color:#666; padding-right:.5em; }
|
18
|
-
table.vars { margin:5px 0 2px 40px; }
|
19
|
-
table.vars td, table.req td { font-family:monospace; }
|
20
|
-
table td.code { width:100%;}
|
21
|
-
table td.code div { overflow:hidden; }
|
22
|
-
table.source th { color:#666; }
|
23
|
-
table.source td {
|
24
|
-
font-family:monospace; white-space:pre; border-bottom:1px solid #eee; }
|
25
|
-
ul.traceback { list-style-type:none; }
|
26
|
-
ul.traceback li.frame { margin-bottom:1em; }
|
27
|
-
div.context { margin: 10px 0; }
|
28
|
-
div.context ol {
|
29
|
-
padding-left:30px; margin:0 10px; list-style-position: inside; }
|
30
|
-
div.context ol li {
|
31
|
-
font-family:monospace; white-space:pre; color:#666; cursor:pointer; }
|
32
|
-
div.context ol.context-line li { color:black; background-color:#ccc; }
|
33
|
-
div.context ol.context-line li span { float: right; }
|
34
|
-
div.commands { margin-left: 40px; }
|
35
|
-
div.commands a { color:black; text-decoration:none; }
|
36
|
-
#summary { background: #fda; }
|
37
|
-
#summary h2 { font-weight: normal; color: #666; }
|
38
|
-
#summary ul#quicklinks { list-style-type: none; margin-bottom: 2em; }
|
39
|
-
#summary ul#quicklinks li { float: left; padding: 0 1em; }
|
40
|
-
#summary ul#quicklinks>li+li { border-left: 1px #666 solid; }
|
41
|
-
#explanation { background:#eee; }
|
42
|
-
#template, #template-not-exist { background:#f6f6f6; }
|
43
|
-
#template-not-exist ul { margin: 0 0 0 20px; }
|
44
|
-
#traceback { background:#eee; }
|
45
|
-
#requestinfo { background:#f6f6f6; padding-left:120px; }
|
46
|
-
#summary table { border:none; background:transparent; }
|
47
|
-
#requestinfo h2, #requestinfo h3 { position:relative; margin-left:-100px; }
|
48
|
-
#requestinfo h3 { margin-bottom:-1em; }
|
49
|
-
.error { background: #ffc; }
|
50
|
-
.specific { color:#cc3300; font-weight:bold; }
|
@@ -1,44 +0,0 @@
|
|
1
|
-
function getElementsByClassName(oElm, strTagName, strClassName){
|
2
|
-
// Written by Jonathan Snook, http://www.snook.ca/jon;
|
3
|
-
// Add-ons by Robert Nyman, http://www.robertnyman.com
|
4
|
-
var arrElements = (strTagName == "*" && document.all)? document.all :
|
5
|
-
oElm.getElementsByTagName(strTagName);
|
6
|
-
var arrReturnElements = new Array();
|
7
|
-
strClassName = strClassName.replace(/\-/g, "\\-");
|
8
|
-
var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$$)");
|
9
|
-
var oElement;
|
10
|
-
for(var i=0; i<arrElements.length; i++){
|
11
|
-
oElement = arrElements[i];
|
12
|
-
if(oRegExp.test(oElement.className)){
|
13
|
-
arrReturnElements.push(oElement);
|
14
|
-
}
|
15
|
-
}
|
16
|
-
return (arrReturnElements)
|
17
|
-
}
|
18
|
-
function hideAll(elems) {
|
19
|
-
for (var e = 0; e < elems.length; e++) {
|
20
|
-
elems[e].style.display = 'none';
|
21
|
-
}
|
22
|
-
}
|
23
|
-
window.onload = function() {
|
24
|
-
hideAll(getElementsByClassName(document, 'table', 'vars'));
|
25
|
-
hideAll(getElementsByClassName(document, 'ol', 'pre-context'));
|
26
|
-
hideAll(getElementsByClassName(document, 'ol', 'post-context'));
|
27
|
-
}
|
28
|
-
function toggle() {
|
29
|
-
for (var i = 0; i < arguments.length; i++) {
|
30
|
-
var e = document.getElementById(arguments[i]);
|
31
|
-
if (e) {
|
32
|
-
e.style.display = e.style.display == 'none' ? 'block' : 'none';
|
33
|
-
}
|
34
|
-
}
|
35
|
-
return false;
|
36
|
-
}
|
37
|
-
function varToggle(link, id) {
|
38
|
-
toggle('v' + id);
|
39
|
-
var s = link.getElementsByTagName('span')[0];
|
40
|
-
var uarr = String.fromCharCode(0x25b6);
|
41
|
-
var darr = String.fromCharCode(0x25bc);
|
42
|
-
s.innerHTML = s.innerHTML == uarr ? darr : uarr;
|
43
|
-
return false;
|
44
|
-
}
|
data/lib/orange-core/carton.rb
DELETED
@@ -1,178 +0,0 @@
|
|
1
|
-
require 'dm-core'
|
2
|
-
|
3
|
-
module Orange
|
4
|
-
# Orange::Carton is the main model class for Orange. It's based on Datamapper.
|
5
|
-
# In addition to handling the database interactions, the carton keeps
|
6
|
-
# track of declared properties, which is used to create scaffolds.
|
7
|
-
#
|
8
|
-
# All subclasses should start by declaring the "id" attribute. All models
|
9
|
-
# are assumed to have an id attribute by most everything else, so it's
|
10
|
-
# a good idea to have one. Also, we use this to tie in initialization before
|
11
|
-
# using the other dsl-ish methods (since these other methods are class level
|
12
|
-
# and would happen before initialize ever gets called)
|
13
|
-
#
|
14
|
-
# Orange::Carton adds many shortcut methods for adding various datatypes
|
15
|
-
# to the model in a more declarative style (`id` vs `property :id, Serial`)
|
16
|
-
#
|
17
|
-
# For classes that don't need anything but scaffolding, there's the
|
18
|
-
# as_resource method, which automatically creates a scaffolding resource
|
19
|
-
# for the model.
|
20
|
-
#
|
21
|
-
# A model that doesn't need scaffolded at all could optionally forgo the carton
|
22
|
-
# class and just include DataMapper::Resource. All carton methods are to
|
23
|
-
# improve scaffolding capability.
|
24
|
-
class Carton
|
25
|
-
SCAFFOLD_OPTIONS = [:display_name, :levels] unless defined?(SCAFFOLD_OPTIONS)
|
26
|
-
extend ClassInheritableAttributes
|
27
|
-
cattr_accessor :scaffold_properties
|
28
|
-
|
29
|
-
# Declares a ModelResource subclass that scaffolds this carton
|
30
|
-
# The Subclass will have the name of the carton followed by "_Resource"
|
31
|
-
def self.as_resource
|
32
|
-
name = self.to_s
|
33
|
-
eval <<-HEREDOC
|
34
|
-
class ::#{name}_Resource < Orange::ModelResource
|
35
|
-
use #{name}
|
36
|
-
end
|
37
|
-
HEREDOC
|
38
|
-
end
|
39
|
-
|
40
|
-
# Include DataMapper types (required to be able to use Serial)
|
41
|
-
include DataMapper::Types
|
42
|
-
|
43
|
-
# Do setup of object and declare an id
|
44
|
-
def self.id
|
45
|
-
include DataMapper::Resource
|
46
|
-
property(:id, Serial)
|
47
|
-
self.scaffold_properties ||= []
|
48
|
-
self.init
|
49
|
-
end
|
50
|
-
|
51
|
-
# Stub init method
|
52
|
-
def self.init
|
53
|
-
end
|
54
|
-
|
55
|
-
# Return properties that should be shown for a given context
|
56
|
-
def self.form_props(context = :live)
|
57
|
-
self.scaffold_properties.select{|p| p[:levels].include?(context) }
|
58
|
-
end
|
59
|
-
|
60
|
-
# Helper to wrap properties into admin level
|
61
|
-
def self.admin(&block)
|
62
|
-
@levels = [:admin, :orange]
|
63
|
-
instance_eval(&block)
|
64
|
-
@levels = false
|
65
|
-
end
|
66
|
-
|
67
|
-
# Helper to wrap properties into orange level
|
68
|
-
def self.orange(&block)
|
69
|
-
@levels = [:orange]
|
70
|
-
instance_eval(&block)
|
71
|
-
@levels = false
|
72
|
-
end
|
73
|
-
|
74
|
-
# Helper to wrap properties into front level
|
75
|
-
def self.front(&block)
|
76
|
-
@levels = [:live, :admin, :orange]
|
77
|
-
instance_eval(&block)
|
78
|
-
@levels = false
|
79
|
-
end
|
80
|
-
|
81
|
-
def self.add_scaffold(name, type, dm_type, opts)
|
82
|
-
self.scaffold_properties << {:name => name, :type => type, :levels => @levels}.merge(opts) if @levels || opts.has_key?(:levels)
|
83
|
-
opts = opts.delete_if{|k,v| SCAFFOLD_OPTIONS.include?(k)} # DataMapper doesn't like arbitrary opts
|
84
|
-
self.property(name, dm_type, opts)
|
85
|
-
end
|
86
|
-
|
87
|
-
# Define a helper for title type database stuff
|
88
|
-
# Show in a context if wrapped in one of the helpers
|
89
|
-
def self.title(name, opts = {})
|
90
|
-
add_scaffold(name, :title, String, opts)
|
91
|
-
end
|
92
|
-
|
93
|
-
# Define a helper for title type database stuff
|
94
|
-
# Show in a context if wrapped in one of the helpers
|
95
|
-
def self.datetime(name, opts = {})
|
96
|
-
add_scaffold(name, :datetime, DateTime, opts)
|
97
|
-
end
|
98
|
-
|
99
|
-
# Define a helper for title type database stuff
|
100
|
-
# Show in a context if wrapped in one of the helpers
|
101
|
-
def self.date(name, opts = {})
|
102
|
-
add_scaffold(name, :date, Date, opts)
|
103
|
-
end
|
104
|
-
|
105
|
-
# Define a helper for title type database stuff
|
106
|
-
# Show in a context if wrapped in one of the helpers
|
107
|
-
def self.time(name, opts = {})
|
108
|
-
add_scaffold(name, :time, Time, opts)
|
109
|
-
end
|
110
|
-
|
111
|
-
# Define a helper for fulltext type database stuff
|
112
|
-
# Show in a context if wrapped in one of the helpers
|
113
|
-
def self.fulltext(name, opts = {})
|
114
|
-
add_scaffold(name, :fulltext, Text, opts)
|
115
|
-
end
|
116
|
-
|
117
|
-
# Define a helper for boolean type database stuff
|
118
|
-
# Show in a context if wrapped in one of the helpers
|
119
|
-
def self.boolean(name, opts = {})
|
120
|
-
add_scaffold(name, :boolean, Boolean, opts)
|
121
|
-
end
|
122
|
-
|
123
|
-
# Define a helper for input type="text" type database stuff
|
124
|
-
# Show in a context if wrapped in one of the helpers
|
125
|
-
def self.text(name, opts = {})
|
126
|
-
add_scaffold(name, :text, String, opts)
|
127
|
-
end
|
128
|
-
|
129
|
-
# Define a helper for type database stuff
|
130
|
-
# Show in a context if wrapped in one of the helpers
|
131
|
-
def self.expose(name, opts = {})
|
132
|
-
self.scaffold_properties << {:name => name, :type => :text, :levels => @levels, :opts => opts} if @levels
|
133
|
-
end
|
134
|
-
|
135
|
-
# Define a helper for input type="text" type database stuff
|
136
|
-
# Show in a context if wrapped in one of the helpers
|
137
|
-
def self.string(name, opts = {})
|
138
|
-
self.text(name, opts)
|
139
|
-
end
|
140
|
-
|
141
|
-
# Override DataMapper to include context sensitivity (as set by helpers)
|
142
|
-
def self.scaffold_property(name, type, opts = {})
|
143
|
-
my_type = type.to_s.downcase.to_sym
|
144
|
-
add_scaffold(name, my_type, type, opts)
|
145
|
-
end
|
146
|
-
|
147
|
-
|
148
|
-
# For more generic cases, use same syntax as DataMapper does.
|
149
|
-
# The difference is that this will make it an admin property.
|
150
|
-
def self.admin_property(name, type, opts = {})
|
151
|
-
my_type = type.to_s.downcase.to_sym
|
152
|
-
opts[:levels] = [:admin, :orange]
|
153
|
-
add_scaffold(name, my_type, type, opts)
|
154
|
-
end
|
155
|
-
|
156
|
-
# For more generic cases, use same syntax as DataMapper does.
|
157
|
-
# The difference is that this will make it a front property.
|
158
|
-
def self.front_property(name, type, opts = {})
|
159
|
-
my_type = type.to_s.downcase.to_sym
|
160
|
-
opts[:levels] = [:live, :admin, :orange]
|
161
|
-
add_scaffold(name, my_type, type, opts)
|
162
|
-
end
|
163
|
-
|
164
|
-
# For more generic cases, use same syntax as DataMapper does.
|
165
|
-
# The difference is that this will make it an orange property.
|
166
|
-
def self.orange_property(name, type, opts = {})
|
167
|
-
my_type = type.to_s.downcase.to_sym
|
168
|
-
opts[:levels] = [:orange]
|
169
|
-
add_scaffold(name, my_type, type, opts)
|
170
|
-
end
|
171
|
-
|
172
|
-
def to_s
|
173
|
-
<<-DOC
|
174
|
-
{"class": "#{self.class.to_s}", "id": "#{self.id}"}
|
175
|
-
DOC
|
176
|
-
end
|
177
|
-
end
|
178
|
-
end
|
data/lib/orange-core/core.rb
DELETED
@@ -1,266 +0,0 @@
|
|
1
|
-
require 'dm-core'
|
2
|
-
require 'rack'
|
3
|
-
require 'rack/builder'
|
4
|
-
|
5
|
-
module Orange
|
6
|
-
# Declare submodules for later use
|
7
|
-
module Pulp; end
|
8
|
-
module Mixins; end
|
9
|
-
module Plugins; end
|
10
|
-
|
11
|
-
attr_accessor :plugins
|
12
|
-
|
13
|
-
# Support for plugins
|
14
|
-
def self.plugins
|
15
|
-
@plugins ||= []
|
16
|
-
end
|
17
|
-
|
18
|
-
# Allows adding plugins
|
19
|
-
def self.plugin(plugin)
|
20
|
-
self.plugins << plugin if plugin.kind_of?(Orange::Plugins::Base)
|
21
|
-
end
|
22
|
-
|
23
|
-
# Allow mixins directly from Orange
|
24
|
-
def self.mixin(inc)
|
25
|
-
Core.mixin inc
|
26
|
-
end
|
27
|
-
|
28
|
-
# Allow pulp directly from Orange
|
29
|
-
def self.add_pulp(inc)
|
30
|
-
Packet.mixin inc
|
31
|
-
end
|
32
|
-
|
33
|
-
# Core is one of two main sources of interaction for Orange Applications
|
34
|
-
#
|
35
|
-
# All portions of Orange based code have access to the Core upon
|
36
|
-
# initialization. Orange allows access to individual resources,
|
37
|
-
# and also allows single point for event registration and firing.
|
38
|
-
#
|
39
|
-
# Functionality of the core can be extended by loading resources,
|
40
|
-
# or by mixins that directly affect the Core. Generally, resources
|
41
|
-
# are the less convoluted (easier to debug) way to do it.
|
42
|
-
class Core
|
43
|
-
# Sets the default options for Orange Applications
|
44
|
-
DEFAULT_CORE_OPTIONS =
|
45
|
-
{
|
46
|
-
:contexts => [:live, :admin, :orange],
|
47
|
-
:default_context => :live,
|
48
|
-
:default_resource => :not_found,
|
49
|
-
:default_database => 'sqlite3::memory:'
|
50
|
-
} unless defined?(DEFAULT_CORE_OPTIONS)
|
51
|
-
|
52
|
-
# Args will be set to the @options array.
|
53
|
-
# Block DSL style option setting also available:
|
54
|
-
#
|
55
|
-
# orange = Orange::Core.new(:optional_option => 'foo') do
|
56
|
-
# haml true
|
57
|
-
# site_name "Banana"
|
58
|
-
# custom_router MyRouterClass.new
|
59
|
-
# end
|
60
|
-
#
|
61
|
-
# orange.options[:site_name] #=> "Banana"
|
62
|
-
#
|
63
|
-
# This method calls afterLoad when it is done. Subclasses can override
|
64
|
-
# the afterLoad method for initialization needs.
|
65
|
-
def initialize(*args, &block)
|
66
|
-
@options = Options.new(*args, &block).hash.with_defaults(DEFAULT_CORE_OPTIONS)
|
67
|
-
@resources = {}
|
68
|
-
@application = false
|
69
|
-
@stack = false
|
70
|
-
@middleware = []
|
71
|
-
@events = {}
|
72
|
-
@file = __FILE__
|
73
|
-
load(Orange::Parser.new, :parser)
|
74
|
-
load(Orange::Mapper.new, :mapper)
|
75
|
-
load(Orange::Scaffold.new, :scaffold)
|
76
|
-
load(Orange::PageParts.new, :page_parts)
|
77
|
-
Orange.plugins.each{|p| p.resources.each{|args| load(*args)} if p.has_resources?}
|
78
|
-
self.register(:stack_loaded) do |s|
|
79
|
-
@middleware.each{|m| m.stack_init if m.respond_to?(:stack_init)}
|
80
|
-
@application.stack_init if @application
|
81
|
-
end
|
82
|
-
self.register(:stack_reloading){|s| @middleware = []} # Dump middleware on stack reload
|
83
|
-
# load(Orange::AdminResource.new, :admin)
|
84
|
-
afterLoad
|
85
|
-
self
|
86
|
-
end
|
87
|
-
|
88
|
-
# Returns the orange library directory
|
89
|
-
# @return [String] the directory name indicating where the core file is
|
90
|
-
# located
|
91
|
-
def core_dir(*args)
|
92
|
-
if args
|
93
|
-
File.join((options[:core_dir] ||= File.dirname(__FILE__)), *args)
|
94
|
-
else
|
95
|
-
options[:core_dir] ||= File.dirname(__FILE__)
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
# Returns the directory of the currently executing file (using Dir.pwd),
|
100
|
-
# can be overriden using the option :app_dir in initialization
|
101
|
-
#
|
102
|
-
# @return [String] the directory name of the currently running application
|
103
|
-
def app_dir(*args)
|
104
|
-
if args
|
105
|
-
File.join((options[:app_dir] ||= Dir.pwd), *args)
|
106
|
-
else
|
107
|
-
options[:app_dir] ||= Dir.pwd
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
# Called by initialize after finished loading
|
112
|
-
def afterLoad
|
113
|
-
true
|
114
|
-
end
|
115
|
-
|
116
|
-
# Returns status of a given resource by short name
|
117
|
-
# @param [Symbol] resource_name The short name of the resource
|
118
|
-
# @return [Boolean] result of has_key? in the resources list
|
119
|
-
def loaded?(resource_name)
|
120
|
-
@resources.has_key?(resource_name)
|
121
|
-
end
|
122
|
-
|
123
|
-
# Takes an instance of a Orange::Resource subclass, sets orange
|
124
|
-
# then adds it to the orange resources
|
125
|
-
#
|
126
|
-
# It can be assigned a short name to be used for accessing later
|
127
|
-
# on. If no short name is assigned, one will be generated by downcasing
|
128
|
-
# the class name and changing it to a symbol
|
129
|
-
#
|
130
|
-
# Resources must respond to set_orange, which is automatically used to
|
131
|
-
# create a link back to the Core, and to notify the resource of its assigned
|
132
|
-
# short name.
|
133
|
-
#
|
134
|
-
# @param [Orange::Resource] resource An instance of Orange::Resource subclass
|
135
|
-
# @param [optional, Symbol, String] name A short name to assign as key in Hash
|
136
|
-
# list of resources.
|
137
|
-
# Doesn't necessarily need to be a symbol, but generally is.
|
138
|
-
# Set to the class name lowercase as a symbol by default.
|
139
|
-
def load(resource, name = false)
|
140
|
-
name = resource.orange_name if(!name)
|
141
|
-
name = resource.class.to_s.gsub(/::/, '_').downcase.to_sym if(!name)
|
142
|
-
@resources[name] = resource.set_orange(self, name)
|
143
|
-
end
|
144
|
-
|
145
|
-
# Takes an instance of Orange::Middleware::Base subclass and
|
146
|
-
# keeps it for later. This way we can provide introspection into the
|
147
|
-
# middleware instances (useful for calling stack_init on them)
|
148
|
-
def middleware(middle = false)
|
149
|
-
@middleware << middle if middle
|
150
|
-
@middleware
|
151
|
-
end
|
152
|
-
|
153
|
-
# Takes an instance of Orange::Application and saves it.
|
154
|
-
def application(app = false)
|
155
|
-
@application = app if app
|
156
|
-
@application
|
157
|
-
end
|
158
|
-
|
159
|
-
# Takes an instance of Orange::Stack and saves it.
|
160
|
-
def stack(new_stack = false)
|
161
|
-
@stack = new_stack if new_stack
|
162
|
-
@stack
|
163
|
-
end
|
164
|
-
|
165
|
-
# Takes an instance of Orange::Stack and saves it.
|
166
|
-
def stack=(new_stack)
|
167
|
-
@stack = new_stack
|
168
|
-
end
|
169
|
-
|
170
|
-
# Convenience self for consistent naming across middleware
|
171
|
-
# @return [Orange::Core] self
|
172
|
-
def orange; self; end
|
173
|
-
|
174
|
-
# Registers interest in a callback for a named event.
|
175
|
-
#
|
176
|
-
# Event registration is stored as a hash list of events and arrays
|
177
|
-
# of procs to be executed on each event.
|
178
|
-
#
|
179
|
-
# @param [Symbol] event the name of the event registered for
|
180
|
-
# @param [optional, Integer] position the position to place the event in,
|
181
|
-
# by default goes to the front of the list. Doesn't necessarily need
|
182
|
-
# to be exact count, empty spaces in array are taken out. Forcing the
|
183
|
-
# event to be at 99 or some such position will typically make sure it
|
184
|
-
# happens last in the firing process.
|
185
|
-
# @param [Block] block The code to be executed upon event firing.
|
186
|
-
# Saved to an array of procs that are called when #fire is called.
|
187
|
-
# Block must accept one param, which is the intended to be the packet
|
188
|
-
# causing the block to fire, unless the event happens in setup.
|
189
|
-
def register(event, position = 0, &block)
|
190
|
-
if block_given?
|
191
|
-
if @events[event]
|
192
|
-
@events[event].insert(position, Proc.new)
|
193
|
-
else
|
194
|
-
@events[event] = Array.new.insert(position, Proc.new)
|
195
|
-
end
|
196
|
-
end
|
197
|
-
end
|
198
|
-
|
199
|
-
# Fires a callback for a given packet (or other object)
|
200
|
-
#
|
201
|
-
# @param [Symbol] event name of event something has registered for
|
202
|
-
# @param [Orange::Packet, object] packet Object, generally Orange::Packet,
|
203
|
-
# causing the fire. This is passed to each Proc registered.
|
204
|
-
# @return [Boolean] returns false if nothing has been registered for the
|
205
|
-
# event, otherwise true.
|
206
|
-
def fire(event, packet, *args)
|
207
|
-
return false unless @events[event]
|
208
|
-
@events[event].compact!
|
209
|
-
for callback in @events[event]
|
210
|
-
callback.call(packet, *args)
|
211
|
-
end
|
212
|
-
true
|
213
|
-
end
|
214
|
-
|
215
|
-
# Returns options of the orange core
|
216
|
-
#
|
217
|
-
# @return [Hash] Hash of options
|
218
|
-
def options
|
219
|
-
@options
|
220
|
-
end
|
221
|
-
|
222
|
-
|
223
|
-
# Accesses resources array, stored as a hash {:short_name => Resource instance,...}
|
224
|
-
#
|
225
|
-
# @param [Symbol] name the short name for the requested resource
|
226
|
-
# @param [optional, Boolean] ignore Whether to ignore any calls to resource if not found
|
227
|
-
# (false is default). This will allow method calls to non-existent resources. Should be
|
228
|
-
# used with caution.
|
229
|
-
# @return [Orange::Resource] the resource for the given short name
|
230
|
-
def [](name, ignore = false)
|
231
|
-
if ignore && !loaded?(name)
|
232
|
-
Ignore.new
|
233
|
-
else
|
234
|
-
@resources[name]
|
235
|
-
end
|
236
|
-
end
|
237
|
-
|
238
|
-
# Includes module in the Packet class
|
239
|
-
# @param [Module] inc module to be included
|
240
|
-
def add_pulp(inc)
|
241
|
-
self.class.add_pulp inc
|
242
|
-
end
|
243
|
-
|
244
|
-
# Includes module in this class
|
245
|
-
# @param [Module] inc module to be included
|
246
|
-
def mixin(inc)
|
247
|
-
self.class.mixin inc
|
248
|
-
end
|
249
|
-
|
250
|
-
# Includes module in this class
|
251
|
-
# @param [Module] inc module to be included
|
252
|
-
def self.mixin(inc)
|
253
|
-
include inc
|
254
|
-
end
|
255
|
-
|
256
|
-
# Includes module in the Packet class
|
257
|
-
# @param [Module] inc module to be included
|
258
|
-
def self.add_pulp(inc)
|
259
|
-
Packet.mixin inc
|
260
|
-
end
|
261
|
-
|
262
|
-
def inspect
|
263
|
-
"#<Orange::Core:0x#{self.object_id.to_s(16)}>"
|
264
|
-
end
|
265
|
-
end
|
266
|
-
end
|