Sha256: 0ab981b90db6509b648af624fbb1c8c107c26ef9f278117bab53681097e62a52

Contents?: true

Size: 1.4 KB

Versions: 37

Compression:

Stored size: 1.4 KB

Contents

module Pacer
  module FunctionResolver
    class << self
      def clear_cache
        @lookup_path = nil
      end

      def function(args)
        lookup_path.each do |key, map, extension|
          if value = args[key]
            function = map.fetch(value, value.is_a?(Module) && value)
            return [function, extension] if function
          end
        end
        []
      end

      def lookup_path
        @lookup_path ||= [
          [:filter, filter_map, nil],
          [:transform, transform_map, nil],
          [:side_effect, side_effect_map, Pacer::Core::SideEffect],
          [:visitor, visitor_map]
        ]
      end

      def filter_map
        Hash[Pacer::Filter.constants.map { |name| [symbolize_module_name(name), Pacer::Filter.const_get(name)] }]
      end

      def side_effect_map
        Hash[Pacer::SideEffect.constants.map { |name| [symbolize_module_name(name), Pacer::SideEffect.const_get(name)] }]
      end

      def visitor_map
        Hash[Pacer::Visitors.constants.map { |name| [symbolize_module_name(name), Pacer::Visitors.const_get(name)] }]
      end

      def transform_map
        Hash[Pacer::Transform.constants.map { |name| [symbolize_module_name(name), Pacer::Transform.const_get(name)] }]
      end

      def symbolize_module_name(name)
        name.to_s.sub(/(Filter|SideEffect|Transform)$/, '').gsub(/([a-z])([A-Z])/, "\\1_\\2").downcase.to_sym
      end
    end
  end
end

Version data entries

37 entries across 37 versions & 1 rubygems

Version Path
pacer-1.5.2-java lib/pacer/function_resolver.rb
pacer-1.5.1-java lib/pacer/function_resolver.rb
pacer-1.4.2-java lib/pacer/function_resolver.rb
pacer-1.4.1-java lib/pacer/function_resolver.rb
pacer-1.4.0-java lib/pacer/function_resolver.rb
pacer-1.3.5-java lib/pacer/function_resolver.rb
pacer-1.3.4-java lib/pacer/function_resolver.rb
pacer-1.3.3-java lib/pacer/function_resolver.rb
pacer-1.3.2-java lib/pacer/function_resolver.rb
pacer-1.3.1-java lib/pacer/function_resolver.rb
pacer-1.2.0-java lib/pacer/function_resolver.rb
pacer-1.1.1-java lib/pacer/function_resolver.rb
pacer-1.1.0-java lib/pacer/function_resolver.rb
pacer-1.0.3-java lib/pacer/function_resolver.rb
pacer-1.0.2-java lib/pacer/function_resolver.rb
pacer-1.0.1-java lib/pacer/function_resolver.rb
pacer-1.0.0-java lib/pacer/function_resolver.rb