spree 0.4.1 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of spree might be problematic. Click here for more details.
- data/CHANGELOG +35 -0
- data/CONTRIBUTORS +2 -1
- data/README.markdown +8 -52
- data/app/controllers/account_controller.rb +1 -1
- data/app/controllers/addresses_controller.rb +5 -1
- data/app/controllers/admin/inventory_settings_controller.rb +13 -0
- data/app/controllers/admin/option_types_controller.rb +1 -1
- data/app/controllers/admin/orders_controller.rb +14 -8
- data/app/controllers/admin/products_controller.rb +2 -0
- data/app/controllers/admin/variants_controller.rb +7 -0
- data/app/controllers/content_controller.rb +5 -0
- data/app/controllers/creditcard_payments_controller.rb +2 -2
- data/app/controllers/orders_controller.rb +18 -2
- data/app/helpers/admin/inventory_settings_helper.rb +5 -0
- data/app/helpers/admin/product_properties_helper.rb +10 -2
- data/app/helpers/products_helper.rb +2 -2
- data/app/models/address.rb +2 -2
- data/app/models/app_configuration.rb +1 -0
- data/app/models/creditcard_payment.rb +6 -14
- data/app/models/order.rb +6 -12
- data/app/models/order_filter.rb +1 -0
- data/app/models/product.rb +9 -0
- data/app/models/product_property.rb +1 -0
- data/app/models/property.rb +0 -1
- data/app/models/zone.rb +17 -3
- data/app/views/account/login.html.erb +2 -14
- data/app/views/admin/configurations/index.html.erb +4 -0
- data/app/views/admin/inventory_settings/edit.html.erb +18 -0
- data/app/views/admin/inventory_settings/show.html.erb +11 -0
- data/app/views/admin/orders/_address.html.erb +1 -1
- data/app/views/admin/orders/index.html.erb +5 -1
- data/app/views/admin/orders/show.html.erb +3 -3
- data/app/views/admin/product_properties/_product_property.html.erb +6 -3
- data/app/views/admin/products/_form.html.erb +9 -1
- data/app/views/admin/prototypes/select.rjs +3 -1
- data/app/views/admin/variants/_form.html.erb +6 -0
- data/app/views/admin/variants/index.html.erb +7 -1
- data/app/views/creditcard_payments/_form_credit_card.html.erb +1 -1
- data/app/views/creditcard_payments/new.html.erb +7 -2
- data/app/views/products/show.html.erb +8 -2
- data/app/views/shared/_login.html.erb +17 -0
- data/app/views/shared/_products.html.erb +1 -1
- data/app/views/users/_form.html.erb +1 -1
- data/app/views/users/new.html.erb +19 -8
- data/config/boot.rb +1 -1
- data/config/database.yml +7 -3
- data/config/environment.rb +16 -2
- data/config/routes.rb +4 -0
- data/db/migrate/20081016002224_remove_defunct_order_fields.rb +10 -0
- data/db/migrate/20081016162924_drop_category_id_from_products.rb +9 -0
- data/db/sample/addresses.yml +14 -0
- data/db/sample/orders.yml +0 -1
- data/lang/ui/de-DE.yml +2 -1
- data/lang/ui/en-US.yml +50 -25
- data/lang/ui/es-ES.yml +2 -1
- data/lang/ui/it-IT.yml +2 -1
- data/lang/ui/pl-PL.yml +1 -0
- data/lang/ui/pt-BR.yml +5 -2
- data/lib/authenticated_system.rb +1 -1
- data/lib/generators/extension/extension_generator.rb +1 -0
- data/lib/generators/extension/templates/extension.rb +4 -5
- data/lib/generators/extension/templates/tasks.rake +12 -0
- data/lib/generators/extension_migration/extension_migration_generator.rb +32 -0
- data/lib/generators/extension_migration/templates/migration.rb +7 -0
- data/lib/spree.rb +2 -2
- data/lib/spree/extension.rb +0 -7
- data/lib/spree/extension_loader.rb +0 -8
- data/lib/tasks/extensions.rake +47 -0
- data/public/javascripts/application.js +34 -0
- data/public/javascripts/spree-yui.js +2 -2
- data/public/stylesheets/spree.css +11 -1
- data/spec/fixtures/preferences.yml +14 -6
- data/spec/models/address_spec.rb +78 -0
- data/spec/models/country_spec.rb +29 -0
- data/spec/models/option_type_spec.rb +36 -0
- data/spec/models/option_value_spec.rb +39 -0
- data/spec/models/product_option_type_spec.rb +38 -0
- data/spec/models/product_property_spec.rb +36 -0
- data/spec/models/product_spec.rb +109 -32
- data/spec/models/property_spec.rb +38 -0
- data/spec/models/prototype_spec.rb +35 -0
- data/spec/models/state_spec.rb +28 -0
- data/spec/models/taxon_spec.rb +38 -0
- data/spec/models/taxonomy_spec.rb +37 -0
- data/spec/models/variant_spec.rb +73 -12
- data/spec/models/zone_spec.rb +35 -15
- data/spec/spec_helper.rb +15 -0
- data/spec/views/admin/configurations/index.html.erb_spec.rb +29 -0
- data/spec/views/admin/mail_settings/show.html.erb_spec.rb +3 -3
- data/spec/views/products/index.html.erb_spec.rb +46 -0
- data/spec/views/products/show.html.erb_spec.rb +46 -0
- data/vendor/extensions/flat_rate_shipping/README.markdown +3 -0
- data/vendor/extensions/flat_rate_shipping/Rakefile +120 -0
- data/vendor/extensions/flat_rate_shipping/flat_rate_shipping_extension.rb +17 -0
- data/vendor/extensions/flat_rate_shipping/lib/flat_rate_shipping_configuration.rb +7 -0
- data/vendor/extensions/flat_rate_shipping/lib/spree/flat_rate_shipping/calculator.rb +9 -0
- data/vendor/extensions/flat_rate_shipping/lib/spree/flat_rate_shipping/config.rb +22 -0
- data/vendor/extensions/flat_rate_shipping/lib/tasks/flat_rate_shipping_extension_tasks.rake +29 -0
- data/vendor/extensions/flat_rate_shipping/spec/spec.opts +6 -0
- data/vendor/extensions/flat_rate_shipping/spec/spec_helper.rb +37 -0
- data/vendor/extensions/localization/localization_extension.rb +1 -6
- data/vendor/extensions/payment_gateway/lib/gateway_config.rb +7 -0
- data/vendor/extensions/payment_gateway/lib/spree/gateway/config.rb +22 -0
- data/vendor/extensions/payment_gateway/lib/spree/payment_gateway.rb +27 -3
- data/vendor/extensions/payment_gateway/payment_gateway_extension.rb +0 -4
- data/vendor/extensions/shipping/README.markdown +3 -0
- data/vendor/extensions/shipping/Rakefile +120 -0
- data/vendor/extensions/shipping/app/controllers/admin/shipping_categories_controller.rb +17 -0
- data/vendor/extensions/shipping/app/controllers/admin/shipping_methods_controller.rb +21 -0
- data/vendor/extensions/shipping/app/controllers/shipments_controller.rb +84 -0
- data/vendor/extensions/shipping/app/helpers/admin/shipping_categories_helper.rb +2 -0
- data/vendor/extensions/shipping/app/helpers/admin/shipping_methods_helper.rb +2 -0
- data/vendor/extensions/shipping/app/helpers/shipments_helper.rb +20 -0
- data/vendor/extensions/shipping/app/models/shipment.rb +11 -0
- data/vendor/extensions/shipping/app/models/shipping_category.rb +3 -0
- data/vendor/extensions/shipping/app/models/shipping_method.rb +12 -0
- data/vendor/extensions/shipping/app/views/admin/shipping_categories/_form.html.erb +6 -0
- data/vendor/extensions/shipping/app/views/admin/shipping_categories/edit.html.erb +8 -0
- data/vendor/extensions/shipping/app/views/admin/shipping_categories/index.html.erb +24 -0
- data/vendor/extensions/shipping/app/views/admin/shipping_categories/new.html.erb +10 -0
- data/vendor/extensions/shipping/app/views/admin/shipping_methods/_form.html.erb +14 -0
- data/vendor/extensions/shipping/app/views/admin/shipping_methods/edit.html.erb +8 -0
- data/vendor/extensions/shipping/app/views/admin/shipping_methods/index.html.erb +28 -0
- data/vendor/extensions/shipping/app/views/admin/shipping_methods/new.html.erb +10 -0
- data/vendor/extensions/shipping/app/views/orders/fatal_shipping.html.erb +6 -0
- data/vendor/extensions/shipping/app/views/shipments/_form.html.erb +46 -0
- data/vendor/extensions/shipping/app/views/shipments/edit.html.erb +8 -0
- data/vendor/extensions/shipping/app/views/shipments/new.html.erb +8 -0
- data/vendor/extensions/shipping/db/migrate/20081003211336_create_shipping_methods.rb +14 -0
- data/vendor/extensions/shipping/db/migrate/20081003233427_create_shipping_categories.rb +15 -0
- data/vendor/extensions/shipping/db/migrate/20081015001711_create_shipments.rb +14 -0
- data/vendor/extensions/shipping/db/migrate/20081023134446_add_product_dimensions.rb +19 -0
- data/vendor/extensions/shipping/db/sample/shipping_categories.yml +2 -0
- data/vendor/extensions/shipping/db/sample/shipping_methods.yml +12 -0
- data/vendor/extensions/shipping/db/sample/zone_members.yml +8 -0
- data/vendor/extensions/shipping/db/sample/zones.yml +3 -0
- data/vendor/extensions/shipping/lang/en-US.yml +9 -0
- data/vendor/extensions/shipping/lib/spree/shipping_calculator.rb +37 -0
- data/vendor/extensions/shipping/lib/spree/shipping_error.rb +3 -0
- data/vendor/extensions/shipping/lib/tasks/shipping_extension_tasks.rake +29 -0
- data/vendor/extensions/shipping/shipping_extension.rb +39 -0
- data/vendor/extensions/shipping/spec/controllers/admin/shipping_categories_controller_spec.rb +10 -0
- data/vendor/extensions/shipping/spec/controllers/admin/shipping_methods_controller_spec.rb +10 -0
- data/vendor/extensions/shipping/spec/models/order_spec.rb +98 -0
- data/vendor/extensions/shipping/spec/models/shipment_spec.rb +26 -0
- data/vendor/extensions/shipping/spec/models/shipping_category_spec.rb +8 -0
- data/vendor/extensions/shipping/spec/models/shipping_method_spec.rb +53 -0
- data/vendor/extensions/shipping/spec/spec.opts +6 -0
- data/vendor/extensions/shipping/spec/spec_helper.rb +37 -0
- data/vendor/extensions/tax_calculator/lib/spree/sales_tax_calculator.rb +12 -4
- data/vendor/extensions/tax_calculator/spec/controllers/tax_calculator_spec.rb +0 -4
- data/vendor/extensions/tax_calculator/spec/models/sales_tax_calculator_spec.rb +14 -14
- data/vendor/extensions/tax_calculator/tax_calculator_extension.rb +0 -4
- data/vendor/plugins/resource_controller/README.rdoc +38 -6
- data/vendor/plugins/resource_controller/Rakefile +7 -20
- data/vendor/plugins/resource_controller/TODO +0 -1
- data/vendor/plugins/resource_controller/lib/resource_controller/helpers/current_objects.rb +71 -69
- data/vendor/plugins/resource_controller/lib/resource_controller/helpers/internal.rb +69 -65
- data/vendor/plugins/resource_controller/lib/resource_controller/helpers/nested.rb +62 -57
- data/vendor/plugins/resource_controller/lib/resource_controller/helpers/singleton_customizations.rb +50 -46
- data/vendor/plugins/resource_controller/lib/resource_controller/helpers/urls.rb +73 -69
- data/vendor/plugins/resource_controller/resource_controller.gemspec +4 -3
- data/vendor/plugins/resource_controller/test/app/controllers/cms/personnel_controller.rb +2 -0
- data/vendor/plugins/resource_controller/test/app/controllers/cms/photos_controller.rb +6 -0
- data/vendor/plugins/resource_controller/test/app/models/personnel.rb +3 -0
- data/vendor/plugins/resource_controller/test/app/models/photo.rb +1 -0
- data/vendor/plugins/resource_controller/test/app/views/cms/photos/edit.rhtml +17 -0
- data/vendor/plugins/resource_controller/test/app/views/cms/photos/index.rhtml +20 -0
- data/vendor/plugins/resource_controller/test/app/views/cms/photos/new.rhtml +16 -0
- data/vendor/plugins/resource_controller/test/app/views/cms/photos/show.rhtml +8 -0
- data/vendor/plugins/resource_controller/test/config/database.yml +9 -0
- data/vendor/plugins/resource_controller/test/config/environment.rb +1 -18
- data/vendor/plugins/resource_controller/test/config/initializers/inflections.rb +14 -0
- data/vendor/plugins/resource_controller/test/config/routes.rb +3 -0
- data/vendor/plugins/resource_controller/test/db/migrate/013_create_personnel.rb +11 -0
- data/vendor/plugins/resource_controller/test/db/migrate/014_add_personnel_id_to_photos.rb +9 -0
- data/vendor/plugins/resource_controller/test/test/fixtures/personnel.yml +5 -0
- data/vendor/plugins/resource_controller/test/test/functional/cms/photos_controller_test.rb +43 -0
- metadata +136 -6
- data/app/models/spree/extension_meta.rb +0 -5
- data/app/models/variants.rb +0 -2
- data/vendor/plugins/resource_controller/lib/resource_controller/version.rb +0 -9
@@ -1,26 +1,13 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require 'rake/rdoctask'
|
4
|
-
require File.dirname(__FILE__)+'/lib/resource_controller/version'
|
5
|
-
Dir['tasks/**.rake'].each { |tasks| load tasks }
|
6
|
-
|
7
|
-
desc 'Default: run unit tests.'
|
8
|
-
task :default => :test
|
9
|
-
|
10
|
-
desc 'Test the ResourceController plugin.'
|
11
|
-
Rake::TestTask.new(:test) do |t|
|
12
|
-
t.libs << 'lib'
|
13
|
-
t.pattern = 'test/test/**/*_test.rb'
|
14
|
-
t.verbose = true
|
15
|
-
end
|
1
|
+
Dir.chdir('test')
|
2
|
+
load 'Rakefile'
|
16
3
|
|
17
4
|
desc 'Generate documentation for the ResourceController plugin.'
|
18
5
|
Rake::RDocTask.new(:rdoc) do |rdoc|
|
19
|
-
rdoc.rdoc_dir = 'rdoc'
|
6
|
+
rdoc.rdoc_dir = '../rdoc'
|
20
7
|
rdoc.title = 'ResourceController'
|
21
8
|
rdoc.options << '--line-numbers' << '--inline-source'
|
22
|
-
rdoc.rdoc_files.include('README.rdoc')
|
23
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
9
|
+
rdoc.rdoc_files.include('../README.rdoc')
|
10
|
+
rdoc.rdoc_files.include('../lib/**/*.rb')
|
24
11
|
end
|
25
12
|
|
26
13
|
task :upload_docs => :rdoc do
|
@@ -28,8 +15,8 @@ task :upload_docs => :rdoc do
|
|
28
15
|
`ssh jamesgolick.com 'rm -Rf /home/apps/jamesgolick.com/public/resource_controller/rdoc'`
|
29
16
|
|
30
17
|
puts "Uploading current rdoc"
|
31
|
-
`scp -r rdoc jamesgolick.com:/home/apps/jamesgolick.com/public/resource_controller`
|
18
|
+
`scp -r ../rdoc jamesgolick.com:/home/apps/jamesgolick.com/public/resource_controller`
|
32
19
|
|
33
20
|
puts "Deleting rdoc"
|
34
|
-
`rm -Rf rdoc`
|
21
|
+
`rm -Rf ../rdoc`
|
35
22
|
end
|
@@ -1 +0,0 @@
|
|
1
|
-
Add helper methods for deep_nesting.
|
@@ -1,79 +1,81 @@
|
|
1
|
-
module ResourceController
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
1
|
+
module ResourceController
|
2
|
+
module Helpers
|
3
|
+
module CurrentObjects
|
4
|
+
protected
|
5
|
+
# Used internally to return the model for your resource.
|
6
|
+
#
|
7
|
+
def model
|
8
|
+
model_name.to_s.camelize.constantize
|
9
|
+
end
|
8
10
|
|
9
11
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
12
|
+
# Used to fetch the collection for the index method
|
13
|
+
#
|
14
|
+
# In order to customize the way the collection is fetched, to add something like pagination, for example, override this method.
|
15
|
+
#
|
16
|
+
def collection
|
17
|
+
end_of_association_chain.find(:all)
|
18
|
+
end
|
17
19
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
20
|
+
# Returns the current param.
|
21
|
+
#
|
22
|
+
# Defaults to params[:id].
|
23
|
+
#
|
24
|
+
# Override this method if you'd like to use an alternate param name.
|
25
|
+
#
|
26
|
+
def param
|
27
|
+
params[:id]
|
28
|
+
end
|
27
29
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
=end
|
52
|
-
end
|
30
|
+
# Used to fetch the current member object in all of the singular methods that operate on an existing member.
|
31
|
+
#
|
32
|
+
# Override this method if you'd like to fetch your objects in some alternate way, like using a permalink.
|
33
|
+
#
|
34
|
+
# class PostsController < ResourceController::Base
|
35
|
+
# private
|
36
|
+
# def object
|
37
|
+
# @object ||= end_of_association_chain.find_by_permalink(param)
|
38
|
+
# end
|
39
|
+
# end
|
40
|
+
#
|
41
|
+
def object
|
42
|
+
return @object if param.blank?
|
43
|
+
if param.is_integer?
|
44
|
+
@object ||= end_of_association_chain.find(param) unless param.nil?
|
45
|
+
else
|
46
|
+
# hack by sean to allow permalink objects
|
47
|
+
@object = end_of_association_chain.find_by_param!(param)
|
48
|
+
end
|
49
|
+
@object
|
50
|
+
#@object ||= end_of_association_chain.find(param) unless param.nil?
|
51
|
+
#@object
|
52
|
+
end
|
53
53
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
54
|
+
# Used internally to load the member object in to an instance variable @#{model_name} (i.e. @post)
|
55
|
+
#
|
56
|
+
def load_object
|
57
|
+
instance_variable_set "@#{parent_type}", parent_object if parent?
|
58
|
+
instance_variable_set "@#{object_name}", object
|
59
|
+
end
|
60
60
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
61
|
+
# Used internally to load the collection in to an instance variable @#{model_name.pluralize} (i.e. @posts)
|
62
|
+
#
|
63
|
+
def load_collection
|
64
|
+
instance_variable_set "@#{parent_type}", parent_object if parent?
|
65
|
+
instance_variable_set "@#{object_name.to_s.pluralize}", collection
|
66
|
+
end
|
67
67
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
68
|
+
# Returns the form params. Defaults to params[model_name] (i.e. params["post"])
|
69
|
+
#
|
70
|
+
def object_params
|
71
|
+
params["#{object_name}"]
|
72
|
+
end
|
73
73
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
74
|
+
# Builds the object, but doesn't save it, during the new, and create action.
|
75
|
+
#
|
76
|
+
def build_object
|
77
|
+
@object ||= end_of_association_chain.send parent? ? :build : :new, object_params
|
78
|
+
end
|
78
79
|
end
|
80
|
+
end
|
79
81
|
end
|
@@ -2,75 +2,79 @@
|
|
2
2
|
#
|
3
3
|
# All of these methods are used internally to execute the options, set by the user in ActionOptions and FailableActionOptions
|
4
4
|
#
|
5
|
-
module ResourceController
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
5
|
+
module ResourceController
|
6
|
+
module Helpers
|
7
|
+
module Internal
|
8
|
+
protected
|
9
|
+
# Used to actually pass the responses along to the controller's respond_to method.
|
10
|
+
#
|
11
|
+
def response_for(action)
|
12
|
+
respond_to do |wants|
|
13
|
+
options_for(action).response.each do |method, block|
|
14
|
+
if block.nil?
|
15
|
+
wants.send(method)
|
16
|
+
else
|
17
|
+
wants.send(method) { instance_eval(&block) }
|
18
|
+
end
|
19
|
+
end
|
16
20
|
end
|
17
21
|
end
|
18
|
-
|
19
|
-
|
22
|
+
|
23
|
+
# Calls the after callbacks for the action, if one is present.
|
24
|
+
#
|
25
|
+
def after(action)
|
26
|
+
invoke_callbacks *options_for(action).after
|
27
|
+
end
|
28
|
+
|
29
|
+
# Calls the before block for the action, if one is present.
|
30
|
+
#
|
31
|
+
def before(action)
|
32
|
+
invoke_callbacks *self.class.send(action).before
|
33
|
+
end
|
20
34
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
35
|
+
# Sets the flash and flash_now for the action, if it is present.
|
36
|
+
#
|
37
|
+
def set_flash(action)
|
38
|
+
set_normal_flash(action)
|
39
|
+
set_flash_now(action)
|
40
|
+
end
|
26
41
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
# Manages splitting things like :create_fails.
|
59
|
-
#
|
60
|
-
def options_for(action)
|
61
|
-
action = action == :new_action ? [action] : "#{action}".split('_').map(&:to_sym)
|
62
|
-
options = self.class.send(action.first)
|
63
|
-
options = options.send(action.last == :fails ? :fails : :success) if ResourceController::FAILABLE_ACTIONS.include? action.first
|
42
|
+
# Sets the regular flash (i.e. flash[:notice] = '...')
|
43
|
+
#
|
44
|
+
def set_normal_flash(action)
|
45
|
+
if f = options_for(action).flash
|
46
|
+
flash[:notice] = f.is_a?(Proc) ? instance_eval(&f) : options_for(action).flash
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Sets the flash.now (i.e. flash.now[:notice] = '...')
|
51
|
+
#
|
52
|
+
def set_flash_now(action)
|
53
|
+
if f = options_for(action).flash_now
|
54
|
+
flash.now[:notice] = f.is_a?(Proc) ? instance_eval(&f) : options_for(action).flash_now
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# Returns the options for an action, which is a symbol.
|
59
|
+
#
|
60
|
+
# Manages splitting things like :create_fails.
|
61
|
+
#
|
62
|
+
def options_for(action)
|
63
|
+
action = action == :new_action ? [action] : "#{action}".split('_').map(&:to_sym)
|
64
|
+
options = self.class.send(action.first)
|
65
|
+
options = options.send(action.last == :fails ? :fails : :success) if ResourceController::FAILABLE_ACTIONS.include? action.first
|
66
|
+
|
67
|
+
options
|
68
|
+
end
|
69
|
+
|
70
|
+
def invoke_callbacks(*callbacks)
|
71
|
+
unless callbacks.empty?
|
72
|
+
callbacks.select { |callback| callback.is_a? Symbol }.each { |symbol| send(symbol) }
|
64
73
|
|
65
|
-
|
74
|
+
block = callbacks.detect { |callback| callback.is_a? Proc }
|
75
|
+
instance_eval &block unless block.nil?
|
76
|
+
end
|
77
|
+
end
|
66
78
|
end
|
67
|
-
|
68
|
-
def invoke_callbacks(*callbacks)
|
69
|
-
unless callbacks.empty?
|
70
|
-
callbacks.select { |callback| callback.is_a? Symbol }.each { |symbol| send(symbol) }
|
71
|
-
|
72
|
-
block = callbacks.detect { |callback| callback.is_a? Proc }
|
73
|
-
instance_eval &block unless block.nil?
|
74
|
-
end
|
75
|
-
end
|
79
|
+
end
|
76
80
|
end
|
@@ -1,69 +1,74 @@
|
|
1
1
|
# Nested and Polymorphic Resource Helpers
|
2
2
|
#
|
3
|
-
module ResourceController
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
#
|
13
|
-
def parent_type
|
14
|
-
@parent_type ||= parent_type_from_params || parent_type_from_request
|
15
|
-
end
|
3
|
+
module ResourceController
|
4
|
+
module Helpers
|
5
|
+
module Nested
|
6
|
+
protected
|
7
|
+
# Returns the relevant association proxy of the parent. (i.e. /posts/1/comments # => @post.comments)
|
8
|
+
#
|
9
|
+
def parent_association
|
10
|
+
@parent_association ||= parent_object.send(model_name.to_s.pluralize.to_sym)
|
11
|
+
end
|
16
12
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
# Returns the type of the current parent extracted form a request path
|
24
|
-
#
|
25
|
-
def parent_type_from_request
|
26
|
-
[*belongs_to].find { |parent| request.path.split('/').include? parent.to_s }
|
27
|
-
end
|
13
|
+
# Returns the type of the current parent
|
14
|
+
#
|
15
|
+
def parent_type
|
16
|
+
@parent_type ||= parent_type_from_params || parent_type_from_request
|
17
|
+
end
|
28
18
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
19
|
+
# Returns the type of the current parent extracted from params
|
20
|
+
#
|
21
|
+
def parent_type_from_params
|
22
|
+
[*belongs_to].find { |parent| !params["#{parent}_id".to_sym].nil? }
|
23
|
+
end
|
34
24
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
25
|
+
# Returns the type of the current parent extracted form a request path
|
26
|
+
#
|
27
|
+
def parent_type_from_request
|
28
|
+
[*belongs_to].find { |parent| request.path.split('/').include? parent.to_s }
|
29
|
+
end
|
40
30
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
31
|
+
# Returns true/false based on whether or not a parent is present.
|
32
|
+
#
|
33
|
+
def parent?
|
34
|
+
!parent_type.nil?
|
35
|
+
end
|
45
36
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
37
|
+
# Returns true/false based on whether or not a parent is a singleton.
|
38
|
+
#
|
39
|
+
def parent_singleton?
|
40
|
+
!parent_type_from_request.nil? && parent_type_from_params.nil?
|
41
|
+
end
|
51
42
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
end
|
43
|
+
# Returns the current parent param, if there is a parent. (i.e. params[:post_id])
|
44
|
+
def parent_param
|
45
|
+
params["#{parent_type}_id".to_sym]
|
46
|
+
end
|
57
47
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
48
|
+
# Like the model method, but for a parent relationship.
|
49
|
+
#
|
50
|
+
def parent_model
|
51
|
+
parent_type.to_s.camelize.constantize
|
52
|
+
end
|
63
53
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
54
|
+
# Returns the current parent object if a parent object is present.
|
55
|
+
#
|
56
|
+
def parent_object
|
57
|
+
# hack by sean to allow permalink parents
|
58
|
+
parent? && !parent_singleton? ? parent_model_find(parent_param) : nil
|
59
|
+
end
|
60
|
+
|
61
|
+
# hack by sean to allow permalink parents
|
62
|
+
def parent_model_find(parent_param)
|
63
|
+
return parent_model.find(parent_param) if parent_param.is_integer?
|
64
|
+
parent_model.find_by_param!(parent_param)
|
65
|
+
end
|
66
|
+
|
67
|
+
# If there is a parent, returns the relevant association proxy. Otherwise returns model.
|
68
|
+
#
|
69
|
+
def end_of_association_chain
|
70
|
+
parent? ? parent_association : model
|
71
|
+
end
|
68
72
|
end
|
73
|
+
end
|
69
74
|
end
|