Sha256: 3ebc4581091c5e8a8f0e9fe7435991b26f4b52d124ce27744f21196260b02711

Contents?: true

Size: 728 Bytes

Versions: 2

Compression:

Stored size: 728 Bytes

Contents

module ActionPresenter
  module ViewHelper
    extend ActiveSupport::Concern

    included do
      helper_method :present
    end

    def present(object, klass = nil)
      klass ||= presenter_name object
      object = object.last if object.is_a? Array

      presenter = klass.new(object, view_context)

      return yield presenter if block_given?
      presenter
    end

  private

    def presenter_name(scope)
      "#{klass_name(scope)}Presenter".constantize
    end

    def klass_name(scope)
      return scope.class.to_s unless scope.is_a? Array
      return scope.first.class.to_s if scope.length == 1

      scope.map do |s|
        s.is_a?(Symbol) ? s.capitalize : s.class
      end.join('::')
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
action_presenter-1.1.3 lib/action_presenter/view_helper.rb
action_presenter-1.1.2 lib/action_presenter/view_helper.rb