twitter_cldr 1.9.1 → 2.0.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.
Files changed (403) hide show
  1. data/Gemfile +7 -0
  2. data/History.txt +11 -0
  3. data/README.md +93 -13
  4. data/Rakefile +27 -6
  5. data/lib/twitter_cldr/formatters.rb +15 -12
  6. data/lib/twitter_cldr/formatters/base.rb +1 -1
  7. data/lib/twitter_cldr/formatters/calendars/datetime_formatter.rb +18 -3
  8. data/lib/twitter_cldr/formatters/calendars/timespan_formatter.rb +24 -26
  9. data/lib/twitter_cldr/formatters/numbers/abbreviated/abbreviated_number_formatter.rb +47 -0
  10. data/lib/twitter_cldr/formatters/numbers/abbreviated/long_decimal_formatter.rb +18 -0
  11. data/lib/twitter_cldr/formatters/numbers/abbreviated/short_decimal_formatter.rb +18 -0
  12. data/lib/twitter_cldr/formatters/numbers/currency_formatter.rb +22 -17
  13. data/lib/twitter_cldr/formatters/numbers/decimal_formatter.rb +0 -9
  14. data/lib/twitter_cldr/formatters/numbers/helpers/base.rb +1 -1
  15. data/lib/twitter_cldr/formatters/numbers/number_formatter.rb +25 -10
  16. data/lib/twitter_cldr/formatters/numbers/percent_formatter.rb +9 -6
  17. data/lib/twitter_cldr/localized/localized_datetime.rb +6 -2
  18. data/lib/twitter_cldr/localized/localized_number.rb +9 -3
  19. data/lib/twitter_cldr/localized/localized_timespan.rb +1 -1
  20. data/lib/twitter_cldr/resources.rb +13 -12
  21. data/lib/twitter_cldr/resources/custom_locales_resources_importer.rb +1 -1
  22. data/lib/twitter_cldr/resources/download.rb +1 -1
  23. data/lib/twitter_cldr/resources/locales_resources_importer.rb +10 -6
  24. data/lib/twitter_cldr/shared/bidi.rb +27 -27
  25. data/lib/twitter_cldr/shared/currencies.rb +20 -13
  26. data/lib/twitter_cldr/tokenizers.rb +10 -9
  27. data/lib/twitter_cldr/tokenizers/base.rb +33 -21
  28. data/lib/twitter_cldr/tokenizers/calendars/additional_date_format_selector.rb +86 -0
  29. data/lib/twitter_cldr/tokenizers/calendars/date_tokenizer.rb +20 -11
  30. data/lib/twitter_cldr/tokenizers/calendars/datetime_tokenizer.rb +50 -13
  31. data/lib/twitter_cldr/tokenizers/calendars/time_tokenizer.rb +19 -10
  32. data/lib/twitter_cldr/tokenizers/calendars/timespan_tokenizer.rb +32 -32
  33. data/lib/twitter_cldr/tokenizers/numbers/number_tokenizer.rb +45 -22
  34. data/lib/twitter_cldr/utils.rb +16 -1
  35. data/lib/twitter_cldr/version.rb +1 -1
  36. data/resources/collation/tailoring/af.yml +1 -0
  37. data/resources/collation/tailoring/ar.yml +3 -2
  38. data/resources/collation/tailoring/be.yml +7 -0
  39. data/resources/collation/tailoring/bg.yml +5 -0
  40. data/resources/collation/tailoring/bn.yml +9 -0
  41. data/resources/collation/tailoring/ca.yml +3 -2
  42. data/resources/collation/tailoring/cs.yml +3 -2
  43. data/resources/collation/tailoring/cy.yml +51 -0
  44. data/resources/collation/tailoring/da.yml +3 -2
  45. data/resources/collation/tailoring/de.yml +1 -0
  46. data/resources/collation/tailoring/el.yml +1 -0
  47. data/resources/collation/tailoring/en.yml +1 -0
  48. data/resources/collation/tailoring/es.yml +3 -2
  49. data/resources/collation/tailoring/eu.yml +1 -0
  50. data/resources/collation/tailoring/fa.yml +3 -2
  51. data/resources/collation/tailoring/fi.yml +3 -2
  52. data/resources/collation/tailoring/fil.yml +3 -2
  53. data/resources/collation/tailoring/fr.yml +1 -0
  54. data/resources/collation/tailoring/ga.yml +5 -0
  55. data/resources/collation/tailoring/gl.yml +5 -0
  56. data/resources/collation/tailoring/he.yml +1 -0
  57. data/resources/collation/tailoring/hi.yml +3 -2
  58. data/resources/collation/tailoring/hu.yml +3 -2
  59. data/resources/collation/tailoring/id.yml +1 -0
  60. data/resources/collation/tailoring/it.yml +1 -0
  61. data/resources/collation/tailoring/ja.yml +107 -54
  62. data/resources/collation/tailoring/ko.yml +3 -2
  63. data/resources/collation/tailoring/lv.yml +35 -0
  64. data/resources/collation/tailoring/ms.yml +1 -0
  65. data/resources/collation/tailoring/nb.yml +3 -2
  66. data/resources/collation/tailoring/nl.yml +1 -0
  67. data/resources/collation/tailoring/pl.yml +3 -2
  68. data/resources/collation/tailoring/pt.yml +1 -0
  69. data/resources/collation/tailoring/ro.yml +31 -0
  70. data/resources/collation/tailoring/ru.yml +1 -0
  71. data/resources/collation/tailoring/sk.yml +35 -0
  72. data/resources/collation/tailoring/sq.yml +65 -0
  73. data/resources/collation/tailoring/sr.yml +5 -0
  74. data/resources/collation/tailoring/sv.yml +3 -2
  75. data/resources/collation/tailoring/ta.yml +57 -0
  76. data/resources/collation/tailoring/th.yml +3 -2
  77. data/resources/collation/tailoring/tr.yml +3 -2
  78. data/resources/collation/tailoring/uk.yml +3 -2
  79. data/resources/collation/tailoring/ur.yml +3 -2
  80. data/resources/collation/tailoring/zh-Hant.yml +3 -2
  81. data/resources/collation/tailoring/zh.yml +3 -2
  82. data/resources/collation/tries/be.dump +0 -0
  83. data/resources/collation/tries/bg.dump +0 -0
  84. data/resources/collation/tries/bn.dump +0 -0
  85. data/resources/collation/tries/cy.dump +0 -0
  86. data/resources/collation/tries/ga.dump +0 -0
  87. data/resources/collation/tries/gl.dump +0 -0
  88. data/resources/collation/tries/lv.dump +0 -0
  89. data/resources/collation/tries/ro.dump +0 -0
  90. data/resources/collation/tries/sk.dump +0 -0
  91. data/resources/collation/tries/sq.dump +0 -0
  92. data/resources/collation/tries/sr.dump +0 -0
  93. data/resources/collation/tries/ta.dump +0 -0
  94. data/resources/custom/locales/ar/units.yml +6 -6
  95. data/resources/custom/locales/be/units.yml +27 -0
  96. data/resources/custom/locales/bg/units.yml +19 -0
  97. data/resources/custom/locales/bn/units.yml +7 -0
  98. data/resources/custom/locales/cs/units.yml +3 -3
  99. data/resources/custom/locales/cy/units.yml +35 -0
  100. data/resources/custom/locales/fil/units.yml +2 -2
  101. data/resources/custom/locales/ga/units.yml +24 -0
  102. data/resources/custom/locales/gl/units.yml +19 -0
  103. data/resources/custom/locales/hu/plurals.yml +3 -0
  104. data/resources/custom/locales/hu/units.yml +4 -0
  105. data/resources/custom/locales/lv/units.yml +23 -0
  106. data/resources/custom/locales/ms/units.yml +1 -1
  107. data/resources/custom/locales/ro/units.yml +23 -0
  108. data/resources/custom/locales/sk/units.yml +23 -0
  109. data/resources/custom/locales/sr/units.yml +27 -0
  110. data/resources/custom/locales/ta/units.yml +11 -0
  111. data/resources/custom/locales/th/calendars.yml +14 -0
  112. data/resources/locales/af/calendars.yml +56 -0
  113. data/resources/locales/af/currencies.yml +358 -0
  114. data/resources/locales/af/languages.yml +23 -3
  115. data/resources/locales/af/numbers.yml +22 -8
  116. data/resources/locales/af/units.yml +26 -54
  117. data/resources/locales/ar/calendars.yml +99 -6
  118. data/resources/locales/ar/currencies.yml +1491 -0
  119. data/resources/locales/ar/languages.yml +33 -6
  120. data/resources/locales/ar/numbers.yml +27 -14
  121. data/resources/locales/ar/units.yml +31 -31
  122. data/resources/locales/be/calendars.yml +229 -0
  123. data/resources/locales/be/currencies.yml +66 -0
  124. data/resources/locales/be/languages.yml +149 -0
  125. data/resources/locales/be/layout.yml +4 -0
  126. data/resources/locales/be/lists.yml +7 -0
  127. data/resources/locales/be/numbers.yml +43 -0
  128. data/resources/locales/be/plurals.yml +5 -0
  129. data/resources/locales/be/units.yml +87 -0
  130. data/resources/locales/bg/calendars.yml +220 -0
  131. data/resources/locales/bg/currencies.yml +773 -0
  132. data/resources/locales/bg/languages.yml +513 -0
  133. data/resources/locales/bg/layout.yml +4 -0
  134. data/resources/locales/bg/lists.yml +7 -0
  135. data/resources/locales/bg/numbers.yml +57 -0
  136. data/resources/locales/bg/plurals.yml +3 -0
  137. data/resources/locales/bg/units.yml +108 -0
  138. data/resources/locales/bn/calendars.yml +205 -0
  139. data/resources/locales/bn/currencies.yml +564 -0
  140. data/resources/locales/bn/languages.yml +513 -0
  141. data/resources/locales/bn/layout.yml +4 -0
  142. data/resources/locales/bn/lists.yml +7 -0
  143. data/resources/locales/bn/numbers.yml +57 -0
  144. data/resources/locales/bn/plurals.yml +3 -0
  145. data/resources/locales/bn/units.yml +108 -0
  146. data/resources/locales/ca/calendars.yml +70 -21
  147. data/resources/locales/ca/currencies.yml +904 -0
  148. data/resources/locales/ca/languages.yml +70 -5
  149. data/resources/locales/ca/numbers.yml +19 -6
  150. data/resources/locales/ca/units.yml +0 -28
  151. data/resources/locales/cs/calendars.yml +73 -27
  152. data/resources/locales/cs/currencies.yml +1063 -0
  153. data/resources/locales/cs/languages.yml +113 -31
  154. data/resources/locales/cs/numbers.yml +17 -4
  155. data/resources/locales/cs/units.yml +0 -28
  156. data/resources/locales/cy/calendars.yml +266 -0
  157. data/resources/locales/cy/currencies.yml +54 -0
  158. data/resources/locales/cy/languages.yml +92 -0
  159. data/resources/locales/cy/layout.yml +4 -0
  160. data/resources/locales/cy/lists.yml +7 -0
  161. data/resources/locales/cy/numbers.yml +49 -0
  162. data/resources/locales/cy/plurals.yml +4 -0
  163. data/resources/locales/cy/units.yml +73 -0
  164. data/resources/locales/da/calendars.yml +117 -16
  165. data/resources/locales/da/currencies.yml +814 -0
  166. data/resources/locales/da/languages.yml +66 -5
  167. data/resources/locales/da/numbers.yml +16 -3
  168. data/resources/locales/da/units.yml +21 -35
  169. data/resources/locales/de/calendars.yml +115 -17
  170. data/resources/locales/de/currencies.yml +843 -0
  171. data/resources/locales/de/languages.yml +5 -3
  172. data/resources/locales/de/numbers.yml +18 -5
  173. data/resources/locales/de/units.yml +0 -28
  174. data/resources/locales/el/calendars.yml +61 -8
  175. data/resources/locales/el/currencies.yml +866 -0
  176. data/resources/locales/el/languages.yml +61 -5
  177. data/resources/locales/el/numbers.yml +18 -5
  178. data/resources/locales/el/units.yml +7 -42
  179. data/resources/locales/en/calendars.yml +43 -4
  180. data/resources/locales/en/currencies.yml +912 -0
  181. data/resources/locales/en/languages.yml +26 -6
  182. data/resources/locales/en/numbers.yml +17 -4
  183. data/resources/locales/es/calendars.yml +60 -0
  184. data/resources/locales/es/currencies.yml +820 -0
  185. data/resources/locales/es/languages.yml +66 -1
  186. data/resources/locales/es/numbers.yml +20 -7
  187. data/resources/locales/es/units.yml +0 -28
  188. data/resources/locales/eu/calendars.yml +43 -2
  189. data/resources/locales/eu/currencies.yml +378 -0
  190. data/resources/locales/eu/languages.yml +29 -13
  191. data/resources/locales/eu/numbers.yml +17 -4
  192. data/resources/locales/eu/units.yml +22 -43
  193. data/resources/locales/fa/calendars.yml +57 -0
  194. data/resources/locales/fa/currencies.yml +449 -0
  195. data/resources/locales/fa/languages.yml +8 -3
  196. data/resources/locales/fa/numbers.yml +20 -7
  197. data/resources/locales/fa/units.yml +0 -42
  198. data/resources/locales/fi/calendars.yml +49 -1
  199. data/resources/locales/fi/currencies.yml +903 -0
  200. data/resources/locales/fi/languages.yml +58 -2
  201. data/resources/locales/fi/numbers.yml +25 -12
  202. data/resources/locales/fi/units.yml +0 -28
  203. data/resources/locales/fil/calendars.yml +51 -0
  204. data/resources/locales/fil/currencies.yml +357 -0
  205. data/resources/locales/fil/languages.yml +25 -8
  206. data/resources/locales/fil/numbers.yml +18 -5
  207. data/resources/locales/fil/units.yml +14 -28
  208. data/resources/locales/fr/calendars.yml +114 -12
  209. data/resources/locales/fr/currencies.yml +884 -0
  210. data/resources/locales/fr/languages.yml +43 -9
  211. data/resources/locales/fr/numbers.yml +22 -9
  212. data/resources/locales/fr/units.yml +2 -30
  213. data/resources/locales/ga/calendars.yml +187 -0
  214. data/resources/locales/ga/currencies.yml +513 -0
  215. data/resources/locales/ga/languages.yml +147 -0
  216. data/resources/locales/ga/layout.yml +4 -0
  217. data/resources/locales/ga/lists.yml +7 -0
  218. data/resources/locales/ga/numbers.yml +43 -0
  219. data/resources/locales/ga/plurals.yml +4 -0
  220. data/resources/locales/ga/units.yml +66 -0
  221. data/resources/locales/gl/calendars.yml +216 -0
  222. data/resources/locales/gl/currencies.yml +476 -0
  223. data/resources/locales/gl/languages.yml +213 -0
  224. data/resources/locales/gl/layout.yml +4 -0
  225. data/resources/locales/gl/lists.yml +7 -0
  226. data/resources/locales/gl/numbers.yml +57 -0
  227. data/resources/locales/gl/plurals.yml +3 -0
  228. data/resources/locales/gl/units.yml +108 -0
  229. data/resources/locales/he/calendars.yml +70 -18
  230. data/resources/locales/he/currencies.yml +497 -0
  231. data/resources/locales/he/languages.yml +301 -7
  232. data/resources/locales/he/lists.yml +2 -2
  233. data/resources/locales/he/numbers.yml +23 -8
  234. data/resources/locales/he/plurals.yml +3 -2
  235. data/resources/locales/he/units.yml +72 -30
  236. data/resources/locales/hi/calendars.yml +54 -1
  237. data/resources/locales/hi/currencies.yml +388 -0
  238. data/resources/locales/hi/languages.yml +2 -0
  239. data/resources/locales/hi/numbers.yml +21 -8
  240. data/resources/locales/hi/units.yml +15 -29
  241. data/resources/locales/hu/calendars.yml +52 -5
  242. data/resources/locales/hu/currencies.yml +640 -0
  243. data/resources/locales/hu/languages.yml +60 -4
  244. data/resources/locales/hu/numbers.yml +25 -12
  245. data/resources/locales/hu/units.yml +1 -29
  246. data/resources/locales/id/calendars.yml +125 -21
  247. data/resources/locales/id/currencies.yml +603 -0
  248. data/resources/locales/id/languages.yml +113 -51
  249. data/resources/locales/id/numbers.yml +16 -3
  250. data/resources/locales/id/units.yml +0 -28
  251. data/resources/locales/it/calendars.yml +59 -6
  252. data/resources/locales/it/currencies.yml +722 -0
  253. data/resources/locales/it/languages.yml +77 -5
  254. data/resources/locales/it/numbers.yml +22 -9
  255. data/resources/locales/it/units.yml +0 -14
  256. data/resources/locales/ja/calendars.yml +55 -5
  257. data/resources/locales/ja/currencies.yml +602 -0
  258. data/resources/locales/ja/languages.yml +103 -43
  259. data/resources/locales/ja/numbers.yml +18 -5
  260. data/resources/locales/ja/units.yml +6 -34
  261. data/resources/locales/ko/calendars.yml +50 -0
  262. data/resources/locales/ko/currencies.yml +596 -0
  263. data/resources/locales/ko/languages.yml +75 -8
  264. data/resources/locales/ko/numbers.yml +17 -4
  265. data/resources/locales/ko/units.yml +0 -28
  266. data/resources/locales/lv/calendars.yml +275 -0
  267. data/resources/locales/lv/currencies.yml +765 -0
  268. data/resources/locales/lv/languages.yml +576 -0
  269. data/resources/locales/lv/layout.yml +4 -0
  270. data/resources/locales/lv/lists.yml +7 -0
  271. data/resources/locales/lv/numbers.yml +58 -0
  272. data/resources/locales/lv/plurals.yml +4 -0
  273. data/resources/locales/lv/units.yml +136 -0
  274. data/resources/locales/ms/calendars.yml +86 -4
  275. data/resources/locales/ms/currencies.yml +341 -0
  276. data/resources/locales/ms/languages.yml +25 -3
  277. data/resources/locales/ms/numbers.yml +19 -6
  278. data/resources/locales/ms/units.yml +0 -56
  279. data/resources/locales/nb/calendars.yml +48 -1
  280. data/resources/locales/nb/currencies.yml +846 -0
  281. data/resources/locales/nb/languages.yml +44 -2
  282. data/resources/locales/nb/numbers.yml +16 -3
  283. data/resources/locales/nb/units.yml +6 -28
  284. data/resources/locales/nl/calendars.yml +110 -9
  285. data/resources/locales/nl/currencies.yml +640 -0
  286. data/resources/locales/nl/languages.yml +68 -8
  287. data/resources/locales/nl/numbers.yml +25 -12
  288. data/resources/locales/nl/units.yml +14 -28
  289. data/resources/locales/pl/calendars.yml +53 -6
  290. data/resources/locales/pl/currencies.yml +1100 -0
  291. data/resources/locales/pl/languages.yml +13 -6
  292. data/resources/locales/pl/lists.yml +2 -2
  293. data/resources/locales/pl/numbers.yml +18 -5
  294. data/resources/locales/pl/units.yml +51 -92
  295. data/resources/locales/pt/calendars.yml +121 -9
  296. data/resources/locales/pt/currencies.yml +904 -0
  297. data/resources/locales/pt/languages.yml +5 -3
  298. data/resources/locales/pt/numbers.yml +17 -4
  299. data/resources/locales/pt/units.yml +0 -28
  300. data/resources/locales/ro/calendars.yml +278 -0
  301. data/resources/locales/ro/currencies.yml +946 -0
  302. data/resources/locales/ro/languages.yml +576 -0
  303. data/resources/locales/ro/layout.yml +4 -0
  304. data/resources/locales/ro/lists.yml +7 -0
  305. data/resources/locales/ro/numbers.yml +58 -0
  306. data/resources/locales/ro/plurals.yml +3 -0
  307. data/resources/locales/ro/units.yml +136 -0
  308. data/resources/locales/ru/calendars.yml +72 -12
  309. data/resources/locales/ru/currencies.yml +1061 -0
  310. data/resources/locales/ru/languages.yml +51 -6
  311. data/resources/locales/ru/numbers.yml +21 -5
  312. data/resources/locales/ru/units.yml +0 -28
  313. data/resources/locales/sk/calendars.yml +275 -0
  314. data/resources/locales/sk/currencies.yml +713 -0
  315. data/resources/locales/sk/languages.yml +576 -0
  316. data/resources/locales/sk/layout.yml +4 -0
  317. data/resources/locales/sk/lists.yml +7 -0
  318. data/resources/locales/sk/numbers.yml +58 -0
  319. data/resources/locales/sk/plurals.yml +3 -0
  320. data/resources/locales/sk/units.yml +136 -0
  321. data/resources/locales/sq/calendars.yml +188 -0
  322. data/resources/locales/sq/currencies.yml +56 -0
  323. data/resources/locales/sq/languages.yml +17 -0
  324. data/resources/locales/sq/layout.yml +4 -0
  325. data/resources/locales/sq/lists.yml +7 -0
  326. data/resources/locales/sq/numbers.yml +43 -0
  327. data/resources/locales/sq/plurals.yml +3 -0
  328. data/resources/locales/sq/units.yml +73 -0
  329. data/resources/locales/sr/calendars.yml +285 -0
  330. data/resources/locales/sr/currencies.yml +1494 -0
  331. data/resources/locales/sr/languages.yml +513 -0
  332. data/resources/locales/sr/layout.yml +4 -0
  333. data/resources/locales/sr/lists.yml +7 -0
  334. data/resources/locales/sr/numbers.yml +59 -0
  335. data/resources/locales/sr/plurals.yml +5 -0
  336. data/resources/locales/sr/units.yml +164 -0
  337. data/resources/locales/sv/calendars.yml +59 -1
  338. data/resources/locales/sv/currencies.yml +919 -0
  339. data/resources/locales/sv/languages.yml +47 -2
  340. data/resources/locales/sv/numbers.yml +27 -12
  341. data/resources/locales/sv/units.yml +4 -32
  342. data/resources/locales/ta/calendars.yml +264 -0
  343. data/resources/locales/ta/currencies.yml +346 -0
  344. data/resources/locales/ta/languages.yml +512 -0
  345. data/resources/locales/ta/layout.yml +4 -0
  346. data/resources/locales/ta/lists.yml +7 -0
  347. data/resources/locales/ta/numbers.yml +57 -0
  348. data/resources/locales/ta/plurals.yml +3 -0
  349. data/resources/locales/ta/units.yml +108 -0
  350. data/resources/locales/th/calendars.yml +125 -27
  351. data/resources/locales/th/currencies.yml +602 -0
  352. data/resources/locales/th/languages.yml +70 -5
  353. data/resources/locales/th/numbers.yml +24 -11
  354. data/resources/locales/th/units.yml +0 -28
  355. data/resources/locales/tr/calendars.yml +62 -12
  356. data/resources/locales/tr/currencies.yml +571 -0
  357. data/resources/locales/tr/languages.yml +94 -29
  358. data/resources/locales/tr/numbers.yml +19 -6
  359. data/resources/locales/tr/units.yml +1 -29
  360. data/resources/locales/uk/calendars.yml +52 -0
  361. data/resources/locales/uk/currencies.yml +799 -0
  362. data/resources/locales/uk/languages.yml +57 -2
  363. data/resources/locales/uk/numbers.yml +18 -5
  364. data/resources/locales/uk/units.yml +0 -28
  365. data/resources/locales/ur/calendars.yml +96 -32
  366. data/resources/locales/ur/currencies.yml +360 -0
  367. data/resources/locales/ur/languages.yml +49 -32
  368. data/resources/locales/ur/numbers.yml +13 -13
  369. data/resources/locales/ur/units.yml +28 -56
  370. data/resources/locales/zh-Hant/calendars.yml +59 -1
  371. data/resources/locales/zh-Hant/currencies.yml +602 -0
  372. data/resources/locales/zh-Hant/languages.yml +74 -8
  373. data/resources/locales/zh-Hant/numbers.yml +17 -4
  374. data/resources/locales/zh-Hant/units.yml +0 -28
  375. data/resources/locales/zh/calendars.yml +95 -35
  376. data/resources/locales/zh/currencies.yml +602 -0
  377. data/resources/locales/zh/languages.yml +116 -46
  378. data/resources/locales/zh/numbers.yml +20 -7
  379. data/resources/locales/zh/units.yml +6 -34
  380. data/resources/shared/currency_digits_and_rounding.yml +187 -0
  381. data/spec/bidi/bidi_spec.rb +1 -1
  382. data/spec/collation/tailoring_spec.rb +29 -25
  383. data/spec/formatters/calendars/datetime_formatter_spec.rb +50 -2
  384. data/spec/formatters/calendars/timespan_formatter_spec.rb +52 -8
  385. data/spec/formatters/numbers/abbreviated/abbreviated_number_formatter_spec.rb +81 -0
  386. data/spec/formatters/numbers/abbreviated/long_decimal_formatter_spec.rb +37 -0
  387. data/spec/formatters/numbers/abbreviated/short_decimal_formatter_spec.rb +37 -0
  388. data/spec/formatters/numbers/currency_formatter_spec.rb +10 -1
  389. data/spec/localized/localized_date_spec.rb +11 -11
  390. data/spec/localized/localized_datetime_spec.rb +27 -3
  391. data/spec/localized/localized_number_spec.rb +34 -6
  392. data/spec/localized/localized_time_spec.rb +1 -1
  393. data/spec/readme_spec.rb +24 -3
  394. data/spec/shared/currencies_spec.rb +7 -9
  395. data/spec/spec_helper.rb +7 -0
  396. data/spec/tokenizers/base_spec.rb +71 -21
  397. data/spec/tokenizers/calendars/additional_date_format_selector_spec.rb +131 -0
  398. data/spec/tokenizers/calendars/datetime_tokenizer_spec.rb +54 -27
  399. data/spec/tokenizers/calendars/time_tokenizer_spec.rb +16 -16
  400. data/spec/tokenizers/numbers/number_tokenizer_spec.rb +9 -21
  401. data/spec/utils/yaml/yaml_spec.rb +21 -16
  402. data/spec/utils_spec.rb +6 -2
  403. metadata +218 -37
@@ -12,15 +12,59 @@ describe TimespanFormatter do
12
12
  describe "#format" do
13
13
  let(:formatter) { TimespanFormatter.new(:locale => :de) }
14
14
 
15
+ it "approximates timespans accurately if explicity asked to" do
16
+ options = { :direction => :none, :approximate => true }
17
+ formatter.format(44, options).should match_normalized("44 Sekunden")
18
+ formatter.format(45, options).should match_normalized("1 Minute")
19
+
20
+ formatter.format(2699, options).should match_normalized("45 Minuten")
21
+ formatter.format(2700, options).should match_normalized("1 Stunde")
22
+
23
+ formatter.format(64799, options).should match_normalized("18 Stunden")
24
+ formatter.format(64800, options).should match_normalized("1 Tag")
25
+
26
+ formatter.format(453599, options).should match_normalized("5 Tage")
27
+ formatter.format(453600, options).should match_normalized("1 Woche")
28
+
29
+ formatter.format(1972307, options).should match_normalized("3 Wochen")
30
+ formatter.format(1972308, options).should match_normalized("1 Monat")
31
+
32
+ formatter.format(23667694, options).should match_normalized("9 Monate")
33
+ formatter.format(23667695, options).should match_normalized("1 Jahr")
34
+ end
35
+
36
+ it "doesn't approximate timespans by default" do
37
+ options = { :direction => :none }
38
+ formatter.format(44, options).should match_normalized("44 Sekunden")
39
+ formatter.format(45, options).should match_normalized("45 Sekunden")
40
+
41
+ formatter.format(2699, options).should match_normalized("45 Minuten")
42
+ formatter.format(2700, options).should match_normalized("45 Minuten")
43
+
44
+ formatter.format(64799, options).should match_normalized("18 Stunden")
45
+ formatter.format(64800, options).should match_normalized("18 Stunden")
46
+
47
+ formatter.format(453599, options).should match_normalized("5 Tage")
48
+ formatter.format(453600, options).should match_normalized("5 Tage")
49
+
50
+ formatter.format(1972307, options).should match_normalized("3 Wochen")
51
+ formatter.format(1972308, options).should match_normalized("3 Wochen")
52
+
53
+ formatter.format(23667694, options).should match_normalized("9 Monate")
54
+ formatter.format(23667695, options).should match_normalized("9 Monate")
55
+
56
+ formatter.format(31556926, options).should match_normalized("1 Jahr")
57
+ end
58
+
15
59
  context "default type" do
16
60
  describe "non-directional" do
17
61
  it "works for a variety of units" do
18
62
  formatter.format(3273932, :unit => :year, :direction => :none).should match_normalized('0 Jahre')
19
63
  formatter.format(3273932, :unit => :month, :direction => :none).should match_normalized('1 Monat')
20
64
  formatter.format(3273932, :unit => :week, :direction => :none).should match_normalized('5 Wochen')
21
- formatter.format(3273932, :unit => :day, :direction => :none).should match_normalized('37 Tage')
65
+ formatter.format(3273932, :unit => :day, :direction => :none).should match_normalized('38 Tage')
22
66
  formatter.format(3273932, :unit => :hour, :direction => :none).should match_normalized('909 Stunden')
23
- formatter.format(3273932, :unit => :minute, :direction => :none).should match_normalized('54565 Minuten')
67
+ formatter.format(3273932, :unit => :minute, :direction => :none).should match_normalized('54566 Minuten')
24
68
  formatter.format(3273932, :unit => :second, :direction => :none).should match_normalized('3273932 Sekunden')
25
69
  end
26
70
  end
@@ -30,9 +74,9 @@ describe TimespanFormatter do
30
74
  formatter.format(-3273932, :unit => :year).should match_normalized('Vor 0 Jahren')
31
75
  formatter.format(-3273932, :unit => :month).should match_normalized('Vor 1 Monat')
32
76
  formatter.format(-3273932, :unit => :week).should match_normalized('Vor 5 Wochen')
33
- formatter.format(-3273932, :unit => :day).should match_normalized('Vor 37 Tagen')
77
+ formatter.format(-3273932, :unit => :day).should match_normalized('Vor 38 Tagen')
34
78
  formatter.format(-3273932, :unit => :hour).should match_normalized('Vor 909 Stunden')
35
- formatter.format(-3273932, :unit => :minute).should match_normalized('Vor 54565 Minuten')
79
+ formatter.format(-3273932, :unit => :minute).should match_normalized('Vor 54566 Minuten')
36
80
  formatter.format(-3273932, :unit => :second).should match_normalized('Vor 3273932 Sekunden')
37
81
  end
38
82
  end
@@ -42,9 +86,9 @@ describe TimespanFormatter do
42
86
  formatter.format(3273932, :unit => :year).should match_normalized('In 0 Jahren')
43
87
  formatter.format(3273932, :unit => :month).should match_normalized('In 1 Monat')
44
88
  formatter.format(3273932, :unit => :week).should match_normalized('In 5 Wochen')
45
- formatter.format(3273932, :unit => :day).should match_normalized('In 37 Tagen')
89
+ formatter.format(3273932, :unit => :day).should match_normalized('In 38 Tagen')
46
90
  formatter.format(3273932, :unit => :hour).should match_normalized('In 909 Stunden')
47
- formatter.format(3273932, :unit => :minute).should match_normalized('In 54565 Minuten')
91
+ formatter.format(3273932, :unit => :minute).should match_normalized('In 54566 Minuten')
48
92
  formatter.format(3273932, :unit => :second).should match_normalized('In 3273932 Sekunden')
49
93
  end
50
94
  end
@@ -57,9 +101,9 @@ describe TimespanFormatter do
57
101
  describe "non-directional" do
58
102
  it "works for a variety of units" do
59
103
  # year/month/week not supported
60
- formatter.format(3273932, options.merge(:unit => :day, :direction => :none)).should match_normalized('37d')
104
+ formatter.format(3273932, options.merge(:unit => :day, :direction => :none)).should match_normalized('38d')
61
105
  formatter.format(3273932, options.merge(:unit => :hour, :direction => :none)).should match_normalized('909h')
62
- formatter.format(3273932, options.merge(:unit => :minute, :direction => :none)).should match_normalized('54565m')
106
+ formatter.format(3273932, options.merge(:unit => :minute, :direction => :none)).should match_normalized('54566m')
63
107
  formatter.format(3273932, options.merge(:unit => :second, :direction => :none)).should match_normalized('3273932s')
64
108
  end
65
109
  end
@@ -0,0 +1,81 @@
1
+ # encoding: UTF-8
2
+
3
+ # Copyright 2012 Twitter, Inc
4
+ # http://www.apache.org/licenses/LICENSE-2.0
5
+
6
+ require 'spec_helper'
7
+
8
+ include TwitterCldr::Formatters
9
+
10
+ describe AbbreviatedNumberFormatter do
11
+ before(:each) do
12
+ @formatter = AbbreviatedNumberFormatter.new(:locale => :en)
13
+ end
14
+
15
+ describe "#transform_number" do
16
+ it "chops off the number to the necessary number of sig figs" do
17
+ @formatter.send(:transform_number, 10 ** 3).should == 1
18
+ @formatter.send(:transform_number, 10 ** 4).should == 10
19
+ @formatter.send(:transform_number, 10 ** 5).should == 100
20
+ @formatter.send(:transform_number, 10 ** 6).should == 1
21
+ @formatter.send(:transform_number, 10 ** 7).should == 10
22
+ @formatter.send(:transform_number, 10 ** 8).should == 100
23
+ @formatter.send(:transform_number, 10 ** 9).should == 1
24
+ @formatter.send(:transform_number, 10 ** 10).should == 10
25
+ @formatter.send(:transform_number, 10 ** 11).should == 100
26
+ @formatter.send(:transform_number, 10 ** 12).should == 1
27
+ @formatter.send(:transform_number, 10 ** 13).should == 10
28
+ @formatter.send(:transform_number, 10 ** 14).should == 100
29
+ end
30
+
31
+ it "returns the original number if greater than 10^15" do
32
+ @formatter.send(:transform_number, 10 ** 15).should == 10 ** 15
33
+ end
34
+
35
+ it "returns the original number if less than 10^3" do
36
+ @formatter.send(:transform_number, 999).should == 999
37
+ end
38
+ end
39
+
40
+ describe "#get_key" do
41
+ it "builds a power-of-ten key based on the number of digits in the input" do
42
+ (3..15).each { |i| @formatter.send(:get_key, "1337#{"0" * (i - 3)}").should == 10 ** i }
43
+ end
44
+ end
45
+
46
+ describe "#get_tokens" do
47
+ before(:each) do
48
+ stub(@formatter).get_type { :awesome_type }
49
+ end
50
+
51
+ it "gets tokens for a valid number (between 10^3 and 10^15)" do
52
+ mock(@formatter.tokenizer).tokens({
53
+ :sign => :positive,
54
+ :type => :awesome_type,
55
+ :format => 10 ** 4
56
+ }) { "I'm just right!" }
57
+
58
+ @formatter.get_tokens(12345).should == "I'm just right!"
59
+ end
60
+
61
+ it "returns tokens for decimals if the number is too large" do
62
+ mock(@formatter.tokenizer).tokens({
63
+ :sign => :positive,
64
+ :type => :decimal,
65
+ :format => nil
66
+ }) { "I'm too big!" }
67
+
68
+ @formatter.get_tokens(1234567891011122).should == "I'm too big!"
69
+ end
70
+
71
+ it "returns tokens for decimals if the number is too small" do
72
+ mock(@formatter.tokenizer).tokens({
73
+ :sign => :positive,
74
+ :type => :decimal,
75
+ :format => nil
76
+ }) { "I'm too small!" }
77
+
78
+ @formatter.get_tokens(123).should == "I'm too small!"
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,37 @@
1
+ # encoding: UTF-8
2
+
3
+ # Copyright 2012 Twitter, Inc
4
+ # http://www.apache.org/licenses/LICENSE-2.0
5
+
6
+ require 'spec_helper'
7
+
8
+ include TwitterCldr::Formatters
9
+
10
+ describe LongDecimalFormatter do
11
+ before(:each) do
12
+ @formatter = LongDecimalFormatter.new(:locale => :en)
13
+ end
14
+
15
+ it "formats valid numbers correctly (from 10^3 - 10^15)" do
16
+ @formatter.format(10 ** 3).should match_normalized("1 thousand")
17
+ @formatter.format(10 ** 4).should match_normalized("10 thousand")
18
+ @formatter.format(10 ** 5).should match_normalized("100 thousand")
19
+ @formatter.format(10 ** 6).should match_normalized("1 million")
20
+ @formatter.format(10 ** 7).should match_normalized("10 million")
21
+ @formatter.format(10 ** 8).should match_normalized("100 million")
22
+ @formatter.format(10 ** 9).should match_normalized("1 billion")
23
+ @formatter.format(10 ** 10).should match_normalized("10 billion")
24
+ @formatter.format(10 ** 11).should match_normalized("100 billion")
25
+ @formatter.format(10 ** 12).should match_normalized("1 trillion")
26
+ @formatter.format(10 ** 13).should match_normalized("10 trillion")
27
+ @formatter.format(10 ** 14).should match_normalized("100 trillion")
28
+ end
29
+
30
+ it "formats the number as if it were a straight decimal if it exceeds 10^15" do
31
+ @formatter.format(10**15).should == "1,000,000,000,000,000"
32
+ end
33
+
34
+ it "formats the number as if it were a straight decimal if it's less than 1000" do
35
+ @formatter.format(500).should == "500"
36
+ end
37
+ end
@@ -0,0 +1,37 @@
1
+ # encoding: UTF-8
2
+
3
+ # Copyright 2012 Twitter, Inc
4
+ # http://www.apache.org/licenses/LICENSE-2.0
5
+
6
+ require 'spec_helper'
7
+
8
+ include TwitterCldr::Formatters
9
+
10
+ describe ShortDecimalFormatter do
11
+ before(:each) do
12
+ @formatter = ShortDecimalFormatter.new(:locale => :en)
13
+ end
14
+
15
+ it "formats valid numbers correctly (from 10^3 - 10^15)" do
16
+ @formatter.format(10 ** 3).should match_normalized("1K")
17
+ @formatter.format(10 ** 4).should match_normalized("10K")
18
+ @formatter.format(10 ** 5).should match_normalized("100K")
19
+ @formatter.format(10 ** 6).should match_normalized("1M")
20
+ @formatter.format(10 ** 7).should match_normalized("10M")
21
+ @formatter.format(10 ** 8).should match_normalized("100M")
22
+ @formatter.format(10 ** 9).should match_normalized("1B")
23
+ @formatter.format(10 ** 10).should match_normalized("10B")
24
+ @formatter.format(10 ** 11).should match_normalized("100B")
25
+ @formatter.format(10 ** 12).should match_normalized("1T")
26
+ @formatter.format(10 ** 13).should match_normalized("10T")
27
+ @formatter.format(10 ** 14).should match_normalized("100T")
28
+ end
29
+
30
+ it "formats the number as if it were a straight decimal if it exceeds 10^15" do
31
+ @formatter.format(10**15).should == "1,000,000,000,000,000"
32
+ end
33
+
34
+ it "formats the number as if it were a straight decimal if it's less than 1000" do
35
+ @formatter.format(500).should == "500"
36
+ end
37
+ end
@@ -28,11 +28,20 @@ describe CurrencyFormatter do
28
28
  end
29
29
 
30
30
  it "should use the currency symbol for the corresponding currency code" do
31
- @formatter.format(12, :currency => "PEN").should == "S/.12.00"
31
+ @formatter.format(12, :currency => "THB").should == "฿12.00"
32
32
  end
33
33
 
34
34
  it "overrides the default precision" do
35
35
  @formatter.format(12, :precision => 3).should == "$12.000"
36
36
  end
37
+
38
+ it "should use the currency precision" do
39
+ @formatter.format(12, :currency => "TND").should == "TND12.000"
40
+ end
41
+
42
+ it "should use the currency rounding" do
43
+ @formatter.format(12.03, :currency => "CHF").should == "CHF12.05"
44
+ @formatter.format(12.02, :currency => "CHF").should == "CHF12.00"
45
+ end
37
46
  end
38
47
  end
@@ -25,7 +25,7 @@ describe LocalizedDate do
25
25
  loc_date = date.localize(:en)
26
26
  loc_date.ago(:base_time => base_time).to_s.should match_normalized("1 month ago")
27
27
  loc_date.ago(:base_time => Time.gm(2010,12,6,12,12,30)).to_s.should match_normalized("5 months ago")
28
- loc_date.ago(:base_time => Time.gm(2010,7,7,12,12,30)).to_s.should match_normalized("1 day ago")
28
+ loc_date.ago(:base_time => Time.gm(2010,7,7,12,12,30)).to_s.should match_normalized("2 days ago")
29
29
  loc_date.ago(:base_time => Time.gm(2010,7,6,12,12,30)).to_s.should match_normalized("12 hours ago")
30
30
  loc_date.ago(:base_time => Time.gm(2010,7,6,0,39,0)).to_s.should match_normalized("39 minutes ago")
31
31
  end
@@ -33,24 +33,24 @@ describe LocalizedDate do
33
33
  it "should ago-ify with strings regardless of variable's placement or existence" do
34
34
  loc_date = date.localize(:ar)
35
35
  loc_date.ago(:base_time => base_time).to_s(:unit => :hour).should match_normalized("قبل 756 ساعة")
36
- loc_date.ago(:base_time => base_time).to_s(:unit => :day).should match_normalized("قبل 31 يومًا")
37
- loc_date.ago(:base_time => base_time).to_s(:unit => :month).should match_normalized("قبل شهر واحد")
38
- loc_date.ago(:base_time => base_time).to_s(:unit => :year).should match_normalized("قبل 0 سنة")
36
+ loc_date.ago(:base_time => base_time).to_s(:unit => :day).should match_normalized("قبل 32 يومًا")
37
+ loc_date.ago(:base_time => base_time).to_s(:unit => :month).should match_normalized("قبل 1 من الشهور")
38
+ loc_date.ago(:base_time => base_time).to_s(:unit => :year).should match_normalized("قبل 0 من السنوات")
39
39
 
40
40
  loc_date = date.localize(:fa)
41
- loc_date.ago(:base_time => base_time).to_s(:unit => :day).should match_normalized("31 روز پیش")
41
+ loc_date.ago(:base_time => base_time).to_s(:unit => :day).should match_normalized("32 روز پیش")
42
42
 
43
43
  loc_date = date.localize(:en)
44
- loc_date.ago(:base_time => base_time).to_s(:unit => :day).should match_normalized("31 days ago")
44
+ loc_date.ago(:base_time => base_time).to_s(:unit => :day).should match_normalized("32 days ago")
45
45
  end
46
46
 
47
47
  it "should ago-ify a date with a number of different units" do
48
48
  date = Date.new(2010,6,6)
49
49
  loc_date = date.localize(:de)
50
50
  loc_date.ago(:base_time => base_time).to_s(:unit => :second).should match_normalized("Vor 5314350 Sekunden")
51
- loc_date.ago(:base_time => base_time).to_s(:unit => :minute).should match_normalized("Vor 88572 Minuten")
51
+ loc_date.ago(:base_time => base_time).to_s(:unit => :minute).should match_normalized("Vor 88573 Minuten")
52
52
  loc_date.ago(:base_time => base_time).to_s(:unit => :hour).should match_normalized("Vor 1476 Stunden")
53
- loc_date.ago(:base_time => base_time).to_s(:unit => :day).should match_normalized("Vor 61 Tagen")
53
+ loc_date.ago(:base_time => base_time).to_s(:unit => :day).should match_normalized("Vor 62 Tagen")
54
54
  loc_date.ago(:base_time => base_time).to_s(:unit => :month).should match_normalized("Vor 2 Monaten")
55
55
  loc_date.ago(:base_time => base_time).to_s(:unit => :year).should match_normalized("Vor 0 Jahren")
56
56
  end
@@ -69,8 +69,8 @@ describe LocalizedDate do
69
69
  date = Date.new(2010,10,10)
70
70
  loc_date = date.localize(:de)
71
71
  loc_date.until(:base_time => base_time).to_s(:unit => :second).should match_normalized("In 5572050 Sekunden")
72
- loc_date.until(:base_time => base_time).to_s(:unit => :minute).should match_normalized("In 92867 Minuten")
73
- loc_date.until(:base_time => base_time).to_s(:unit => :hour).should match_normalized("In 1547 Stunden")
72
+ loc_date.until(:base_time => base_time).to_s(:unit => :minute).should match_normalized("In 92868 Minuten")
73
+ loc_date.until(:base_time => base_time).to_s(:unit => :hour).should match_normalized("In 1548 Stunden")
74
74
  loc_date.until(:base_time => base_time).to_s(:unit => :day).should match_normalized("In 64 Tagen")
75
75
  loc_date.until(:base_time => base_time).to_s(:unit => :month).should match_normalized("In 2 Monaten")
76
76
  loc_date.until(:base_time => base_time).to_s(:unit => :year).should match_normalized("In 0 Jahren")
@@ -125,7 +125,7 @@ describe LocalizedDate do
125
125
  describe 'formatters' do
126
126
  it "don't raise errors for any locale" do
127
127
  TwitterCldr.supported_locales.each do |locale|
128
- TwitterCldr::Tokenizers::DateTimeTokenizer::VALID_TYPES.each do |type|
128
+ (TwitterCldr::Tokenizers::DateTimeTokenizer::VALID_TYPES - [:additional]).each do |type|
129
129
  lambda { Date.today.localize(locale).send(:"to_#{type}_s") }.should_not raise_error
130
130
  end
131
131
  end
@@ -32,7 +32,7 @@ describe LocalizedDateTime do
32
32
  it "should stringify with buddhist calendar" do
33
33
  # Ensure that buddhist calendar data is present in th locale.
34
34
  TwitterCldr.get_locale_resource(:th, :calendars)[:th][:calendars][:buddhist].should_not(
35
- be_nil, 'buddhist calendar is missing for :th locale (check resources/locales/th/calendars.yml)'
35
+ be_nil, 'buddhist calendar is missing for :th locale (check resources/locales/th/calendars.yml)'
36
36
  )
37
37
 
38
38
  #date_time.localize(:th, :calendar_type => :buddhist).to_full_s # It doesn't support era
@@ -71,11 +71,35 @@ describe LocalizedDateTime do
71
71
  describe 'formatters' do
72
72
  it "don't raise errors for any locale" do
73
73
  TwitterCldr.supported_locales.each do |locale|
74
- TwitterCldr::Tokenizers::DateTimeTokenizer::VALID_TYPES.each do |type|
75
- lambda { DateTime.now.localize(locale).send(:"to_#{type}_s") }.should_not raise_error
74
+ (TwitterCldr::Tokenizers::DateTimeTokenizer::VALID_TYPES - [:additional]).each do |type|
75
+ lambda { date_time.localize(locale).send(:"to_#{type}_s") }.should_not raise_error
76
76
  end
77
77
  end
78
78
  end
79
+
80
+ it "don't raise errors for additional date formats" do
81
+ TwitterCldr.supported_locales.each do |locale|
82
+ fmt = TwitterCldr::Formatters::DateTimeFormatter.new(:locale => locale)
83
+ fmt.additional_format_selector.patterns.each do |pattern|
84
+ lambda { fmt.format(date_time, :type => :additional, :format => pattern.to_s) }.should_not raise_error
85
+ lambda { date_time.localize(locale).to_s(:format => pattern.to_s) }.should_not raise_error
86
+ end
87
+ end
88
+ end
89
+ end
90
+
91
+ describe "#to_s" do
92
+ it "uses the default format if no :format is given" do
93
+ loc_date = date_time.localize
94
+ mock.proxy(loc_date).to_default_s
95
+ loc_date.to_s.should == "Sep 20, 1987, 10:05:00 p.m."
96
+ end
97
+
98
+ it "uses the given format instead of the default when specified" do
99
+ loc_date = date_time.localize
100
+ mock.proxy(loc_date).to_default_s.never
101
+ date_time.localize.to_s(:format => "MMMd").should == "Sep 20"
102
+ end
79
103
  end
80
104
 
81
105
  end
@@ -71,12 +71,12 @@ describe LocalizedNumber do
71
71
  let(:number) { LocalizedNumber.new(10, :en) }
72
72
 
73
73
  it 'should default precision to zero' do
74
- mock.proxy(number.formatter).format(number.base_obj, {})
74
+ mock.proxy(number.formatter).format(number.base_obj, { :type => :decimal })
75
75
  number.to_s.should == "10"
76
76
  end
77
77
 
78
78
  it 'should not overwrite precision when explicitly passed' do
79
- mock.proxy(number.formatter).format(number.base_obj, :precision => 2)
79
+ mock.proxy(number.formatter).format(number.base_obj, :precision => 2, :type => :decimal)
80
80
  number.to_s(:precision => 2).should == "10.00"
81
81
  end
82
82
  end
@@ -85,12 +85,12 @@ describe LocalizedNumber do
85
85
  let(:number) { LocalizedNumber.new(10, :en, :type => :currency) }
86
86
 
87
87
  it "should default to a precision of 2" do
88
- mock.proxy(number.formatter).format(number.base_obj, :precision => 2)
88
+ mock.proxy(number.formatter).format(number.base_obj, :precision => 2, :type => :currency)
89
89
  number.to_s(:precision => 2).should == "$10.00"
90
90
  end
91
91
 
92
92
  it 'should not overwrite precision when explicitly passed' do
93
- mock.proxy(number.formatter).format(number.base_obj, :precision => 1)
93
+ mock.proxy(number.formatter).format(number.base_obj, :precision => 1, :type => :currency)
94
94
  number.to_s(:precision => 1).should == "$10.0"
95
95
  end
96
96
  end
@@ -99,15 +99,43 @@ describe LocalizedNumber do
99
99
  let(:number) { LocalizedNumber.new(10, :en, :type => :percent) }
100
100
 
101
101
  it "should default to a precision of 0" do
102
- mock.proxy(number.formatter).format(number.base_obj, {})
102
+ mock.proxy(number.formatter).format(number.base_obj, { :type => :percent })
103
103
  number.to_s.should == "10%"
104
104
  end
105
105
 
106
106
  it 'should not overwrite precision when explicitly passed' do
107
- mock.proxy(number.formatter).format(number.base_obj, :precision => 1)
107
+ mock.proxy(number.formatter).format(number.base_obj, :precision => 1, :type => :percent)
108
108
  number.to_s(:precision => 1).should == "10.0%"
109
109
  end
110
110
  end
111
+
112
+ context 'short decimals' do
113
+ let(:number) { LocalizedNumber.new(1000, :en, :type => :short_decimal) }
114
+
115
+ it "should default to a precision of 0" do
116
+ mock.proxy(number.formatter).format(number.base_obj, { :type => :short_decimal })
117
+ number.to_s.should == "1K"
118
+ end
119
+
120
+ it 'should not overwrite precision when explicitly passed' do
121
+ mock.proxy(number.formatter).format(number.base_obj, :precision => 1, :type => :short_decimal)
122
+ number.to_s(:precision => 1).should == "1.0K"
123
+ end
124
+ end
125
+
126
+ context 'long decimals' do
127
+ let(:number) { LocalizedNumber.new(1000, :en, :type => :long_decimal) }
128
+
129
+ it "should default to a precision of 0" do
130
+ mock.proxy(number.formatter).format(number.base_obj, { :type => :long_decimal })
131
+ number.to_s.should == "1 thousand"
132
+ end
133
+
134
+ it 'should not overwrite precision when explicitly passed' do
135
+ mock.proxy(number.formatter).format(number.base_obj, :precision => 1, :type => :long_decimal)
136
+ number.to_s(:precision => 1).should == "1.0 thousand"
137
+ end
138
+ end
111
139
  end
112
140
 
113
141
  describe '#plural_rule' do