spree 0.0.5

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

Potentially problematic release.


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

Files changed (534) hide show
  1. data/History.txt +24 -0
  2. data/License.txt +26 -0
  3. data/Manifest.txt +534 -0
  4. data/README.txt +1 -0
  5. data/Rakefile +4 -0
  6. data/bin/spree +157 -0
  7. data/config/hoe.rb +78 -0
  8. data/config/requirements.rb +15 -0
  9. data/lib/spree/version.rb +9 -0
  10. data/script/destroy +14 -0
  11. data/script/generate +14 -0
  12. data/script/txt2html +74 -0
  13. data/setup.rb +1585 -0
  14. data/starter-app/README +182 -0
  15. data/starter-app/Rakefile +10 -0
  16. data/starter-app/app/controllers/application.rb +14 -0
  17. data/starter-app/app/helpers/application_helper.rb +3 -0
  18. data/starter-app/app/models/role.rb +3 -0
  19. data/starter-app/app/models/tag.rb +37 -0
  20. data/starter-app/app/models/tagging.rb +16 -0
  21. data/starter-app/app/models/user.rb +102 -0
  22. data/starter-app/app/views/layouts/application.rhtml +46 -0
  23. data/starter-app/app/views/shared/_store_menu.rhtml +6 -0
  24. data/starter-app/config/boot.rb +45 -0
  25. data/starter-app/config/database.yml +23 -0
  26. data/starter-app/config/environment.rb +140 -0
  27. data/starter-app/config/environments/development.rb +21 -0
  28. data/starter-app/config/environments/production.rb +21 -0
  29. data/starter-app/config/environments/test.rb +19 -0
  30. data/starter-app/config/routes.rb +28 -0
  31. data/starter-app/db/migrate/001_create_users.rb +17 -0
  32. data/starter-app/db/migrate/002_create_roles.rb +20 -0
  33. data/starter-app/db/migrate/003_create_tags_and_taggings.rb +28 -0
  34. data/starter-app/db/migrate/004_spree_to_version_21.rb +9 -0
  35. data/starter-app/db/sample/addresses.yml +24 -0
  36. data/starter-app/db/sample/categories.yml +35 -0
  37. data/starter-app/db/sample/countries.yml +3 -0
  38. data/starter-app/db/sample/credit_cards.yml +12 -0
  39. data/starter-app/db/sample/images.yml +252 -0
  40. data/starter-app/db/sample/line_items.yml +23 -0
  41. data/starter-app/db/sample/option_types.yml +6 -0
  42. data/starter-app/db/sample/option_values.yml +35 -0
  43. data/starter-app/db/sample/orders.yml +15 -0
  44. data/starter-app/db/sample/product_option_types.yml +8 -0
  45. data/starter-app/db/sample/products.yml +35 -0
  46. data/starter-app/db/sample/roles.yml +3 -0
  47. data/starter-app/db/sample/skus.yml +28 -0
  48. data/starter-app/db/sample/states.yml +154 -0
  49. data/starter-app/db/sample/taggings.yml +16 -0
  50. data/starter-app/db/sample/tags.yml +6 -0
  51. data/starter-app/db/sample/txns.yml +7 -0
  52. data/starter-app/db/sample/users.yml +6 -0
  53. data/starter-app/db/sample/variations.yml +31 -0
  54. data/starter-app/doc/README_FOR_APP +2 -0
  55. data/starter-app/lib/authenticated_system.rb +116 -0
  56. data/starter-app/lib/authenticated_test_helper.rb +10 -0
  57. data/starter-app/lib/custom_fixtures.rb +7 -0
  58. data/starter-app/lib/hijacker.rb +78 -0
  59. data/starter-app/lib/role_requirement_system.rb +142 -0
  60. data/starter-app/lib/role_requirement_test_helper.rb +86 -0
  61. data/starter-app/lib/tagging_extensions.rb +104 -0
  62. data/starter-app/lib/tasks/sample/products/0000/0001/ror_tote.jpeg +0 -0
  63. data/starter-app/lib/tasks/sample/products/0000/0001/ror_tote_mini.jpeg +0 -0
  64. data/starter-app/lib/tasks/sample/products/0000/0001/ror_tote_product.jpeg +0 -0
  65. data/starter-app/lib/tasks/sample/products/0000/0001/ror_tote_small.jpeg +0 -0
  66. data/starter-app/lib/tasks/sample/products/0000/0002/ror_tote_back.jpeg +0 -0
  67. data/starter-app/lib/tasks/sample/products/0000/0002/ror_tote_back_mini.jpeg +0 -0
  68. data/starter-app/lib/tasks/sample/products/0000/0002/ror_tote_back_product.jpeg +0 -0
  69. data/starter-app/lib/tasks/sample/products/0000/0002/ror_tote_back_small.jpeg +0 -0
  70. data/starter-app/lib/tasks/sample/products/0000/0003/ror_bag.jpeg +0 -0
  71. data/starter-app/lib/tasks/sample/products/0000/0003/ror_bag_mini.jpeg +0 -0
  72. data/starter-app/lib/tasks/sample/products/0000/0003/ror_bag_product.jpeg +0 -0
  73. data/starter-app/lib/tasks/sample/products/0000/0003/ror_bag_small.jpeg +0 -0
  74. data/starter-app/lib/tasks/sample/products/0000/0004/ror_baseball.jpeg +0 -0
  75. data/starter-app/lib/tasks/sample/products/0000/0004/ror_baseball_mini.jpeg +0 -0
  76. data/starter-app/lib/tasks/sample/products/0000/0004/ror_baseball_product.jpeg +0 -0
  77. data/starter-app/lib/tasks/sample/products/0000/0004/ror_baseball_small.jpeg +0 -0
  78. data/starter-app/lib/tasks/sample/products/0000/0005/ror_baseball_back.jpeg +0 -0
  79. data/starter-app/lib/tasks/sample/products/0000/0005/ror_baseball_back_mini.jpeg +0 -0
  80. data/starter-app/lib/tasks/sample/products/0000/0005/ror_baseball_back_product.jpeg +0 -0
  81. data/starter-app/lib/tasks/sample/products/0000/0005/ror_baseball_back_small.jpeg +0 -0
  82. data/starter-app/lib/tasks/sample/products/0000/0006/ror_jr_spaghetti.jpeg +0 -0
  83. data/starter-app/lib/tasks/sample/products/0000/0006/ror_jr_spaghetti_mini.jpeg +0 -0
  84. data/starter-app/lib/tasks/sample/products/0000/0006/ror_jr_spaghetti_product.jpeg +0 -0
  85. data/starter-app/lib/tasks/sample/products/0000/0006/ror_jr_spaghetti_small.jpeg +0 -0
  86. data/starter-app/lib/tasks/sample/products/0000/0007/ror_mug.jpeg +0 -0
  87. data/starter-app/lib/tasks/sample/products/0000/0007/ror_mug_mini.jpeg +0 -0
  88. data/starter-app/lib/tasks/sample/products/0000/0007/ror_mug_product.jpeg +0 -0
  89. data/starter-app/lib/tasks/sample/products/0000/0007/ror_mug_small.jpeg +0 -0
  90. data/starter-app/lib/tasks/sample/products/0000/0008/ror_mug_back.jpeg +0 -0
  91. data/starter-app/lib/tasks/sample/products/0000/0008/ror_mug_back_mini.jpeg +0 -0
  92. data/starter-app/lib/tasks/sample/products/0000/0008/ror_mug_back_product.jpeg +0 -0
  93. data/starter-app/lib/tasks/sample/products/0000/0008/ror_mug_back_small.jpeg +0 -0
  94. data/starter-app/lib/tasks/sample/products/0000/0009/ror_ringer.jpeg +0 -0
  95. data/starter-app/lib/tasks/sample/products/0000/0009/ror_ringer_mini.jpeg +0 -0
  96. data/starter-app/lib/tasks/sample/products/0000/0009/ror_ringer_product.jpeg +0 -0
  97. data/starter-app/lib/tasks/sample/products/0000/0009/ror_ringer_small.jpeg +0 -0
  98. data/starter-app/lib/tasks/sample/products/0000/0010/ror_ringer_back.jpeg +0 -0
  99. data/starter-app/lib/tasks/sample/products/0000/0010/ror_ringer_back_mini.jpeg +0 -0
  100. data/starter-app/lib/tasks/sample/products/0000/0010/ror_ringer_back_product.jpeg +0 -0
  101. data/starter-app/lib/tasks/sample/products/0000/0010/ror_ringer_back_small.jpeg +0 -0
  102. data/starter-app/lib/tasks/sample/products/0000/0011/ror_stein.jpeg +0 -0
  103. data/starter-app/lib/tasks/sample/products/0000/0011/ror_stein_mini.jpeg +0 -0
  104. data/starter-app/lib/tasks/sample/products/0000/0011/ror_stein_product.jpeg +0 -0
  105. data/starter-app/lib/tasks/sample/products/0000/0011/ror_stein_small.jpeg +0 -0
  106. data/starter-app/lib/tasks/sample/products/0000/0012/ror_stein_back.jpeg +0 -0
  107. data/starter-app/lib/tasks/sample/products/0000/0012/ror_stein_back_mini.jpeg +0 -0
  108. data/starter-app/lib/tasks/sample/products/0000/0012/ror_stein_back_product.jpeg +0 -0
  109. data/starter-app/lib/tasks/sample/products/0000/0012/ror_stein_back_small.jpeg +0 -0
  110. data/starter-app/lib/tasks/spree_sample_data.rake +38 -0
  111. data/starter-app/public/.htaccess +40 -0
  112. data/starter-app/public/404.html +30 -0
  113. data/starter-app/public/500.html +30 -0
  114. data/starter-app/public/dispatch.cgi +10 -0
  115. data/starter-app/public/dispatch.fcgi +24 -0
  116. data/starter-app/public/dispatch.rb +10 -0
  117. data/starter-app/public/favicon.ico +0 -0
  118. data/starter-app/public/images/rails.png +0 -0
  119. data/starter-app/public/index.html +277 -0
  120. data/starter-app/public/javascripts/application.js +2 -0
  121. data/starter-app/public/javascripts/controls.js +833 -0
  122. data/starter-app/public/javascripts/dragdrop.js +942 -0
  123. data/starter-app/public/javascripts/effects.js +1088 -0
  124. data/starter-app/public/javascripts/prototype.js +4184 -0
  125. data/starter-app/public/robots.txt +1 -0
  126. data/starter-app/public/stylesheets/application.css +209 -0
  127. data/starter-app/public/stylesheets/cart/_controller.css +4 -0
  128. data/starter-app/public/stylesheets/checkout/_controller.css +13 -0
  129. data/starter-app/script/about +3 -0
  130. data/starter-app/script/breakpointer +3 -0
  131. data/starter-app/script/console +3 -0
  132. data/starter-app/script/destroy +3 -0
  133. data/starter-app/script/generate +3 -0
  134. data/starter-app/script/performance/benchmarker +3 -0
  135. data/starter-app/script/performance/profiler +3 -0
  136. data/starter-app/script/plugin +3 -0
  137. data/starter-app/script/process/inspector +3 -0
  138. data/starter-app/script/process/reaper +3 -0
  139. data/starter-app/script/process/spawner +3 -0
  140. data/starter-app/script/runner +3 -0
  141. data/starter-app/script/server +3 -0
  142. data/starter-app/test/fixtures/users.yml +7 -0
  143. data/starter-app/test/test_helper.rb +28 -0
  144. data/starter-app/test/unit/user_test.rb +8 -0
  145. data/starter-app/vendor/plugins/acts_as_list/README +23 -0
  146. data/starter-app/vendor/plugins/acts_as_list/init.rb +3 -0
  147. data/starter-app/vendor/plugins/acts_as_list/lib/active_record/acts/list.rb +256 -0
  148. data/starter-app/vendor/plugins/acts_as_list/test/list_test.rb +332 -0
  149. data/starter-app/vendor/plugins/acts_as_tree/README +26 -0
  150. data/starter-app/vendor/plugins/acts_as_tree/Rakefile +22 -0
  151. data/starter-app/vendor/plugins/acts_as_tree/init.rb +1 -0
  152. data/starter-app/vendor/plugins/acts_as_tree/lib/active_record/acts/tree.rb +96 -0
  153. data/starter-app/vendor/plugins/acts_as_tree/test/abstract_unit.rb +0 -0
  154. data/starter-app/vendor/plugins/acts_as_tree/test/acts_as_tree_test.rb +219 -0
  155. data/starter-app/vendor/plugins/acts_as_tree/test/database.yml +0 -0
  156. data/starter-app/vendor/plugins/acts_as_tree/test/fixtures/mixin.rb +0 -0
  157. data/starter-app/vendor/plugins/acts_as_tree/test/fixtures/mixins.yml +0 -0
  158. data/starter-app/vendor/plugins/acts_as_tree/test/schema.rb +0 -0
  159. data/starter-app/vendor/plugins/attachment_fu/CHANGELOG +24 -0
  160. data/starter-app/vendor/plugins/attachment_fu/README +162 -0
  161. data/starter-app/vendor/plugins/attachment_fu/Rakefile +22 -0
  162. data/starter-app/vendor/plugins/attachment_fu/amazon_s3.yml.tpl +14 -0
  163. data/starter-app/vendor/plugins/attachment_fu/init.rb +14 -0
  164. data/starter-app/vendor/plugins/attachment_fu/install.rb +5 -0
  165. data/starter-app/vendor/plugins/attachment_fu/lib/geometry.rb +93 -0
  166. data/starter-app/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu.rb +410 -0
  167. data/starter-app/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/backends/db_file_backend.rb +39 -0
  168. data/starter-app/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/backends/file_system_backend.rb +97 -0
  169. data/starter-app/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/backends/s3_backend.rb +309 -0
  170. data/starter-app/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/image_science_processor.rb +61 -0
  171. data/starter-app/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/mini_magick_processor.rb +56 -0
  172. data/starter-app/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/rmagick_processor.rb +53 -0
  173. data/starter-app/vendor/plugins/attachment_fu/test/amazon_s3.yml +6 -0
  174. data/starter-app/vendor/plugins/attachment_fu/test/backends/db_file_test.rb +16 -0
  175. data/starter-app/vendor/plugins/attachment_fu/test/backends/file_system_test.rb +80 -0
  176. data/starter-app/vendor/plugins/attachment_fu/test/backends/remote/s3_test.rb +103 -0
  177. data/starter-app/vendor/plugins/attachment_fu/test/base_attachment_tests.rb +57 -0
  178. data/starter-app/vendor/plugins/attachment_fu/test/basic_test.rb +64 -0
  179. data/starter-app/vendor/plugins/attachment_fu/test/database.yml +18 -0
  180. data/starter-app/vendor/plugins/attachment_fu/test/extra_attachment_test.rb +57 -0
  181. data/starter-app/vendor/plugins/attachment_fu/test/fixtures/attachment.rb +127 -0
  182. data/starter-app/vendor/plugins/attachment_fu/test/fixtures/files/fake/rails.png +0 -0
  183. data/starter-app/vendor/plugins/attachment_fu/test/fixtures/files/foo.txt +1 -0
  184. data/starter-app/vendor/plugins/attachment_fu/test/fixtures/files/rails.png +0 -0
  185. data/starter-app/vendor/plugins/attachment_fu/test/geometry_test.rb +101 -0
  186. data/starter-app/vendor/plugins/attachment_fu/test/processors/image_science_test.rb +31 -0
  187. data/starter-app/vendor/plugins/attachment_fu/test/processors/mini_magick_test.rb +31 -0
  188. data/starter-app/vendor/plugins/attachment_fu/test/processors/rmagick_test.rb +241 -0
  189. data/starter-app/vendor/plugins/attachment_fu/test/schema.rb +86 -0
  190. data/starter-app/vendor/plugins/attachment_fu/test/test_helper.rb +142 -0
  191. data/starter-app/vendor/plugins/attachment_fu/test/validation_test.rb +55 -0
  192. data/starter-app/vendor/plugins/calendar_date_select/CHANGELOG +170 -0
  193. data/starter-app/vendor/plugins/calendar_date_select/MIT-LICENSE +20 -0
  194. data/starter-app/vendor/plugins/calendar_date_select/README +10 -0
  195. data/starter-app/vendor/plugins/calendar_date_select/init.rb +15 -0
  196. data/starter-app/vendor/plugins/calendar_date_select/js_test/functional/cds_test.html +324 -0
  197. data/starter-app/vendor/plugins/calendar_date_select/js_test/prototype.js +4184 -0
  198. data/starter-app/vendor/plugins/calendar_date_select/js_test/test.css +40 -0
  199. data/starter-app/vendor/plugins/calendar_date_select/js_test/unit/cds_helper_methods.html +46 -0
  200. data/starter-app/vendor/plugins/calendar_date_select/js_test/unittest.js +564 -0
  201. data/starter-app/vendor/plugins/calendar_date_select/lib/calendar_date_select.rb +192 -0
  202. data/starter-app/vendor/plugins/calendar_date_select/lib/includes_helper.rb +22 -0
  203. data/starter-app/vendor/plugins/calendar_date_select/public/images/calendar_date_select/calendar.gif +0 -0
  204. data/starter-app/vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/calendar_date_select.js +439 -0
  205. data/starter-app/vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/format_american.js +34 -0
  206. data/starter-app/vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/format_euro_24hr.js +7 -0
  207. data/starter-app/vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/format_finnish.js +24 -0
  208. data/starter-app/vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/format_hyphen_ampm.js +36 -0
  209. data/starter-app/vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/format_italian.js +24 -0
  210. data/starter-app/vendor/plugins/calendar_date_select/public/javascripts/calendar_date_select/locale/fi.js +10 -0
  211. data/starter-app/vendor/plugins/calendar_date_select/public/stylesheets/calendar_date_select/blue.css +130 -0
  212. data/starter-app/vendor/plugins/calendar_date_select/public/stylesheets/calendar_date_select/default.css +135 -0
  213. data/starter-app/vendor/plugins/calendar_date_select/public/stylesheets/calendar_date_select/plain.css +128 -0
  214. data/starter-app/vendor/plugins/calendar_date_select/public/stylesheets/calendar_date_select/red.css +135 -0
  215. data/starter-app/vendor/plugins/calendar_date_select/public/stylesheets/calendar_date_select/silver.css +133 -0
  216. data/starter-app/vendor/plugins/calendar_date_select/test/functional/calendar_date_select_test.rb +95 -0
  217. data/starter-app/vendor/plugins/calendar_date_select/test/functional/helper_methods_test.rb +15 -0
  218. data/starter-app/vendor/plugins/calendar_date_select/test/test_helper.rb +26 -0
  219. data/starter-app/vendor/plugins/engines/CHANGELOG +258 -0
  220. data/starter-app/vendor/plugins/engines/MIT-LICENSE +21 -0
  221. data/starter-app/vendor/plugins/engines/README +63 -0
  222. data/starter-app/vendor/plugins/engines/Rakefile +32 -0
  223. data/starter-app/vendor/plugins/engines/about.yml +7 -0
  224. data/starter-app/vendor/plugins/engines/boot.rb +18 -0
  225. data/starter-app/vendor/plugins/engines/generators/plugin_migration/USAGE +45 -0
  226. data/starter-app/vendor/plugins/engines/generators/plugin_migration/plugin_migration_generator.rb +79 -0
  227. data/starter-app/vendor/plugins/engines/generators/plugin_migration/templates/plugin_migration.erb +13 -0
  228. data/starter-app/vendor/plugins/engines/init.rb +2 -0
  229. data/starter-app/vendor/plugins/engines/lib/engines.rb +169 -0
  230. data/starter-app/vendor/plugins/engines/lib/engines/assets.rb +38 -0
  231. data/starter-app/vendor/plugins/engines/lib/engines/plugin.rb +125 -0
  232. data/starter-app/vendor/plugins/engines/lib/engines/plugin/list.rb +30 -0
  233. data/starter-app/vendor/plugins/engines/lib/engines/plugin/loader.rb +18 -0
  234. data/starter-app/vendor/plugins/engines/lib/engines/plugin/locator.rb +11 -0
  235. data/starter-app/vendor/plugins/engines/lib/engines/plugin/migrator.rb +60 -0
  236. data/starter-app/vendor/plugins/engines/lib/engines/rails_extensions/action_mailer.rb +85 -0
  237. data/starter-app/vendor/plugins/engines/lib/engines/rails_extensions/active_record.rb +24 -0
  238. data/starter-app/vendor/plugins/engines/lib/engines/rails_extensions/asset_helpers.rb +119 -0
  239. data/starter-app/vendor/plugins/engines/lib/engines/rails_extensions/dependencies.rb +145 -0
  240. data/starter-app/vendor/plugins/engines/lib/engines/rails_extensions/migrations.rb +161 -0
  241. data/starter-app/vendor/plugins/engines/lib/engines/rails_extensions/rails.rb +11 -0
  242. data/starter-app/vendor/plugins/engines/lib/engines/rails_extensions/routing.rb +84 -0
  243. data/starter-app/vendor/plugins/engines/lib/engines/testing.rb +87 -0
  244. data/starter-app/vendor/plugins/engines/tasks/engines.rake +176 -0
  245. data/starter-app/vendor/plugins/in_place_editing/README +14 -0
  246. data/starter-app/vendor/plugins/in_place_editing/Rakefile +22 -0
  247. data/starter-app/vendor/plugins/in_place_editing/init.rb +2 -0
  248. data/starter-app/vendor/plugins/in_place_editing/lib/in_place_editing.rb +25 -0
  249. data/starter-app/vendor/plugins/in_place_editing/lib/in_place_macros_helper.rb +71 -0
  250. data/starter-app/vendor/plugins/in_place_editing/test/in_place_editing_test.rb +69 -0
  251. data/starter-app/vendor/plugins/paginating_find/CHANGELOG +120 -0
  252. data/starter-app/vendor/plugins/paginating_find/README +89 -0
  253. data/starter-app/vendor/plugins/paginating_find/init.rb +2 -0
  254. data/starter-app/vendor/plugins/paginating_find/lib/paginating_find.rb +138 -0
  255. data/starter-app/vendor/plugins/paginating_find/lib/paging_enumerator.rb +158 -0
  256. data/starter-app/vendor/plugins/paginating_find/lib/paging_helper.rb +47 -0
  257. data/starter-app/vendor/plugins/paginating_find/test_app/Rakefile +10 -0
  258. data/starter-app/vendor/plugins/paginating_find/test_app/app/controllers/application.rb +2 -0
  259. data/starter-app/vendor/plugins/paginating_find/test_app/config/boot.rb +44 -0
  260. data/starter-app/vendor/plugins/paginating_find/test_app/config/database.yml +6 -0
  261. data/starter-app/vendor/plugins/paginating_find/test_app/config/environment.rb +53 -0
  262. data/starter-app/vendor/plugins/paginating_find/test_app/config/environments/test.rb +19 -0
  263. data/starter-app/vendor/plugins/paginating_find/test_app/config/routes.rb +22 -0
  264. data/starter-app/vendor/plugins/paginating_find/test_app/db/schema.rb +16 -0
  265. data/starter-app/vendor/plugins/paginating_find/test_app/script/breakpointer +3 -0
  266. data/starter-app/vendor/plugins/paginating_find/test_app/script/console +3 -0
  267. data/starter-app/vendor/plugins/paginating_find/test_app/test/fixtures/articles.yml +19 -0
  268. data/starter-app/vendor/plugins/paginating_find/test_app/test/fixtures/authors.yml +7 -0
  269. data/starter-app/vendor/plugins/paginating_find/test_app/test/fixtures/edits.yml +11 -0
  270. data/starter-app/vendor/plugins/paginating_find/test_app/test/fixtures/models.rb +18 -0
  271. data/starter-app/vendor/plugins/paginating_find/test_app/test/test_helper.rb +33 -0
  272. data/starter-app/vendor/plugins/paginating_find/test_app/test/unit/abstract_test.rb +7 -0
  273. data/starter-app/vendor/plugins/paginating_find/test_app/test/unit/group_test.rb +40 -0
  274. data/starter-app/vendor/plugins/paginating_find/test_app/test/unit/paginating_find_test.rb +194 -0
  275. data/starter-app/vendor/plugins/paginating_find/test_app/test/unit/paging_enumerator_test.rb +143 -0
  276. data/starter-app/vendor/plugins/spree/.rakeTasks +7 -0
  277. data/starter-app/vendor/plugins/spree/CHANGELOG +1 -0
  278. data/starter-app/vendor/plugins/spree/LICENSE +26 -0
  279. data/starter-app/vendor/plugins/spree/README +1 -0
  280. data/starter-app/vendor/plugins/spree/Rakefile +10 -0
  281. data/starter-app/vendor/plugins/spree/VERSION +1 -0
  282. data/starter-app/vendor/plugins/spree/app/controllers/account_controller.rb +48 -0
  283. data/starter-app/vendor/plugins/spree/app/controllers/admin/base_controller.rb +7 -0
  284. data/starter-app/vendor/plugins/spree/app/controllers/admin/categories_controller.rb +107 -0
  285. data/starter-app/vendor/plugins/spree/app/controllers/admin/images_controller.rb +15 -0
  286. data/starter-app/vendor/plugins/spree/app/controllers/admin/option_types_controller.rb +70 -0
  287. data/starter-app/vendor/plugins/spree/app/controllers/admin/orders_controller.rb +247 -0
  288. data/starter-app/vendor/plugins/spree/app/controllers/admin/overview_controller.rb +14 -0
  289. data/starter-app/vendor/plugins/spree/app/controllers/admin/products_controller.rb +207 -0
  290. data/starter-app/vendor/plugins/spree/app/controllers/admin/reports_controller.rb +53 -0
  291. data/starter-app/vendor/plugins/spree/app/controllers/admin/users_controller.rb +45 -0
  292. data/starter-app/vendor/plugins/spree/app/controllers/admin/variations_controller.rb +73 -0
  293. data/starter-app/vendor/plugins/spree/app/controllers/cart_controller.rb +45 -0
  294. data/starter-app/vendor/plugins/spree/app/controllers/checkout_controller.rb +184 -0
  295. data/starter-app/vendor/plugins/spree/app/controllers/rails_cart/base_controller.rb +47 -0
  296. data/starter-app/vendor/plugins/spree/app/controllers/store_controller.rb +27 -0
  297. data/starter-app/vendor/plugins/spree/app/helpers/account_helper.rb +2 -0
  298. data/starter-app/vendor/plugins/spree/app/helpers/admin/base_helper.rb +14 -0
  299. data/starter-app/vendor/plugins/spree/app/helpers/admin/categories_helper.rb +3 -0
  300. data/starter-app/vendor/plugins/spree/app/helpers/admin/option_values_helper.rb +2 -0
  301. data/starter-app/vendor/plugins/spree/app/helpers/admin/orders_helper.rb +11 -0
  302. data/starter-app/vendor/plugins/spree/app/helpers/admin/overview_helper.rb +12 -0
  303. data/starter-app/vendor/plugins/spree/app/helpers/admin/products_helper.rb +7 -0
  304. data/starter-app/vendor/plugins/spree/app/helpers/admin/users_helper.rb +2 -0
  305. data/starter-app/vendor/plugins/spree/app/helpers/admin/variations_helper.rb +2 -0
  306. data/starter-app/vendor/plugins/spree/app/helpers/cart_helper.rb +6 -0
  307. data/starter-app/vendor/plugins/spree/app/helpers/checkout_helper.rb +17 -0
  308. data/starter-app/vendor/plugins/spree/app/helpers/rails_cart/base_helper.rb +101 -0
  309. data/starter-app/vendor/plugins/spree/app/helpers/search_helper.rb +10 -0
  310. data/starter-app/vendor/plugins/spree/app/helpers/store_helper.rb +3 -0
  311. data/starter-app/vendor/plugins/spree/app/models/address.rb +17 -0
  312. data/starter-app/vendor/plugins/spree/app/models/cart.rb +37 -0
  313. data/starter-app/vendor/plugins/spree/app/models/cart_item.rb +29 -0
  314. data/starter-app/vendor/plugins/spree/app/models/category.rb +66 -0
  315. data/starter-app/vendor/plugins/spree/app/models/country.rb +3 -0
  316. data/starter-app/vendor/plugins/spree/app/models/credit_card.rb +24 -0
  317. data/starter-app/vendor/plugins/spree/app/models/image.rb +12 -0
  318. data/starter-app/vendor/plugins/spree/app/models/line_item.rb +24 -0
  319. data/starter-app/vendor/plugins/spree/app/models/option_type.rb +4 -0
  320. data/starter-app/vendor/plugins/spree/app/models/option_value.rb +5 -0
  321. data/starter-app/vendor/plugins/spree/app/models/order.rb +87 -0
  322. data/starter-app/vendor/plugins/spree/app/models/order_mailer.rb +22 -0
  323. data/starter-app/vendor/plugins/spree/app/models/order_operation.rb +7 -0
  324. data/starter-app/vendor/plugins/spree/app/models/payment.rb +49 -0
  325. data/starter-app/vendor/plugins/spree/app/models/product.rb +42 -0
  326. data/starter-app/vendor/plugins/spree/app/models/product_option_type.rb +5 -0
  327. data/starter-app/vendor/plugins/spree/app/models/search_criteria.rb +27 -0
  328. data/starter-app/vendor/plugins/spree/app/models/sku.rb +7 -0
  329. data/starter-app/vendor/plugins/spree/app/models/state.rb +3 -0
  330. data/starter-app/vendor/plugins/spree/app/models/tax_treatment.rb +2 -0
  331. data/starter-app/vendor/plugins/spree/app/models/txn.rb +7 -0
  332. data/starter-app/vendor/plugins/spree/app/models/variation.rb +8 -0
  333. data/starter-app/vendor/plugins/spree/app/views/account/index.rhtml +3 -0
  334. data/starter-app/vendor/plugins/spree/app/views/account/login.rhtml +12 -0
  335. data/starter-app/vendor/plugins/spree/app/views/account/signup.rhtml +16 -0
  336. data/starter-app/vendor/plugins/spree/app/views/admin/categories/_form.rhtml +24 -0
  337. data/starter-app/vendor/plugins/spree/app/views/admin/categories/edit.rhtml +9 -0
  338. data/starter-app/vendor/plugins/spree/app/views/admin/categories/list.rhtml +47 -0
  339. data/starter-app/vendor/plugins/spree/app/views/admin/categories/new.rhtml +8 -0
  340. data/starter-app/vendor/plugins/spree/app/views/admin/images/new.html.erb +10 -0
  341. data/starter-app/vendor/plugins/spree/app/views/admin/option_types/_form.rhtml +16 -0
  342. data/starter-app/vendor/plugins/spree/app/views/admin/option_types/_new_option_value.rhtml +13 -0
  343. data/starter-app/vendor/plugins/spree/app/views/admin/option_types/_option_values.rhtml +43 -0
  344. data/starter-app/vendor/plugins/spree/app/views/admin/option_types/edit.rhtml +8 -0
  345. data/starter-app/vendor/plugins/spree/app/views/admin/option_types/index.rhtml +23 -0
  346. data/starter-app/vendor/plugins/spree/app/views/admin/option_types/new.rhtml +8 -0
  347. data/starter-app/vendor/plugins/spree/app/views/admin/option_types/select.rhtml +28 -0
  348. data/starter-app/vendor/plugins/spree/app/views/admin/option_types/test.rhtml +8 -0
  349. data/starter-app/vendor/plugins/spree/app/views/admin/orders/_address.rhtml +37 -0
  350. data/starter-app/vendor/plugins/spree/app/views/admin/orders/index.rhtml +99 -0
  351. data/starter-app/vendor/plugins/spree/app/views/admin/orders/show.rhtml +72 -0
  352. data/starter-app/vendor/plugins/spree/app/views/admin/overview/index.rhtml +0 -0
  353. data/starter-app/vendor/plugins/spree/app/views/admin/products/_form.rhtml +65 -0
  354. data/starter-app/vendor/plugins/spree/app/views/admin/products/_menu.rhtml +7 -0
  355. data/starter-app/vendor/plugins/spree/app/views/admin/products/_new_variation.rhtml +11 -0
  356. data/starter-app/vendor/plugins/spree/app/views/admin/products/_option_types.rhtml +42 -0
  357. data/starter-app/vendor/plugins/spree/app/views/admin/products/_variations.rhtml +41 -0
  358. data/starter-app/vendor/plugins/spree/app/views/admin/products/edit.rhtml +8 -0
  359. data/starter-app/vendor/plugins/spree/app/views/admin/products/index.rhtml +66 -0
  360. data/starter-app/vendor/plugins/spree/app/views/admin/products/new.rhtml +9 -0
  361. data/starter-app/vendor/plugins/spree/app/views/admin/reports/index.rhtml +29 -0
  362. data/starter-app/vendor/plugins/spree/app/views/admin/reports/sales_total.rhtml +28 -0
  363. data/starter-app/vendor/plugins/spree/app/views/admin/users/_form.rhtml +29 -0
  364. data/starter-app/vendor/plugins/spree/app/views/admin/users/_menu.rhtml +5 -0
  365. data/starter-app/vendor/plugins/spree/app/views/admin/users/edit.rhtml +8 -0
  366. data/starter-app/vendor/plugins/spree/app/views/admin/users/index.rhtml +26 -0
  367. data/starter-app/vendor/plugins/spree/app/views/admin/users/new.rhtml +6 -0
  368. data/starter-app/vendor/plugins/spree/app/views/admin/users/show.rhtml +9 -0
  369. data/starter-app/vendor/plugins/spree/app/views/admin/variations/_form.rhtml +33 -0
  370. data/starter-app/vendor/plugins/spree/app/views/admin/variations/_option_values.rhtml +5 -0
  371. data/starter-app/vendor/plugins/spree/app/views/admin/variations/list.rhtml +23 -0
  372. data/starter-app/vendor/plugins/spree/app/views/admin/variations/new.rhtml +14 -0
  373. data/starter-app/vendor/plugins/spree/app/views/cart/index.rhtml +49 -0
  374. data/starter-app/vendor/plugins/spree/app/views/checkout/_address.rhtml +51 -0
  375. data/starter-app/vendor/plugins/spree/app/views/checkout/_address_ro.rhtml +18 -0
  376. data/starter-app/vendor/plugins/spree/app/views/checkout/_cart_item.rhtml +5 -0
  377. data/starter-app/vendor/plugins/spree/app/views/checkout/_extra.rhtml +1 -0
  378. data/starter-app/vendor/plugins/spree/app/views/checkout/addresses.rhtml +51 -0
  379. data/starter-app/vendor/plugins/spree/app/views/checkout/cvv.rhtml +15 -0
  380. data/starter-app/vendor/plugins/spree/app/views/checkout/empty_cart.rhtml +4 -0
  381. data/starter-app/vendor/plugins/spree/app/views/checkout/final_confirmation.rhtml +92 -0
  382. data/starter-app/vendor/plugins/spree/app/views/checkout/incomplete.rhtml +7 -0
  383. data/starter-app/vendor/plugins/spree/app/views/checkout/thank_you.rhtml +11 -0
  384. data/starter-app/vendor/plugins/spree/app/views/layouts/admin.rhtml +69 -0
  385. data/starter-app/vendor/plugins/spree/app/views/layouts/products.rhtml +20 -0
  386. data/starter-app/vendor/plugins/spree/app/views/layouts/simple.rhtml +37 -0
  387. data/starter-app/vendor/plugins/spree/app/views/order_mailer/cancel.rhtml +15 -0
  388. data/starter-app/vendor/plugins/spree/app/views/order_mailer/confirm.rhtml +18 -0
  389. data/starter-app/vendor/plugins/spree/app/views/shared/_images.html.erb +43 -0
  390. data/starter-app/vendor/plugins/spree/app/views/shared/_order_details.rhtml +35 -0
  391. data/starter-app/vendor/plugins/spree/app/views/shared/_paginate.rhtml +34 -0
  392. data/starter-app/vendor/plugins/spree/app/views/shared/_report_criteria.rhtml +32 -0
  393. data/starter-app/vendor/plugins/spree/app/views/shared/_tax_treatments.rhtml +12 -0
  394. data/starter-app/vendor/plugins/spree/app/views/store/_image.html.erb +5 -0
  395. data/starter-app/vendor/plugins/spree/app/views/store/_products.rhtml +10 -0
  396. data/starter-app/vendor/plugins/spree/app/views/store/_thumbnails.html.erb +9 -0
  397. data/starter-app/vendor/plugins/spree/app/views/store/list.rhtml +15 -0
  398. data/starter-app/vendor/plugins/spree/app/views/store/show.rhtml +69 -0
  399. data/starter-app/vendor/plugins/spree/assets/.htaccess +40 -0
  400. data/starter-app/vendor/plugins/spree/assets/404.html +30 -0
  401. data/starter-app/vendor/plugins/spree/assets/500.html +30 -0
  402. data/starter-app/vendor/plugins/spree/assets/dispatch.cgi +10 -0
  403. data/starter-app/vendor/plugins/spree/assets/dispatch.fcgi +24 -0
  404. data/starter-app/vendor/plugins/spree/assets/dispatch.rb +10 -0
  405. data/starter-app/vendor/plugins/spree/assets/favicon.ico +0 -0
  406. data/starter-app/vendor/plugins/spree/assets/images/amex_cid.gif +0 -0
  407. data/starter-app/vendor/plugins/spree/assets/images/creditcard.gif +0 -0
  408. data/starter-app/vendor/plugins/spree/assets/images/discover_cid.gif +0 -0
  409. data/starter-app/vendor/plugins/spree/assets/images/master_cid.jpg +0 -0
  410. data/starter-app/vendor/plugins/spree/assets/images/products/ror_bag.jpg +0 -0
  411. data/starter-app/vendor/plugins/spree/assets/images/products/ror_baseball_jersey.jpg +0 -0
  412. data/starter-app/vendor/plugins/spree/assets/images/products/ror_jr_spaghetti.jpg +0 -0
  413. data/starter-app/vendor/plugins/spree/assets/images/products/ror_mug.jpg +0 -0
  414. data/starter-app/vendor/plugins/spree/assets/images/products/ror_ringer_tshirt.jpg +0 -0
  415. data/starter-app/vendor/plugins/spree/assets/images/products/ror_stein.jpg +0 -0
  416. data/starter-app/vendor/plugins/spree/assets/images/products/ror_tote.jpg +0 -0
  417. data/starter-app/vendor/plugins/spree/assets/images/rails.png +0 -0
  418. data/starter-app/vendor/plugins/spree/assets/images/spinner.gif +0 -0
  419. data/starter-app/vendor/plugins/spree/assets/images/spree/progress.gif +0 -0
  420. data/starter-app/vendor/plugins/spree/assets/images/spree/spinner.gif +0 -0
  421. data/starter-app/vendor/plugins/spree/assets/images/spree/spree_logo142x65.gif +0 -0
  422. data/starter-app/vendor/plugins/spree/assets/images/spree/spree_logo245x112.gif +0 -0
  423. data/starter-app/vendor/plugins/spree/assets/images/visa_cid.gif +0 -0
  424. data/starter-app/vendor/plugins/spree/assets/javascripts/application.js +2 -0
  425. data/starter-app/vendor/plugins/spree/assets/javascripts/controls.js +833 -0
  426. data/starter-app/vendor/plugins/spree/assets/javascripts/dragdrop.js +942 -0
  427. data/starter-app/vendor/plugins/spree/assets/javascripts/effects.js +1088 -0
  428. data/starter-app/vendor/plugins/spree/assets/javascripts/lowpro.js +307 -0
  429. data/starter-app/vendor/plugins/spree/assets/javascripts/prototype.js +2515 -0
  430. data/starter-app/vendor/plugins/spree/assets/robots.txt +1 -0
  431. data/starter-app/vendor/plugins/spree/assets/stylesheets/cart/_controller.css +71 -0
  432. data/starter-app/vendor/plugins/spree/assets/stylesheets/checkout/_controller.css +31 -0
  433. data/starter-app/vendor/plugins/spree/assets/stylesheets/fullscreen.css +63 -0
  434. data/starter-app/vendor/plugins/spree/assets/stylesheets/orders/_controller.css +3 -0
  435. data/starter-app/vendor/plugins/spree/assets/stylesheets/products/_controller.css +38 -0
  436. data/starter-app/vendor/plugins/spree/assets/stylesheets/spree-admin.css +348 -0
  437. data/starter-app/vendor/plugins/spree/assets/stylesheets/spree.css +66 -0
  438. data/starter-app/vendor/plugins/spree/assets/stylesheets/store/_controller.css +23 -0
  439. data/starter-app/vendor/plugins/spree/db/migrate/001_create_addresses.rb +20 -0
  440. data/starter-app/vendor/plugins/spree/db/migrate/002_create_cart_items.rb +14 -0
  441. data/starter-app/vendor/plugins/spree/db/migrate/003_create_carts.rb +12 -0
  442. data/starter-app/vendor/plugins/spree/db/migrate/004_create_categories.rb +15 -0
  443. data/starter-app/vendor/plugins/spree/db/migrate/005_create_categories_products.rb +12 -0
  444. data/starter-app/vendor/plugins/spree/db/migrate/006_create_line_items.rb +17 -0
  445. data/starter-app/vendor/plugins/spree/db/migrate/007_create_option_values.rb +15 -0
  446. data/starter-app/vendor/plugins/spree/db/migrate/008_create_orders.rb +24 -0
  447. data/starter-app/vendor/plugins/spree/db/migrate/009_create_products.rb +20 -0
  448. data/starter-app/vendor/plugins/spree/db/migrate/010_create_txns.rb +18 -0
  449. data/starter-app/vendor/plugins/spree/db/migrate/011_create_variations.rb +11 -0
  450. data/starter-app/vendor/plugins/spree/db/migrate/012_create_tax_treatments.rb +23 -0
  451. data/starter-app/vendor/plugins/spree/db/migrate/013_create_skus.rb +13 -0
  452. data/starter-app/vendor/plugins/spree/db/migrate/014_create_countries.rb +11 -0
  453. data/starter-app/vendor/plugins/spree/db/migrate/015_create_states.rb +13 -0
  454. data/starter-app/vendor/plugins/spree/db/migrate/016_create_option_types.rb +13 -0
  455. data/starter-app/vendor/plugins/spree/db/migrate/017_create_product_option_types.rb +14 -0
  456. data/starter-app/vendor/plugins/spree/db/migrate/018_create_option_values_variations.rb +12 -0
  457. data/starter-app/vendor/plugins/spree/db/migrate/019_create_images.rb +19 -0
  458. data/starter-app/vendor/plugins/spree/db/migrate/020_create_credit_cards.rb +20 -0
  459. data/starter-app/vendor/plugins/spree/db/migrate/021_create_order_operations.rb +14 -0
  460. data/starter-app/vendor/plugins/spree/init.rb +11 -0
  461. data/starter-app/vendor/plugins/spree/install.rb +3 -0
  462. data/starter-app/vendor/plugins/spree/lib/constants/enumerable_constants.rb +207 -0
  463. data/starter-app/vendor/plugins/spree/lib/format.rb +12 -0
  464. data/starter-app/vendor/plugins/spree/lib/gateway/bogus_gateway.rb +63 -0
  465. data/starter-app/vendor/plugins/spree/lib/shipping/flat_rate.rb +10 -0
  466. data/starter-app/vendor/plugins/spree/lib/tasks/spree_bootstrap.rake +24 -0
  467. data/starter-app/vendor/plugins/spree/lib/tax/sales_tax.rb +26 -0
  468. data/starter-app/vendor/plugins/spree/routes.rb +3 -0
  469. data/starter-app/vendor/plugins/spree/script/about +3 -0
  470. data/starter-app/vendor/plugins/spree/script/breakpointer +3 -0
  471. data/starter-app/vendor/plugins/spree/script/console +3 -0
  472. data/starter-app/vendor/plugins/spree/script/destroy +3 -0
  473. data/starter-app/vendor/plugins/spree/script/generate +3 -0
  474. data/starter-app/vendor/plugins/spree/script/performance/benchmarker +3 -0
  475. data/starter-app/vendor/plugins/spree/script/performance/profiler +3 -0
  476. data/starter-app/vendor/plugins/spree/script/plugin +3 -0
  477. data/starter-app/vendor/plugins/spree/script/process/inspector +3 -0
  478. data/starter-app/vendor/plugins/spree/script/process/reaper +3 -0
  479. data/starter-app/vendor/plugins/spree/script/process/spawner +3 -0
  480. data/starter-app/vendor/plugins/spree/script/runner +3 -0
  481. data/starter-app/vendor/plugins/spree/script/server +3 -0
  482. data/starter-app/vendor/plugins/spree/test/fixtures/addresses.yml +29 -0
  483. data/starter-app/vendor/plugins/spree/test/fixtures/categories.yml +40 -0
  484. data/starter-app/vendor/plugins/spree/test/fixtures/line_items.yml +32 -0
  485. data/starter-app/vendor/plugins/spree/test/fixtures/orders.yml +17 -0
  486. data/starter-app/vendor/plugins/spree/test/fixtures/products.yml +63 -0
  487. data/starter-app/vendor/plugins/spree/test/fixtures/products_tags.yml +10 -0
  488. data/starter-app/vendor/plugins/spree/test/fixtures/roles.yml +6 -0
  489. data/starter-app/vendor/plugins/spree/test/fixtures/roles_users.yml +3 -0
  490. data/starter-app/vendor/plugins/spree/test/fixtures/skus.yml +5 -0
  491. data/starter-app/vendor/plugins/spree/test/fixtures/tags.yml +7 -0
  492. data/starter-app/vendor/plugins/spree/test/fixtures/tax_treatments.yml +7 -0
  493. data/starter-app/vendor/plugins/spree/test/fixtures/txns.yml +13 -0
  494. data/starter-app/vendor/plugins/spree/test/fixtures/users.yml +40 -0
  495. data/starter-app/vendor/plugins/spree/test/fixtures/variations.yml +16 -0
  496. data/starter-app/vendor/plugins/spree/test/functional/account_controller_test.rb +129 -0
  497. data/starter-app/vendor/plugins/spree/test/functional/admin/base_controller_test.rb +18 -0
  498. data/starter-app/vendor/plugins/spree/test/functional/admin/option_groups_controller_test.rb +18 -0
  499. data/starter-app/vendor/plugins/spree/test/functional/admin/option_values_controller_test.rb +18 -0
  500. data/starter-app/vendor/plugins/spree/test/functional/admin/orders_controller_test.rb +18 -0
  501. data/starter-app/vendor/plugins/spree/test/functional/admin/overview_controller_test.rb +18 -0
  502. data/starter-app/vendor/plugins/spree/test/functional/admin/products_controller_test.rb +125 -0
  503. data/starter-app/vendor/plugins/spree/test/functional/admin/users_controller_test.rb +58 -0
  504. data/starter-app/vendor/plugins/spree/test/functional/admin/variations_controller_test.rb +18 -0
  505. data/starter-app/vendor/plugins/spree/test/functional/application_controller_test.rb +30 -0
  506. data/starter-app/vendor/plugins/spree/test/functional/cart_controller_test.rb +76 -0
  507. data/starter-app/vendor/plugins/spree/test/functional/checkout_controller_test.rb +20 -0
  508. data/starter-app/vendor/plugins/spree/test/integration/authentication_test.rb +53 -0
  509. data/starter-app/vendor/plugins/spree/test/integration/product_admin_test.rb +135 -0
  510. data/starter-app/vendor/plugins/spree/test/integration/user_stories_test.rb +59 -0
  511. data/starter-app/vendor/plugins/spree/test/integration/variations_test.rb +24 -0
  512. data/starter-app/vendor/plugins/spree/test/test_helper.rb +45 -0
  513. data/starter-app/vendor/plugins/spree/test/unit/address_test.rb +10 -0
  514. data/starter-app/vendor/plugins/spree/test/unit/cart_item_test.rb +55 -0
  515. data/starter-app/vendor/plugins/spree/test/unit/cart_test.rb +35 -0
  516. data/starter-app/vendor/plugins/spree/test/unit/category_test.rb +52 -0
  517. data/starter-app/vendor/plugins/spree/test/unit/line_item_test.rb +61 -0
  518. data/starter-app/vendor/plugins/spree/test/unit/option_group_test.rb +12 -0
  519. data/starter-app/vendor/plugins/spree/test/unit/order_test.rb +49 -0
  520. data/starter-app/vendor/plugins/spree/test/unit/product_test.rb +107 -0
  521. data/starter-app/vendor/plugins/spree/test/unit/role_test.rb +10 -0
  522. data/starter-app/vendor/plugins/spree/test/unit/sales_tax_test.rb +46 -0
  523. data/starter-app/vendor/plugins/spree/test/unit/sku_test.rb +10 -0
  524. data/starter-app/vendor/plugins/spree/test/unit/tag_test.rb +9 -0
  525. data/starter-app/vendor/plugins/spree/test/unit/tax_treatment_test.rb +10 -0
  526. data/starter-app/vendor/plugins/spree/test/unit/txn_test.rb +10 -0
  527. data/starter-app/vendor/plugins/spree/test/unit/variation_test.rb +9 -0
  528. data/starter-app/vendor/plugins/spree/uninstall.rb +1 -0
  529. data/tasks/deployment.rake +34 -0
  530. data/tasks/environment.rake +7 -0
  531. data/tasks/website.rake +17 -0
  532. data/test/test_helper.rb +2 -0
  533. data/test/test_railscart.rb +11 -0
  534. metadata +628 -0
@@ -0,0 +1,39 @@
1
+ module Technoweenie # :nodoc:
2
+ module AttachmentFu # :nodoc:
3
+ module Backends
4
+ # Methods for DB backed attachments
5
+ module DbFileBackend
6
+ def self.included(base) #:nodoc:
7
+ Object.const_set(:DbFile, Class.new(ActiveRecord::Base)) unless Object.const_defined?(:DbFile)
8
+ base.belongs_to :db_file, :class_name => '::DbFile', :foreign_key => 'db_file_id'
9
+ end
10
+
11
+ # Creates a temp file with the current db data.
12
+ def create_temp_file
13
+ write_to_temp_file current_data
14
+ end
15
+
16
+ # Gets the current data from the database
17
+ def current_data
18
+ db_file.data
19
+ end
20
+
21
+ protected
22
+ # Destroys the file. Called in the after_destroy callback
23
+ def destroy_file
24
+ db_file.destroy if db_file
25
+ end
26
+
27
+ # Saves the data to the DbFile model
28
+ def save_to_storage
29
+ if save_attachment?
30
+ (db_file || build_db_file).data = temp_data
31
+ db_file.save!
32
+ self.class.update_all ['db_file_id = ?', self.db_file_id = db_file.id], ['id = ?', id]
33
+ end
34
+ true
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,97 @@
1
+ require 'ftools'
2
+ module Technoweenie # :nodoc:
3
+ module AttachmentFu # :nodoc:
4
+ module Backends
5
+ # Methods for file system backed attachments
6
+ module FileSystemBackend
7
+ def self.included(base) #:nodoc:
8
+ base.before_update :rename_file
9
+ end
10
+
11
+ # Gets the full path to the filename in this format:
12
+ #
13
+ # # This assumes a model name like MyModel
14
+ # # public/#{table_name} is the default filesystem path
15
+ # RAILS_ROOT/public/my_models/5/blah.jpg
16
+ #
17
+ # Overwrite this method in your model to customize the filename.
18
+ # The optional thumbnail argument will output the thumbnail's filename.
19
+ def full_filename(thumbnail = nil)
20
+ file_system_path = (thumbnail ? thumbnail_class : self).attachment_options[:path_prefix].to_s
21
+ File.join(RAILS_ROOT, file_system_path, *partitioned_path(thumbnail_name_for(thumbnail)))
22
+ end
23
+
24
+ # Used as the base path that #public_filename strips off full_filename to create the public path
25
+ def base_path
26
+ @base_path ||= File.join(RAILS_ROOT, 'public')
27
+ end
28
+
29
+ # The attachment ID used in the full path of a file
30
+ def attachment_path_id
31
+ ((respond_to?(:parent_id) && parent_id) || id).to_i
32
+ end
33
+
34
+ # overrwrite this to do your own app-specific partitioning.
35
+ # you can thank Jamis Buck for this: http://www.37signals.com/svn/archives2/id_partitioning.php
36
+ def partitioned_path(*args)
37
+ ("%08d" % attachment_path_id).scan(/..../) + args
38
+ end
39
+
40
+ # Gets the public path to the file
41
+ # The optional thumbnail argument will output the thumbnail's filename.
42
+ def public_filename(thumbnail = nil)
43
+ full_filename(thumbnail).gsub %r(^#{Regexp.escape(base_path)}), ''
44
+ end
45
+
46
+ def filename=(value)
47
+ @old_filename = full_filename unless filename.nil? || @old_filename
48
+ write_attribute :filename, sanitize_filename(value)
49
+ end
50
+
51
+ # Creates a temp file from the currently saved file.
52
+ def create_temp_file
53
+ copy_to_temp_file full_filename
54
+ end
55
+
56
+ protected
57
+ # Destroys the file. Called in the after_destroy callback
58
+ def destroy_file
59
+ FileUtils.rm full_filename
60
+ # remove directory also if it is now empty
61
+ Dir.rmdir(File.dirname(full_filename)) if (Dir.entries(File.dirname(full_filename))-['.','..']).empty?
62
+ rescue
63
+ logger.info "Exception destroying #{full_filename.inspect}: [#{$!.class.name}] #{$1.to_s}"
64
+ logger.warn $!.backtrace.collect { |b| " > #{b}" }.join("\n")
65
+ end
66
+
67
+ # Renames the given file before saving
68
+ def rename_file
69
+ return unless @old_filename && @old_filename != full_filename
70
+ if save_attachment? && File.exists?(@old_filename)
71
+ FileUtils.rm @old_filename
72
+ elsif File.exists?(@old_filename)
73
+ FileUtils.mv @old_filename, full_filename
74
+ end
75
+ @old_filename = nil
76
+ true
77
+ end
78
+
79
+ # Saves the file to the file system
80
+ def save_to_storage
81
+ if save_attachment?
82
+ # TODO: This overwrites the file if it exists, maybe have an allow_overwrite option?
83
+ FileUtils.mkdir_p(File.dirname(full_filename))
84
+ File.cp(temp_path, full_filename)
85
+ File.chmod(attachment_options[:chmod] || 0644, full_filename)
86
+ end
87
+ @old_filename = nil
88
+ true
89
+ end
90
+
91
+ def current_data
92
+ File.file?(full_filename) ? File.read(full_filename) : nil
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,309 @@
1
+ module Technoweenie # :nodoc:
2
+ module AttachmentFu # :nodoc:
3
+ module Backends
4
+ # = AWS::S3 Storage Backend
5
+ #
6
+ # Enables use of {Amazon's Simple Storage Service}[http://aws.amazon.com/s3] as a storage mechanism
7
+ #
8
+ # == Requirements
9
+ #
10
+ # Requires the {AWS::S3 Library}[http://amazon.rubyforge.org] for S3 by Marcel Molina Jr. installed either
11
+ # as a gem or a as a Rails plugin.
12
+ #
13
+ # == Configuration
14
+ #
15
+ # Configuration is done via <tt>RAILS_ROOT/config/amazon_s3.yml</tt> and is loaded according to the <tt>RAILS_ENV</tt>.
16
+ # The minimum connection options that you must specify are a bucket name, your access key id and your secret access key.
17
+ # If you don't already have your access keys, all you need to sign up for the S3 service is an account at Amazon.
18
+ # You can sign up for S3 and get access keys by visiting http://aws.amazon.com/s3.
19
+ #
20
+ # Example configuration (RAILS_ROOT/config/amazon_s3.yml)
21
+ #
22
+ # development:
23
+ # bucket_name: appname_development
24
+ # access_key_id: <your key>
25
+ # secret_access_key: <your key>
26
+ #
27
+ # test:
28
+ # bucket_name: appname_test
29
+ # access_key_id: <your key>
30
+ # secret_access_key: <your key>
31
+ #
32
+ # production:
33
+ # bucket_name: appname
34
+ # access_key_id: <your key>
35
+ # secret_access_key: <your key>
36
+ #
37
+ # You can change the location of the config path by passing a full path to the :s3_config_path option.
38
+ #
39
+ # has_attachment :storage => :s3, :s3_config_path => (RAILS_ROOT + '/config/s3.yml')
40
+ #
41
+ # === Required configuration parameters
42
+ #
43
+ # * <tt>:access_key_id</tt> - The access key id for your S3 account. Provided by Amazon.
44
+ # * <tt>:secret_access_key</tt> - The secret access key for your S3 account. Provided by Amazon.
45
+ # * <tt>:bucket_name</tt> - A unique bucket name (think of the bucket_name as being like a database name).
46
+ #
47
+ # If any of these required arguments is missing, a MissingAccessKey exception will be raised from AWS::S3.
48
+ #
49
+ # == About bucket names
50
+ #
51
+ # Bucket names have to be globaly unique across the S3 system. And you can only have up to 100 of them,
52
+ # so it's a good idea to think of a bucket as being like a database, hence the correspondance in this
53
+ # implementation to the development, test, and production environments.
54
+ #
55
+ # The number of objects you can store in a bucket is, for all intents and purposes, unlimited.
56
+ #
57
+ # === Optional configuration parameters
58
+ #
59
+ # * <tt>:server</tt> - The server to make requests to. Defaults to <tt>s3.amazonaws.com</tt>.
60
+ # * <tt>:port</tt> - The port to the requests should be made on. Defaults to 80 or 443 if <tt>:use_ssl</tt> is set.
61
+ # * <tt>:use_ssl</tt> - If set to true, <tt>:port</tt> will be implicitly set to 443, unless specified otherwise. Defaults to false.
62
+ #
63
+ # == Usage
64
+ #
65
+ # To specify S3 as the storage mechanism for a model, set the acts_as_attachment <tt>:storage</tt> option to <tt>:s3</tt>.
66
+ #
67
+ # class Photo < ActiveRecord::Base
68
+ # has_attachment :storage => :s3
69
+ # end
70
+ #
71
+ # === Customizing the path
72
+ #
73
+ # By default, files are prefixed using a pseudo hierarchy in the form of <tt>:table_name/:id</tt>, which results
74
+ # in S3 urls that look like: http(s)://:server/:bucket_name/:table_name/:id/:filename with :table_name
75
+ # representing the customizable portion of the path. You can customize this prefix using the <tt>:path_prefix</tt>
76
+ # option:
77
+ #
78
+ # class Photo < ActiveRecord::Base
79
+ # has_attachment :storage => :s3, :path_prefix => 'my/custom/path'
80
+ # end
81
+ #
82
+ # Which would result in URLs like <tt>http(s)://:server/:bucket_name/my/custom/path/:id/:filename.</tt>
83
+ #
84
+ # === Permissions
85
+ #
86
+ # By default, files are stored on S3 with public access permissions. You can customize this using
87
+ # the <tt>:s3_access</tt> option to <tt>has_attachment</tt>. Available values are
88
+ # <tt>:private</tt>, <tt>:public_read_write</tt>, and <tt>:authenticated_read</tt>.
89
+ #
90
+ # === Other options
91
+ #
92
+ # Of course, all the usual configuration options apply, such as content_type and thumbnails:
93
+ #
94
+ # class Photo < ActiveRecord::Base
95
+ # has_attachment :storage => :s3, :content_type => ['application/pdf', :image], :resize_to => 'x50'
96
+ # has_attachment :storage => :s3, :thumbnails => { :thumb => [50, 50], :geometry => 'x50' }
97
+ # end
98
+ #
99
+ # === Accessing S3 URLs
100
+ #
101
+ # You can get an object's URL using the s3_url accessor. For example, assuming that for your postcard app
102
+ # you had a bucket name like 'postcard_world_development', and an attachment model called Photo:
103
+ #
104
+ # @postcard.s3_url # => http(s)://s3.amazonaws.com/postcard_world_development/photos/1/mexico.jpg
105
+ #
106
+ # The resulting url is in the form: http(s)://:server/:bucket_name/:table_name/:id/:file.
107
+ # The optional thumbnail argument will output the thumbnail's filename (if any).
108
+ #
109
+ # Additionally, you can get an object's base path relative to the bucket root using
110
+ # <tt>base_path</tt>:
111
+ #
112
+ # @photo.file_base_path # => photos/1
113
+ #
114
+ # And the full path (including the filename) using <tt>full_filename</tt>:
115
+ #
116
+ # @photo.full_filename # => photos/
117
+ #
118
+ # Niether <tt>base_path</tt> or <tt>full_filename</tt> include the bucket name as part of the path.
119
+ # You can retrieve the bucket name using the <tt>bucket_name</tt> method.
120
+ module S3Backend
121
+ class RequiredLibraryNotFoundError < StandardError; end
122
+ class ConfigFileNotFoundError < StandardError; end
123
+
124
+ def self.included(base) #:nodoc:
125
+ mattr_reader :bucket_name, :s3_config
126
+
127
+ begin
128
+ require 'aws/s3'
129
+ include AWS::S3
130
+ rescue LoadError
131
+ raise RequiredLibraryNotFoundError.new('AWS::S3 could not be loaded')
132
+ end
133
+
134
+ begin
135
+ @@s3_config_path = base.attachment_options[:s3_config_path] || (RAILS_ROOT + '/config/amazon_s3.yml')
136
+ @@s3_config = @@s3_config = YAML.load_file(@@s3_config_path)[RAILS_ENV].symbolize_keys
137
+ #rescue
138
+ # raise ConfigFileNotFoundError.new('File %s not found' % @@s3_config_path)
139
+ end
140
+
141
+ @@bucket_name = s3_config[:bucket_name]
142
+
143
+ Base.establish_connection!(
144
+ :access_key_id => s3_config[:access_key_id],
145
+ :secret_access_key => s3_config[:secret_access_key],
146
+ :server => s3_config[:server],
147
+ :port => s3_config[:port],
148
+ :use_ssl => s3_config[:use_ssl]
149
+ )
150
+
151
+ # Bucket.create(@@bucket_name)
152
+
153
+ base.before_update :rename_file
154
+ end
155
+
156
+ def self.protocol
157
+ @protocol ||= s3_config[:use_ssl] ? 'https://' : 'http://'
158
+ end
159
+
160
+ def self.hostname
161
+ @hostname ||= s3_config[:server] || AWS::S3::DEFAULT_HOST
162
+ end
163
+
164
+ def self.port_string
165
+ @port_string ||= s3_config[:port] == (s3_config[:use_ssl] ? 443 : 80) ? '' : ":#{s3_config[:port]}"
166
+ end
167
+
168
+ module ClassMethods
169
+ def s3_protocol
170
+ Technoweenie::AttachmentFu::Backends::S3Backend.protocol
171
+ end
172
+
173
+ def s3_hostname
174
+ Technoweenie::AttachmentFu::Backends::S3Backend.hostname
175
+ end
176
+
177
+ def s3_port_string
178
+ Technoweenie::AttachmentFu::Backends::S3Backend.port_string
179
+ end
180
+ end
181
+
182
+ # Overwrites the base filename writer in order to store the old filename
183
+ def filename=(value)
184
+ @old_filename = filename unless filename.nil? || @old_filename
185
+ write_attribute :filename, sanitize_filename(value)
186
+ end
187
+
188
+ # The attachment ID used in the full path of a file
189
+ def attachment_path_id
190
+ ((respond_to?(:parent_id) && parent_id) || id).to_s
191
+ end
192
+
193
+ # The pseudo hierarchy containing the file relative to the bucket name
194
+ # Example: <tt>:table_name/:id</tt>
195
+ def base_path
196
+ File.join(attachment_options[:path_prefix], attachment_path_id)
197
+ end
198
+
199
+ # The full path to the file relative to the bucket name
200
+ # Example: <tt>:table_name/:id/:filename</tt>
201
+ def full_filename(thumbnail = nil)
202
+ File.join(base_path, thumbnail_name_for(thumbnail))
203
+ end
204
+
205
+ # All public objects are accessible via a GET request to the S3 servers. You can generate a
206
+ # url for an object using the s3_url method.
207
+ #
208
+ # @photo.s3_url
209
+ #
210
+ # The resulting url is in the form: <tt>http(s)://:server/:bucket_name/:table_name/:id/:file</tt> where
211
+ # the <tt>:server</tt> variable defaults to <tt>AWS::S3 URL::DEFAULT_HOST</tt> (s3.amazonaws.com) and can be
212
+ # set using the configuration parameters in <tt>RAILS_ROOT/config/amazon_s3.yml</tt>.
213
+ #
214
+ # The optional thumbnail argument will output the thumbnail's filename (if any).
215
+ def s3_url(thumbnail = nil)
216
+ File.join(s3_protocol + s3_hostname + s3_port_string, bucket_name, full_filename(thumbnail))
217
+ end
218
+ alias :public_filename :s3_url
219
+
220
+ # All private objects are accessible via an authenticated GET request to the S3 servers. You can generate an
221
+ # authenticated url for an object like this:
222
+ #
223
+ # @photo.authenticated_s3_url
224
+ #
225
+ # By default authenticated urls expire 5 minutes after they were generated.
226
+ #
227
+ # Expiration options can be specified either with an absolute time using the <tt>:expires</tt> option,
228
+ # or with a number of seconds relative to now with the <tt>:expires_in</tt> option:
229
+ #
230
+ # # Absolute expiration date (October 13th, 2025)
231
+ # @photo.authenticated_s3_url(:expires => Time.mktime(2025,10,13).to_i)
232
+ #
233
+ # # Expiration in five hours from now
234
+ # @photo.authenticated_s3_url(:expires_in => 5.hours)
235
+ #
236
+ # You can specify whether the url should go over SSL with the <tt>:use_ssl</tt> option.
237
+ # By default, the ssl settings for the current connection will be used:
238
+ #
239
+ # @photo.authenticated_s3_url(:use_ssl => true)
240
+ #
241
+ # Finally, the optional thumbnail argument will output the thumbnail's filename (if any):
242
+ #
243
+ # @photo.authenticated_s3_url('thumbnail', :expires_in => 5.hours, :use_ssl => true)
244
+ def authenticated_s3_url(*args)
245
+ thumbnail = args.first.is_a?(String) ? args.first : nil
246
+ options = args.last.is_a?(Hash) ? args.last : {}
247
+ S3Object.url_for(full_filename(thumbnail), bucket_name, options)
248
+ end
249
+
250
+ def create_temp_file
251
+ write_to_temp_file current_data
252
+ end
253
+
254
+ def current_data
255
+ S3Object.value full_filename, bucket_name
256
+ end
257
+
258
+ def s3_protocol
259
+ Technoweenie::AttachmentFu::Backends::S3Backend.protocol
260
+ end
261
+
262
+ def s3_hostname
263
+ Technoweenie::AttachmentFu::Backends::S3Backend.hostname
264
+ end
265
+
266
+ def s3_port_string
267
+ Technoweenie::AttachmentFu::Backends::S3Backend.port_string
268
+ end
269
+
270
+ protected
271
+ # Called in the after_destroy callback
272
+ def destroy_file
273
+ S3Object.delete full_filename, bucket_name
274
+ end
275
+
276
+ def rename_file
277
+ return unless @old_filename && @old_filename != filename
278
+
279
+ old_full_filename = File.join(base_path, @old_filename)
280
+
281
+ S3Object.rename(
282
+ old_full_filename,
283
+ full_filename,
284
+ bucket_name,
285
+ :access => attachment_options[:s3_access]
286
+ )
287
+
288
+ @old_filename = nil
289
+ true
290
+ end
291
+
292
+ def save_to_storage
293
+ if save_attachment?
294
+ S3Object.store(
295
+ full_filename,
296
+ (temp_path ? File.open(temp_path) : temp_data),
297
+ bucket_name,
298
+ :content_type => content_type,
299
+ :access => attachment_options[:s3_access]
300
+ )
301
+ end
302
+
303
+ @old_filename = nil
304
+ true
305
+ end
306
+ end
307
+ end
308
+ end
309
+ end
@@ -0,0 +1,61 @@
1
+ require 'image_science'
2
+ module Technoweenie # :nodoc:
3
+ module AttachmentFu # :nodoc:
4
+ module Processors
5
+ module ImageScienceProcessor
6
+ def self.included(base)
7
+ base.send :extend, ClassMethods
8
+ base.alias_method_chain :process_attachment, :processing
9
+ end
10
+
11
+ module ClassMethods
12
+ # Yields a block containing an RMagick Image for the given binary data.
13
+ def with_image(file, &block)
14
+ ::ImageScience.with_image file, &block
15
+ end
16
+ end
17
+
18
+ protected
19
+ def process_attachment_with_processing
20
+ return unless process_attachment_without_processing && image?
21
+ with_image do |img|
22
+ self.width = img.width if respond_to?(:width)
23
+ self.height = img.height if respond_to?(:height)
24
+ resize_image_or_thumbnail! img
25
+ end
26
+ end
27
+
28
+ # Performs the actual resizing operation for a thumbnail
29
+ def resize_image(img, size)
30
+ # create a dummy temp file to write to
31
+ # ImageScience doesn't handle all gifs properly, so it converts them to
32
+ # pngs for thumbnails. It has something to do with trying to save gifs
33
+ # with a larger palette than 256 colors, which is all the gif format
34
+ # supports.
35
+ filename.sub! /gif$/, 'png'
36
+ content_type.sub!(/gif$/, 'png')
37
+ self.temp_path = write_to_temp_file(filename)
38
+ grab_dimensions = lambda do |img|
39
+ self.width = img.width if respond_to?(:width)
40
+ self.height = img.height if respond_to?(:height)
41
+ img.save self.temp_path
42
+ self.size = File.size(self.temp_path)
43
+ callback_with_args :after_resize, img
44
+ end
45
+
46
+ size = size.first if size.is_a?(Array) && size.length == 1
47
+ if size.is_a?(Fixnum) || (size.is_a?(Array) && size.first.is_a?(Fixnum))
48
+ if size.is_a?(Fixnum)
49
+ img.thumbnail(size, &grab_dimensions)
50
+ else
51
+ img.resize(size[0], size[1], &grab_dimensions)
52
+ end
53
+ else
54
+ new_size = [img.width, img.height] / size.to_s
55
+ img.resize(new_size[0], new_size[1], &grab_dimensions)
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end