orange-core 0.5.3
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/README.markdown +145 -0
- data/lib/orange-core.rb +8 -0
- data/lib/orange-core/application.rb +132 -0
- data/lib/orange-core/assets/css/exceptions.css +50 -0
- data/lib/orange-core/assets/js/exceptions.js +44 -0
- data/lib/orange-core/carton.rb +178 -0
- data/lib/orange-core/core.rb +266 -0
- data/lib/orange-core/magick.rb +270 -0
- data/lib/orange-core/middleware/base.rb +96 -0
- data/lib/orange-core/middleware/database.rb +45 -0
- data/lib/orange-core/middleware/four_oh_four.rb +45 -0
- data/lib/orange-core/middleware/globals.rb +17 -0
- data/lib/orange-core/middleware/loader.rb +13 -0
- data/lib/orange-core/middleware/rerouter.rb +53 -0
- data/lib/orange-core/middleware/restful_router.rb +99 -0
- data/lib/orange-core/middleware/route_context.rb +39 -0
- data/lib/orange-core/middleware/route_site.rb +51 -0
- data/lib/orange-core/middleware/show_exceptions.rb +80 -0
- data/lib/orange-core/middleware/static.rb +67 -0
- data/lib/orange-core/middleware/static_file.rb +32 -0
- data/lib/orange-core/middleware/template.rb +60 -0
- data/lib/orange-core/packet.rb +232 -0
- data/lib/orange-core/plugin.rb +172 -0
- data/lib/orange-core/resource.rb +96 -0
- data/lib/orange-core/resources/mapper.rb +36 -0
- data/lib/orange-core/resources/model_resource.rb +228 -0
- data/lib/orange-core/resources/not_found.rb +10 -0
- data/lib/orange-core/resources/page_parts.rb +68 -0
- data/lib/orange-core/resources/parser.rb +113 -0
- data/lib/orange-core/resources/routable_resource.rb +16 -0
- data/lib/orange-core/resources/scaffold.rb +106 -0
- data/lib/orange-core/stack.rb +226 -0
- data/lib/orange-core/templates/exceptions.haml +111 -0
- data/lib/orange-core/views/default_resource/create.haml +4 -0
- data/lib/orange-core/views/default_resource/edit.haml +9 -0
- data/lib/orange-core/views/default_resource/list.haml +10 -0
- data/lib/orange-core/views/default_resource/show.haml +4 -0
- data/lib/orange-core/views/default_resource/table_row.haml +7 -0
- data/lib/orange-core/views/not_found/404.haml +2 -0
- data/spec/orange-core/application_spec.rb +183 -0
- data/spec/orange-core/carton_spec.rb +136 -0
- data/spec/orange-core/core_spec.rb +248 -0
- data/spec/orange-core/magick_spec.rb +96 -0
- data/spec/orange-core/middleware/base_spec.rb +38 -0
- data/spec/orange-core/middleware/globals_spec.rb +3 -0
- data/spec/orange-core/middleware/rerouter_spec.rb +3 -0
- data/spec/orange-core/middleware/restful_router_spec.rb +3 -0
- data/spec/orange-core/middleware/route_context_spec.rb +3 -0
- data/spec/orange-core/middleware/route_site_spec.rb +3 -0
- data/spec/orange-core/middleware/show_exceptions_spec.rb +3 -0
- data/spec/orange-core/middleware/static_file_spec.rb +3 -0
- data/spec/orange-core/middleware/static_spec.rb +3 -0
- data/spec/orange-core/mock/mock_app.rb +16 -0
- data/spec/orange-core/mock/mock_carton.rb +43 -0
- data/spec/orange-core/mock/mock_core.rb +2 -0
- data/spec/orange-core/mock/mock_middleware.rb +25 -0
- data/spec/orange-core/mock/mock_mixins.rb +19 -0
- data/spec/orange-core/mock/mock_model_resource.rb +47 -0
- data/spec/orange-core/mock/mock_pulp.rb +24 -0
- data/spec/orange-core/mock/mock_resource.rb +26 -0
- data/spec/orange-core/mock/mock_router.rb +10 -0
- data/spec/orange-core/orange_spec.rb +19 -0
- data/spec/orange-core/packet_spec.rb +203 -0
- data/spec/orange-core/resource_spec.rb +96 -0
- data/spec/orange-core/resources/mapper_spec.rb +5 -0
- data/spec/orange-core/resources/model_resource_spec.rb +246 -0
- data/spec/orange-core/resources/parser_spec.rb +5 -0
- data/spec/orange-core/resources/routable_resource_spec.rb +5 -0
- data/spec/orange-core/spec_helper.rb +53 -0
- data/spec/orange-core/stack_spec.rb +232 -0
- data/spec/stats.rb +182 -0
- metadata +227 -0
@@ -0,0 +1,172 @@
|
|
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
|
@@ -0,0 +1,96 @@
|
|
1
|
+
require 'orange-core/core'
|
2
|
+
|
3
|
+
module Orange
|
4
|
+
# Orange Resource for being subclassed
|
5
|
+
class Resource
|
6
|
+
extend ClassInheritableAttributes
|
7
|
+
# Defines a model class as an inheritable class attribute and also an instance
|
8
|
+
# attribute
|
9
|
+
cattr_accessor :called
|
10
|
+
|
11
|
+
def initialize(*args, &block)
|
12
|
+
@options = DefaultHash.new.merge!(Options.new(*args, &block).hash)
|
13
|
+
end
|
14
|
+
|
15
|
+
def set_orange(orange, name)
|
16
|
+
@orange = orange
|
17
|
+
@my_orange_name = name
|
18
|
+
init
|
19
|
+
orange.register(:stack_loaded) { |s| stack_init } if self.respond_to? :stack_init
|
20
|
+
self
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.set_orange(*args)
|
24
|
+
raise 'instantiate the resource before calling set orange'
|
25
|
+
end
|
26
|
+
|
27
|
+
def init
|
28
|
+
afterLoad
|
29
|
+
end
|
30
|
+
|
31
|
+
def afterLoad
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.call_me(name)
|
35
|
+
self.called = name
|
36
|
+
end
|
37
|
+
|
38
|
+
def orange
|
39
|
+
@orange
|
40
|
+
end
|
41
|
+
|
42
|
+
def routable
|
43
|
+
false
|
44
|
+
end
|
45
|
+
|
46
|
+
def view(packet = false, *args)
|
47
|
+
''
|
48
|
+
end
|
49
|
+
|
50
|
+
def orange_name
|
51
|
+
@my_orange_name || self.class.called || false
|
52
|
+
end
|
53
|
+
|
54
|
+
def options
|
55
|
+
@options
|
56
|
+
end
|
57
|
+
|
58
|
+
# Renders a view, with all options set for haml to access.
|
59
|
+
# Calls #view_opts to generate the haml options.
|
60
|
+
# @param [Orange::Packet] packet the packet we are returning a view for
|
61
|
+
# @param [Symbol] mode the mode we are trying to view (used to find template name)
|
62
|
+
# @param [optional, Array] args the args array
|
63
|
+
# @return [String] haml parsed string to be placed in packet[:content] by #route
|
64
|
+
def do_view(packet, mode, *args)
|
65
|
+
haml_opts = view_opts(packet, mode, *args)
|
66
|
+
orange[:parser].haml("#{mode.to_s}.haml", packet, haml_opts)
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
# Returns the options for including in template rendering. All keys passed in the args array
|
71
|
+
# will automatically be local variables in the haml template.
|
72
|
+
# In addition, the props, resource, and model_name variables will be available.
|
73
|
+
# @param [Orange::Packet] packet the packet we are returning a view for
|
74
|
+
# @param [Symbol] mode the mode we are trying to view (used to find template name)
|
75
|
+
# @param [boolean] is_list whether we want a list or not (view_opts will automatically look up
|
76
|
+
# a single object or a list of objects, so we need to know which)
|
77
|
+
# @param [optional, Array] args the args array
|
78
|
+
# @return [Hash] hash of options to be used
|
79
|
+
def view_opts(packet, mode, *args)
|
80
|
+
opts = args.extract_options!.with_defaults({:path => ''})
|
81
|
+
all_opts = {:resource => self, :model_name => @my_orange_name}.merge!(opts)
|
82
|
+
all_opts.with_defaults! find_extras(packet, mode)
|
83
|
+
all_opts
|
84
|
+
end
|
85
|
+
|
86
|
+
# Returns a hash of extra options to be set and made available by the haml parser.
|
87
|
+
# Overriding this method is useful for passing extra bits of info to rendering
|
88
|
+
# for certain view modes without rewriting all of the other scaffolding
|
89
|
+
# @param [Orange::Packet] packet the packet we are returning a view for
|
90
|
+
# @param [Symbol] mode the mode we are trying to view (used to find template name)
|
91
|
+
# @return [Hash] a hash of extras to be included in the rendering
|
92
|
+
def find_extras(packet, mode)
|
93
|
+
{}
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'orange-core/core'
|
2
|
+
|
3
|
+
module Orange
|
4
|
+
class Mapper < Resource
|
5
|
+
# Takes a packet extracts request information, then calls packet.route
|
6
|
+
def afterLoad
|
7
|
+
orange.add_pulp Pulp::Packet_Mapper
|
8
|
+
end
|
9
|
+
|
10
|
+
def route_to(packet, resource, *args)
|
11
|
+
opts = args.extract_options!
|
12
|
+
packet = DefaultHash.new unless packet
|
13
|
+
context = opts[:context]
|
14
|
+
context = packet['route.context', nil] unless (context || (packet['route.context'] == :live))
|
15
|
+
site = packet['route.faked_site'] ? packet['route.site_url', nil] : nil
|
16
|
+
args.unshift(resource)
|
17
|
+
args.unshift(context)
|
18
|
+
args.unshift(site)
|
19
|
+
'/'+args.compact.join('/')
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
module Pulp::Packet_Mapper
|
24
|
+
def route_to(resource, *args)
|
25
|
+
orange[:mapper].route_to(self, resource, *args)
|
26
|
+
end
|
27
|
+
|
28
|
+
def reroute(url, type = :real, *args)
|
29
|
+
packet['reroute.to'] = url
|
30
|
+
packet['reroute.type'] = type
|
31
|
+
packet['reroute.args'] = *args if args
|
32
|
+
raise Reroute.new(self), 'Unhandled reroute'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,228 @@
|
|
1
|
+
require 'orange-core/resources/routable_resource'
|
2
|
+
|
3
|
+
module Orange
|
4
|
+
class ModelResource < RoutableResource
|
5
|
+
# Defines a model class as an inheritable class attribute and also an instance
|
6
|
+
# attribute
|
7
|
+
cattr_accessor :model_class
|
8
|
+
attr_accessor :model_class
|
9
|
+
|
10
|
+
# Tells the Model resource which Carton class to scaffold
|
11
|
+
# @param [Orange::Carton] my_model_class class name of the carton class to scaffold
|
12
|
+
def self.use(my_model_class)
|
13
|
+
self.model_class = my_model_class
|
14
|
+
end
|
15
|
+
|
16
|
+
# Overrides the instantiation of new Resource object to set instance model
|
17
|
+
# class to the class-level model class defined by #use
|
18
|
+
def self.new(*args, &block)
|
19
|
+
me = super(*args, &block)
|
20
|
+
me.model_class = self.model_class
|
21
|
+
me
|
22
|
+
end
|
23
|
+
|
24
|
+
# Views a packet by calling method defined as opts[:mode].
|
25
|
+
# Defaults mode to show or list, if it can't find opts[:mode].
|
26
|
+
# Decision between show or list is determined by whether an id has been chosen.
|
27
|
+
# An id is set in opts[:id], or extracted from the packet['route.resource_id'].
|
28
|
+
# Calling view is equivalent to calling a viewable method directly, view just
|
29
|
+
# sets up safe defaults so method missing errors are less likely.
|
30
|
+
# @param [Orange::Packet] packet the packet calling view on this resource
|
31
|
+
def view(packet, opts = {})
|
32
|
+
resource_id = opts[:id] || packet['route.resource_id', false]
|
33
|
+
mode = opts[:mode] || packet['route.resource_action'] ||
|
34
|
+
(resource_id ? :show : :index)
|
35
|
+
self.__send__(mode, packet, opts)
|
36
|
+
end
|
37
|
+
|
38
|
+
# Renders a view, with all options set for haml to access.
|
39
|
+
# Calls #view_opts to generate the haml options.
|
40
|
+
# @param [Orange::Packet] packet the packet we are returning a view for
|
41
|
+
# @param [Symbol] mode the mode we are trying to view (used to find template name)
|
42
|
+
# @param [optional, Array] args the args array
|
43
|
+
# @return [String] haml parsed string to be placed in packet[:content] by #route
|
44
|
+
def do_view(packet, mode, *args)
|
45
|
+
haml_opts = view_opts(packet, mode, false, *args)
|
46
|
+
orange[:parser].haml("#{mode.to_s}.haml", packet, haml_opts)
|
47
|
+
end
|
48
|
+
|
49
|
+
# Renders a view, with all options set for haml to access. Same as do_view, but
|
50
|
+
# calls #view_opts with is_list set to true to generate the haml options.
|
51
|
+
# @param [Orange::Packet] packet the packet we are returning a view for
|
52
|
+
# @param [Symbol] mode the mode we are trying to view (used to find template name)
|
53
|
+
# @param [optional, Array] args the args array
|
54
|
+
# @return [String] haml parsed string to be placed in packet[:content] by #route
|
55
|
+
def do_list_view(packet, mode, *args)
|
56
|
+
haml_opts = view_opts(packet, mode, true, *args)
|
57
|
+
orange[:parser].haml("#{mode.to_s}.haml", packet, haml_opts)
|
58
|
+
end
|
59
|
+
|
60
|
+
# Returns the options for including in template rendering. All keys passed in the args array
|
61
|
+
# will automatically be local variables in the haml template.
|
62
|
+
# In addition, the props, resource, and model_name variables will be available.
|
63
|
+
# @param [Orange::Packet] packet the packet we are returning a view for
|
64
|
+
# @param [Symbol] mode the mode we are trying to view (used to find template name)
|
65
|
+
# @param [boolean] is_list whether we want a list or not (view_opts will automatically look up
|
66
|
+
# a single object or a list of objects, so we need to know which)
|
67
|
+
# @param [optional, Array] args the args array
|
68
|
+
# @return [Hash] hash of options to be used
|
69
|
+
def view_opts(packet, mode, is_list, *args)
|
70
|
+
opts = args.extract_options!.with_defaults({:path => ''})
|
71
|
+
props = model_class.form_props(packet['route.context'])
|
72
|
+
resource_id = opts[:id] || packet['route.resource_id'] || false
|
73
|
+
all_opts = {:props => props, :resource => self, :model_name => @my_orange_name}.merge!(opts)
|
74
|
+
all_opts.with_defaults! :model => find_one(packet, mode, resource_id) unless is_list
|
75
|
+
all_opts.with_defaults! :list => find_list(packet, mode) if is_list
|
76
|
+
all_opts.with_defaults! find_extras(packet, mode)
|
77
|
+
all_opts
|
78
|
+
end
|
79
|
+
|
80
|
+
# Returns a single object found by the model class, given an id.
|
81
|
+
# If id isn't given, we return false.
|
82
|
+
# @param [Orange::Packet] packet the packet we are returning a view for
|
83
|
+
# @param [Symbol] mode the mode we are trying to view (used to find template name)
|
84
|
+
# @param [Numeric] id the id to lookup on the model class
|
85
|
+
# @return [Object] returns an object of type set by #use, if one found with same id
|
86
|
+
def find_one(packet, mode, id = false)
|
87
|
+
return false unless id
|
88
|
+
model_class.get(id)
|
89
|
+
end
|
90
|
+
|
91
|
+
# Returns a list of all objects found by the model class
|
92
|
+
# If none, returns an empty array
|
93
|
+
# @param [Orange::Packet] packet the packet we are returning a view for
|
94
|
+
# @param [Symbol] mode the mode we are trying to view (used to find template name)
|
95
|
+
# @param [Numeric] id the id to lookup on the model class
|
96
|
+
# @return [Enumerable] returns a collection of objects of type set by #use
|
97
|
+
def find_list(packet, mode)
|
98
|
+
model_class.all || []
|
99
|
+
end
|
100
|
+
|
101
|
+
# Creates a new model object and saves it (if a post), then reroutes to the main page
|
102
|
+
# @param [Orange::Packet] packet the packet being routed
|
103
|
+
def new(packet, opts = {})
|
104
|
+
no_reroute = opts.delete(:no_reroute)
|
105
|
+
if packet.request.post? || !opts.blank?
|
106
|
+
params = opts.with_defaults(opts.delete(:params) || packet.request.params[@my_orange_name.to_s] || {})
|
107
|
+
before = beforeNew(packet, params)
|
108
|
+
obj = onNew(packet, params) if before
|
109
|
+
afterNew(packet, obj, params) if before
|
110
|
+
obj.save if obj && before
|
111
|
+
end
|
112
|
+
packet.reroute(@my_orange_name, :orange) unless (packet.request.xhr? || no_reroute)
|
113
|
+
obj || false
|
114
|
+
end
|
115
|
+
|
116
|
+
# A callback for the actual new item event
|
117
|
+
def onNew(packet, opts = {})
|
118
|
+
model_class.new(opts)
|
119
|
+
end
|
120
|
+
|
121
|
+
# A callback for before a new item is created
|
122
|
+
# @param [Orange::Packet] packet the packet being routed
|
123
|
+
def beforeNew(packet, opts = {})
|
124
|
+
true
|
125
|
+
end
|
126
|
+
|
127
|
+
# A callback for after a new item is created
|
128
|
+
# @param [Orange::Packet] packet the packet being routed
|
129
|
+
# @param [Object] obj the model class just created
|
130
|
+
def afterNew(packet, obj, opts = {})
|
131
|
+
end
|
132
|
+
|
133
|
+
# Deletes an object specified by packet['route.resource_id'], then reroutes to main.
|
134
|
+
# The request must come in as a delete. Rack::MethodOverride can be used to do this.
|
135
|
+
# @param [Orange::Packet] packet the packet being routed
|
136
|
+
def delete(packet, opts = {})
|
137
|
+
no_reroute = opts.delete(:no_reroute)
|
138
|
+
if packet.request.delete? || !opts.blank?
|
139
|
+
id = opts.delete(:resource_id) || packet['route.resource_id']
|
140
|
+
m = model_class.get(packet['route.resource_id'])
|
141
|
+
before = beforeDelete(packet, m, opts)
|
142
|
+
onDelete(packet, m, opts) if m && before
|
143
|
+
afterDelete(packet, m, opts) if before
|
144
|
+
orange.fire(:model_resource_deleted, packet, {:resource_id => id, :resource => @my_orange_name})
|
145
|
+
end
|
146
|
+
packet.reroute(@my_orange_name, :orange) unless (packet.request.xhr? || no_reroute)
|
147
|
+
end
|
148
|
+
|
149
|
+
def beforeDelete(packet, obj, opts = {})
|
150
|
+
true
|
151
|
+
end
|
152
|
+
|
153
|
+
# Delete object
|
154
|
+
def onDelete(packet, obj, opts = {})
|
155
|
+
obj.destroy
|
156
|
+
end
|
157
|
+
|
158
|
+
def afterDelete(packet, obj, opts = {})
|
159
|
+
end
|
160
|
+
|
161
|
+
# Saves updates to an object specified by packet['route.resource_id'], then reroutes to main
|
162
|
+
# @param [Orange::Packet] packet the packet being routed
|
163
|
+
def save(packet, opts = {})
|
164
|
+
no_reroute = opts.delete(:no_reroute)
|
165
|
+
if packet.request.post? || !opts.blank?
|
166
|
+
my_id = opts.delete(:resource_id) || packet['route.resource_id']
|
167
|
+
m = opts.delete(:model) || model_class.get(my_id)
|
168
|
+
params = opts.with_defaults(opts.delete(:params) || packet.request.params[@my_orange_name.to_s] || {})
|
169
|
+
if m
|
170
|
+
before = beforeSave(packet, m, params)
|
171
|
+
onSave(packet, m, params) if before
|
172
|
+
afterSave(packet, m, params) if before
|
173
|
+
end
|
174
|
+
end
|
175
|
+
packet.reroute(@my_orange_name, :orange) unless (packet.request.xhr? || no_reroute)
|
176
|
+
m || false
|
177
|
+
end
|
178
|
+
|
179
|
+
def beforeSave(packet, obj, opts = {})
|
180
|
+
true
|
181
|
+
end
|
182
|
+
|
183
|
+
def onSave(packet, obj, opts = {})
|
184
|
+
obj.update(opts)
|
185
|
+
end
|
186
|
+
|
187
|
+
def afterSave(packet, obj, opts = {})
|
188
|
+
end
|
189
|
+
|
190
|
+
# Calls #do_view with :show mode
|
191
|
+
# @param [Orange::Packet] packet the packet being routed
|
192
|
+
def show(packet, *opts)
|
193
|
+
do_view(packet, :show, *opts)
|
194
|
+
end
|
195
|
+
|
196
|
+
# Calls #do_view with :edit mode
|
197
|
+
# @param [Orange::Packet] packet the packet being routed
|
198
|
+
def edit(packet, *opts)
|
199
|
+
do_view(packet, :edit, *opts)
|
200
|
+
end
|
201
|
+
|
202
|
+
# Calls #do_view with :create mode
|
203
|
+
# @param [Orange::Packet] packet the packet being routed
|
204
|
+
def create(packet, *opts)
|
205
|
+
do_view(packet, :create, *opts)
|
206
|
+
end
|
207
|
+
|
208
|
+
# Calls #do_view with :table_row mode
|
209
|
+
# @param [Orange::Packet] packet the packet being routed
|
210
|
+
def table_row(packet, *opts)
|
211
|
+
do_view(packet, :table_row, *opts)
|
212
|
+
end
|
213
|
+
|
214
|
+
# Calls #do_list_view with :list mode
|
215
|
+
# @param [Orange::Packet] packet the packet being routed
|
216
|
+
def list(packet, *opts)
|
217
|
+
do_list_view(packet, :list, *opts)
|
218
|
+
end
|
219
|
+
|
220
|
+
# Calls #do_list_view with :list mode.
|
221
|
+
# @param [Orange::Packet] packet the packet being routed
|
222
|
+
def index(packet, *opts)
|
223
|
+
do_list_view(packet, :list, *opts)
|
224
|
+
end
|
225
|
+
|
226
|
+
end
|
227
|
+
|
228
|
+
end
|