phraseapp-in-context-editor-ruby 1.3.1 → 2.0.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 +4 -4
- data/.github/workflows/test.yml +12 -0
- data/.gitignore +0 -1
- data/.package-licenses.yml +4 -0
- data/.tool-versions +1 -0
- data/CHANGELOG.md +52 -6
- data/CODEOWNERS +1 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +241 -0
- data/Guardfile +13 -13
- data/README.md +81 -51
- data/RELEASING.md +10 -0
- data/config/license-decisions.yml +34 -0
- data/config/license_finder.yml +2 -0
- data/lib/generators/phraseapp_in_context_editor/install_generator.rb +3 -9
- data/lib/generators/phraseapp_in_context_editor/templates/phraseapp_in_context_editor.rb +9 -17
- data/lib/phraseapp-in-context-editor-ruby/adapters/fast_gettext.rb +20 -20
- data/lib/phraseapp-in-context-editor-ruby/adapters/i18n.rb +10 -10
- data/lib/phraseapp-in-context-editor-ruby/backend_service.rb +33 -100
- data/lib/phraseapp-in-context-editor-ruby/config.rb +13 -50
- data/lib/phraseapp-in-context-editor-ruby/delegate/fast_gettext.rb +13 -15
- data/lib/phraseapp-in-context-editor-ruby/delegate/i18n_delegate.rb +4 -50
- data/lib/phraseapp-in-context-editor-ruby/delegate.rb +13 -14
- data/lib/phraseapp-in-context-editor-ruby/engine.rb +5 -6
- data/lib/phraseapp-in-context-editor-ruby/view_helpers.rb +25 -19
- data/lib/phraseapp-in-context-editor-ruby.rb +15 -54
- data/phraseapp-in-context-editor-ruby.gemspec +18 -33
- metadata +32 -103
- data/.travis.yml +0 -8
- data/lib/generators/phraseapp_in_context_editor/templates/README +0 -10
- data/lib/phraseapp-in-context-editor-ruby/api_collection.rb +0 -41
- data/lib/phraseapp-in-context-editor-ruby/api_wrapper.rb +0 -59
- data/lib/phraseapp-in-context-editor-ruby/cache.rb +0 -37
- data/lib/phraseapp-in-context-editor-ruby/displayable_key_identifier.rb +0 -46
- data/lib/phraseapp-in-context-editor-ruby/fallback_keys_fetcher.rb +0 -44
- data/lib/phraseapp-in-context-editor-ruby/hash_flattener.rb +0 -53
- data/lib/phraseapp-in-context-editor-ruby/key_names_cache.rb +0 -53
- data/lib/phraseapp-in-context-editor-ruby/version.rb +0 -5
@@ -1,35 +1,41 @@
|
|
1
|
-
require
|
1
|
+
require "json"
|
2
2
|
|
3
3
|
module PhraseApp
|
4
4
|
module InContextEditor
|
5
5
|
module ViewHelpers
|
6
|
-
def
|
6
|
+
def load_in_context_editor(opts = {})
|
7
7
|
return "" unless PhraseApp::InContextEditor.enabled?
|
8
8
|
|
9
9
|
# stringify to reduce possible errors when passing symbols
|
10
|
-
|
11
|
-
|
10
|
+
opts = opts.nil? ? {} : opts.each_with_object({}) { |(k, v), conf|
|
11
|
+
conf[k.to_s] = v
|
12
|
+
}
|
12
13
|
|
13
14
|
# js options
|
14
15
|
configuration = {
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
"projectId" => PhraseApp::InContextEditor.project_id,
|
17
|
+
"accountId" => PhraseApp::InContextEditor.account_id,
|
18
|
+
"datacenter" => PhraseApp::InContextEditor.datacenter,
|
19
|
+
"prefix" => PhraseApp::InContextEditor.prefix,
|
20
|
+
"suffix" => PhraseApp::InContextEditor.suffix
|
21
|
+
}.merge(opts)
|
20
22
|
|
21
|
-
snippet = <<-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
23
|
+
snippet = <<-EOS
|
24
|
+
<script>
|
25
|
+
window.PHRASEAPP_CONFIG = #{configuration.to_json};
|
26
|
+
(function() {
|
27
|
+
let phraseapp = document.createElement('script');
|
28
|
+
phraseapp.type = 'module';
|
29
|
+
phraseapp.async = true;
|
30
|
+
phraseapp.src = "https://d2bgdldl6xit7z.cloudfront.net/latest/ice/index.js";
|
31
|
+
let script = document.getElementsByTagName('script')[0];
|
32
|
+
script.parentNode.insertBefore(phraseapp, script);
|
33
|
+
})();
|
34
|
+
</script>
|
35
|
+
EOS
|
31
36
|
snippet.respond_to?(:html_safe) ? snippet.html_safe : snippet
|
32
37
|
end
|
38
|
+
alias_method :phraseapp_in_context_editor_js, :load_in_context_editor
|
33
39
|
end
|
34
40
|
end
|
35
41
|
end
|
@@ -1,10 +1,8 @@
|
|
1
|
-
|
2
|
-
require 'phraseapp-ruby'
|
3
|
-
require 'request_store'
|
1
|
+
require "request_store"
|
4
2
|
|
5
3
|
module PhraseApp
|
6
4
|
module InContextEditor
|
7
|
-
autoload :Config,
|
5
|
+
autoload :Config, "phraseapp-in-context-editor-ruby/config"
|
8
6
|
|
9
7
|
class << self
|
10
8
|
def config
|
@@ -31,24 +29,12 @@ module PhraseApp
|
|
31
29
|
config.project_id
|
32
30
|
end
|
33
31
|
|
34
|
-
def
|
35
|
-
config.
|
32
|
+
def account_id
|
33
|
+
config.account_id
|
36
34
|
end
|
37
35
|
|
38
|
-
def
|
39
|
-
config.
|
40
|
-
end
|
41
|
-
|
42
|
-
def cache_key_segments_initial
|
43
|
-
config.cache_key_segments_initial
|
44
|
-
end
|
45
|
-
|
46
|
-
def cache_lifetime
|
47
|
-
config.cache_lifetime
|
48
|
-
end
|
49
|
-
|
50
|
-
def ignored_keys
|
51
|
-
config.ignored_keys
|
36
|
+
def datacenter
|
37
|
+
config.datacenter
|
52
38
|
end
|
53
39
|
|
54
40
|
def enabled=(value)
|
@@ -62,38 +48,14 @@ module PhraseApp
|
|
62
48
|
def disabled?
|
63
49
|
!config.enabled
|
64
50
|
end
|
65
|
-
|
66
|
-
def js_use_ssl
|
67
|
-
config.js_use_ssl
|
68
|
-
end
|
69
|
-
|
70
|
-
def js_host
|
71
|
-
config.js_host
|
72
|
-
end
|
73
|
-
|
74
|
-
def js_path
|
75
|
-
config.js_path
|
76
|
-
end
|
77
|
-
|
78
|
-
def js_options
|
79
|
-
config.js_options
|
80
|
-
end
|
81
|
-
|
82
|
-
def api_host
|
83
|
-
config.api_host
|
84
|
-
end
|
85
|
-
|
86
|
-
def api_client
|
87
|
-
config.api_client
|
88
|
-
end
|
89
51
|
end
|
90
52
|
|
91
53
|
def self.configure
|
92
54
|
yield(PhraseApp::InContextEditor::Config)
|
93
55
|
end
|
94
56
|
|
95
|
-
def self.with_config(config_options={}, &block)
|
96
|
-
original_config =
|
57
|
+
def self.with_config(config_options = {}, &block)
|
58
|
+
original_config = config.dup
|
97
59
|
config.assign_values(config_options)
|
98
60
|
yield
|
99
61
|
ensure
|
@@ -101,17 +63,16 @@ module PhraseApp
|
|
101
63
|
end
|
102
64
|
end
|
103
65
|
|
104
|
-
autoload :ViewHelpers,
|
66
|
+
autoload :ViewHelpers, "phraseapp-in-context-editor-ruby/view_helpers"
|
105
67
|
|
106
|
-
require
|
107
|
-
require
|
108
|
-
require
|
109
|
-
require
|
110
|
-
require 'phraseapp-in-context-editor-ruby/view_helpers'
|
68
|
+
require "phraseapp-in-context-editor-ruby/engine"
|
69
|
+
require "phraseapp-in-context-editor-ruby/delegate"
|
70
|
+
require "phraseapp-in-context-editor-ruby/backend_service"
|
71
|
+
require "phraseapp-in-context-editor-ruby/view_helpers"
|
111
72
|
end
|
112
73
|
|
113
74
|
# Only load adapters directly if non-rails app, otherwise use engine
|
114
75
|
unless defined? Rails
|
115
|
-
require
|
116
|
-
require
|
76
|
+
require "phraseapp-in-context-editor-ruby/adapters/i18n"
|
77
|
+
require "phraseapp-in-context-editor-ruby/adapters/fast_gettext"
|
117
78
|
end
|
@@ -1,43 +1,28 @@
|
|
1
|
-
#
|
2
|
-
lib = File.expand_path('../lib/', __FILE__)
|
3
|
-
$:.unshift lib unless $:.include?(lib)
|
4
|
-
|
5
|
-
require 'phraseapp-in-context-editor-ruby/version'
|
1
|
+
# frozen_string_literal: true
|
6
2
|
|
7
3
|
Gem::Specification.new do |s|
|
8
4
|
s.name = "phraseapp-in-context-editor-ruby"
|
9
|
-
s.version =
|
5
|
+
s.version = "2.0.0"
|
10
6
|
s.platform = Gem::Platform::RUBY
|
11
|
-
s.required_ruby_version =
|
12
|
-
s.authors = ["
|
7
|
+
s.required_ruby_version = ">= 3.2.0"
|
8
|
+
s.authors = ["Phrase"]
|
13
9
|
s.email = ["info@phrase.com"]
|
14
10
|
s.homepage = "https://phrase.com"
|
15
|
-
s.summary =
|
16
|
-
s.licenses = [
|
17
|
-
s.description =
|
11
|
+
s.summary = "Translation management solution for web and mobile applications"
|
12
|
+
s.licenses = ["MIT"]
|
13
|
+
s.description = "Phrase In-Context-Editor allows you to edit translations directly on the website. More information: phrase.com"
|
18
14
|
s.required_rubygems_version = ">= 1.3.6"
|
19
|
-
|
20
|
-
|
15
|
+
git_files = begin
|
16
|
+
`git ls-files | grep -v spec/`.split("\n")
|
17
|
+
rescue
|
18
|
+
""
|
19
|
+
end
|
21
20
|
s.files = git_files
|
22
|
-
s.test_files = s.files.grep(%r{^(spec)/})
|
23
21
|
s.require_paths = ["lib"]
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
s.
|
30
|
-
s.add_dependency('phraseapp-ruby', '~> 1.3')
|
31
|
-
s.add_dependency('request_store', '~> 1.3')
|
32
|
-
s.add_development_dependency('rspec', '~> 3.2')
|
33
|
-
s.add_development_dependency('webmock', '~> 1.21')
|
34
|
-
s.add_development_dependency('vcr', '~> 2.9')
|
35
|
-
s.add_development_dependency('timecop', '~> 0.7')
|
36
|
-
if RUBY_VERSION < '2.2'
|
37
|
-
s.add_development_dependency('mime-types', '< 3.0') # for 1.9.3 to work
|
38
|
-
s.add_development_dependency('rails', '~> 4.2')
|
39
|
-
else
|
40
|
-
s.add_development_dependency('rails', '>= 4.2', '< 5.1')
|
41
|
-
end
|
42
|
-
s.add_development_dependency('github_changelog_generator')
|
22
|
+
s.add_dependency("json", "~> 2.0")
|
23
|
+
s.add_dependency("i18n", "~> 1.0")
|
24
|
+
s.add_dependency("request_store", "~> 1.2")
|
25
|
+
s.add_development_dependency("rspec", "~> 3.0")
|
26
|
+
s.add_development_dependency("rails", "~> 7.0")
|
27
|
+
s.add_development_dependency("github_changelog_generator", "~> 1.16")
|
43
28
|
end
|
metadata
CHANGED
@@ -1,167 +1,99 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: phraseapp-in-context-editor-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
8
|
-
autorequire:
|
7
|
+
- Phrase
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-09-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.8'
|
20
|
-
- - "<"
|
17
|
+
- - "~>"
|
21
18
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
19
|
+
version: '2.0'
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
|
-
- - "
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '1.8'
|
30
|
-
- - "<"
|
24
|
+
- - "~>"
|
31
25
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
26
|
+
version: '2.0'
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
28
|
name: i18n
|
35
|
-
requirement: !ruby/object:Gem::Requirement
|
36
|
-
requirements:
|
37
|
-
- - ">="
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version: '0.6'
|
40
|
-
type: :runtime
|
41
|
-
prerelease: false
|
42
|
-
version_requirements: !ruby/object:Gem::Requirement
|
43
|
-
requirements:
|
44
|
-
- - ">="
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: '0.6'
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: phraseapp-ruby
|
49
29
|
requirement: !ruby/object:Gem::Requirement
|
50
30
|
requirements:
|
51
31
|
- - "~>"
|
52
32
|
- !ruby/object:Gem::Version
|
53
|
-
version: '1.
|
33
|
+
version: '1.0'
|
54
34
|
type: :runtime
|
55
35
|
prerelease: false
|
56
36
|
version_requirements: !ruby/object:Gem::Requirement
|
57
37
|
requirements:
|
58
38
|
- - "~>"
|
59
39
|
- !ruby/object:Gem::Version
|
60
|
-
version: '1.
|
40
|
+
version: '1.0'
|
61
41
|
- !ruby/object:Gem::Dependency
|
62
42
|
name: request_store
|
63
43
|
requirement: !ruby/object:Gem::Requirement
|
64
44
|
requirements:
|
65
45
|
- - "~>"
|
66
46
|
- !ruby/object:Gem::Version
|
67
|
-
version: '1.
|
47
|
+
version: '1.2'
|
68
48
|
type: :runtime
|
69
49
|
prerelease: false
|
70
50
|
version_requirements: !ruby/object:Gem::Requirement
|
71
51
|
requirements:
|
72
52
|
- - "~>"
|
73
53
|
- !ruby/object:Gem::Version
|
74
|
-
version: '1.
|
54
|
+
version: '1.2'
|
75
55
|
- !ruby/object:Gem::Dependency
|
76
56
|
name: rspec
|
77
57
|
requirement: !ruby/object:Gem::Requirement
|
78
58
|
requirements:
|
79
59
|
- - "~>"
|
80
60
|
- !ruby/object:Gem::Version
|
81
|
-
version: '3.
|
82
|
-
type: :development
|
83
|
-
prerelease: false
|
84
|
-
version_requirements: !ruby/object:Gem::Requirement
|
85
|
-
requirements:
|
86
|
-
- - "~>"
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
version: '3.2'
|
89
|
-
- !ruby/object:Gem::Dependency
|
90
|
-
name: webmock
|
91
|
-
requirement: !ruby/object:Gem::Requirement
|
92
|
-
requirements:
|
93
|
-
- - "~>"
|
94
|
-
- !ruby/object:Gem::Version
|
95
|
-
version: '1.21'
|
61
|
+
version: '3.0'
|
96
62
|
type: :development
|
97
63
|
prerelease: false
|
98
64
|
version_requirements: !ruby/object:Gem::Requirement
|
99
65
|
requirements:
|
100
66
|
- - "~>"
|
101
67
|
- !ruby/object:Gem::Version
|
102
|
-
version: '
|
68
|
+
version: '3.0'
|
103
69
|
- !ruby/object:Gem::Dependency
|
104
|
-
name:
|
70
|
+
name: rails
|
105
71
|
requirement: !ruby/object:Gem::Requirement
|
106
72
|
requirements:
|
107
73
|
- - "~>"
|
108
74
|
- !ruby/object:Gem::Version
|
109
|
-
version: '
|
75
|
+
version: '7.0'
|
110
76
|
type: :development
|
111
77
|
prerelease: false
|
112
78
|
version_requirements: !ruby/object:Gem::Requirement
|
113
79
|
requirements:
|
114
80
|
- - "~>"
|
115
81
|
- !ruby/object:Gem::Version
|
116
|
-
version: '
|
82
|
+
version: '7.0'
|
117
83
|
- !ruby/object:Gem::Dependency
|
118
|
-
name:
|
84
|
+
name: github_changelog_generator
|
119
85
|
requirement: !ruby/object:Gem::Requirement
|
120
86
|
requirements:
|
121
87
|
- - "~>"
|
122
88
|
- !ruby/object:Gem::Version
|
123
|
-
version: '
|
89
|
+
version: '1.16'
|
124
90
|
type: :development
|
125
91
|
prerelease: false
|
126
92
|
version_requirements: !ruby/object:Gem::Requirement
|
127
93
|
requirements:
|
128
94
|
- - "~>"
|
129
95
|
- !ruby/object:Gem::Version
|
130
|
-
version: '
|
131
|
-
- !ruby/object:Gem::Dependency
|
132
|
-
name: rails
|
133
|
-
requirement: !ruby/object:Gem::Requirement
|
134
|
-
requirements:
|
135
|
-
- - ">="
|
136
|
-
- !ruby/object:Gem::Version
|
137
|
-
version: '4.2'
|
138
|
-
- - "<"
|
139
|
-
- !ruby/object:Gem::Version
|
140
|
-
version: '5.1'
|
141
|
-
type: :development
|
142
|
-
prerelease: false
|
143
|
-
version_requirements: !ruby/object:Gem::Requirement
|
144
|
-
requirements:
|
145
|
-
- - ">="
|
146
|
-
- !ruby/object:Gem::Version
|
147
|
-
version: '4.2'
|
148
|
-
- - "<"
|
149
|
-
- !ruby/object:Gem::Version
|
150
|
-
version: '5.1'
|
151
|
-
- !ruby/object:Gem::Dependency
|
152
|
-
name: github_changelog_generator
|
153
|
-
requirement: !ruby/object:Gem::Requirement
|
154
|
-
requirements:
|
155
|
-
- - ">="
|
156
|
-
- !ruby/object:Gem::Version
|
157
|
-
version: '0'
|
158
|
-
type: :development
|
159
|
-
prerelease: false
|
160
|
-
version_requirements: !ruby/object:Gem::Requirement
|
161
|
-
requirements:
|
162
|
-
- - ">="
|
163
|
-
- !ruby/object:Gem::Version
|
164
|
-
version: '0'
|
96
|
+
version: '1.16'
|
165
97
|
description: 'Phrase In-Context-Editor allows you to edit translations directly on
|
166
98
|
the website. More information: phrase.com'
|
167
99
|
email:
|
@@ -170,41 +102,39 @@ executables: []
|
|
170
102
|
extensions: []
|
171
103
|
extra_rdoc_files: []
|
172
104
|
files:
|
105
|
+
- ".github/workflows/test.yml"
|
173
106
|
- ".gitignore"
|
174
|
-
- ".
|
107
|
+
- ".package-licenses.yml"
|
108
|
+
- ".tool-versions"
|
175
109
|
- CHANGELOG.md
|
110
|
+
- CODEOWNERS
|
176
111
|
- Gemfile
|
112
|
+
- Gemfile.lock
|
177
113
|
- Guardfile
|
178
114
|
- LICENSE
|
179
115
|
- README.md
|
116
|
+
- RELEASING.md
|
180
117
|
- cacert.pem
|
118
|
+
- config/license-decisions.yml
|
119
|
+
- config/license_finder.yml
|
181
120
|
- lib/generators/phraseapp_in_context_editor/install_generator.rb
|
182
|
-
- lib/generators/phraseapp_in_context_editor/templates/README
|
183
121
|
- lib/generators/phraseapp_in_context_editor/templates/phraseapp_in_context_editor.rb
|
184
122
|
- lib/phraseapp-in-context-editor-ruby.rb
|
185
123
|
- lib/phraseapp-in-context-editor-ruby/adapters/fast_gettext.rb
|
186
124
|
- lib/phraseapp-in-context-editor-ruby/adapters/i18n.rb
|
187
|
-
- lib/phraseapp-in-context-editor-ruby/api_collection.rb
|
188
|
-
- lib/phraseapp-in-context-editor-ruby/api_wrapper.rb
|
189
125
|
- lib/phraseapp-in-context-editor-ruby/backend_service.rb
|
190
|
-
- lib/phraseapp-in-context-editor-ruby/cache.rb
|
191
126
|
- lib/phraseapp-in-context-editor-ruby/config.rb
|
192
127
|
- lib/phraseapp-in-context-editor-ruby/delegate.rb
|
193
128
|
- lib/phraseapp-in-context-editor-ruby/delegate/fast_gettext.rb
|
194
129
|
- lib/phraseapp-in-context-editor-ruby/delegate/i18n_delegate.rb
|
195
|
-
- lib/phraseapp-in-context-editor-ruby/displayable_key_identifier.rb
|
196
130
|
- lib/phraseapp-in-context-editor-ruby/engine.rb
|
197
|
-
- lib/phraseapp-in-context-editor-ruby/fallback_keys_fetcher.rb
|
198
|
-
- lib/phraseapp-in-context-editor-ruby/hash_flattener.rb
|
199
|
-
- lib/phraseapp-in-context-editor-ruby/key_names_cache.rb
|
200
|
-
- lib/phraseapp-in-context-editor-ruby/version.rb
|
201
131
|
- lib/phraseapp-in-context-editor-ruby/view_helpers.rb
|
202
132
|
- phraseapp-in-context-editor-ruby.gemspec
|
203
133
|
homepage: https://phrase.com
|
204
134
|
licenses:
|
205
135
|
- MIT
|
206
136
|
metadata: {}
|
207
|
-
post_install_message:
|
137
|
+
post_install_message:
|
208
138
|
rdoc_options: []
|
209
139
|
require_paths:
|
210
140
|
- lib
|
@@ -212,16 +142,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
212
142
|
requirements:
|
213
143
|
- - ">="
|
214
144
|
- !ruby/object:Gem::Version
|
215
|
-
version:
|
145
|
+
version: 3.2.0
|
216
146
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
217
147
|
requirements:
|
218
148
|
- - ">="
|
219
149
|
- !ruby/object:Gem::Version
|
220
150
|
version: 1.3.6
|
221
151
|
requirements: []
|
222
|
-
|
223
|
-
|
224
|
-
signing_key:
|
152
|
+
rubygems_version: 3.4.13
|
153
|
+
signing_key:
|
225
154
|
specification_version: 4
|
226
155
|
summary: Translation management solution for web and mobile applications
|
227
156
|
test_files: []
|
data/.travis.yml
DELETED
@@ -1,10 +0,0 @@
|
|
1
|
-
===============================================================================
|
2
|
-
Welcome to PhraseApp!
|
3
|
-
|
4
|
-
PhraseApp is the translation management solution for web and mobile applications. Collaborate with your team, find professional translators and stay on top of the process.
|
5
|
-
|
6
|
-
How awesome would it be if translators could simply browse your website and edit text along the way? Our In-Context Editor offers just that. It provides translators with useful contextual information which improves overall translation quality.
|
7
|
-
|
8
|
-
Login: https://phraseapp.com/account/login
|
9
|
-
Documentation: https://help.phraseapp.com/translate-website-and-app-content/use-in-context-editor-to-translate/translate-directly-on-your-website
|
10
|
-
===============================================================================
|
@@ -1,41 +0,0 @@
|
|
1
|
-
module PhraseApp
|
2
|
-
module InContextEditor
|
3
|
-
class ApiCollection
|
4
|
-
def initialize(api_client, action, ids=[], query=nil)
|
5
|
-
raise "PhraseApp API client can't handle action #{action}" unless api_client.respond_to?(action)
|
6
|
-
|
7
|
-
@api_client = api_client
|
8
|
-
@action = action
|
9
|
-
@ids = ids
|
10
|
-
@query = query
|
11
|
-
end
|
12
|
-
|
13
|
-
def collection
|
14
|
-
results = []
|
15
|
-
page = 1
|
16
|
-
per_page = 100
|
17
|
-
paginated, err = send_request(page, per_page)
|
18
|
-
results << paginated
|
19
|
-
|
20
|
-
while paginated.size == per_page
|
21
|
-
break if page > 100
|
22
|
-
|
23
|
-
page = page + 1
|
24
|
-
paginated, err = send_request(page, per_page)
|
25
|
-
results << paginated if paginated.present?
|
26
|
-
end
|
27
|
-
|
28
|
-
results.flatten.uniq
|
29
|
-
end
|
30
|
-
|
31
|
-
private
|
32
|
-
def send_request(page, per_page)
|
33
|
-
if @query.present?
|
34
|
-
@api_client.send(@action, *@ids, page, per_page, @query)
|
35
|
-
else
|
36
|
-
@api_client.send(@action, *@ids, page, per_page)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
@@ -1,59 +0,0 @@
|
|
1
|
-
require 'phraseapp-in-context-editor-ruby/api_collection'
|
2
|
-
|
3
|
-
module PhraseApp
|
4
|
-
module InContextEditor
|
5
|
-
class ApiWrapper
|
6
|
-
def initialize
|
7
|
-
@api_client = PhraseApp::InContextEditor.api_client
|
8
|
-
end
|
9
|
-
|
10
|
-
def default_locale
|
11
|
-
@default_locale ||= select_default_locale
|
12
|
-
end
|
13
|
-
|
14
|
-
def default_translation(key)
|
15
|
-
params = PhraseApp::RequestParams::TranslationsByKeyParams.new
|
16
|
-
translations = PhraseApp::InContextEditor::ApiCollection.new(@api_client, "translations_by_key", project_and_key_id(key), params).collection
|
17
|
-
return unless translations.present?
|
18
|
-
|
19
|
-
translations.select{ |translation| translation.locale["id"] == default_locale.id }
|
20
|
-
end
|
21
|
-
|
22
|
-
def keys_with_prefix(prefix)
|
23
|
-
params = PhraseApp::RequestParams::KeysSearchParams.new(q:"#{prefix}*")
|
24
|
-
keys_list(params)
|
25
|
-
end
|
26
|
-
|
27
|
-
def keys_by_names(names)
|
28
|
-
names = names.join(',')
|
29
|
-
params = PhraseApp::RequestParams::KeysSearchParams.new(:q => "name:#{names}")
|
30
|
-
keys_list(params)
|
31
|
-
end
|
32
|
-
|
33
|
-
def keys_list(params)
|
34
|
-
PhraseApp::InContextEditor::ApiCollection.new(@api_client, "keys_search", project_id, params).collection
|
35
|
-
end
|
36
|
-
|
37
|
-
def blacklisted_keys
|
38
|
-
PhraseApp::InContextEditor::ApiCollection.new(@api_client, "blacklisted_keys_list", project_id).collection.map{ |rule| rule.name }
|
39
|
-
end
|
40
|
-
|
41
|
-
private
|
42
|
-
|
43
|
-
def select_default_locale
|
44
|
-
locales = PhraseApp::InContextEditor::ApiCollection.new(@api_client, "locales_list", project_id).collection
|
45
|
-
return unless locales.present?
|
46
|
-
|
47
|
-
locales.select{ |loc| loc.default }.first
|
48
|
-
end
|
49
|
-
|
50
|
-
def project_id
|
51
|
-
[PhraseApp::InContextEditor.project_id]
|
52
|
-
end
|
53
|
-
|
54
|
-
def project_and_key_id(key)
|
55
|
-
project_id << key.id
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
|
-
|
3
|
-
require 'phraseapp-in-context-editor-ruby'
|
4
|
-
|
5
|
-
module PhraseApp
|
6
|
-
module InContextEditor
|
7
|
-
class Cache
|
8
|
-
attr_accessor :lifetime
|
9
|
-
|
10
|
-
def initialize(args={})
|
11
|
-
@store = {}
|
12
|
-
@lifetime = args.fetch(:lifetime, PhraseApp::InContextEditor.cache_lifetime)
|
13
|
-
end
|
14
|
-
|
15
|
-
def cached?(cache_key)
|
16
|
-
@store.has_key?(cache_key) && !expired?(cache_key)
|
17
|
-
end
|
18
|
-
|
19
|
-
def get(cache_key)
|
20
|
-
begin
|
21
|
-
@store.fetch(cache_key)[:payload]
|
22
|
-
rescue
|
23
|
-
nil
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def set(cache_key, value)
|
28
|
-
@store[cache_key] = {timestamp: Time.now, payload: value}
|
29
|
-
end
|
30
|
-
|
31
|
-
private
|
32
|
-
def expired?(cache_key)
|
33
|
-
@store.fetch(cache_key)[:timestamp] < (Time.now - @lifetime)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|