i18n-backend-http 0.1.3 → 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
  SHA1:
3
- metadata.gz: 36137a83ff8e2c9c616f494ab4b84c55f6751f1c
4
- data.tar.gz: 827f9ac3ed6688b05ca39dee9a90cc3f55ca2c61
3
+ metadata.gz: 6253fa4b449db0c86fc538654b5d435d1cbcf0a7
4
+ data.tar.gz: 7672f4606b3645647594312efe3e3c1f4f93bfc3
5
5
  SHA512:
6
- metadata.gz: 73bba6050a343f6c5fdcb44add77fd1a00c05e9fbdd6ba74b138533d1e3a66ae171140672982f23af13a242d5182874c349ff3e26aa7f30fe1915f29da196986
7
- data.tar.gz: b372946bcb397e949af0218b86fa9f4ccdfdfdc254437fdea4dd2b1bf892a06d238bf8b1cf3b9ecca4c7abf7957377898a899dffa045ab30ca2e27f3701da447
6
+ metadata.gz: f98a33068b3b8766b80d6c32c4939ed2546b7ebf9fd3b0f4d9f4ff47821b80ea089a7960ce645870f233e49f404f2131f0085441d5b87dd21477e4b16bee1ebd
7
+ data.tar.gz: b80e56c5688166d236e6f941000a23f958dd27b768fc7cd600e4772c83bffe7676dc250a91c93012dee400cb455e5a8b5cfbfc7d5e82ede0e892a5e5e2e85843
@@ -1,11 +1,11 @@
1
1
  require 'i18n'
2
2
  require 'i18n/backend/transliterator'
3
3
  require 'i18n/backend/base'
4
- require 'gem_of_thrones'
5
4
  require 'i18n/backend/http/version'
6
5
  require 'i18n/backend/http/etag_http_client'
7
6
  require 'i18n/backend/http/null_cache'
8
7
  require 'i18n/backend/http/lru_cache'
8
+ require 'socket'
9
9
 
10
10
  module I18n
11
11
  module Backend
@@ -70,19 +70,31 @@ module I18n
70
70
  end
71
71
 
72
72
  def locked_update_cache(locale)
73
- @aspirants ||= {}
74
- aspirant = @aspirants[locale] ||= GemOfThrones.new(
75
- :cache => @options[:cache],
76
- :timeout => (@options[:polling_interval] * 3).ceil,
77
- :cache_key => "i18n/backend/http/locked_update_caches/#{locale}"
78
- )
79
- if aspirant.rise_to_power
80
- download_and_cache_translations(locale)
81
- else
73
+ unless update_cache(locale) { download_and_cache_translations(locale) }
82
74
  update_memory_cache_from_cache(locale)
83
75
  end
84
76
  end
85
77
 
78
+ def update_cache(locale)
79
+ cache = @options.fetch(:cache)
80
+ key = "i18n/backend/http/locked_update_caches/#{locale}"
81
+ me = "#{Socket.gethostname}-#{Process.pid}-#{Thread.current.object_id}"
82
+ if current = cache.read(key)
83
+ if current == me
84
+ try = false # I am responsible, renew expiration
85
+ else
86
+ return # someone else is responsible, do not touch
87
+ end
88
+ else
89
+ try = true # nobody is responsible, try to get responsibility
90
+ end
91
+
92
+ return unless cache.write(key, me, expires_in: (@options[:polling_interval] * 3).ceil, unless_exist: try)
93
+
94
+ yield
95
+ true
96
+ end
97
+
86
98
  def update_memory_cache_from_cache(locale)
87
99
  @translations[locale] = translations_from_cache(locale)
88
100
  end
@@ -3,31 +3,30 @@ require 'faraday'
3
3
  module I18n
4
4
  module Backend
5
5
  class Http
6
- end
7
- end
8
- end
6
+ class I18n::Backend::Http::EtagHttpClient
7
+ def initialize(options)
8
+ @options = options
9
+ @etags = {}
10
+ end
9
11
 
10
- class I18n::Backend::Http::EtagHttpClient
11
- def initialize(options)
12
- @options = options
13
- @etags = {}
14
- end
15
-
16
- def download(path)
17
- @client ||= Faraday.new(@options[:host])
18
- response = @client.get(path) do |request|
19
- request.headers["If-None-Match"] = @etags[path] if @etags[path]
20
- request.options[:timeout] = @options[:http_read_timeout]
21
- request.options[:open_timeout] = @options[:http_open_timeout]
22
- end
12
+ def download(path)
13
+ @client ||= Faraday.new(@options[:host])
14
+ response = @client.get(path) do |request|
15
+ request.headers["If-None-Match"] = @etags[path] if @etags[path]
16
+ request.options[:timeout] = @options[:http_read_timeout]
17
+ request.options[:open_timeout] = @options[:http_open_timeout]
18
+ end
23
19
 
24
- @etags[path] = response['ETag']
20
+ @etags[path] = response['ETag']
25
21
 
26
- case response.status
27
- when 200 then yield response.body
28
- when 304
29
- else
30
- raise "Failed request: #{response.inspect}"
22
+ case response.status
23
+ when 200 then yield response.body
24
+ when 304
25
+ else
26
+ raise "Failed request: #{response.inspect}"
27
+ end
28
+ end
29
+ end
31
30
  end
32
31
  end
33
32
  end
@@ -1,40 +1,39 @@
1
+ # http://codesnippets.joyent.com/posts/show/12329
1
2
  module I18n
2
3
  module Backend
3
4
  class Http
4
- end
5
- end
6
- end
7
-
8
- # http://codesnippets.joyent.com/posts/show/12329
9
- class I18n::Backend::Http::LRUCache
10
- def initialize(size = 10)
11
- @size = size
12
- @store = {}
13
- @lru = []
14
- end
5
+ class I18n::Backend::Http::LRUCache
6
+ def initialize(size = 10)
7
+ @size = size
8
+ @store = {}
9
+ @lru = []
10
+ end
15
11
 
16
- def []=(key, value)
17
- @store[key] = value
18
- set_lru(key)
19
- @store.delete(@lru.pop) if @lru.size > @size
20
- end
12
+ def []=(key, value)
13
+ @store[key] = value
14
+ set_lru(key)
15
+ @store.delete(@lru.pop) if @lru.size > @size
16
+ end
21
17
 
22
- def [](key)
23
- set_lru(key)
24
- @store[key]
25
- end
18
+ def [](key)
19
+ set_lru(key)
20
+ @store[key]
21
+ end
26
22
 
27
- def keys
28
- @store.keys
29
- end
23
+ def keys
24
+ @store.keys
25
+ end
30
26
 
31
- def values
32
- @store.values
33
- end
27
+ def values
28
+ @store.values
29
+ end
34
30
 
35
- private
31
+ private
36
32
 
37
- def set_lru(key)
38
- @lru.unshift(@lru.delete(key) || key)
33
+ def set_lru(key)
34
+ @lru.unshift(@lru.delete(key) || key)
35
+ end
36
+ end
37
+ end
39
38
  end
40
39
  end
@@ -1,19 +1,18 @@
1
1
  module I18n
2
2
  module Backend
3
3
  class Http
4
- end
5
- end
6
- end
4
+ class I18n::Backend::Http::NullCache
5
+ def fetch(*args)
6
+ yield
7
+ end
7
8
 
8
- class I18n::Backend::Http::NullCache
9
- def fetch(*args)
10
- yield
11
- end
9
+ def read(key)
10
+ end
12
11
 
13
- def read(key)
14
- end
15
-
16
- def write(key, value)
17
- value
12
+ def write(key, value)
13
+ value
14
+ end
15
+ end
16
+ end
18
17
  end
19
18
  end
@@ -1,7 +1,7 @@
1
1
  module I18n
2
2
  module Backend
3
3
  class Http
4
- VERSION = Version = "0.1.3"
4
+ VERSION = Version = "0.2.0"
5
5
  end
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: i18n-backend-http
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Grosser
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-08 00:00:00.000000000 Z
11
+ date: 2017-01-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: i18n
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: gem_of_thrones
28
+ name: faraday
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -39,13 +39,125 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: faraday
42
+ name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
- type: :runtime
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: maxitest
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: vcr
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '2.5'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '2.5'
83
+ - !ruby/object:Gem::Dependency
84
+ name: webmock
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: mocha
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: wwtd
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: json
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: bump
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: single_cov
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
49
161
  prerelease: false
50
162
  version_requirements: !ruby/object:Gem::Requirement
51
163
  requirements:
@@ -75,7 +187,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
75
187
  requirements:
76
188
  - - ">="
77
189
  - !ruby/object:Gem::Version
78
- version: '0'
190
+ version: 2.0.0
79
191
  required_rubygems_version: !ruby/object:Gem::Requirement
80
192
  requirements:
81
193
  - - ">="
@@ -83,7 +195,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
83
195
  version: '0'
84
196
  requirements: []
85
197
  rubyforge_project:
86
- rubygems_version: 2.2.2
198
+ rubygems_version: 2.5.1
87
199
  signing_key:
88
200
  specification_version: 4
89
201
  summary: Rails I18n Backend for Http APIs with etag-aware background polling and memory+[memcache]