twitter_cldr 1.9.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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