urbane 0.0.1 → 0.1.0
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.
- data/README.md +2 -7
- data/lib/urbane/version.rb +1 -1
- data/lib/urbane.rb +20 -1
- data/test/urbane_test.rb +36 -9
- data/urbane.gemspec +1 -0
- metadata +22 -11
data/README.md
CHANGED
@@ -37,12 +37,7 @@ directory as JSON files. It uses the googles JSON api as opposed to the XML api.
|
|
37
37
|
|
38
38
|
## Output format
|
39
39
|
|
40
|
-
|
41
|
-
|
42
|
-
{
|
43
|
-
"sun_intro_step2"=>"Build another one…",
|
44
|
-
"sun_intro_step3"=>"... and another one."
|
45
|
-
}
|
40
|
+
Support for YAML, JSON and XML
|
46
41
|
|
47
42
|
## Output structure
|
48
43
|
|
@@ -65,4 +60,4 @@ For now it needs to have a certain format. Check the [demo document](https://doc
|
|
65
60
|
2. Click on File -> Publish To The Web
|
66
61
|
3. Check 'Automatically republish when changes are made'
|
67
62
|
4. Find the spreadsheet id in the generated link. It is marked with 'key='. In the following url, the key would be '0Auo5c2PWMqR4dHlOSjlXcjY0X01udzNPdHlKZ09QTVE': https://docs.google.com/spreadsheet/pub?hl=en_US&hl=en_US&key=0Auo5c2PWMqR4dHlOSjlXcjY0X01udzNPdHlKZ09QTVE&output=html
|
68
|
-
5. Click on the close button
|
63
|
+
5. Click on the close button
|
data/lib/urbane/version.rb
CHANGED
data/lib/urbane.rb
CHANGED
@@ -1,11 +1,29 @@
|
|
1
1
|
require "urbane/version"
|
2
2
|
require "urbane/vendor/ordered_hash"
|
3
3
|
require "json"
|
4
|
+
require "yaml"
|
5
|
+
require "nokogiri"
|
4
6
|
require "open-uri"
|
5
7
|
|
6
8
|
module Urbane
|
7
9
|
class Generator
|
8
10
|
|
11
|
+
GENERATORS = {
|
12
|
+
:json => lambda{|content| JSON.pretty_generate(content)},
|
13
|
+
:yaml => lambda{|content| content.to_yaml},
|
14
|
+
:xml => lambda do |content|
|
15
|
+
builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
|
16
|
+
xml.send('resource-bundle', 'xmlns' => '',
|
17
|
+
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance') do
|
18
|
+
content.each do |key, translation|
|
19
|
+
xml.resource(translation, 'key' => key)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
builder.to_xml(:indent => 2, :encoding => 'UTF-8')
|
24
|
+
end
|
25
|
+
}
|
26
|
+
|
9
27
|
def initialize(options)
|
10
28
|
@target_dir = options[:target_dir]
|
11
29
|
@spreadsheet_id = options[:spreadsheet_id]
|
@@ -13,6 +31,7 @@ module Urbane
|
|
13
31
|
@language_locale_map = options[:languages]
|
14
32
|
@languages = @language_locale_map.keys
|
15
33
|
@fallback_language = options[:fallback_language]
|
34
|
+
@format = options[:format] || :json
|
16
35
|
end
|
17
36
|
|
18
37
|
def run
|
@@ -35,7 +54,7 @@ module Urbane
|
|
35
54
|
@language_locale_map.each do |language, locale|
|
36
55
|
`mkdir -p #{@target_dir}/#{locale}`
|
37
56
|
File.open("#{@target_dir}/#{locale}/#{@file_name_for_translation_file}", 'w') do |f|
|
38
|
-
f.write
|
57
|
+
f.write GENERATORS[@format].call(sorted_hash_for_language(language))
|
39
58
|
end
|
40
59
|
end
|
41
60
|
end
|
data/test/urbane_test.rb
CHANGED
@@ -1,9 +1,18 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
require 'test_helper'
|
3
3
|
|
4
|
+
FIXTURE_FILE_PATH = File.join('test', 'fixtures')
|
5
|
+
TARGET_DIR = File.join('/tmp', 'translation_generator_test')
|
6
|
+
|
7
|
+
def read_file(path)
|
8
|
+
File.open(File.join(TARGET_DIR, path), "r"){ |f| f.read }
|
9
|
+
end
|
10
|
+
|
11
|
+
def read_json_file(path)
|
12
|
+
JSON.parse(read_file(path))
|
13
|
+
end
|
14
|
+
|
4
15
|
class Urbane::GeneratorTest < Test::Unit::TestCase
|
5
|
-
FIXTURE_FILE_PATH = File.join('test', 'fixtures')
|
6
|
-
TARGET_DIR = File.join('/tmp', 'translation_generator_test')
|
7
16
|
|
8
17
|
context 'generator' do
|
9
18
|
setup do
|
@@ -33,17 +42,17 @@ class Urbane::GeneratorTest < Test::Unit::TestCase
|
|
33
42
|
:spanish => 'es',
|
34
43
|
:portuguese => 'pt'
|
35
44
|
},
|
36
|
-
:fallback_language => :english
|
45
|
+
:fallback_language => :english,
|
46
|
+
:format => :json
|
37
47
|
}
|
38
|
-
|
39
|
-
@generator.run
|
40
|
-
end
|
48
|
+
end
|
41
49
|
|
42
50
|
teardown do
|
43
51
|
FileUtils.rm_rf(TARGET_DIR)
|
44
52
|
end
|
45
53
|
|
46
54
|
should 'create a folder and a document for each locale' do
|
55
|
+
Urbane::Generator.new(@options).run
|
47
56
|
@options[:languages].values.each do |locale|
|
48
57
|
expected_file = File.join(TARGET_DIR, locale,'text_ids.json')
|
49
58
|
assert File.exists?(expected_file), "file #{expected_file} should exist"
|
@@ -51,14 +60,32 @@ class Urbane::GeneratorTest < Test::Unit::TestCase
|
|
51
60
|
end
|
52
61
|
|
53
62
|
should 'fall back if a key is empty' do
|
54
|
-
|
55
|
-
|
63
|
+
Urbane::Generator.new(@options).run
|
64
|
+
info_hash_fr = read_json_file(File.join('fr', 'text_ids.json'))
|
65
|
+
info_hash_us = read_json_file(File.join('en', 'text_ids.json'))
|
56
66
|
assert_equal info_hash_us['sun_intro_step2'], info_hash_fr['sun_intro_step2']
|
57
67
|
end
|
58
68
|
|
59
69
|
should 'handle special chars' do
|
60
|
-
|
70
|
+
Urbane::Generator.new(@options).run
|
71
|
+
info_hash_de = read_json_file(File.join('de', 'text_ids.json'))
|
61
72
|
assert info_hash_de['sun_intro_step2'].include?('äÄö')
|
62
73
|
end
|
74
|
+
|
75
|
+
# How do I test this? JSON is a subset of YAML, so most JSON will actually
|
76
|
+
# be valid YAML
|
77
|
+
should 'support yaml output' do
|
78
|
+
@options[:format] = :yaml
|
79
|
+
@options[:file_name] = 'text_ids.yml'
|
80
|
+
Urbane::Generator.new(@options).run
|
81
|
+
assert YAML.load(read_file(File.join('en', 'text_ids.yml')));
|
82
|
+
end
|
83
|
+
|
84
|
+
should 'support xml' do
|
85
|
+
@options[:format] = :xml
|
86
|
+
@options[:file_name] = 'text_ids.xml'
|
87
|
+
Urbane::Generator.new(@options).run
|
88
|
+
assert Nokogiri::XML(read_file(File.join('en', 'text_ids.xml')));
|
89
|
+
end
|
63
90
|
end
|
64
91
|
end
|
data/urbane.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: urbane
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2011-10-07 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mocha
|
16
|
-
requirement: &
|
16
|
+
requirement: &70150065933880 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70150065933880
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: shoulda-context
|
27
|
-
requirement: &
|
27
|
+
requirement: &70150065933200 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70150065933200
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: fakeweb
|
38
|
-
requirement: &
|
38
|
+
requirement: &70150065932440 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70150065932440
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rake
|
49
|
-
requirement: &
|
49
|
+
requirement: &70150065931700 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70150065931700
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: json
|
60
|
-
requirement: &
|
60
|
+
requirement: &70150065930840 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - =
|
@@ -65,7 +65,18 @@ dependencies:
|
|
65
65
|
version: 1.6.1
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70150065930840
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: nokogiri
|
71
|
+
requirement: &70150065930040 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - =
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 1.5.0
|
77
|
+
type: :runtime
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *70150065930040
|
69
80
|
description: Read google spreadsheet and generate translation files out of it
|
70
81
|
email:
|
71
82
|
- patrick.huesler@gmail.com
|