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.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +12 -0
  3. data/.gitignore +0 -1
  4. data/.package-licenses.yml +4 -0
  5. data/.tool-versions +1 -0
  6. data/CHANGELOG.md +52 -6
  7. data/CODEOWNERS +1 -0
  8. data/Gemfile +1 -1
  9. data/Gemfile.lock +241 -0
  10. data/Guardfile +13 -13
  11. data/README.md +81 -51
  12. data/RELEASING.md +10 -0
  13. data/config/license-decisions.yml +34 -0
  14. data/config/license_finder.yml +2 -0
  15. data/lib/generators/phraseapp_in_context_editor/install_generator.rb +3 -9
  16. data/lib/generators/phraseapp_in_context_editor/templates/phraseapp_in_context_editor.rb +9 -17
  17. data/lib/phraseapp-in-context-editor-ruby/adapters/fast_gettext.rb +20 -20
  18. data/lib/phraseapp-in-context-editor-ruby/adapters/i18n.rb +10 -10
  19. data/lib/phraseapp-in-context-editor-ruby/backend_service.rb +33 -100
  20. data/lib/phraseapp-in-context-editor-ruby/config.rb +13 -50
  21. data/lib/phraseapp-in-context-editor-ruby/delegate/fast_gettext.rb +13 -15
  22. data/lib/phraseapp-in-context-editor-ruby/delegate/i18n_delegate.rb +4 -50
  23. data/lib/phraseapp-in-context-editor-ruby/delegate.rb +13 -14
  24. data/lib/phraseapp-in-context-editor-ruby/engine.rb +5 -6
  25. data/lib/phraseapp-in-context-editor-ruby/view_helpers.rb +25 -19
  26. data/lib/phraseapp-in-context-editor-ruby.rb +15 -54
  27. data/phraseapp-in-context-editor-ruby.gemspec +18 -33
  28. metadata +32 -103
  29. data/.travis.yml +0 -8
  30. data/lib/generators/phraseapp_in_context_editor/templates/README +0 -10
  31. data/lib/phraseapp-in-context-editor-ruby/api_collection.rb +0 -41
  32. data/lib/phraseapp-in-context-editor-ruby/api_wrapper.rb +0 -59
  33. data/lib/phraseapp-in-context-editor-ruby/cache.rb +0 -37
  34. data/lib/phraseapp-in-context-editor-ruby/displayable_key_identifier.rb +0 -46
  35. data/lib/phraseapp-in-context-editor-ruby/fallback_keys_fetcher.rb +0 -44
  36. data/lib/phraseapp-in-context-editor-ruby/hash_flattener.rb +0 -53
  37. data/lib/phraseapp-in-context-editor-ruby/key_names_cache.rb +0 -53
  38. data/lib/phraseapp-in-context-editor-ruby/version.rb +0 -5
@@ -1,35 +1,41 @@
1
- require 'json'
1
+ require "json"
2
2
 
3
3
  module PhraseApp
4
4
  module InContextEditor
5
5
  module ViewHelpers
6
- def phraseapp_in_context_editor_js(opts={})
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
- js_default_options = PhraseApp::InContextEditor.js_options.inject({}) { |conf, (k,v)| conf[k.to_s] = v; conf}
11
- opts = opts.nil? ? {} : opts.inject({}) { |conf, (k,v)| conf[k.to_s] = v; conf}
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
- 'projectId' => PhraseApp::InContextEditor.project_id,
16
- 'prefix' => PhraseApp::InContextEditor.prefix,
17
- 'suffix' => PhraseApp::InContextEditor.suffix,
18
- 'apiBaseUrl' => "#{PhraseApp::InContextEditor.api_host}/api/v2",
19
- }.merge(js_default_options).merge(opts)
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 = <<-eos
22
- <script>
23
- window.PHRASEAPP_CONFIG = #{configuration.to_json};
24
- (function() {
25
- var phraseapp = document.createElement('script'); phraseapp.type = 'text/javascript'; phraseapp.async = true;
26
- phraseapp.src = ['#{PhraseApp::InContextEditor.js_use_ssl ? 'https' : 'http'}://', '#{PhraseApp::InContextEditor.js_host}#{PhraseApp::InContextEditor.js_path}?', new Date().getTime()].join('');
27
- var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(phraseapp, s);
28
- })();
29
- </script>
30
- eos
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
- # -*- encoding : utf-8 -*-
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, 'phraseapp-in-context-editor-ruby/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 access_token
35
- config.access_token
32
+ def account_id
33
+ config.account_id
36
34
  end
37
35
 
38
- def skip_ssl_verification
39
- config.skip_ssl_verification
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 = self.config.dup
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, 'phraseapp-in-context-editor-ruby/view_helpers'
66
+ autoload :ViewHelpers, "phraseapp-in-context-editor-ruby/view_helpers"
105
67
 
106
- require 'phraseapp-in-context-editor-ruby/version'
107
- require 'phraseapp-in-context-editor-ruby/engine'
108
- require 'phraseapp-in-context-editor-ruby/delegate'
109
- require 'phraseapp-in-context-editor-ruby/backend_service'
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 'phraseapp-in-context-editor-ruby/adapters/i18n'
116
- require 'phraseapp-in-context-editor-ruby/adapters/fast_gettext'
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
- # -*- encoding: utf-8 -*-
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 = PhraseApp::InContextEditor::VERSION
5
+ s.version = "2.0.0"
10
6
  s.platform = Gem::Platform::RUBY
11
- s.required_ruby_version = '>= 2.1'
12
- s.authors = ["Dynport GmbH"]
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 = %q{Translation management solution for web and mobile applications}
16
- s.licenses = ['MIT']
17
- s.description = %q{Phrase In-Context-Editor allows you to edit translations directly on the website. More information: phrase.com}
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
- s.rubyforge_project = "phraseapp-in-context-editor-ruby"
20
- git_files = `git ls-files | grep -v spec/`.split("\n") rescue ''
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
- if RUBY_VERSION >= '2.4'
25
- s.add_dependency('json', '>= 1.8', '< 3')
26
- else
27
- s.add_dependency('json', '>= 1.7', '< 3')
28
- end
29
- s.add_dependency('i18n', '>= 0.6')
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: 1.3.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
- - Dynport GmbH
8
- autorequire:
7
+ - Phrase
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-29 00:00:00.000000000 Z
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: '3'
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: '3'
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.3'
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.3'
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.3'
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.3'
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.2'
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: '1.21'
68
+ version: '3.0'
103
69
  - !ruby/object:Gem::Dependency
104
- name: vcr
70
+ name: rails
105
71
  requirement: !ruby/object:Gem::Requirement
106
72
  requirements:
107
73
  - - "~>"
108
74
  - !ruby/object:Gem::Version
109
- version: '2.9'
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: '2.9'
82
+ version: '7.0'
117
83
  - !ruby/object:Gem::Dependency
118
- name: timecop
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: '0.7'
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: '0.7'
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
- - ".travis.yml"
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: '2.1'
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
- rubyforge_project: phraseapp-in-context-editor-ruby
223
- rubygems_version: 2.7.7
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,8 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - "2.1.10"
4
- - "2.2.6"
5
- - "2.3.3"
6
- - "2.4.0"
7
- - "2.5.1"
8
- script: bundle exec rspec spec
@@ -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