Class: Autotype::UniversalHelperRegistry
- Inherits:
-
Object
- Object
- Autotype::UniversalHelperRegistry
- Defined in:
- lib/autotype/engine.rb
Instance Method Summary collapse
- #apply_names!(names) ⇒ Object
-
#collisions(names) ⇒ Object
Clusters of distinct definitions that would receive the same normalized name.
- #definitions ⇒ Object
-
#initialize(methods) ⇒ UniversalHelperRegistry
constructor
A new instance of UniversalHelperRegistry.
- #normalize_semantic_name(name) ⇒ Object
- #occurrence(method, receiver) ⇒ Object
- #occurrences_for(method) ⇒ Object
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 |
#definitions ⇒ Object
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 |