orange 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/orange/application.rb +1 -1
- data/lib/orange/carton.rb +55 -27
- data/lib/orange/cartons/site_carton.rb +4 -1
- data/lib/orange/core.rb +10 -2
- data/lib/orange/magick.rb +11 -0
- data/lib/orange/middleware/access_control.rb +16 -7
- data/lib/orange/middleware/base.rb +40 -1
- data/lib/orange/middleware/flex_router.rb +59 -0
- data/lib/orange/middleware/route_context.rb +2 -2
- data/lib/orange/middleware/route_site.rb +1 -1
- data/lib/orange/middleware/show_exceptions.rb +3 -1
- data/lib/orange/middleware/site_load.rb +14 -1
- data/lib/orange/middleware/static.rb +0 -2
- data/lib/orange/middleware/template.rb +3 -1
- data/lib/orange/resources/admin_resource.rb +25 -0
- data/lib/orange/resources/mapper.rb +3 -0
- data/lib/orange/resources/model_resource.rb +15 -9
- data/lib/orange/resources/page_parts.rb +0 -7
- data/lib/orange/resources/parser.rb +5 -4
- data/lib/orange/resources/singleton_model_resource.rb +7 -0
- data/lib/orange/resources/sitemap_resource.rb +96 -0
- data/lib/orange/stack.rb +5 -5
- data/spec/{application_spec.rb → orange/application_spec.rb} +0 -0
- data/spec/orange/carton_spec.rb +136 -0
- data/spec/{core_spec.rb → orange/core_spec.rb} +10 -0
- data/spec/{magick_spec.rb → orange/magick_spec.rb} +11 -0
- data/spec/orange/middleware/access_control_spec.rb +3 -0
- data/spec/orange/middleware/base_spec.rb +37 -0
- data/spec/orange/middleware/database_spec.rb +3 -0
- data/spec/orange/middleware/globals_spec.rb +3 -0
- data/spec/orange/middleware/recapture_spec.rb +3 -0
- data/spec/orange/middleware/rerouter_spec.rb +3 -0
- data/spec/orange/middleware/restful_router_spec.rb +3 -0
- data/spec/orange/middleware/route_context_spec.rb +3 -0
- data/spec/orange/middleware/route_site_spec.rb +3 -0
- data/spec/orange/middleware/show_exceptions_spec.rb +3 -0
- data/spec/orange/middleware/site_load_spec.rb +26 -0
- data/spec/orange/middleware/static_file_spec.rb +3 -0
- data/spec/orange/middleware/static_spec.rb +3 -0
- data/spec/orange/middleware/template_spec.rb +3 -0
- data/spec/{mock → orange/mock}/mock_app.rb +0 -0
- data/spec/orange/mock/mock_carton.rb +43 -0
- data/spec/{mock → orange/mock}/mock_core.rb +0 -0
- data/spec/{mock → orange/mock}/mock_middleware.rb +8 -0
- data/spec/{mock → orange/mock}/mock_mixins.rb +0 -0
- data/spec/{mock → orange/mock}/mock_model_resource.rb +4 -0
- data/spec/{mock → orange/mock}/mock_pulp.rb +0 -0
- data/spec/{mock → orange/mock}/mock_resource.rb +0 -0
- data/spec/{mock → orange/mock}/mock_router.rb +0 -0
- data/spec/{orange_spec.rb → orange/orange_spec.rb} +0 -0
- data/spec/{packet_spec.rb → orange/packet_spec.rb} +0 -0
- data/spec/{resource_spec.rb → orange/resource_spec.rb} +0 -0
- data/spec/orange/resources/admin_resource_spec.rb +16 -0
- data/spec/{resources → orange/resources}/mapper_spec.rb +0 -0
- data/spec/{resources → orange/resources}/model_resource_spec.rb +104 -0
- data/spec/{resources → orange/resources}/parser_spec.rb +0 -0
- data/spec/{resources → orange/resources}/routable_resource_spec.rb +0 -0
- data/spec/orange/resources/singleton_model_resource_spec.rb +4 -0
- data/spec/{resources/flex_router_spec.rb → orange/resources/sitemap_resource_spec.rb} +1 -1
- data/spec/orange/spec_helper.rb +51 -0
- data/spec/{stack_spec.rb → orange/stack_spec.rb} +0 -0
- metadata +45 -40
- data/lib/orange/resources/flex_router.rb +0 -13
- data/spec/carton_spec.rb +0 -5
- data/spec/middleware/access_control_spec.rb +0 -0
- data/spec/middleware/base_spec.rb +0 -0
- data/spec/middleware/database_spec.rb +0 -0
- data/spec/middleware/globals_spec.rb +0 -0
- data/spec/middleware/recapture_spec.rb +0 -0
- data/spec/middleware/rerouter_spec.rb +0 -0
- data/spec/middleware/restful_router_spec.rb +0 -0
- data/spec/middleware/route_context_spec.rb +0 -0
- data/spec/middleware/route_site_spec.rb +0 -0
- data/spec/middleware/show_exceptions_spec.rb +0 -0
- data/spec/middleware/site_load_spec.rb +0 -0
- data/spec/middleware/static_file_spec.rb +0 -0
- data/spec/middleware/static_spec.rb +0 -0
- data/spec/middleware/template_spec.rb +0 -0
- data/spec/mock/mock_carton.rb +0 -15
- data/spec/spec_helper.rb +0 -20
@@ -43,7 +43,6 @@ module Orange::Middleware
|
|
43
43
|
@urls = options[:urls] || ["/favicon.ico", "/assets/public"]
|
44
44
|
@root = options[:root] || File.join(orange.app_dir, 'assets')
|
45
45
|
@lib_urls = core.statics
|
46
|
-
|
47
46
|
@file_server = Orange::Middleware::StaticFile.new(@root)
|
48
47
|
end
|
49
48
|
|
@@ -51,7 +50,6 @@ module Orange::Middleware
|
|
51
50
|
path = packet.env["PATH_INFO"]
|
52
51
|
can_serve_lib = @lib_urls.select{ |url, server| path.index(url) == 0 }.first
|
53
52
|
can_serve = @urls.any?{|url| path.index(url) == 0 }
|
54
|
-
|
55
53
|
if can_serve_lib
|
56
54
|
lib_url = can_serve_lib.first
|
57
55
|
packet['file.root'] = can_serve_lib.last
|
@@ -24,8 +24,10 @@ module Orange::Middleware
|
|
24
24
|
status, headers, content = pass packet
|
25
25
|
if needs_wrapped?(packet)
|
26
26
|
content = wrap(packet, content)
|
27
|
+
packet[:content] = content.first
|
27
28
|
end
|
28
|
-
|
29
|
+
orange.fire(:wrapped, packet)
|
30
|
+
[status, headers, packet.content]
|
29
31
|
end
|
30
32
|
|
31
33
|
def needs_wrapped?(packet)
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Orange
|
2
|
+
# Admin resource is a resource to help in building administration
|
3
|
+
# panels.
|
4
|
+
class AdminResource < Resource
|
5
|
+
def afterLoad
|
6
|
+
@links = {}
|
7
|
+
end
|
8
|
+
|
9
|
+
def add_link(section, *args)
|
10
|
+
opts = args.extract_with_defaults(:position => 0)
|
11
|
+
@links[section] = [] unless @links.has_key?(section)
|
12
|
+
@links[section].insert(opts.delete(:position), opts)
|
13
|
+
@links[section].compact!
|
14
|
+
@links[section].uniq!
|
15
|
+
end
|
16
|
+
|
17
|
+
def links(packet)
|
18
|
+
@links.each do |k,section|
|
19
|
+
section.each {|link|
|
20
|
+
link[:href] = orange[:mapper].route_to(packet, link[:resource], link[:resource_args])
|
21
|
+
}
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -8,6 +8,7 @@ module Orange
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def route_to(packet, resource, *args)
|
11
|
+
packet = DefaultHash.new unless packet
|
11
12
|
context = packet['route.context', nil]
|
12
13
|
site = packet['route.faked_site'] ? packet['route.site_url', nil] : nil
|
13
14
|
args.unshift(resource)
|
@@ -44,6 +45,8 @@ module Orange
|
|
44
45
|
# Parsing for orange urls or something
|
45
46
|
when :orange
|
46
47
|
packet.route_to(packet['reroute.to'])
|
48
|
+
else
|
49
|
+
packet['reroute.to']
|
47
50
|
end
|
48
51
|
end
|
49
52
|
|
@@ -72,7 +72,7 @@ module Orange
|
|
72
72
|
opts = args.extract_options!.with_defaults({:path => ''})
|
73
73
|
props = model_class.form_props(packet['route.context'])
|
74
74
|
resource_id = opts[:id] || packet['route.resource_id'] || false
|
75
|
-
all_opts = {:props => props, :resource => self
|
75
|
+
all_opts = {:props => props, :resource => self, :model_name => @my_orange_name}.merge!(opts)
|
76
76
|
all_opts.with_defaults! :model => find_one(packet, mode, resource_id) unless is_list
|
77
77
|
all_opts.with_defaults! :list => find_list(packet, mode) if is_list
|
78
78
|
all_opts.with_defaults! find_extras(packet, mode)
|
@@ -119,12 +119,13 @@ module Orange
|
|
119
119
|
packet.reroute(@my_orange_name, :orange)
|
120
120
|
end
|
121
121
|
|
122
|
-
# Deletes an object specified by packet['route.resource_id'], then reroutes to main
|
122
|
+
# Deletes an object specified by packet['route.resource_id'], then reroutes to main.
|
123
|
+
# The request must come in as a delete. Rack::MethodOverride can be used to do this.
|
123
124
|
# @param [Orange::Packet] packet the packet being routed
|
124
125
|
def delete(packet, *opts)
|
125
126
|
if packet.request.delete?
|
126
127
|
m = model_class.get(packet['route.resource_id'])
|
127
|
-
m.destroy
|
128
|
+
m.destroy if m
|
128
129
|
end
|
129
130
|
packet.reroute(@my_orange_name, :orange)
|
130
131
|
end
|
@@ -136,7 +137,6 @@ module Orange
|
|
136
137
|
m = model_class.get(packet['route.resource_id'])
|
137
138
|
if m
|
138
139
|
m.update(packet.request.params[@my_orange_name.to_s])
|
139
|
-
else
|
140
140
|
end
|
141
141
|
end
|
142
142
|
packet.reroute(@my_orange_name, :orange)
|
@@ -196,13 +196,14 @@ module Orange
|
|
196
196
|
# @param [String, false] confirm text of the javascript confirm (false for none [default])
|
197
197
|
# @param [optional, Array] args array of optional arguments, only opts[:method] defined
|
198
198
|
# @option opts [String] method method name (Should be 'DELETE', 'PUT' or 'POST')
|
199
|
-
def form_link(text, link, confirm = false,
|
200
|
-
opts =
|
199
|
+
def form_link(text, link, confirm = false, opts = {})
|
200
|
+
text = "<img src='#{opts[:img]}' alt='#{text}' />" if opts[:img]
|
201
|
+
css = opts[:class]? opts[:class] : 'form_button_link'
|
201
202
|
meth = (opts[:method]? "<input type='hidden' name='_method' value='#{opts[:method]}' />" : '')
|
202
203
|
if confirm
|
203
|
-
"<form action='#{link}' method='post' class='mini' onsubmit='return confirm(\"#{confirm}\")'><button class='link_button'><a href='#'>#{text}</a></button>#{meth}</form>"
|
204
|
+
"<form action='#{link}' method='post' class='mini' onsubmit='return confirm(\"#{confirm}\")'><button class='link_button'><a href='#' class='#{css}'>#{text}</a></button>#{meth}</form>"
|
204
205
|
else
|
205
|
-
"<form action='#{link}' method='post' class='mini'><button class='link_button'><a href='#'>#{text}</a></button>#{meth}</form>"
|
206
|
+
"<form action='#{link}' method='post' class='mini'><button class='link_button'><a href='#' class='#{css}'>#{text}</a></button>#{meth}</form>"
|
206
207
|
end
|
207
208
|
end
|
208
209
|
|
@@ -218,6 +219,7 @@ module Orange
|
|
218
219
|
label = args[:label] || false
|
219
220
|
show = args[:show] || false
|
220
221
|
name = prop[:name]
|
222
|
+
human_readable_name = name.to_s.split('_').each{|w| w.capitalize!}.join(' ')
|
221
223
|
unless show
|
222
224
|
case prop[:type]
|
223
225
|
when :title
|
@@ -226,10 +228,14 @@ module Orange
|
|
226
228
|
ret = "<input type='text' value='#{val}' name='#{model_name}[#{name}]' />"
|
227
229
|
when :fulltext
|
228
230
|
ret = "<textarea name='#{model_name}[#{name}]'>#{val}</textarea>"
|
231
|
+
when :boolean
|
232
|
+
human_readable_name = human_readable_name + '?'
|
233
|
+
ret = "<input type='hidden' name='#{model_name}[#{name}]' value='0' /><input type='checkbox' name='#{model_name}[#{name}]' value='1' #{'checked="checked"' if (val && val != '')}/>"
|
229
234
|
else
|
230
235
|
ret = "<input type='text' value='#{val}' name='#{model_name}[#{name}]' />"
|
231
236
|
end
|
232
|
-
|
237
|
+
display_name = prop[:display_name] || human_readable_name
|
238
|
+
ret = "<label for=''>#{display_name}</label><br />" + ret if label
|
233
239
|
else
|
234
240
|
case prop[:type]
|
235
241
|
when :title
|
@@ -18,13 +18,6 @@ module Orange
|
|
18
18
|
# Feels like part should be plural, no?
|
19
19
|
def parts; part; end
|
20
20
|
|
21
|
-
def admin_sidebar_link(section, *args)
|
22
|
-
args = args.extract_options!.with_defaults(:position => 0)
|
23
|
-
sidebar = part[:admin_sidebar, {}]
|
24
|
-
sidebar[section] = [] unless sidebar.has_key?(section)
|
25
|
-
sidebar[section].insert(args[:position], {:href => args[:link], :text => args[:text]})
|
26
|
-
part[:admin_sidebar] = sidebar
|
27
|
-
end
|
28
21
|
|
29
22
|
def add_css(file, opts = {})
|
30
23
|
ie = opts[:ie] || false
|
@@ -18,20 +18,21 @@ module Orange
|
|
18
18
|
def haml(file, packet, *vars, &block)
|
19
19
|
opts = vars.extract_options!
|
20
20
|
temp = opts.delete(:template)
|
21
|
-
|
21
|
+
opts[:resource_name] = opts[:resource].orange_name.to_s if
|
22
|
+
opts[:resource] && opts[:resource].respond_to?(:orange_name)
|
23
|
+
resource = (opts[:resource_name] || '').downcase
|
22
24
|
opts.merge :orange => orange
|
23
25
|
|
24
26
|
templates_dir = File.join(orange.core_dir, 'templates')
|
25
27
|
views_dir = File.join(orange.core_dir, 'views')
|
26
|
-
default_dir = File.join(views_dir, 'default_resource')
|
27
|
-
|
28
28
|
string = false
|
29
29
|
string ||= read_if_exists('templates', file) if temp
|
30
30
|
string ||= read_if_exists(templates_dir, file) if temp
|
31
31
|
string ||= read_if_exists('views', resource, file) if resource
|
32
32
|
string ||= read_if_exists('views', file)
|
33
|
-
string ||= read_if_exists(views_dir, file)
|
33
|
+
string ||= read_if_exists(views_dir, resource, file) if resource
|
34
34
|
string ||= read_if_exists(views_dir, 'default_resource', file)
|
35
|
+
string ||= read_if_exists(views_dir, file)
|
35
36
|
raise LoadError, "Couldn't find haml file '#{file}" unless string
|
36
37
|
|
37
38
|
haml_engine = Haml::Engine.new(string)
|
@@ -0,0 +1,96 @@
|
|
1
|
+
require 'orange/core'
|
2
|
+
require 'orange/resources/model_resource'
|
3
|
+
require 'orange/cartons/site_carton'
|
4
|
+
require 'dm-is-awesome_set'
|
5
|
+
module Orange
|
6
|
+
class Route < SiteCarton
|
7
|
+
id
|
8
|
+
admin do
|
9
|
+
text :slug
|
10
|
+
text :link_text
|
11
|
+
boolean :show_in_nav, :default => false, :display_name => 'Show?'
|
12
|
+
end
|
13
|
+
orange do
|
14
|
+
string :resource
|
15
|
+
string :resource_id
|
16
|
+
end
|
17
|
+
include DataMapper::Transaction::Resource # Make sure Transactions are included
|
18
|
+
is :awesome_set, :scope => [:orange_site_id]
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
class SitemapResource < ModelResource
|
23
|
+
use Orange::Route
|
24
|
+
def afterLoad
|
25
|
+
orange[:admin, true].add_link('Content', :resource => @my_orange_name, :text => 'Sitemap')
|
26
|
+
end
|
27
|
+
|
28
|
+
# Creates a new model object and saves it (if a post), then reroutes to the main page
|
29
|
+
# @param [Orange::Packet] packet the packet being routed
|
30
|
+
def new(packet, *opts)
|
31
|
+
if packet.request.post?
|
32
|
+
params = packet.request.params[@my_orange_name.to_s]
|
33
|
+
params.merge!(:orange_site_id => packet['site'].id)
|
34
|
+
a = model_class.new(params)
|
35
|
+
a.move(:into => home(packet))
|
36
|
+
end
|
37
|
+
packet.reroute(@my_orange_name, :orange)
|
38
|
+
end
|
39
|
+
|
40
|
+
def higher(packet, opts = {})
|
41
|
+
if packet.request.post?
|
42
|
+
me = find_one(packet, :higher, packet['route.resource_id'])
|
43
|
+
me.move(:higher) if me
|
44
|
+
end
|
45
|
+
packet.reroute(@my_orange_name, :orange)
|
46
|
+
end
|
47
|
+
|
48
|
+
def lower(packet, opts = {})
|
49
|
+
if packet.request.post?
|
50
|
+
me = find_one(packet, :lower, packet['route.resource_id'])
|
51
|
+
me.move(:lower) if me
|
52
|
+
end
|
53
|
+
packet.reroute(@my_orange_name, :orange)
|
54
|
+
end
|
55
|
+
|
56
|
+
def outdent(packet, opts = {})
|
57
|
+
if packet.request.post?
|
58
|
+
me = find_one(packet, :outdent, packet['route.resource_id'])
|
59
|
+
me.move(:outdent) if me
|
60
|
+
end
|
61
|
+
packet.reroute(@my_orange_name, :orange)
|
62
|
+
end
|
63
|
+
|
64
|
+
def indent(packet, opts = {})
|
65
|
+
if packet.request.post?
|
66
|
+
me = find_one(packet, :indent, packet['route.resource_id'])
|
67
|
+
me.move(:indent) if me
|
68
|
+
end
|
69
|
+
packet.reroute(@my_orange_name, :orange)
|
70
|
+
end
|
71
|
+
|
72
|
+
def top_nav
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
def home(packet)
|
77
|
+
site_id = packet['site'].id
|
78
|
+
home_for_site(site_id) || create_home_for_site(site_id)
|
79
|
+
end
|
80
|
+
|
81
|
+
def home_for_site(site_id)
|
82
|
+
model_class.first(:slug => '_index_', :orange_site_id => site_id, :order => :lft.asc)
|
83
|
+
end
|
84
|
+
|
85
|
+
def create_home_for_site(site_id)
|
86
|
+
home = model_class.new({:orange_site_id => site_id, :slug => '_index_'})
|
87
|
+
home.move(:root)
|
88
|
+
home.save
|
89
|
+
home
|
90
|
+
end
|
91
|
+
|
92
|
+
def find_list(packet, mode)
|
93
|
+
Orange::Route.all(:order => :lft) || []
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
data/lib/orange/stack.rb
CHANGED
@@ -24,7 +24,7 @@ module Orange
|
|
24
24
|
# other stacks that can be used.
|
25
25
|
#
|
26
26
|
# @param [Orange::Application] app_class the class of the main application
|
27
|
-
# @param [
|
27
|
+
# @param [Symbol] prebuilt the optional prebuilt stack, if one isn't passed as block
|
28
28
|
def initialize(app_class = nil, prebuilt = :none, &block)
|
29
29
|
@build = Rack::Builder.new
|
30
30
|
@core = Orange::Core.new
|
@@ -114,13 +114,13 @@ module Orange
|
|
114
114
|
#
|
115
115
|
def prerouting(*args)
|
116
116
|
opts = args.extract_options!
|
117
|
-
stack Orange::Middleware::Rerouter, opts
|
118
|
-
stack Orange::Middleware::Static, opts
|
117
|
+
stack Orange::Middleware::Rerouter, opts.dup
|
118
|
+
stack Orange::Middleware::Static, opts.dup
|
119
119
|
use Rack::AbstractFormat unless opts[:no_abstract_format]
|
120
120
|
# Must be used before non-destructive route altering done by Orange,
|
121
121
|
# since all orange stuff is non-destructive
|
122
|
-
stack Orange::Middleware::RouteSite, opts
|
123
|
-
stack Orange::Middleware::RouteContext, opts
|
122
|
+
stack Orange::Middleware::RouteSite, opts.dup
|
123
|
+
stack Orange::Middleware::RouteContext, opts.dup
|
124
124
|
end
|
125
125
|
|
126
126
|
# A shortcut for enabling restful routing via Orange::Middleware::RestfulRouter
|
File without changes
|
@@ -0,0 +1,136 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe Orange::Carton do
|
4
|
+
it "should call property with :id, Serial on #self.id" do
|
5
|
+
MockCartonBlank.should_receive(:property).with(:id, DataMapper::Types::Serial)
|
6
|
+
MockCartonBlank.id
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should call self.init after calling id" do
|
10
|
+
MockCartonBlankTwo.should_receive(:init)
|
11
|
+
MockCartonBlankTwo.id
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should give form properties" do
|
15
|
+
MockCarton.form_props(:live).length.should >= 1
|
16
|
+
MockCarton.form_props(:admin).length.should >= 2
|
17
|
+
MockCarton.form_props(:orange).length.should >= 3
|
18
|
+
MockCarton.form_props(:banana).should have(0).items
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should call instance eval on admin block" do
|
22
|
+
MockCartonBlank.should_receive(:instance_eval)
|
23
|
+
MockCartonBlank.admin {}
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should call instance eval on orange block" do
|
27
|
+
MockCartonBlank.should_receive(:instance_eval)
|
28
|
+
MockCartonBlank.orange {}
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should call instance eval on front block" do
|
32
|
+
MockCartonBlank.should_receive(:instance_eval)
|
33
|
+
MockCartonBlank.front {}
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should change props when calling front_property" do
|
37
|
+
lambda {
|
38
|
+
MockCarton.front_property :foo, String
|
39
|
+
}.should change(MockCarton, :form_props)
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should change admin props when calling admin_property (but not front props)" do
|
44
|
+
old_props = MockCarton.form_props(:admin)
|
45
|
+
lambda {
|
46
|
+
MockCarton.admin_property :foo, String
|
47
|
+
}.should_not change(MockCarton, :form_props)
|
48
|
+
old_props.should_not == MockCarton.form_props(:admin)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should change orange props when calling orange_property (but not front/admin props)" do
|
52
|
+
admin_props = MockCarton.form_props(:admin)
|
53
|
+
old_props = MockCarton.form_props(:orange)
|
54
|
+
lambda {
|
55
|
+
MockCarton.orange_property :foo, String
|
56
|
+
}.should_not change(MockCarton, :form_props)
|
57
|
+
admin_props.should == MockCarton.form_props(:admin)
|
58
|
+
old_props.should_not == MockCarton.form_props(:orange)
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should change the levels var when using front block" do
|
62
|
+
MockCartonBlank.should_receive(:test_levels){|me| me.levels.should include(:live)}
|
63
|
+
MockCartonBlank.front{ test_levels(self) }
|
64
|
+
MockCartonBlank.levels.should == false
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should change the levels var when using admin block" do
|
68
|
+
MockCartonBlank.should_receive(:test_levels){|me|
|
69
|
+
me.levels.should_not include(:front)
|
70
|
+
me.levels.should include(:admin)
|
71
|
+
}
|
72
|
+
MockCartonBlank.admin{ test_levels(self) }
|
73
|
+
MockCartonBlank.levels.should == false
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should change the levels var when using orange block" do
|
77
|
+
MockCartonBlank.should_receive(:test_levels){|me|
|
78
|
+
me.levels.should_not include(:front)
|
79
|
+
me.levels.should_not include(:admin)
|
80
|
+
me.levels.should include(:orange)
|
81
|
+
}
|
82
|
+
MockCartonBlank.orange{ test_levels(self) }
|
83
|
+
MockCartonBlank.levels.should == false
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should have a front property after calling #front" do
|
87
|
+
front = MockCarton.scaffold_properties.select{|i| i[:name] == :front}
|
88
|
+
front.should have_at_least(1).items
|
89
|
+
front.first[:levels].should include(:live)
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should have an admin property after calling #admin" do
|
93
|
+
front = MockCarton.scaffold_properties.select{|i| i[:name] == :admin}
|
94
|
+
front.should have_at_least(1).items
|
95
|
+
front.first[:levels].should_not include(:live)
|
96
|
+
front.first[:levels].should include(:admin)
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should have an orange property after calling #orange" do
|
100
|
+
front = MockCarton.scaffold_properties.select{|i| i[:name] == :orange}
|
101
|
+
front.should have_at_least(1).items
|
102
|
+
front.first[:levels].should_not include(:live)
|
103
|
+
front.first[:levels].should_not include(:admin)
|
104
|
+
front.first[:levels].should include(:orange)
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should call property on title" do
|
108
|
+
MockCarton.should_receive(:property).with(an_instance_of(Symbol), String, anything())
|
109
|
+
MockCarton.title(:wibble)
|
110
|
+
end
|
111
|
+
|
112
|
+
it "should call property on text" do
|
113
|
+
MockCarton.should_receive(:property).with(an_instance_of(Symbol), String, anything())
|
114
|
+
MockCarton.text(:wobble)
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should call property on string" do
|
118
|
+
MockCarton.should_receive(:property).with(an_instance_of(Symbol), String, anything())
|
119
|
+
MockCarton.string(:wubble)
|
120
|
+
end
|
121
|
+
|
122
|
+
it "should call property on fulltext" do
|
123
|
+
MockCarton.should_receive(:property).with(an_instance_of(Symbol), DataMapper::Types::Text, anything())
|
124
|
+
MockCarton.fulltext(:cudge)
|
125
|
+
end
|
126
|
+
|
127
|
+
it "should define a constant (resource class)" do
|
128
|
+
lambda{
|
129
|
+
MockCartonBlankTwo_Resource.nil?
|
130
|
+
}.should raise_error(NameError)
|
131
|
+
MockCartonBlankTwo.as_resource
|
132
|
+
lambda{
|
133
|
+
MockCartonBlankTwo_Resource.nil?
|
134
|
+
}.should_not raise_error
|
135
|
+
end
|
136
|
+
end
|