fortitude 0.0.4-java → 0.0.5-java
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.
- checksums.yaml +4 -4
- data/.travis.yml +19 -19
- data/CHANGES.md +31 -0
- data/Gemfile +1 -0
- data/README-erector.md +1 -1
- data/lib/fortitude/erector.rb +32 -0
- data/lib/fortitude/method_templates/tag_method_template.rb.smpl +6 -6
- data/lib/fortitude/method_templates/text_method_template.rb.smpl +3 -3
- data/lib/fortitude/rails/railtie.rb +6 -4
- data/lib/fortitude/rails/renderer.rb +7 -4
- data/lib/fortitude/rails/template_handler.rb +18 -3
- data/lib/fortitude/rendering_context.rb +20 -2
- data/lib/fortitude/tags/render_widget_placeholder.rb +19 -0
- data/lib/fortitude/tags/tag.rb +18 -4
- data/lib/fortitude/tags/tag_return_value.rb +1 -1
- data/lib/fortitude/tags/tag_store.rb +4 -0
- data/lib/fortitude/tilt/fortitude_template.rb +6 -128
- data/lib/fortitude/version.rb +1 -1
- data/lib/fortitude/widget.rb +2 -0
- data/lib/fortitude/widget/files.rb +162 -0
- data/lib/fortitude/widget/integration.rb +5 -3
- data/lib/fortitude/widget/modules_and_subclasses.rb +17 -0
- data/lib/fortitude/widget/rendering.rb +12 -5
- data/lib/fortitude/widget/start_and_end_comments.rb +4 -2
- data/lib/fortitude/widget/tags.rb +6 -1
- data/lib/fortitude/widget/widget_class_inheritable_attributes.rb +7 -0
- data/spec/helpers/rails_server.rb +4 -0
- data/spec/rails/basic_rails_system_spec.rb +4 -0
- data/spec/rails/erector_coexistence_system_spec.rb +33 -0
- data/spec/rails/rendering_context_system_spec.rb +19 -3
- data/spec/rails/rendering_system_spec.rb +6 -0
- data/spec/rails/templates/basic_rails_system_spec/app/controllers/basic_rails_system_spec_controller.rb +5 -0
- data/spec/rails/templates/basic_rails_system_spec/app/views/basic_rails_system_spec/double_render_one.rb +5 -0
- data/spec/rails/templates/basic_rails_system_spec/app/views/basic_rails_system_spec/double_render_three.rb +5 -0
- data/spec/rails/templates/basic_rails_system_spec/app/views/basic_rails_system_spec/double_render_two.rb +9 -0
- data/spec/rails/templates/erector_coexistence_system_spec/app/controllers/erector_coexistence_system_spec_controller.rb +19 -0
- data/spec/rails/templates/erector_coexistence_system_spec/app/v/views/erector_coexistence_system_spec/erector_widget_in_app_v_views.rb +7 -0
- data/spec/rails/templates/erector_coexistence_system_spec/app/v/views/erector_coexistence_system_spec/fortitude_widget_in_app_v_views.rb +7 -0
- data/spec/rails/templates/erector_coexistence_system_spec/app/views/erector_coexistence_system_spec/erector_widget_in_app_views.rb +7 -0
- data/spec/rails/templates/erector_coexistence_system_spec/app/views/erector_coexistence_system_spec/fortitude_widget_in_app_views.rb +7 -0
- data/spec/rails/templates/erector_coexistence_system_spec/config/application.rb +25 -0
- data/spec/rails/templates/rendering_context_system_spec/app/controllers/rendering_context_system_spec_controller.rb +2 -2
- data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/_current_element_nesting_intermediate.html.erb +3 -0
- data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/current_element_nesting_child.rb +13 -0
- data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/current_element_nesting_toplevel.rb +9 -0
- data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/start_end_widget_through_partials.rb +2 -2
- data/spec/system/convenience_methods_system_spec.rb +22 -0
- data/spec/system/inline_system_spec.rb +2 -2
- data/spec/system/record_tag_emission_system_spec.rb +71 -0
- data/spec/system/rendering_context_system_spec.rb +21 -0
- data/spec/system/setting_inheritance_system_spec.rb +52 -0
- data/spec/system/tag_return_value_system_spec.rb +7 -0
- data/spec/system/tilt_system_spec.rb +13 -18
- data/spec/system/widget_class_from_spec.rb +240 -0
- data/spec/system/widget_method_system_spec.rb +52 -0
- metadata +37 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 996ef14559afdcaf5e6d38539b6cd3833f6a1092
         | 
| 4 | 
            +
              data.tar.gz: ef4536daad102644d9b841b07f60ac90e8144e24
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 2518e9ccc389d05add5ddc23c7ed04528ead578c3d8cb189158035b19eb09e65a0ac259330d80542c58d14c6cd5e38755d674133b248282aff332f6cc3fc5235
         | 
| 7 | 
            +
              data.tar.gz: a5892beecdc684d675e9e4f26504d12116467bc3ea04c281d5526c438bc8b87b3c6c3bf6eccbb6b6d06e87be6b11f937c137c51549019a07a6d170f5bf1379ad
         | 
    
        data/.travis.yml
    CHANGED
    
    | @@ -3,14 +3,14 @@ rvm: | |
| 3 3 | 
             
                - "1.9.3"
         | 
| 4 4 | 
             
                - "2.0.0"
         | 
| 5 5 | 
             
                - "2.1.2"
         | 
| 6 | 
            -
                - "jruby-1.7. | 
| 6 | 
            +
                - "jruby-1.7.15"
         | 
| 7 7 | 
             
            env:
         | 
| 8 | 
            -
                - FORTITUDE_SPECS_RAILS_VERSION=4.1. | 
| 9 | 
            -
                - FORTITUDE_SPECS_RAILS_VERSION=4.0. | 
| 10 | 
            -
                - FORTITUDE_SPECS_RAILS_VERSION=3.2. | 
| 8 | 
            +
                - FORTITUDE_SPECS_RAILS_VERSION=4.1.6
         | 
| 9 | 
            +
                - FORTITUDE_SPECS_RAILS_VERSION=4.0.10
         | 
| 10 | 
            +
                - FORTITUDE_SPECS_RAILS_VERSION=3.2.19
         | 
| 11 11 | 
             
                - FORTITUDE_SPECS_RAILS_VERSION=3.1.12
         | 
| 12 12 | 
             
                - FORTITUDE_SPECS_RAILS_VERSION=3.0.20
         | 
| 13 | 
            -
                - FORTITUDE_NATIVE_EXTENSIONS=false FORTITUDE_SPECS_RAILS_VERSION=4.1. | 
| 13 | 
            +
                - FORTITUDE_NATIVE_EXTENSIONS=false FORTITUDE_SPECS_RAILS_VERSION=4.1.6
         | 
| 14 14 | 
             
                - FORTITUDE_NATIVE_EXTENSIONS=false FORTITUDE_SPECS_RAILS_VERSION=3.0.20
         | 
| 15 15 | 
             
            before_script:
         | 
| 16 16 | 
             
                - export JRUBY_OPTS="$JRUBY_OPTS -J-Xmx128m -J-Xms128m -J-Xss2048k"
         | 
| @@ -18,11 +18,11 @@ matrix: | |
| 18 18 | 
             
                exclude:
         | 
| 19 19 | 
             
                    # Rails 4.x doesn't support Ruby 1.8.7
         | 
| 20 20 | 
             
                    -   rvm: 1.8.7
         | 
| 21 | 
            -
                        env: FORTITUDE_SPECS_RAILS_VERSION=4.1. | 
| 21 | 
            +
                        env: FORTITUDE_SPECS_RAILS_VERSION=4.1.6
         | 
| 22 22 | 
             
                    -   rvm: 1.8.7
         | 
| 23 | 
            -
                        env: FORTITUDE_NATIVE_EXTENSIONS=false FORTITUDE_SPECS_RAILS_VERSION=4.1. | 
| 23 | 
            +
                        env: FORTITUDE_NATIVE_EXTENSIONS=false FORTITUDE_SPECS_RAILS_VERSION=4.1.6
         | 
| 24 24 | 
             
                    -   rvm: 1.8.7
         | 
| 25 | 
            -
                        env: FORTITUDE_SPECS_RAILS_VERSION=4.0. | 
| 25 | 
            +
                        env: FORTITUDE_SPECS_RAILS_VERSION=4.0.10
         | 
| 26 26 | 
             
                    # 2014-06-19 ageweke -- ARGH. After trying about seventeen different things, no matter what I do,
         | 
| 27 27 | 
             
                    # Travis fails JRuby builds about 20% of the time with "Killed". Their documentation indicates that this
         | 
| 28 28 | 
             
                    # is likely an out-of-memory issue (i.e., entire VM's memory is consumed). However, I'm running JRuby with
         | 
| @@ -34,17 +34,17 @@ matrix: | |
| 34 34 | 
             
                    # one manually to make sure there aren't other failures, too. This is very frustrating, but I can't seem to
         | 
| 35 35 | 
             
                    # find a way around it. If there's a fix out there somewhere, I'm all ears!
         | 
| 36 36 | 
             
                allow_failures:
         | 
| 37 | 
            -
                    -   rvm: jruby-1.7. | 
| 38 | 
            -
                        env: FORTITUDE_SPECS_RAILS_VERSION=4.1. | 
| 39 | 
            -
                    -   rvm: jruby-1.7. | 
| 40 | 
            -
                        env: FORTITUDE_SPECS_RAILS_VERSION=4.0. | 
| 41 | 
            -
                    -   rvm: jruby-1.7. | 
| 42 | 
            -
                        env: FORTITUDE_SPECS_RAILS_VERSION=3.2. | 
| 43 | 
            -
                    -   rvm: jruby-1.7. | 
| 37 | 
            +
                    -   rvm: jruby-1.7.15
         | 
| 38 | 
            +
                        env: FORTITUDE_SPECS_RAILS_VERSION=4.1.6
         | 
| 39 | 
            +
                    -   rvm: jruby-1.7.15
         | 
| 40 | 
            +
                        env: FORTITUDE_SPECS_RAILS_VERSION=4.0.10
         | 
| 41 | 
            +
                    -   rvm: jruby-1.7.15
         | 
| 42 | 
            +
                        env: FORTITUDE_SPECS_RAILS_VERSION=3.2.19
         | 
| 43 | 
            +
                    -   rvm: jruby-1.7.15
         | 
| 44 44 | 
             
                        env: FORTITUDE_SPECS_RAILS_VERSION=3.1.12
         | 
| 45 | 
            -
                    -   rvm: jruby-1.7. | 
| 45 | 
            +
                    -   rvm: jruby-1.7.15
         | 
| 46 46 | 
             
                        env: FORTITUDE_SPECS_RAILS_VERSION=3.0.20
         | 
| 47 | 
            -
                    -   rvm: jruby-1.7. | 
| 48 | 
            -
                        env: FORTITUDE_NATIVE_EXTENSIONS=false FORTITUDE_SPECS_RAILS_VERSION=4.1. | 
| 49 | 
            -
                    -   rvm: jruby-1.7. | 
| 47 | 
            +
                    -   rvm: jruby-1.7.15
         | 
| 48 | 
            +
                        env: FORTITUDE_NATIVE_EXTENSIONS=false FORTITUDE_SPECS_RAILS_VERSION=4.1.6
         | 
| 49 | 
            +
                    -   rvm: jruby-1.7.15
         | 
| 50 50 | 
             
                        env: FORTITUDE_NATIVE_EXTENSIONS=false FORTITUDE_SPECS_RAILS_VERSION=3.0.20
         | 
    
        data/CHANGES.md
    CHANGED
    
    | @@ -1,5 +1,36 @@ | |
| 1 1 | 
             
            # Fortitude Releases
         | 
| 2 2 |  | 
| 3 | 
            +
            ## 0.0.5, 22 September 2014
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            * You can now load both Fortitude and Erector at the same time into a project, and it will "just work": Erector
         | 
| 6 | 
            +
              widgets will render using Erector, and Fortitude widgets will render using Fortitude. (Fortitude takes over the
         | 
| 7 | 
            +
              actual template engine registration for `.rb` files, and uses a trick to keep Erector from displacing it; it then
         | 
| 8 | 
            +
              looks at the widget class being rendered, and delegates all Erector rendering directly to Erector.)
         | 
| 9 | 
            +
            * When inside a widget, you can now render a sub-widget using `widget MyWidget.new(...)` — _i.e._, passing an
         | 
| 10 | 
            +
              actual widget instance — or using `widget MyWidget, { :param1 => value1 }` — _i.e._, passing a widget
         | 
| 11 | 
            +
              class and a `Hash` of assignments (which can be omitted if the widget doesn't have any `need`s).
         | 
| 12 | 
            +
            * Fixed an issue where, _e.g._, calling `#render_to_string` on a Fortitude widget within a Rails controller, and then
         | 
| 13 | 
            +
              also rendering a Fortitude widget as the template for that action, would cause a method to be called on `nil`.
         | 
| 14 | 
            +
            * Added `Fortitude::RenderingContext#parent_widget`, which returns the parent widget of the current widget during
         | 
| 15 | 
            +
              rendering at runtime. (In other words, this is not the superclass of the current widget, but the widget that caused
         | 
| 16 | 
            +
              this widget to get rendered, using either `Fortitude::Widget#widget` or `render :partial => ...`.) This can, of
         | 
| 17 | 
            +
              course, be `nil` if there is no current parent widget.
         | 
| 18 | 
            +
            * Added `Fortitude::Widget.all_fortitude_superclasses`, which returns an `Array` of all superclasses of a widget up to,
         | 
| 19 | 
            +
              but not including, `Fortitude::Widget` itself.
         | 
| 20 | 
            +
            * Added `Fortitude::Widget.widget_class_from_file`, which accepts the path to a file and an array of "root" directories
         | 
| 21 | 
            +
              to look under (_i.e._, assuming you're using something like Rails' autoloading mechanism), and returns the `Class`
         | 
| 22 | 
            +
              object for the widget that's contained in that file. This uses a series of mechansims to try to detect the class
         | 
| 23 | 
            +
              that's present in the file: a "magic comment" that can be present in the file, an array of class names to try
         | 
| 24 | 
            +
              that you can pass in, the position of the class in the file hierarchy, and scanning the source text itself.
         | 
| 25 | 
            +
            * Added a `record_tag_emission` class-level setting that tells a widget to call `#emitting_tag!` on the
         | 
| 26 | 
            +
              `Fortitude::RenderingContext` when emitting a tag; you can use this to build various systems that need to know where
         | 
| 27 | 
            +
              in the hierarchy of tags we are at the moment.
         | 
| 28 | 
            +
            * The object being returned from Fortitude tag methods — which, in general, you should never use — now
         | 
| 29 | 
            +
              inherits from `Object`, not `BasicObject`, so that some built-in methods like `#is_a?` can be safely called on it.
         | 
| 30 | 
            +
              This is for use in some users' environments doing funny things with the Ruby runtime that end up calling methods
         | 
| 31 | 
            +
              like that on the return values of widget `#content` methods, which very often just end up being the tag return
         | 
| 32 | 
            +
              value object.
         | 
| 33 | 
            +
             | 
| 3 34 | 
             
            ## 0.0.4, 24 June 2014
         | 
| 4 35 |  | 
| 5 36 | 
             
            * Added support for building a JRuby-specific gem to the gemspec, so that things work smoothly for JRuby users.
         | 
    
        data/Gemfile
    CHANGED
    
    
    
        data/README-erector.md
    CHANGED
    
    | @@ -18,7 +18,7 @@ garbage as ERb/Erubis); | |
| 18 18 | 
             
            * Full, complete native HTML5 support (with selectable X/HTML4.01 Strict/Transitional/Frameset doctypes);
         | 
| 19 19 | 
             
            * Enforces HTML element-nesting and attribute-name rules, and enforce ID uniqueness across a page (configurable, and off by default);
         | 
| 20 20 | 
             
            * In development, beautiful HTML comments around each widget, showing what class is being rendered, the values of all variables supplied to that class, and the nesting depth of that widget;
         | 
| 21 | 
            -
            * Fully compatible with Ruby 1.8.7-2.1.x, JRuby 1.7. | 
| 21 | 
            +
            * Fully compatible with Ruby 1.8.7-2.1.x, JRuby 1.7.15, and Rails 3.0.x-4.1.x;
         | 
| 22 22 | 
             
            * Full Tilt support, and can be used with or without Rails;
         | 
| 23 23 | 
             
            * Much more thorough Rails support — all known Rails integration points have been resolved, and it should work
         | 
| 24 24 | 
             
            as smoothly with Rails as does (_e.g._) ERb/Erubis;
         | 
| @@ -0,0 +1,32 @@ | |
| 1 | 
            +
            module Fortitude
         | 
| 2 | 
            +
              module Erector
         | 
| 3 | 
            +
                class << self
         | 
| 4 | 
            +
                  def is_erector_available?
         | 
| 5 | 
            +
                    @is_erector_available ||= begin
         | 
| 6 | 
            +
                      begin
         | 
| 7 | 
            +
                        gem 'erector'
         | 
| 8 | 
            +
                      rescue Gem::LoadError => le
         | 
| 9 | 
            +
                        # ok
         | 
| 10 | 
            +
                      end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                      begin
         | 
| 13 | 
            +
                        require 'erector'
         | 
| 14 | 
            +
                      rescue LoadError => le
         | 
| 15 | 
            +
                        # ok
         | 
| 16 | 
            +
                      end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                      if defined?(::Erector::Widget) then :yes else :no end
         | 
| 19 | 
            +
                    end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    @is_erector_available == :yes
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  def is_erector_widget_class?(widget_class)
         | 
| 25 | 
            +
                    return false unless is_erector_available?
         | 
| 26 | 
            +
                    return true if widget_class == ::Erector::Widget
         | 
| 27 | 
            +
                    return false if widget_class == ::Object
         | 
| 28 | 
            +
                    return is_erector_widget_class?(widget_class.superclass)
         | 
| 29 | 
            +
                  end
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
              end
         | 
| 32 | 
            +
            end
         | 
| @@ -1,9 +1,9 @@ | |
| 1 1 | 
             
            def #{method_name}(content_or_attributes = nil, attributes = nil)
         | 
| 2 2 | 
             
              o = @_fortitude_output_buffer_holder.output_buffer
         | 
| 3 | 
            -
              rc = @_fortitude_rendering_context                                       # :if  | 
| 3 | 
            +
              rc = @_fortitude_rendering_context                                       # :if record_emitting_tag || needs_formatting
         | 
| 4 4 |  | 
| 5 | 
            -
              this_tag = #{tag_object_const}                                           # :if  | 
| 6 | 
            -
              rc. | 
| 5 | 
            +
              this_tag = #{tag_object_const}                                           # :if record_emitting_tag || needs_attribute_rules || needs_id_uniqueness
         | 
| 6 | 
            +
              rc.emitting_tag!(self, this_tag, content_or_attributes, attributes) do   # :if record_emitting_tag
         | 
| 7 7 | 
             
                format_output = rc.format_output?                                      # :if needs_formatting
         | 
| 8 8 | 
             
                if format_output                                                       # :if needs_formatting
         | 
| 9 9 | 
             
                  rc.needs_newline!                                                    # :if needs_formatting && newline_before
         | 
| @@ -36,7 +36,7 @@ def #{method_name}(content_or_attributes = nil, attributes = nil) | |
| 36 36 | 
             
                elsif (! attributes)
         | 
| 37 37 | 
             
                  _fortitude_raise_no_content_allowed_error(#{tag_object_const})       # :if ! content_allowed
         | 
| 38 38 | 
             
                  o.#{concat_method}(#{open_const})
         | 
| 39 | 
            -
                  rc. | 
| 39 | 
            +
                  rc.emitting_tag!(self, FORTITUDE_TEXT_PSEUDOTAG, content_or_attributes, nil) { } unless content_or_attributes.instance_variable_get("@html_safe") # :if record_emitting_tag
         | 
| 40 40 | 
             
                  content_or_attributes.to_s.fortitude_append_escaped_string(o)        # :if escape_direct_content
         | 
| 41 41 | 
             
                  o.#{concat_method}(content_or_attributes.to_s)                       # :if ! escape_direct_content
         | 
| 42 42 | 
             
                  if block_given?
         | 
| @@ -52,7 +52,7 @@ def #{method_name}(content_or_attributes = nil, attributes = nil) | |
| 52 52 | 
             
                  attributes.fortitude_append_as_attributes(o, nil)
         | 
| 53 53 | 
             
                  o.#{concat_method}(#{partial_open_end_const})
         | 
| 54 54 |  | 
| 55 | 
            -
                  rc. | 
| 55 | 
            +
                  rc.emitting_tag!(self, FORTITUDE_TEXT_PSEUDOTAG, content_or_attributes, nil) { } unless content_or_attributes.instance_variable_get("@html_safe") # :if record_emitting_tag
         | 
| 56 56 | 
             
                  content_or_attributes.to_s.fortitude_append_escaped_string(o)        # :if escape_direct_content
         | 
| 57 57 | 
             
                  o.#{concat_method}(content_or_attributes.to_s)                       # :if ! escape_direct_content
         | 
| 58 58 | 
             
                  if block_given?
         | 
| @@ -62,7 +62,7 @@ def #{method_name}(content_or_attributes = nil, attributes = nil) | |
| 62 62 | 
             
                  o.#{concat_method}(#{close_const})
         | 
| 63 63 | 
             
                end
         | 
| 64 64 | 
             
                rc.needs_newline! if format_output                                     # :if needs_formatting && newline_before
         | 
| 65 | 
            -
              end                                                                      # :if  | 
| 65 | 
            +
              end                                                                      # :if record_emitting_tag
         | 
| 66 66 |  | 
| 67 67 | 
             
              FORTITUDE_NO_RETURN_VALUE_FROM_TAGS
         | 
| 68 68 | 
             
            end
         | 
| @@ -1,9 +1,9 @@ | |
| 1 1 | 
             
            def tag_text(s)
         | 
| 2 2 | 
             
              @_fortitude_rendering_context.about_to_output_non_whitespace!    # :if format_output
         | 
| 3 3 |  | 
| 4 | 
            -
              unless s.instance_variable_get("@html_safe")                     # :if  | 
| 5 | 
            -
                @_fortitude_rendering_context. | 
| 6 | 
            -
              end                                                              # :if  | 
| 4 | 
            +
              unless s.instance_variable_get("@html_safe")                     # :if record_emitting_tag
         | 
| 5 | 
            +
                @_fortitude_rendering_context.emitting_tag!(self, FORTITUDE_TEXT_PSEUDOTAG, s, nil) { } # :if record_emitting_tag
         | 
| 6 | 
            +
              end                                                              # :if record_emitting_tag
         | 
| 7 7 |  | 
| 8 8 | 
             
              s.to_s.fortitude_append_escaped_string(@_fortitude_output_buffer_holder.output_buffer)
         | 
| 9 9 | 
             
            end
         | 
| @@ -197,8 +197,10 @@ module Fortitude | |
| 197 197 | 
             
                    # So, instead, we simply transform <tt>render :widget => ...</tt> into a <tt>render :text => ...</tt> of the
         | 
| 198 198 | 
             
                    # widget's output, and let Rails take it away from there.
         | 
| 199 199 | 
             
                    ::ActionController::Base.class_eval do
         | 
| 200 | 
            -
                      def  | 
| 201 | 
            -
                        @ | 
| 200 | 
            +
                      def fortitude_rendering_context_for(delegate_object, yield_block)
         | 
| 201 | 
            +
                        @_fortitude_rendering_contexts ||= { }
         | 
| 202 | 
            +
                        @_fortitude_rendering_contexts[delegate_object.object_id] ||= create_fortitude_rendering_context(
         | 
| 203 | 
            +
                          :delegate_object => delegate_object, :yield_block => yield_block)
         | 
| 202 204 | 
             
                      end
         | 
| 203 205 |  | 
| 204 206 | 
             
                      def create_fortitude_rendering_context(options)
         | 
| @@ -208,7 +210,7 @@ module Fortitude | |
| 208 210 | 
             
                      def render_with_fortitude(*args, &block)
         | 
| 209 211 | 
             
                        if (options = args[0]).kind_of?(Hash)
         | 
| 210 212 | 
             
                          if (widget = options[:widget])
         | 
| 211 | 
            -
                            rendering_context =  | 
| 213 | 
            +
                            rendering_context = fortitude_rendering_context_for(self, nil)
         | 
| 212 214 | 
             
                            widget.render_to(rendering_context)
         | 
| 213 215 |  | 
| 214 216 | 
             
                            options = options.dup
         | 
| @@ -220,7 +222,7 @@ module Fortitude | |
| 220 222 | 
             
                          elsif (widget_block = options[:inline]) && (options[:type] == :fortitude)
         | 
| 221 223 | 
             
                            options.delete(:inline)
         | 
| 222 224 |  | 
| 223 | 
            -
                            rendering_context =  | 
| 225 | 
            +
                            rendering_context = fortitude_rendering_context_for(self, nil)
         | 
| 224 226 | 
             
                            widget_class = Class.new(Fortitude::Widgets::Html5)
         | 
| 225 227 | 
             
                            widget_class.use_instance_variables_for_assigns(true)
         | 
| 226 228 | 
             
                            widget_class.extra_assigns(:use)
         | 
| @@ -1,4 +1,5 @@ | |
| 1 1 | 
             
            require 'fortitude/rendering_context'
         | 
| 2 | 
            +
            require 'fortitude/erector'
         | 
| 2 3 |  | 
| 3 4 | 
             
            ::ActiveSupport::SafeBuffer.class_eval do
         | 
| 4 5 | 
             
              alias_method :fortitude_concat, :original_concat
         | 
| @@ -10,7 +11,11 @@ module Fortitude | |
| 10 11 | 
             
                class Renderer
         | 
| 11 12 | 
             
                  class << self
         | 
| 12 13 | 
             
                    # TODO: Refactor this and render :widget => ... support into one method somewhere.
         | 
| 13 | 
            -
                    def render(widget_class, template_handler, local_assigns, &block)
         | 
| 14 | 
            +
                    def render(widget_class, template_handler, local_assigns, is_partial, &block)
         | 
| 15 | 
            +
                      if ::Fortitude::Erector.is_erector_widget_class?(widget_class)
         | 
| 16 | 
            +
                        return ::Erector::Rails.render(widget_class, template_handler, local_assigns, is_partial, &block)
         | 
| 17 | 
            +
                      end
         | 
| 18 | 
            +
             | 
| 14 19 | 
             
                      total_assigns = template_handler.assigns.symbolize_keys.merge(local_assigns.symbolize_keys)
         | 
| 15 20 |  | 
| 16 21 | 
             
                      needed_assigns = if widget_class.extra_assigns == :use
         | 
| @@ -21,9 +26,7 @@ module Fortitude | |
| 21 26 |  | 
| 22 27 | 
             
                      widget = widget_class.new(needed_assigns)
         | 
| 23 28 | 
             
                      template_handler.with_output_buffer do
         | 
| 24 | 
            -
                         | 
| 25 | 
            -
                        controller = template_handler.controller
         | 
| 26 | 
            -
                        rendering_context = controller.fortitude_rendering_context(rendering_context_options)
         | 
| 29 | 
            +
                        rendering_context = template_handler.controller.fortitude_rendering_context_for(template_handler, block)
         | 
| 27 30 |  | 
| 28 31 | 
             
                        # TODO: Refactor this -- both passing it into the constructor and setting yield_block here is gross.
         | 
| 29 32 | 
             
                        #
         | 
| @@ -6,10 +6,10 @@ module Fortitude | |
| 6 6 | 
             
                  def call(template, &block)
         | 
| 7 7 | 
             
                    require_dependency template.identifier
         | 
| 8 8 | 
             
                    widget_class_name = "views/#{template.identifier =~ %r(views/([^.]*)(\..*)?\.rb) && $1}".camelize
         | 
| 9 | 
            -
                    is_partial = File.basename(template.identifier) =~ /^_/
         | 
| 9 | 
            +
                    is_partial = !! (File.basename(template.identifier) =~ /^_/)
         | 
| 10 10 |  | 
| 11 11 | 
             
                    <<-SRC
         | 
| 12 | 
            -
                    Fortitude::Rails::Renderer.render(#{widget_class_name}, self, local_assigns) { |*args| yield *args }
         | 
| 12 | 
            +
                    Fortitude::Rails::Renderer.render(#{widget_class_name}, self, local_assigns, #{is_partial.inspect}) { |*args| yield *args }
         | 
| 13 13 | 
             
                    SRC
         | 
| 14 14 | 
             
                  end
         | 
| 15 15 |  | 
| @@ -20,4 +20,19 @@ module Fortitude | |
| 20 20 | 
             
              end
         | 
| 21 21 | 
             
            end
         | 
| 22 22 |  | 
| 23 | 
            -
            ActionView::Template. | 
| 23 | 
            +
            ::ActionView::Template.class_eval do
         | 
| 24 | 
            +
              class << self
         | 
| 25 | 
            +
                def _fortitude_register_template_handler!
         | 
| 26 | 
            +
                  register_template_handler_without_fortitude(:rb, Fortitude::Rails::TemplateHandler.new)
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                def register_template_handler_with_fortitude(*args, &block)
         | 
| 30 | 
            +
                  register_template_handler_without_fortitude(*args, &block)
         | 
| 31 | 
            +
                  ActionView::Template._fortitude_register_template_handler!
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                alias_method_chain :register_template_handler, :fortitude
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
            end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            ActionView::Template._fortitude_register_template_handler!
         | 
| @@ -1,4 +1,5 @@ | |
| 1 1 | 
             
            require 'fortitude/support/instance_variable_set'
         | 
| 2 | 
            +
            require 'fortitude/tags/render_widget_placeholder'
         | 
| 2 3 |  | 
| 3 4 | 
             
            module Fortitude
         | 
| 4 5 | 
             
              class RenderingContext
         | 
| @@ -66,9 +67,14 @@ module Fortitude | |
| 66 67 | 
             
                  !! @attribute_validation_disabled
         | 
| 67 68 | 
             
                end
         | 
| 68 69 |  | 
| 70 | 
            +
                def record_render(args, &block)
         | 
| 71 | 
            +
                  record_widget(::Fortitude::Tags::RenderWidgetPlaceholder.new(args), &block)
         | 
| 72 | 
            +
                end
         | 
| 73 | 
            +
             | 
| 69 74 | 
             
                def record_widget(widget)
         | 
| 70 75 | 
             
                  start_widget!(widget)
         | 
| 71 76 | 
             
                  @current_widget_nesting << widget
         | 
| 77 | 
            +
                  @current_element_nesting << widget
         | 
| 72 78 | 
             
                  begin
         | 
| 73 79 | 
             
                    yield
         | 
| 74 80 | 
             
                  ensure
         | 
| @@ -76,6 +82,10 @@ module Fortitude | |
| 76 82 | 
             
                    unless last.equal?(widget)
         | 
| 77 83 | 
             
                      raise "Something horrible happened -- the last widget we started was #{last}, but now we're ending #{widget}?!?"
         | 
| 78 84 | 
             
                    end
         | 
| 85 | 
            +
                    last = @current_element_nesting.pop
         | 
| 86 | 
            +
                    unless last.equal?(widget)
         | 
| 87 | 
            +
                      raise "Something horrible happened -- the last element we started was #{last}, but now we're ending #{widget}?!?"
         | 
| 88 | 
            +
                    end
         | 
| 79 89 | 
             
                    end_widget!(widget)
         | 
| 80 90 | 
             
                  end
         | 
| 81 91 | 
             
                end
         | 
| @@ -92,8 +102,12 @@ module Fortitude | |
| 92 102 | 
             
                  @current_widget_nesting.length - 1
         | 
| 93 103 | 
             
                end
         | 
| 94 104 |  | 
| 95 | 
            -
                def  | 
| 96 | 
            -
                   | 
| 105 | 
            +
                def parent_widget
         | 
| 106 | 
            +
                  @current_widget_nesting[-2]
         | 
| 107 | 
            +
                end
         | 
| 108 | 
            +
             | 
| 109 | 
            +
                def emitting_tag!(widget, tag_object, content_or_attributes, attributes)
         | 
| 110 | 
            +
                  validate_element_for_rules(widget, tag_object) if widget.class.enforce_element_nesting_rules
         | 
| 97 111 | 
             
                  @current_element_nesting << tag_object
         | 
| 98 112 |  | 
| 99 113 | 
             
                  begin
         | 
| @@ -106,6 +120,10 @@ module Fortitude | |
| 106 120 | 
             
                  end
         | 
| 107 121 | 
             
                end
         | 
| 108 122 |  | 
| 123 | 
            +
                def current_element_nesting
         | 
| 124 | 
            +
                  @current_element_nesting
         | 
| 125 | 
            +
                end
         | 
| 126 | 
            +
             | 
| 109 127 | 
             
                def format_output?
         | 
| 110 128 | 
             
                  true
         | 
| 111 129 | 
             
                end
         | 
| @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            module Fortitude
         | 
| 2 | 
            +
              module Tags
         | 
| 3 | 
            +
                class RenderWidgetPlaceholder
         | 
| 4 | 
            +
                  attr_reader :render_args
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                  def initialize(render_args)
         | 
| 7 | 
            +
                    @render_args = render_args
         | 
| 8 | 
            +
                  end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  def name
         | 
| 11 | 
            +
                    :_fortitude_render_widget_placeholder
         | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  def validate_can_enclose!(widget, tag_object)
         | 
| 15 | 
            +
                    # nothing here, always OK
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
            end
         | 
    
        data/lib/fortitude/tags/tag.rb
    CHANGED
    
    | @@ -116,7 +116,9 @@ module Fortitude | |
| 116 116 | 
             
                  end
         | 
| 117 117 |  | 
| 118 118 | 
             
                  def define_method_on!(mod, options = {})
         | 
| 119 | 
            -
                    options.assert_valid_keys( | 
| 119 | 
            +
                    options.assert_valid_keys(
         | 
| 120 | 
            +
                      :record_emitting_tag, :enforce_attribute_rules, :enable_formatting,
         | 
| 121 | 
            +
                      :enforce_id_uniqueness, :close_void_tags)
         | 
| 120 122 |  | 
| 121 123 | 
             
                    unless mod.respond_to?(:fortitude_tag_support_included?) && mod.fortitude_tag_support_included?
         | 
| 122 124 | 
             
                      mod.send(:include, ::Fortitude::Tags::TagSupport)
         | 
| @@ -147,8 +149,8 @@ module Fortitude | |
| 147 149 | 
             
                    end
         | 
| 148 150 |  | 
| 149 151 | 
             
                    text = Fortitude::MethodTemplates::SimpleTemplate.template('tag_method_template').result(
         | 
| 150 | 
            -
                      :name => name.to_s, :method_name =>  | 
| 151 | 
            -
                      : | 
| 152 | 
            +
                      :name => name.to_s, :method_name => generated_method_name.to_s, :yield_call => yield_call, :concat_method => CONCAT_METHOD,
         | 
| 153 | 
            +
                      :record_emitting_tag => (!! options[:record_emitting_tag]),
         | 
| 152 154 | 
             
                      :needs_attribute_rules => !! options[:enforce_attribute_rules],
         | 
| 153 155 | 
             
                      :needs_id_uniqueness => !! options[:enforce_id_uniqueness],
         | 
| 154 156 | 
             
                      :needs_formatting => needs_formatting, :content_allowed => @content_allowed,
         | 
| @@ -160,7 +162,19 @@ module Fortitude | |
| 160 162 | 
             
                      :partial_open_alone_end_const => tag_constant_name(:PARTIAL_OPEN_ALONE_END))
         | 
| 161 163 |  | 
| 162 164 | 
             
                    mod.module_eval(text)
         | 
| 163 | 
            -
                    mod.alias_method( | 
| 165 | 
            +
                    aliased_method_names.each { |an| mod.alias_method(an, generated_method_name) }
         | 
| 166 | 
            +
                  end
         | 
| 167 | 
            +
             | 
| 168 | 
            +
                  def generated_method_name
         | 
| 169 | 
            +
                    "tag_#{name}"
         | 
| 170 | 
            +
                  end
         | 
| 171 | 
            +
             | 
| 172 | 
            +
                  def aliased_method_names
         | 
| 173 | 
            +
                    [ name ]
         | 
| 174 | 
            +
                  end
         | 
| 175 | 
            +
             | 
| 176 | 
            +
                  def all_method_names
         | 
| 177 | 
            +
                    [ generated_method_name ] + aliased_method_names
         | 
| 164 178 | 
             
                  end
         | 
| 165 179 |  | 
| 166 180 | 
             
                  private
         | 
| @@ -2,7 +2,7 @@ require 'fortitude/errors' | |
| 2 2 |  | 
| 3 3 | 
             
            module Fortitude
         | 
| 4 4 | 
             
              module Tags
         | 
| 5 | 
            -
                TAG_RETURN_VALUE_SUPERCLASS =  | 
| 5 | 
            +
                TAG_RETURN_VALUE_SUPERCLASS = ::Object
         | 
| 6 6 |  | 
| 7 7 | 
             
                class TagReturnValue < TAG_RETURN_VALUE_SUPERCLASS
         | 
| 8 8 | 
             
                  def method_missing(name, *args)
         |