thorero 0.9.4.4 → 0.9.4.5

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 (298) hide show
  1. data/LICENSE +1 -1
  2. data/README +21 -0
  3. data/Rakefile +275 -108
  4. data/TODO +0 -0
  5. data/bin/merb +12 -0
  6. data/bin/merb-specs +5 -0
  7. data/docs/bootloading.dox +58 -0
  8. data/docs/documentation_standards +40 -0
  9. data/docs/merb-core-call-stack-diagram.mmap +0 -0
  10. data/docs/merb-core-call-stack-diagram.pdf +0 -0
  11. data/docs/merb-core-call-stack-diagram.png +0 -0
  12. data/docs/new_render_api +51 -0
  13. data/lib/merb-core.rb +603 -0
  14. data/lib/merb-core/autoload.rb +32 -0
  15. data/lib/merb-core/bootloader.rb +708 -0
  16. data/lib/merb-core/config.rb +303 -0
  17. data/lib/merb-core/constants.rb +43 -0
  18. data/lib/merb-core/controller/abstract_controller.rb +578 -0
  19. data/lib/merb-core/controller/exceptions.rb +302 -0
  20. data/lib/merb-core/controller/merb_controller.rb +256 -0
  21. data/lib/merb-core/controller/mime.rb +106 -0
  22. data/lib/merb-core/controller/mixins/authentication.rb +87 -0
  23. data/lib/merb-core/controller/mixins/controller.rb +290 -0
  24. data/lib/merb-core/controller/mixins/render.rb +481 -0
  25. data/lib/merb-core/controller/mixins/responder.rb +472 -0
  26. data/lib/merb-core/controller/template.rb +254 -0
  27. data/lib/merb-core/core_ext.rb +8 -0
  28. data/lib/merb-core/core_ext/kernel.rb +319 -0
  29. data/lib/merb-core/dispatch/cookies.rb +91 -0
  30. data/lib/merb-core/dispatch/dispatcher.rb +278 -0
  31. data/lib/merb-core/dispatch/exceptions.html.erb +303 -0
  32. data/lib/merb-core/dispatch/request.rb +603 -0
  33. data/lib/merb-core/dispatch/router.rb +179 -0
  34. data/lib/merb-core/dispatch/router/behavior.rb +867 -0
  35. data/lib/merb-core/dispatch/router/cached_proc.rb +52 -0
  36. data/lib/merb-core/dispatch/router/route.rb +321 -0
  37. data/lib/merb-core/dispatch/session.rb +78 -0
  38. data/lib/merb-core/dispatch/session/cookie.rb +168 -0
  39. data/lib/merb-core/dispatch/session/memcached.rb +184 -0
  40. data/lib/merb-core/dispatch/session/memory.rb +241 -0
  41. data/lib/merb-core/dispatch/worker.rb +28 -0
  42. data/lib/merb-core/gem_ext/erubis.rb +77 -0
  43. data/lib/{extlib → merb-core}/logger.rb +2 -2
  44. data/lib/merb-core/plugins.rb +59 -0
  45. data/lib/merb-core/rack.rb +21 -0
  46. data/lib/merb-core/rack/adapter.rb +44 -0
  47. data/lib/merb-core/rack/adapter/ebb.rb +25 -0
  48. data/lib/merb-core/rack/adapter/evented_mongrel.rb +26 -0
  49. data/lib/merb-core/rack/adapter/fcgi.rb +17 -0
  50. data/lib/merb-core/rack/adapter/irb.rb +118 -0
  51. data/lib/merb-core/rack/adapter/mongrel.rb +26 -0
  52. data/lib/merb-core/rack/adapter/runner.rb +28 -0
  53. data/lib/merb-core/rack/adapter/swiftiplied_mongrel.rb +26 -0
  54. data/lib/merb-core/rack/adapter/thin.rb +39 -0
  55. data/lib/merb-core/rack/adapter/thin_turbo.rb +24 -0
  56. data/lib/merb-core/rack/adapter/webrick.rb +36 -0
  57. data/lib/merb-core/rack/application.rb +18 -0
  58. data/lib/merb-core/rack/handler/mongrel.rb +97 -0
  59. data/lib/merb-core/rack/middleware.rb +26 -0
  60. data/lib/merb-core/rack/middleware/path_prefix.rb +31 -0
  61. data/lib/merb-core/rack/middleware/profiler.rb +19 -0
  62. data/lib/merb-core/rack/middleware/static.rb +45 -0
  63. data/lib/merb-core/server.rb +252 -0
  64. data/lib/merb-core/tasks/audit.rake +68 -0
  65. data/lib/merb-core/tasks/merb.rb +1 -0
  66. data/lib/merb-core/tasks/merb_rake_helper.rb +12 -0
  67. data/lib/merb-core/test.rb +11 -0
  68. data/lib/merb-core/test/helpers.rb +9 -0
  69. data/lib/merb-core/test/helpers/controller_helper.rb +8 -0
  70. data/lib/merb-core/test/helpers/multipart_request_helper.rb +175 -0
  71. data/lib/merb-core/test/helpers/request_helper.rb +344 -0
  72. data/lib/merb-core/test/helpers/route_helper.rb +33 -0
  73. data/lib/merb-core/test/helpers/view_helper.rb +121 -0
  74. data/lib/merb-core/test/matchers.rb +9 -0
  75. data/lib/merb-core/test/matchers/controller_matchers.rb +319 -0
  76. data/lib/merb-core/test/matchers/route_matchers.rb +136 -0
  77. data/lib/merb-core/test/matchers/view_matchers.rb +335 -0
  78. data/lib/merb-core/test/run_specs.rb +47 -0
  79. data/lib/merb-core/test/tasks/spectasks.rb +68 -0
  80. data/lib/merb-core/test/test_ext/hpricot.rb +32 -0
  81. data/lib/merb-core/test/test_ext/object.rb +14 -0
  82. data/lib/merb-core/test/test_ext/string.rb +14 -0
  83. data/lib/merb-core/vendor/facets.rb +2 -0
  84. data/lib/merb-core/vendor/facets/dictionary.rb +433 -0
  85. data/lib/merb-core/vendor/facets/inflect.rb +345 -0
  86. data/lib/merb-core/version.rb +11 -0
  87. data/spec/private/config/adapter_spec.rb +32 -0
  88. data/spec/private/config/config_spec.rb +202 -0
  89. data/spec/private/config/environment_spec.rb +13 -0
  90. data/spec/private/config/spec_helper.rb +1 -0
  91. data/spec/private/core_ext/kernel_spec.rb +169 -0
  92. data/spec/private/dispatch/bootloader_spec.rb +24 -0
  93. data/spec/private/dispatch/cookies_spec.rb +107 -0
  94. data/spec/private/dispatch/dispatch_spec.rb +35 -0
  95. data/spec/private/dispatch/fixture/app/controllers/application.rb +4 -0
  96. data/spec/private/dispatch/fixture/app/controllers/exceptions.rb +27 -0
  97. data/spec/private/dispatch/fixture/app/controllers/foo.rb +21 -0
  98. data/spec/private/dispatch/fixture/app/helpers/global_helpers.rb +8 -0
  99. data/spec/private/dispatch/fixture/app/views/exeptions/client_error.html.erb +37 -0
  100. data/spec/private/dispatch/fixture/app/views/exeptions/internal_server_error.html.erb +216 -0
  101. data/spec/private/dispatch/fixture/app/views/exeptions/not_acceptable.html.erb +38 -0
  102. data/spec/private/dispatch/fixture/app/views/exeptions/not_found.html.erb +40 -0
  103. data/spec/private/dispatch/fixture/app/views/foo/bar.html.erb +0 -0
  104. data/spec/private/dispatch/fixture/app/views/layout/application.html.erb +11 -0
  105. data/spec/private/dispatch/fixture/config/black_hole.rb +12 -0
  106. data/spec/private/dispatch/fixture/config/environments/development.rb +6 -0
  107. data/spec/private/dispatch/fixture/config/environments/production.rb +5 -0
  108. data/spec/private/dispatch/fixture/config/environments/test.rb +6 -0
  109. data/spec/private/dispatch/fixture/config/init.rb +45 -0
  110. data/spec/private/dispatch/fixture/config/rack.rb +11 -0
  111. data/spec/private/dispatch/fixture/config/router.rb +35 -0
  112. data/spec/private/dispatch/fixture/log/merb_test.log +1874 -0
  113. data/spec/private/dispatch/fixture/public/images/merb.jpg +0 -0
  114. data/spec/private/dispatch/fixture/public/merb.fcgi +4 -0
  115. data/spec/private/dispatch/fixture/public/stylesheets/master.css +119 -0
  116. data/spec/private/dispatch/route_params_spec.rb +24 -0
  117. data/spec/private/dispatch/session_mixin_spec.rb +47 -0
  118. data/spec/private/dispatch/spec_helper.rb +1 -0
  119. data/spec/private/plugins/plugin_spec.rb +166 -0
  120. data/spec/private/rack/application_spec.rb +49 -0
  121. data/spec/private/router/behavior_spec.rb +60 -0
  122. data/spec/private/router/fixture/log/merb_test.log +139 -0
  123. data/spec/private/router/route_spec.rb +414 -0
  124. data/spec/private/router/router_spec.rb +175 -0
  125. data/spec/private/vendor/facets/plural_spec.rb +564 -0
  126. data/spec/private/vendor/facets/singular_spec.rb +489 -0
  127. data/spec/public/DEFINITIONS +11 -0
  128. data/spec/public/abstract_controller/controllers/alt_views/layout/application.erb +1 -0
  129. data/spec/public/abstract_controller/controllers/alt_views/layout/merb/test/fixtures/abstract/render_string_controller_layout.erb +1 -0
  130. data/spec/public/abstract_controller/controllers/alt_views/layout/merb/test/fixtures/abstract/render_template_controller_layout.erb +1 -0
  131. data/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/display_object_with_multiple_roots/index.erb +1 -0
  132. data/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/display_object_with_multiple_roots/show.erb +1 -0
  133. data/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/render_template_multiple_roots/index.erb +1 -0
  134. data/spec/public/abstract_controller/controllers/alt_views/partial/basic_partial_with_multiple_roots/_partial.erb +1 -0
  135. data/spec/public/abstract_controller/controllers/alt_views/render_template_multiple_roots_and_custom_location/index.erb +1 -0
  136. data/spec/public/abstract_controller/controllers/alt_views/render_template_multiple_roots_inherited/index.erb +1 -0
  137. data/spec/public/abstract_controller/controllers/cousins.rb +41 -0
  138. data/spec/public/abstract_controller/controllers/display.rb +54 -0
  139. data/spec/public/abstract_controller/controllers/filters.rb +193 -0
  140. data/spec/public/abstract_controller/controllers/helpers.rb +41 -0
  141. data/spec/public/abstract_controller/controllers/partial.rb +121 -0
  142. data/spec/public/abstract_controller/controllers/render.rb +113 -0
  143. data/spec/public/abstract_controller/controllers/views/helpers/capture/index.erb +1 -0
  144. data/spec/public/abstract_controller/controllers/views/helpers/capture_eq/index.erb +1 -0
  145. data/spec/public/abstract_controller/controllers/views/helpers/capture_with_args/index.erb +1 -0
  146. data/spec/public/abstract_controller/controllers/views/helpers/concat/index.erb +1 -0
  147. data/spec/public/abstract_controller/controllers/views/layout/alt.erb +1 -0
  148. data/spec/public/abstract_controller/controllers/views/layout/custom.erb +1 -0
  149. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/display_object/index.erb +1 -0
  150. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/display_object_with_action/new.erb +1 -0
  151. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template/index.erb +1 -0
  152. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_app_layout/index.erb +0 -0
  153. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_custom_layout/index.erb +1 -0
  154. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_multiple_roots/index.erb +1 -0
  155. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_multiple_roots/show.erb +1 -0
  156. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_two_throw_contents/index.erb +1 -0
  157. data/spec/public/abstract_controller/controllers/views/partial/another_directory/_partial.erb +1 -0
  158. data/spec/public/abstract_controller/controllers/views/partial/basic_partial/_partial.erb +1 -0
  159. data/spec/public/abstract_controller/controllers/views/partial/basic_partial/index.erb +1 -0
  160. data/spec/public/abstract_controller/controllers/views/partial/basic_partial_with_multiple_roots/index.erb +1 -0
  161. data/spec/public/abstract_controller/controllers/views/partial/nested_partial/_first.erb +1 -0
  162. data/spec/public/abstract_controller/controllers/views/partial/nested_partial/_second.erb +1 -0
  163. data/spec/public/abstract_controller/controllers/views/partial/nested_partial/index.erb +1 -0
  164. data/spec/public/abstract_controller/controllers/views/partial/partial_in_another_directory/index.erb +1 -0
  165. data/spec/public/abstract_controller/controllers/views/partial/partial_with_both/_collection.erb +1 -0
  166. data/spec/public/abstract_controller/controllers/views/partial/partial_with_both/index.erb +1 -0
  167. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections/_collection.erb +1 -0
  168. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections/index.erb +1 -0
  169. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_as/_collection.erb +1 -0
  170. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_as/index.erb +1 -0
  171. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_counter/_collection.erb +1 -0
  172. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_counter/index.erb +1 -0
  173. data/spec/public/abstract_controller/controllers/views/partial/partial_with_locals/_variables.erb +1 -0
  174. data/spec/public/abstract_controller/controllers/views/partial/partial_with_locals/index.erb +1 -0
  175. data/spec/public/abstract_controller/controllers/views/partial/partial_with_with_and_locals/_both.erb +1 -0
  176. data/spec/public/abstract_controller/controllers/views/partial/partial_with_with_and_locals/index.erb +1 -0
  177. data/spec/public/abstract_controller/controllers/views/partial/with_absolute_partial/_partial.erb +1 -0
  178. data/spec/public/abstract_controller/controllers/views/partial/with_absolute_partial/index.erb +1 -0
  179. data/spec/public/abstract_controller/controllers/views/partial/with_as_partial/_with_partial.erb +1 -0
  180. data/spec/public/abstract_controller/controllers/views/partial/with_as_partial/index.erb +1 -0
  181. data/spec/public/abstract_controller/controllers/views/partial/with_nil_partial/_with_partial.erb +1 -0
  182. data/spec/public/abstract_controller/controllers/views/partial/with_nil_partial/index.erb +1 -0
  183. data/spec/public/abstract_controller/controllers/views/partial/with_partial/_with_partial.erb +1 -0
  184. data/spec/public/abstract_controller/controllers/views/partial/with_partial/index.erb +1 -0
  185. data/spec/public/abstract_controller/controllers/views/test_display/foo.html.erb +1 -0
  186. data/spec/public/abstract_controller/controllers/views/test_render/foo.html.erb +0 -0
  187. data/spec/public/abstract_controller/controllers/views/wonderful/index.erb +1 -0
  188. data/spec/public/abstract_controller/display_spec.rb +33 -0
  189. data/spec/public/abstract_controller/filter_spec.rb +106 -0
  190. data/spec/public/abstract_controller/helper_spec.rb +21 -0
  191. data/spec/public/abstract_controller/partial_spec.rb +61 -0
  192. data/spec/public/abstract_controller/render_spec.rb +90 -0
  193. data/spec/public/abstract_controller/spec_helper.rb +31 -0
  194. data/spec/public/boot_loader/boot_loader_spec.rb +33 -0
  195. data/spec/public/boot_loader/spec_helper.rb +1 -0
  196. data/spec/public/controller/authentication_spec.rb +103 -0
  197. data/spec/public/controller/base_spec.rb +36 -0
  198. data/spec/public/controller/controllers/authentication.rb +45 -0
  199. data/spec/public/controller/controllers/base.rb +36 -0
  200. data/spec/public/controller/controllers/display.rb +118 -0
  201. data/spec/public/controller/controllers/redirect.rb +30 -0
  202. data/spec/public/controller/controllers/responder.rb +93 -0
  203. data/spec/public/controller/controllers/url.rb +7 -0
  204. data/spec/public/controller/controllers/views/layout/custom.html.erb +1 -0
  205. data/spec/public/controller/controllers/views/layout/custom_arg.html.erb +1 -0
  206. data/spec/public/controller/controllers/views/layout/custom_arg.json.erb +1 -0
  207. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_and_local_provides/index.html.erb +1 -0
  208. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_and_local_provides/index.xml.erb +1 -0
  209. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_provides/index.html.erb +1 -0
  210. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_provides/index.xml.erb +1 -0
  211. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template/index.html.erb +1 -0
  212. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template/no_layout.html.erb +1 -0
  213. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template_argument/index.html.erb +1 -0
  214. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/html_default/index.html.erb +1 -0
  215. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/layout/custom.html.erb +1 -0
  216. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/local_provides/index.html.erb +1 -0
  217. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/local_provides/index.xml.erb +1 -0
  218. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/multi_provides/index.html.erb +1 -0
  219. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/multi_provides/index.js.erb +1 -0
  220. data/spec/public/controller/display_spec.rb +84 -0
  221. data/spec/public/controller/redirect_spec.rb +27 -0
  222. data/spec/public/controller/responder_spec.rb +163 -0
  223. data/spec/public/controller/spec_helper.rb +11 -0
  224. data/spec/public/controller/url_spec.rb +180 -0
  225. data/spec/public/core/merb_core_spec.rb +45 -0
  226. data/spec/public/core_ext/class_spec.rb +91 -0
  227. data/spec/public/core_ext/fixtures/core_ext_dependency.rb +2 -0
  228. data/spec/public/core_ext/kernel_spec.rb +9 -0
  229. data/spec/public/core_ext/spec_helper.rb +1 -0
  230. data/spec/public/directory_structure/directory/app/controllers/application.rb +3 -0
  231. data/spec/public/directory_structure/directory/app/controllers/base.rb +13 -0
  232. data/spec/public/directory_structure/directory/app/controllers/custom.rb +19 -0
  233. data/spec/public/directory_structure/directory/app/views/base/template.html.erb +1 -0
  234. data/spec/public/directory_structure/directory/app/views/wonderful/template.erb +1 -0
  235. data/spec/public/directory_structure/directory/config/router.rb +3 -0
  236. data/spec/public/directory_structure/directory/log/merb_test.log +562 -0
  237. data/spec/public/directory_structure/directory_spec.rb +44 -0
  238. data/spec/public/logger/logger_spec.rb +181 -0
  239. data/spec/public/logger/spec_helper.rb +1 -0
  240. data/spec/public/reloading/directory/app/controllers/application.rb +3 -0
  241. data/spec/public/reloading/directory/app/controllers/reload.rb +6 -0
  242. data/spec/public/reloading/directory/config/init.rb +2 -0
  243. data/spec/public/reloading/directory/log/merb_test.log +138 -0
  244. data/spec/public/reloading/reload_spec.rb +103 -0
  245. data/spec/public/request/multipart_spec.rb +41 -0
  246. data/spec/public/request/request_spec.rb +228 -0
  247. data/spec/public/router/default_spec.rb +21 -0
  248. data/spec/public/router/deferred_spec.rb +22 -0
  249. data/spec/public/router/fixation_spec.rb +27 -0
  250. data/spec/public/router/fixture/log/merb_test.log +1556 -0
  251. data/spec/public/router/namespace_spec.rb +113 -0
  252. data/spec/public/router/nested_matches_spec.rb +97 -0
  253. data/spec/public/router/nested_resources_spec.rb +41 -0
  254. data/spec/public/router/resource_spec.rb +37 -0
  255. data/spec/public/router/resources_spec.rb +82 -0
  256. data/spec/public/router/spec_helper.rb +90 -0
  257. data/spec/public/router/special_spec.rb +61 -0
  258. data/spec/public/router/string_spec.rb +61 -0
  259. data/spec/public/template/template_spec.rb +104 -0
  260. data/spec/public/template/templates/error.html.erb +2 -0
  261. data/spec/public/template/templates/template.html.erb +1 -0
  262. data/spec/public/template/templates/template.html.myt +1 -0
  263. data/spec/public/test/controller_matchers_spec.rb +402 -0
  264. data/spec/public/test/controllers/controller_assertion_mock.rb +7 -0
  265. data/spec/public/test/controllers/dispatch_controller.rb +11 -0
  266. data/spec/public/test/controllers/spec_helper_controller.rb +38 -0
  267. data/spec/public/test/multipart_request_helper_spec.rb +159 -0
  268. data/spec/public/test/multipart_upload_text_file.txt +1 -0
  269. data/spec/public/test/request_helper_spec.rb +221 -0
  270. data/spec/public/test/route_helper_spec.rb +71 -0
  271. data/spec/public/test/route_matchers_spec.rb +162 -0
  272. data/spec/public/test/view_helper_spec.rb +96 -0
  273. data/spec/public/test/view_matchers_spec.rb +183 -0
  274. data/spec/spec_helper.rb +68 -0
  275. metadata +493 -41
  276. data/README.txt +0 -3
  277. data/lib/extlib.rb +0 -32
  278. data/lib/extlib/assertions.rb +0 -8
  279. data/lib/extlib/blank.rb +0 -42
  280. data/lib/extlib/class.rb +0 -175
  281. data/lib/extlib/hash.rb +0 -410
  282. data/lib/extlib/hook.rb +0 -366
  283. data/lib/extlib/inflection.rb +0 -141
  284. data/lib/extlib/lazy_array.rb +0 -106
  285. data/lib/extlib/mash.rb +0 -143
  286. data/lib/extlib/module.rb +0 -37
  287. data/lib/extlib/object.rb +0 -165
  288. data/lib/extlib/object_space.rb +0 -13
  289. data/lib/extlib/pathname.rb +0 -5
  290. data/lib/extlib/pooling.rb +0 -233
  291. data/lib/extlib/rubygems.rb +0 -38
  292. data/lib/extlib/simple_set.rb +0 -39
  293. data/lib/extlib/string.rb +0 -132
  294. data/lib/extlib/struct.rb +0 -8
  295. data/lib/extlib/tasks/release.rb +0 -9
  296. data/lib/extlib/time.rb +0 -12
  297. data/lib/extlib/version.rb +0 -3
  298. data/lib/extlib/virtual_file.rb +0 -10
@@ -0,0 +1,489 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper'
2
+
3
+ describe Language::English::Inflect, "#singular" do
4
+ # ==== exceptional cases
5
+
6
+ it "singularizes equipment => equipment" do
7
+ "equipment".singular.should == "equipment"
8
+ end
9
+
10
+ it "singularizes information => information" do
11
+ "information".singular.should == "information"
12
+ end
13
+
14
+ it "singularizes money => money" do
15
+ "money".singular.should == "money"
16
+ end
17
+
18
+ it "singularizes species => species" do
19
+ "species".singular.should == "species"
20
+ end
21
+
22
+ it "singularizes series => series" do
23
+ "series".singular.should == "series"
24
+ end
25
+
26
+ it "singularizes fish => fish" do
27
+ "fish".singular.should == "fish"
28
+ end
29
+
30
+ it "singularizes sheep => sheep" do
31
+ "sheep".singular.should == "sheep"
32
+ end
33
+
34
+ it "singularizes news => news" do
35
+ "news".singular.should == "news"
36
+ end
37
+
38
+ it "singularizes rain => rain" do
39
+ "rain".singular.should == "rain"
40
+ end
41
+
42
+ it "singularizes milk => milk" do
43
+ "milk".singular.should == "milk"
44
+ end
45
+
46
+ it "singularizes moose => moose" do
47
+ "moose".singular.should == "moose"
48
+ end
49
+
50
+ it "singularizes hovercraft => hovercraft" do
51
+ "hovercraft".singular.should == "hovercraft"
52
+ end
53
+
54
+ it "singularizes cactus => cacti" do
55
+ "cacti".singular.should == "cactus"
56
+ end
57
+
58
+ it "singularizes thesauri => thesaurus" do
59
+ "thesauri".singular.should == "thesaurus"
60
+ end
61
+
62
+ it "singularizes matrices => matrix" do
63
+ "matrices".singular.should == "matrix"
64
+ end
65
+
66
+ it "singularizes Swiss => Swiss" do
67
+ "Swiss".singular.should == "Swiss"
68
+ end
69
+
70
+ it "singularizes lives => life" do
71
+ "lives".singular.should == "life"
72
+ end
73
+
74
+ it "singularizes wives => wife" do
75
+ "wives".singular.should == "wife"
76
+ end
77
+
78
+ it "singularizes geese => goose" do
79
+ "geese".singular.should == "goose"
80
+ end
81
+
82
+ it "singularizes criteria => criterion" do
83
+ "criteria".singular.should == "criterion"
84
+ end
85
+
86
+ it "singularizes aliases => alias" do
87
+ "aliases".singular.should == "alias"
88
+ end
89
+
90
+ it "singularizes statuses => status" do
91
+ "statuses".singular.should == "status"
92
+ end
93
+
94
+ it "singularizes axes => axis" do
95
+ "axes".singular.should == "axis"
96
+ end
97
+
98
+ it "singularizes crises => crisis" do
99
+ "crises".singular.should == "crisis"
100
+ end
101
+
102
+ it "singularizes testes => testis" do
103
+ "testes".singular.should == "testis"
104
+ end
105
+
106
+ it "singularizes children => child" do
107
+ "children".singular.should == "child"
108
+ end
109
+
110
+ it "singularizes people => person" do
111
+ "people".singular.should == "person"
112
+ end
113
+
114
+ it "singularizes potatoes => potato" do
115
+ "potatoes".singular.should == "potato"
116
+ end
117
+
118
+ it "singularizes tomatoes => tomato" do
119
+ "tomatoes".singular.should == "tomato"
120
+ end
121
+
122
+ it "singularizes buffaloes => buffalo" do
123
+ "buffaloes".singular.should == "buffalo"
124
+ end
125
+
126
+ it "singularizes torpedoes => torpedo" do
127
+ "torpedoes".singular.should == "torpedo"
128
+ end
129
+
130
+ it "singularizes quizzes => quiz" do
131
+ "quizzes".singular.should == "quiz"
132
+ end
133
+
134
+ # used to be a bug exposed by this specs suite,
135
+ # this MUST pass or we've got regression
136
+ it "singularizes vertices => vertex" do
137
+ "vertices".singular.should == "vertex"
138
+ end
139
+
140
+ it "singularizes indices => index" do
141
+ "indices".singular.should == "index"
142
+ end
143
+
144
+ it "singularizes oxen => ox" do
145
+ "oxen".singular.should == "ox"
146
+ end
147
+
148
+ it "singularizes mice => mouse" do
149
+ "mice".singular.should == "mouse"
150
+ end
151
+
152
+ it "singularizes lice => louse" do
153
+ "lice".singular.should == "louse"
154
+ end
155
+
156
+ it "singularizes theses => thesis" do
157
+ "theses".singular.should == "thesis"
158
+ end
159
+
160
+ it "singularizes thieves => thief" do
161
+ "thieves".singular.should == "thief"
162
+ end
163
+
164
+ it "singularizes analyses => analysis" do
165
+ "analyses".singular.should == "analysis"
166
+ end
167
+
168
+ it "singularizes octopi => octopus" do
169
+ "octopi".singular.should == "octopus"
170
+ end
171
+
172
+ it "singularizes grass => grass" do
173
+ "grass".singular.should == "grass"
174
+ end
175
+
176
+ it "singularizes phenomena => phenomenon" do
177
+ "phenomena".singular.should == "phenomenon"
178
+ end
179
+
180
+
181
+
182
+
183
+
184
+ # ==== bugs, typos and reported issues
185
+
186
+
187
+
188
+
189
+
190
+ # ==== rules
191
+
192
+ it "singularizes forums => forum" do
193
+ "forums".singular.should == "forum"
194
+ end
195
+
196
+ it "singularizes hives => hive" do
197
+ "hives".singular.should == "hive"
198
+ end
199
+
200
+ it "singularizes athletes => athlete" do
201
+ "athletes".singular.should == "athlete"
202
+ end
203
+
204
+ it "singularizes dwarves => dwarf" do
205
+ "dwarves".singular.should == "dwarf"
206
+ end
207
+
208
+ it "singularizes heroes => hero" do
209
+ "heroes".singular.should == "hero"
210
+ end
211
+
212
+ it "singularizes zeroes => zero" do
213
+ "zeroes".singular.should == "zero"
214
+ end
215
+
216
+ it "singularizes men => man" do
217
+ "men".singular.should == "man"
218
+ end
219
+
220
+ it "singularizes women => woman" do
221
+ "women".singular.should == "woman"
222
+ end
223
+
224
+ it "singularizes sportsmen => sportsman" do
225
+ "sportsmen".singular.should == "sportsman"
226
+ end
227
+
228
+ it "singularizes branches => branch" do
229
+ "branches".singular.should == "branch"
230
+ end
231
+
232
+ it "singularizes crunches => crunch" do
233
+ "crunches".singular.should == "crunch"
234
+ end
235
+
236
+ it "singularizes trashes => trash" do
237
+ "trashes".singular.should == "trash"
238
+ end
239
+
240
+ it "singularizes mashes => mash" do
241
+ "mashes".singular.should == "mash"
242
+ end
243
+
244
+ it "singularizes crosses => cross" do
245
+ "crosses".singular.should == "cross"
246
+ end
247
+
248
+ it "singularizes errata => erratum" do
249
+ "errata".singular.should == "erratum"
250
+ end
251
+
252
+ # FIXME: add -ia => -ium cases
253
+
254
+ # FIXME: add -ra => -rum cases
255
+
256
+ it "singularizes rays => ray" do
257
+ "rays".singular.should == "ray"
258
+ end
259
+
260
+ it "singularizes sprays => spray" do
261
+ "sprays".singular.should == "spray"
262
+ end
263
+
264
+ # Merriam-Webster dictionary says
265
+ # preys is correct, too.
266
+ it "singularizes preys => prey" do
267
+ "preys".singular.should == "prey"
268
+ end
269
+
270
+ it "singularizes toys => toy" do
271
+ "toys".singular.should == "toy"
272
+ end
273
+
274
+ it "singularizes joys => joy" do
275
+ "joys".singular.should == "joy"
276
+ end
277
+
278
+ it "singularizes buys => buy" do
279
+ "buys".singular.should == "buy"
280
+ end
281
+
282
+ it "singularizes guys => guy" do
283
+ "guys".singular.should == "guy"
284
+ end
285
+
286
+ it "singularizes cries => cry" do
287
+ "cries".singular.should == "cry"
288
+ end
289
+
290
+ it "singularizes flies => fly" do
291
+ "flies".singular.should == "fly"
292
+ end
293
+
294
+ it "singularizes foxes => fox" do
295
+ "foxes".singular.should == "fox"
296
+ end
297
+
298
+ it "singularizes elves => elf" do
299
+ "elves".singular.should == "elf"
300
+ end
301
+
302
+ it "singularizes shelves => shelf" do
303
+ "shelves".singular.should == "shelf"
304
+ end
305
+
306
+ it "singularizes pluses => plus" do
307
+ "pluses".singular.should == "plus"
308
+ end
309
+
310
+ it "singularizes cats => cat" do
311
+ "cats".singular.should == "cat"
312
+ end
313
+
314
+ it "singularizes rats => rat" do
315
+ "rats".singular.should == "rat"
316
+ end
317
+
318
+ it "singularizes roses => rose" do
319
+ "roses".singular.should == "rose"
320
+ end
321
+
322
+ it "singularizes projects => project" do
323
+ "projects".singular.should == "project"
324
+ end
325
+
326
+ it "singularizes posts => post" do
327
+ "posts".singular.should == "post"
328
+ end
329
+
330
+ it "singularizes articles => article" do
331
+ "articles".singular.should == "article"
332
+ end
333
+
334
+ it "singularizes locations => location" do
335
+ "locations".singular.should == "location"
336
+ end
337
+
338
+ it "singularizes friends => friend" do
339
+ "friends".singular.should == "friend"
340
+ end
341
+
342
+ it "singularizes links => link" do
343
+ "links".singular.should == "link"
344
+ end
345
+
346
+ it "singularizes urls => url" do
347
+ "urls".singular.should == "url"
348
+ end
349
+
350
+ it "singularizes accounts => account" do
351
+ "accounts".singular.should == "account"
352
+ end
353
+
354
+ it "singularizes servers => server" do
355
+ "servers".singular.should == "server"
356
+ end
357
+
358
+ it "singularizes fruits => fruit" do
359
+ "fruits".singular.should == "fruit"
360
+ end
361
+
362
+ it "singularizes maps => map" do
363
+ "maps".singular.should == "map"
364
+ end
365
+
366
+ it "singularizes incomes => income" do
367
+ "incomes".singular.should == "income"
368
+ end
369
+
370
+ it "singularizes pings => ping" do
371
+ "pings".singular.should == "ping"
372
+ end
373
+
374
+ it "singularizes events => event" do
375
+ "events".singular.should == "event"
376
+ end
377
+
378
+ it "singularizes proofs => proof" do
379
+ "proofs".singular.should == "proof"
380
+ end
381
+
382
+ it "singularizes typos => typo" do
383
+ "typos".singular.should == "typo"
384
+ end
385
+
386
+ it "singularizes attachments => attachment" do
387
+ "attachments".singular.should == "attachment"
388
+ end
389
+
390
+ it "singularizes downloads => download" do
391
+ "downloads".singular.should == "download"
392
+ end
393
+
394
+ it "singularizes assets => asset" do
395
+ "assets".singular.should == "asset"
396
+ end
397
+
398
+ it "singularizes jobs => job" do
399
+ "jobs".singular.should == "job"
400
+ end
401
+
402
+ it "singularizes cities => city" do
403
+ "cities".singular.should == "city"
404
+ end
405
+
406
+ it "singularizes packages => package" do
407
+ "packages".singular.should == "package"
408
+ end
409
+
410
+ it "singularizes commits => commit" do
411
+ "commits".singular.should == "commit"
412
+ end
413
+
414
+ it "singularizes versions => version" do
415
+ "versions".singular.should == "version"
416
+ end
417
+
418
+ it "singularizes documents => document" do
419
+ "documents".singular.should == "document"
420
+ end
421
+
422
+ it "singularizes editions => edition" do
423
+ "editions".singular.should == "edition"
424
+ end
425
+
426
+ it "singularizes movies => movie" do
427
+ "movies".singular.should == "movie"
428
+ end
429
+
430
+ it "singularizes songs => song" do
431
+ "songs".singular.should == "song"
432
+ end
433
+
434
+ it "singularizes invoices => invoice" do
435
+ "invoices".singular.should == "invoice"
436
+ end
437
+
438
+ it "singularizes products => product" do
439
+ "products".singular.should == "product"
440
+ end
441
+
442
+ it "singularizes books => book" do
443
+ "books".singular.should == "book"
444
+ end
445
+
446
+ it "singularizes tickets => ticket" do
447
+ "tickets".singular.should == "ticket"
448
+ end
449
+
450
+ it "singularizes games => game" do
451
+ "games".singular.should == "game"
452
+ end
453
+
454
+ it "singularizes tournaments => tournament" do
455
+ "tournaments".singular.should == "tournament"
456
+ end
457
+
458
+ it "singularizes prizes => prize" do
459
+ "prizes".singular.should == "prize"
460
+ end
461
+
462
+ it "singularizes prices => price" do
463
+ "prices".singular.should == "price"
464
+ end
465
+
466
+ it "singularizes installations => installation" do
467
+ "installations".singular.should == "installation"
468
+ end
469
+
470
+ it "singularizes dates => date" do
471
+ "dates".singular.should == "date"
472
+ end
473
+
474
+ it "singularizes schedules => schedule" do
475
+ "schedules".singular.should == "schedule"
476
+ end
477
+
478
+ it "singularizes arenas => arena" do
479
+ "arenas".singular.should == "arena"
480
+ end
481
+
482
+ it "singularizes spams => spam" do
483
+ "spams".singular.should == "spam"
484
+ end
485
+
486
+ it "singularizes rice => rice" do
487
+ "rice".singular.should == "rice"
488
+ end
489
+ end