Class: Traduki::Generator

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeGenerator

Returns a new instance of Generator.



11
12
13
14
15
# File 'lib/traduki/generator.rb', line 11

def initialize
  @parser  = Parser.new.parse
  @garbage = []
  @translations = []
end

Instance Attribute Details

#garbageObject (readonly)

Returns the value of attribute garbage.



9
10
11
# File 'lib/traduki/generator.rb', line 9

def garbage
  @garbage
end

#parserObject (readonly)

Returns the value of attribute parser.



8
9
10
# File 'lib/traduki/generator.rb', line 8

def parser
  @parser
end

Instance Method Details

#cleanObject



83
84
85
86
87
88
89
90
91
# File 'lib/traduki/generator.rb', line 83

def clean
  @translations.each do |t|
    t.clean
    t.save
  end
  @garbage.each { |f| FileUtils.rm_rf f }
  clean_empty_dirs
  true
end

#clean_empty_dirsObject



66
67
68
69
70
# File 'lib/traduki/generator.rb', line 66

def clean_empty_dirs
  Dir[Traduki.config.langdir + '/*']
    .select { |d| File.directory? d } \
    .each { |d| rmdir_r_empty d }
end

#config?(path) ⇒ Boolean

Returns:

  • (Boolean)


93
94
95
96
97
# File 'lib/traduki/generator.rb', line 93

def config?(path)
  p = path.clone
  p.slice! Traduki.config.langdir
  p == '/traduki.json'
end

#empty?(dir) ⇒ Boolean

Returns:

  • (Boolean)


99
100
101
102
103
104
# File 'lib/traduki/generator.rb', line 99

def empty?(dir)
  entries = Dir.entries(dir)
  flag    = true
  entries.map! { |c| flag = false unless c.start_with? '.' }
  flag || Dir.empty?(dir)
end

#generate(clean = false) ⇒ Object



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

def generate(clean = false)
  Traduki.config.languages.each do |lang|
    trans = Translation[lang]
    @parser.keys.each do |path, metas|
      metas.each do |meta|
        trans.add(meta[0], path, meta[1], meta[2])
      end
    end
    trans.clean if clean
    trans.save
  end
  Traduki.config.create_internal_config unless @parser.keys.count.zero?
end

#multi_file_mode_scanObject



46
47
48
49
# File 'lib/traduki/generator.rb', line 46

def multi_file_mode_scan
  scan_files_outside
  scan_files_inside
end

#need_clean?Boolean

Returns:

  • (Boolean)


106
107
108
# File 'lib/traduki/generator.rb', line 106

def need_clean?
  @garbage.count > 0
end

#rmdir_r_empty(dir) ⇒ Object



72
73
74
75
76
77
78
79
80
81
# File 'lib/traduki/generator.rb', line 72

def rmdir_r_empty(dir)
  if empty? dir
    FileUtils.rm_rf dir
  else
    Dir[dir + '/*']
      .select { |d| File.directory? d } \
      .each { |d| rmdir_r_empty d }
    FileUtils.rm_rf dir if empty? dir
  end
end

#scanObject

DANGEROUS!! MUST call ‘generate` before clean, or all files will be removed!



32
33
34
# File 'lib/traduki/generator.rb', line 32

def scan
  single_file_mode_scan
end

#scan_files_insideObject



51
52
53
54
55
56
57
58
59
60
# File 'lib/traduki/generator.rb', line 51

def scan_files_inside
  Traduki.config.languages.each do |lang|
    Dir[Traduki.config.langdir + "/#{lang}/**/*"].each do |path|
      next if File.directory? path
      key = path.clone
      key.slice!(Traduki.config.langdir + "/#{lang}/")
      @garbage.push path unless @parser.keys.key? key.path
    end
  end
end

#scan_files_outsideObject



62
63
64
# File 'lib/traduki/generator.rb', line 62

def scan_files_outside
  Dir[Traduki.config.langdir + '/*.*'].each { |p| @garbage.push p unless config? p }
end

#single_file_mode_scanObject



36
37
38
39
40
41
42
43
44
# File 'lib/traduki/generator.rb', line 36

def single_file_mode_scan
  Dir[Traduki.config.langdir + '/**/*'].each do |path|
    next if !File.directory?(path) && (
              Traduki.config.languages.include?(File.basename(path, '.json')) ||
                File.basename(path, '.json') == 'metadata'
    )
    @garbage.push path unless config? path
  end
end