glossync 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5e2450f5576a89f1db3e54a7ddb46b6fb9a77d35e8883272959f666b8cc87cad
4
- data.tar.gz: ba10cd3f9a0fe0b2d6aea66cc14e0da08e5f5e925b760b880af44027071bead0
3
+ metadata.gz: c9f37796efedf9aee1579ceb60b4c88ac241ad40744a00e10a7563103270c950
4
+ data.tar.gz: b0ac328d38119d563e8f5193679c147423714640613dc5d5bf041dd26533a613
5
5
  SHA512:
6
- metadata.gz: 3046bb3e3056b9589b4f24091ee37931f3775d6b5cdbc0cf2632a1281aa0852fe7798cf7088fd542d8bd047fcf357ffcf68f90b46284445cf5f2275e083856a0
7
- data.tar.gz: d409fadc2172f7139f13d93f9d5303c5b1ea6da3f6b28e238367a5f85535606496a613aa6aee74b6af117db0da64ef5c9bfc8961302d9a9e107f96fa0ecddfc7
6
+ metadata.gz: ceaf7fbae10d61519576b76f81be6b3bd6c10ef4385a67d0157b239b7fe567366ffca5f2c6458aec1e95cf1bba2340d4d7532a22c73f051703a10d1a060f9a53
7
+ data.tar.gz: bd725afe42d70c64e61d34021bb960de1956bd53cdb193db5864bc5e542c4637c30b2bc19b1a496d5648e95f288c26e11f8f63b15145a7eb0d0f7e92ebed6587
data/.env.example ADDED
@@ -0,0 +1 @@
1
+ export GOOGLE_TRANSLATE_API_KEY=abcdeFGH1JKLMN0p
data/.gitignore CHANGED
@@ -7,5 +7,7 @@
7
7
  /spec/reports/
8
8
  /tmp/
9
9
 
10
+ .env
11
+
10
12
  # rspec failure tracking
11
13
  .rspec_status
data/Gemfile.lock CHANGED
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- glossync (0.1.0)
4
+ glossync (0.2.0)
5
+ easy_translate (~> 0.5)
5
6
  i18n (~> 1.1)
6
7
 
7
8
  GEM
@@ -9,7 +10,10 @@ GEM
9
10
  specs:
10
11
  concurrent-ruby (1.1.4)
11
12
  diff-lcs (1.3)
12
- i18n (1.3.0)
13
+ easy_translate (0.5.1)
14
+ thread
15
+ thread_safe
16
+ i18n (1.5.1)
13
17
  concurrent-ruby (~> 1.0)
14
18
  rake (10.5.0)
15
19
  rspec (3.8.0)
@@ -25,15 +29,17 @@ GEM
25
29
  diff-lcs (>= 1.2.0, < 2.0)
26
30
  rspec-support (~> 3.8.0)
27
31
  rspec-support (3.8.0)
32
+ thread (0.2.2)
33
+ thread_safe (0.3.6)
28
34
 
29
35
  PLATFORMS
30
36
  ruby
31
37
 
32
38
  DEPENDENCIES
33
39
  bundler (~> 1.17)
40
+ glossync!
34
41
  rake (~> 10.0)
35
42
  rspec (~> 3.0)
36
- glossync!
37
43
 
38
44
  BUNDLED WITH
39
45
  1.17.1
data/glossync.gemspec CHANGED
@@ -26,5 +26,6 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency 'rake', '~> 10.0'
27
27
  spec.add_development_dependency 'rspec', '~> 3.0'
28
28
 
29
+ spec.add_dependency 'easy_translate', '~> 0.5'
29
30
  spec.add_dependency 'i18n', '~> 1.1'
30
31
  end
@@ -0,0 +1,34 @@
1
+ module Glossync
2
+ DEFAULT_CONFIG = {
3
+ reload_backend: false,
4
+ write_fallback_result: false,
5
+ missing_translation_handler: MissingTranslationHandler::Default.new,
6
+ base_locale: :en,
7
+ }.freeze
8
+
9
+ DEFAULT_CONFIG.each do |k, v|
10
+ (case v
11
+ when true, false
12
+ [
13
+ [:"dont_#{k}", -> { @options[k] = false }],
14
+ [:"#{k}!", -> { @options[k] = true } ],
15
+ [:"#{k}?", -> { @options[k] } ],
16
+ ]
17
+ else
18
+ []
19
+ end + [
20
+ [:"#{k}=", ->(v) { @options[k] = v }],
21
+ [:"#{k}", -> { @options[k]} ]
22
+ ]).each { |meth, body| Glossync.define_singleton_method(meth, &body) }
23
+ end
24
+
25
+ class << self
26
+ attr_reader :options
27
+
28
+ def config(&block)
29
+ @options ||= {}
30
+ block.call(Glossync)
31
+ end
32
+ end
33
+ end
34
+
@@ -0,0 +1,7 @@
1
+ module Glossync
2
+ class NoTranslationStore < StandardError
3
+ def initialize(*)
4
+ super('please set Glossync.tl_store')
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,39 @@
1
+ module Glossync
2
+ module MissingTranslationHandler
3
+ class Default
4
+ def handle(error, _who, _field, _locale)
5
+ error.message
6
+ end
7
+ end
8
+
9
+ class Raiser
10
+ def handle(error, _, _, _)
11
+ raise error
12
+ end
13
+ end
14
+
15
+ class GoogleTranslate
16
+ def initialize(key)
17
+ @api_key = key
18
+ @cache = {}
19
+ end
20
+
21
+ def translate(text, to)
22
+ EasyTranslate.translate(
23
+ text,
24
+ from: Glossync.options[:base_locale],
25
+ to: to,
26
+ key: @api_key
27
+ )
28
+ end
29
+
30
+ def handle(_, who, field, locale)
31
+ key = who.tl_key(field)
32
+
33
+ @cache[key] = translate(who[field], locale) unless @cache.key?(key)
34
+
35
+ @cache[key]
36
+ end
37
+ end
38
+ end
39
+ end
@@ -1,3 +1,3 @@
1
1
  module Glossync
2
- VERSION = '0.1.1'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  end
data/lib/glossync.rb CHANGED
@@ -1,15 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'i18n'
4
- require 'glossync/version'
5
- require 'glossync/tl_adapter'
4
+ require 'easy_translate'
5
+ require 'glossync/exceptions'
6
+ require 'glossync/missing_translation_handler'
6
7
  require 'glossync/railtie' if defined?(Rails)
8
+ require 'glossync/version'
9
+
10
+ require 'glossync/config'
7
11
 
8
12
  # Include into ActiveRecords to obtain some nice I18n features
9
13
  module Glossync
10
14
  # methods that match this pattern will be responded to in method_missing()
11
15
  METHOD_PATTERN = /_translated$/.freeze
12
16
 
17
+ #default configuration
13
18
  class << self
14
19
  attr_writer :tl_store
15
20
 
@@ -18,18 +23,7 @@ module Glossync
18
23
 
19
24
  Translation
20
25
  rescue NameError
21
- raise 'No Translation store'
22
- end
23
-
24
- # Should we call I18n.backend.reload! on each call to tl_update that
25
- # modifies data?
26
- def reload_backend_on_tl_update?
27
- @reload_backend_on_tl_update ||= true
28
- end
29
-
30
- # :nodoc:
31
- def reload_backend_on_tl_update=(bool)
32
- @reload_backend_on_tl_update = !!bool
26
+ raise(Glossync::NoTranslationStore)
33
27
  end
34
28
 
35
29
  # called when a module is included, add methods to the base class
@@ -118,7 +112,20 @@ module Glossync
118
112
  # @param field the field to translate
119
113
  # @return [String] the translated string
120
114
  def tl(field)
121
- I18n.translate(tl_key(field))
115
+ tl = catch(:exception) do
116
+ I18n.translate(tl_key(field), throw: true)
117
+ end
118
+
119
+ if tl.is_a?(I18n::MissingTranslation)
120
+ tlr = Glossync.missing_translation_handler
121
+ .handle(tl, self, field, I18n.locale)
122
+
123
+ tl_update(field, tlr) if Glossync.options[:write_fallback_result]
124
+
125
+ tlr
126
+ else
127
+ tl
128
+ end
122
129
  end
123
130
 
124
131
  # Update the translation associated with a field and locale
@@ -146,7 +153,7 @@ module Glossync
146
153
  tls.create(h.merge(value: value))
147
154
  end
148
155
 
149
- I18n.backend.reload! if Glossync.reload_backend_on_tl_update?
156
+ I18n.backend.reload! if Glossync.options[:reload_backend]
150
157
 
151
158
  true
152
159
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glossync
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stone Tickle
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: easy_translate
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.5'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.5'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: i18n
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -73,6 +87,7 @@ executables: []
73
87
  extensions: []
74
88
  extra_rdoc_files: []
75
89
  files:
90
+ - ".env.example"
76
91
  - ".gitignore"
77
92
  - ".rspec"
78
93
  - ".travis.yml"
@@ -85,8 +100,10 @@ files:
85
100
  - bin/setup
86
101
  - glossync.gemspec
87
102
  - lib/glossync.rb
103
+ - lib/glossync/config.rb
104
+ - lib/glossync/exceptions.rb
105
+ - lib/glossync/missing_translation_handler.rb
88
106
  - lib/glossync/railtie.rb
89
- - lib/glossync/tl_adapter.rb
90
107
  - lib/glossync/version.rb
91
108
  - lib/tasks/setup_model_translations.rake
92
109
  homepage:
@@ -1,36 +0,0 @@
1
- module Glossync
2
- class TlAdapter
3
- include I18n::Backend::Base
4
-
5
- TlElem = Struct.new(:value) do
6
- def update(value:)
7
- self.value = value
8
- end
9
- end
10
-
11
- def initialize
12
- super
13
-
14
- @db = {}
15
- end
16
-
17
- def exists?(locale:, key:)
18
- @db.key?(key) && @db[key].key?(locale)
19
- end
20
-
21
- def find_by(locale:, key:)
22
- return nil unless exists?(locale: locale, key: key)
23
-
24
- @db[key][locale]
25
- end
26
-
27
- def create(locale:, key:, value:)
28
- @db[key] ||= {}
29
- @db[key][locale] = TlElem.new(value)
30
- end
31
-
32
- def lookup(locale, key, *)
33
- find_by(locale: locale, key: key).value
34
- end
35
- end
36
- end