Sha256: 72a255713167765ce8d3cd0a875cc8888e4b811d9afa6ffc71c57e12082b4e2e

Contents?: true

Size: 1.75 KB

Versions: 22

Compression:

Stored size: 1.75 KB

Contents

require 'active_support'
require 'active_support/concern'

require 'fortitude/rails/yielded_object_outputter'

module Fortitude
  class Widget
    module Helpers
      extend ActiveSupport::Concern

      # PUBLIC API
      def invoke_helper(name, *args, &block)
        @_fortitude_rendering_context.helpers_object.send(name, *args, &block)
      end

      module ClassMethods
        # PUBLIC API
        def helper(*args)
          options = args.extract_options!
          options.assert_valid_keys(:transform, :call, :output_yielded_methods)

          args.each do |name|
            source_method_name = options[:call] || name

            prefix = "return"
            suffix = ""
            case (transform = options[:transform])
            when :output_return_value
              prefix = "text"
              suffix = "; nil"
            when :return_output
              prefix = "return capture { "
              suffix = " }"
            when :none, nil, false then nil
            else raise ArgumentError, "Invalid value for :transform: #{transform.inspect}"
            end

            block_transform = "effective_block = block"

            yielded_methods = options[:output_yielded_methods]
            if yielded_methods
              block_transform = <<-EOS
      effective_block = lambda do |yielded_object|
        block.call(Fortitude::Rails::YieldedObjectOutputter.new(self, yielded_object, #{yielded_methods.inspect}))
      end
EOS
            end

            text = <<-EOS
    def #{name}(*args, &block)
      #{block_transform}
      #{prefix}(@_fortitude_rendering_context.helpers_object.#{source_method_name}(*args, &effective_block))#{suffix}
    end
EOS

            helpers_module.module_eval(text)
          end
        end
      end
    end
  end
end

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
fortitude-0.9.3-java lib/fortitude/widget/helpers.rb
fortitude-0.9.3 lib/fortitude/widget/helpers.rb
fortitude-0.9.2-java lib/fortitude/widget/helpers.rb
fortitude-0.9.2 lib/fortitude/widget/helpers.rb
fortitude-0.9.1-java lib/fortitude/widget/helpers.rb
fortitude-0.9.1 lib/fortitude/widget/helpers.rb
fortitude-0.9.0-java lib/fortitude/widget/helpers.rb
fortitude-0.9.0 lib/fortitude/widget/helpers.rb
fortitude-0.0.10-java lib/fortitude/widget/helpers.rb
fortitude-0.0.10 lib/fortitude/widget/helpers.rb
fortitude-0.0.9-java lib/fortitude/widget/helpers.rb
fortitude-0.0.9 lib/fortitude/widget/helpers.rb
fortitude-0.0.7-java lib/fortitude/widget/helpers.rb
fortitude-0.0.7 lib/fortitude/widget/helpers.rb
fortitude-0.0.6-java lib/fortitude/widget/helpers.rb
fortitude-0.0.6 lib/fortitude/widget/helpers.rb
fortitude-0.0.5-java lib/fortitude/widget/helpers.rb
fortitude-0.0.5 lib/fortitude/widget/helpers.rb
fortitude-0.0.4-java lib/fortitude/widget/helpers.rb
fortitude-0.0.4 lib/fortitude/widget/helpers.rb