activesupport 2.3.18 → 3.0.0.beta

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of activesupport might be problematic. Click here for more details.

Files changed (403) hide show
  1. data/CHANGELOG +30 -53
  2. data/lib/active_support.rb +43 -31
  3. data/lib/active_support/all.rb +3 -7
  4. data/lib/active_support/backtrace_cleaner.rb +24 -8
  5. data/lib/active_support/base64.rb +9 -0
  6. data/lib/active_support/benchmarkable.rb +60 -0
  7. data/lib/active_support/buffered_logger.rb +12 -9
  8. data/lib/active_support/cache.rb +75 -55
  9. data/lib/active_support/cache/compressed_mem_cache_store.rb +2 -0
  10. data/lib/active_support/cache/file_store.rb +35 -17
  11. data/lib/active_support/cache/mem_cache_store.rb +29 -20
  12. data/lib/active_support/cache/memory_store.rb +18 -17
  13. data/lib/active_support/cache/strategy/local_cache.rb +9 -1
  14. data/lib/active_support/callbacks.rb +490 -169
  15. data/lib/active_support/concern.rb +29 -0
  16. data/lib/active_support/configurable.rb +35 -0
  17. data/lib/active_support/core_ext.rb +2 -7
  18. data/lib/active_support/core_ext/array.rb +2 -10
  19. data/lib/active_support/core_ext/array/access.rb +39 -46
  20. data/lib/active_support/core_ext/array/conversions.rb +146 -182
  21. data/lib/active_support/core_ext/array/extract_options.rb +12 -18
  22. data/lib/active_support/core_ext/array/grouping.rb +87 -93
  23. data/lib/active_support/core_ext/array/random_access.rb +4 -40
  24. data/lib/active_support/core_ext/array/uniq_by.rb +17 -0
  25. data/lib/active_support/core_ext/array/wrap.rb +22 -0
  26. data/lib/active_support/core_ext/big_decimal.rb +1 -0
  27. data/lib/active_support/core_ext/big_decimal/conversions.rb +27 -0
  28. data/lib/active_support/core_ext/cgi.rb +0 -4
  29. data/lib/active_support/core_ext/cgi/escape_skipping_slashes.rb +16 -20
  30. data/lib/active_support/core_ext/class.rb +0 -2
  31. data/lib/active_support/core_ext/class/attribute.rb +8 -39
  32. data/lib/active_support/core_ext/class/attribute_accessors.rb +31 -35
  33. data/lib/active_support/core_ext/class/delegating_attributes.rb +34 -40
  34. data/lib/active_support/core_ext/class/inheritable_attributes.rb +100 -16
  35. data/lib/active_support/core_ext/date/acts_like.rb +8 -0
  36. data/lib/active_support/core_ext/date/calculations.rb +218 -238
  37. data/lib/active_support/core_ext/date/conversions.rb +87 -96
  38. data/lib/active_support/core_ext/date/freeze.rb +31 -0
  39. data/lib/active_support/core_ext/date_time/acts_like.rb +13 -0
  40. data/lib/active_support/core_ext/date_time/calculations.rb +97 -110
  41. data/lib/active_support/core_ext/date_time/conversions.rb +83 -95
  42. data/lib/active_support/core_ext/date_time/zones.rb +17 -0
  43. data/lib/active_support/core_ext/enumerable.rb +14 -15
  44. data/lib/active_support/core_ext/exception.rb +1 -43
  45. data/lib/active_support/core_ext/file.rb +0 -4
  46. data/lib/active_support/core_ext/file/atomic.rb +34 -41
  47. data/lib/active_support/core_ext/float.rb +0 -6
  48. data/lib/active_support/core_ext/float/rounding.rb +15 -20
  49. data/lib/active_support/core_ext/hash.rb +8 -14
  50. data/lib/active_support/core_ext/hash/conversions.rb +236 -236
  51. data/lib/active_support/core_ext/hash/deep_merge.rb +12 -19
  52. data/lib/active_support/core_ext/hash/diff.rb +11 -17
  53. data/lib/active_support/core_ext/hash/except.rb +21 -22
  54. data/lib/active_support/core_ext/hash/indifferent_access.rb +8 -137
  55. data/lib/active_support/core_ext/hash/keys.rb +38 -45
  56. data/lib/active_support/core_ext/hash/reverse_merge.rb +25 -32
  57. data/lib/active_support/core_ext/hash/slice.rb +35 -37
  58. data/lib/active_support/core_ext/integer.rb +1 -7
  59. data/lib/active_support/core_ext/integer/inflections.rb +10 -16
  60. data/lib/active_support/core_ext/integer/multiple.rb +6 -0
  61. data/lib/active_support/core_ext/integer/time.rb +36 -42
  62. data/lib/active_support/core_ext/kernel/reporting.rb +9 -7
  63. data/lib/active_support/core_ext/kernel/requires.rb +3 -1
  64. data/lib/active_support/core_ext/load_error.rb +16 -33
  65. data/lib/active_support/core_ext/logger.rb +3 -2
  66. data/lib/active_support/core_ext/module.rb +3 -16
  67. data/lib/active_support/core_ext/module/aliasing.rb +64 -68
  68. data/lib/active_support/core_ext/module/attr_accessor_with_default.rb +1 -1
  69. data/lib/active_support/core_ext/module/attr_internal.rb +4 -4
  70. data/lib/active_support/core_ext/module/attribute_accessors.rb +36 -41
  71. data/lib/active_support/core_ext/module/delegation.rb +1 -1
  72. data/lib/active_support/core_ext/module/deprecation.rb +9 -0
  73. data/lib/active_support/core_ext/module/introspection.rb +77 -79
  74. data/lib/active_support/core_ext/module/loading.rb +2 -0
  75. data/lib/active_support/core_ext/module/synchronization.rb +4 -1
  76. data/lib/active_support/core_ext/name_error.rb +3 -4
  77. data/lib/active_support/core_ext/numeric.rb +1 -8
  78. data/lib/active_support/core_ext/numeric/bytes.rb +35 -41
  79. data/lib/active_support/core_ext/numeric/time.rb +70 -74
  80. data/lib/active_support/core_ext/object.rb +4 -2
  81. data/lib/active_support/core_ext/object/acts_like.rb +10 -0
  82. data/lib/active_support/core_ext/object/conversions.rb +4 -15
  83. data/lib/active_support/core_ext/object/duplicable.rb +65 -0
  84. data/lib/active_support/core_ext/object/instance_variables.rb +0 -7
  85. data/lib/active_support/core_ext/object/metaclass.rb +5 -6
  86. data/lib/active_support/core_ext/object/misc.rb +2 -93
  87. data/lib/active_support/core_ext/object/returning.rb +42 -0
  88. data/lib/active_support/core_ext/object/to_param.rb +49 -0
  89. data/lib/active_support/core_ext/object/to_query.rb +27 -0
  90. data/lib/active_support/core_ext/{try.rb → object/try.rb} +4 -4
  91. data/lib/active_support/core_ext/object/with_options.rb +24 -0
  92. data/lib/active_support/core_ext/proc.rb +6 -4
  93. data/lib/active_support/core_ext/process/daemon.rb +17 -19
  94. data/lib/active_support/core_ext/range.rb +2 -9
  95. data/lib/active_support/core_ext/range/blockless_step.rb +24 -27
  96. data/lib/active_support/core_ext/range/conversions.rb +17 -23
  97. data/lib/active_support/core_ext/range/include_range.rb +18 -27
  98. data/lib/active_support/core_ext/range/overlaps.rb +6 -13
  99. data/lib/active_support/core_ext/regexp.rb +5 -0
  100. data/lib/active_support/core_ext/rexml.rb +12 -7
  101. data/lib/active_support/core_ext/string.rb +6 -19
  102. data/lib/active_support/core_ext/string/access.rb +88 -95
  103. data/lib/active_support/core_ext/string/behavior.rb +6 -12
  104. data/lib/active_support/core_ext/string/conversions.rb +19 -21
  105. data/lib/active_support/core_ext/string/exclude.rb +6 -0
  106. data/lib/active_support/core_ext/string/filters.rb +17 -23
  107. data/lib/active_support/core_ext/string/inflections.rb +146 -153
  108. data/lib/active_support/{vendor/i18n-0.4.1/i18n/core_ext/string/interpolate.rb → core_ext/string/interpolation.rb} +8 -15
  109. data/lib/active_support/core_ext/string/multibyte.rb +68 -74
  110. data/lib/active_support/core_ext/string/output_safety.rb +21 -17
  111. data/lib/active_support/core_ext/string/starts_ends_with.rb +3 -32
  112. data/lib/active_support/core_ext/string/xchar.rb +10 -3
  113. data/lib/active_support/core_ext/time/acts_like.rb +8 -0
  114. data/lib/active_support/core_ext/time/calculations.rb +276 -308
  115. data/lib/active_support/core_ext/time/conversions.rb +78 -84
  116. data/lib/active_support/core_ext/time/marshal_with_utc_flag.rb +22 -0
  117. data/lib/active_support/core_ext/time/publicize_conversion_methods.rb +10 -0
  118. data/lib/active_support/core_ext/time/zones.rb +73 -81
  119. data/lib/active_support/core_ext/uri.rb +2 -1
  120. data/lib/active_support/dependencies.rb +38 -48
  121. data/lib/active_support/dependencies/autoload.rb +49 -0
  122. data/lib/active_support/deprecation.rb +9 -195
  123. data/lib/active_support/deprecation/behaviors.rb +38 -0
  124. data/lib/active_support/deprecation/method_wrappers.rb +29 -0
  125. data/lib/active_support/deprecation/proxy_wrappers.rb +74 -0
  126. data/lib/active_support/deprecation/reporting.rb +55 -0
  127. data/lib/active_support/duration.rb +6 -2
  128. data/lib/active_support/hash_with_indifferent_access.rb +137 -0
  129. data/lib/active_support/i18n.rb +2 -0
  130. data/lib/active_support/inflections.rb +1 -1
  131. data/lib/active_support/inflector.rb +4 -406
  132. data/lib/active_support/inflector/inflections.rb +211 -0
  133. data/lib/active_support/inflector/methods.rb +139 -0
  134. data/lib/active_support/inflector/transliterate.rb +61 -0
  135. data/lib/active_support/json/backends/jsongem.rb +16 -10
  136. data/lib/active_support/json/backends/yaml.rb +72 -2
  137. data/lib/active_support/json/decoding.rb +2 -16
  138. data/lib/active_support/json/encoding.rb +153 -33
  139. data/lib/active_support/json/variable.rb +4 -3
  140. data/lib/active_support/locale/en.yml +1 -4
  141. data/lib/active_support/memoizable.rb +7 -6
  142. data/lib/active_support/message_encryptor.rb +1 -0
  143. data/lib/active_support/message_verifier.rb +12 -29
  144. data/lib/active_support/multibyte.rb +9 -4
  145. data/lib/active_support/multibyte/chars.rb +25 -17
  146. data/lib/active_support/multibyte/unicode_database.rb +5 -5
  147. data/lib/active_support/multibyte/utils.rb +1 -1
  148. data/lib/active_support/notifications.rb +77 -0
  149. data/lib/active_support/notifications/fanout.rb +69 -0
  150. data/lib/active_support/notifications/instrumenter.rb +50 -0
  151. data/lib/active_support/option_merger.rb +2 -0
  152. data/lib/active_support/ordered_hash.rb +33 -37
  153. data/lib/active_support/ordered_options.rb +3 -1
  154. data/lib/active_support/railtie.rb +64 -0
  155. data/lib/active_support/rescuable.rb +11 -6
  156. data/lib/active_support/ruby/shim.rb +19 -0
  157. data/lib/active_support/test_case.rb +8 -1
  158. data/lib/active_support/testing/assertions.rb +2 -14
  159. data/lib/active_support/testing/declarative.rb +31 -12
  160. data/lib/active_support/testing/deprecation.rb +8 -10
  161. data/lib/active_support/testing/isolation.rb +153 -0
  162. data/lib/active_support/testing/pending.rb +48 -0
  163. data/lib/active_support/testing/performance.rb +342 -339
  164. data/lib/active_support/testing/setup_and_teardown.rb +48 -31
  165. data/lib/active_support/time.rb +34 -0
  166. data/lib/active_support/time/autoload.rb +5 -0
  167. data/lib/active_support/time_with_zone.rb +18 -12
  168. data/lib/active_support/values/time_zone.rb +97 -93
  169. data/lib/active_support/version.rb +3 -3
  170. data/lib/active_support/whiny_nil.rb +1 -4
  171. data/lib/active_support/xml_mini.rb +2 -0
  172. data/lib/active_support/xml_mini/jdom.rb +13 -7
  173. data/lib/active_support/xml_mini/libxml.rb +19 -12
  174. data/lib/active_support/xml_mini/libxmlsax.rb +19 -9
  175. data/lib/active_support/xml_mini/nokogiri.rb +18 -12
  176. data/lib/active_support/xml_mini/nokogirisax.rb +15 -6
  177. data/lib/active_support/xml_mini/rexml.rb +24 -9
  178. metadata +94 -244
  179. data/lib/active_support/cache/drb_store.rb +0 -14
  180. data/lib/active_support/core_ext/array/wrapper.rb +0 -24
  181. data/lib/active_support/core_ext/base64.rb +0 -4
  182. data/lib/active_support/core_ext/base64/encoding.rb +0 -16
  183. data/lib/active_support/core_ext/bigdecimal.rb +0 -6
  184. data/lib/active_support/core_ext/bigdecimal/conversions.rb +0 -37
  185. data/lib/active_support/core_ext/blank.rb +0 -2
  186. data/lib/active_support/core_ext/class/removal.rb +0 -50
  187. data/lib/active_support/core_ext/date.rb +0 -10
  188. data/lib/active_support/core_ext/date/behavior.rb +0 -42
  189. data/lib/active_support/core_ext/date_time.rb +0 -12
  190. data/lib/active_support/core_ext/duplicable.rb +0 -43
  191. data/lib/active_support/core_ext/float/time.rb +0 -27
  192. data/lib/active_support/core_ext/integer/even_odd.rb +0 -29
  193. data/lib/active_support/core_ext/kernel/singleton_class.rb +0 -13
  194. data/lib/active_support/core_ext/module/model_naming.rb +0 -25
  195. data/lib/active_support/core_ext/module/remove_method.rb +0 -6
  196. data/lib/active_support/core_ext/numeric/conversions.rb +0 -19
  197. data/lib/active_support/core_ext/object/extending.rb +0 -80
  198. data/lib/active_support/core_ext/object/singleton_class.rb +0 -13
  199. data/lib/active_support/core_ext/pathname.rb +0 -7
  200. data/lib/active_support/core_ext/pathname/clean_within.rb +0 -14
  201. data/lib/active_support/core_ext/string/bytesize.rb +0 -5
  202. data/lib/active_support/core_ext/string/iterators.rb +0 -23
  203. data/lib/active_support/core_ext/symbol.rb +0 -14
  204. data/lib/active_support/core_ext/time.rb +0 -46
  205. data/lib/active_support/core_ext/time/behavior.rb +0 -13
  206. data/lib/active_support/json/backends/okjson.rb +0 -644
  207. data/lib/active_support/json/backends/yajl.rb +0 -40
  208. data/lib/active_support/json/encoders/date.rb +0 -22
  209. data/lib/active_support/json/encoders/date_time.rb +0 -22
  210. data/lib/active_support/json/encoders/enumerable.rb +0 -17
  211. data/lib/active_support/json/encoders/false_class.rb +0 -7
  212. data/lib/active_support/json/encoders/hash.rb +0 -56
  213. data/lib/active_support/json/encoders/nil_class.rb +0 -7
  214. data/lib/active_support/json/encoders/numeric.rb +0 -21
  215. data/lib/active_support/json/encoders/object.rb +0 -10
  216. data/lib/active_support/json/encoders/regexp.rb +0 -9
  217. data/lib/active_support/json/encoders/string.rb +0 -9
  218. data/lib/active_support/json/encoders/symbol.rb +0 -5
  219. data/lib/active_support/json/encoders/time.rb +0 -22
  220. data/lib/active_support/json/encoders/true_class.rb +0 -7
  221. data/lib/active_support/vendor.rb +0 -36
  222. data/lib/active_support/vendor/builder-2.1.2/blankslate.rb +0 -113
  223. data/lib/active_support/vendor/builder-2.1.2/builder.rb +0 -13
  224. data/lib/active_support/vendor/builder-2.1.2/builder/blankslate.rb +0 -20
  225. data/lib/active_support/vendor/builder-2.1.2/builder/css.rb +0 -250
  226. data/lib/active_support/vendor/builder-2.1.2/builder/xchar.rb +0 -115
  227. data/lib/active_support/vendor/builder-2.1.2/builder/xmlbase.rb +0 -139
  228. data/lib/active_support/vendor/builder-2.1.2/builder/xmlevents.rb +0 -63
  229. data/lib/active_support/vendor/builder-2.1.2/builder/xmlmarkup.rb +0 -328
  230. data/lib/active_support/vendor/i18n-0.4.1/i18n.rb +0 -322
  231. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend.rb +0 -20
  232. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/active_record.rb +0 -61
  233. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/active_record/missing.rb +0 -65
  234. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/active_record/store_procs.rb +0 -38
  235. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/active_record/translation.rb +0 -93
  236. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/base.rb +0 -237
  237. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/cache.rb +0 -77
  238. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/cascade.rb +0 -57
  239. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/chain.rb +0 -77
  240. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/cldr.rb +0 -100
  241. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/fallbacks.rb +0 -69
  242. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/flatten.rb +0 -113
  243. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/gettext.rb +0 -75
  244. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/interpolation_compiler.rb +0 -123
  245. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/key_value.rb +0 -102
  246. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/memoize.rb +0 -48
  247. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/metadata.rb +0 -65
  248. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/pluralization.rb +0 -57
  249. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/simple.rb +0 -87
  250. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/transliterator.rb +0 -98
  251. data/lib/active_support/vendor/i18n-0.4.1/i18n/config.rb +0 -84
  252. data/lib/active_support/vendor/i18n-0.4.1/i18n/core_ext/hash.rb +0 -29
  253. data/lib/active_support/vendor/i18n-0.4.1/i18n/exceptions.rb +0 -61
  254. data/lib/active_support/vendor/i18n-0.4.1/i18n/gettext.rb +0 -27
  255. data/lib/active_support/vendor/i18n-0.4.1/i18n/gettext/helpers.rb +0 -65
  256. data/lib/active_support/vendor/i18n-0.4.1/i18n/gettext/po_parser.rb +0 -329
  257. data/lib/active_support/vendor/i18n-0.4.1/i18n/locale.rb +0 -6
  258. data/lib/active_support/vendor/i18n-0.4.1/i18n/locale/fallbacks.rb +0 -98
  259. data/lib/active_support/vendor/i18n-0.4.1/i18n/locale/tag.rb +0 -28
  260. data/lib/active_support/vendor/i18n-0.4.1/i18n/locale/tag/parents.rb +0 -24
  261. data/lib/active_support/vendor/i18n-0.4.1/i18n/locale/tag/rfc4646.rb +0 -76
  262. data/lib/active_support/vendor/i18n-0.4.1/i18n/locale/tag/simple.rb +0 -41
  263. data/lib/active_support/vendor/i18n-0.4.1/i18n/version.rb +0 -3
  264. data/lib/active_support/vendor/memcache-client-1.7.4/memcache.rb +0 -1107
  265. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo.rb +0 -33
  266. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/data_timezone.rb +0 -47
  267. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/data_timezone_info.rb +0 -228
  268. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Algiers.rb +0 -55
  269. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Cairo.rb +0 -219
  270. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Casablanca.rb +0 -40
  271. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Harare.rb +0 -18
  272. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Johannesburg.rb +0 -25
  273. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Monrovia.rb +0 -22
  274. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Nairobi.rb +0 -23
  275. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Argentina/Buenos_Aires.rb +0 -166
  276. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Argentina/San_Juan.rb +0 -86
  277. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Bogota.rb +0 -23
  278. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Caracas.rb +0 -23
  279. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Chicago.rb +0 -283
  280. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Chihuahua.rb +0 -136
  281. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Denver.rb +0 -204
  282. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Godthab.rb +0 -161
  283. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Guatemala.rb +0 -27
  284. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Halifax.rb +0 -274
  285. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Indiana/Indianapolis.rb +0 -149
  286. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Juneau.rb +0 -194
  287. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/La_Paz.rb +0 -22
  288. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Lima.rb +0 -35
  289. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Los_Angeles.rb +0 -232
  290. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Mazatlan.rb +0 -139
  291. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Mexico_City.rb +0 -144
  292. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Monterrey.rb +0 -131
  293. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/New_York.rb +0 -282
  294. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Phoenix.rb +0 -30
  295. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Regina.rb +0 -74
  296. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Santiago.rb +0 -205
  297. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Sao_Paulo.rb +0 -171
  298. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/St_Johns.rb +0 -288
  299. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Tijuana.rb +0 -196
  300. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Almaty.rb +0 -67
  301. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Baghdad.rb +0 -73
  302. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Baku.rb +0 -161
  303. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Bangkok.rb +0 -20
  304. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Chongqing.rb +0 -33
  305. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Colombo.rb +0 -30
  306. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Dhaka.rb +0 -27
  307. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Hong_Kong.rb +0 -87
  308. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Irkutsk.rb +0 -165
  309. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Jakarta.rb +0 -30
  310. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Jerusalem.rb +0 -163
  311. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kabul.rb +0 -20
  312. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kamchatka.rb +0 -163
  313. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Karachi.rb +0 -30
  314. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Katmandu.rb +0 -20
  315. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kolkata.rb +0 -25
  316. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Krasnoyarsk.rb +0 -163
  317. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kuala_Lumpur.rb +0 -31
  318. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kuwait.rb +0 -18
  319. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Magadan.rb +0 -163
  320. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Muscat.rb +0 -18
  321. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Novosibirsk.rb +0 -164
  322. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Rangoon.rb +0 -24
  323. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Riyadh.rb +0 -18
  324. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Seoul.rb +0 -34
  325. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Shanghai.rb +0 -35
  326. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Singapore.rb +0 -33
  327. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Taipei.rb +0 -59
  328. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Tashkent.rb +0 -47
  329. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Tbilisi.rb +0 -78
  330. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Tehran.rb +0 -121
  331. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Tokyo.rb +0 -30
  332. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Ulaanbaatar.rb +0 -65
  333. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Urumqi.rb +0 -33
  334. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Vladivostok.rb +0 -164
  335. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Yakutsk.rb +0 -163
  336. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Yekaterinburg.rb +0 -165
  337. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Yerevan.rb +0 -165
  338. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Atlantic/Azores.rb +0 -270
  339. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Atlantic/Cape_Verde.rb +0 -23
  340. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Atlantic/South_Georgia.rb +0 -18
  341. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Adelaide.rb +0 -187
  342. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Brisbane.rb +0 -35
  343. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Darwin.rb +0 -29
  344. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Hobart.rb +0 -193
  345. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Melbourne.rb +0 -185
  346. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Perth.rb +0 -37
  347. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Sydney.rb +0 -185
  348. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Etc/UTC.rb +0 -16
  349. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Amsterdam.rb +0 -228
  350. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Athens.rb +0 -185
  351. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Belgrade.rb +0 -163
  352. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Berlin.rb +0 -188
  353. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Bratislava.rb +0 -13
  354. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Brussels.rb +0 -232
  355. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Bucharest.rb +0 -181
  356. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Budapest.rb +0 -197
  357. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Copenhagen.rb +0 -179
  358. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Dublin.rb +0 -276
  359. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Helsinki.rb +0 -163
  360. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Istanbul.rb +0 -218
  361. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Kiev.rb +0 -168
  362. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Lisbon.rb +0 -268
  363. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Ljubljana.rb +0 -13
  364. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/London.rb +0 -288
  365. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Madrid.rb +0 -211
  366. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Minsk.rb +0 -170
  367. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Moscow.rb +0 -181
  368. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Paris.rb +0 -232
  369. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Prague.rb +0 -187
  370. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Riga.rb +0 -176
  371. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Rome.rb +0 -215
  372. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Sarajevo.rb +0 -13
  373. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Skopje.rb +0 -13
  374. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Sofia.rb +0 -173
  375. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Stockholm.rb +0 -165
  376. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Tallinn.rb +0 -172
  377. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Vienna.rb +0 -183
  378. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Vilnius.rb +0 -170
  379. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Warsaw.rb +0 -212
  380. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Zagreb.rb +0 -13
  381. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Auckland.rb +0 -202
  382. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Fiji.rb +0 -23
  383. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Guam.rb +0 -22
  384. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Honolulu.rb +0 -28
  385. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Majuro.rb +0 -20
  386. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Midway.rb +0 -25
  387. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Noumea.rb +0 -25
  388. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Pago_Pago.rb +0 -26
  389. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Port_Moresby.rb +0 -20
  390. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Tongatapu.rb +0 -27
  391. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/info_timezone.rb +0 -52
  392. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/linked_timezone.rb +0 -51
  393. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/linked_timezone_info.rb +0 -44
  394. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/offset_rationals.rb +0 -98
  395. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/ruby_core_support.rb +0 -56
  396. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/time_or_datetime.rb +0 -292
  397. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone.rb +0 -508
  398. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_definition.rb +0 -56
  399. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_info.rb +0 -40
  400. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_offset_info.rb +0 -94
  401. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_period.rb +0 -198
  402. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_transition_info.rb +0 -129
  403. data/lib/activesupport.rb +0 -2
@@ -1,77 +0,0 @@
1
- # encoding: utf-8
2
-
3
- # This module allows you to easily cache all responses from the backend - thus
4
- # speeding up the I18n aspects of your application quite a bit.
5
- #
6
- # To enable caching you can simply include the Cache module to the Simple
7
- # backend - or whatever other backend you are using:
8
- #
9
- # I18n::Backend::Simple.send(:include, I18n::Backend::Cache)
10
- #
11
- # You will also need to set a cache store implementation that you want to use:
12
- #
13
- # I18n.cache_store = ActiveSupport::Cache.lookup_store(:memory_store)
14
- #
15
- # You can use any cache implementation you want that provides the same API as
16
- # ActiveSupport::Cache (only the methods #fetch and #write are being used).
17
- #
18
- # The cache_key implementation assumes that you only pass values to
19
- # I18n.translate that return a valid key from #hash (see
20
- # http://www.ruby-doc.org/core/classes/Object.html#M000337).
21
- module I18n
22
- class << self
23
- @@cache_store = nil
24
- @@cache_namespace = nil
25
-
26
- def cache_store
27
- @@cache_store
28
- end
29
-
30
- def cache_store=(store)
31
- @@cache_store = store
32
- end
33
-
34
- def cache_namespace
35
- @@cache_namespace
36
- end
37
-
38
- def cache_namespace=(namespace)
39
- @@cache_namespace = namespace
40
- end
41
-
42
- def perform_caching?
43
- !cache_store.nil?
44
- end
45
- end
46
-
47
- module Backend
48
- # TODO Should the cache be cleared if new translations are stored?
49
- module Cache
50
- def translate(*args)
51
- I18n.perform_caching? ? fetch(*args) { super } : super
52
- end
53
-
54
- protected
55
-
56
- def fetch(*args, &block)
57
- result = I18n.cache_store.fetch(cache_key(*args), &block)
58
- raise result if result.is_a?(Exception)
59
- result = result.dup if result.frozen? rescue result
60
- result
61
- rescue MissingTranslationData => exception
62
- I18n.cache_store.write(cache_key(*args), exception)
63
- raise exception
64
- end
65
-
66
- def cache_key(*args)
67
- # This assumes that only simple, native Ruby values are passed to I18n.translate.
68
- # Also, in Ruby < 1.8.7 {}.hash != {}.hash
69
- # (see http://paulbarry.com/articles/2009/09/14/why-rails-3-will-require-ruby-1-8-7)
70
- # If args.inspect does not work for you for some reason, patches are very welcome :)
71
- hash = RUBY_VERSION >= "1.8.7" ? args.hash : args.inspect
72
- keys = ['i18n', I18n.cache_namespace, hash]
73
- keys.compact.join('-')
74
- end
75
- end
76
- end
77
- end
@@ -1,57 +0,0 @@
1
- # encoding: utf-8
2
-
3
- # EXPERIMENTAL
4
- #
5
- # The Cascade module adds the ability to do cascading lookups to backends that
6
- # are compatible to the Simple backend.
7
- #
8
- # By cascading lookups we mean that for any key that can not be found the
9
- # Cascade module strips one segment off the scope part of the key and then
10
- # tries to look up the key in that scope.
11
- #
12
- # E.g. when a lookup for the key :"foo.bar.baz" does not yield a result then
13
- # the segment :bar will be stripped off the scope part :"foo.bar" and the new
14
- # scope :foo will be used to look up the key :baz. If that does not succeed
15
- # then the remaining scope segment :foo will be omitted, too, and again the
16
- # key :baz will be looked up (now with no scope).
17
- #
18
- # To enable a cascading lookup one passes the :cascade option:
19
- #
20
- # I18n.t(:'foo.bar.baz', :cascade => true)
21
- #
22
- # This will return the first translation found for :"foo.bar.baz", :"foo.baz"
23
- # or :baz in this order.
24
- #
25
- # The cascading lookup takes precedence over resolving any given defaults.
26
- # I.e. defaults will kick in after the cascading lookups haven't succeeded.
27
- #
28
- # This behavior is useful for libraries like ActiveRecord validations where
29
- # the library wants to give users a bunch of more or less fine-grained options
30
- # of scopes for a particular key.
31
- #
32
- # Thanks to Clemens Kofler for the initial idea and implementation! See
33
- # http://github.com/clemens/i18n-cascading-backend
34
-
35
- module I18n
36
- module Backend
37
- module Cascade
38
- def lookup(locale, key, scope = [], options = {})
39
- return super unless cascade = options[:cascade]
40
-
41
- separator = options[:separator] || I18n.default_separator
42
- skip_root = cascade.has_key?(:skip_root) ? cascade[:skip_root] : true
43
- step = cascade[:step]
44
-
45
- keys = I18n.normalize_keys(nil, key, nil, separator)
46
- offset = options[:cascade][:offset] || keys.length
47
- scope = I18n.normalize_keys(nil, nil, scope, separator) + keys
48
- key = scope.slice!(-offset, offset).join(separator)
49
-
50
- begin
51
- result = super
52
- return result unless result.nil?
53
- end while !scope.empty? && scope.slice!(-step, step) && (!scope.empty? || !skip_root)
54
- end
55
- end
56
- end
57
- end
@@ -1,77 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module I18n
4
- module Backend
5
- # Backend that chains multiple other backends and checks each of them when
6
- # a translation needs to be looked up. This is useful when you want to use
7
- # standard translations with a Simple backend but store custom application
8
- # translations in a database or other backends.
9
- #
10
- # To use the Chain backend instantiate it and set it to the I18n module.
11
- # You can add chained backends through the initializer or backends
12
- # accessor:
13
- #
14
- # # preserves the existing Simple backend set to I18n.backend
15
- # I18n.backend = I18n::Backend::Chain.new(I18n::Backend::ActiveRecord.new, I18n.backend)
16
- #
17
- # The implementation assumes that all backends added to the Chain implement
18
- # a lookup method with the same API as Simple backend does.
19
- class Chain
20
- include Base
21
-
22
- attr_accessor :backends
23
-
24
- def initialize(*backends)
25
- self.backends = backends
26
- end
27
-
28
- def reload!
29
- backends.each { |backend| backend.reload! }
30
- end
31
-
32
- def store_translations(locale, data, options = {})
33
- backends.first.store_translations(locale, data, options = {})
34
- end
35
-
36
- def available_locales
37
- backends.map { |backend| backend.available_locales }.flatten.uniq
38
- end
39
-
40
- def translate(locale, key, options = {})
41
- return key.map { |k| translate(locale, k, options) } if key.is_a?(Array)
42
-
43
- default = options.delete(:default)
44
- namespace = {}
45
- backends.each do |backend|
46
- begin
47
- options.update(:default => default) if default and backend == backends.last
48
- translation = backend.translate(locale, key, options)
49
- if namespace_lookup?(translation, options)
50
- namespace.update(translation)
51
- elsif !translation.nil?
52
- return translation
53
- end
54
- rescue MissingTranslationData
55
- end
56
- end
57
- return namespace unless namespace.empty?
58
- raise(I18n::MissingTranslationData.new(locale, key, options))
59
- end
60
-
61
- def localize(locale, object, format = :default, options = {})
62
- backends.each do |backend|
63
- begin
64
- result = backend.localize(locale, object, format, options) and return result
65
- rescue MissingTranslationData
66
- end
67
- end
68
- raise(I18n::MissingTranslationData.new(locale, format, options))
69
- end
70
-
71
- protected
72
- def namespace_lookup?(result, options)
73
- result.is_a?(Hash) and not options.has_key?(:count)
74
- end
75
- end
76
- end
77
- end
@@ -1,100 +0,0 @@
1
- # encoding: utf-8
2
- require 'cldr'
3
-
4
- module I18n
5
- module Backend
6
- module Cldr
7
- include ::Cldr::Format
8
-
9
- def localize(locale, object, format = :default, options = {})
10
- options[:as] ||= detect_type(object, options)
11
- send(:"format_#{options[:as]}", locale, object, format, options)
12
- end
13
-
14
- def format_decimal(locale, object, format = :default, options = {})
15
- formatter(locale, :decimal, format).apply(object, options)
16
- end
17
-
18
- def format_integer(locale, object, format = :default, options = {})
19
- format_object(number, options.merge(:precision => 0))
20
- end
21
-
22
- def format_currency(locale, object, format = :default, options = {})
23
- options.merge!(:currency => lookup_currency(locale, options[:currency], object)) if options[:currency].is_a?(Symbol)
24
- formatter(locale, :currency, format).apply(object, options)
25
- end
26
-
27
- def format_percent(locale, object, format = :default, options = {})
28
- formatter(locale, :percent, format).apply(object, options)
29
- end
30
-
31
- def format_date(locale, object, format = :default, options = {})
32
- formatter(locale, :date, format).apply(object, options)
33
- end
34
-
35
- def format_time(locale, object, format = :default, options = {})
36
- formatter(locale, :time, format).apply(object, options)
37
- end
38
-
39
- def format_datetime(locale, object, format = :default, options = {})
40
- key = :"calendars.gregorian.formats.datetime.#{format}.pattern"
41
- date = I18n.l(object, :format => options[:date_format] || format, :locale => locale, :as => :date)
42
- time = I18n.l(object, :format => options[:time_format] || format, :locale => locale, :as => :time)
43
- I18n.t(key, :date => date, :time => time, :locale => locale, :raise => true)
44
- end
45
-
46
- protected
47
-
48
- def detect_type(object, options)
49
- options.has_key?(:currency) ? :currency : case object
50
- when ::Numeric
51
- :decimal
52
- when ::Date, ::DateTime, ::Time
53
- object.class.name.downcase.to_sym
54
- else
55
- raise_unspecified_format_type!
56
- end
57
- end
58
-
59
- def formatter(locale, type, format)
60
- (@formatters ||= {})[:"#{locale}.#{type}.#{format}"] ||= begin
61
- format = lookup_format(locale, type, format)
62
- data = lookup_format_data(locale, type)
63
- ::Cldr::Format.const_get(type.to_s.camelize).new(format, data)
64
- end
65
- end
66
-
67
- def lookup_format(locale, type, format)
68
- key = case type
69
- when :date, :time, :datetime
70
- :"calendars.gregorian.formats.#{type}.#{format}.pattern"
71
- else
72
- :"numbers.formats.#{type}.patterns.#{format || :default}"
73
- end
74
- I18n.t(key, :locale => locale, :raise => true)
75
- end
76
-
77
- def lookup_format_data(locale, type)
78
- key = case type
79
- when :date, :time, :datetime
80
- :'calendars.gregorian'
81
- else
82
- :'numbers.symbols'
83
- end
84
- I18n.t(key, :locale => locale, :raise => true)
85
- end
86
-
87
- def lookup_currency(locale, currency, count)
88
- I18n.t(:"currencies.#{currency}", :locale => locale, :count => count)
89
- end
90
-
91
- def raise_unspecified_format_type!
92
- raise ArgumentError.new("You have to specify a format type, e.g. :as => :number.")
93
- end
94
-
95
- def raise_unspecified_currency!
96
- raise ArgumentError.new("You have to specify a currency, e.g. :currency => 'EUR'.")
97
- end
98
- end
99
- end
100
- end
@@ -1,69 +0,0 @@
1
- # encoding: utf-8
2
-
3
- # I18n locale fallbacks are useful when you want your application to use
4
- # translations from other locales when translations for the current locale are
5
- # missing. E.g. you might want to use :en translations when translations in
6
- # your applications main locale :de are missing.
7
- #
8
- # To enable locale fallbacks you can simply include the Fallbacks module to
9
- # the Simple backend - or whatever other backend you are using:
10
- #
11
- # I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
12
- module I18n
13
- @@fallbacks = nil
14
-
15
- class << self
16
- # Returns the current fallbacks implementation. Defaults to +I18n::Locale::Fallbacks+.
17
- def fallbacks
18
- @@fallbacks ||= I18n::Locale::Fallbacks.new
19
- end
20
-
21
- # Sets the current fallbacks implementation. Use this to set a different fallbacks implementation.
22
- def fallbacks=(fallbacks)
23
- @@fallbacks = fallbacks
24
- end
25
- end
26
-
27
- module Backend
28
- module Fallbacks
29
- # Overwrites the Base backend translate method so that it will try each
30
- # locale given by I18n.fallbacks for the given locale. E.g. for the
31
- # locale :"de-DE" it might try the locales :"de-DE", :de and :en
32
- # (depends on the fallbacks implementation) until it finds a result with
33
- # the given options. If it does not find any result for any of the
34
- # locales it will then raise a MissingTranslationData exception as
35
- # usual.
36
- #
37
- # The default option takes precedence over fallback locales
38
- # only when it's not a String. When default contains String it
39
- # is evaluated after fallback locales.
40
- def translate(locale, key, options = {})
41
- default = extract_string_default!(options) if options[:default]
42
-
43
- I18n.fallbacks[locale].each do |fallback|
44
- begin
45
- result = super(fallback, key, options)
46
- return result unless result.nil?
47
- rescue I18n::MissingTranslationData
48
- end
49
- end
50
-
51
- return super(locale, nil, options.merge(:default => default)) if default
52
- raise(I18n::MissingTranslationData.new(locale, key, options))
53
- end
54
-
55
- def extract_string_default!(options)
56
- defaults = Array(options[:default])
57
- if index = find_first_string_default(defaults)
58
- options[:default] = defaults[0, index]
59
- defaults[index]
60
- end
61
- end
62
-
63
- def find_first_string_default(defaults)
64
- defaults.each_index { |ix| return ix if String === defaults[ix] }
65
- nil
66
- end
67
- end
68
- end
69
- end
@@ -1,113 +0,0 @@
1
- module I18n
2
- module Backend
3
- # This module contains several helpers to assist flattening translations.
4
- # You may want to flatten translations for:
5
- #
6
- # 1) speed up lookups, as in the Memoize backend;
7
- # 2) In case you want to store translations in a data store, as in ActiveRecord backend;
8
- #
9
- # You can check both backends above for some examples.
10
- # This module also keeps all links in a hash so they can be properly resolved when flattened.
11
- module Flatten
12
- SEPARATOR_ESCAPE_CHAR = "\001"
13
- FLATTEN_SEPARATOR = "."
14
-
15
- # normalize_keys the flatten way. This method is significantly faster
16
- # and creates way less objects than the one at I18n.normalize_keys.
17
- # It also handles escaping the translation keys.
18
- def self.normalize_flat_keys(locale, key, scope, separator)
19
- keys = [scope, key].flatten.compact
20
- separator ||= I18n.default_separator
21
-
22
- if separator != FLATTEN_SEPARATOR
23
- keys.map! do |k|
24
- k.to_s.tr("#{FLATTEN_SEPARATOR}#{separator}",
25
- "#{SEPARATOR_ESCAPE_CHAR}#{FLATTEN_SEPARATOR}")
26
- end
27
- end
28
-
29
- keys.join(".")
30
- end
31
-
32
- # Receives a string and escape the default separator.
33
- def self.escape_default_separator(key) #:nodoc:
34
- key.to_s.tr(FLATTEN_SEPARATOR, SEPARATOR_ESCAPE_CHAR)
35
- end
36
-
37
- # Shortcut to I18n::Backend::Flatten.normalize_flat_keys
38
- # and then resolve_links.
39
- def normalize_flat_keys(locale, key, scope, separator)
40
- key = I18n::Backend::Flatten.normalize_flat_keys(locale, key, scope, separator)
41
- resolve_link(locale, key)
42
- end
43
-
44
- # Store flattened links.
45
- def links
46
- @links ||= Hash.new { |h,k| h[k] = {} }
47
- end
48
-
49
- # Flatten keys for nested Hashes by chaining up keys:
50
- #
51
- # >> { "a" => { "b" => { "c" => "d", "e" => "f" }, "g" => "h" }, "i" => "j"}.wind
52
- # => { "a.b.c" => "d", "a.b.e" => "f", "a.g" => "h", "i" => "j" }
53
- #
54
- def flatten_keys(hash, escape, prev_key=nil, &block)
55
- hash.each_pair do |key, value|
56
- key = escape_default_separator(key) if escape
57
- curr_key = [prev_key, key].compact.join(FLATTEN_SEPARATOR).to_sym
58
- yield curr_key, value
59
- flatten_keys(value, escape, curr_key, &block) if value.is_a?(Hash)
60
- end
61
- end
62
-
63
- # Receives a hash of translations (where the key is a locale and
64
- # the value is another hash) and return a hash with all
65
- # translations flattened.
66
- #
67
- # Nested hashes are included in the flattened hash just if subtree
68
- # is true and Symbols are automatically stored as links.
69
- def flatten_translations(locale, data, escape, subtree)
70
- hash = {}
71
- flatten_keys(data, escape) do |key, value|
72
- if value.is_a?(Hash)
73
- hash[key] = value if subtree
74
- else
75
- store_link(locale, key, value) if value.is_a?(Symbol)
76
- hash[key] = value
77
- end
78
- end
79
- hash
80
- end
81
-
82
- protected
83
-
84
- def store_link(locale, key, link)
85
- links[locale.to_sym][key.to_s] = link.to_s
86
- end
87
-
88
- def resolve_link(locale, key)
89
- key, locale = key.to_s, locale.to_sym
90
- links = self.links[locale]
91
-
92
- if links.key?(key)
93
- links[key]
94
- elsif link = find_link(locale, key)
95
- store_link(locale, key, key.gsub(*link))
96
- else
97
- key
98
- end
99
- end
100
-
101
- def find_link(locale, key) #:nodoc:
102
- links[locale].each do |from, to|
103
- return [from, to] if key[0, from.length] == from
104
- end && nil
105
- end
106
-
107
- def escape_default_separator(key) #:nodoc:
108
- I18n::Backend::Flatten.escape_default_separator(key)
109
- end
110
-
111
- end
112
- end
113
- end