stringex 2.0.11 → 2.8.6

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 (81) hide show
  1. checksums.yaml +6 -14
  2. data/Gemfile +45 -14
  3. data/MIT-LICENSE +1 -1
  4. data/README.md +162 -0
  5. data/Rakefile +5 -31
  6. data/VERSION +1 -1
  7. data/lib/stringex/acts_as_url/adapter/active_record.rb +1 -1
  8. data/lib/stringex/acts_as_url/adapter/base.rb +37 -5
  9. data/lib/stringex/acts_as_url/adapter/data_mapper.rb +3 -7
  10. data/lib/stringex/acts_as_url/adapter/mongoid.rb +2 -2
  11. data/lib/stringex/acts_as_url.rb +11 -4
  12. data/lib/stringex/configuration/acts_as_url.rb +15 -10
  13. data/lib/stringex/configuration/string_extensions.rb +7 -6
  14. data/lib/stringex/core_ext.rb +10 -0
  15. data/lib/stringex/localization/backend/i18n.rb +16 -3
  16. data/lib/stringex/localization/conversion_expressions.rb +64 -60
  17. data/lib/stringex/localization/converter.rb +8 -4
  18. data/lib/stringex/localization/default_conversions.rb +56 -55
  19. data/lib/stringex/localization.rb +2 -2
  20. data/lib/stringex/string_extensions.rb +34 -6
  21. data/lib/stringex/unidecoder.rb +26 -22
  22. data/lib/stringex/unidecoder_data/x00.yml +1 -1
  23. data/lib/stringex/unidecoder_data/x03.yml +2 -2
  24. data/lib/stringex/unidecoder_data/x05.yml +1 -1
  25. data/lib/stringex/unidecoder_data/x07.yml +1 -1
  26. data/lib/stringex/unidecoder_data/x09.yml +2 -2
  27. data/lib/stringex/unidecoder_data/x0a.yml +2 -2
  28. data/lib/stringex/unidecoder_data/x0f.yml +1 -1
  29. data/lib/stringex/unidecoder_data/x12.yml +1 -1
  30. data/lib/stringex/unidecoder_data/x13.yml +1 -1
  31. data/lib/stringex/unidecoder_data/x14.yml +2 -2
  32. data/lib/stringex/unidecoder_data/x15.yml +1 -1
  33. data/lib/stringex/unidecoder_data/x16.yml +2 -2
  34. data/lib/stringex/unidecoder_data/x18.yml +2 -2
  35. data/lib/stringex/unidecoder_data/x20.yml +4 -4
  36. data/lib/stringex/unidecoder_data/x21.yml +28 -28
  37. data/lib/stringex/unidecoder_data/x25.yml +16 -16
  38. data/lib/stringex/unidecoder_data/x28.yml +1 -1
  39. data/lib/stringex/unidecoder_data/x30.yml +2 -2
  40. data/lib/stringex/unidecoder_data/x32.yml +1 -1
  41. data/lib/stringex/unidecoder_data/xa1.yml +1 -1
  42. data/lib/stringex/unidecoder_data/xb1.yml +1 -1
  43. data/lib/stringex/unidecoder_data/xc6.yml +2 -2
  44. data/lib/stringex/unidecoder_data/xfe.yml +3 -3
  45. data/lib/stringex/unidecoder_data/xff.yml +5 -5
  46. data/lib/stringex.rb +1 -2
  47. data/locales/da.yml +2 -1
  48. data/locales/de.yml +1 -0
  49. data/locales/en.yml +1 -0
  50. data/locales/fr.yml +72 -0
  51. data/locales/nb.yml +76 -0
  52. data/locales/nl.yml +69 -0
  53. data/locales/no.yml +76 -0
  54. data/locales/pl.yml +88 -0
  55. data/locales/pt-BR.yml +1 -0
  56. data/locales/ru.yml +1 -0
  57. data/locales/sv.yml +76 -0
  58. data/stringex.gemspec +38 -59
  59. data/test/unit/acts_as_url/adapter/{active_record.rb → activerecord.rb} +4 -5
  60. data/test/unit/acts_as_url/adapter/{data_mapper.rb → datamapper.rb} +2 -3
  61. data/test/unit/acts_as_url/adapter/mongoid.rb +18 -11
  62. data/test/unit/acts_as_url_configuration_test.rb +2 -2
  63. data/test/unit/acts_as_url_integration_test.rb +169 -73
  64. data/test/unit/localization/da_test.rb +3 -2
  65. data/test/unit/localization/de_test.rb +1 -0
  66. data/test/unit/localization/default_test.rb +2 -0
  67. data/test/unit/localization/en_test.rb +1 -0
  68. data/test/unit/localization/fr_test.rb +118 -0
  69. data/test/unit/localization/nl_test.rb +118 -0
  70. data/test/unit/localization/pl_test.rb +118 -0
  71. data/test/unit/localization/pt_br_test.rb +118 -0
  72. data/test/unit/localization/ru_test.rb +2 -1
  73. data/test/unit/localization/sv_test.rb +118 -0
  74. data/test/unit/localization_test.rb +39 -19
  75. data/test/unit/string_extensions_test.rb +60 -6
  76. data/test/unit/unicode_point_suite/basic_greek_test.rb +1 -1
  77. data/test/unit/unicode_point_suite/basic_latin_test.rb +3 -1
  78. data/test/unit/unidecoder_test.rb +2 -1
  79. metadata +47 -94
  80. data/README.rdoc +0 -131
  81. data/test/unit/redcloth_to_html_test.rb +0 -37
@@ -0,0 +1,118 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'test_helper'
4
+ require 'i18n'
5
+ require 'stringex'
6
+
7
+ class DutchYAMLLocalizationTest < Test::Unit::TestCase
8
+ def setup
9
+ Stringex::Localization.reset!
10
+ Stringex::Localization.backend = :i18n
11
+ Stringex::Localization.backend.load_translations :nl
12
+ Stringex::Localization.locale = :nl
13
+ end
14
+
15
+ {
16
+ "foo & bar" => "foo en bar",
17
+ "AT&T" => "AT en T",
18
+ "99° is normaal" => "99 graden is normaal",
19
+ "4 ÷ 2 is 2" => "4 gedeeld door 2 is 2",
20
+ "webcrawler.com" => "webcrawler punt com",
21
+ "Dus..." => "Dus punt punt punt",
22
+ "x=1" => "x is 1",
23
+ "Een potlood #2" => "Een potlood nummer 2",
24
+ "100%" => "100 procent",
25
+ "prijs+belasting" => "prijs plus belasting",
26
+ "Batman/Robin fan fiction" => "Batman slash Robin fan fiction",
27
+ "bel *69" => "bel ster 69",
28
+ " i leave whitespace on ends unchanged " => " i leave whitespace on ends unchanged "
29
+ }.each do |original, converted|
30
+ define_method "test_character_conversion: '#{original}'" do
31
+ assert_equal converted, original.convert_miscellaneous_characters
32
+ end
33
+ end
34
+
35
+ {
36
+ "¤20" => "20 euro",
37
+ "$100" => "100 dollar",
38
+ "$19.99" => "19 dollar 99 cent",
39
+ "£100" => "100 pond",
40
+ "£19.99" => "19 pond 99 pence",
41
+ "€100" => "100 euro",
42
+ "€19.99" => "19 euro 99 cent",
43
+ "¥1000" => "1000 yen"
44
+ }.each do |original, converted|
45
+ define_method "test_currency_conversion: '#{original}'" do
46
+ assert_equal converted, original.convert_miscellaneous_characters
47
+ end
48
+ end
49
+
50
+ {
51
+ "Appels &amp; peren" => "Appels en peren",
52
+ "10&cent;" => "10 cent",
53
+ "&copy;2000" => "(c)2000",
54
+ "98&deg; is acceptabel" => "98 graden is acceptabel",
55
+ "10&divide;5" => "10 gedeeld door 5",
56
+ "&quot;tussen aanhalingstekens&quot;" => '"tussen aanhalingstekens"',
57
+ "wordt vervolgd&hellip;" => "wordt vervolgd...",
58
+ "2000&ndash;2004" => "2000-2004",
59
+ "Ik wil&mdash;oh, laat maar" => "Ik wil--oh, laat maar",
60
+ "&frac12; ons goud" => "half ons goud",
61
+ "1 en &frac14; ons zilver" => "1 en eenvierde ons zilver",
62
+ "9 en &frac34; ons platina" => "9 en drievierde ons platina",
63
+ "3&gt;2" => "3>2",
64
+ "2&lt;3" => "2<3",
65
+ "twee&nbsp;woorden" => "twee woorden",
66
+ "100&pound;" => "100 pond",
67
+ "Walmart&reg;" => "Walmart(r)",
68
+ "&apos;enkele aanhalingstekens&apos;" => "'enkele aanhalingstekens'",
69
+ "2&times;4" => "2x4",
70
+ "Programming&trade;" => "Programming(tm)",
71
+ "20000&yen;" => "20000 yen",
72
+ " i leave whitespace on ends unchanged " => " i leave whitespace on ends unchanged "
73
+ }.each do |original, converted|
74
+ define_method "test_html_entity_conversion: '#{original}'" do
75
+ assert_equal converted, original.convert_miscellaneous_html_entities
76
+ end
77
+ end
78
+
79
+ {
80
+ "&frac12;" => "half",
81
+ "½" => "half",
82
+ "&#189;" => "half",
83
+ "⅓" => "eenderde",
84
+ "&#8531;" => "eenderde",
85
+ "⅔" => "tweederde",
86
+ "&#8532;" => "tweederde",
87
+ "&frac14;" => "eenvierde",
88
+ "¼" => "eenvierde",
89
+ "&#188;" => "eenvierde",
90
+ "&frac34;" => "drievierde",
91
+ "¾" => "drievierde",
92
+ "&#190;" => "drievierde",
93
+ "⅕" => "eenvijfde",
94
+ "&#8533;" => "eenvijfde",
95
+ "⅖" => "tweevijfde",
96
+ "&#8534;" => "tweevijfde",
97
+ "⅗" => "drievijfde",
98
+ "&#8535;" => "drievijfde",
99
+ "⅘" => "viervijfde",
100
+ "&#8536;" => "viervijfde",
101
+ "⅙" => "eenzesde",
102
+ "&#8537;" => "eenzesde",
103
+ "⅚" => "vijfzesde",
104
+ "&#8538;" => "vijfzesde",
105
+ "⅛" => "eenachtste",
106
+ "&#8539;" => "eenachtste",
107
+ "⅜" => "drieachtste",
108
+ "&#8540;" => "drieachtste",
109
+ "⅝" => "vijfachtste",
110
+ "&#8541;" => "vijfachtste",
111
+ "⅞" => "zevenachtste",
112
+ "&#8542;" => "zevenachtste"
113
+ }.each do |original, converted|
114
+ define_method "test_vulgar_fractions_conversion: #{original}" do
115
+ assert_equal converted, original.convert_vulgar_fractions
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,118 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'test_helper'
4
+ require 'i18n'
5
+ require 'stringex'
6
+
7
+ class PolishYAMLLocalizationTest < Test::Unit::TestCase
8
+ def setup
9
+ Stringex::Localization.reset!
10
+ Stringex::Localization.backend = :i18n
11
+ Stringex::Localization.backend.load_translations :pl
12
+ Stringex::Localization.locale = :pl
13
+ end
14
+
15
+ {
16
+ "foo & bar" => "foo i bar",
17
+ "AT&T" => "AT i T",
18
+ "99° is normal" => "99 stopni is normal",
19
+ "4 ÷ 2 is 2" => "4 podzielone przez 2 is 2",
20
+ "webcrawler.com" => "webcrawler kropka com",
21
+ "Well..." => "Well kropka kropka kropka",
22
+ "x=1" => "x równy 1",
23
+ "a #2 pencil" => "a numer 2 pencil",
24
+ "100%" => "100 procent",
25
+ "cost+tax" => "cost plus tax",
26
+ "batman/robin fan fiction" => "batman ukośnik robin fan fiction",
27
+ "dial *69" => "dial gwiazdka 69",
28
+ " i leave whitespace on ends unchanged " => " i leave whitespace on ends unchanged "
29
+ }.each do |original, converted|
30
+ define_method "test_character_conversion: '#{original}'" do
31
+ assert_equal converted, original.convert_miscellaneous_characters
32
+ end
33
+ end
34
+
35
+ {
36
+ "¤20" => "20 złotych",
37
+ "$100" => "100 dolarów",
38
+ "$19.99" => "19 dolarów 99 centów",
39
+ "£100" => "100 funtów",
40
+ "£19.99" => "19 funtów 99 pensów",
41
+ "€100" => "100 euro",
42
+ "€19.99" => "19 euro 99 centów",
43
+ "¥1000" => "1000 jenów"
44
+ }.each do |original, converted|
45
+ define_method "test_currency_conversion: '#{original}'" do
46
+ assert_equal converted, original.convert_miscellaneous_characters
47
+ end
48
+ end
49
+
50
+ {
51
+ "Tea &amp; Sympathy" => "Tea i Sympathy",
52
+ "10&cent;" => "10 centów",
53
+ "&copy;2000" => "(c)2000",
54
+ "98&deg; is fine" => "98 stopni is fine",
55
+ "10&divide;5" => "10 podzielone przez 5",
56
+ "&quot;quoted&quot;" => '"quoted"',
57
+ "to be continued&hellip;" => "to be continued...",
58
+ "2000&ndash;2004" => "2000-2004",
59
+ "I wish&mdash;oh, never mind" => "I wish--oh, never mind",
60
+ "&frac12; ounce of gold" => "pół ounce of gold",
61
+ "1 and &frac14; ounces of silver" => "1 and jedna czwarta ounces of silver",
62
+ "9 and &frac34; ounces of platinum" => "9 and trzy czwarte ounces of platinum",
63
+ "3&gt;2" => "3>2",
64
+ "2&lt;3" => "2<3",
65
+ "two&nbsp;words" => "two words",
66
+ "&pound;100" => "funtów 100",
67
+ "Walmart&reg;" => "Walmart(r)",
68
+ "&apos;single quoted&apos;" => "'single quoted'",
69
+ "2&times;4" => "2x4",
70
+ "Programming&trade;" => "Programming(TM)",
71
+ "&yen;20000" => "jen 20000",
72
+ " i leave whitespace on ends unchanged " => " i leave whitespace on ends unchanged "
73
+ }.each do |original, converted|
74
+ define_method "test_html_entity_conversion: '#{original}'" do
75
+ assert_equal converted, original.convert_miscellaneous_html_entities
76
+ end
77
+ end
78
+
79
+ {
80
+ "&frac12;" => "pół",
81
+ "½" => "pół",
82
+ "&#189;" => "pół",
83
+ "⅓" => "jedna trzecia",
84
+ "&#8531;" => "jedna trzecia",
85
+ "⅔" => "dwie trzecie",
86
+ "&#8532;" => "dwie trzecie",
87
+ "&frac14;" => "jedna czwarta",
88
+ "¼" => "jedna czwarta",
89
+ "&#188;" => "jedna czwarta",
90
+ "&frac34;" => "trzy czwarte",
91
+ "¾" => "trzy czwarte",
92
+ "&#190;" => "trzy czwarte",
93
+ "⅕" => "jedna piąta",
94
+ "&#8533;" => "jedna piąta",
95
+ "⅖" => "dwie piąte",
96
+ "&#8534;" => "dwie piąte",
97
+ "⅗" => "trzy piąte",
98
+ "&#8535;" => "trzy piąte",
99
+ "⅘" => "cztery piąte",
100
+ "&#8536;" => "cztery piąte",
101
+ "⅙" => "jedna szósta",
102
+ "&#8537;" => "jedna szósta",
103
+ "⅚" => "pięć szóstych",
104
+ "&#8538;" => "pięć szóstych",
105
+ "⅛" => "jedna ósma",
106
+ "&#8539;" => "jedna ósma",
107
+ "⅜" => "trzy ósme",
108
+ "&#8540;" => "trzy ósme",
109
+ "⅝" => "pięć ósmych",
110
+ "&#8541;" => "pięć ósmych",
111
+ "⅞" => "siedem ósmych",
112
+ "&#8542;" => "siedem ósmych"
113
+ }.each do |original, converted|
114
+ define_method "test_vulgar_fractions_conversion: #{original}" do
115
+ assert_equal converted, original.convert_vulgar_fractions
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,118 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'test_helper'
4
+ require 'i18n'
5
+ require 'stringex'
6
+
7
+ class BrazilianYAMLLocalizationTest < Test::Unit::TestCase
8
+ def setup
9
+ Stringex::Localization.reset!
10
+ Stringex::Localization.backend = :i18n
11
+ Stringex::Localization.backend.load_translations :'pt-BR'
12
+ Stringex::Localization.locale = :'pt-BR'
13
+ end
14
+
15
+ {
16
+ "foo & bar" => "foo e bar",
17
+ "AT&T" => "AT e T",
18
+ "99° is normal" => "99 graus is normal",
19
+ "4 ÷ 2 is 2" => "4 dividido por 2 is 2",
20
+ "webcrawler.com" => "webcrawler ponto com",
21
+ "Well..." => "Well reticências",
22
+ "x=1" => "x igual à 1",
23
+ "a #2 pencil" => "a número 2 pencil",
24
+ "100%" => "100 porcento",
25
+ "cost+tax" => "cost mais tax",
26
+ "batman/robin fan fiction" => "batman barra robin fan fiction",
27
+ "dial *69" => "dial estrela 69",
28
+ " i leave whitespace on ends unchanged " => " i leave whitespace on ends unchanged "
29
+ }.each do |original, converted|
30
+ define_method "test_character_conversion: '#{original}'" do
31
+ assert_equal converted, original.convert_miscellaneous_characters
32
+ end
33
+ end
34
+
35
+ {
36
+ "¤20" => "20 reais",
37
+ "$100" => "100 dólares",
38
+ "$19.99" => "19 dólares 99 cents",
39
+ "£100" => "100 libras",
40
+ "£19.99" => "19 libras 99 centavos",
41
+ "€100" => "100 euros",
42
+ "€19.99" => "19 euros 99 cents",
43
+ "¥1000" => "1000 yen"
44
+ }.each do |original, converted|
45
+ define_method "test_currency_conversion: '#{original}'" do
46
+ assert_equal converted, original.convert_miscellaneous_characters
47
+ end
48
+ end
49
+
50
+ {
51
+ "Tea &amp; Sympathy" => "Tea e Sympathy",
52
+ "10&cent;" => "10 centavos",
53
+ "&copy;2000" => "(c)2000",
54
+ "98&deg; is fine" => "98 graus is fine",
55
+ "10&divide;5" => "10 dividido por 5",
56
+ "&quot;quoted&quot;" => '"quoted"',
57
+ "to be continued&hellip;" => "to be continued...",
58
+ "2000&ndash;2004" => "2000-2004",
59
+ "I wish&mdash;oh, never mind" => "I wish--oh, never mind",
60
+ "&frac12; ounce of gold" => "metade ounce of gold",
61
+ "1 and &frac14; ounces of silver" => "1 and um quarto ounces of silver",
62
+ "9 and &frac34; ounces of platinum" => "9 and três quartos ounces of platinum",
63
+ "3&gt;2" => "3>2",
64
+ "2&lt;3" => "2<3",
65
+ "two&nbsp;words" => "two words",
66
+ "&pound;100" => "libras 100",
67
+ "Walmart&reg;" => "Walmart(r)",
68
+ "&apos;single quoted&apos;" => "'single quoted'",
69
+ "2&times;4" => "2x4",
70
+ "Programming&trade;" => "Programming(tm)",
71
+ "&yen;20000" => "yen 20000",
72
+ " i leave whitespace on ends unchanged " => " i leave whitespace on ends unchanged "
73
+ }.each do |original, converted|
74
+ define_method "test_html_entity_conversion: '#{original}'" do
75
+ assert_equal converted, original.convert_miscellaneous_html_entities
76
+ end
77
+ end
78
+
79
+ {
80
+ "&frac12;" => "metade",
81
+ "½" => "metade",
82
+ "&#189;" => "metade",
83
+ "⅓" => "um terço",
84
+ "&#8531;" => "um terço",
85
+ "⅔" => "dois terços",
86
+ "&#8532;" => "dois terços",
87
+ "&frac14;" => "um quarto",
88
+ "¼" => "um quarto",
89
+ "&#188;" => "um quarto",
90
+ "&frac34;" => "três quartos",
91
+ "¾" => "três quartos",
92
+ "&#190;" => "três quartos",
93
+ "⅕" => "um quinto",
94
+ "&#8533;" => "um quinto",
95
+ "⅖" => "dois quintos",
96
+ "&#8534;" => "dois quintos",
97
+ "⅗" => "três quintos",
98
+ "&#8535;" => "três quintos",
99
+ "⅘" => "quatro quintos",
100
+ "&#8536;" => "quatro quintos",
101
+ "⅙" => "um sexto",
102
+ "&#8537;" => "um sexto",
103
+ "⅚" => "cinco sextos",
104
+ "&#8538;" => "cinco sextos",
105
+ "⅛" => "um oitavo",
106
+ "&#8539;" => "um oitavo",
107
+ "⅜" => "três oitavos",
108
+ "&#8540;" => "três oitavos",
109
+ "⅝" => "cinco oitavos",
110
+ "&#8541;" => "cinco oitavos",
111
+ "⅞" => "sete oitavos",
112
+ "&#8542;" => "sete oitavos"
113
+ }.each do |original, converted|
114
+ define_method "test_vulgar_fractions_conversion: #{original}" do
115
+ assert_equal converted, original.convert_vulgar_fractions
116
+ end
117
+ end
118
+ end
@@ -33,6 +33,7 @@ class RussianYAMLLocalizationTest < Test::Unit::TestCase
33
33
  end
34
34
 
35
35
  {
36
+ "¤20" => "20 рубль",
36
37
  "$100" => "100 долларов",
37
38
  "$19.99" => "19 долларов 99 центов",
38
39
  "£100" => "100 фунтов",
@@ -122,7 +123,7 @@ class RussianYAMLLocalizationTest < Test::Unit::TestCase
122
123
  "4 ÷ 2 is 2" => "4-dielit-na-2-is-2",
123
124
  "webcrawler.com" => "webcrawler-tochka-com",
124
125
  }.each do |original, converted|
125
- define_method "test_character_conversion: '#{original}'" do
126
+ define_method "test_character_conversion_to_url: '#{original}'" do
126
127
  assert_equal converted, original.to_url
127
128
  end
128
129
  end
@@ -0,0 +1,118 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'test_helper'
4
+ require 'i18n'
5
+ require 'stringex'
6
+
7
+ class SwedishYAMLLocalizationTest < Test::Unit::TestCase
8
+ def setup
9
+ Stringex::Localization.reset!
10
+ Stringex::Localization.backend = :i18n
11
+ Stringex::Localization.backend.load_translations :sv
12
+ Stringex::Localization.locale = :sv
13
+ end
14
+
15
+ {
16
+ "foo & bar" => "foo och bar",
17
+ "AT&T" => "AT och T",
18
+ "99° is normal" => "99 grader is normal",
19
+ "4 ÷ 2 is 2" => "4 delat med 2 is 2",
20
+ "webcrawler.com" => "webcrawler punkt com",
21
+ "Well..." => "Well punkt punkt punkt",
22
+ "x=1" => "x lika med 1",
23
+ "a #2 pencil" => "a nummer 2 pencil",
24
+ "100%" => "100 procent",
25
+ "cost+tax" => "cost plus tax",
26
+ "batman/robin fan fiction" => "batman slash robin fan fiction",
27
+ "dial *69" => "dial stjärna 69",
28
+ " i leave whitespace on ends unchanged " => " i leave whitespace on ends unchanged "
29
+ }.each do |original, converted|
30
+ define_method "test_character_conversion: '#{original}'" do
31
+ assert_equal converted, original.convert_miscellaneous_characters
32
+ end
33
+ end
34
+
35
+ {
36
+ "¤20" => "20 kronor",
37
+ "$100" => "100 dollar",
38
+ "$19.99" => "19 dollar 99 cent",
39
+ "£100" => "100 pund",
40
+ "£19.99" => "19 pund 99 pence",
41
+ "€100" => "100 euro",
42
+ "€19.99" => "19 euro 99 cent",
43
+ "¥1000" => "1000 yen"
44
+ }.each do |original, converted|
45
+ define_method "test_currency_conversion: '#{original}'" do
46
+ assert_equal converted, original.convert_miscellaneous_characters
47
+ end
48
+ end
49
+
50
+ {
51
+ "Tea &amp; Sympathy" => "Tea och Sympathy",
52
+ "10&cent;" => "10 cents",
53
+ "&copy;2000" => "(c)2000",
54
+ "98&deg; is fine" => "98 grader is fine",
55
+ "10&divide;5" => "10 delat med 5",
56
+ "&quot;quoted&quot;" => '"quoted"',
57
+ "to be continued&hellip;" => "to be continued...",
58
+ "2000&ndash;2004" => "2000-2004",
59
+ "I wish&mdash;oh, never mind" => "I wish--oh, never mind",
60
+ "&frac12; ounce of gold" => "halv ounce of gold",
61
+ "1 and &frac14; ounces of silver" => "1 and en fjärdedel ounces of silver",
62
+ "9 and &frac34; ounces of platinum" => "9 and tre fjärdedelar ounces of platinum",
63
+ "3&gt;2" => "3>2",
64
+ "2&lt;3" => "2<3",
65
+ "two&nbsp;words" => "two words",
66
+ "&pound;100" => "pund 100",
67
+ "Walmart&reg;" => "Walmart(r)",
68
+ "&apos;single quoted&apos;" => "'single quoted'",
69
+ "2&times;4" => "2x4",
70
+ "Programming&trade;" => "Programming(tm)",
71
+ "&yen;20000" => "yen 20000",
72
+ " i leave whitespace on ends unchanged " => " i leave whitespace on ends unchanged "
73
+ }.each do |original, converted|
74
+ define_method "test_html_entity_conversion: '#{original}'" do
75
+ assert_equal converted, original.convert_miscellaneous_html_entities
76
+ end
77
+ end
78
+
79
+ {
80
+ "&frac12;" => "halv",
81
+ "½" => "halv",
82
+ "&#189;" => "halv",
83
+ "⅓" => "en tredjedel",
84
+ "&#8531;" => "en tredjedel",
85
+ "⅔" => "två tredjedelar",
86
+ "&#8532;" => "två tredjedelar",
87
+ "&frac14;" => "en fjärdedel",
88
+ "¼" => "en fjärdedel",
89
+ "&#188;" => "en fjärdedel",
90
+ "&frac34;" => "tre fjärdedelar",
91
+ "¾" => "tre fjärdedelar",
92
+ "&#190;" => "tre fjärdedelar",
93
+ "⅕" => "en femtedel",
94
+ "&#8533;" => "en femtedel",
95
+ "⅖" => "två femtedelar",
96
+ "&#8534;" => "två femtedelar",
97
+ "⅗" => "tre femtedelar",
98
+ "&#8535;" => "tre femtedelar",
99
+ "⅘" => "fyra femtedelar",
100
+ "&#8536;" => "fyra femtedelar",
101
+ "⅙" => "en sjättedel",
102
+ "&#8537;" => "en sjättedel",
103
+ "⅚" => "fem sjättedelar",
104
+ "&#8538;" => "fem sjättedelar",
105
+ "⅛" => "en åttondel",
106
+ "&#8539;" => "en åttondel",
107
+ "⅜" => "tre åttondelar",
108
+ "&#8540;" => "tre åttondelar",
109
+ "⅝" => "fem åttondelar",
110
+ "&#8541;" => "fem åttondelar",
111
+ "⅞" => "sju åttondelar",
112
+ "&#8542;" => "sju åttondelar"
113
+ }.each do |original, converted|
114
+ define_method "test_vulgar_fractions_conversion: #{original}" do
115
+ assert_equal converted, original.convert_vulgar_fractions
116
+ end
117
+ end
118
+ end
@@ -11,7 +11,7 @@ class LocalizationTest < Test::Unit::TestCase
11
11
  def test_stores_translations
12
12
  Stringex::Localization.backend = :internal
13
13
 
14
- data = { :one => "number one", :two => "number two" }
14
+ data = { one: "number one", two: "number two" }
15
15
  Stringex::Localization.store_translations :en, :test_store, data
16
16
 
17
17
  data.each do |key, value|
@@ -34,7 +34,7 @@ class LocalizationTest < Test::Unit::TestCase
34
34
  def test_can_translate
35
35
  Stringex::Localization.backend = :internal
36
36
 
37
- data = { :one => "number one", :two => "number two" }
37
+ data = { one: "number one", two: "number two" }
38
38
  Stringex::Localization.store_translations :en, :test_translate, data
39
39
 
40
40
  data.each do |key, value|
@@ -45,7 +45,7 @@ class LocalizationTest < Test::Unit::TestCase
45
45
  def test_can_translate_when_given_string_as_key
46
46
  Stringex::Localization.backend = :internal
47
47
 
48
- data = { :one => "number one", :two => "number two" }
48
+ data = { one: "number one", two: "number two" }
49
49
  Stringex::Localization.store_translations :en, :test_translate, data
50
50
 
51
51
  data.each do |key, value|
@@ -55,7 +55,7 @@ class LocalizationTest < Test::Unit::TestCase
55
55
 
56
56
  def test_returns_default_if_none_found
57
57
  Stringex::Localization.backend = :internal
58
- assert_equal "my default", Stringex::Localization.translate(:test_default, :nonexistent, :default => "my default")
58
+ assert_equal "my default", Stringex::Localization.translate(:test_default, :nonexistent, default: "my default")
59
59
  end
60
60
 
61
61
  def test_returns_nil_if_no_default
@@ -91,7 +91,7 @@ class LocalizationTest < Test::Unit::TestCase
91
91
  def test_stores_translations_in_i18n
92
92
  Stringex::Localization.backend = :i18n
93
93
 
94
- data = { :one => "number one", :two => "number two" }
94
+ data = { one: "number one", two: "number two" }
95
95
  Stringex::Localization.store_translations :en, :test_i18n_store, data
96
96
 
97
97
  data.each do |key, value|
@@ -102,9 +102,9 @@ class LocalizationTest < Test::Unit::TestCase
102
102
  def test_can_translate_using_i18n
103
103
  Stringex::Localization.backend = :i18n
104
104
 
105
- data = { :one => "number one", :two => "number two" }
105
+ data = { one: "number one", two: "number two" }
106
106
 
107
- I18n.backend.store_translations :en, { :stringex => { :test_i18n_translation => data } }
107
+ I18n.backend.store_translations :en, { stringex: { test_i18n_translation: data } }
108
108
 
109
109
  data.each do |key, value|
110
110
  assert_equal value, Stringex::Localization.translate(:test_i18n_translation, key)
@@ -117,26 +117,46 @@ class LocalizationTest < Test::Unit::TestCase
117
117
 
118
118
  assert_equal "Test blank", "Test&nbsp;blank".convert_miscellaneous_html_entities
119
119
 
120
- Stringex::Localization.store_translations :en, :html_entities, { :nbsp => "" }
120
+ Stringex::Localization.store_translations :en, :html_entities, { nbsp: "" }
121
121
  assert_equal "Testblank", "Test&nbsp;blank".convert_miscellaneous_html_entities
122
122
  end
123
123
  end
124
124
 
125
125
  def test_assigns_locale_in_i18n_backend
126
- I18n.locale = :en
127
- Stringex::Localization.backend = :i18n
126
+ if other_locale = I18n.available_locales.find{|locale| ![:en, :de].include?(locale)}
127
+ I18n.locale = :en
128
+ Stringex::Localization.backend = :i18n
129
+
130
+ assert_equal :en, Stringex::Localization.locale
128
131
 
129
- assert_equal :en, Stringex::Localization.locale
132
+ I18n.locale = other_locale
133
+ assert_equal other_locale, Stringex::Localization.locale
130
134
 
131
- I18n.locale = :jp
132
- assert_equal :jp, Stringex::Localization.locale
135
+ Stringex::Localization.locale = :de
136
+ assert_equal :de, Stringex::Localization.locale
137
+ assert_equal other_locale, I18n.locale
133
138
 
134
- Stringex::Localization.locale = :de
135
- assert_equal :de, Stringex::Localization.locale
136
- assert_equal :jp, I18n.locale
139
+ Stringex::Localization.locale = nil
140
+ assert_equal other_locale, Stringex::Localization.locale
141
+ assert_equal other_locale, I18n.locale
142
+ else
143
+ flunk "No I18n locales are available except :de and :en so test will not work"
144
+ end
145
+ end
137
146
 
138
- Stringex::Localization.locale = nil
139
- assert_equal :jp, Stringex::Localization.locale
140
- assert_equal :jp, I18n.locale
147
+ def test_enforce_available_locales_default
148
+ return unless I18n.respond_to?(:enforce_available_locales)
149
+ Stringex::Localization.backend = :i18n
150
+ assert_not_nil I18n.enforce_available_locales
151
+ 'Some String'.to_url
152
+ assert_not_nil I18n.enforce_available_locales
153
+ end
154
+
155
+ def test_respects_user_enforce_available_locales_setting
156
+ return unless I18n.respond_to?(:enforce_available_locales)
157
+ Stringex::Localization.backend = :i18n
158
+ I18n.enforce_available_locales = false
159
+ 'Some String'.to_url
160
+ assert_equal false, I18n.enforce_available_locales
141
161
  end
142
162
  end