Class: Generator::APINameResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/generator/resolvers/api_name_resolver.rb

Constant Summary collapse

FILENAME_BASED_DIRECTORIES =
Set.new([
  "external-fulfillment",
  "finances-api-model",
]).freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(file) ⇒ APINameResolver

Returns a new instance of APINameResolver.



37
38
39
# File 'lib/generator/resolvers/api_name_resolver.rb', line 37

def initialize(file)
  @file = file
end

Instance Attribute Details

#fileObject (readonly)

Returns the value of attribute file.



12
13
14
# File 'lib/generator/resolvers/api_name_resolver.rb', line 12

def file
  @file
end

Class Method Details

.extract_base_name(file) ⇒ Object



31
32
33
34
# File 'lib/generator/resolvers/api_name_resolver.rb', line 31

def extract_base_name(file)
  basename = File.basename(file, ".json")
  basename.sub(/[_-]\d{4}[-_]\d{2}[-_]\d{2}$/, "").sub(/V\d+$/, "")
end

.validate_no_unmapped_collisions!(api_files) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/generator/resolvers/api_name_resolver.rb', line 15

def validate_no_unmapped_collisions!(api_files)
  api_files_by_dir = api_files.group_by { |file| File.basename(File.dirname(file)) }

  api_files_by_dir.each do |dir_name, files|
    next if files.size == 1

    base_names = files.map { |file| extract_base_name(file) }.uniq

    next if base_names.size <= 1 || FILENAME_BASED_DIRECTORIES.include?(dir_name)

    file_list = files.map { |f| File.basename(f) }.join(", ")
    raise "Error: Found multiple APIs in directory '#{dir_name}' with different base names: #{file_list}. " \
      "Please add this directory to FILENAME_BASED_DIRECTORIES"
  end
end

Instance Method Details

#nameObject



41
42
43
44
45
46
47
# File 'lib/generator/resolvers/api_name_resolver.rb', line 41

def name
  if filename_based_directory?
    extract_name_from_filename
  else
    extract_name_from_directory
  end
end