Class: Translator::FilesListCoordinator

Inherits:
Object
  • Object
show all
Defined in:
lib/nexmo_developer/app/services/translator/files_list_coordinator.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(days:) ⇒ FilesListCoordinator

Returns a new instance of FilesListCoordinator.



7
8
9
# File 'lib/nexmo_developer/app/services/translator/files_list_coordinator.rb', line 7

def initialize(days:)
  @days = days
end

Class Method Details

.call(attrs = {}) ⇒ Object



3
4
5
# File 'lib/nexmo_developer/app/services/translator/files_list_coordinator.rb', line 3

def self.call(attrs = {})
  new(attrs).call
end

Instance Method Details

#allowed_productsObject



63
64
65
# File 'lib/nexmo_developer/app/services/translator/files_list_coordinator.rb', line 63

def allowed_products
  @allowed_products ||= YAML.safe_load(File.read("#{Rails.configuration.docs_base_path}/config/products.yml"))['products'].select { |product| product['translate'] == true }
end

#allowed_tutorial_filesObject



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/nexmo_developer/app/services/translator/files_list_coordinator.rb', line 67

def allowed_tutorial_files
  file_names = []
  tutorials_list = []

  TutorialList.all.each do |item|
    allowed_products.each do |product|
      tutorials_list << item if item.products.to_s.include?(product['path'])
    end
  end

  tutorials_list.each do |item|
    item.tutorial.prerequisites&.each do |prereq|
      file_names << prereq.path
    end

    item.tutorial.tasks&.each do |task|
      file_names << task.path
    end
  end

  file_names.uniq
end

#callObject



11
12
13
# File 'lib/nexmo_developer/app/services/translator/files_list_coordinator.rb', line 11

def call
  process_files(files)
end

#filesObject



15
16
17
# File 'lib/nexmo_developer/app/services/translator/files_list_coordinator.rb', line 15

def files
  @files ||= `(git fetch origin main:main) && (git log --since="#{@days} days" --name-only --oneline --diff-filter=ACM --pretty=format: main #{Rails.configuration.docs_base_path}/_documentation/en #{Rails.configuration.docs_base_path}/_tutorials/en #{Rails.configuration.docs_base_path}/_use_cases/en) | uniq | awk 'NF'`.split("\n")
end

#process_files(files) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/nexmo_developer/app/services/translator/files_list_coordinator.rb', line 19

def process_files(files)
  files.each_with_object([]) do |file, list|
    if file.include?('_documentation')
      list << file if translatable_doc_file?(file)
    elsif file.include?('_use_cases')
      list << file if translatable_use_case_file?(file)
    elsif file.include?('_tutorials')
      list << file if translatable_tutorial_file?(file)
    else
      raise ArgumentError, "The following file did not match documentation, use cases or tutorials: #{file}"
    end
  end
end

#translatable_doc_file?(file) ⇒ Boolean

Returns:

  • (Boolean)


33
34
35
36
37
38
39
# File 'lib/nexmo_developer/app/services/translator/files_list_coordinator.rb', line 33

def translatable_doc_file?(file)
  return nil unless File.exist?("#{Rails.configuration.docs_base_path}/#{file}")

  allowed_products.any? do |product|
    product['path'].include?(file.split('/')[2])
  end
end

#translatable_tutorial_file?(file) ⇒ Boolean

Returns:

  • (Boolean)


55
56
57
58
59
60
61
# File 'lib/nexmo_developer/app/services/translator/files_list_coordinator.rb', line 55

def translatable_tutorial_file?(file)
  return nil unless File.exist?("#{Rails.configuration.docs_base_path}/#{file}")

  allowed_tutorial_files.any? do |tutorial|
    tutorial.include?(file)
  end
end

#translatable_use_case_file?(file) ⇒ Boolean

Returns:

  • (Boolean)


41
42
43
44
45
46
47
# File 'lib/nexmo_developer/app/services/translator/files_list_coordinator.rb', line 41

def translatable_use_case_file?(file)
  return nil unless File.exist?("#{Rails.configuration.docs_base_path}/#{file}")

  allowed_products.any? do |product|
    use_case_product(file).include?(product['path'])
  end
end

#use_case_product(file) ⇒ Object



49
50
51
52
53
# File 'lib/nexmo_developer/app/services/translator/files_list_coordinator.rb', line 49

def use_case_product(file)
  @use_case_product = YAML.safe_load(File.read("#{Rails.configuration.docs_base_path}/#{file}"))['products']

  @use_case_product
end