benedikt/tempo

View on GitHub
lib/tempo/standard_helper_resolver.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'tempo/helper_utilities'
require 'tempo/helper_resolver'

module Tempo
  class StandardHelperResolver < HelperResolver
    class Each
      extend Tempo::HelperUtilities

      def self.call(collection, options)
        if present?(collection) && map?(collection)
          collection.enum_for(:each).each_with_index.map do |(key, value), index|
            yield value, { 'index' => index, 'key' => key }
          end.join
        elsif present?(collection) && collection?(collection)
          enumerator = collection.enum_for(:each)
          last_index = enumerator.count - 1
          enumerator.each_with_index.map do |element, index|
            yield element, { 'index' => index, 'first' => index == 0, 'last' => index == last_index }
          end.join
        else
          yield :inverse
        end
      end
    end

    class If
      extend Tempo::HelperUtilities

      def self.call(condition, options)
        present?(condition) ? yield : yield(:inverse)
      end
    end

    class Unless
      extend Tempo::HelperUtilities

      def self.call(condition, options)
        blank?(condition) ? yield : yield(:inverse)
      end
    end

    class With
      def self.call(object, options)
        yield object
      end
    end

    class Log
      def initialize(output = STDOUT)
        @output = output
      end

      def call(message, options)
        @output.puts(message)
      end
    end

    def initialize
      register(:each, Each)
      register(:if, If)
      register(:unless, Unless)
      register(:with, With)
      register(:log, Log.new)
    end
  end
end