Module: Pacer::FunctionResolver

Defined in:
lib/pacer/function_resolver.rb

Class Method Summary collapse

Class Method Details

.clear_cacheObject



4
5
6
# File 'lib/pacer/function_resolver.rb', line 4

def clear_cache
  @lookup_path = nil
end

.filter_mapObject



27
28
29
# File 'lib/pacer/function_resolver.rb', line 27

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

.function(args) ⇒ Object



8
9
10
11
12
13
14
15
16
# File 'lib/pacer/function_resolver.rb', line 8

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

.lookup_pathObject



18
19
20
21
22
23
24
25
# File 'lib/pacer/function_resolver.rb', line 18

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

.side_effect_mapObject



31
32
33
# File 'lib/pacer/function_resolver.rb', line 31

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

.symbolize_module_name(name) ⇒ Object



43
44
45
# File 'lib/pacer/function_resolver.rb', line 43

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

.transform_mapObject



39
40
41
# File 'lib/pacer/function_resolver.rb', line 39

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

.visitor_mapObject



35
36
37
# File 'lib/pacer/function_resolver.rb', line 35

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