burek 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/config.rb +20 -0
- data/lib/core.rb +122 -0
- data/lib/parser.rb +33 -0
- data/lib/view_helpers.rb +9 -0
- data/tasks/tasks.rb +14 -0
- metadata +6 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4653799d775ca0a0ae0945f48b5a282e526d5120
|
4
|
+
data.tar.gz: 5f7e5d7b68e8ca25f7157e510bec70e106d46252
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f471eb47e0b74b6080ff164604dfab4bd3a39931fa12911046d02dd0c2ec1c4bdbbd861af1944640ed87a0e6fa0652e81a5fc0f9cb8c6f836617cc85a73d4a45
|
7
|
+
data.tar.gz: 0112684fb1d79e5dbeb9028ab97db82dc2d25dca3fbe05df68451865e21ece05fc8d9ae613f511035f1d569226cf749e7f79d856f1933b093590d1df8eceb432
|
data/lib/config.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
module Burek
|
2
|
+
|
3
|
+
@@config_hash = {
|
4
|
+
search_folders: ['./app/views/**/*'],
|
5
|
+
translations_path: './config/locales/burek/',
|
6
|
+
translation_placeholder: 'TODO',
|
7
|
+
ignore_folders_for_key: ['.','app'],
|
8
|
+
subfolder_depth: 2,
|
9
|
+
locales: ['en','fi']
|
10
|
+
}
|
11
|
+
|
12
|
+
def self.set_config(key, value)
|
13
|
+
@@config_hash[key] = value
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.config(key)
|
17
|
+
raise 'Unknown config key!' unless @@config_hash.has_key? key
|
18
|
+
@@config_hash[key]
|
19
|
+
end
|
20
|
+
end
|
data/lib/core.rb
ADDED
@@ -0,0 +1,122 @@
|
|
1
|
+
require 'config'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
module Burek
|
5
|
+
|
6
|
+
module Core
|
7
|
+
|
8
|
+
def self.key_to_file_path(key, locale)
|
9
|
+
path_parts = key.split("/")
|
10
|
+
path_parts.pop
|
11
|
+
|
12
|
+
translation_file = Burek.config(:translations_path)
|
13
|
+
path_parts.each_with_index do |item, index|
|
14
|
+
if index == Burek.config(:subfolder_depth) || item == path_parts.last
|
15
|
+
translation_file += "#{item}.#{locale}.yml"
|
16
|
+
break
|
17
|
+
else
|
18
|
+
translation_file += "/#{item}/"
|
19
|
+
unless File.directory?(translation_file)
|
20
|
+
Dir.mkdir(translation_file)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
return translation_file
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.filter_path(file_name)
|
28
|
+
path = file_name.split('/')
|
29
|
+
path.delete_if do |item|
|
30
|
+
Burek.config(:ignore_folders_for_key).include? item
|
31
|
+
end
|
32
|
+
path.last.gsub!(/\.(.*?)$/,'').gsub!(/^_/,'') #strip extenison from file name
|
33
|
+
return path.join('/')
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.run_burek
|
37
|
+
# Create translations folder if missing
|
38
|
+
unless File.directory?(Burek.config(:translations_path))
|
39
|
+
Dir.mkdir(Burek.config(:translations_path))
|
40
|
+
end
|
41
|
+
|
42
|
+
new_translations = {}
|
43
|
+
# Iterate all defined subfolders subfolders
|
44
|
+
for_each_file do |file_name|
|
45
|
+
File.open(file_name, "rb") do |file|
|
46
|
+
contents = file.read
|
47
|
+
|
48
|
+
filtered_path = Burek::Core.filter_path(file_name)
|
49
|
+
matches = Burek::Parser.find_burek_calls(contents)
|
50
|
+
matches.each do |value|
|
51
|
+
key = filtered_path + "/" + value.downcase.gsub(' ','_')
|
52
|
+
new_translations[key] = value
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
to_replace = {}
|
58
|
+
# Create files for each locale
|
59
|
+
Burek.config(:locales).each do |locale|
|
60
|
+
new_translations.each do |key,value|
|
61
|
+
path_parts = key.split("/")
|
62
|
+
item_name = path_parts.pop
|
63
|
+
path_parts_no_filename = path_parts[0..-2]
|
64
|
+
|
65
|
+
# Figure out file path
|
66
|
+
translation_file = Burek::Core.key_to_file_path(key, locale)
|
67
|
+
|
68
|
+
# Initialize translations hash
|
69
|
+
if File.exists?(translation_file)
|
70
|
+
translations_hash = YAML::load_file(translation_file) #Load
|
71
|
+
else
|
72
|
+
translations_hash = {}
|
73
|
+
translations_hash[locale.dup.force_encoding("UTF-8")] = {}
|
74
|
+
end
|
75
|
+
|
76
|
+
# Save info for replacing burek calls with translation calls
|
77
|
+
regular_translation_key = path_parts_no_filename.join('.') + ".#{item_name}"
|
78
|
+
to_replace[value] = regular_translation_key
|
79
|
+
|
80
|
+
# Nest in hashes
|
81
|
+
cur_hash = translations_hash[locale.dup.force_encoding("UTF-8")]
|
82
|
+
path_parts_no_filename.each do |item|
|
83
|
+
cur_hash[item] = {} unless cur_hash.has_key?(item)
|
84
|
+
cur_hash = cur_hash[item]
|
85
|
+
end
|
86
|
+
cur_hash[item_name] = ( locale == Burek.config(:locales).first ? value.dup.force_encoding("UTF-8") : Burek.config(:translation_placeholder) )
|
87
|
+
|
88
|
+
# Save to file
|
89
|
+
clean_yaml = Burek::Parser.yaml_to_i18n_file(translations_hash.to_yaml)
|
90
|
+
translation_file.gsub!("//","/")
|
91
|
+
File.write(translation_file, clean_yaml) #Store
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
# Replace all burek calls with regular translation calls
|
98
|
+
for_each_file do |file_name|
|
99
|
+
File.open(file_name, 'r') do |file|
|
100
|
+
content = file.read
|
101
|
+
processed_content = Burek::Parser.replace_burek_calls(content, to_replace)
|
102
|
+
unless processed_content.nil?
|
103
|
+
File.open(file_name, 'w') do |output_file|
|
104
|
+
output_file.print processed_content
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def self.for_each_file
|
112
|
+
Burek.config(:search_folders).each do |folder|
|
113
|
+
Dir.glob(folder) do |file_name|
|
114
|
+
unless File.directory?(file_name)
|
115
|
+
yield file_name
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
122
|
+
end
|
data/lib/parser.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
module Burek
|
2
|
+
|
3
|
+
module Parser
|
4
|
+
|
5
|
+
def self.find_burek_calls(string)
|
6
|
+
string.scan(burek_call_regex).flatten
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.replace_burek_calls(contents, to_replace)
|
10
|
+
matches = find_burek_calls(contents)
|
11
|
+
changes_made = false
|
12
|
+
matches.each do |value|
|
13
|
+
if to_replace.has_key?(value)
|
14
|
+
contents.gsub!(burek_call_regex(value)," t('#{to_replace[value]}')")
|
15
|
+
changes_made = true
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
return contents if changes_made
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.yaml_to_i18n_file(yaml)
|
23
|
+
yaml.lines.to_a[1..-1].join
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def self.burek_call_regex(caption="(?<key>[^\\)]*)")
|
29
|
+
Regexp.new("[^a-zA-Z0-9_]burek[ \\t]*\\([ \\t]*('|\")#{caption}\('|\")[^\\)]*\\)")
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
data/lib/view_helpers.rb
ADDED
data/tasks/tasks.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: burek
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Filip Defar
|
@@ -17,6 +17,11 @@ extensions: []
|
|
17
17
|
extra_rdoc_files: []
|
18
18
|
files:
|
19
19
|
- lib/burek.rb
|
20
|
+
- lib/config.rb
|
21
|
+
- lib/core.rb
|
22
|
+
- lib/parser.rb
|
23
|
+
- lib/view_helpers.rb
|
24
|
+
- tasks/tasks.rb
|
20
25
|
homepage: https://github.com/dabrorius/burek
|
21
26
|
licenses:
|
22
27
|
- MIT
|