tiny-safe-mod 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (255) hide show
  1. checksums.yaml +7 -0
  2. data/stringex-2.8.6/Gemfile +51 -0
  3. data/stringex-2.8.6/MIT-LICENSE +20 -0
  4. data/stringex-2.8.6/README.md +162 -0
  5. data/stringex-2.8.6/Rakefile +57 -0
  6. data/stringex-2.8.6/VERSION +1 -0
  7. data/stringex-2.8.6/init.rb +3 -0
  8. data/stringex-2.8.6/lib/stringex/acts_as_url/adapter/active_record.rb +23 -0
  9. data/stringex-2.8.6/lib/stringex/acts_as_url/adapter/base.rb +240 -0
  10. data/stringex-2.8.6/lib/stringex/acts_as_url/adapter/data_mapper.rb +61 -0
  11. data/stringex-2.8.6/lib/stringex/acts_as_url/adapter/mongoid.rb +37 -0
  12. data/stringex-2.8.6/lib/stringex/acts_as_url/adapter.rb +26 -0
  13. data/stringex-2.8.6/lib/stringex/acts_as_url.rb +107 -0
  14. data/stringex-2.8.6/lib/stringex/configuration/acts_as_url.rb +50 -0
  15. data/stringex-2.8.6/lib/stringex/configuration/base.rb +58 -0
  16. data/stringex-2.8.6/lib/stringex/configuration/configurator.rb +25 -0
  17. data/stringex-2.8.6/lib/stringex/configuration/string_extensions.rb +20 -0
  18. data/stringex-2.8.6/lib/stringex/configuration.rb +4 -0
  19. data/stringex-2.8.6/lib/stringex/configuration_lite.rb +3 -0
  20. data/stringex-2.8.6/lib/stringex/core_ext.rb +10 -0
  21. data/stringex-2.8.6/lib/stringex/localization/backend/base.rb +13 -0
  22. data/stringex-2.8.6/lib/stringex/localization/backend/i18n.rb +86 -0
  23. data/stringex-2.8.6/lib/stringex/localization/backend/internal.rb +47 -0
  24. data/stringex-2.8.6/lib/stringex/localization/conversion_expressions.rb +154 -0
  25. data/stringex-2.8.6/lib/stringex/localization/converter.rb +129 -0
  26. data/stringex-2.8.6/lib/stringex/localization/default_conversions.rb +89 -0
  27. data/stringex-2.8.6/lib/stringex/localization.rb +112 -0
  28. data/stringex-2.8.6/lib/stringex/rails/railtie.rb +10 -0
  29. data/stringex-2.8.6/lib/stringex/string_extensions.rb +228 -0
  30. data/stringex-2.8.6/lib/stringex/unidecoder.rb +82 -0
  31. data/stringex-2.8.6/lib/stringex/unidecoder_data/x00.yml +257 -0
  32. data/stringex-2.8.6/lib/stringex/unidecoder_data/x01.yml +257 -0
  33. data/stringex-2.8.6/lib/stringex/unidecoder_data/x02.yml +256 -0
  34. data/stringex-2.8.6/lib/stringex/unidecoder_data/x03.yml +256 -0
  35. data/stringex-2.8.6/lib/stringex/unidecoder_data/x04.yml +256 -0
  36. data/stringex-2.8.6/lib/stringex/unidecoder_data/x05.yml +256 -0
  37. data/stringex-2.8.6/lib/stringex/unidecoder_data/x06.yml +256 -0
  38. data/stringex-2.8.6/lib/stringex/unidecoder_data/x07.yml +256 -0
  39. data/stringex-2.8.6/lib/stringex/unidecoder_data/x09.yml +256 -0
  40. data/stringex-2.8.6/lib/stringex/unidecoder_data/x0a.yml +256 -0
  41. data/stringex-2.8.6/lib/stringex/unidecoder_data/x0b.yml +256 -0
  42. data/stringex-2.8.6/lib/stringex/unidecoder_data/x0c.yml +256 -0
  43. data/stringex-2.8.6/lib/stringex/unidecoder_data/x0d.yml +256 -0
  44. data/stringex-2.8.6/lib/stringex/unidecoder_data/x0e.yml +256 -0
  45. data/stringex-2.8.6/lib/stringex/unidecoder_data/x0f.yml +256 -0
  46. data/stringex-2.8.6/lib/stringex/unidecoder_data/x10.yml +256 -0
  47. data/stringex-2.8.6/lib/stringex/unidecoder_data/x11.yml +256 -0
  48. data/stringex-2.8.6/lib/stringex/unidecoder_data/x12.yml +257 -0
  49. data/stringex-2.8.6/lib/stringex/unidecoder_data/x13.yml +256 -0
  50. data/stringex-2.8.6/lib/stringex/unidecoder_data/x14.yml +257 -0
  51. data/stringex-2.8.6/lib/stringex/unidecoder_data/x15.yml +257 -0
  52. data/stringex-2.8.6/lib/stringex/unidecoder_data/x16.yml +256 -0
  53. data/stringex-2.8.6/lib/stringex/unidecoder_data/x17.yml +256 -0
  54. data/stringex-2.8.6/lib/stringex/unidecoder_data/x18.yml +256 -0
  55. data/stringex-2.8.6/lib/stringex/unidecoder_data/x1e.yml +256 -0
  56. data/stringex-2.8.6/lib/stringex/unidecoder_data/x1f.yml +256 -0
  57. data/stringex-2.8.6/lib/stringex/unidecoder_data/x20.yml +256 -0
  58. data/stringex-2.8.6/lib/stringex/unidecoder_data/x21.yml +256 -0
  59. data/stringex-2.8.6/lib/stringex/unidecoder_data/x22.yml +256 -0
  60. data/stringex-2.8.6/lib/stringex/unidecoder_data/x23.yml +256 -0
  61. data/stringex-2.8.6/lib/stringex/unidecoder_data/x24.yml +256 -0
  62. data/stringex-2.8.6/lib/stringex/unidecoder_data/x25.yml +256 -0
  63. data/stringex-2.8.6/lib/stringex/unidecoder_data/x26.yml +256 -0
  64. data/stringex-2.8.6/lib/stringex/unidecoder_data/x27.yml +256 -0
  65. data/stringex-2.8.6/lib/stringex/unidecoder_data/x28.yml +257 -0
  66. data/stringex-2.8.6/lib/stringex/unidecoder_data/x2e.yml +256 -0
  67. data/stringex-2.8.6/lib/stringex/unidecoder_data/x2f.yml +256 -0
  68. data/stringex-2.8.6/lib/stringex/unidecoder_data/x30.yml +256 -0
  69. data/stringex-2.8.6/lib/stringex/unidecoder_data/x31.yml +256 -0
  70. data/stringex-2.8.6/lib/stringex/unidecoder_data/x32.yml +256 -0
  71. data/stringex-2.8.6/lib/stringex/unidecoder_data/x33.yml +256 -0
  72. data/stringex-2.8.6/lib/stringex/unidecoder_data/x4d.yml +256 -0
  73. data/stringex-2.8.6/lib/stringex/unidecoder_data/x4e.yml +257 -0
  74. data/stringex-2.8.6/lib/stringex/unidecoder_data/x4f.yml +257 -0
  75. data/stringex-2.8.6/lib/stringex/unidecoder_data/x50.yml +257 -0
  76. data/stringex-2.8.6/lib/stringex/unidecoder_data/x51.yml +257 -0
  77. data/stringex-2.8.6/lib/stringex/unidecoder_data/x52.yml +257 -0
  78. data/stringex-2.8.6/lib/stringex/unidecoder_data/x53.yml +257 -0
  79. data/stringex-2.8.6/lib/stringex/unidecoder_data/x54.yml +257 -0
  80. data/stringex-2.8.6/lib/stringex/unidecoder_data/x55.yml +257 -0
  81. data/stringex-2.8.6/lib/stringex/unidecoder_data/x56.yml +257 -0
  82. data/stringex-2.8.6/lib/stringex/unidecoder_data/x57.yml +257 -0
  83. data/stringex-2.8.6/lib/stringex/unidecoder_data/x58.yml +257 -0
  84. data/stringex-2.8.6/lib/stringex/unidecoder_data/x59.yml +257 -0
  85. data/stringex-2.8.6/lib/stringex/unidecoder_data/x5a.yml +257 -0
  86. data/stringex-2.8.6/lib/stringex/unidecoder_data/x5b.yml +257 -0
  87. data/stringex-2.8.6/lib/stringex/unidecoder_data/x5c.yml +257 -0
  88. data/stringex-2.8.6/lib/stringex/unidecoder_data/x5d.yml +257 -0
  89. data/stringex-2.8.6/lib/stringex/unidecoder_data/x5e.yml +257 -0
  90. data/stringex-2.8.6/lib/stringex/unidecoder_data/x5f.yml +257 -0
  91. data/stringex-2.8.6/lib/stringex/unidecoder_data/x60.yml +257 -0
  92. data/stringex-2.8.6/lib/stringex/unidecoder_data/x61.yml +257 -0
  93. data/stringex-2.8.6/lib/stringex/unidecoder_data/x62.yml +257 -0
  94. data/stringex-2.8.6/lib/stringex/unidecoder_data/x63.yml +257 -0
  95. data/stringex-2.8.6/lib/stringex/unidecoder_data/x64.yml +257 -0
  96. data/stringex-2.8.6/lib/stringex/unidecoder_data/x65.yml +257 -0
  97. data/stringex-2.8.6/lib/stringex/unidecoder_data/x66.yml +257 -0
  98. data/stringex-2.8.6/lib/stringex/unidecoder_data/x67.yml +257 -0
  99. data/stringex-2.8.6/lib/stringex/unidecoder_data/x68.yml +257 -0
  100. data/stringex-2.8.6/lib/stringex/unidecoder_data/x69.yml +257 -0
  101. data/stringex-2.8.6/lib/stringex/unidecoder_data/x6a.yml +257 -0
  102. data/stringex-2.8.6/lib/stringex/unidecoder_data/x6b.yml +257 -0
  103. data/stringex-2.8.6/lib/stringex/unidecoder_data/x6c.yml +257 -0
  104. data/stringex-2.8.6/lib/stringex/unidecoder_data/x6d.yml +257 -0
  105. data/stringex-2.8.6/lib/stringex/unidecoder_data/x6e.yml +257 -0
  106. data/stringex-2.8.6/lib/stringex/unidecoder_data/x6f.yml +257 -0
  107. data/stringex-2.8.6/lib/stringex/unidecoder_data/x70.yml +257 -0
  108. data/stringex-2.8.6/lib/stringex/unidecoder_data/x71.yml +257 -0
  109. data/stringex-2.8.6/lib/stringex/unidecoder_data/x72.yml +257 -0
  110. data/stringex-2.8.6/lib/stringex/unidecoder_data/x73.yml +257 -0
  111. data/stringex-2.8.6/lib/stringex/unidecoder_data/x74.yml +257 -0
  112. data/stringex-2.8.6/lib/stringex/unidecoder_data/x75.yml +257 -0
  113. data/stringex-2.8.6/lib/stringex/unidecoder_data/x76.yml +257 -0
  114. data/stringex-2.8.6/lib/stringex/unidecoder_data/x77.yml +257 -0
  115. data/stringex-2.8.6/lib/stringex/unidecoder_data/x78.yml +257 -0
  116. data/stringex-2.8.6/lib/stringex/unidecoder_data/x79.yml +257 -0
  117. data/stringex-2.8.6/lib/stringex/unidecoder_data/x7a.yml +257 -0
  118. data/stringex-2.8.6/lib/stringex/unidecoder_data/x7b.yml +257 -0
  119. data/stringex-2.8.6/lib/stringex/unidecoder_data/x7c.yml +257 -0
  120. data/stringex-2.8.6/lib/stringex/unidecoder_data/x7d.yml +257 -0
  121. data/stringex-2.8.6/lib/stringex/unidecoder_data/x7e.yml +257 -0
  122. data/stringex-2.8.6/lib/stringex/unidecoder_data/x7f.yml +257 -0
  123. data/stringex-2.8.6/lib/stringex/unidecoder_data/x80.yml +257 -0
  124. data/stringex-2.8.6/lib/stringex/unidecoder_data/x81.yml +257 -0
  125. data/stringex-2.8.6/lib/stringex/unidecoder_data/x82.yml +257 -0
  126. data/stringex-2.8.6/lib/stringex/unidecoder_data/x83.yml +257 -0
  127. data/stringex-2.8.6/lib/stringex/unidecoder_data/x84.yml +257 -0
  128. data/stringex-2.8.6/lib/stringex/unidecoder_data/x85.yml +257 -0
  129. data/stringex-2.8.6/lib/stringex/unidecoder_data/x86.yml +257 -0
  130. data/stringex-2.8.6/lib/stringex/unidecoder_data/x87.yml +257 -0
  131. data/stringex-2.8.6/lib/stringex/unidecoder_data/x88.yml +257 -0
  132. data/stringex-2.8.6/lib/stringex/unidecoder_data/x89.yml +257 -0
  133. data/stringex-2.8.6/lib/stringex/unidecoder_data/x8a.yml +257 -0
  134. data/stringex-2.8.6/lib/stringex/unidecoder_data/x8b.yml +257 -0
  135. data/stringex-2.8.6/lib/stringex/unidecoder_data/x8c.yml +257 -0
  136. data/stringex-2.8.6/lib/stringex/unidecoder_data/x8d.yml +257 -0
  137. data/stringex-2.8.6/lib/stringex/unidecoder_data/x8e.yml +257 -0
  138. data/stringex-2.8.6/lib/stringex/unidecoder_data/x8f.yml +257 -0
  139. data/stringex-2.8.6/lib/stringex/unidecoder_data/x90.yml +257 -0
  140. data/stringex-2.8.6/lib/stringex/unidecoder_data/x91.yml +257 -0
  141. data/stringex-2.8.6/lib/stringex/unidecoder_data/x92.yml +257 -0
  142. data/stringex-2.8.6/lib/stringex/unidecoder_data/x93.yml +257 -0
  143. data/stringex-2.8.6/lib/stringex/unidecoder_data/x94.yml +257 -0
  144. data/stringex-2.8.6/lib/stringex/unidecoder_data/x95.yml +257 -0
  145. data/stringex-2.8.6/lib/stringex/unidecoder_data/x96.yml +257 -0
  146. data/stringex-2.8.6/lib/stringex/unidecoder_data/x97.yml +257 -0
  147. data/stringex-2.8.6/lib/stringex/unidecoder_data/x98.yml +257 -0
  148. data/stringex-2.8.6/lib/stringex/unidecoder_data/x99.yml +257 -0
  149. data/stringex-2.8.6/lib/stringex/unidecoder_data/x9a.yml +257 -0
  150. data/stringex-2.8.6/lib/stringex/unidecoder_data/x9b.yml +257 -0
  151. data/stringex-2.8.6/lib/stringex/unidecoder_data/x9c.yml +257 -0
  152. data/stringex-2.8.6/lib/stringex/unidecoder_data/x9d.yml +257 -0
  153. data/stringex-2.8.6/lib/stringex/unidecoder_data/x9e.yml +257 -0
  154. data/stringex-2.8.6/lib/stringex/unidecoder_data/x9f.yml +256 -0
  155. data/stringex-2.8.6/lib/stringex/unidecoder_data/xa0.yml +257 -0
  156. data/stringex-2.8.6/lib/stringex/unidecoder_data/xa1.yml +257 -0
  157. data/stringex-2.8.6/lib/stringex/unidecoder_data/xa2.yml +257 -0
  158. data/stringex-2.8.6/lib/stringex/unidecoder_data/xa3.yml +257 -0
  159. data/stringex-2.8.6/lib/stringex/unidecoder_data/xa4.yml +256 -0
  160. data/stringex-2.8.6/lib/stringex/unidecoder_data/xac.yml +257 -0
  161. data/stringex-2.8.6/lib/stringex/unidecoder_data/xad.yml +257 -0
  162. data/stringex-2.8.6/lib/stringex/unidecoder_data/xae.yml +257 -0
  163. data/stringex-2.8.6/lib/stringex/unidecoder_data/xaf.yml +257 -0
  164. data/stringex-2.8.6/lib/stringex/unidecoder_data/xb0.yml +257 -0
  165. data/stringex-2.8.6/lib/stringex/unidecoder_data/xb1.yml +257 -0
  166. data/stringex-2.8.6/lib/stringex/unidecoder_data/xb2.yml +257 -0
  167. data/stringex-2.8.6/lib/stringex/unidecoder_data/xb3.yml +257 -0
  168. data/stringex-2.8.6/lib/stringex/unidecoder_data/xb4.yml +257 -0
  169. data/stringex-2.8.6/lib/stringex/unidecoder_data/xb5.yml +257 -0
  170. data/stringex-2.8.6/lib/stringex/unidecoder_data/xb6.yml +257 -0
  171. data/stringex-2.8.6/lib/stringex/unidecoder_data/xb7.yml +257 -0
  172. data/stringex-2.8.6/lib/stringex/unidecoder_data/xb8.yml +257 -0
  173. data/stringex-2.8.6/lib/stringex/unidecoder_data/xb9.yml +257 -0
  174. data/stringex-2.8.6/lib/stringex/unidecoder_data/xba.yml +257 -0
  175. data/stringex-2.8.6/lib/stringex/unidecoder_data/xbb.yml +257 -0
  176. data/stringex-2.8.6/lib/stringex/unidecoder_data/xbc.yml +257 -0
  177. data/stringex-2.8.6/lib/stringex/unidecoder_data/xbd.yml +257 -0
  178. data/stringex-2.8.6/lib/stringex/unidecoder_data/xbe.yml +257 -0
  179. data/stringex-2.8.6/lib/stringex/unidecoder_data/xbf.yml +257 -0
  180. data/stringex-2.8.6/lib/stringex/unidecoder_data/xc0.yml +257 -0
  181. data/stringex-2.8.6/lib/stringex/unidecoder_data/xc1.yml +257 -0
  182. data/stringex-2.8.6/lib/stringex/unidecoder_data/xc2.yml +257 -0
  183. data/stringex-2.8.6/lib/stringex/unidecoder_data/xc3.yml +257 -0
  184. data/stringex-2.8.6/lib/stringex/unidecoder_data/xc4.yml +257 -0
  185. data/stringex-2.8.6/lib/stringex/unidecoder_data/xc5.yml +257 -0
  186. data/stringex-2.8.6/lib/stringex/unidecoder_data/xc6.yml +257 -0
  187. data/stringex-2.8.6/lib/stringex/unidecoder_data/xc7.yml +257 -0
  188. data/stringex-2.8.6/lib/stringex/unidecoder_data/xc8.yml +257 -0
  189. data/stringex-2.8.6/lib/stringex/unidecoder_data/xc9.yml +257 -0
  190. data/stringex-2.8.6/lib/stringex/unidecoder_data/xca.yml +257 -0
  191. data/stringex-2.8.6/lib/stringex/unidecoder_data/xcb.yml +257 -0
  192. data/stringex-2.8.6/lib/stringex/unidecoder_data/xcc.yml +257 -0
  193. data/stringex-2.8.6/lib/stringex/unidecoder_data/xcd.yml +257 -0
  194. data/stringex-2.8.6/lib/stringex/unidecoder_data/xce.yml +257 -0
  195. data/stringex-2.8.6/lib/stringex/unidecoder_data/xcf.yml +257 -0
  196. data/stringex-2.8.6/lib/stringex/unidecoder_data/xd0.yml +257 -0
  197. data/stringex-2.8.6/lib/stringex/unidecoder_data/xd1.yml +257 -0
  198. data/stringex-2.8.6/lib/stringex/unidecoder_data/xd2.yml +257 -0
  199. data/stringex-2.8.6/lib/stringex/unidecoder_data/xd3.yml +257 -0
  200. data/stringex-2.8.6/lib/stringex/unidecoder_data/xd4.yml +257 -0
  201. data/stringex-2.8.6/lib/stringex/unidecoder_data/xd5.yml +257 -0
  202. data/stringex-2.8.6/lib/stringex/unidecoder_data/xd6.yml +257 -0
  203. data/stringex-2.8.6/lib/stringex/unidecoder_data/xd7.yml +256 -0
  204. data/stringex-2.8.6/lib/stringex/unidecoder_data/xf9.yml +257 -0
  205. data/stringex-2.8.6/lib/stringex/unidecoder_data/xfa.yml +256 -0
  206. data/stringex-2.8.6/lib/stringex/unidecoder_data/xfb.yml +257 -0
  207. data/stringex-2.8.6/lib/stringex/unidecoder_data/xfc.yml +257 -0
  208. data/stringex-2.8.6/lib/stringex/unidecoder_data/xfd.yml +256 -0
  209. data/stringex-2.8.6/lib/stringex/unidecoder_data/xfe.yml +257 -0
  210. data/stringex-2.8.6/lib/stringex/unidecoder_data/xff.yml +257 -0
  211. data/stringex-2.8.6/lib/stringex/version.rb +8 -0
  212. data/stringex-2.8.6/lib/stringex.rb +17 -0
  213. data/stringex-2.8.6/lib/stringex_lite.rb +15 -0
  214. data/stringex-2.8.6/locales/da.yml +76 -0
  215. data/stringex-2.8.6/locales/de.yml +77 -0
  216. data/stringex-2.8.6/locales/en.yml +69 -0
  217. data/stringex-2.8.6/locales/fr.yml +72 -0
  218. data/stringex-2.8.6/locales/nb.yml +76 -0
  219. data/stringex-2.8.6/locales/nl.yml +69 -0
  220. data/stringex-2.8.6/locales/no.yml +76 -0
  221. data/stringex-2.8.6/locales/pl.yml +88 -0
  222. data/stringex-2.8.6/locales/pt-BR.yml +69 -0
  223. data/stringex-2.8.6/locales/ru.yml +69 -0
  224. data/stringex-2.8.6/locales/sv.yml +76 -0
  225. data/stringex-2.8.6/stringex.gemspec +290 -0
  226. data/stringex-2.8.6/test/performance/localization_performance_test.rb +24 -0
  227. data/stringex-2.8.6/test/test_helper.rb +2 -0
  228. data/stringex-2.8.6/test/unit/acts_as_url/adapter/activerecord.rb +71 -0
  229. data/stringex-2.8.6/test/unit/acts_as_url/adapter/datamapper.rb +83 -0
  230. data/stringex-2.8.6/test/unit/acts_as_url/adapter/mongoid.rb +82 -0
  231. data/stringex-2.8.6/test/unit/acts_as_url_configuration_test.rb +51 -0
  232. data/stringex-2.8.6/test/unit/acts_as_url_integration_test.rb +425 -0
  233. data/stringex-2.8.6/test/unit/localization/da_test.rb +118 -0
  234. data/stringex-2.8.6/test/unit/localization/de_test.rb +118 -0
  235. data/stringex-2.8.6/test/unit/localization/default_test.rb +115 -0
  236. data/stringex-2.8.6/test/unit/localization/en_test.rb +118 -0
  237. data/stringex-2.8.6/test/unit/localization/fr_test.rb +118 -0
  238. data/stringex-2.8.6/test/unit/localization/nl_test.rb +118 -0
  239. data/stringex-2.8.6/test/unit/localization/pl_test.rb +118 -0
  240. data/stringex-2.8.6/test/unit/localization/pt_br_test.rb +118 -0
  241. data/stringex-2.8.6/test/unit/localization/ru_test.rb +130 -0
  242. data/stringex-2.8.6/test/unit/localization/sv_test.rb +118 -0
  243. data/stringex-2.8.6/test/unit/localization_18n_failure_test.rb +40 -0
  244. data/stringex-2.8.6/test/unit/localization_test.rb +162 -0
  245. data/stringex-2.8.6/test/unit/string_extensions_configuration_test.rb +17 -0
  246. data/stringex-2.8.6/test/unit/string_extensions_test.rb +321 -0
  247. data/stringex-2.8.6/test/unit/unicode_point_suite/basic_greek_test.rb +113 -0
  248. data/stringex-2.8.6/test/unit/unicode_point_suite/basic_latin_test.rb +144 -0
  249. data/stringex-2.8.6/test/unit/unicode_point_suite/codepoint_test_helper.rb +32 -0
  250. data/stringex-2.8.6/test/unit/unidecoder/bad_localization.yml +1 -0
  251. data/stringex-2.8.6/test/unit/unidecoder/localization.yml +4 -0
  252. data/stringex-2.8.6/test/unit/unidecoder_test.rb +104 -0
  253. data/stringex-2.8.6/test/unit/version_test.rb +12 -0
  254. data/tiny-safe-mod.gemspec +11 -0
  255. metadata +293 -0
@@ -0,0 +1,321 @@
1
+ # encoding: utf-8
2
+
3
+ require "test_helper"
4
+ require "stringex"
5
+
6
+ if RUBY_VERSION.to_f < 1.9
7
+ $KCODE = "U"
8
+ end
9
+
10
+ # Try loading RedCloth but it's okay if it's not there
11
+ begin
12
+ gem 'RedCloth'
13
+ rescue LoadError
14
+ puts
15
+ puts ">> Could not load RedCloth. String#to_html was not tested."
16
+ puts ">> Please gem install RedCloth if you'd like to use this functionality."
17
+ puts
18
+ end
19
+
20
+ class StringExtensionsTest < Test::Unit::TestCase
21
+ def setup
22
+ Stringex::Localization.reset!
23
+ end
24
+
25
+ def test_to_url
26
+ {
27
+ "<p>This has 100% too much <em>formatting</em></p>" =>
28
+ "this-has-100-percent-too-much-formatting",
29
+ "Tea &amp; crumpets &amp; <strong>cr&ecirc;pes</strong> for me!" =>
30
+ "tea-and-crumpets-and-crepes-for-me",
31
+ "The Suspense... Is... Killing Me" =>
32
+ "the-suspense-dot-dot-dot-is-dot-dot-dot-killing-me",
33
+ "How to use attr_accessible and attr_protected" =>
34
+ "how-to-use-attr-accessible-and-attr-protected",
35
+ "I'm just making sure there's nothing wrong with things!" =>
36
+ "im-just-making-sure-theres-nothing-wrong-with-things",
37
+ "foo = bar and bar=foo" =>
38
+ "foo-equals-bar-and-bar-equals-foo",
39
+ "Period.period" =>
40
+ "period-dot-period",
41
+ "Will…This Work?" =>
42
+ "will-dot-dot-dot-this-work",
43
+ "We check the D.N.A for matches" =>
44
+ "we-check-the-dna-for-matches",
45
+ "We check the D.N.A. for matches" =>
46
+ "we-check-the-dna-for-matches",
47
+ "Go to the Y.M.C.America" =>
48
+ "go-to-the-ymcamerica",
49
+ "He shops at J.C. Penney" =>
50
+ "he-shops-at-jc-penney",
51
+ "¼ pound with cheese" =>
52
+ "one-fourth-pound-with-cheese",
53
+ "Will's Ferrel" =>
54
+ "wills-ferrel",
55
+ "Капитал" =>
56
+ "kapital",
57
+ "Ελλάδα" =>
58
+ "ellada",
59
+ "中文" =>
60
+ "zhong-wen",
61
+ "Paul Cézanne" =>
62
+ "paul-cezanne",
63
+ "21'17ʼ51" =>
64
+ "21-17-51",
65
+ "ITCZ÷1 (21°17ʼ51.78”N / 89°35ʼ28.18”O / 26-04-08 / 09:00 am)" =>
66
+ "itcz-divided-by-1-21-degrees-17-51-dot-78-n-slash-89-degrees-35-28-dot-18-o-slash-26-04-08-slash-09-00-am",
67
+ "/" =>
68
+ "slash",
69
+ "私はガラスを食べられます。それは私を傷つけません。" =>
70
+ "si-hagarasuwoshi-beraremasu-sorehasi-woshang-tukemasen",
71
+ "ǝ is a magical string" =>
72
+ "at-is-a-magical-string",
73
+ "either | or" =>
74
+ "either-or",
75
+ "La Maison d`Uliva" =>
76
+ "la-maison-duliva",
77
+ "カッページ・テラスに日系カフェ&バー、店内にDJブースも - シンガポール経済新聞" =>
78
+ "katupeziterasuniri-xi-kahue-and-ba-dian-nei-nidjbusumo-singaporujing-ji-xin-wen",
79
+ "AVアンプ、ホームシアターシステム、スピーカーシステム等" =>
80
+ "avanpu-homusiatasisutemu-supikasisutemudeng",
81
+ "У лукоморья дуб зеленый" =>
82
+ "u-lukomoria-dub-zielienyi",
83
+ "Here are some {braces}" =>
84
+ "here-are-some-braces",
85
+ "$1,000" =>
86
+ "1000-dollars",
87
+ "«zut alors»" =>
88
+ "zut-alors",
89
+ "Rabbits aren't real" =>
90
+ "rabbits-arent-real",
91
+ "R$ isn't R" =>
92
+ "reais-isnt-r",
93
+ "Last Friday Night (T.G.I.F.)" =>
94
+ "last-friday-night-tgif",
95
+ "foo` bar" =>
96
+ "foo-bar",
97
+ "foo~ bar" =>
98
+ "foo-bar"
99
+ }.each do |html, plain|
100
+ assert_equal plain, html.to_url
101
+ end
102
+ end
103
+
104
+ def test_to_url_with_danish_characters
105
+ Stringex::Localization.locale = :da
106
+ assert_equal "roedgroed-med-floede", "Rødgrød med fløde".to_url
107
+ end
108
+
109
+ def test_to_url_with_excludes
110
+ assert_equal "So Fucking Special", "So Fucking Special".to_url(:exclude => "So Fucking Special")
111
+ end
112
+
113
+ def test_to_url_without_forcing_downcase
114
+ assert_equal "I-have-CAPS", "I have CAPS".to_url(:force_downcase => false)
115
+ end
116
+
117
+ def test_to_url_with_limit
118
+ assert_equal "I am much too long".to_url(:limit => 13), "i-am-much-too"
119
+ end
120
+
121
+ def test_to_url_with_alternate_whitespace_replacement
122
+ assert_equal "under_scores", "Under Scores".to_url(:replace_whitespace_with => "_")
123
+ end
124
+
125
+ def test_to_url_with_alternate_whitespace_replacement_and_with_limit_and_with_truncate_words_disabled
126
+ assert_equal "i_am_much", "I am much too long".to_url(:replace_whitespace_with => "_", :limit => 12, :truncate_words => false)
127
+ end
128
+
129
+ def test_remove_formatting
130
+ {
131
+ "<p>This has 100% too much <em>formatting</em></p>" =>
132
+ "This has 100 percent too much formatting",
133
+ "Tea &amp; crumpets &amp; <strong>cr&ecirc;pes</strong> for me!" =>
134
+ "Tea and crumpets and crepes for me"
135
+ }.each do |html, plain|
136
+ assert_equal plain, html.remove_formatting
137
+ end
138
+ end
139
+
140
+ def test_strip_html_tags
141
+ {
142
+ "<h1><em>This</em> is good but <strong>that</strong> is better</h1>" =>
143
+ "This is good but that is better",
144
+ "<p>This is invalid XHTML but valid HTML, right?" =>
145
+ "This is invalid XHTML but valid HTML, right?",
146
+ "<p class='foo'>Everything goes!</p>" => "Everything goes!",
147
+ "<ol>This is completely invalid and just plain wrong</p>" =>
148
+ "This is completely invalid and just plain wrong"
149
+ }.each do |html, plain|
150
+ assert_equal plain, html.strip_html_tags
151
+ end
152
+ end
153
+
154
+ def test_convert_accented_html_entities
155
+ {
156
+ "&aring;" => "a",
157
+ "&egrave;" => "e",
158
+ "&icirc;" => "i",
159
+ "&Oslash;" => "O",
160
+ "&uuml;" => "u",
161
+ "&Ntilde;" => "N",
162
+ "&ccedil;" => "c"
163
+ }.each do |entitied, plain|
164
+ assert_equal plain, entitied.convert_accented_html_entities
165
+ end
166
+ end
167
+
168
+ def test_localized_vulgar_fractions_conversion
169
+ Stringex::Localization.backend = :internal
170
+ Stringex::Localization.store_translations :da, :vulgar_fractions, {
171
+ :one_fourth => "en fjerdedel",
172
+ :half => "en halv"
173
+ }
174
+ Stringex::Localization.locale = :da
175
+
176
+ {
177
+ "&frac14;" => "en fjerdedel",
178
+ "½" => "en halv"
179
+ }.each do |entitied, plain|
180
+ assert_equal plain, entitied.convert_vulgar_fractions
181
+ end
182
+ end
183
+
184
+ def test_localized_html_entities_conversion
185
+ Stringex::Localization.backend = :internal
186
+ Stringex::Localization.store_translations :de, :html_entities, {
187
+ :amp => "und",
188
+ :ellipsis => " prik prik prik",
189
+ :frac14 => "en fjerdedel"
190
+ }
191
+ Stringex::Localization.locale = :de
192
+
193
+ {
194
+ "Tea &amp; Sympathy" => "Tea und Sympathy",
195
+ "To be continued&#8230;" => "To be continued prik prik prik",
196
+ "Det var til &frac14; af prisen" => "Det var til en fjerdedel af prisen"
197
+ }.each do |entitied, plain|
198
+ assert_equal plain, entitied.convert_miscellaneous_html_entities
199
+ end
200
+ end
201
+
202
+ def test_convert_smart_punctuation
203
+ {
204
+ "“smart quotes”" => '"smart quotes"',
205
+ "‘dumb quotes’" => "'dumb quotes'",
206
+ "I love you, but…" => "I love you, but...",
207
+ }.each do |smart, plain|
208
+ assert_equal plain, smart.convert_smart_punctuation
209
+ end
210
+ end
211
+
212
+ def test_localized_character_conversions
213
+ Stringex::Localization.backend = :internal
214
+ Stringex::Localization.store_translations :de, :characters, {
215
+ "and" => "und",
216
+ :percent => "procent"
217
+ }
218
+ Stringex::Localization.locale = :de
219
+
220
+ {
221
+ "ich & dich" => "ich und dich",
222
+ "det var 100% godt" => "det var 100 procent godt"
223
+ }.each do |misc, plain|
224
+ assert_equal plain, misc.convert_miscellaneous_characters
225
+ end
226
+ end
227
+
228
+ def test_replace_whitespace
229
+ {
230
+ "this has too much space" => "this has too much space",
231
+ "\t\tThis is merely formatted with superfluous whitespace\n" =>
232
+ " This is merely formatted with superfluous whitespace "
233
+ }.each do |whitespaced, plain|
234
+ assert_equal plain, whitespaced.replace_whitespace
235
+ end
236
+
237
+ assert_equal "now-with-more-hyphens", "now with more hyphens".replace_whitespace("-")
238
+ end
239
+
240
+ def test_collapse
241
+ {
242
+ "too much space" => "too much space",
243
+ " at the beginning" => "at the beginning"
244
+ }.each do |uncollapsed, plain|
245
+ assert_equal plain, uncollapsed.collapse
246
+ end
247
+
248
+ assert_equal "now-with-hyphens", "----now---------with-hyphens--------".collapse("-")
249
+ end
250
+
251
+ def test_empty_translations
252
+ Stringex::Localization.backend = :internal
253
+ Stringex::Localization.store_translations :de, :characters, {
254
+ :star => "",
255
+ :percent => "prozent"
256
+ }
257
+ Stringex::Localization.locale = :de
258
+
259
+ assert_equal "foobar ist 100 prozent gut", "foo*bar ist 100% gut".convert_miscellaneous_characters
260
+ end
261
+
262
+ def test_overriding_to_ascii_allows_utf8_urls
263
+ String.class_eval do
264
+ alias :old_to_ascii :to_ascii
265
+
266
+ def to_ascii
267
+ self
268
+ end
269
+ end
270
+
271
+ {
272
+ "مصدر أمني: مجهولون يطلقون «خرطوش» على متظاهرين بمترو عزبة النخل وإصابة 16" =>
273
+ "مصدر-أمني-مجهولون-يطلقون-«خرطوش»-على-متظاهرين-بمترو-عزبة-النخل-وإصابة-16",
274
+ "c'est ça" =>
275
+ "cest-ça",
276
+ "la muñeca" =>
277
+ "la-muñeca"
278
+ }.each do |original, converted|
279
+ assert_equal converted, original.to_url
280
+ end
281
+ ensure
282
+ String.class_eval do
283
+ remove_method :to_ascii
284
+
285
+ def to_ascii
286
+ old_to_ascii
287
+ end
288
+ end
289
+ end
290
+
291
+ def test_remove_nonreadable_characters
292
+ cases = { "Jörg Immendor\u0014. Les théâtres" => "jorg-immendor-les-theatres",
293
+ }
294
+ cases.each do |plain, converted|
295
+ assert_equal converted, plain.to_url
296
+ end
297
+ end
298
+
299
+ if defined?(RedCloth)
300
+ def test_to_html
301
+ {
302
+ "h1. A Solution" => "<h1>A Solution</h1>",
303
+ "I hated wrapping textilize around a string.\n\nIt always felt dirty." =>
304
+ "<p>I hated wrapping textilize around a string.</p>\n<p>It always felt dirty.</p>",
305
+ "I think _this_ is awesome" => "<p>I think <em>this</em> is awesome</p>",
306
+ "Um... _*really*_, man" => "<p>Um&#8230; <em><strong>really</strong></em>, man</p>"
307
+ }.each do |plain, html|
308
+ assert_equal html, plain.to_html
309
+ end
310
+ end
311
+
312
+ def test_to_html_lite
313
+ {
314
+ "I have no pee on me" => "I have no pee on me",
315
+ "But I _do_ get Textile!" => "But I <em>do</em> get Textile!"
316
+ }.each do |plain, html|
317
+ assert_equal html, plain.to_html(:lite)
318
+ end
319
+ end
320
+ end
321
+ end
@@ -0,0 +1,113 @@
1
+ # encoding: UTF-8
2
+
3
+ require "test/unit"
4
+ require "stringex"
5
+ require File.join(File.expand_path(File.dirname(__FILE__)), "codepoint_test_helper.rb")
6
+ include CodepointTestHelper
7
+
8
+ class BasicGreekTest < Test::Unit::TestCase
9
+ # This test suite is just regression test and debugging
10
+ # to better transliterate the Basic Latin Unicode codepoints
11
+ #
12
+ # http://unicode.org/charts/
13
+ # http://unicode.org/charts/PDF/U0000.pdf
14
+
15
+ # NOTE: I can't figure out how to test control characters.
16
+ # Get weird results trying to pack them to unicode.
17
+
18
+ def test_greek_letters
19
+ {
20
+ "Α" => "A",
21
+ "Ά" => "A",
22
+ "Β" => "B",
23
+ "Γ" => "G",
24
+ "Δ" => "D",
25
+ "Ε" => "E",
26
+ "Έ" => "E",
27
+ "Ζ" => "Z",
28
+ "Η" => "H",
29
+ "Θ" => "Th",
30
+ "Ι" => "I",
31
+ "Ί" => "I",
32
+ "Ϊ" => "I",
33
+ "Κ" => "K",
34
+ "Λ" => "L",
35
+ "Μ" => "M",
36
+ "Ν" => "N",
37
+ "Ξ" => "Ks",
38
+ "Ο" => "O",
39
+ "Ό" => "O",
40
+ "Π" => "P",
41
+ "Ρ" => "R",
42
+ "Σ" => "S",
43
+ "Τ" => "T",
44
+ "Υ" => "Y",
45
+ "Ϋ" => "Y",
46
+ "Ύ" => "Y",
47
+ "Φ" => "Ph",
48
+ "Χ" => "X",
49
+ "Ψ" => "Ps",
50
+ "Ω" => "O",
51
+ "Ώ" => "O",
52
+ "α" => "a",
53
+ "ά" => "a",
54
+ "β" => "b",
55
+ "γ" => "g",
56
+ "δ" => "d",
57
+ "ε" => "e",
58
+ "έ" => "e",
59
+ "ζ" => "z",
60
+ "η" => "i",
61
+ "ή" => "i",
62
+ "θ" => "th",
63
+ "ι" => "i",
64
+ "ί" => "i",
65
+ "ϊ" => "i",
66
+ "ΐ" => "i",
67
+ "κ" => "k",
68
+ "λ" => "l",
69
+ "μ" => "m",
70
+ "ν" => "n",
71
+ "ξ" => "ks",
72
+ "ο" => "o",
73
+ "ό" => "o",
74
+ "π" => "p",
75
+ "ρ" => "r",
76
+ "σ" => "s",
77
+ "ς" => "s",
78
+ "τ" => "t",
79
+ "υ" => "u",
80
+ "ύ" => "u",
81
+ "ϋ" => "u",
82
+ "ΰ" => "u",
83
+ "φ" => "ph",
84
+ "χ" => "x",
85
+ "ψ" => "ps",
86
+ "ω" => "o",
87
+ "ώ" => "o"
88
+ }.each do |letter, ascii|
89
+ assert_equal letter.to_ascii, ascii
90
+ end
91
+ end
92
+
93
+
94
+ def test_greek_words
95
+ {
96
+ "Καλημέρα" => "Kalimera",
97
+ "Προϊόν" => "Proion",
98
+ "Θαλασσογραφία" => "Thalassographia",
99
+ "Να μας πάρεις μακριά" => "Na mas pareis makria",
100
+ "να μας πας στα πέρα μέρη" => "na mas pas sta pera meri",
101
+ "φύσα θάλασσα πλατιά" => "phusa thalassa platia",
102
+ "φύσα αγέρι φύσα αγέρι" => "phusa ageri phusa ageri",
103
+ "Αν θέλεις να λέγεσαι άνθρωπος" => "An theleis na legesai anthropos",
104
+ "δεν θα πάψεις ούτε στιγμή ν΄αγωνίζεσαι για την ειρήνη και" => "den tha papseis oute stigmi nagonizesai gia tin eirini kai",
105
+ "για το δίκαιο." => "gia to dikaio.",
106
+ "Θα βγείς στους δρόμους, θα φωνάξεις, τα χείλια σου θα" => "Tha bgeis stous dromous, tha phonakseis, ta xeilia sou tha",
107
+ "ματώσουν απ΄τις φωνές" => "matosoun aptis phones",
108
+ "το πρόσωπό σου θα ματώσει από τις σφαίρες – μα ούτε βήμα πίσω." => "to prosopo sou tha matosei apo tis sphaires -- ma oute bima piso.",
109
+ }.each do |letter, ascii|
110
+ assert_equal letter.to_ascii, ascii
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,144 @@
1
+ # encoding: UTF-8
2
+
3
+ require "test/unit"
4
+ require "stringex"
5
+ require File.join(File.expand_path(File.dirname(__FILE__)), "codepoint_test_helper.rb")
6
+ include CodepointTestHelper
7
+
8
+ class BasicLatinTest < Test::Unit::TestCase
9
+ # This test suite is just regression test and debugging
10
+ # to better transliterate the Basic Latin Unicode codepoints
11
+ #
12
+ # http://unicode.org/charts/
13
+ # http://unicode.org/charts/PDF/U0000.pdf
14
+
15
+ # NOTE: I can't figure out how to test control characters.
16
+ # Get weird results trying to pack them to unicode.
17
+
18
+ def test_spaces
19
+ assert_equal_encoded " ", %w{0020 00a0}
20
+ assert_equal_encoded "", %w{200b 2060}
21
+ end
22
+
23
+ def test_exclamation_marks
24
+ assert_equal_encoded "!", %w{0021 2762}
25
+ assert_equal_encoded "!!", "203c"
26
+ assert_equal_encoded "", "00a1"
27
+ assert_equal_encoded "?!", "203d"
28
+ end
29
+
30
+ def test_quotation_marks
31
+ assert_equal_encoded "\"", %w{0022 02ba 2033 3003}
32
+ end
33
+
34
+ def test_apostrophes
35
+ assert_equal_encoded "'", %w{0027 02b9 02bc 02c8 2032}
36
+ end
37
+
38
+ def test_asterisks
39
+ assert_equal_encoded "*", %w{002a 066d 204e 2217 26b9 2731}
40
+ end
41
+
42
+ def test_commas
43
+ assert_equal_encoded ",", %w{002c 060c}
44
+ end
45
+
46
+ def test_periods
47
+ assert_equal_encoded ".", %w{002e 06d4}
48
+ end
49
+
50
+ def test_hyphens
51
+ assert_equal_encoded "-", %w{002d 2010 2011 2012 2212}
52
+ end
53
+
54
+ def test_endash
55
+ assert_equal_encoded "--", %w{2013 2015}
56
+ end
57
+
58
+ def test_emdash
59
+ assert_equal_encoded "---", %w{2014}
60
+ end
61
+
62
+ def test_dotleader
63
+ assert_equal_encoded "..", %w{2025}
64
+ end
65
+
66
+ def test_ellipsis
67
+ assert_equal_encoded "...", %w{2026}
68
+ end
69
+
70
+ def test_slashes
71
+ assert_equal_encoded "/", %w{002f 2044 2215}
72
+ assert_equal_encoded "\\", %w{005c 2216}
73
+ end
74
+
75
+ def test_colons
76
+ assert_equal_encoded ":", %w{003a 2236}
77
+ end
78
+
79
+ def test_semicolons
80
+ assert_equal_encoded ";", %w{003b 061b}
81
+ end
82
+
83
+ def test_less_thans
84
+ assert_equal_encoded "<", %w{003c 2039 2329 27e8 3008}
85
+ end
86
+
87
+ def test_equals
88
+ assert_equal_encoded "=", "003d"
89
+ end
90
+
91
+ def test_greater_thans
92
+ assert_equal_encoded ">", %w{003e 203a 232a 27e9 3009}
93
+ end
94
+
95
+ def test_question_marks
96
+ assert_equal_encoded "?", %w{003f 061f}
97
+ assert_equal_encoded "", "00bf"
98
+ assert_equal_encoded "?!", %w{203d 2048}
99
+ assert_equal_encoded "!?", "2049"
100
+ end
101
+
102
+ def test_circumflexes
103
+ assert_equal_encoded "^", %w{005e 2038 2303}
104
+ end
105
+
106
+ def test_underscores
107
+ assert_equal_encoded "_", %w{005f 02cd 2017}
108
+ end
109
+
110
+ def test_grave_accents
111
+ assert_equal_encoded "'", %w{02cb 2035}
112
+ # Ascii grave accent should remain as ascii!
113
+ assert_equal_encoded "`", "0060"
114
+ end
115
+
116
+ def test_bars
117
+ assert_equal_encoded "|", %w{007c 2223 2758}
118
+ end
119
+
120
+ def test_tildes
121
+ assert_equal_encoded "~", %w{007e 02dc 2053 223c ff5e}
122
+ end
123
+
124
+ def test_related_letters
125
+ {
126
+ "B" => "212c",
127
+ "C" => %w{2102 212d},
128
+ "E" => %w{2107 2130},
129
+ "F" => "2131",
130
+ "H" => %w{210b 210c 210d},
131
+ "I" => %w{0130 0406 04c0 2110 2111 2160},
132
+ "K" => "212a",
133
+ "L" => "2112",
134
+ "M" => "2133",
135
+ "N" => "2115",
136
+ "P" => "2119",
137
+ "Q" => "211a",
138
+ "R" => %w{211b 211c 211d},
139
+ "Z" => %w{2124 2128}
140
+ }.each do |expected, encode_mes|
141
+ assert_equal_encoded expected, encode_mes
142
+ end
143
+ end
144
+ end
@@ -0,0 +1,32 @@
1
+ # encoding: UTF-8
2
+
3
+ # 100% shorthand
4
+ module CodepointTestHelper
5
+ def assert_equal_encoded(expected, encode_mes)
6
+ # Killing a duck because Ruby 1.9 doesn't mix Enumerable into String
7
+ encode_mes = [encode_mes] if encode_mes.is_a?(String)
8
+ encode_mes.each do |encode_me|
9
+ encoded = encode(encode_me)
10
+ actual = encoded.to_ascii
11
+ if expected == actual
12
+ # Let's not retest it
13
+ assert true
14
+ else
15
+ message = "<#{expected.inspect}> expected but was\n<#{actual.inspect}>\n"
16
+ message << " defined in #{Stringex::Unidecoder.in_yaml_file(encoded)}"
17
+ reporting_class = defined?(Test::Unit::AssertionFailedError) ?
18
+ Test::Unit::AssertionFailedError : ActiveSupport::TestCase::Assertion
19
+ raise reporting_class.new(message)
20
+ end
21
+ end
22
+ end
23
+
24
+ private
25
+ def encode(codepoint)
26
+ Stringex::Unidecoder.encode(codepoint)
27
+ end
28
+
29
+ def which_yaml(codepoint)
30
+ Stringex::Unidecoder.in_yaml_file(encode(codepoint))
31
+ end
32
+ end
@@ -0,0 +1 @@
1
+ Anything not correct
@@ -0,0 +1,4 @@
1
+ en:
2
+ é: ee
3
+ xx:
4
+ é: xx