locale 2.0.9 → 2.1.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 +7 -0
- data/README.rdoc +0 -3
- data/doc/text/news.md +13 -0
- data/lib/locale.rb +9 -17
- data/lib/locale/tag.rb +0 -3
- data/lib/locale/tag/cldr.rb +0 -3
- data/lib/locale/tag/common.rb +0 -5
- data/lib/locale/tag/irregular.rb +1 -3
- data/lib/locale/tag/posix.rb +0 -2
- data/lib/locale/tag/rfc.rb +0 -4
- data/lib/locale/tag/simple.rb +0 -16
- data/lib/locale/taglist.rb +0 -9
- data/lib/locale/version.rb +2 -1
- metadata +23 -44
- data/lib/locale/util/memoizable.rb +0 -108
- data/test/test_memoizable.rb +0 -133
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c70c3a79e17ab4cc5af32c055728d0a2d5af6a7a
|
4
|
+
data.tar.gz: d8ca3c3e5f44decdbc49f76d4c48e3157bcd1f1a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b17b7898fcd4f80c350ae9441eba2b48dcfbb2f0d44bb319eeb27146394370e66d8b2dba4a616838301a6c6ca0d8313ffe7ec1c798b4e4d45c28df2b8138f31c
|
7
|
+
data.tar.gz: 634726bcd248a4babdc6748d030ee6c0a18af5564c79c2447ce185f549b8d38697edf1e45200033cc417a8114344b4f6dfc5277a4d58cfbeaf34f74e912e1dee
|
data/README.rdoc
CHANGED
@@ -67,9 +67,6 @@ LGPL(Lesser General Public License: http://www.gnu.org/licenses/lgpl-3.0.txt).
|
|
67
67
|
* langtag-0.1.0
|
68
68
|
* by Martin Dürst <http://rubyforge.org/projects/langtag/>
|
69
69
|
|
70
|
-
* memoizable.rb
|
71
|
-
* from ActiveSupport-2.2.0 <http://rubyforge.org/projects/activesupport/>
|
72
|
-
|
73
70
|
* gettext gem
|
74
71
|
* by The ruby-gettext project <https://ruby-gettext.github.com/>
|
75
72
|
|
data/doc/text/news.md
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
# News
|
2
2
|
|
3
|
+
## <a id="2-1-0">2.1.0</a>: 2013-12-15
|
4
|
+
|
5
|
+
### Fixes
|
6
|
+
|
7
|
+
* Fixed a bug that memoization key hash collision on armv7hl.
|
8
|
+
Memoization feature is removed for this fix. If you get
|
9
|
+
performance issue. Please report it. We will solve the issue.
|
10
|
+
[GitHub#3] [Reported by mtasaka]
|
11
|
+
|
12
|
+
### Thanks
|
13
|
+
|
14
|
+
* mtasaka
|
15
|
+
|
3
16
|
## <a id="2-0-9">2.0.9</a>: 2013-09-20
|
4
17
|
|
5
18
|
Locale handling fix release.
|
data/lib/locale.rb
CHANGED
@@ -12,7 +12,6 @@
|
|
12
12
|
$Id: locale.rb 27 2008-12-03 15:06:50Z mutoh $
|
13
13
|
=end
|
14
14
|
|
15
|
-
require 'locale/util/memoizable'
|
16
15
|
require 'locale/tag'
|
17
16
|
require 'locale/taglist'
|
18
17
|
require 'locale/driver'
|
@@ -25,8 +24,6 @@ module Locale
|
|
25
24
|
@@default_tag = nil
|
26
25
|
@@driver_name = nil
|
27
26
|
|
28
|
-
include Locale::Util::Memoizable
|
29
|
-
|
30
27
|
module_function
|
31
28
|
def require_driver(name) #:nodoc:
|
32
29
|
require "locale/driver/#{name}"
|
@@ -213,21 +210,19 @@ module Locale
|
|
213
210
|
# The type of language tag. :common, :rfc, :cldr, :posix and
|
214
211
|
# :simple are available. Default value is :common
|
215
212
|
def candidates(options = {})
|
216
|
-
opts = {
|
217
|
-
:
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
end
|
225
|
-
Thread.current[:candidates_caches][opts.hash] =
|
213
|
+
opts = {
|
214
|
+
:supported_language_tags => nil,
|
215
|
+
:current => current,
|
216
|
+
:type => :common,
|
217
|
+
}.merge(options)
|
218
|
+
|
219
|
+
Thread.current[:candidates_caches] ||= {}
|
220
|
+
Thread.current[:candidates_caches][opts] ||=
|
226
221
|
collect_candidates(opts[:type], opts[:current],
|
227
222
|
opts[:supported_language_tags])
|
228
223
|
end
|
229
224
|
|
230
|
-
# collect tag candidates
|
225
|
+
# collect tag candidates.
|
231
226
|
# The result is shared from all threads.
|
232
227
|
def collect_candidates(type, tags, supported_tags) # :nodoc:
|
233
228
|
candidate_tags = tags.collect{|v| v.send("to_#{type}").candidates}
|
@@ -265,7 +260,6 @@ module Locale
|
|
265
260
|
|
266
261
|
Locale::TagList.new(tags)
|
267
262
|
end
|
268
|
-
memoize :collect_candidates
|
269
263
|
|
270
264
|
# Gets the current charset.
|
271
265
|
#
|
@@ -276,7 +270,6 @@ module Locale
|
|
276
270
|
def charset
|
277
271
|
driver_module.charset || "UTF-8"
|
278
272
|
end
|
279
|
-
memoize :charset
|
280
273
|
|
281
274
|
# Clear current locale.
|
282
275
|
# * Returns: self
|
@@ -295,7 +288,6 @@ module Locale
|
|
295
288
|
thread[:current_languages] = nil
|
296
289
|
thread[:candidates_caches] = nil
|
297
290
|
end
|
298
|
-
memoize_clear
|
299
291
|
self
|
300
292
|
end
|
301
293
|
|
data/lib/locale/tag.rb
CHANGED
@@ -13,13 +13,11 @@ require 'locale/tag/common'
|
|
13
13
|
require 'locale/tag/rfc'
|
14
14
|
require 'locale/tag/cldr'
|
15
15
|
require 'locale/tag/posix'
|
16
|
-
require 'locale/util/memoizable'
|
17
16
|
|
18
17
|
module Locale
|
19
18
|
|
20
19
|
# Language tag / locale identifiers.
|
21
20
|
module Tag
|
22
|
-
include Util::Memoizable
|
23
21
|
module_function
|
24
22
|
# Parse a language tag/locale name and return Locale::Tag
|
25
23
|
# object.
|
@@ -33,7 +31,6 @@ module Locale
|
|
33
31
|
end
|
34
32
|
Locale::Tag::Irregular.new(tag)
|
35
33
|
end
|
36
|
-
memoize :parse
|
37
34
|
end
|
38
35
|
end
|
39
36
|
|
data/lib/locale/tag/cldr.rb
CHANGED
@@ -26,7 +26,6 @@ module Locale
|
|
26
26
|
attr_reader :extensions
|
27
27
|
|
28
28
|
class << self
|
29
|
-
include Util::Memoizable
|
30
29
|
# Parse the language tag and return the new Locale::Tag::CLDR.
|
31
30
|
def parse(tag)
|
32
31
|
if tag =~ /\APOSIX\Z/ # This is the special case of POSIX locale but match this regexp.
|
@@ -49,7 +48,6 @@ module Locale
|
|
49
48
|
nil
|
50
49
|
end
|
51
50
|
end
|
52
|
-
memoize_dup :parse
|
53
51
|
end
|
54
52
|
|
55
53
|
# Create Locale::Tag::Cldr.
|
@@ -63,7 +61,6 @@ module Locale
|
|
63
61
|
|
64
62
|
# Sets the extensions as an Hash.
|
65
63
|
def extensions=(val)
|
66
|
-
clear
|
67
64
|
@extensions = val
|
68
65
|
end
|
69
66
|
|
data/lib/locale/tag/common.rb
CHANGED
@@ -33,7 +33,6 @@ module Locale
|
|
33
33
|
attr_reader :script, :variants
|
34
34
|
|
35
35
|
class << self
|
36
|
-
include Util::Memoizable
|
37
36
|
# Parse the language tag and return the new Locale::Tag::Common.
|
38
37
|
def parse(tag)
|
39
38
|
if tag =~ /\APOSIX\Z/ # This is the special case of POSIX locale but match this regexp.
|
@@ -49,7 +48,6 @@ module Locale
|
|
49
48
|
nil
|
50
49
|
end
|
51
50
|
end
|
52
|
-
memoize_dup :parse
|
53
51
|
end
|
54
52
|
|
55
53
|
# Create a Locale::Tag::Common.
|
@@ -61,7 +59,6 @@ module Locale
|
|
61
59
|
|
62
60
|
# Set the script (with capitalize)
|
63
61
|
def script=(val)
|
64
|
-
clear
|
65
62
|
@script = val
|
66
63
|
@script = @script.capitalize if @script
|
67
64
|
@script
|
@@ -69,7 +66,6 @@ module Locale
|
|
69
66
|
|
70
67
|
# Set the variants as an Array.
|
71
68
|
def variants=(val)
|
72
|
-
clear
|
73
69
|
@variants = val
|
74
70
|
end
|
75
71
|
|
@@ -88,7 +84,6 @@ module Locale
|
|
88
84
|
self.class.new(language, nil, nil, variants), #ja-FOO
|
89
85
|
self.class.new(language)] #ja
|
90
86
|
end
|
91
|
-
memoize_dup :candidates
|
92
87
|
|
93
88
|
private
|
94
89
|
def convert_to(klass) #:nodoc:
|
data/lib/locale/tag/irregular.rb
CHANGED
@@ -27,14 +27,12 @@ module Locale
|
|
27
27
|
def candidates
|
28
28
|
[Irregular.new(tag)]
|
29
29
|
end
|
30
|
-
|
31
|
-
|
30
|
+
|
32
31
|
# Conver to the klass(the class of Language::Tag)
|
33
32
|
private
|
34
33
|
def convert_to(klass)
|
35
34
|
klass.new(tag)
|
36
35
|
end
|
37
|
-
memoize :convert_to
|
38
36
|
end
|
39
37
|
end
|
40
38
|
end
|
data/lib/locale/tag/posix.rb
CHANGED
data/lib/locale/tag/rfc.rb
CHANGED
@@ -27,7 +27,6 @@ module Locale
|
|
27
27
|
attr_reader :extensions, :privateuse
|
28
28
|
|
29
29
|
class << self
|
30
|
-
include Util::Memoizable
|
31
30
|
# Parse the language tag and return the new Locale::Tag::Rfc.
|
32
31
|
def parse(tag)
|
33
32
|
if tag =~ /\APOSIX\Z/ # This is the special case of POSIX locale but match this regexp.
|
@@ -55,7 +54,6 @@ module Locale
|
|
55
54
|
nil
|
56
55
|
end
|
57
56
|
end
|
58
|
-
memoize_dup :parse
|
59
57
|
end
|
60
58
|
|
61
59
|
def initialize(language, script = nil, region = nil, variants = [],
|
@@ -66,13 +64,11 @@ module Locale
|
|
66
64
|
|
67
65
|
# Sets the extensions as an Array.
|
68
66
|
def extensions=(val)
|
69
|
-
clear
|
70
67
|
@extensions = val
|
71
68
|
end
|
72
69
|
|
73
70
|
# Sets the privateuse as a String
|
74
71
|
def privateuse=(val)
|
75
|
-
clear
|
76
72
|
@privateuse = val
|
77
73
|
end
|
78
74
|
|
data/lib/locale/tag/simple.rb
CHANGED
@@ -7,8 +7,6 @@
|
|
7
7
|
license terms as Ruby.
|
8
8
|
=end
|
9
9
|
|
10
|
-
require 'locale/util/memoizable'
|
11
|
-
|
12
10
|
module Locale
|
13
11
|
module Tag
|
14
12
|
# Abstract language tag class.
|
@@ -20,8 +18,6 @@ module Locale
|
|
20
18
|
# * ja-JP
|
21
19
|
# * ja-392
|
22
20
|
class Simple
|
23
|
-
include Util::Memoizable
|
24
|
-
|
25
21
|
ALPHA = '[a-z]'
|
26
22
|
DIGIT = '[0-9]'
|
27
23
|
ALPHANUM = "[a-zA-Z0-9]"
|
@@ -31,8 +27,6 @@ module Locale
|
|
31
27
|
|
32
28
|
TAG_RE = /\A#{LANGUAGE}(?:[_-]#{REGION})?\Z/i
|
33
29
|
|
34
|
-
include Util::Memoizable
|
35
|
-
|
36
30
|
attr_reader :language, :region
|
37
31
|
|
38
32
|
# tag is set when .parse method is called.
|
@@ -52,12 +46,10 @@ module Locale
|
|
52
46
|
def to_#{name}
|
53
47
|
convert_to(#{name.to_s.capitalize})
|
54
48
|
end
|
55
|
-
memoize_dup :to_#{name}
|
56
49
|
EOS
|
57
50
|
end
|
58
51
|
|
59
52
|
class << self
|
60
|
-
include Util::Memoizable
|
61
53
|
# Parse the language tag and return the new Locale::Tag::Simple.
|
62
54
|
def parse(tag)
|
63
55
|
if tag =~ TAG_RE
|
@@ -68,7 +60,6 @@ module Locale
|
|
68
60
|
nil
|
69
61
|
end
|
70
62
|
end
|
71
|
-
memoize_dup :parse
|
72
63
|
end
|
73
64
|
|
74
65
|
# Create a Locale::Tag::Simple
|
@@ -85,7 +76,6 @@ module Locale
|
|
85
76
|
def to_s
|
86
77
|
to_string
|
87
78
|
end
|
88
|
-
memoize :to_s
|
89
79
|
|
90
80
|
def to_str #:nodoc:
|
91
81
|
to_s
|
@@ -102,24 +92,20 @@ module Locale
|
|
102
92
|
def eql?(other) #:nodoc:
|
103
93
|
self.==(other)
|
104
94
|
end
|
105
|
-
memoize :eql?
|
106
95
|
|
107
96
|
def hash #:nodoc:
|
108
97
|
"#{self.class}:#{to_s}".hash
|
109
98
|
end
|
110
|
-
memoize :hash
|
111
99
|
|
112
100
|
def inspect #:nodoc:
|
113
101
|
%Q[#<#{self.class}: #{to_s}>]
|
114
102
|
end
|
115
|
-
memoize :inspect
|
116
103
|
|
117
104
|
# For backward compatibility.
|
118
105
|
def country; region end
|
119
106
|
|
120
107
|
# Set the language (with downcase)
|
121
108
|
def language=(val)
|
122
|
-
clear
|
123
109
|
@language = val
|
124
110
|
@language = @language.downcase if @language
|
125
111
|
@language
|
@@ -127,7 +113,6 @@ module Locale
|
|
127
113
|
|
128
114
|
# Set the region (with upcase)
|
129
115
|
def region=(val)
|
130
|
-
clear
|
131
116
|
@region = val
|
132
117
|
@region = @region.upcase if @region
|
133
118
|
@region
|
@@ -138,7 +123,6 @@ module Locale
|
|
138
123
|
def candidates
|
139
124
|
[self.class.new(language, region), self.class.new(language)]
|
140
125
|
end
|
141
|
-
memoize_dup :candidates
|
142
126
|
|
143
127
|
# Convert to the klass(the class of Language::Tag)
|
144
128
|
private
|
data/lib/locale/taglist.rb
CHANGED
@@ -9,8 +9,6 @@
|
|
9
9
|
$Id: taglist.rb 27 2008-12-03 15:06:50Z mutoh $
|
10
10
|
=end
|
11
11
|
|
12
|
-
require 'locale/util/memoizable'
|
13
|
-
|
14
12
|
module Locale
|
15
13
|
# This provides the subclass of Array which behaves like
|
16
14
|
# the first(top priority) Locale::Tag object.
|
@@ -26,8 +24,6 @@ module Locale
|
|
26
24
|
# of this function.
|
27
25
|
#
|
28
26
|
class TagList < Array
|
29
|
-
include Util::Memoizable
|
30
|
-
|
31
27
|
# Returns the top priority language. (simple)
|
32
28
|
def language
|
33
29
|
self[0].language
|
@@ -54,31 +50,26 @@ module Locale
|
|
54
50
|
top_priority_charset ||= ::Locale.driver_module.charset
|
55
51
|
top_priority_charset
|
56
52
|
end
|
57
|
-
memoize :charset
|
58
53
|
|
59
54
|
# Returns the top priority modifier. (posix)
|
60
55
|
def modifier
|
61
56
|
(self[0].respond_to? :modifier) ? self[0].modifier : nil
|
62
57
|
end
|
63
|
-
memoize :modifier
|
64
58
|
|
65
59
|
# Returns the top priority variants.(common, rfc, cldr)
|
66
60
|
def variants
|
67
61
|
(self[0].respond_to? :variants) ? self[0].variants : nil
|
68
62
|
end
|
69
|
-
memoize :variants
|
70
63
|
|
71
64
|
# Returns the top priority extensions.(common, rfc, cldr)
|
72
65
|
def extensions
|
73
66
|
(self[0].respond_to? :extensions) ? self[0].extensions : nil
|
74
67
|
end
|
75
|
-
memoize :extensions
|
76
68
|
|
77
69
|
# Returns the top priority privateuse(rfc)
|
78
70
|
def privateuse
|
79
71
|
(self[0].respond_to? :privateuse) ? self[0].privateuse : nil
|
80
72
|
end
|
81
|
-
memoize :privateuse
|
82
73
|
|
83
74
|
def to_str
|
84
75
|
self[0].to_str
|
data/lib/locale/version.rb
CHANGED
@@ -2,11 +2,12 @@
|
|
2
2
|
version - version information of Ruby-Locale
|
3
3
|
|
4
4
|
Copyright (C) 2008 Masao Mutoh
|
5
|
+
Copyright (C) 2013 Kouhei Sutou <kou@clear-code.com>
|
5
6
|
|
6
7
|
You may redistribute it and/or modify it under the same
|
7
8
|
license terms as Ruby.
|
8
9
|
=end
|
9
10
|
module Locale
|
10
|
-
VERSION = "2.0
|
11
|
+
VERSION = "2.1.0"
|
11
12
|
end
|
12
13
|
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: locale
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
5
|
-
prerelease:
|
4
|
+
version: 2.1.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Kouhei Sutou
|
@@ -10,124 +9,108 @@ authors:
|
|
10
9
|
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date: 2013-
|
12
|
+
date: 2013-12-15 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: rake
|
17
16
|
requirement: !ruby/object:Gem::Requirement
|
18
|
-
none: false
|
19
17
|
requirements:
|
20
|
-
- -
|
18
|
+
- - '>='
|
21
19
|
- !ruby/object:Gem::Version
|
22
20
|
version: '0'
|
23
21
|
type: :development
|
24
22
|
prerelease: false
|
25
23
|
version_requirements: !ruby/object:Gem::Requirement
|
26
|
-
none: false
|
27
24
|
requirements:
|
28
|
-
- -
|
25
|
+
- - '>='
|
29
26
|
- !ruby/object:Gem::Version
|
30
27
|
version: '0'
|
31
28
|
- !ruby/object:Gem::Dependency
|
32
29
|
name: bundler
|
33
30
|
requirement: !ruby/object:Gem::Requirement
|
34
|
-
none: false
|
35
31
|
requirements:
|
36
|
-
- -
|
32
|
+
- - '>='
|
37
33
|
- !ruby/object:Gem::Version
|
38
34
|
version: '0'
|
39
35
|
type: :development
|
40
36
|
prerelease: false
|
41
37
|
version_requirements: !ruby/object:Gem::Requirement
|
42
|
-
none: false
|
43
38
|
requirements:
|
44
|
-
- -
|
39
|
+
- - '>='
|
45
40
|
- !ruby/object:Gem::Version
|
46
41
|
version: '0'
|
47
42
|
- !ruby/object:Gem::Dependency
|
48
43
|
name: yard
|
49
44
|
requirement: !ruby/object:Gem::Requirement
|
50
|
-
none: false
|
51
45
|
requirements:
|
52
|
-
- -
|
46
|
+
- - '>='
|
53
47
|
- !ruby/object:Gem::Version
|
54
48
|
version: '0'
|
55
49
|
type: :development
|
56
50
|
prerelease: false
|
57
51
|
version_requirements: !ruby/object:Gem::Requirement
|
58
|
-
none: false
|
59
52
|
requirements:
|
60
|
-
- -
|
53
|
+
- - '>='
|
61
54
|
- !ruby/object:Gem::Version
|
62
55
|
version: '0'
|
63
56
|
- !ruby/object:Gem::Dependency
|
64
57
|
name: redcarpet
|
65
58
|
requirement: !ruby/object:Gem::Requirement
|
66
|
-
none: false
|
67
59
|
requirements:
|
68
|
-
- -
|
60
|
+
- - '>='
|
69
61
|
- !ruby/object:Gem::Version
|
70
62
|
version: '0'
|
71
63
|
type: :development
|
72
64
|
prerelease: false
|
73
65
|
version_requirements: !ruby/object:Gem::Requirement
|
74
|
-
none: false
|
75
66
|
requirements:
|
76
|
-
- -
|
67
|
+
- - '>='
|
77
68
|
- !ruby/object:Gem::Version
|
78
69
|
version: '0'
|
79
70
|
- !ruby/object:Gem::Dependency
|
80
71
|
name: test-unit
|
81
72
|
requirement: !ruby/object:Gem::Requirement
|
82
|
-
none: false
|
83
73
|
requirements:
|
84
|
-
- -
|
74
|
+
- - '>='
|
85
75
|
- !ruby/object:Gem::Version
|
86
76
|
version: '0'
|
87
77
|
type: :development
|
88
78
|
prerelease: false
|
89
79
|
version_requirements: !ruby/object:Gem::Requirement
|
90
|
-
none: false
|
91
80
|
requirements:
|
92
|
-
- -
|
81
|
+
- - '>='
|
93
82
|
- !ruby/object:Gem::Version
|
94
83
|
version: '0'
|
95
84
|
- !ruby/object:Gem::Dependency
|
96
85
|
name: test-unit-notify
|
97
86
|
requirement: !ruby/object:Gem::Requirement
|
98
|
-
none: false
|
99
87
|
requirements:
|
100
|
-
- -
|
88
|
+
- - '>='
|
101
89
|
- !ruby/object:Gem::Version
|
102
90
|
version: '0'
|
103
91
|
type: :development
|
104
92
|
prerelease: false
|
105
93
|
version_requirements: !ruby/object:Gem::Requirement
|
106
|
-
none: false
|
107
94
|
requirements:
|
108
|
-
- -
|
95
|
+
- - '>='
|
109
96
|
- !ruby/object:Gem::Version
|
110
97
|
version: '0'
|
111
98
|
- !ruby/object:Gem::Dependency
|
112
99
|
name: test-unit-rr
|
113
100
|
requirement: !ruby/object:Gem::Requirement
|
114
|
-
none: false
|
115
101
|
requirements:
|
116
|
-
- -
|
102
|
+
- - '>='
|
117
103
|
- !ruby/object:Gem::Version
|
118
104
|
version: '0'
|
119
105
|
type: :development
|
120
106
|
prerelease: false
|
121
107
|
version_requirements: !ruby/object:Gem::Requirement
|
122
|
-
none: false
|
123
108
|
requirements:
|
124
|
-
- -
|
109
|
+
- - '>='
|
125
110
|
- !ruby/object:Gem::Version
|
126
111
|
version: '0'
|
127
|
-
description:
|
128
|
-
localization.
|
129
|
-
|
130
|
-
'
|
112
|
+
description: |
|
113
|
+
Ruby-Locale is the pure ruby library which provides basic APIs for localization.
|
131
114
|
email:
|
132
115
|
- kou@clear-code.com
|
133
116
|
- mutomasa at gmail.com
|
@@ -156,7 +139,6 @@ files:
|
|
156
139
|
- lib/locale/middleware.rb
|
157
140
|
- lib/locale/data/languages.tab.gz
|
158
141
|
- lib/locale/data/regions.tab.gz
|
159
|
-
- lib/locale/util/memoizable.rb
|
160
142
|
- lib/locale/taglist.rb
|
161
143
|
- lib/locale.rb
|
162
144
|
- samples/cgi/README
|
@@ -184,7 +166,6 @@ files:
|
|
184
166
|
- test/test_locale.rb
|
185
167
|
- test/test_thread.rb
|
186
168
|
- test/test_info.rb
|
187
|
-
- test/test_memoizable.rb
|
188
169
|
- test/test_driver_jruby.rb
|
189
170
|
- test/test_driver_win32.rb
|
190
171
|
- test/test_detect_general.rb
|
@@ -192,27 +173,26 @@ homepage: https://github.com/ruby-gettext/locale
|
|
192
173
|
licenses:
|
193
174
|
- Ruby
|
194
175
|
- LGPLv3+
|
176
|
+
metadata: {}
|
195
177
|
post_install_message:
|
196
178
|
rdoc_options: []
|
197
179
|
require_paths:
|
198
180
|
- lib
|
199
181
|
required_ruby_version: !ruby/object:Gem::Requirement
|
200
|
-
none: false
|
201
182
|
requirements:
|
202
|
-
- -
|
183
|
+
- - '>='
|
203
184
|
- !ruby/object:Gem::Version
|
204
185
|
version: '0'
|
205
186
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
206
|
-
none: false
|
207
187
|
requirements:
|
208
|
-
- -
|
188
|
+
- - '>='
|
209
189
|
- !ruby/object:Gem::Version
|
210
190
|
version: '0'
|
211
191
|
requirements: []
|
212
192
|
rubyforge_project:
|
213
|
-
rubygems_version:
|
193
|
+
rubygems_version: 2.0.14
|
214
194
|
signing_key:
|
215
|
-
specification_version:
|
195
|
+
specification_version: 4
|
216
196
|
summary: Ruby-Locale is the pure ruby library which provides basic APIs for localization.
|
217
197
|
test_files:
|
218
198
|
- test/test_tag.rb
|
@@ -221,7 +201,6 @@ test_files:
|
|
221
201
|
- test/test_locale.rb
|
222
202
|
- test/test_thread.rb
|
223
203
|
- test/test_info.rb
|
224
|
-
- test/test_memoizable.rb
|
225
204
|
- test/test_driver_jruby.rb
|
226
205
|
- test/test_driver_win32.rb
|
227
206
|
- test/test_detect_general.rb
|
@@ -1,108 +0,0 @@
|
|
1
|
-
# Refer from activesupport-2.2.0.
|
2
|
-
#
|
3
|
-
# * Remove the dependecies to activesupport.
|
4
|
-
# * change the key to hash value of args.
|
5
|
-
# * Not Thread safe
|
6
|
-
# * Add the clear method.
|
7
|
-
module Locale
|
8
|
-
module Util
|
9
|
-
module Memoizable
|
10
|
-
MEMOIZED_IVAR = Proc.new do |symbol|
|
11
|
-
"#{symbol.to_s.sub(/\?\Z/, '_query').sub(/!\Z/, '_bang')}".to_sym
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.included(base)
|
15
|
-
mod = self
|
16
|
-
base.class_eval do
|
17
|
-
extend mod
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
alias :freeze_without_memoizable :freeze #:nodoc:
|
22
|
-
def freeze #:nodoc:
|
23
|
-
unless frozen?
|
24
|
-
@_memoized_ivars = {}
|
25
|
-
freeze_without_memoizable
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
# Clear memoized values. Deprecated.
|
30
|
-
def clear # :nodoc:
|
31
|
-
@_memoized_ivars = {}
|
32
|
-
end
|
33
|
-
|
34
|
-
# Clear memoized values.
|
35
|
-
def memoize_clear
|
36
|
-
@_memoized_ivars = {}
|
37
|
-
end
|
38
|
-
|
39
|
-
# Cache the result of the methods.
|
40
|
-
#
|
41
|
-
# include Memoizable
|
42
|
-
# def foo
|
43
|
-
# ......
|
44
|
-
# end
|
45
|
-
# def bar(a, b)
|
46
|
-
# ......
|
47
|
-
# end
|
48
|
-
# memoize :foo, :bar(a, b)
|
49
|
-
#
|
50
|
-
# To clear cache, #clear_foo, #clear_bar is also defined.
|
51
|
-
#
|
52
|
-
# (NOTE)
|
53
|
-
# * Consider to use this with huge objects to avoid memory leaks.
|
54
|
-
# * Can't use this with super.<method> because of infinity loop.
|
55
|
-
def memoize(*symbols)
|
56
|
-
memoize_impl(false, *symbols)
|
57
|
-
end
|
58
|
-
|
59
|
-
# memoize with dup. A copy object is returned.
|
60
|
-
def memoize_dup(*symbols)
|
61
|
-
memoize_impl(true, *symbols)
|
62
|
-
end
|
63
|
-
|
64
|
-
def memoize_impl(is_dup, *symbols) #:nodoc:
|
65
|
-
symbols.each do |symbol|
|
66
|
-
original_method = "_unmemoized_#{symbol}"
|
67
|
-
memoized_ivar = MEMOIZED_IVAR.call(symbol)
|
68
|
-
dup_meth = is_dup ? "_dup" : ""
|
69
|
-
|
70
|
-
class_eval <<-EOS, __FILE__, __LINE__
|
71
|
-
alias #{original_method} #{symbol}
|
72
|
-
def #{symbol}(*args)
|
73
|
-
_memoize#{dup_meth}(:#{memoized_ivar}, args.hash) do
|
74
|
-
#{original_method}(*args)
|
75
|
-
end
|
76
|
-
end
|
77
|
-
EOS
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
def _memoize(ivar, key) #:nodoc:
|
82
|
-
@_memoized_ivars ||= {}
|
83
|
-
@_memoized_ivars[ivar] ||= {}
|
84
|
-
|
85
|
-
ret = @_memoized_ivars[ivar][key]
|
86
|
-
unless ret
|
87
|
-
ret = yield
|
88
|
-
ret.freeze
|
89
|
-
@_memoized_ivars[ivar][key] = ret
|
90
|
-
end
|
91
|
-
ret
|
92
|
-
end
|
93
|
-
|
94
|
-
def _memoize_dup(ivar, key) #:nodoc:
|
95
|
-
ret = _memoize(ivar, key) do; yield; end
|
96
|
-
if ret
|
97
|
-
if ret.kind_of? Array
|
98
|
-
ret.map{|v| v.dup}.dup
|
99
|
-
else
|
100
|
-
ret.dup
|
101
|
-
end
|
102
|
-
else
|
103
|
-
nil
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
data/test/test_memoizable.rb
DELETED
@@ -1,133 +0,0 @@
|
|
1
|
-
require 'locale/util/memoizable'
|
2
|
-
require 'test/unit'
|
3
|
-
|
4
|
-
class A
|
5
|
-
include Locale::Util::Memoizable
|
6
|
-
def initialize
|
7
|
-
@count = 0
|
8
|
-
@a = ""
|
9
|
-
end
|
10
|
-
def test1(a)
|
11
|
-
@a += String(a)
|
12
|
-
@count += 1
|
13
|
-
end
|
14
|
-
memoize :test1
|
15
|
-
attr_reader :a
|
16
|
-
end
|
17
|
-
|
18
|
-
class B < A
|
19
|
-
end
|
20
|
-
|
21
|
-
class C < A
|
22
|
-
def test1(a)
|
23
|
-
@a = String(a) + @a
|
24
|
-
@count += 1
|
25
|
-
end
|
26
|
-
memoize :test1
|
27
|
-
end
|
28
|
-
|
29
|
-
class D
|
30
|
-
class << self
|
31
|
-
include Locale::Util::Memoizable
|
32
|
-
def init
|
33
|
-
@@count = 0
|
34
|
-
@@a = "a"
|
35
|
-
end
|
36
|
-
def test1(a)
|
37
|
-
@@a = @@a + "b" * a
|
38
|
-
@@count += 1
|
39
|
-
end
|
40
|
-
memoize :test1
|
41
|
-
def a
|
42
|
-
@@a
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
class E
|
48
|
-
include Locale::Util::Memoizable
|
49
|
-
def test2
|
50
|
-
"aa"
|
51
|
-
end
|
52
|
-
memoize :test2
|
53
|
-
|
54
|
-
def test2_dup
|
55
|
-
"bb"
|
56
|
-
end
|
57
|
-
memoize_dup :test2_dup
|
58
|
-
end
|
59
|
-
|
60
|
-
class TestMemoizable < Test::Unit::TestCase
|
61
|
-
def test_simple
|
62
|
-
t = A.new
|
63
|
-
assert_equal 1, t.test1(1)
|
64
|
-
assert_equal "1", t.a
|
65
|
-
assert_equal 1, t.test1(1)
|
66
|
-
assert_equal "1", t.a
|
67
|
-
assert_equal 2, t.test1(2)
|
68
|
-
assert_equal "12", t.a
|
69
|
-
assert_equal 2, t.test1(2)
|
70
|
-
assert_equal "12", t.a
|
71
|
-
assert_equal 1, t.test1(1)
|
72
|
-
assert_equal "12", t.a
|
73
|
-
end
|
74
|
-
|
75
|
-
def test_simple_inherited
|
76
|
-
t = B.new
|
77
|
-
assert_equal 1, t.test1(1)
|
78
|
-
assert_equal "1", t.a
|
79
|
-
assert_equal 1, t.test1(1)
|
80
|
-
assert_equal "1", t.a
|
81
|
-
assert_equal 2, t.test1(2)
|
82
|
-
assert_equal "12", t.a
|
83
|
-
assert_equal 2, t.test1(2)
|
84
|
-
assert_equal "12", t.a
|
85
|
-
assert_equal 1, t.test1(1)
|
86
|
-
assert_equal "12", t.a
|
87
|
-
end
|
88
|
-
|
89
|
-
def test_override
|
90
|
-
t = C.new
|
91
|
-
assert_equal 1, t.test1(1)
|
92
|
-
assert_equal "1", t.a
|
93
|
-
assert_equal 1, t.test1(1)
|
94
|
-
assert_equal "1", t.a
|
95
|
-
assert_equal 2, t.test1(2)
|
96
|
-
assert_equal "21", t.a
|
97
|
-
assert_equal 2, t.test1(2)
|
98
|
-
assert_equal "21", t.a
|
99
|
-
assert_equal 1, t.test1(1)
|
100
|
-
assert_equal "21", t.a
|
101
|
-
end
|
102
|
-
|
103
|
-
def test_class_method
|
104
|
-
D.init
|
105
|
-
assert_equal 1, D.test1(1)
|
106
|
-
assert_equal "ab", D.a
|
107
|
-
assert_equal 1, D.test1(1)
|
108
|
-
assert_equal "ab", D.a
|
109
|
-
assert_equal 2, D.test1(2)
|
110
|
-
assert_equal "abbb", D.a
|
111
|
-
assert_equal 2, D.test1(2)
|
112
|
-
assert_equal "abbb", D.a
|
113
|
-
assert_equal 1, D.test1(1)
|
114
|
-
assert_equal "abbb", D.a
|
115
|
-
end
|
116
|
-
|
117
|
-
def test_freeze_or_dup
|
118
|
-
t = E.new
|
119
|
-
assert_equal "aa", t.test2
|
120
|
-
# When modification attempted on frozen objects,
|
121
|
-
# ruby 1.9 raises RuntimeError instead of TypeError.
|
122
|
-
# http://redmine.ruby-lang.org/issues/show/409
|
123
|
-
# http://redmine.ruby-lang.org/repositories/diff/ruby-19/error.c?rev=7294
|
124
|
-
if RUBY_VERSION < '1.9.0'
|
125
|
-
assert_raise(TypeError){ t.test2 << "a" }
|
126
|
-
else
|
127
|
-
assert_raise(RuntimeError){ t.test2 << "a" }
|
128
|
-
end
|
129
|
-
assert_equal "bb", t.test2_dup
|
130
|
-
assert_equal "bbb", t.test2_dup << "b"
|
131
|
-
assert_equal "bb", t.test2_dup
|
132
|
-
end
|
133
|
-
end
|