Class: ApiScaffold::Generators::ModifyApiRootGenerator

Inherits:
Rails::Generators::NamedBase
  • Object
show all
Includes:
Helper
Defined in:
lib/generators/api_scaffold/modify_api_root_generator.rb

Instance Method Summary collapse

Methods included from Helper

#api_address, #api_description, #api_version_module, #api_version_module_with_prefix, #class_prefix, #controller_class, #entity_class, #entity_class_name, #entity_module_with_prefix, #model

Instance Method Details

#add_mount_line_to_api_rootObject



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/generators/api_scaffold/modify_api_root_generator.rb', line 11

def add_mount_line_to_api_root
  # строка, которую нужно вставить
  line = "mount API#{api_version_module_with_prefix}::#{controller_class}"

  # шаблон для поиска в файле root
  pattern = "mount API#{api_version_module_with_prefix}::"

  # строка, после которой нужно вставить
  sentinel = find_root_line(pattern, controller_class) || '# API'
  regex = /(#{Regexp.escape(sentinel.force_encoding(Encoding::BINARY))})/mi

  # вставка новой строки
  tabs = "\n" + (' ' * 6)
  modify_api_root(regex, tabs, line)
end

#add_swagger_line_to_api_rootObject



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/generators/api_scaffold/modify_api_root_generator.rb', line 27

def add_swagger_line_to_api_root
  # строка, которую нужно вставить
  line = "{ name: '#{api_address}', title: '#{api_address}', description: '#{api_description}' },"

  # шаблон для поиска в файле root
  pattern = "{ name: '"

  # строка, после которой нужно вставить
  sentinel = find_root_line(pattern, api_address) || 'tags: ['
  regex = /(#{Regexp.escape(sentinel.force_encoding(Encoding::BINARY))})/mi

  # проверка на то, является вставляемая строка первой либо уже содержит запятую
  # если нет - в конце предыдущей нужно поставить запятую
  if sentinel != 'tags: [' && sentinel.last != ','
    # вставка запятой на предыдущей строке
    modify_api_root(regex, '', ',')

    # изменение регулярного выражения предыдущей строки
    sentinel += ','
    regex = /(#{Regexp.escape(sentinel.force_encoding(Encoding::BINARY))})/mi
  end

  # вставка новой строки
  tabs = "\n" + (' ' * 10)
  modify_api_root(regex, tabs, line)
end