copy_tuner_client 0.8.1 → 0.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/rspec.yml +26 -30
- data/.ruby-version +1 -1
- data/CHANGELOG.md +17 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +162 -139
- data/README.md +7 -4
- data/copy_tuner_client.gemspec +3 -2
- data/gemfiles/5.2.gemfile +1 -3
- data/gemfiles/6.0.gemfile +1 -3
- data/gemfiles/6.1.gemfile +5 -0
- data/gemfiles/main.gemfile +5 -0
- data/lib/copy_tuner_client/configuration.rb +9 -1
- data/lib/copy_tuner_client/engine.rb +5 -30
- data/lib/copy_tuner_client/errors.rb +3 -0
- data/lib/copy_tuner_client/helper_extension.rb +34 -0
- data/lib/copy_tuner_client/i18n_backend.rb +10 -0
- data/lib/copy_tuner_client/i18n_compat.rb +14 -0
- data/lib/copy_tuner_client/translation_log.rb +1 -1
- data/lib/copy_tuner_client/version.rb +1 -1
- data/lib/tasks/copy_tuner_client_tasks.rake +15 -2
- data/spec/copy_tuner_client/helper_extension_spec.rb +40 -0
- data/spec/copy_tuner_client/i18n_backend_spec.rb +7 -0
- data/test.sh +6 -0
- metadata +30 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 02e158d00caa261a1c3cf73b38648bde2307f5160708fcf39e7e84b542c2ecc6
|
4
|
+
data.tar.gz: ca6f9c714f15afbace17d89d3ef67a71546d5b414be83ff09e59c6b9b1974958
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ffb1ebc5fb6f78326f820527646f32eb6fcbf09c622f90d299d61a96778c27ad0954d0c8db784d96a4c93534a5eee0acb01eed824ddd1cbcee0aa5fae5cd35cc
|
7
|
+
data.tar.gz: 1ebe88eb8278fee882c0129908c562157b0ca16e6b7ac0181ae9774f53df84e5df3fcd63a843586302ab6010d369bf19d78bae8453cdc28fbf463977b8d7ede7
|
data/.github/workflows/rspec.yml
CHANGED
@@ -9,7 +9,7 @@ name: Ruby
|
|
9
9
|
|
10
10
|
on:
|
11
11
|
push:
|
12
|
-
branches: [
|
12
|
+
branches: [master]
|
13
13
|
pull_request:
|
14
14
|
|
15
15
|
jobs:
|
@@ -18,36 +18,32 @@ jobs:
|
|
18
18
|
env:
|
19
19
|
BUNDLE_JOBS: 4
|
20
20
|
BUNDLE_RETRY: 3
|
21
|
+
BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/${{ matrix.gemfile }}.gemfile
|
21
22
|
strategy:
|
22
23
|
fail-fast: false
|
23
24
|
matrix:
|
24
|
-
ruby: [2.6, 2.7]
|
25
|
-
gemfile: [
|
26
|
-
|
27
|
-
|
28
|
-
|
25
|
+
ruby: [2.6, 2.7, 3.0]
|
26
|
+
gemfile: ["5.2", "6.0", "6.1", "main"]
|
27
|
+
exclude:
|
28
|
+
- ruby: 2.6
|
29
|
+
gemfile: main
|
30
|
+
- ruby: 3.0
|
31
|
+
gemfile: 5.2
|
32
|
+
- ruby: 3.0
|
33
|
+
gemfile: "6.0"
|
29
34
|
steps:
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
- name: Install dependencies
|
46
|
-
run: |
|
47
|
-
bundle config path /home/runner/bundle
|
48
|
-
bundle config --global gemfile ${{ matrix.gemfile }}
|
49
|
-
bundle install
|
50
|
-
bundle update
|
51
|
-
bundle clean
|
52
|
-
- name: Run rspec
|
53
|
-
run: bundle exec rspec
|
35
|
+
- name: Install packages
|
36
|
+
run: |
|
37
|
+
sudo apt update -y
|
38
|
+
sudo apt install -y libsqlite3-dev
|
39
|
+
|
40
|
+
- uses: actions/checkout@v2
|
41
|
+
|
42
|
+
- name: Set up Ruby
|
43
|
+
uses: ruby/setup-ruby@v1
|
44
|
+
with:
|
45
|
+
ruby-version: ${{ matrix.ruby }}
|
46
|
+
bundler-cache: true
|
47
|
+
|
48
|
+
- name: Run rspec
|
49
|
+
run: bundle exec rspec
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.7.
|
1
|
+
2.7.4
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,20 @@
|
|
1
|
+
## 0.12.0
|
2
|
+
|
3
|
+
- Add `config.ignored_keys` and `config.ignored_key_handler`
|
4
|
+
|
5
|
+
## 0.11.0
|
6
|
+
|
7
|
+
- Remove deprecated rescue_format option
|
8
|
+
- Fix ruby@2.7 keyword warning
|
9
|
+
|
10
|
+
## 0.10.0
|
11
|
+
|
12
|
+
- Add copy_tuner:detect_html_incompatible_keys task
|
13
|
+
|
14
|
+
## 0.9.0
|
15
|
+
|
16
|
+
- Do not upload invalid type keys
|
17
|
+
|
1
18
|
## 0.8.1
|
2
19
|
|
3
20
|
- Fix bug in `CopyrayMiddleware`
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,227 +1,250 @@
|
|
1
1
|
GIT
|
2
|
-
remote:
|
3
|
-
revision:
|
2
|
+
remote: https://github.com/SonicGarden/sgcop.git
|
3
|
+
revision: e708293619ea29e2a7a326db3dfaa3be63939c69
|
4
4
|
specs:
|
5
|
-
sgcop (0.
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
rubocop (~>
|
10
|
-
rubocop-
|
11
|
-
rubocop-
|
12
|
-
rubocop-rspec (~> 1.38.1)
|
5
|
+
sgcop (0.4.14)
|
6
|
+
haml_lint (~> 0.37.0)
|
7
|
+
rubocop (~> 1.21.0)
|
8
|
+
rubocop-performance (~> 1.11.5)
|
9
|
+
rubocop-rails (~> 2.12.2)
|
10
|
+
rubocop-rake (~> 0.6.0)
|
11
|
+
rubocop-rspec (~> 2.4.0)
|
13
12
|
|
14
13
|
PATH
|
15
14
|
remote: .
|
16
15
|
specs:
|
17
|
-
copy_tuner_client (0.
|
16
|
+
copy_tuner_client (0.12.0)
|
18
17
|
i18n (>= 0.5.0)
|
19
18
|
json
|
19
|
+
nokogiri
|
20
20
|
|
21
21
|
GEM
|
22
22
|
remote: http://rubygems.org/
|
23
23
|
specs:
|
24
|
-
actioncable (
|
25
|
-
actionpack (=
|
24
|
+
actioncable (6.1.4.1)
|
25
|
+
actionpack (= 6.1.4.1)
|
26
|
+
activesupport (= 6.1.4.1)
|
26
27
|
nio4r (~> 2.0)
|
27
28
|
websocket-driver (>= 0.6.1)
|
28
|
-
|
29
|
-
actionpack (=
|
30
|
-
|
31
|
-
|
29
|
+
actionmailbox (6.1.4.1)
|
30
|
+
actionpack (= 6.1.4.1)
|
31
|
+
activejob (= 6.1.4.1)
|
32
|
+
activerecord (= 6.1.4.1)
|
33
|
+
activestorage (= 6.1.4.1)
|
34
|
+
activesupport (= 6.1.4.1)
|
35
|
+
mail (>= 2.7.1)
|
36
|
+
actionmailer (6.1.4.1)
|
37
|
+
actionpack (= 6.1.4.1)
|
38
|
+
actionview (= 6.1.4.1)
|
39
|
+
activejob (= 6.1.4.1)
|
40
|
+
activesupport (= 6.1.4.1)
|
32
41
|
mail (~> 2.5, >= 2.5.4)
|
33
42
|
rails-dom-testing (~> 2.0)
|
34
|
-
actionpack (
|
35
|
-
actionview (=
|
36
|
-
activesupport (=
|
37
|
-
rack (~> 2.0, >= 2.0.
|
43
|
+
actionpack (6.1.4.1)
|
44
|
+
actionview (= 6.1.4.1)
|
45
|
+
activesupport (= 6.1.4.1)
|
46
|
+
rack (~> 2.0, >= 2.0.9)
|
38
47
|
rack-test (>= 0.6.3)
|
39
48
|
rails-dom-testing (~> 2.0)
|
40
|
-
rails-html-sanitizer (~> 1.0, >= 1.0
|
41
|
-
|
42
|
-
|
49
|
+
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
50
|
+
actiontext (6.1.4.1)
|
51
|
+
actionpack (= 6.1.4.1)
|
52
|
+
activerecord (= 6.1.4.1)
|
53
|
+
activestorage (= 6.1.4.1)
|
54
|
+
activesupport (= 6.1.4.1)
|
55
|
+
nokogiri (>= 1.8.5)
|
56
|
+
actionview (6.1.4.1)
|
57
|
+
activesupport (= 6.1.4.1)
|
43
58
|
builder (~> 3.1)
|
44
59
|
erubi (~> 1.4)
|
45
60
|
rails-dom-testing (~> 2.0)
|
46
|
-
rails-html-sanitizer (~> 1.
|
47
|
-
activejob (
|
48
|
-
activesupport (=
|
61
|
+
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
62
|
+
activejob (6.1.4.1)
|
63
|
+
activesupport (= 6.1.4.1)
|
49
64
|
globalid (>= 0.3.6)
|
50
|
-
activemodel (
|
51
|
-
activesupport (=
|
52
|
-
activerecord (
|
53
|
-
activemodel (=
|
54
|
-
activesupport (=
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
activerecord (=
|
59
|
-
|
60
|
-
|
65
|
+
activemodel (6.1.4.1)
|
66
|
+
activesupport (= 6.1.4.1)
|
67
|
+
activerecord (6.1.4.1)
|
68
|
+
activemodel (= 6.1.4.1)
|
69
|
+
activesupport (= 6.1.4.1)
|
70
|
+
activestorage (6.1.4.1)
|
71
|
+
actionpack (= 6.1.4.1)
|
72
|
+
activejob (= 6.1.4.1)
|
73
|
+
activerecord (= 6.1.4.1)
|
74
|
+
activesupport (= 6.1.4.1)
|
75
|
+
marcel (~> 1.0.0)
|
76
|
+
mini_mime (>= 1.1.0)
|
77
|
+
activesupport (6.1.4.1)
|
61
78
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
62
|
-
i18n (>=
|
63
|
-
minitest (
|
64
|
-
tzinfo (~>
|
65
|
-
|
79
|
+
i18n (>= 1.6, < 2)
|
80
|
+
minitest (>= 5.1)
|
81
|
+
tzinfo (~> 2.0)
|
82
|
+
zeitwerk (~> 2.3)
|
83
|
+
addressable (2.8.0)
|
66
84
|
public_suffix (>= 2.0.2, < 5.0)
|
67
|
-
|
68
|
-
ast (2.4.0)
|
69
|
-
brakeman (4.8.1)
|
70
|
-
brakeman_translate_checkstyle_format (0.0.1)
|
71
|
-
thor
|
85
|
+
ast (2.4.2)
|
72
86
|
builder (3.2.4)
|
73
|
-
concurrent-ruby (1.1.
|
74
|
-
crack (0.4.
|
75
|
-
|
87
|
+
concurrent-ruby (1.1.9)
|
88
|
+
crack (0.4.5)
|
89
|
+
rexml
|
76
90
|
crass (1.0.6)
|
77
|
-
daemons (1.
|
78
|
-
diff-lcs (1.
|
79
|
-
erubi (1.
|
91
|
+
daemons (1.4.1)
|
92
|
+
diff-lcs (1.4.4)
|
93
|
+
erubi (1.10.0)
|
80
94
|
eventmachine (1.2.7)
|
81
|
-
globalid (0.
|
82
|
-
activesupport (>=
|
83
|
-
haml (5.
|
95
|
+
globalid (0.5.2)
|
96
|
+
activesupport (>= 5.0)
|
97
|
+
haml (5.2.2)
|
84
98
|
temple (>= 0.8.0)
|
85
99
|
tilt
|
86
|
-
haml_lint (0.
|
87
|
-
haml (>= 4.0, < 5.
|
100
|
+
haml_lint (0.37.1)
|
101
|
+
haml (>= 4.0, < 5.3)
|
102
|
+
parallel (~> 1.10)
|
88
103
|
rainbow
|
89
104
|
rubocop (>= 0.50.0)
|
90
105
|
sysexits (~> 1.1)
|
91
106
|
hashdiff (1.0.1)
|
92
|
-
i18n (1.8.
|
107
|
+
i18n (1.8.10)
|
93
108
|
concurrent-ruby (~> 1.0)
|
94
|
-
jaro_winkler (1.5.4)
|
95
109
|
json (2.5.1)
|
96
|
-
loofah (2.
|
110
|
+
loofah (2.12.0)
|
97
111
|
crass (~> 1.0.2)
|
98
112
|
nokogiri (>= 1.5.9)
|
99
113
|
mail (2.7.1)
|
100
114
|
mini_mime (>= 0.1.1)
|
101
|
-
marcel (0.
|
102
|
-
mimemagic (~> 0.3.2)
|
115
|
+
marcel (1.0.1)
|
103
116
|
method_source (1.0.0)
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
minitest (5.14.0)
|
117
|
+
mini_mime (1.1.1)
|
118
|
+
mini_portile2 (2.6.1)
|
119
|
+
minitest (5.14.4)
|
108
120
|
mustermann (1.1.1)
|
109
121
|
ruby2_keywords (~> 0.0.1)
|
110
|
-
nio4r (2.5.
|
111
|
-
nokogiri (1.
|
112
|
-
mini_portile2 (~> 2.
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
122
|
+
nio4r (2.5.8)
|
123
|
+
nokogiri (1.12.4)
|
124
|
+
mini_portile2 (~> 2.6.1)
|
125
|
+
racc (~> 1.4)
|
126
|
+
parallel (1.21.0)
|
127
|
+
parser (3.0.2.0)
|
128
|
+
ast (~> 2.4.1)
|
129
|
+
public_suffix (4.0.6)
|
130
|
+
racc (1.5.2)
|
131
|
+
rack (2.2.3)
|
132
|
+
rack-protection (2.1.0)
|
119
133
|
rack
|
120
134
|
rack-test (1.1.0)
|
121
135
|
rack (>= 1.0, < 3)
|
122
|
-
rails (
|
123
|
-
actioncable (=
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
136
|
+
rails (6.1.4.1)
|
137
|
+
actioncable (= 6.1.4.1)
|
138
|
+
actionmailbox (= 6.1.4.1)
|
139
|
+
actionmailer (= 6.1.4.1)
|
140
|
+
actionpack (= 6.1.4.1)
|
141
|
+
actiontext (= 6.1.4.1)
|
142
|
+
actionview (= 6.1.4.1)
|
143
|
+
activejob (= 6.1.4.1)
|
144
|
+
activemodel (= 6.1.4.1)
|
145
|
+
activerecord (= 6.1.4.1)
|
146
|
+
activestorage (= 6.1.4.1)
|
147
|
+
activesupport (= 6.1.4.1)
|
148
|
+
bundler (>= 1.15.0)
|
149
|
+
railties (= 6.1.4.1)
|
134
150
|
sprockets-rails (>= 2.0.0)
|
135
151
|
rails-dom-testing (2.0.3)
|
136
152
|
activesupport (>= 4.2.0)
|
137
153
|
nokogiri (>= 1.6)
|
138
|
-
rails-html-sanitizer (1.
|
154
|
+
rails-html-sanitizer (1.4.2)
|
139
155
|
loofah (~> 2.3)
|
140
|
-
railties (
|
141
|
-
actionpack (=
|
142
|
-
activesupport (=
|
156
|
+
railties (6.1.4.1)
|
157
|
+
actionpack (= 6.1.4.1)
|
158
|
+
activesupport (= 6.1.4.1)
|
143
159
|
method_source
|
144
|
-
rake (>= 0.
|
145
|
-
thor (
|
160
|
+
rake (>= 0.13)
|
161
|
+
thor (~> 1.0)
|
146
162
|
rainbow (3.0.0)
|
147
|
-
rake (13.0.
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
rspec-
|
152
|
-
rspec-
|
153
|
-
|
154
|
-
|
155
|
-
|
163
|
+
rake (13.0.6)
|
164
|
+
regexp_parser (2.1.1)
|
165
|
+
rexml (3.2.5)
|
166
|
+
rspec (3.10.0)
|
167
|
+
rspec-core (~> 3.10.0)
|
168
|
+
rspec-expectations (~> 3.10.0)
|
169
|
+
rspec-mocks (~> 3.10.0)
|
170
|
+
rspec-core (3.10.1)
|
171
|
+
rspec-support (~> 3.10.0)
|
172
|
+
rspec-expectations (3.10.1)
|
156
173
|
diff-lcs (>= 1.2.0, < 2.0)
|
157
|
-
rspec-support (~> 3.
|
158
|
-
rspec-mocks (3.
|
174
|
+
rspec-support (~> 3.10.0)
|
175
|
+
rspec-mocks (3.10.2)
|
159
176
|
diff-lcs (>= 1.2.0, < 2.0)
|
160
|
-
rspec-support (~> 3.
|
161
|
-
rspec-support (3.
|
162
|
-
rubocop (
|
163
|
-
jaro_winkler (~> 1.5.1)
|
177
|
+
rspec-support (~> 3.10.0)
|
178
|
+
rspec-support (3.10.2)
|
179
|
+
rubocop (1.21.0)
|
164
180
|
parallel (~> 1.10)
|
165
|
-
parser (>=
|
181
|
+
parser (>= 3.0.0.0)
|
166
182
|
rainbow (>= 2.2.2, < 4.0)
|
183
|
+
regexp_parser (>= 1.8, < 3.0)
|
167
184
|
rexml
|
185
|
+
rubocop-ast (>= 1.9.1, < 2.0)
|
168
186
|
ruby-progressbar (~> 1.7)
|
169
|
-
unicode-display_width (>= 1.4.0, <
|
170
|
-
rubocop-
|
171
|
-
|
172
|
-
rubocop-
|
173
|
-
|
187
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
188
|
+
rubocop-ast (1.11.0)
|
189
|
+
parser (>= 3.0.1.1)
|
190
|
+
rubocop-performance (1.11.5)
|
191
|
+
rubocop (>= 1.7.0, < 2.0)
|
192
|
+
rubocop-ast (>= 0.4.0)
|
193
|
+
rubocop-rails (2.12.2)
|
194
|
+
activesupport (>= 4.2.0)
|
174
195
|
rack (>= 1.1)
|
175
|
-
rubocop (>=
|
176
|
-
rubocop-
|
177
|
-
rubocop (
|
178
|
-
|
179
|
-
|
180
|
-
|
196
|
+
rubocop (>= 1.7.0, < 2.0)
|
197
|
+
rubocop-rake (0.6.0)
|
198
|
+
rubocop (~> 1.0)
|
199
|
+
rubocop-rspec (2.4.0)
|
200
|
+
rubocop (~> 1.0)
|
201
|
+
rubocop-ast (>= 1.1.0)
|
202
|
+
ruby-progressbar (1.11.0)
|
203
|
+
ruby2_keywords (0.0.5)
|
181
204
|
sham_rack (1.4.1)
|
182
205
|
rack
|
183
|
-
sinatra (2.0
|
206
|
+
sinatra (2.1.0)
|
184
207
|
mustermann (~> 1.0)
|
185
|
-
rack (~> 2.
|
186
|
-
rack-protection (= 2.0
|
208
|
+
rack (~> 2.2)
|
209
|
+
rack-protection (= 2.1.0)
|
187
210
|
tilt (~> 2.0)
|
188
|
-
sprockets (4.0.
|
211
|
+
sprockets (4.0.2)
|
189
212
|
concurrent-ruby (~> 1.0)
|
190
213
|
rack (> 1, < 3)
|
191
|
-
sprockets-rails (3.2.
|
214
|
+
sprockets-rails (3.2.2)
|
192
215
|
actionpack (>= 4.0)
|
193
216
|
activesupport (>= 4.0)
|
194
217
|
sprockets (>= 3.0.0)
|
195
218
|
sqlite3 (1.4.2)
|
196
219
|
sysexits (1.2.0)
|
197
220
|
temple (0.8.2)
|
198
|
-
thin (1.
|
221
|
+
thin (1.8.1)
|
199
222
|
daemons (~> 1.0, >= 1.0.9)
|
200
223
|
eventmachine (~> 1.0, >= 1.0.4)
|
201
224
|
rack (>= 1, < 3)
|
202
|
-
thor (1.0
|
203
|
-
thread_safe (0.3.6)
|
225
|
+
thor (1.1.0)
|
204
226
|
tilt (2.0.10)
|
205
|
-
tzinfo (
|
206
|
-
|
207
|
-
unicode-display_width (1.
|
208
|
-
webmock (3.
|
209
|
-
addressable (>= 2.
|
227
|
+
tzinfo (2.0.4)
|
228
|
+
concurrent-ruby (~> 1.0)
|
229
|
+
unicode-display_width (2.1.0)
|
230
|
+
webmock (3.14.0)
|
231
|
+
addressable (>= 2.8.0)
|
210
232
|
crack (>= 0.3.2)
|
211
233
|
hashdiff (>= 0.4.0, < 2.0.0)
|
212
|
-
websocket-driver (0.7.
|
234
|
+
websocket-driver (0.7.5)
|
213
235
|
websocket-extensions (>= 0.1.0)
|
214
|
-
websocket-extensions (0.1.
|
215
|
-
yard (0.9.
|
236
|
+
websocket-extensions (0.1.5)
|
237
|
+
yard (0.9.26)
|
238
|
+
zeitwerk (2.4.2)
|
216
239
|
|
217
240
|
PLATFORMS
|
218
241
|
ruby
|
219
242
|
|
220
243
|
DEPENDENCIES
|
221
244
|
copy_tuner_client!
|
222
|
-
rails (~>
|
245
|
+
rails (~> 6.1)
|
223
246
|
rake
|
224
|
-
rspec
|
247
|
+
rspec
|
225
248
|
sgcop!
|
226
249
|
sham_rack
|
227
250
|
sinatra
|
data/README.md
CHANGED
@@ -61,12 +61,15 @@ $ npm run build # Compile to a <script> containing a self-executing function
|
|
61
61
|
|
62
62
|
### default spec
|
63
63
|
|
64
|
-
|
64
|
+
```
|
65
|
+
$ bundle exec rspec
|
66
|
+
```
|
65
67
|
|
66
|
-
###
|
68
|
+
### testing against all target rails versions
|
67
69
|
|
68
|
-
|
69
|
-
|
70
|
+
```
|
71
|
+
$ ./test.sh
|
72
|
+
```
|
70
73
|
|
71
74
|
## release gem
|
72
75
|
|
data/copy_tuner_client.gemspec
CHANGED
@@ -6,9 +6,10 @@ Gem::Specification.new do |s|
|
|
6
6
|
s.required_ruby_version = '>= 2.5.0'
|
7
7
|
s.add_dependency 'i18n', '>= 0.5.0'
|
8
8
|
s.add_dependency 'json'
|
9
|
-
s.
|
9
|
+
s.add_dependency 'nokogiri'
|
10
|
+
s.add_development_dependency 'rails', '~> 6.1'
|
10
11
|
s.add_development_dependency 'rake'
|
11
|
-
s.add_development_dependency 'rspec'
|
12
|
+
s.add_development_dependency 'rspec'
|
12
13
|
s.add_development_dependency 'sham_rack'
|
13
14
|
s.add_development_dependency 'sinatra'
|
14
15
|
s.add_development_dependency 'sqlite3'
|
data/gemfiles/5.2.gemfile
CHANGED
data/gemfiles/6.0.gemfile
CHANGED
@@ -19,7 +19,7 @@ module CopyTunerClient
|
|
19
19
|
:proxy_port, :proxy_user, :secure, :polling_delay, :sync_interval,
|
20
20
|
:sync_interval_staging, :sync_ignore_path_regex, :logger,
|
21
21
|
:framework, :middleware, :disable_middleware, :disable_test_translation,
|
22
|
-
:ca_file, :exclude_key_regexp, :s3_host, :locales].freeze
|
22
|
+
:ca_file, :exclude_key_regexp, :s3_host, :locales, :ignored_keys, :ignored_key_handler].freeze
|
23
23
|
|
24
24
|
# @return [String] The API key for your project, found on the project edit form.
|
25
25
|
attr_accessor :api_key
|
@@ -131,6 +131,12 @@ module CopyTunerClient
|
|
131
131
|
# @return [Boolean] Html escape
|
132
132
|
attr_accessor :html_escape
|
133
133
|
|
134
|
+
# @return [Array<String>] A list of ignored keys
|
135
|
+
attr_accessor :ignored_keys
|
136
|
+
|
137
|
+
# @return [Proc]
|
138
|
+
attr_accessor :ignored_key_handler
|
139
|
+
|
134
140
|
alias_method :secure?, :secure
|
135
141
|
|
136
142
|
# Instantiated from {CopyTunerClient.configure}. Sets defaults.
|
@@ -152,6 +158,8 @@ module CopyTunerClient
|
|
152
158
|
self.s3_host = 'copy-tuner-data-prod.s3.amazonaws.com'
|
153
159
|
self.disable_copyray_comment_injection = false
|
154
160
|
self.html_escape = false
|
161
|
+
self.ignored_keys = []
|
162
|
+
self.ignored_key_handler = -> (e) { raise e }
|
155
163
|
|
156
164
|
@applied = false
|
157
165
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'copy_tuner_client/copyray'
|
2
2
|
require 'copy_tuner_client/translation_log'
|
3
|
+
require 'copy_tuner_client/helper_extension'
|
3
4
|
|
4
5
|
module CopyTunerClient
|
5
6
|
# Connects to integration points for Rails 3 applications
|
@@ -10,36 +11,10 @@ module CopyTunerClient
|
|
10
11
|
|
11
12
|
initializer :initialize_copy_tuner_hook_methods, :after => :load_config_initializers do |app|
|
12
13
|
ActiveSupport.on_load(:action_view) do
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
if CopyTunerClient.configuration.disable_copyray_comment_injection || options[:rescue_format] == :text
|
18
|
-
if options[:rescue_format] == :text
|
19
|
-
ActiveSupport::Deprecation.warn('rescue_format option is deprecated in copy_tuner_client@0.6.0')
|
20
|
-
end
|
21
|
-
source
|
22
|
-
else
|
23
|
-
separator = options[:separator] || I18n.default_separator
|
24
|
-
scope = options[:scope]
|
25
|
-
normalized_key =
|
26
|
-
if key.to_s.first == '.'
|
27
|
-
scope_key_by_partial(key)
|
28
|
-
else
|
29
|
-
I18n.normalize_keys(nil, key, scope, separator).join(separator)
|
30
|
-
end
|
31
|
-
CopyTunerClient::Copyray.augment_template(source, normalized_key)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
if CopyTunerClient.configuration.enable_middleware?
|
35
|
-
alias_method :translate_without_copyray_comment, :translate
|
36
|
-
alias_method :translate, :translate_with_copyray_comment
|
37
|
-
alias :t :translate
|
38
|
-
alias :tt :translate_without_copyray_comment
|
39
|
-
else
|
40
|
-
alias :tt :translate
|
41
|
-
end
|
42
|
-
end
|
14
|
+
CopyTunerClient::HelperExtension.hook_translation_helper(
|
15
|
+
ActionView::Helpers::TranslationHelper,
|
16
|
+
middleware_enabled: CopyTunerClient.configuration.enable_middleware?
|
17
|
+
)
|
43
18
|
end
|
44
19
|
|
45
20
|
if CopyTunerClient.configuration.enable_middleware?
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module CopyTunerClient
|
2
|
+
module HelperExtension
|
3
|
+
class << self
|
4
|
+
def hook_translation_helper(mod, middleware_enabled:)
|
5
|
+
mod.class_eval do
|
6
|
+
def translate_with_copyray_comment(key, **options)
|
7
|
+
source = translate_without_copyray_comment(key, **options)
|
8
|
+
if CopyTunerClient.configuration.disable_copyray_comment_injection
|
9
|
+
source
|
10
|
+
else
|
11
|
+
separator = options[:separator] || I18n.default_separator
|
12
|
+
scope = options[:scope]
|
13
|
+
normalized_key =
|
14
|
+
if key.to_s.first == '.'
|
15
|
+
scope_key_by_partial(key)
|
16
|
+
else
|
17
|
+
I18n.normalize_keys(nil, key, scope, separator).join(separator)
|
18
|
+
end
|
19
|
+
CopyTunerClient::Copyray.augment_template(source, normalized_key)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
if middleware_enabled
|
23
|
+
alias_method :translate_without_copyray_comment, :translate
|
24
|
+
alias_method :translate, :translate_with_copyray_comment
|
25
|
+
alias :t :translate
|
26
|
+
alias :tt :translate_without_copyray_comment
|
27
|
+
else
|
28
|
+
alias :tt :translate
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -61,8 +61,16 @@ module CopyTunerClient
|
|
61
61
|
private
|
62
62
|
|
63
63
|
def lookup(locale, key, scope = [], options = {})
|
64
|
+
return nil if !key.is_a?(String) && !key.is_a?(Symbol)
|
65
|
+
|
64
66
|
parts = I18n.normalize_keys(locale, key, scope, options[:separator])
|
65
67
|
key_with_locale = parts.join('.')
|
68
|
+
key_without_locale = parts[1..].join('.')
|
69
|
+
|
70
|
+
if CopyTunerClient::configuration.ignored_keys.include?(key_without_locale)
|
71
|
+
CopyTunerClient::configuration.ignored_key_handler.call(IgnoredKey.new("Ignored key: #{key_without_locale}"))
|
72
|
+
end
|
73
|
+
|
66
74
|
content = cache[key_with_locale] || super
|
67
75
|
cache[key_with_locale] = nil if content.nil?
|
68
76
|
content
|
@@ -86,6 +94,8 @@ module CopyTunerClient
|
|
86
94
|
|
87
95
|
def default(locale, object, subject, options = {})
|
88
96
|
content = super(locale, object, subject, options)
|
97
|
+
return content if !object.is_a?(String) && !object.is_a?(Symbol)
|
98
|
+
|
89
99
|
if content.respond_to?(:to_str)
|
90
100
|
parts = I18n.normalize_keys(locale, object, options[:scope], options[:separator])
|
91
101
|
# NOTE: ActionView::Helpers::TranslationHelper#translate wraps default String in an Array
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
|
3
|
+
module CopyTunerClient
|
4
|
+
module I18nCompat
|
5
|
+
def select_html_incompatible_blurbs(blurbs)
|
6
|
+
non_html_key_blurbs = blurbs.reject { |key| key.ends_with?('.html') || key.ends_with?('_html') }
|
7
|
+
html_blurbs = non_html_key_blurbs.select do |key, content|
|
8
|
+
Nokogiri::HTML.fragment(content).children.any? { |node| node.name != 'text' }
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
module_function :select_html_incompatible_blurbs
|
13
|
+
end
|
14
|
+
end
|
@@ -19,7 +19,7 @@ module CopyTunerClient
|
|
19
19
|
def self.install_hook
|
20
20
|
I18n.class_eval do
|
21
21
|
class << self
|
22
|
-
def translate_with_copy_tuner_hook(key, **options)
|
22
|
+
def translate_with_copy_tuner_hook(key = nil, **options)
|
23
23
|
scope = options[:scope]
|
24
24
|
scope = scope.dup if scope.is_a?(Array) || scope.is_a?(String)
|
25
25
|
result = translate_without_copy_tuner_hook(key, **options)
|
@@ -25,8 +25,21 @@ namespace :copy_tuner do
|
|
25
25
|
if conflict_keys.empty?
|
26
26
|
puts 'All success'
|
27
27
|
else
|
28
|
-
|
29
|
-
|
28
|
+
puts conflict_keys.sort.join("\n")
|
29
|
+
exit 1
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
desc "Detect html incompatible keys."
|
34
|
+
task :detect_html_incompatible_keys => :environment do
|
35
|
+
require 'copy_tuner_client/i18n_compat'
|
36
|
+
html_incompatible_blurbs = CopyTunerClient::I18nCompat.select_html_incompatible_blurbs(CopyTunerClient.cache.blurbs)
|
37
|
+
|
38
|
+
if html_incompatible_blurbs.empty?
|
39
|
+
puts 'All success'
|
40
|
+
else
|
41
|
+
puts html_incompatible_blurbs.keys.sort.join("\n")
|
42
|
+
exit 1
|
30
43
|
end
|
31
44
|
end
|
32
45
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'copy_tuner_client/helper_extension'
|
3
|
+
require 'copy_tuner_client/copyray'
|
4
|
+
|
5
|
+
describe CopyTunerClient::HelperExtension do
|
6
|
+
# rails <= 6.0.x
|
7
|
+
module HashArgumentHelper
|
8
|
+
def translate(key, options = {})
|
9
|
+
"Hello, #{options[:name]}"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
# rails >= 6.1.x
|
14
|
+
module KeywordArgumentsHelper
|
15
|
+
def translate(key, **options)
|
16
|
+
"Hello, #{options[:name]}"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class HashArgumentView
|
21
|
+
include HashArgumentHelper
|
22
|
+
end
|
23
|
+
|
24
|
+
class KeywordArgumentsView
|
25
|
+
include KeywordArgumentsHelper
|
26
|
+
end
|
27
|
+
|
28
|
+
CopyTunerClient::HelperExtension.hook_translation_helper(HashArgumentHelper, middleware_enabled: true)
|
29
|
+
CopyTunerClient::HelperExtension.hook_translation_helper(KeywordArgumentsHelper, middleware_enabled: true)
|
30
|
+
|
31
|
+
it 'works with hash argument method' do
|
32
|
+
view = HashArgumentView.new
|
33
|
+
expect(view.translate('some.key', name: 'World')).to eq '<!--COPYRAY some.key-->Hello, World'
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'works with keyword argument method' do
|
37
|
+
view = KeywordArgumentsView.new
|
38
|
+
expect(view.translate('some.key', name: 'World')).to eq '<!--COPYRAY some.key-->Hello, World'
|
39
|
+
end
|
40
|
+
end
|
@@ -139,6 +139,13 @@ describe CopyTunerClient::I18nBackend do
|
|
139
139
|
end
|
140
140
|
end
|
141
141
|
|
142
|
+
context 'non-string key' do
|
143
|
+
it 'Not to be registered in the cache' do
|
144
|
+
expect { subject.translate('en', {}) }.to throw_symbol(:exception)
|
145
|
+
expect(cache).not_to have_key 'en.{}'
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
142
149
|
describe "with stored translations" do
|
143
150
|
subject { build_backend }
|
144
151
|
|
data/test.sh
ADDED
@@ -0,0 +1,6 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
BUNDLE_GEMFILE=gemfiles/5.2.gemfile bundle install && BUNDLE_GEMFILE=gemfiles/5.2.gemfile bundle exec rspec spec
|
4
|
+
BUNDLE_GEMFILE=gemfiles/6.0.gemfile bundle install && BUNDLE_GEMFILE=gemfiles/6.0.gemfile bundle exec rspec spec
|
5
|
+
BUNDLE_GEMFILE=gemfiles/6.1.gemfile bundle install && BUNDLE_GEMFILE=gemfiles/6.1.gemfile bundle exec rspec spec
|
6
|
+
BUNDLE_GEMFILE=gemfiles/main.gemfile bundle install && BUNDLE_GEMFILE=gemfiles/main.gemfile bundle exec rspec spec
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: copy_tuner_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- SonicGarden
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-11-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: i18n
|
@@ -38,20 +38,34 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: nokogiri
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rails
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - "~>"
|
46
60
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
61
|
+
version: '6.1'
|
48
62
|
type: :development
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
66
|
- - "~>"
|
53
67
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
68
|
+
version: '6.1'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: rake
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -70,16 +84,16 @@ dependencies:
|
|
70
84
|
name: rspec
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
|
-
- -
|
87
|
+
- - ">="
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
89
|
+
version: '0'
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
|
-
- -
|
94
|
+
- - ">="
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
96
|
+
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: sham_rack
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -188,6 +202,8 @@ files:
|
|
188
202
|
- copy_tuner_client.gemspec
|
189
203
|
- gemfiles/5.2.gemfile
|
190
204
|
- gemfiles/6.0.gemfile
|
205
|
+
- gemfiles/6.1.gemfile
|
206
|
+
- gemfiles/main.gemfile
|
191
207
|
- lib/copy_tuner_client.rb
|
192
208
|
- lib/copy_tuner_client/cache.rb
|
193
209
|
- lib/copy_tuner_client/client.rb
|
@@ -197,7 +213,9 @@ files:
|
|
197
213
|
- lib/copy_tuner_client/dotted_hash.rb
|
198
214
|
- lib/copy_tuner_client/engine.rb
|
199
215
|
- lib/copy_tuner_client/errors.rb
|
216
|
+
- lib/copy_tuner_client/helper_extension.rb
|
200
217
|
- lib/copy_tuner_client/i18n_backend.rb
|
218
|
+
- lib/copy_tuner_client/i18n_compat.rb
|
201
219
|
- lib/copy_tuner_client/poller.rb
|
202
220
|
- lib/copy_tuner_client/prefixed_logger.rb
|
203
221
|
- lib/copy_tuner_client/process_guard.rb
|
@@ -216,6 +234,7 @@ files:
|
|
216
234
|
- spec/copy_tuner_client/configuration_spec.rb
|
217
235
|
- spec/copy_tuner_client/copyray_spec.rb
|
218
236
|
- spec/copy_tuner_client/dotted_hash_spec.rb
|
237
|
+
- spec/copy_tuner_client/helper_extension_spec.rb
|
219
238
|
- spec/copy_tuner_client/i18n_backend_spec.rb
|
220
239
|
- spec/copy_tuner_client/poller_spec.rb
|
221
240
|
- spec/copy_tuner_client/prefixed_logger_spec.rb
|
@@ -239,6 +258,7 @@ files:
|
|
239
258
|
- src/main.js
|
240
259
|
- src/specimen.js
|
241
260
|
- src/util.js
|
261
|
+
- test.sh
|
242
262
|
- ui/views/copytuner/index.html.erb
|
243
263
|
- ui/views/layouts/copytuner_default.html.erb
|
244
264
|
homepage: https://github.com/SonicGarden/copy-tuner-ruby-client
|
@@ -259,7 +279,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
259
279
|
- !ruby/object:Gem::Version
|
260
280
|
version: '0'
|
261
281
|
requirements: []
|
262
|
-
rubygems_version: 3.1.
|
282
|
+
rubygems_version: 3.1.6
|
263
283
|
signing_key:
|
264
284
|
specification_version: 4
|
265
285
|
summary: Client for the CopyTuner copy management service
|
@@ -269,6 +289,7 @@ test_files:
|
|
269
289
|
- spec/copy_tuner_client/configuration_spec.rb
|
270
290
|
- spec/copy_tuner_client/copyray_spec.rb
|
271
291
|
- spec/copy_tuner_client/dotted_hash_spec.rb
|
292
|
+
- spec/copy_tuner_client/helper_extension_spec.rb
|
272
293
|
- spec/copy_tuner_client/i18n_backend_spec.rb
|
273
294
|
- spec/copy_tuner_client/poller_spec.rb
|
274
295
|
- spec/copy_tuner_client/prefixed_logger_spec.rb
|