instance method _write_layout_method

Ruby on Rails 3.0.20

Since v3.0.20 Last seen in v3.2.22.5

Available in: v3.0.20 v3.1.12 v3.2.22.5

Signature

_write_layout_method()

Creates a _layout method to be called by _default_layout .

If a layout is not explicitly mentioned then look for a layout with the controller’s name. if nothing is found then try same procedure to find super class’s layout.

Source
# File actionpack/lib/abstract_controller/layouts.rb, line 242
      def _write_layout_method
        remove_possible_method(:_layout)

        case defined?(@_layout) ? @_layout : nil
        when String
          self.class_eval %{def _layout; #{@_layout.inspect} end}, __FILE__, __LINE__
        when Symbol
          self.class_eval <<-ruby_eval, __FILE__, __LINE__ + 1
            def _layout
              #{@_layout}.tap do |layout|
                unless layout.is_a?(String) || !layout
                  raise ArgumentError, "Your layout method :#{@_layout} returned \#{layout}. It " \
                    "should have returned a String, false, or nil"
                end
              end
            end
          ruby_eval
        when Proc
          define_method :_layout_from_proc, &@_layout
          self.class_eval %{def _layout; _layout_from_proc(self) end}, __FILE__, __LINE__
        when false
          self.class_eval %{def _layout; end}, __FILE__, __LINE__
        when true
          raise ArgumentError, "Layouts must be specified as a String, Symbol, false, or nil"
        when nil
          if name
            _prefix = "layouts" unless _implied_layout_name =~ /\blayouts/

            self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
              def _layout
                if template_exists?("#{_implied_layout_name}", #{_prefix.inspect})
                  "#{_implied_layout_name}"
                else
                  super
                end
              end
            RUBY
          end
        end
        self.class_eval { private :_layout }
      end

Defined in actionpack/lib/abstract_controller/layouts.rb line 242 · View on GitHub · Improve this page · Find usages on GitHub

Defined in AbstractController::Layouts::ClassMethods

Type at least 2 characters to search.

↑↓ navigate · open · esc close