Class: Autotype::UniversalHelperRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/autotype/engine.rb

Instance Method Summary collapse

Constructor Details

#initialize(methods) ⇒ UniversalHelperRegistry

Returns a new instance of UniversalHelperRegistry.



3036
3037
3038
3039
3040
3041
# File 'lib/autotype/engine.rb', line 3036

def initialize(methods)
  @occurrences = {}
  @definitions = {}
  methods.each { |method| register_method(method) }
  consolidate!
end

Instance Method Details

#apply_names!(names) ⇒ Object



3055
3056
3057
3058
3059
3060
# File 'lib/autotype/engine.rb', line 3055

def apply_names!(names)
  @definitions.each_value do |definition|
    semantic_name = normalize_semantic_name(names[definition.fetch(:id)])
    definition[:name] = semantic_name if semantic_name
  end
end

#collisions(names) ⇒ Object

Clusters of distinct definitions that would receive the same normalized name. The namer re-prompts these cluster by cluster until empty.



3064
3065
3066
3067
3068
# File 'lib/autotype/engine.rb', line 3064

def collisions(names)
  @definitions.each_value
    .group_by { |definition| normalize_semantic_name(names[definition.fetch(:id)]) }
    .select { |name, definitions| name && definitions.length > 1 }
end

#definitionsObject



3051
3052
3053
# File 'lib/autotype/engine.rb', line 3051

def definitions
  @definitions.values.sort_by { |definition| definition.fetch(:name) }
end

#normalize_semantic_name(name) ⇒ Object



3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
# File 'lib/autotype/engine.rb', line 3070

def normalize_semantic_name(name)
  return nil if name.to_s.empty?

  tokens = name.to_s.scan(/[A-Za-z0-9]+/)
  normalized = if tokens.length == 1
    tokens.first.sub(/\A[a-z]/, &:upcase)
  else
    tokens.map(&:capitalize).join
  end
  return nil if normalized.empty?

  normalized += "Able" unless normalized.match?(/(?:able|ible|ifiable|izable)\z/i)
  normalized
end

#occurrence(method, receiver) ⇒ Object



3043
3044
3045
# File 'lib/autotype/engine.rb', line 3043

def occurrence(method, receiver)
  @occurrences[[method.object_id, receiver]]
end

#occurrences_for(method) ⇒ Object



3047
3048
3049
# File 'lib/autotype/engine.rb', line 3047

def occurrences_for(method)
  @occurrences.filter_map { |(method_id, _), occurrence| occurrence if method_id == method.object_id }
end