bisu 1.10.2 → 2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fd090e1e936ebc979392e5ba1cb44657bf0c716fdadbc1566f3aafa8252ff3dd
4
- data.tar.gz: 89b8897c02e0ef9eba1945c125b43e4dff1fc38db73017d2eeca8b3ebb16674c
3
+ metadata.gz: a53a95f2c8ca08de5f1b44a56f5648f3b3430d22f191a9a5637f9b6daa37bee9
4
+ data.tar.gz: b51d192672fdf321ba29f2ac1a4fdaf0728a615885f03fad317c566264531053
5
5
  SHA512:
6
- metadata.gz: 521148f8d23cb2bc308eab074f90c2b964cee468a3fa65594504153d834b4878fd4b1dc9fcc96c7a04064e909b534bc6cafec49b199164d3b5d8310f215f8e36
7
- data.tar.gz: a011abe84e8c72ef2ad755f64595141f03acbd7367b70c321fb867f059f3891debd4878545acfaa8bb7f59b5ea1562aae3683430d7613d05244249af6ce67315
6
+ metadata.gz: 50543ddcc08ea0d0c09626e4d7cee4cc1dec6f575f81e229dce5d263c2b460237fafedc6a13256178cc4a87ccf4eedb290edd83cb5b8c7ca672d5ad6aea9f969
7
+ data.tar.gz: d7ecec10c7249f263566589dbb62af318ea9a59adb346265bc9500248c048d00507047ce55eab2e2f3527403910bbd67ed995eb16282fda2b6595ab1fbcbc848
data/CHANGELOG.md CHANGED
@@ -2,6 +2,22 @@
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
+ ## [2.1.0](https://github.com/hole19/bisu/releases/tag/v2.1.0)
8
+
9
+ #### Fixed
10
+ - Fixes handling of % character on iOS localization
11
+
12
+ ## [2.0.0](https://github.com/hole19/bisu/releases/tag/v2.0.0)
13
+ Released on 2023/12/07
14
+
15
+ ### Added
16
+ - Add [Tolgee](https://tolgee.io/) as a source.
17
+
18
+ ### Maintenance
19
+ - Upgrade to ruby 3.2
20
+
5
21
  ## [1.10.2](https://github.com/hole19/bisu/releases/tag/v1.10.2)
6
22
  Released on 2021/08/30
7
23
 
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 (2.0.0)
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:
@@ -88,7 +105,7 @@ Setup your configuration file
88
105
  file_name: <ONE-SKY-FILE-NAME>
89
106
  ```
90
107
 
91
- Create translation templates
108
+ Create translatable file templates
92
109
  -----
93
110
 
94
111
  Create a \*.translatable version for your platform specific localization files:
@@ -97,19 +114,10 @@ Create a \*.translatable version for your platform specific localization files:
97
114
  *example: Localizable.strings.translatable*
98
115
 
99
116
  ```
100
- // $specialKComment1$
101
- // $specialKComment2$
102
-
103
- // Locale: $specialKLocale$; Language used: $specialKLanguage$
104
-
105
- /***********
106
- * General
107
- ************/
108
-
109
- "klGeneral_Delete" = "$kDelete$";
110
- "klGeneral_Cancel" = "$kCancel$";
111
- "klGeneral_Close" = "$kClose$";
112
- "klRequestName" = "$kRequestName{user_name: %@}$";
117
+ "delete" = "$general.delete$";
118
+ "cancel" = "$general.cancel$";
119
+ "close" = "$general.close$";
120
+ "requestName" = "$request.name{user_name: %@}$";
113
121
  ```
114
122
 
115
123
  ##### Android
@@ -118,15 +126,11 @@ Create a \*.translatable version for your platform specific localization files:
118
126
  ```
119
127
  <?xml version="1.0" encoding="utf-8"?>
120
128
 
121
- <!-- $specialKComment1$ -->
122
- <!-- $specialKComment2$ -->
123
- <!-- Locale: $specialKLocale$; Language used: $specialKLanguage$ -->
124
-
125
129
  <resources>
126
- <string name="delete">$kDelete$</string>
127
- <string name="cancel">$kCancel$</string>
128
- <string name="close">$kClose$</string>
129
- <string name="request_name">$kRequestName{user_name: %s}$</string>
130
+ <string name="delete">$general.delete$</string>
131
+ <string name="cancel">$general.cancel$</string>
132
+ <string name="close">$general.close$</string>
133
+ <string name="request_name">$request.name{user_name: %s}$</string>
130
134
  </resources>
131
135
  ```
132
136
 
@@ -136,9 +140,37 @@ Create a \*.translatable version for your platform specific localization files:
136
140
  ```
137
141
  $specialKLocale$:
138
142
  resources:
139
- delete: $kDelete$
140
- cancel: $kCancel$
141
- close: $kClose$
143
+ delete: $general.delete$
144
+ cancel: $general.cancel$
145
+ close: $general.close$
142
146
  messages:
143
- request_name: $kRequestName$
147
+ request_name: $request.name$
144
148
  ```
149
+
150
+ ### Translatable options
151
+
152
+ #### Parameters
153
+
154
+ Given a key with params such as "Missing ${attribute} value"
155
+ - `$some-key-with-params{param: %s}$`: `Missing $s value`
156
+ - `$some-key-with-params//ignore-params$`: `Missing ${attribute} value`
157
+
158
+ #### Formated strings (special characters)
159
+
160
+ ##### "%" character (iOS only)
161
+
162
+ When it should be localized as given such as "Perfect: 100 (%)"
163
+ - `$some-key-with-percentage$`: `Perfect: 100%`
164
+
165
+ When it should be localized as a formated string such as "Perfect: %{percentage} (%)"
166
+ - `$some-key-with-percentage{percentage: %d}//formatted-string$`: `Perfect: %d (%%)` (note the double `%`)
167
+
168
+ #### Locale (useful for Rails localization files)
169
+
170
+ - `$specialKLocale$`: the respective locale of this file
171
+ - `$specialKLanguage$`: the respective language on the translation platform
172
+
173
+ #### Special comments
174
+
175
+ - `$specialKComment1$`: `This file was automatically generated based on a translation template.`
176
+ - `$specialKComment2$`: `Remember to CHANGE THE TEMPLATE and not this file!`
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
@@ -19,7 +19,7 @@ module Bisu
19
19
 
20
20
  to_localize(t).map do |l|
21
21
  if localized = localize_key(l[:key], [language] + fallback_languages)
22
- localized = process(localized)
22
+ localized = process(localized, l[:is_formatted_string])
23
23
 
24
24
  l[:params].each do |param, value|
25
25
  if localized.match("%{#{param}}")
@@ -33,8 +33,8 @@ module Bisu
33
33
  Logger.warn("Could not find translation for #{l[:match]} in #{language}")
34
34
  end
35
35
 
36
- unless @type.eql?(:ror) || l[:ignore_param_warn] == true
37
- localized.scan(/%{[^}]+}/) { |match| Logger.error("Could not find translation param for #{match} in #{language}") }
36
+ unless @type.eql?(:ror) || l[:ignore_params] == true
37
+ localized.scan(/%{[^}]+}/) { |match| Logger.error("Could not find translation param for #{match} for #{l[:key]} in #{language}") }
38
38
  end
39
39
  else
40
40
  Logger.warn("Could not find translation for #{l[:match]} in #{language}")
@@ -57,7 +57,7 @@ module Bisu
57
57
  private
58
58
 
59
59
  def to_localize(text)
60
- all_matches = text.to_enum(:scan, /\$([^\$\{\/]+)(?:\{(.+)\})?(\/\/ignore-params)?\$/).map { Regexp.last_match }
60
+ all_matches = text.to_enum(:scan, /\$([^\$\{\/]+)(?:\{(.+)\})?(\/\/[A-Za-z-]+)*\$/).map { Regexp.last_match }
61
61
  all_matches.map do |match|
62
62
  params = if match[2]
63
63
  params = match[2].split(",").map(&:strip).map do |param|
@@ -71,12 +71,13 @@ module Bisu
71
71
  match: match[0],
72
72
  key: match[1],
73
73
  params: params || {},
74
- ignore_param_warn: text.include?("//ignore-params")
74
+ ignore_params: text.include?("//ignore-params"),
75
+ is_formatted_string: text.include?("//formatted-string"),
75
76
  }
76
77
  end
77
78
  end
78
79
 
79
- def process(text)
80
+ def process(text, is_formatted_string)
80
81
  text = text.gsub("\n", "\\n")
81
82
 
82
83
  if @type.eql?(:android)
@@ -88,7 +89,7 @@ module Bisu
88
89
 
89
90
  elsif @type.eql?(:ios)
90
91
  text = text.gsub(/\"/, "\\\\\"")
91
- text = text.gsub(/%(?!{)/, "%%")
92
+ text = text.gsub(/%(?!{)/, "%%") if is_formatted_string
92
93
  end
93
94
 
94
95
  text
@@ -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.1.0'
3
+ VERSION_UPDATED_AT = '2023-12-18'
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
@@ -66,10 +66,11 @@ describe Bisu::Localizer do
66
66
 
67
67
  it { translates("$kDoubleQuoted$", to: expected[:double_quoted]) }
68
68
  it { translates("$kSingleQuoted$", to: expected[:single_quoted]) }
69
- it { translates("$kEllipsis$", to: expected[:ellipsis]) }
70
- it { translates("$kAmpersand$", to: expected[:ampersand]) }
71
- it { translates("$kAtSign$", to: expected[:at_sign]) }
72
- it { translates("$kPercentage$", to: expected[:percentage]) }
69
+ it { translates("$kEllipsis$", to: expected[:ellipsis]) }
70
+ it { translates("$kAmpersand$", to: expected[:ampersand]) }
71
+ it { translates("$kAtSign$", to: expected[:at_sign]) }
72
+ it { translates("$kPercentage$", to: expected[:percentage]) }
73
+ it { translates("$kPercentage//formatted-string$", to: expected[:percentage_formatted]) }
73
74
 
74
75
  # error handling
75
76
 
@@ -130,10 +131,11 @@ describe Bisu::Localizer do
130
131
  let(:type_dependent_defaults) { {
131
132
  double_quoted: keys[language]["kDoubleQuoted"],
132
133
  single_quoted: keys[language]["kSingleQuoted"],
133
- ellipsis: keys[language]["kEllipsis"],
134
- ampersand: keys[language]["kAmpersand"],
135
- at_sign: keys[language]["kAtSign"],
136
- percentage: keys[language]["kPercentage"]
134
+ ellipsis: keys[language]["kEllipsis"],
135
+ ampersand: keys[language]["kAmpersand"],
136
+ at_sign: keys[language]["kAtSign"],
137
+ percentage: keys[language]["kPercentage"],
138
+ percentage_formatted: keys[language]["kPercentage"],
137
139
  } }
138
140
 
139
141
  describe "of type iOS" do
@@ -141,7 +143,8 @@ describe Bisu::Localizer do
141
143
 
142
144
  let(:expected) { type_dependent_defaults.merge(
143
145
  double_quoted: "Não sabes nada \\\"João das Neves\\\"",
144
- percentage: "Sabes 0%% João das Neves."
146
+ percentage: "Sabes 0% João das Neves.",
147
+ percentage_formatted: "Sabes 0%% João das Neves.",
145
148
  ) }
146
149
 
147
150
  it_behaves_like "a localizer"
@@ -182,7 +185,8 @@ describe Bisu::Localizer do
182
185
  ellipsis: "Não sabes nada João das Neves…",
183
186
  ampersand: "Não sabes nada João das Neves &amp; Pícaros",
184
187
  at_sign: "\\@johnsnow sabes alguma coisa?",
185
- percentage: "Sabes 0\\%% João das Neves."
188
+ percentage: "Sabes 0\\%% João das Neves.",
189
+ percentage_formatted: "Sabes 0\\%% João das Neves.",
186
190
  ) }
187
191
 
188
192
  it_behaves_like "a localizer"
@@ -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.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - joaoffcosta
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-30 00:00:00.000000000 Z
11
+ date: 2023-12-18 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
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- 2.7.3