tr8n_client_sdk 4.0.8 → 4.0.10

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
  SHA1:
3
- metadata.gz: b0431a7e51712613de3712320c6320550e2aac04
4
- data.tar.gz: f3e4bf196240bdef5d51ea9ad4cc0068e17272f3
3
+ metadata.gz: d5f3b0af6635122b50c5d1f5efc4f9e6f344b41f
4
+ data.tar.gz: 9516613ddc5a415a0a5c73e0cdb6794a441a6bfe
5
5
  SHA512:
6
- metadata.gz: febd9a1388357c3062dbcdd49fa4bb1406a5a0da86ef69807d77a5b09f25580718ba564125bee747f82cc60d5b34929938493cf29934db9e9bada158548f213a
7
- data.tar.gz: 251a679dffc85eefe2f7c7dada4e876dbdeccb68a5ff077f53839525f2775b18562d64c5ee689ac56834135425d4da73cffb5fc6f999dbeea45f1648c7da50fa
6
+ metadata.gz: cb5c52a2ff2269aade2e04c796bca7b1ff54273c199f10a2bebd33ff4f170caadd38bc5932dbd0f199c816438a55e789bb2d9c2a6abfd64bbfa563b16e1fd122
7
+ data.tar.gz: 1e7728afbc198909f8326b550a31c9fd2cd1fd8c9872f5ea59c0928c54325beaa09e415d6a53b6f44e06908b94cffd1ffb975e0e8ae39db43d8640991d348733
data/README.md CHANGED
@@ -10,7 +10,7 @@ Tr8n Client SDK for Ruby on Rails
10
10
  [![Dependency Status](https://www.versioneye.com/user/projects/53cda6a5225426f1e8000165/badge.svg?style=flat)](https://www.versioneye.com/user/projects/53cda6a5225426f1e8000165)
11
11
  [![Project status](http://stillmaintained.com/tr8n/tr8n_ruby_core.png)](http://stillmaintained.com/tr8n/tr8n_ruby_core.png)
12
12
 
13
- This Client SDK provides extensions necessary for translating Rails 3.2.X based application using the TranslationExchange.com service.
13
+ This Client SDK provides extensions necessary for translating Rails 4.0.X based application using the TranslationExchange.com service.
14
14
 
15
15
 
16
16
  Tr8n Client SDK Sample
@@ -57,7 +57,7 @@ To integrate Tr8n SDK into your own app, all you need to do is:
57
57
  Add the following gem to your Gemfile:
58
58
 
59
59
  ```ruby
60
- gem 'tr8n_client_sdk'
60
+ gem 'tr8n_client_sdk', '~> 4.0'
61
61
  ```
62
62
 
63
63
  Install the gems:
@@ -1,5 +1,53 @@
1
- <a href="#" onClick="Tr8n.UI.LanguageSelector.show(); return false;">
2
- <%= image_tag(tr8n_current_language.flag_url, :style => "align:middle") %>
3
- &nbsp;
4
- <%= tr8n_current_language.name %>
5
- </a>
1
+ <% if opts[:type] == :dropdown %>
2
+ <script>
3
+ function tr8n_change_locale(selector) {
4
+ var query_parts = window.location.href.split('?');
5
+ var query = query_parts.length > 1 ? query_parts[1] : null;
6
+ var params = {};
7
+ if (query) {
8
+ var vars = query.split('&');
9
+ for (var i = 0; i < vars.length; i++) {
10
+ var pair = vars[i].split('=');
11
+ params[pair[0]] = pair[1];
12
+ }
13
+ }
14
+ params['locale'] = selector.options[selector.selectedIndex].value;
15
+
16
+ query = [];
17
+ var keys = Object.keys(params);
18
+ for (var i = 0; i < keys.length; i++) {
19
+ query.push(encodeURIComponent(keys[i]) + "=" + encodeURIComponent(params[keys[i]]));
20
+ }
21
+
22
+ var destination = query_parts[0] + '?' + query.join("&");
23
+ window.location = destination;
24
+ }
25
+ </script>
26
+ <select id="tr8n_language_selector" onchange="tr8n_change_locale(this)" style="<%=opts[:style]%>" class="<%=opts[:class]%>">
27
+ <% tr8n_application.languages.each do |lang| %>
28
+ <option dir='ltr' value="<%=lang.locale%>" <%="selected" if lang.locale == tr8n_current_locale %>>
29
+ <% if opts[:language] == :native %>
30
+ <%= lang.native_name %>
31
+ <% elsif opts[:language] == :english %>
32
+ <%= lang.english_name %>
33
+ <% else %>
34
+ <%= lang.name %>
35
+ <% end %>
36
+ </option>
37
+ <% end %>
38
+ </select>
39
+ <% else %>
40
+ <a href="#" onClick="Tr8n.UI.LanguageSelector.show(); return false;">
41
+ <% unless opts[:hide_flag] %>
42
+ <%= image_tag(tr8n_current_language.flag_url, :style => "align:middle") %>
43
+ &nbsp;
44
+ <% end %>
45
+ <% if opts[:language] == :native %>
46
+ <%= tr8n_current_language.native_name %>
47
+ <% elsif opts[:language] == :english %>
48
+ <%= tr8n_current_language.english_name %>
49
+ <% else %>
50
+ <%= tr8n_current_language.name %>
51
+ <% end %>
52
+ </a>
53
+ <% end %>
@@ -0,0 +1,100 @@
1
+ # encoding: UTF-8
2
+ #--
3
+ # Copyright (c) 2014 Michael Berkovich, TranslationExchange.com
4
+ #
5
+ # _______ _ _ _ ______ _
6
+ # |__ __| | | | | (_) | ____| | |
7
+ # | |_ __ __ _ _ __ ___| | __ _| |_ _ ___ _ __ | |__ __ _____| |__ __ _ _ __ __ _ ___
8
+ # | | '__/ _` | '_ \/ __| |/ _` | __| |/ _ \| '_ \| __| \ \/ / __| '_ \ / _` | '_ \ / _` |/ _ \
9
+ # | | | | (_| | | | \__ \ | (_| | |_| | (_) | | | | |____ > < (__| | | | (_| | | | | (_| | __/
10
+ # |_|_| \__,_|_| |_|___/_|\__,_|\__|_|\___/|_| |_|______/_/\_\___|_| |_|\__,_|_| |_|\__, |\___|
11
+ # __/ |
12
+ # |___/
13
+ # Permission is hereby granted, free of charge, to any person obtaining
14
+ # a copy of this software and associated documentation files (the
15
+ # "Software"), to deal in the Software without restriction, including
16
+ # without limitation the rights to use, copy, modify, merge, publish,
17
+ # distribute, sublicense, and/or sell copies of the Software, and to
18
+ # permit persons to whom the Software is furnished to do so, subject to
19
+ # the following conditions:
20
+ #
21
+ # The above copyright notice and this permission notice shall be
22
+ # included in all copies or substantial portions of the Software.
23
+ #
24
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
28
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
29
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31
+ #++
32
+
33
+ require 'dalli' if defined?(Dalli)
34
+
35
+ class Tr8n::CacheAdapters::Rails < Tr8n::Cache
36
+
37
+ def initialize
38
+ Tr8n.logger.info("Initializing Rails cache...")
39
+ @cache = Rails.cache
40
+ end
41
+
42
+ def cache_name
43
+ @cache.class.name
44
+ end
45
+
46
+ def read_only?
47
+ false
48
+ end
49
+
50
+ def fetch(key, opts = {})
51
+ miss = false
52
+ data = @cache.fetch(versioned_key(key, opts)) do
53
+ info("Cache miss: #{key}")
54
+ miss = true
55
+ if block_given?
56
+ yield
57
+ else
58
+ nil
59
+ end
60
+ end
61
+ info("Cache hit: #{key}") unless miss
62
+ data
63
+ rescue Exception => ex
64
+ warn("Failed to retrieve data: #{ex.message}")
65
+ return nil unless block_given?
66
+ yield
67
+ end
68
+
69
+ def store(key, data, opts = {})
70
+ info("Cache store: #{key}")
71
+ @cache.write(versioned_key(key, opts), data)
72
+ data
73
+ rescue Exception => ex
74
+ warn("Failed to store data: #{ex.message}")
75
+ key
76
+ end
77
+
78
+ def delete(key, opts = {})
79
+ info("Cache delete: #{key}")
80
+ @cache.delete(versioned_key(key, opts))
81
+ key
82
+ rescue Exception => ex
83
+ warn("Failed to delete data: #{ex.message}")
84
+ key
85
+ end
86
+
87
+ def exist?(key, opts = {})
88
+ data = @cache.fetch(versioned_key(key, opts))
89
+ not data.nil?
90
+ rescue Exception => ex
91
+ warn("Failed to check if key exists: #{ex.message}")
92
+ false
93
+ end
94
+
95
+ def clear(opts = {})
96
+ info("Cache clear")
97
+ rescue Exception => ex
98
+ warn("Failed to clear cache: #{ex.message}")
99
+ end
100
+ end
@@ -32,6 +32,7 @@
32
32
  require "tr8n_client_sdk/railtie"
33
33
  require "tr8n_client_sdk/engine"
34
34
  require "tr8n_core"
35
+ require "tr8n/cache_adapters/rails"
35
36
 
36
37
  module Tr8nClientSdk
37
38
 
@@ -37,6 +37,13 @@ module Tr8nClientSdk
37
37
  base.send(:include, InstanceMethods)
38
38
  base.before_filter :tr8n_init_client_sdk
39
39
  base.after_filter :tr8n_reset_client_sdk
40
+ if defined? base.rescue_from
41
+ base.rescue_from 'Tr8n::Exception' do |e|
42
+ Tr8n.logger.error(e)
43
+ Tr8n.logger.error(e.backtrace)
44
+ raise e
45
+ end
46
+ end
40
47
  end
41
48
 
42
49
  module InstanceMethods
@@ -65,20 +72,55 @@ module Tr8nClientSdk
65
72
  nil
66
73
  end
67
74
 
75
+ def tr8n_cookie_name
76
+ "tr8n_#{tr8n_application.key}"
77
+ end
78
+
79
+ def tr8n_cookie
80
+ request.cookies[tr8n_cookie_name]
81
+ end
82
+
83
+ def tr8n_cookie_params
84
+ @tr8n_cookie_params ||= begin
85
+ if tr8n_cookie
86
+ cookie_params = Tr8n::Utils.decode_and_verify_params(tr8n_cookie, tr8n_application.secret)
87
+ Tr8n.logger.info(cookie_params.inspect)
88
+ cookie_params
89
+ else
90
+ {}
91
+ end
92
+ end
93
+ end
94
+
95
+ def tr8n_translator_locale
96
+ tr8n_cookie_params["locale"]
97
+ end
98
+
68
99
  def tr8n_init_current_locale
69
100
  self.send(Tr8n.config.current_locale_method) if Tr8n.config.current_locale_method
70
101
  rescue
102
+ # fallback onto the cookie params from the service
103
+ return tr8n_translator_locale if tr8n_translator_locale
104
+
71
105
  # fallback to the default session based locale implementation
72
106
  # choose the first language from the accepted languages header
73
107
  session[:locale] = tr8n_user_preferred_locale unless session[:locale]
74
108
  session[:locale] = params[:locale] if params[:locale]
75
- session[:locale]
109
+ session[:locale] || Tr8n.config.default_locale
76
110
  end
77
111
 
78
112
  def tr8n_init_current_user
79
113
  self.send(Tr8n.config.current_user_method) if Tr8n.config.current_user_method
80
114
  rescue
81
- Tr8n.config.default_locale
115
+ nil
116
+ end
117
+
118
+ def tr8n_init_current_translator
119
+ if tr8n_cookie_params["translator"]
120
+ Tr8n::Translator.new(tr8n_cookie_params["translator"].merge(:application => tr8n_application))
121
+ else
122
+ nil
123
+ end
82
124
  end
83
125
 
84
126
  def tr8n_init_client_sdk
@@ -88,21 +130,10 @@ module Tr8nClientSdk
88
130
 
89
131
  Tr8n.session.init
90
132
 
91
- translator = nil
92
-
93
- cookie_name = "tr8n_#{tr8n_application.key}"
94
- if request.cookies[cookie_name]
95
- cookie_params = Tr8n::Utils.decode_and_verify_params(request.cookies[cookie_name], tr8n_application.secret)
96
- Tr8n.logger.info(cookie_params.inspect)
97
- locale = cookie_params["locale"]
98
- translator = Tr8n::Translator.new(cookie_params["translator"].merge(:application => tr8n_application)) unless cookie_params["translator"].nil?
99
- end
100
-
101
- locale ||= tr8n_init_current_locale || Tr8n.config.default_locale
102
-
103
133
  Tr8n.session.current_user = tr8n_init_current_user
104
- Tr8n.session.current_translator = translator
105
- Tr8n.session.current_language = tr8n_application.language(locale || tr8n_init_current_locale || Tr8n.config.default_locale)
134
+ Tr8n.session.current_language = tr8n_application.language(tr8n_init_current_locale)
135
+ Tr8n.session.current_translator = tr8n_init_current_translator
136
+
106
137
  Tr8n.session.current_source = tr8n_source
107
138
  Tr8n.session.current_component = tr8n_component
108
139
  end
@@ -23,5 +23,5 @@
23
23
 
24
24
 
25
25
  module Tr8nClientSdk
26
- VERSION = '4.0.8'
26
+ VERSION = '4.0.10'
27
27
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tr8n_client_sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.8
4
+ version: 4.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Berkovich
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-25 00:00:00.000000000 Z
11
+ date: 2014-08-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -54,6 +54,7 @@ files:
54
54
  - app/views/tr8n_client_sdk/tags/_scripts.html.erb
55
55
  - config/routes.rb
56
56
  - lib/tasks/tr8n_client_sdk.rake
57
+ - lib/tr8n/cache_adapters/rails.rb
57
58
  - lib/tr8n_client_sdk.rb
58
59
  - lib/tr8n_client_sdk/engine.rb
59
60
  - lib/tr8n_client_sdk/extensions/action_common_methods.rb