Module: Merb::Slices::ControllerMixin::ClassMethods
- Defined in:
- merb-slices/lib/merb-slices/controller_mixin.rb
Instance Method Summary (collapse)
-
- (Object) controller_for_slice(slice_module = nil, options = {})
Setup a controller to reference a slice and its template roots.
Instance Method Details
- (Object) controller_for_slice(slice_module = nil, options = {})
Setup a controller to reference a slice and its template roots.
This method is available to any class inheriting from AbstractController; it enables correct location of templates, as well as access to the slice module.
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'merb-slices/lib/merb-slices/controller_mixin.rb', line 68 def controller_for_slice(slice_module = nil, = {}) , slice_module = slice_module.merge(), nil if slice_module.is_a?(Hash) slice_module ||= self.name.split('::').first [:templates_for] = :view unless .key?(:templates_for) if slice_mod = Merb::Slices[slice_module.to_s] # Include the instance methods unless self.kind_of?(Merb::Slices::ControllerMixin::MixinMethods) self.send(:extend, Merb::Slices::ControllerMixin::MixinMethods) end # Reference this controller's slice module self.class_inheritable_accessor :slice, :instance_writer => false self.slice = slice_mod # Setup template roots if [:templates_for] self._template_root = join_template_path(slice_mod.dir_for([:templates_for]), [:path]) self._template_roots = [] # app-level app/views directory for shared and fallback views, layouts and partials self._template_roots << [join_template_path(Merb.dir_for([:templates_for]), [:path]), :_template_location] if Merb.dir_for([:templates_for]) # slice-level app/views for the standard supplied views self._template_roots << [self._template_root, :_slice_template_location] # app-level slices/<slice>/app/views for specific overrides self._template_roots << [join_template_path(slice_mod.app_dir_for([:templates_for]), [:path]), :_slice_template_location] # additional template roots for specific overrides (optional) self._template_roots += Array([:template_roots]) if [:template_roots] end # Set the layout for this slice controller layout_for_slice([:layout]) end end |