bisu 1.6.0 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 26ffcf701edd984c84baed76e830e65220823f1d
4
- data.tar.gz: 6dbe37c9b9843a5ba581ffafe6fc1462e12e8296
3
+ metadata.gz: bed28be32f24a03d0e812b3ad88980911bd4d13a
4
+ data.tar.gz: 13f1165c2bf416965c75e24553f5f2672a91f1ec
5
5
  SHA512:
6
- metadata.gz: 2ce5fd404b32dade76d949895228f6f4d42936c74bfd94f3a728af616348bb8bb372cba87c25a225b1b49a25c2d93f1829375e90072def75337b3897b4e91ec2
7
- data.tar.gz: 1dae210c8331482902d0f680198ef5a0f0d84e5ec2e7f108c396a16567a1dfca8176e39814472c0e0e23fa8621cd5912d30f8f60085569e97b920d02b68b3923
6
+ metadata.gz: 2e4ebf64ac0b36be4fa1f058347a7029a676986289a216120bc22f680c9bbcdca545660017f2da39a2a6a05f822c3cf110820ce579d8c20f149fb16257e3adc3
7
+ data.tar.gz: fb3ce272578ae914ca44b785a456dec185c87435a0abba11c1debb328e2dec1909bdf2d2648b40dda9b0030d63283b28120d16ac22db95f3b2347c84e3da181f
@@ -2,6 +2,20 @@
2
2
  All notable changes to this project will be documented in this file.
3
3
  `Bisu` adheres to [Semantic Versioning](http://semver.org/).
4
4
 
5
+ ## [1.7.0](https://github.com/hole19/bisu/releases/tag/v1.7.0)
6
+ Released on 2019/02/18
7
+
8
+ #### Added
9
+ - Adds support for a dictionary source from generic URL
10
+
11
+ ## [1.6.0](https://github.com/hole19/bisu/releases/tag/v1.6.0)
12
+ Released on 2019/02/18
13
+
14
+ #### Added
15
+ - Merges changes from [Onfido's fork](https://github.com/onfido/bisu)
16
+ - Removes the restriction for keys to start with k
17
+ - Adds a strict mode to fail if there's any warning
18
+
5
19
  ## [1.5.0](https://github.com/hole19/bisu/releases/tag/v1.5.0)
6
20
  Released on 2019/01/19
7
21
 
data/README.md CHANGED
@@ -50,6 +50,13 @@ Configuration
50
50
  language: pt
51
51
  ```
52
52
 
53
+ Also available generic URL source:
54
+ ```
55
+ dictionary:
56
+ type: url
57
+ url: <A-GET-URL>
58
+ ```
59
+
53
60
  Also available [OneSky](https://www.oneskyapp.com) integration:
54
61
  ```
55
62
  dictionary:
@@ -1,27 +1,22 @@
1
1
  # supported types are iOS/Android/RoR
2
2
  type: iOS
3
3
 
4
- sheet_id: knownledge-base-sheet-id
5
- keys_column: column-with-translation-keys
4
+ dictionary:
5
+ type: google_sheet
6
+ sheet_id: <GOOGLE-DRIVE-SHEET-ID>
7
+ keys_column: <GOOGLE-DRIVE-KEY-COLUMN-TITLE>
6
8
 
7
- in:
8
- - path/to/file/to/1.ext.translatable
9
- - path/to/file/to/2.ext.translatable
10
- - path/to/file/to/3.ext.translatable
9
+ translate:
10
+ - in: path/to/1st/file.translatable
11
+ out: path/to/%{locale}/strings.xml
12
+ out_en: path/to/default/strings.xml
13
+ - in: path/to/2nd/file.translatable
14
+ out: path/to/2nd-%{locale}/strings.xml
11
15
 
12
- # you may define a generic out_path common for all files
13
- # or a more specific one in out:path
14
- #
15
- # when generating the out path you can use two variables:
16
- # - locale: replaced by the out:locale
17
- # - out_name: replaced by the input file name without .translatable
18
-
19
- out_path: path/to/final-%{locale}/%{out_name}
20
- out:
21
- - locale: en
22
- kb_language: english
23
- path: path/to/default/%{out_name}
24
- - locale: pt
25
- kb_language: portuguese
26
- - locale: pt-PT
27
- kb_language: portuguese
16
+ languages:
17
+ - locale: en
18
+ language: en
19
+ - locale: en-US
20
+ language: en
21
+ - locale: pt
22
+ language: pt
@@ -7,6 +7,7 @@ require 'bisu/object_extension'
7
7
  require 'bisu/config'
8
8
  require 'bisu/source/google_sheet'
9
9
  require 'bisu/source/one_sky'
10
+ require 'bisu/source/url'
10
11
  require 'bisu/dictionary'
11
12
  require 'bisu/localizer'
12
13
  require 'bisu/version'
@@ -59,6 +60,8 @@ module Bisu
59
60
  Bisu::Source::GoogleSheet.new(config[:sheet_id], config[:keys_column])
60
61
  when "one_sky"
61
62
  Bisu::Source::OneSky.new(config[:api_key], config[:api_secret], config[:project_id], config[:file_name])
63
+ when "url"
64
+ Bisu::Source::Url.new(config[:url])
62
65
  end
63
66
 
64
67
  source = source.to_i18
@@ -75,9 +75,17 @@ module Bisu
75
75
  }
76
76
  }
77
77
 
78
+ URL_STRUCT = {
79
+ type: Hash,
80
+ elements: {
81
+ url: { type: String }
82
+ }
83
+ }
84
+
78
85
  DICTIONARY_STRUCT = {
79
86
  "google_sheet" => GOOGLE_SHEET_STRUCT,
80
- "one_sky" => ONE_SKY_STRUCT
87
+ "one_sky" => ONE_SKY_STRUCT,
88
+ "url" => URL_STRUCT
81
89
  }
82
90
  end
83
91
  end
@@ -26,11 +26,15 @@ module Bisu
26
26
  Logger.error("Parameter #{param} not found in translation for #{l[:key]} in #{language}")
27
27
  end
28
28
  end
29
- t = t.gsub(l[:match], process(localized))
29
+
30
+ unless t.gsub!(l[:match], process(localized))
31
+ Logger.warn("Could not find translation for #{l[:match]} in #{language}")
32
+ end
33
+ else
34
+ Logger.warn("Could not find translation for #{l[:match]} in #{language}")
30
35
  end
31
36
  end
32
37
 
33
- t.scan(/\$([^\$\{]+)(?:\{(.+)\})?\$/) { |match| Logger.warn("Could not find translation for #{match[0]} in #{language}") }
34
38
  unless @type.eql?(:ror)
35
39
  t.scan(/%{[^}]+}/) { |match| Logger.error("Could not find translation param for #{match} in #{language}") }
36
40
  end
@@ -19,7 +19,7 @@ module Bisu
19
19
  kb = {}
20
20
  raw["entry"].each do |entry|
21
21
  unless (key = entry[@key_column]) && key = key.first
22
- raise "Cannot find key column '#{@key_column}'"
22
+ raise "Bisu::Source::GoogleSheet: Cannot find key column '#{@key_column}'"
23
23
  end
24
24
 
25
25
  entry.select { |c| !non_language_columns.include?(c) }.each do |lang, texts|
@@ -44,13 +44,13 @@ module Bisu
44
44
  data = http.get(uri.path, headers)
45
45
 
46
46
  unless data.code.to_i == 200
47
- raise "Cannot access sheet at #{uri} - HTTP #{data.code}"
47
+ raise "Bisu::Source::GoogleSheet: Cannot access sheet at #{uri} - HTTP #{data.code}"
48
48
  end
49
49
 
50
50
  begin
51
51
  XmlSimple.xml_in(data.body, 'KeyAttr' => 'name')
52
52
  rescue
53
- raise "Cannot parse. Expected XML at #{uri}"
53
+ raise "Bisu::Source::GoogleSheet: Cannot parse. Expected XML at #{uri}"
54
54
  end
55
55
  end
56
56
 
@@ -47,7 +47,7 @@ module Bisu
47
47
  request = Net::HTTP::Get.new(uri.request_uri)
48
48
  response = http.request(request)
49
49
 
50
- raise "OneSky: Http Error #{JSON.parse(response.body)}" if response.code.to_i >= 400
50
+ raise "Bisu::Source::OneSky: Http Error #{JSON.parse(response.body)}" if response.code.to_i >= 400
51
51
 
52
52
  response.body
53
53
  end
@@ -0,0 +1,40 @@
1
+ require 'net/https'
2
+ require 'json'
3
+
4
+ module Bisu
5
+ module Source
6
+ class Url
7
+ def initialize(url)
8
+ @url = url
9
+ end
10
+
11
+ def to_i18
12
+ Logger.info("Downloading dictionary from #{@url}...")
13
+
14
+ file = get(@url)
15
+ hash = JSON.parse(file)
16
+
17
+ Logger.info("Found #{hash.count} languages.")
18
+
19
+ hash
20
+ end
21
+
22
+ private
23
+
24
+ def get(url)
25
+ uri = URI(url)
26
+
27
+ http = Net::HTTP.new(uri.host, uri.port)
28
+ http.use_ssl = true
29
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
30
+
31
+ request = Net::HTTP::Get.new(uri.request_uri)
32
+ response = http.request(request)
33
+
34
+ raise "Bisu::Source::Url: Http Error #{response.body}" if response.code.to_i >= 400
35
+
36
+ response.body
37
+ end
38
+ end
39
+ end
40
+ end
@@ -1,4 +1,4 @@
1
1
  module Bisu
2
- VERSION = '1.6.0'
2
+ VERSION = '1.7.0'
3
3
  VERSION_UPDATED_AT = '2019-02-18'
4
4
  end
@@ -0,0 +1,19 @@
1
+ {
2
+ "en": {
3
+ "kConnectFacebook": "Connect with Facebook",
4
+ "kNoNoNoMr": "No, no, no. Mr %{name} not here"
5
+ },
6
+ "ja": {
7
+ "kConnectFacebook": "\u30d5\u30a7\u30a4\u30b9\u30d6\u30c3\u30af\u3078\u63a5\u7d9a"
8
+ },
9
+ "fr": {
10
+ "kConnectFacebook": "Connexion par Facebook"
11
+ },
12
+ "de": {
13
+ "kConnectFacebook": "Mit Facebook verbinden"
14
+ },
15
+ "ko": {
16
+ "kConnectFacebook": "\ud398\uc774\uc2a4\ubd81\uc73c\ub85c \uc811\uc18d",
17
+ "kTwitterServer": "트위터 서버연결 실패. \\n잠시 후 재시도."
18
+ }
19
+ }
@@ -53,6 +53,17 @@ describe Bisu::Config do
53
53
  it { should eq({ type: "one_sky", api_key: "as387oavh48", api_secret: "bp0s5avo8a59", project_id: 328742, file_name: "file.json" }) }
54
54
  end
55
55
 
56
+ context "when given a Url type dictionary" do
57
+ before do
58
+ hash[:dictionary] = {
59
+ type: "url",
60
+ url: "a_url"
61
+ }
62
+ end
63
+
64
+ it { should eq({ type: "url", url: "a_url" }) }
65
+ end
66
+
56
67
  context "when given an unknown type dictionary" do
57
68
  before { hash[:dictionary] = { type: "i_dunno" } }
58
69
  it { expect { config }.to raise_error /unknown dictionary type 'i_dunno'/i }
@@ -6,7 +6,7 @@ describe Bisu::Source::OneSky do
6
6
  let(:project_id) { 98765 }
7
7
  let(:file_name) { "file456.json" }
8
8
 
9
- let(:os_response) { File.read("spec/fixtures/sample_one_sky_response.txt") }
9
+ let(:os_response) { File.read("spec/fixtures/sample_one_sky_response.json") }
10
10
 
11
11
  def stub_multilingual(status:, response:)
12
12
  stub_request(:get, "https://platform.api.onesky.io/1/projects/#{project_id}/translations/multilingual").
@@ -37,7 +37,7 @@ describe Bisu::Source::OneSky do
37
37
  end
38
38
 
39
39
  context "when OneSky returns the newline bug" do
40
- let(:os_response) { File.read("spec/fixtures/sample_one_sky_response_with_bug.txt") }
40
+ let(:os_response) { File.read("spec/fixtures/sample_one_sky_response_with_bug.json") }
41
41
 
42
42
  it { expect { to_i18 }.not_to raise_error }
43
43
 
@@ -0,0 +1,33 @@
1
+ describe Bisu::Source::Url do
2
+ subject(:to_i18) { Bisu::Source::Url.new(url).to_i18 }
3
+
4
+ let(:url) { "https://in17n-08c12b370aeb6c66.herokuapp.com/documents/1/json?api_key=0320cd5d-1a51-4785-a832-a5bed8e62ed6" }
5
+ let(:os_response) { File.read("spec/fixtures/sample_json_response.json") }
6
+
7
+ def stub_url(status:, response:)
8
+ stub_request(:get, url).
9
+ to_return(:status => status, :body => response, :headers => {})
10
+ end
11
+
12
+ before { stub_url(status: 200, response: os_response) }
13
+
14
+ it { expect { to_i18 }.not_to raise_error }
15
+
16
+ it "returns an hash in i18 format" do
17
+ expect(to_i18).to eq({
18
+ "en" => { "kConnectFacebook" => "Connect with Facebook", "kNoNoNoMr" => "No, no, no. Mr %{name} not here" },
19
+ "ja" => { "kConnectFacebook" => "フェイスブックへ接続" },
20
+ "fr" => { "kConnectFacebook" => "Connexion par Facebook" },
21
+ "de" => { "kConnectFacebook" => "Mit Facebook verbinden" },
22
+ "ko" => { "kConnectFacebook" => "페이스북으로 접속", "kTwitterServer" => "트위터 서버연결 실패. \\n잠시 후 재시도." }
23
+ })
24
+ end
25
+
26
+ context "when get request to that URL raises an error" do
27
+ before { stub_url(status: 400, response: { error: "ups... not allowed!" }.to_json) }
28
+
29
+ it "raises that same error" do
30
+ expect { to_i18 }.to raise_error /not allowed/
31
+ end
32
+ end
33
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bisu
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - joaoffcosta
@@ -92,19 +92,22 @@ files:
92
92
  - lib/bisu/object_extension.rb
93
93
  - lib/bisu/source/google_sheet.rb
94
94
  - lib/bisu/source/one_sky.rb
95
+ - lib/bisu/source/url.rb
95
96
  - lib/bisu/version.rb
96
97
  - spec/fixtures/sample.translatable.yml
98
+ - spec/fixtures/sample_json_response.json
97
99
  - spec/fixtures/sample_kb_public_info.html
98
100
  - spec/fixtures/sample_kb_public_sheet.html
99
- - spec/fixtures/sample_one_sky_response.txt
100
- - spec/fixtures/sample_one_sky_response_with_bug.txt
101
+ - spec/fixtures/sample_one_sky_response.json
102
+ - spec/fixtures/sample_one_sky_response_with_bug.json
101
103
  - spec/lib/bisu/config_spec.rb
102
104
  - spec/lib/bisu/dictionary_spec.rb
103
- - spec/lib/bisu/google_sheet_spec.rb
104
105
  - spec/lib/bisu/localizer_spec.rb
105
106
  - spec/lib/bisu/logger_spec.rb
106
107
  - spec/lib/bisu/object_extension_spec.rb
107
- - spec/lib/bisu/one_sky_spec.rb
108
+ - spec/lib/bisu/source/google_sheet_spec.rb
109
+ - spec/lib/bisu/source/one_sky_spec.rb
110
+ - spec/lib/bisu/source/url_spec.rb
108
111
  - spec/lib/bisu_spec.rb
109
112
  - spec/spec_helper.rb
110
113
  homepage: https://github.com/hole19/bisu