bisu 1.10.2 → 2.0.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
  SHA256:
3
- metadata.gz: fd090e1e936ebc979392e5ba1cb44657bf0c716fdadbc1566f3aafa8252ff3dd
4
- data.tar.gz: 89b8897c02e0ef9eba1945c125b43e4dff1fc38db73017d2eeca8b3ebb16674c
3
+ metadata.gz: 668059c0670a554d5a7ab95f88ab90133a0d367eaa7e08bba2c2c5a9d5ed36cb
4
+ data.tar.gz: fb276b9ef26e4941fb3264a366fbe9cc8404d0c296441afe5b294df652444e6d
5
5
  SHA512:
6
- metadata.gz: 521148f8d23cb2bc308eab074f90c2b964cee468a3fa65594504153d834b4878fd4b1dc9fcc96c7a04064e909b534bc6cafec49b199164d3b5d8310f215f8e36
7
- data.tar.gz: a011abe84e8c72ef2ad755f64595141f03acbd7367b70c321fb867f059f3891debd4878545acfaa8bb7f59b5ea1562aae3683430d7613d05244249af6ce67315
6
+ metadata.gz: 2250bd0fd198197e78a399be3c519c97ef0700564932feb4de4821573cf5a886fd056d5992180f9d18691145dbc55a9bbffc4bfc44993d1e9d34643954c2b529
7
+ data.tar.gz: 81e01705e4a8a3e4144b2d64f11d6f04c60d0a75fc50d05b1781b43cfb15f87351c3dab66092ae0b51507760046677efee7bc67c2f9cd7087823884a802318aa
data/CHANGELOG.md CHANGED
@@ -2,6 +2,19 @@
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
+ ## Unreleased
6
+
7
+
8
+
9
+ ## [2.0.0](https://github.com/hole19/bisu/releases/tag/v2.0.0)
10
+ Released on 2023/12/07
11
+
12
+ ### Added
13
+ - Add [Tolgee](https://tolgee.io/) as a source.
14
+
15
+ ### Maintenance
16
+ - Upgrade to ruby 3.2
17
+
5
18
  ## [1.10.2](https://github.com/hole19/bisu/releases/tag/v1.10.2)
6
19
  Released on 2021/08/30
7
20
 
data/Gemfile CHANGED
@@ -1,12 +1,10 @@
1
1
  source 'https://rubygems.org'
2
- ruby '2.7.3'
3
2
 
4
- gem 'safe_yaml', '~> 1.0'
5
- gem 'colorize', '~> 0.7'
3
+ gemspec
6
4
 
7
5
  group :test do
8
6
  gem 'rake'
9
- gem 'webmock', '~> 1.20'
7
+ gem 'webmock', '~> 3'
10
8
  gem 'rspec'
11
9
  gem 'rspec-its'
12
10
  end
data/Gemfile.lock CHANGED
@@ -1,51 +1,56 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ bisu (1.10.2)
5
+ colorize
6
+ rubyzip (>= 2.0.0)
7
+ safe_yaml (>= 1.0.0)
8
+
1
9
  GEM
2
10
  remote: https://rubygems.org/
3
11
  specs:
4
- addressable (2.8.0)
5
- public_suffix (>= 2.0.2, < 5.0)
6
- colorize (0.8.1)
12
+ addressable (2.8.5)
13
+ public_suffix (>= 2.0.2, < 6.0)
14
+ colorize (1.1.0)
7
15
  crack (0.4.5)
8
16
  rexml
9
- diff-lcs (1.4.4)
17
+ diff-lcs (1.5.0)
10
18
  hashdiff (1.0.1)
11
- public_suffix (4.0.6)
12
- rake (13.0.3)
13
- rexml (3.2.5)
14
- rspec (3.10.0)
15
- rspec-core (~> 3.10.0)
16
- rspec-expectations (~> 3.10.0)
17
- rspec-mocks (~> 3.10.0)
18
- rspec-core (3.10.1)
19
- rspec-support (~> 3.10.0)
20
- rspec-expectations (3.10.1)
19
+ public_suffix (5.0.3)
20
+ rake (13.1.0)
21
+ rexml (3.2.6)
22
+ rspec (3.12.0)
23
+ rspec-core (~> 3.12.0)
24
+ rspec-expectations (~> 3.12.0)
25
+ rspec-mocks (~> 3.12.0)
26
+ rspec-core (3.12.2)
27
+ rspec-support (~> 3.12.0)
28
+ rspec-expectations (3.12.3)
21
29
  diff-lcs (>= 1.2.0, < 2.0)
22
- rspec-support (~> 3.10.0)
30
+ rspec-support (~> 3.12.0)
23
31
  rspec-its (1.3.0)
24
32
  rspec-core (>= 3.0.0)
25
33
  rspec-expectations (>= 3.0.0)
26
- rspec-mocks (3.10.2)
34
+ rspec-mocks (3.12.6)
27
35
  diff-lcs (>= 1.2.0, < 2.0)
28
- rspec-support (~> 3.10.0)
29
- rspec-support (3.10.2)
36
+ rspec-support (~> 3.12.0)
37
+ rspec-support (3.12.1)
38
+ rubyzip (2.3.2)
30
39
  safe_yaml (1.0.5)
31
- webmock (1.24.6)
32
- addressable (>= 2.3.6)
40
+ webmock (3.19.1)
41
+ addressable (>= 2.8.0)
33
42
  crack (>= 0.3.2)
34
- hashdiff
43
+ hashdiff (>= 0.4.0, < 2.0.0)
35
44
 
36
45
  PLATFORMS
37
46
  ruby
38
47
 
39
48
  DEPENDENCIES
40
- colorize (~> 0.7)
49
+ bisu!
41
50
  rake
42
51
  rspec
43
52
  rspec-its
44
- safe_yaml (~> 1.0)
45
- webmock (~> 1.20)
46
-
47
- RUBY VERSION
48
- ruby 2.7.3p183
53
+ webmock (~> 3)
49
54
 
50
55
  BUNDLED WITH
51
- 2.2.26
56
+ 2.4.22
data/README.md CHANGED
@@ -4,13 +4,19 @@ Bisu 홀
4
4
  [![Status](https://travis-ci.org/hole19/bisu.svg?branch=master)](https://travis-ci.org/hole19/bisu?branch=master)
5
5
  [![Gem](https://img.shields.io/gem/v/bisu.svg?style=flat)](http://rubygems.org/gems/bisu "View this project in Rubygems")
6
6
 
7
- Bisu manages your app iOS, Android and RoR localization files for you. No more copy+paste induced errors!
7
+ Bisu manages your app [iOS](#ios), [Android](#android) and [RoR](#ruby-on-rails) localization files for you. No more copy+paste induced errors!
8
+
9
+ It works with the following sources out of the box:
10
+ - [URL](#url)
11
+ - [Tolgee](#tolgee)
12
+ - [Google Sheets](#google-sheets)
13
+ - [OneSky](#onesky)
8
14
 
9
15
  <p align="center">
10
16
  <img src="https://raw.githubusercontent.com/hole19/bisu/master/README_explanation.png" width="500">
11
17
  </p>
12
18
 
13
- Instalation
19
+ Installation
14
20
  -----
15
21
 
16
22
  ```
@@ -54,7 +60,9 @@ Setup your configuration file
54
60
  language: pt
55
61
  ```
56
62
 
57
- ##### Dictionary from a URL source:
63
+ #### Sources
64
+
65
+ ##### URL
58
66
 
59
67
  ```
60
68
  dictionary:
@@ -62,7 +70,16 @@ Setup your configuration file
62
70
  url: <A-GET-URL>
63
71
  ```
64
72
 
65
- ##### Google Sheets Dictionary:
73
+ ##### Tolgee
74
+
75
+ ```
76
+ dictionary:
77
+ type: tolgee
78
+ api_key: <TOLGEE-API-KEY>
79
+ host: <TOLGEE-CUSTOM-HOST> (default: app.tolgee.io)
80
+ ```
81
+
82
+ ##### Google Sheets
66
83
 
67
84
  1. First ["Publish to the web"](https://www.google.com/search?q=google+sheets+publish+to+web) your Google Sheet
68
85
  1. Share only the sheet that contains the translations
@@ -77,7 +94,7 @@ Setup your configuration file
77
94
  keys_column: <GOOGLE-DRIVE-KEY-COLUMN-TITLE>
78
95
  ```
79
96
 
80
- ##### OneSky integration:
97
+ ##### OneSky
81
98
 
82
99
  ```
83
100
  dictionary:
data/bisu.gemspec CHANGED
@@ -11,11 +11,11 @@ Gem::Specification.new do |s|
11
11
  s.license = 'MIT'
12
12
  s.homepage = 'https://github.com/hole19/bisu'
13
13
 
14
- s.files = `git ls-files`.split("\n")
14
+ s.files = `git ls-files`.split("\n")
15
15
  s.require_paths = ['lib']
16
+ s.executables = %w[ bisu ]
16
17
 
17
- s.executables << 'bisu'
18
-
19
- s.add_runtime_dependency 'safe_yaml', '~> 1.0'
20
- s.add_runtime_dependency 'colorize', '~> 0.7'
18
+ s.add_dependency 'safe_yaml', '>= 1.0.0'
19
+ s.add_dependency 'colorize'
20
+ s.add_runtime_dependency 'rubyzip', '>= 2.0.0' # For extracting the Tolgee zip file
21
21
  end
data/lib/bisu/config.rb CHANGED
@@ -83,10 +83,18 @@ module Bisu
83
83
  },
84
84
  }
85
85
 
86
+ TOLGEE_STRUCT = {
87
+ type: Hash,
88
+ elements: {
89
+ api_key: { type: String },
90
+ },
91
+ }
92
+
86
93
  DICTIONARY_STRUCT = {
87
94
  "google_sheet" => GOOGLE_SHEET_STRUCT,
88
95
  "one_sky" => ONE_SKY_STRUCT,
89
- "url" => URL_STRUCT
96
+ "url" => URL_STRUCT,
97
+ "tolgee" => TOLGEE_STRUCT,
90
98
  }
91
99
  end
92
100
  end
@@ -0,0 +1,58 @@
1
+ require 'net/https'
2
+ require 'json'
3
+ require 'zip'
4
+
5
+ module Bisu
6
+ module Source
7
+ class Tolgee
8
+ def initialize(api_key, custom_host = nil)
9
+ @api_key = api_key
10
+ @host = custom_host || "app.tolgee.io"
11
+ end
12
+
13
+ def to_i18
14
+ Logger.info("Downloading dictionary from Tolgee...")
15
+
16
+ hash = {}
17
+ export do |language, language_data|
18
+ hash[language] = language_data
19
+ end
20
+
21
+ Logger.info("Found #{hash.count} languages.")
22
+
23
+ hash
24
+ end
25
+
26
+ private
27
+
28
+ def export
29
+ uri = URI("https://#{@host}/v2/projects/export?format=JSON&structureDelimiter=")
30
+
31
+ request = Net::HTTP::Get.new(uri)
32
+ request['X-API-Key'] = @api_key
33
+
34
+ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
35
+ http.request(request)
36
+ end
37
+
38
+ raise "Bisu::Source::Tolgee: Http Error #{response.body}" unless response.is_a?(Net::HTTPSuccess)
39
+
40
+ # Create a temporary directory to extract the zip file
41
+ temp_dir = Dir.mktmpdir
42
+
43
+ # Extract the zip archive
44
+ Zip::File.open_buffer(response.body) do |zip_file|
45
+ zip_file.each do |entry|
46
+ language = File.basename(entry.name, '.*') # Extract language from file name
47
+ language_data = JSON.parse(entry.get_input_stream.read)
48
+
49
+ yield language, language_data
50
+ end
51
+ end
52
+
53
+ # Clean up the temporary directory
54
+ FileUtils.remove_entry(temp_dir)
55
+ end
56
+ end
57
+ end
58
+ end
data/lib/bisu/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Bisu
2
- VERSION = '1.10.2'
3
- VERSION_UPDATED_AT = '2021-08-30'
2
+ VERSION = '2.0.0'
3
+ VERSION_UPDATED_AT = '2023-12-07'
4
4
  end
data/lib/bisu.rb CHANGED
@@ -8,6 +8,7 @@ require 'bisu/config'
8
8
  require 'bisu/source/google_sheet'
9
9
  require 'bisu/source/one_sky'
10
10
  require 'bisu/source/url'
11
+ require 'bisu/source/tolgee'
11
12
  require 'bisu/dictionary'
12
13
  require 'bisu/localizer'
13
14
  require 'bisu/version'
@@ -64,6 +65,8 @@ module Bisu
64
65
  Bisu::Source::OneSky.new(config[:api_key], config[:api_secret], config[:project_id], config[:file_name])
65
66
  when "url"
66
67
  Bisu::Source::Url.new(config[:url])
68
+ when "tolgee"
69
+ Bisu::Source::Tolgee.new(config[:api_key], config[:host])
67
70
  end
68
71
 
69
72
  source = source.to_i18
@@ -0,0 +1,45 @@
1
+ describe Bisu::Source::Tolgee do
2
+ subject(:to_i18) { Bisu::Source::Tolgee.new(api_key).to_i18 }
3
+
4
+ let(:api_key) { "a123" }
5
+ let(:os_response) { File.read("spec/fixtures/sample_tolgee_response.zip") }
6
+
7
+ def stub_url(status:, response:, host: "app.tolgee.io")
8
+ stub_request(:get, "https://#{host}/v2/projects/export?format=JSON&structureDelimiter=").
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
+
34
+ context "with a custom host" do
35
+ let(:host) { "translations.example.com" }
36
+ subject(:to_i18) { Bisu::Source::Tolgee.new(api_key, host).to_i18 }
37
+
38
+ before { stub_url(status: 200, response: os_response, host: host) }
39
+
40
+ it "uses that host" do
41
+ to_i18
42
+ expect(WebMock).to have_requested(:get, "https://translations.example.com/v2/projects/export?format=JSON&structureDelimiter=")
43
+ end
44
+ end
45
+ end
metadata CHANGED
@@ -1,43 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bisu
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.10.2
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - joaoffcosta
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-30 00:00:00.000000000 Z
11
+ date: 2023-12-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: safe_yaml
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.0'
19
+ version: 1.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.0'
26
+ version: 1.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: colorize
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '0.7'
33
+ version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '0.7'
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubyzip
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 2.0.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 2.0.0
41
55
  description: Bisu manages your app iOS and Android localization files for you. No
42
56
  more copy+paste induced errors!
43
57
  email: joaostacosta@gmail.com
@@ -47,7 +61,6 @@ extensions: []
47
61
  extra_rdoc_files: []
48
62
  files:
49
63
  - ".rspec"
50
- - ".ruby-version"
51
64
  - ".travis.yml"
52
65
  - CHANGELOG.md
53
66
  - Gemfile
@@ -66,6 +79,7 @@ files:
66
79
  - lib/bisu/object_extension.rb
67
80
  - lib/bisu/source/google_sheet.rb
68
81
  - lib/bisu/source/one_sky.rb
82
+ - lib/bisu/source/tolgee.rb
69
83
  - lib/bisu/source/url.rb
70
84
  - lib/bisu/version.rb
71
85
  - spec/fixtures/sample.translatable.yml
@@ -73,6 +87,7 @@ files:
73
87
  - spec/fixtures/sample_json_response.json
74
88
  - spec/fixtures/sample_one_sky_response.json
75
89
  - spec/fixtures/sample_one_sky_response_with_bug.json
90
+ - spec/fixtures/sample_tolgee_response.zip
76
91
  - spec/lib/bisu/config_spec.rb
77
92
  - spec/lib/bisu/dictionary_spec.rb
78
93
  - spec/lib/bisu/localizer_spec.rb
@@ -80,6 +95,7 @@ files:
80
95
  - spec/lib/bisu/object_extension_spec.rb
81
96
  - spec/lib/bisu/source/google_sheet_spec.rb
82
97
  - spec/lib/bisu/source/one_sky_spec.rb
98
+ - spec/lib/bisu/source/tolgee_spec.rb
83
99
  - spec/lib/bisu/source/url_spec.rb
84
100
  - spec/lib/bisu_spec.rb
85
101
  - spec/spec_helper.rb
@@ -87,7 +103,7 @@ homepage: https://github.com/hole19/bisu
87
103
  licenses:
88
104
  - MIT
89
105
  metadata: {}
90
- post_install_message:
106
+ post_install_message:
91
107
  rdoc_options: []
92
108
  require_paths:
93
109
  - lib
@@ -102,8 +118,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
102
118
  - !ruby/object:Gem::Version
103
119
  version: '0'
104
120
  requirements: []
105
- rubygems_version: 3.1.6
106
- signing_key:
121
+ rubygems_version: 3.2.33
122
+ signing_key:
107
123
  specification_version: 4
108
124
  summary: A localization automation service
109
125
  test_files: []
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- 2.7.3